this repo has no description

initial impl

+4
.env.example
··· 1 + JETSTREAM_URL="" 2 + LABELER_URL="" 3 + LABELER_KEY="" 4 + REDIS_ADDR=""
+4
.gitignore
··· 1 1 dontshowmethis 2 + node_modules/ 3 + labels.db* 4 + .env 5 + *.js
+2
go.mod
··· 16 16 github.com/carlmjohnson/versioninfo v0.22.5 // indirect 17 17 github.com/cespare/xxhash/v2 v2.3.0 // indirect 18 18 github.com/cpuguy83/go-md2man/v2 v2.0.5 // indirect 19 + github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect 19 20 github.com/felixge/httpsnoop v1.0.4 // indirect 20 21 github.com/go-logr/logr v1.4.1 // indirect 21 22 github.com/go-logr/stdr v1.2.2 // indirect ··· 55 56 github.com/prometheus/client_model v0.6.1 // indirect 56 57 github.com/prometheus/common v0.54.0 // indirect 57 58 github.com/prometheus/procfs v0.15.1 // indirect 59 + github.com/redis/go-redis/v9 v9.8.0 // indirect 58 60 github.com/russross/blackfriday/v2 v2.1.0 // indirect 59 61 github.com/spaolacci/murmur3 v1.1.0 // indirect 60 62 github.com/whyrusleeping/cbor-gen v0.2.1-0.20241030202151-b7a6831be65e // indirect
+4
go.sum
··· 16 16 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 17 17 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 18 18 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 19 + github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= 20 + github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= 19 21 github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= 20 22 github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= 21 23 github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= ··· 124 126 github.com/prometheus/common v0.54.0/go.mod h1:/TQgMJP5CuVYveyT7n/0Ix8yLNNXy9yRSkhnLTHPDIQ= 125 127 github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= 126 128 github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= 129 + github.com/redis/go-redis/v9 v9.8.0 h1:q3nRvjrlge/6UD7eTu/DSg2uYiU2mCL0G/uzBWqhicI= 130 + github.com/redis/go-redis/v9 v9.8.0/go.mod h1:huWgSWd8mW6+m0VPhJjSSQ+d6Nh1VICQ6Q5lHuCH/Iw= 127 131 github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= 128 132 github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= 129 133 github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
+69 -1
handle_post.go
··· 3 3 import ( 4 4 "context" 5 5 "fmt" 6 + "net/url" 7 + "strings" 6 8 7 9 "github.com/bluesky-social/indigo/api/bsky" 8 10 "github.com/bluesky-social/jetstream/pkg/models" 11 + "github.com/haileyok/dontshowmethis/sets" 12 + "github.com/redis/go-redis/v9" 9 13 ) 10 14 15 + func uriFromEvent(evt *models.Event) string { 16 + return fmt.Sprintf("at://%s/%s/%s", evt.Did, evt.Commit.Collection, evt.Commit.RKey) 17 + } 18 + 11 19 func (dsmt *DontShowMeThis) handlePost(ctx context.Context, event *models.Event, post *bsky.FeedPost) error { 12 - fmt.Println(post.Text) 20 + if event == nil || event.Commit == nil { 21 + return nil 22 + } 23 + 24 + if post.Embed == nil && post.Reply == nil && len(post.Facets) == 0 { 25 + return nil 26 + } 27 + 28 + if post.Embed != nil && post.Embed.EmbedExternal != nil && post.Embed.EmbedExternal.External != nil { 29 + external := post.Embed.EmbedExternal.External 30 + 31 + u, err := url.Parse(external.Uri) 32 + if err != nil { 33 + return err 34 + } 35 + 36 + domain := strings.ToLower(u.Hostname()) 37 + 38 + if sets.PolDomains[domain] { 39 + if err := dsmt.emitLabel(ctx, uriFromEvent(event), LabelPolLink); err != nil { 40 + return err 41 + } 42 + return nil 43 + } 44 + } 45 + 46 + for _, f := range post.Facets { 47 + for _, ff := range f.Features { 48 + if ff.RichtextFacet_Link == nil { 49 + continue 50 + } 51 + 52 + u, err := url.Parse(ff.RichtextFacet_Link.Uri) 53 + if err != nil { 54 + return err 55 + } 56 + 57 + domain := strings.ToLower(u.Hostname()) 58 + 59 + if sets.PolDomains[domain] { 60 + if err := dsmt.emitLabel(ctx, uriFromEvent(event), LabelPolLink); err != nil { 61 + return err 62 + } 63 + return nil 64 + } 65 + } 66 + } 67 + 68 + if post.Reply != nil { 69 + ism, err := dsmt.r.SIsMember(ctx, RedisPrefix+LabelPolLink, post.Reply.Root.Uri).Result() 70 + if err != nil && err != redis.Nil { 71 + return err 72 + } 73 + 74 + if ism { 75 + if err := dsmt.emitLabel(ctx, uriFromEvent(event), LabelPolLinkReply); err != nil { 76 + return err 77 + } 78 + return nil 79 + } 80 + } 13 81 14 82 return nil 15 83 }
+3
labeler/.env.example
··· 1 + SKYWARE_DID= 2 + SKYWARE_SIG_KEY= 3 + EMIT_LABEL_KEY=
+10
labeler/.prettierrc
··· 1 + { 2 + "semi": false, 3 + "arrowParens": "avoid", 4 + "bracketSameLine": true, 5 + "bracketSpacing": false, 6 + "singleQuote": true, 7 + "trailingComma": "all", 8 + "useTabs": false, 9 + "tabWidth": 2 10 + }
+84
labeler/index.ts
··· 1 + import {LabelerServer} from '@skyware/labeler' 2 + import Fastify from 'fastify' 3 + import 'dotenv/config' 4 + 5 + const LABELS: Record<string, boolean> = { 6 + 'pol-link': true, 7 + 'pol-link-reply': true, 8 + } 9 + 10 + function run() { 11 + if (!process.env.SKYWARE_DID) { 12 + throw new Error('no did set in .env') 13 + } 14 + 15 + if (!process.env.SKYWARE_SIG_KEY) { 16 + throw new Error('no sig key set in .env') 17 + } 18 + 19 + if (!process.env.EMIT_LABEL_KEY) { 20 + throw new Error('no emit label key set in .env') 21 + } 22 + 23 + const labelerServer = new LabelerServer({ 24 + did: process.env.SKYWARE_DID, 25 + signingKey: process.env.SKYWARE_SIG_KEY, 26 + }) 27 + 28 + labelerServer.start(14831, error => { 29 + if (error) { 30 + console.error('Failed to start server:', error) 31 + } else { 32 + console.log('Labeler server running on port 14831') 33 + } 34 + }) 35 + 36 + const fastify = Fastify({ 37 + logger: true, 38 + }) 39 + 40 + fastify.post('/emit', async (request, reply) => { 41 + if ( 42 + !request.headers.authorization || 43 + !request.headers.authorization.startsWith('Bearer') || 44 + request.headers.authorization.split(' ')[1] !== process.env.EMIT_LABEL_KEY 45 + ) { 46 + reply.statusCode = 403 47 + return reply.send({error: 'unauthorized'}) 48 + } 49 + 50 + const body = request.body as {uri?: string; label?: string} 51 + 52 + if (!body.uri) { 53 + reply.statusCode = 400 54 + return reply.send({error: 'must supply uri'}) 55 + } 56 + 57 + if (!body.label) { 58 + reply.statusCode = 400 59 + return reply.send({error: 'must supply label'}) 60 + } 61 + 62 + if (!LABELS[body.label]) { 63 + reply.statusCode = 400 64 + return reply.send({error: 'invalid label supplied'}) 65 + } 66 + 67 + await labelerServer.createLabel({ 68 + uri: body.uri, 69 + val: body.label, 70 + }) 71 + 72 + reply.statusCode = 200 73 + return reply.send() 74 + }) 75 + 76 + fastify.listen({port: 3000}, (err, _) => { 77 + if (err) { 78 + fastify.log.error(err) 79 + process.exit(1) 80 + } 81 + }) 82 + } 83 + 84 + run()
+12
labeler/package.json
··· 1 + { 2 + "type": "module", 3 + "scripts": { 4 + "start": "npx tsx index.ts" 5 + }, 6 + "dependencies": { 7 + "@skyware/labeler": "^0.2.0", 8 + "dotenv": "^16.5.0", 9 + "fastify": "^5.3.2", 10 + "typescript": "^5.8.3" 11 + } 12 + }
+10
labeler/tsconfig.json
··· 1 + { 2 + "compilerOptions": { 3 + "strict": true, 4 + "target": "ESNext", 5 + "module": "nodenext", 6 + "moduleResolution": "nodenext", 7 + "allowSyntheticDefaultImports": true, 8 + "esModuleInterop": true 9 + } 10 + }
+845
labeler/yarn.lock
··· 1 + # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 + # yarn lockfile v1 3 + 4 + 5 + "@atcute/bluesky@^1.0.7": 6 + version "1.0.15" 7 + resolved "https://registry.yarnpkg.com/@atcute/bluesky/-/bluesky-1.0.15.tgz#b9335c670df51b19da8d65233ea904f6dfba6232" 8 + integrity sha512-+EFiybmKQ97aBAgtaD+cKRJER5AMn3cZMkEwEg/pDdWyzxYJ9m1UgemmLdTgI8VrxPufKqdXS2nl7uO7TY6BPA== 9 + 10 + "@atcute/cbor@^1.0.2": 11 + version "1.0.7" 12 + resolved "https://registry.yarnpkg.com/@atcute/cbor/-/cbor-1.0.7.tgz#3baa7bd7845567a924e3b220e4a851b05d560d35" 13 + integrity sha512-z3chucgCqjAN36ySvUVl1VSwtGME4CDS173eaaEfiTSpRIQ6ewKpKlkzapLUNqtLU9iBx884b9c2j6kjEyn1XA== 14 + dependencies: 15 + "@atcute/cid" "^1.0.3" 16 + "@atcute/multibase" "^1.0.0" 17 + 18 + "@atcute/cid@^1.0.3": 19 + version "1.0.3" 20 + resolved "https://registry.yarnpkg.com/@atcute/cid/-/cid-1.0.3.tgz#281f8dd047074a4b05b2452681c815db9ad8f3d7" 21 + integrity sha512-BZbs+Xt0yMci0I2dLqqYsN76ua8lkMk/HQfEIKr7g2XMBlSc0XNCXfZdbAWPwiCK/NuGaPBocYMRwApd4dF2Qg== 22 + dependencies: 23 + "@atcute/multibase" "^1.0.0" 24 + "@atcute/varint" "^1.0.1" 25 + 26 + "@atcute/client@^2.0.3": 27 + version "2.0.9" 28 + resolved "https://registry.yarnpkg.com/@atcute/client/-/client-2.0.9.tgz#3192a476dc12b8d52bf72649370344a3bb233580" 29 + integrity sha512-QNDm9gMP6x9LY77ArwY+urQOBtQW74/onEAz42c40JxRm6Rl9K9cU4ROvNKJ+5cpVmEm1sthEWVRmDr5CSZENA== 30 + 31 + "@atcute/multibase@^1.0.0": 32 + version "1.1.3" 33 + resolved "https://registry.yarnpkg.com/@atcute/multibase/-/multibase-1.1.3.tgz#557f504fe1fd39ba6b6133e0977e146f325ff423" 34 + integrity sha512-vQQO0tDuQPguBvHdgV3ryn7R8U6beQ50KA/juYm+dCeT/3hOK2stMbX+IaW8JEuwkT5lJsU8wDIOicQT4mB7Ag== 35 + dependencies: 36 + "@atcute/uint8array" "^1.0.1" 37 + 38 + "@atcute/ozone@^1.0.4": 39 + version "1.0.12" 40 + resolved "https://registry.yarnpkg.com/@atcute/ozone/-/ozone-1.0.12.tgz#a29591c6413b47d092d22cb5ad0fe3e4414311cd" 41 + integrity sha512-eogx/FCF6X3WTwAPxgG8RcrziuOUcJvMu+qHodeVcLSQ7QJvw2H/Q5V0HpnZegUOY5aRGKb5RvLk2SeZq3LCeA== 42 + 43 + "@atcute/uint8array@^1.0.1": 44 + version "1.0.1" 45 + resolved "https://registry.yarnpkg.com/@atcute/uint8array/-/uint8array-1.0.1.tgz#da4a0d623543685de31c8441ab12d300e452aa3c" 46 + integrity sha512-AAnlFKyfDRgb9GNZJbhQ6OuMhbmNPirQyapb8KnmcEhxQZ3+tt+4NcwqekEegY4MpNqSTYeeTdyxq0wGZv1JHg== 47 + 48 + "@atcute/varint@^1.0.1": 49 + version "1.0.2" 50 + resolved "https://registry.yarnpkg.com/@atcute/varint/-/varint-1.0.2.tgz#1486c1dc7cdb0c76a4df67239faa106bf939efbb" 51 + integrity sha512-0O31hePzzr4O3NGWHUKKOyta6CGSL+AtN8iir8grGxu9jXyI7DBARlw6PbgKA6uTAvsXdpmRmF8MX+p0TsLnNg== 52 + 53 + "@fastify/ajv-compiler@^3.5.0": 54 + version "3.6.0" 55 + resolved "https://registry.yarnpkg.com/@fastify/ajv-compiler/-/ajv-compiler-3.6.0.tgz#907497a0e62a42b106ce16e279cf5788848e8e79" 56 + integrity sha512-LwdXQJjmMD+GwLOkP7TVC68qa+pSSogeWWmznRJ/coyTcfe9qA05AHFSe1eZFwK6q+xVRpChnvFUkf1iYaSZsQ== 57 + dependencies: 58 + ajv "^8.11.0" 59 + ajv-formats "^2.1.1" 60 + fast-uri "^2.0.0" 61 + 62 + "@fastify/ajv-compiler@^4.0.0": 63 + version "4.0.2" 64 + resolved "https://registry.yarnpkg.com/@fastify/ajv-compiler/-/ajv-compiler-4.0.2.tgz#da05938cf852901bfb953738764f553b5449b80b" 65 + integrity sha512-Rkiu/8wIjpsf46Rr+Fitd3HRP+VsxUFDDeag0hs9L0ksfnwx2g7SPQQTFL0E8Qv+rfXzQOxBJnjUB9ITUDjfWQ== 66 + dependencies: 67 + ajv "^8.12.0" 68 + ajv-formats "^3.0.1" 69 + fast-uri "^3.0.0" 70 + 71 + "@fastify/error@^3.3.0", "@fastify/error@^3.4.0": 72 + version "3.4.1" 73 + resolved "https://registry.yarnpkg.com/@fastify/error/-/error-3.4.1.tgz#b14bb4cac3dd4ec614becbc643d1511331a6425c" 74 + integrity sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ== 75 + 76 + "@fastify/error@^4.0.0": 77 + version "4.1.0" 78 + resolved "https://registry.yarnpkg.com/@fastify/error/-/error-4.1.0.tgz#a6a3a8d2309bd8d3441512dff9a7c739d0c35fe2" 79 + integrity sha512-KeFcciOr1eo/YvIXHP65S94jfEEqn1RxTRBT1aJaHxY5FK0/GDXYozsQMMWlZoHgi8i0s+YtrLsgj/JkUUjSkQ== 80 + 81 + "@fastify/fast-json-stringify-compiler@^4.3.0": 82 + version "4.3.0" 83 + resolved "https://registry.yarnpkg.com/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.3.0.tgz#5df89fa4d1592cbb8780f78998355feb471646d5" 84 + integrity sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA== 85 + dependencies: 86 + fast-json-stringify "^5.7.0" 87 + 88 + "@fastify/fast-json-stringify-compiler@^5.0.0": 89 + version "5.0.3" 90 + resolved "https://registry.yarnpkg.com/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-5.0.3.tgz#fae495bf30dbbd029139839ec5c2ea111bde7d3f" 91 + integrity sha512-uik7yYHkLr6fxd8hJSZ8c+xF4WafPK+XzneQDPU+D10r5X19GW8lJcom2YijX2+qtFF1ENJlHXKFM9ouXNJYgQ== 92 + dependencies: 93 + fast-json-stringify "^6.0.0" 94 + 95 + "@fastify/forwarded@^3.0.0": 96 + version "3.0.0" 97 + resolved "https://registry.yarnpkg.com/@fastify/forwarded/-/forwarded-3.0.0.tgz#0fc96cdbbb5a38ad453d2d5533a34f09b4949b37" 98 + integrity sha512-kJExsp4JCms7ipzg7SJ3y8DwmePaELHxKYtg+tZow+k0znUTf3cb+npgyqm8+ATZOdmfgfydIebPDWM172wfyA== 99 + 100 + "@fastify/merge-json-schemas@^0.1.0": 101 + version "0.1.1" 102 + resolved "https://registry.yarnpkg.com/@fastify/merge-json-schemas/-/merge-json-schemas-0.1.1.tgz#3551857b8a17a24e8c799e9f51795edb07baa0bc" 103 + integrity sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA== 104 + dependencies: 105 + fast-deep-equal "^3.1.3" 106 + 107 + "@fastify/merge-json-schemas@^0.2.0": 108 + version "0.2.1" 109 + resolved "https://registry.yarnpkg.com/@fastify/merge-json-schemas/-/merge-json-schemas-0.2.1.tgz#3aa30d2f0c81a8ac5995b6d94ed4eaa2c3055824" 110 + integrity sha512-OA3KGBCy6KtIvLf8DINC5880o5iBlDX4SxzLQS8HorJAbqluzLRn80UXU0bxZn7UOFhFgpRJDasfwn9nG4FG4A== 111 + dependencies: 112 + dequal "^2.0.3" 113 + 114 + "@fastify/proxy-addr@^5.0.0": 115 + version "5.0.0" 116 + resolved "https://registry.yarnpkg.com/@fastify/proxy-addr/-/proxy-addr-5.0.0.tgz#e9d1c7a49b8380d9f92a879fdc623ac47ee27de3" 117 + integrity sha512-37qVVA1qZ5sgH7KpHkkC4z9SK6StIsIcOmpjvMPXNb3vx2GQxhZocogVYbr2PbbeLCQxYIPDok307xEvRZOzGA== 118 + dependencies: 119 + "@fastify/forwarded" "^3.0.0" 120 + ipaddr.js "^2.1.0" 121 + 122 + "@fastify/websocket@^10.0.1": 123 + version "10.0.1" 124 + resolved "https://registry.yarnpkg.com/@fastify/websocket/-/websocket-10.0.1.tgz#ece72340870dfccc0d5abdbe7242c632a5f3340a" 125 + integrity sha512-8/pQIxTPRD8U94aILTeJ+2O3el/r19+Ej5z1O1mXlqplsUH7KzCjAI0sgd5DM/NoPjAi5qLFNIjgM5+9/rGSNw== 126 + dependencies: 127 + duplexify "^4.1.2" 128 + fastify-plugin "^4.0.0" 129 + ws "^8.0.0" 130 + 131 + "@libsql/client@^0.14.0": 132 + version "0.14.0" 133 + resolved "https://registry.yarnpkg.com/@libsql/client/-/client-0.14.0.tgz#df30cfb21e84797398afdd268e153cf1594c68a1" 134 + integrity sha512-/9HEKfn6fwXB5aTEEoMeFh4CtG0ZzbncBb1e++OCdVpgKZ/xyMsIVYXm0w7Pv4RUel803vE6LwniB3PqD72R0Q== 135 + dependencies: 136 + "@libsql/core" "^0.14.0" 137 + "@libsql/hrana-client" "^0.7.0" 138 + js-base64 "^3.7.5" 139 + libsql "^0.4.4" 140 + promise-limit "^2.7.0" 141 + 142 + "@libsql/core@^0.14.0": 143 + version "0.14.0" 144 + resolved "https://registry.yarnpkg.com/@libsql/core/-/core-0.14.0.tgz#bbdbdf89227f1325b79e49d00babace81a47bf23" 145 + integrity sha512-nhbuXf7GP3PSZgdCY2Ecj8vz187ptHlZQ0VRc751oB2C1W8jQUXKKklvt7t1LJiUTQBVJuadF628eUk+3cRi4Q== 146 + dependencies: 147 + js-base64 "^3.7.5" 148 + 149 + "@libsql/darwin-arm64@0.4.7": 150 + version "0.4.7" 151 + resolved "https://registry.yarnpkg.com/@libsql/darwin-arm64/-/darwin-arm64-0.4.7.tgz#070679b082ff88ad0a8c8fef94c6d0cc644e441f" 152 + integrity sha512-yOL742IfWUlUevnI5PdnIT4fryY3LYTdLm56bnY0wXBw7dhFcnjuA7jrH3oSVz2mjZTHujxoITgAE7V6Z+eAbg== 153 + 154 + "@libsql/darwin-x64@0.4.7": 155 + version "0.4.7" 156 + resolved "https://registry.yarnpkg.com/@libsql/darwin-x64/-/darwin-x64-0.4.7.tgz#ee5cff8527777eea72e2ad9a4f1c41d6a5b6736e" 157 + integrity sha512-ezc7V75+eoyyH07BO9tIyJdqXXcRfZMbKcLCeF8+qWK5nP8wWuMcfOVywecsXGRbT99zc5eNra4NEx6z5PkSsA== 158 + 159 + "@libsql/hrana-client@^0.7.0": 160 + version "0.7.0" 161 + resolved "https://registry.yarnpkg.com/@libsql/hrana-client/-/hrana-client-0.7.0.tgz#c059d8106b9d40dd931217333710aff2ceb5216e" 162 + integrity sha512-OF8fFQSkbL7vJY9rfuegK1R7sPgQ6kFMkDamiEccNUvieQ+3urzfDFI616oPl8V7T9zRmnTkSjMOImYCAVRVuw== 163 + dependencies: 164 + "@libsql/isomorphic-fetch" "^0.3.1" 165 + "@libsql/isomorphic-ws" "^0.1.5" 166 + js-base64 "^3.7.5" 167 + node-fetch "^3.3.2" 168 + 169 + "@libsql/isomorphic-fetch@^0.3.1": 170 + version "0.3.1" 171 + resolved "https://registry.yarnpkg.com/@libsql/isomorphic-fetch/-/isomorphic-fetch-0.3.1.tgz#42023816d5645a5a3f3a78bb3899bdc5814c7b88" 172 + integrity sha512-6kK3SUK5Uu56zPq/Las620n5aS9xJq+jMBcNSOmjhNf/MUvdyji4vrMTqD7ptY7/4/CAVEAYDeotUz60LNQHtw== 173 + 174 + "@libsql/isomorphic-ws@^0.1.5": 175 + version "0.1.5" 176 + resolved "https://registry.yarnpkg.com/@libsql/isomorphic-ws/-/isomorphic-ws-0.1.5.tgz#e2d1faf965ba0f3be9301fbf5640164d03c4e606" 177 + integrity sha512-DtLWIH29onUYR00i0GlQ3UdcTRC6EP4u9w/h9LxpUZJWRMARk6dQwZ6Jkd+QdwVpuAOrdxt18v0K2uIYR3fwFg== 178 + dependencies: 179 + "@types/ws" "^8.5.4" 180 + ws "^8.13.0" 181 + 182 + "@libsql/linux-arm64-gnu@0.4.7": 183 + version "0.4.7" 184 + resolved "https://registry.yarnpkg.com/@libsql/linux-arm64-gnu/-/linux-arm64-gnu-0.4.7.tgz#d1364f51b8c5a013822257de1a51525b602ac71d" 185 + integrity sha512-WlX2VYB5diM4kFfNaYcyhw5y+UJAI3xcMkEUJZPtRDEIu85SsSFrQ+gvoKfcVh76B//ztSeEX2wl9yrjF7BBCA== 186 + 187 + "@libsql/linux-arm64-musl@0.4.7": 188 + version "0.4.7" 189 + resolved "https://registry.yarnpkg.com/@libsql/linux-arm64-musl/-/linux-arm64-musl-0.4.7.tgz#14d9762853368e77e24774b306dea7c6ac2b4881" 190 + integrity sha512-6kK9xAArVRlTCpWeqnNMCoXW1pe7WITI378n4NpvU5EJ0Ok3aNTIC2nRPRjhro90QcnmLL1jPcrVwO4WD1U0xw== 191 + 192 + "@libsql/linux-x64-gnu@0.4.7": 193 + version "0.4.7" 194 + resolved "https://registry.yarnpkg.com/@libsql/linux-x64-gnu/-/linux-x64-gnu-0.4.7.tgz#ae98f4311b45ffe6c6e31241b7d321cc24cf2922" 195 + integrity sha512-CMnNRCmlWQqqzlTw6NeaZXzLWI8bydaXDke63JTUCvu8R+fj/ENsLrVBtPDlxQ0wGsYdXGlrUCH8Qi9gJep0yQ== 196 + 197 + "@libsql/linux-x64-musl@0.4.7": 198 + version "0.4.7" 199 + resolved "https://registry.yarnpkg.com/@libsql/linux-x64-musl/-/linux-x64-musl-0.4.7.tgz#9340d4c46e77ae072968e7dc70710dedfd6ee4f4" 200 + integrity sha512-nI6tpS1t6WzGAt1Kx1n1HsvtBbZ+jHn0m7ogNNT6pQHZQj7AFFTIMeDQw/i/Nt5H38np1GVRNsFe99eSIMs9XA== 201 + 202 + "@libsql/win32-x64-msvc@0.4.7": 203 + version "0.4.7" 204 + resolved "https://registry.yarnpkg.com/@libsql/win32-x64-msvc/-/win32-x64-msvc-0.4.7.tgz#b39cc6de4af797af736e9f2179002e8ebf4d2d4a" 205 + integrity sha512-7pJzOWzPm6oJUxml+PCDRzYQ4A1hTMHAciTAHfFK4fkbDZX33nWPVG7Y3vqdKtslcwAzwmrNDc6sXy2nwWnbiw== 206 + 207 + "@neon-rs/load@^0.0.4": 208 + version "0.0.4" 209 + resolved "https://registry.yarnpkg.com/@neon-rs/load/-/load-0.0.4.tgz#2a2a3292c6f1fef043f49886712d3c96a547532e" 210 + integrity sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw== 211 + 212 + "@noble/curves@^1.6.0": 213 + version "1.9.0" 214 + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.9.0.tgz#13e0ca8be4a0ce66c113693a94514e5599f40cfc" 215 + integrity sha512-7YDlXiNMdO1YZeH6t/kvopHHbIZzlxrCV9WLqCY6QhcXOoXiNCMDqJIglZ9Yjx5+w7Dz30TITFrlTjnRg7sKEg== 216 + dependencies: 217 + "@noble/hashes" "1.8.0" 218 + 219 + "@noble/hashes@1.8.0", "@noble/hashes@^1.5.0": 220 + version "1.8.0" 221 + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.8.0.tgz#cee43d801fcef9644b11b8194857695acd5f815a" 222 + integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A== 223 + 224 + "@skyware/labeler@^0.2.0": 225 + version "0.2.0" 226 + resolved "https://registry.yarnpkg.com/@skyware/labeler/-/labeler-0.2.0.tgz#13980eaeff303de43ae3eafa1c82e000f774fc2e" 227 + integrity sha512-5Xsjly8Crvi+vILmFkObNs5y/FeNj/mIztcm1qfNafUzwv9n9B7O5MQmmg3aZfnalmQWsYfs2BgVlaBBBni5bw== 228 + dependencies: 229 + "@atcute/bluesky" "^1.0.7" 230 + "@atcute/cbor" "^1.0.2" 231 + "@atcute/client" "^2.0.3" 232 + "@atcute/ozone" "^1.0.4" 233 + "@fastify/websocket" "^10.0.1" 234 + "@libsql/client" "^0.14.0" 235 + "@noble/curves" "^1.6.0" 236 + "@noble/hashes" "^1.5.0" 237 + fastify "^4.28.1" 238 + prompts "^2.4.2" 239 + uint8arrays "^5.1.0" 240 + 241 + "@types/node@*": 242 + version "22.15.3" 243 + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.15.3.tgz#b7fb9396a8ec5b5dfb1345d8ac2502060e9af68b" 244 + integrity sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw== 245 + dependencies: 246 + undici-types "~6.21.0" 247 + 248 + "@types/ws@^8.5.4": 249 + version "8.18.1" 250 + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.1.tgz#48464e4bf2ddfd17db13d845467f6070ffea4aa9" 251 + integrity sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg== 252 + dependencies: 253 + "@types/node" "*" 254 + 255 + abstract-logging@^2.0.1: 256 + version "2.0.1" 257 + resolved "https://registry.yarnpkg.com/abstract-logging/-/abstract-logging-2.0.1.tgz#6b0c371df212db7129b57d2e7fcf282b8bf1c839" 258 + integrity sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA== 259 + 260 + ajv-formats@^2.1.1: 261 + version "2.1.1" 262 + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" 263 + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== 264 + dependencies: 265 + ajv "^8.0.0" 266 + 267 + ajv-formats@^3.0.1: 268 + version "3.0.1" 269 + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-3.0.1.tgz#3d5dc762bca17679c3c2ea7e90ad6b7532309578" 270 + integrity sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ== 271 + dependencies: 272 + ajv "^8.0.0" 273 + 274 + ajv@^8.0.0, ajv@^8.10.0, ajv@^8.11.0, ajv@^8.12.0: 275 + version "8.17.1" 276 + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" 277 + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== 278 + dependencies: 279 + fast-deep-equal "^3.1.3" 280 + fast-uri "^3.0.1" 281 + json-schema-traverse "^1.0.0" 282 + require-from-string "^2.0.2" 283 + 284 + atomic-sleep@^1.0.0: 285 + version "1.0.0" 286 + resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" 287 + integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== 288 + 289 + avvio@^8.3.0: 290 + version "8.4.0" 291 + resolved "https://registry.yarnpkg.com/avvio/-/avvio-8.4.0.tgz#7cbd5bca74f0c9effa944ced601f94ffd8afc5ed" 292 + integrity sha512-CDSwaxINFy59iNwhYnkvALBwZiTydGkOecZyPkqBpABYR1KqGEsET0VOOYDwtleZSUIdeY36DC2bSZ24CO1igA== 293 + dependencies: 294 + "@fastify/error" "^3.3.0" 295 + fastq "^1.17.1" 296 + 297 + avvio@^9.0.0: 298 + version "9.1.0" 299 + resolved "https://registry.yarnpkg.com/avvio/-/avvio-9.1.0.tgz#0ff80ed211682441d8aa39ff21a4b9d022109c44" 300 + integrity sha512-fYASnYi600CsH/j9EQov7lECAniYiBFiiAtBNuZYLA2leLe9qOvZzqYHFjtIj6gD2VMoMLP14834LFWvr4IfDw== 301 + dependencies: 302 + "@fastify/error" "^4.0.0" 303 + fastq "^1.17.1" 304 + 305 + cookie@^0.7.0: 306 + version "0.7.2" 307 + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" 308 + integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== 309 + 310 + cookie@^1.0.1: 311 + version "1.0.2" 312 + resolved "https://registry.yarnpkg.com/cookie/-/cookie-1.0.2.tgz#27360701532116bd3f1f9416929d176afe1e4610" 313 + integrity sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA== 314 + 315 + data-uri-to-buffer@^4.0.0: 316 + version "4.0.1" 317 + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" 318 + integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== 319 + 320 + dequal@^2.0.3: 321 + version "2.0.3" 322 + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" 323 + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== 324 + 325 + detect-libc@2.0.2: 326 + version "2.0.2" 327 + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d" 328 + integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== 329 + 330 + dotenv@^16.5.0: 331 + version "16.5.0" 332 + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.5.0.tgz#092b49f25f808f020050051d1ff258e404c78692" 333 + integrity sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg== 334 + 335 + duplexify@^4.1.2: 336 + version "4.1.3" 337 + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.3.tgz#a07e1c0d0a2c001158563d32592ba58bddb0236f" 338 + integrity sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA== 339 + dependencies: 340 + end-of-stream "^1.4.1" 341 + inherits "^2.0.3" 342 + readable-stream "^3.1.1" 343 + stream-shift "^1.0.2" 344 + 345 + end-of-stream@^1.4.1: 346 + version "1.4.4" 347 + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" 348 + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== 349 + dependencies: 350 + once "^1.4.0" 351 + 352 + fast-content-type-parse@^1.1.0: 353 + version "1.1.0" 354 + resolved "https://registry.yarnpkg.com/fast-content-type-parse/-/fast-content-type-parse-1.1.0.tgz#4087162bf5af3294d4726ff29b334f72e3a1092c" 355 + integrity sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ== 356 + 357 + fast-decode-uri-component@^1.0.1: 358 + version "1.0.1" 359 + resolved "https://registry.yarnpkg.com/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz#46f8b6c22b30ff7a81357d4f59abfae938202543" 360 + integrity sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg== 361 + 362 + fast-deep-equal@^3.1.3: 363 + version "3.1.3" 364 + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 365 + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 366 + 367 + fast-json-stringify@^5.7.0, fast-json-stringify@^5.8.0: 368 + version "5.16.1" 369 + resolved "https://registry.yarnpkg.com/fast-json-stringify/-/fast-json-stringify-5.16.1.tgz#a6d0c575231a3a08c376a00171d757372f2ca46e" 370 + integrity sha512-KAdnLvy1yu/XrRtP+LJnxbBGrhN+xXu+gt3EUvZhYGKCr3lFHq/7UFJHHFgmJKoqlh6B40bZLEv7w46B0mqn1g== 371 + dependencies: 372 + "@fastify/merge-json-schemas" "^0.1.0" 373 + ajv "^8.10.0" 374 + ajv-formats "^3.0.1" 375 + fast-deep-equal "^3.1.3" 376 + fast-uri "^2.1.0" 377 + json-schema-ref-resolver "^1.0.1" 378 + rfdc "^1.2.0" 379 + 380 + fast-json-stringify@^6.0.0: 381 + version "6.0.1" 382 + resolved "https://registry.yarnpkg.com/fast-json-stringify/-/fast-json-stringify-6.0.1.tgz#82f1cb45fa96d0ca24b601f1738066976d6e2430" 383 + integrity sha512-s7SJE83QKBZwg54dIbD5rCtzOBVD43V1ReWXXYqBgwCwHLYAAT0RQc/FmrQglXqWPpz6omtryJQOau5jI4Nrvg== 384 + dependencies: 385 + "@fastify/merge-json-schemas" "^0.2.0" 386 + ajv "^8.12.0" 387 + ajv-formats "^3.0.1" 388 + fast-uri "^3.0.0" 389 + json-schema-ref-resolver "^2.0.0" 390 + rfdc "^1.2.0" 391 + 392 + fast-querystring@^1.0.0: 393 + version "1.1.2" 394 + resolved "https://registry.yarnpkg.com/fast-querystring/-/fast-querystring-1.1.2.tgz#a6d24937b4fc6f791b4ee31dcb6f53aeafb89f53" 395 + integrity sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg== 396 + dependencies: 397 + fast-decode-uri-component "^1.0.1" 398 + 399 + fast-redact@^3.1.1: 400 + version "3.5.0" 401 + resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.5.0.tgz#e9ea02f7e57d0cd8438180083e93077e496285e4" 402 + integrity sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A== 403 + 404 + fast-uri@^2.0.0, fast-uri@^2.1.0: 405 + version "2.4.0" 406 + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-2.4.0.tgz#67eae6fbbe9f25339d5d3f4c4234787b65d7d55e" 407 + integrity sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA== 408 + 409 + fast-uri@^3.0.0, fast-uri@^3.0.1: 410 + version "3.0.6" 411 + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.6.tgz#88f130b77cfaea2378d56bf970dea21257a68748" 412 + integrity sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw== 413 + 414 + fastify-plugin@^4.0.0: 415 + version "4.5.1" 416 + resolved "https://registry.yarnpkg.com/fastify-plugin/-/fastify-plugin-4.5.1.tgz#44dc6a3cc2cce0988bc09e13f160120bbd91dbee" 417 + integrity sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ== 418 + 419 + fastify@^4.28.1: 420 + version "4.29.1" 421 + resolved "https://registry.yarnpkg.com/fastify/-/fastify-4.29.1.tgz#fbd91a507e3a575c6c8032ad5d1bfd801004fb3b" 422 + integrity sha512-m2kMNHIG92tSNWv+Z3UeTR9AWLLuo7KctC7mlFPtMEVrfjIhmQhkQnT9v15qA/BfVq3vvj134Y0jl9SBje3jXQ== 423 + dependencies: 424 + "@fastify/ajv-compiler" "^3.5.0" 425 + "@fastify/error" "^3.4.0" 426 + "@fastify/fast-json-stringify-compiler" "^4.3.0" 427 + abstract-logging "^2.0.1" 428 + avvio "^8.3.0" 429 + fast-content-type-parse "^1.1.0" 430 + fast-json-stringify "^5.8.0" 431 + find-my-way "^8.0.0" 432 + light-my-request "^5.11.0" 433 + pino "^9.0.0" 434 + process-warning "^3.0.0" 435 + proxy-addr "^2.0.7" 436 + rfdc "^1.3.0" 437 + secure-json-parse "^2.7.0" 438 + semver "^7.5.4" 439 + toad-cache "^3.3.0" 440 + 441 + fastify@^5.3.2: 442 + version "5.3.2" 443 + resolved "https://registry.yarnpkg.com/fastify/-/fastify-5.3.2.tgz#88c895a30c0f67166979077ac8649fe8b205a1b3" 444 + integrity sha512-AIPqBgtqBAwkOkrnwesEE+dOyU30dQ4kh7udxeGVR05CRGwubZx+p2H8P0C4cRnQT0+EPK4VGea2DTL2RtWttg== 445 + dependencies: 446 + "@fastify/ajv-compiler" "^4.0.0" 447 + "@fastify/error" "^4.0.0" 448 + "@fastify/fast-json-stringify-compiler" "^5.0.0" 449 + "@fastify/proxy-addr" "^5.0.0" 450 + abstract-logging "^2.0.1" 451 + avvio "^9.0.0" 452 + fast-json-stringify "^6.0.0" 453 + find-my-way "^9.0.0" 454 + light-my-request "^6.0.0" 455 + pino "^9.0.0" 456 + process-warning "^5.0.0" 457 + rfdc "^1.3.1" 458 + secure-json-parse "^4.0.0" 459 + semver "^7.6.0" 460 + toad-cache "^3.7.0" 461 + 462 + fastq@^1.17.1: 463 + version "1.19.1" 464 + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5" 465 + integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== 466 + dependencies: 467 + reusify "^1.0.4" 468 + 469 + fetch-blob@^3.1.2, fetch-blob@^3.1.4: 470 + version "3.2.0" 471 + resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" 472 + integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== 473 + dependencies: 474 + node-domexception "^1.0.0" 475 + web-streams-polyfill "^3.0.3" 476 + 477 + find-my-way@^8.0.0: 478 + version "8.2.2" 479 + resolved "https://registry.yarnpkg.com/find-my-way/-/find-my-way-8.2.2.tgz#f3e78bc6ead2da4fdaa201335da3228600ed0285" 480 + integrity sha512-Dobi7gcTEq8yszimcfp/R7+owiT4WncAJ7VTTgFH1jYJ5GaG1FbhjwDG820hptN0QDFvzVY3RfCzdInvGPGzjA== 481 + dependencies: 482 + fast-deep-equal "^3.1.3" 483 + fast-querystring "^1.0.0" 484 + safe-regex2 "^3.1.0" 485 + 486 + find-my-way@^9.0.0: 487 + version "9.3.0" 488 + resolved "https://registry.yarnpkg.com/find-my-way/-/find-my-way-9.3.0.tgz#9f57786b5d772cc45142bf39dd5349f9cc883f91" 489 + integrity sha512-eRoFWQw+Yv2tuYlK2pjFS2jGXSxSppAs3hSQjfxVKxM5amECzIgYYc1FEI8ZmhSh/Ig+FrKEz43NLRKJjYCZVg== 490 + dependencies: 491 + fast-deep-equal "^3.1.3" 492 + fast-querystring "^1.0.0" 493 + safe-regex2 "^5.0.0" 494 + 495 + formdata-polyfill@^4.0.10: 496 + version "4.0.10" 497 + resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" 498 + integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== 499 + dependencies: 500 + fetch-blob "^3.1.2" 501 + 502 + forwarded@0.2.0: 503 + version "0.2.0" 504 + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" 505 + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== 506 + 507 + inherits@^2.0.3: 508 + version "2.0.4" 509 + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 510 + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 511 + 512 + ipaddr.js@1.9.1: 513 + version "1.9.1" 514 + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" 515 + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== 516 + 517 + ipaddr.js@^2.1.0: 518 + version "2.2.0" 519 + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz#d33fa7bac284f4de7af949638c9d68157c6b92e8" 520 + integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA== 521 + 522 + js-base64@^3.7.5: 523 + version "3.7.7" 524 + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.7.tgz#e51b84bf78fbf5702b9541e2cb7bfcb893b43e79" 525 + integrity sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw== 526 + 527 + json-schema-ref-resolver@^1.0.1: 528 + version "1.0.1" 529 + resolved "https://registry.yarnpkg.com/json-schema-ref-resolver/-/json-schema-ref-resolver-1.0.1.tgz#6586f483b76254784fc1d2120f717bdc9f0a99bf" 530 + integrity sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw== 531 + dependencies: 532 + fast-deep-equal "^3.1.3" 533 + 534 + json-schema-ref-resolver@^2.0.0: 535 + version "2.0.1" 536 + resolved "https://registry.yarnpkg.com/json-schema-ref-resolver/-/json-schema-ref-resolver-2.0.1.tgz#c92f16b452df069daac53e1984159e0f9af0598d" 537 + integrity sha512-HG0SIB9X4J8bwbxCbnd5FfPEbcXAJYTi1pBJeP/QPON+w8ovSME8iRG+ElHNxZNX2Qh6eYn1GdzJFS4cDFfx0Q== 538 + dependencies: 539 + dequal "^2.0.3" 540 + 541 + json-schema-traverse@^1.0.0: 542 + version "1.0.0" 543 + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" 544 + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== 545 + 546 + kleur@^3.0.3: 547 + version "3.0.3" 548 + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" 549 + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== 550 + 551 + libsql@^0.4.4: 552 + version "0.4.7" 553 + resolved "https://registry.yarnpkg.com/libsql/-/libsql-0.4.7.tgz#dc80f94c58ac8146adc351e82f76dd12366fe051" 554 + integrity sha512-T9eIRCs6b0J1SHKYIvD8+KCJMcWZ900iZyxdnSCdqxN12Z1ijzT+jY5nrk72Jw4B0HGzms2NgpryArlJqvc3Lw== 555 + dependencies: 556 + "@neon-rs/load" "^0.0.4" 557 + detect-libc "2.0.2" 558 + optionalDependencies: 559 + "@libsql/darwin-arm64" "0.4.7" 560 + "@libsql/darwin-x64" "0.4.7" 561 + "@libsql/linux-arm64-gnu" "0.4.7" 562 + "@libsql/linux-arm64-musl" "0.4.7" 563 + "@libsql/linux-x64-gnu" "0.4.7" 564 + "@libsql/linux-x64-musl" "0.4.7" 565 + "@libsql/win32-x64-msvc" "0.4.7" 566 + 567 + light-my-request@^5.11.0: 568 + version "5.14.0" 569 + resolved "https://registry.yarnpkg.com/light-my-request/-/light-my-request-5.14.0.tgz#11ddae56de4053fd5c1845cbfbee5c29e8a257e7" 570 + integrity sha512-aORPWntbpH5esaYpGOOmri0OHDOe3wC5M2MQxZ9dvMLZm6DnaAn0kJlcbU9hwsQgLzmZyReKwFwwPkR+nHu5kA== 571 + dependencies: 572 + cookie "^0.7.0" 573 + process-warning "^3.0.0" 574 + set-cookie-parser "^2.4.1" 575 + 576 + light-my-request@^6.0.0: 577 + version "6.6.0" 578 + resolved "https://registry.yarnpkg.com/light-my-request/-/light-my-request-6.6.0.tgz#c9448772323f65f33720fb5979c7841f14060add" 579 + integrity sha512-CHYbu8RtboSIoVsHZ6Ye4cj4Aw/yg2oAFimlF7mNvfDV192LR7nDiKtSIfCuLT7KokPSTn/9kfVLm5OGN0A28A== 580 + dependencies: 581 + cookie "^1.0.1" 582 + process-warning "^4.0.0" 583 + set-cookie-parser "^2.6.0" 584 + 585 + multiformats@^13.0.0: 586 + version "13.3.2" 587 + resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-13.3.2.tgz#a77c2a09c490e90c73b3049551604e6e1a4854e0" 588 + integrity sha512-qbB0CQDt3QKfiAzZ5ZYjLFOs+zW43vA4uyM8g27PeEuXZybUOFyjrVdP93HPBHMoglibwfkdVwbzfUq8qGcH6g== 589 + 590 + node-domexception@^1.0.0: 591 + version "1.0.0" 592 + resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" 593 + integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== 594 + 595 + node-fetch@^3.3.2: 596 + version "3.3.2" 597 + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" 598 + integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== 599 + dependencies: 600 + data-uri-to-buffer "^4.0.0" 601 + fetch-blob "^3.1.4" 602 + formdata-polyfill "^4.0.10" 603 + 604 + on-exit-leak-free@^2.1.0: 605 + version "2.1.2" 606 + resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz#fed195c9ebddb7d9e4c3842f93f281ac8dadd3b8" 607 + integrity sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA== 608 + 609 + once@^1.4.0: 610 + version "1.4.0" 611 + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 612 + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 613 + dependencies: 614 + wrappy "1" 615 + 616 + pino-abstract-transport@^2.0.0: 617 + version "2.0.0" 618 + resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz#de241578406ac7b8a33ce0d77ae6e8a0b3b68a60" 619 + integrity sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw== 620 + dependencies: 621 + split2 "^4.0.0" 622 + 623 + pino-std-serializers@^7.0.0: 624 + version "7.0.0" 625 + resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz#7c625038b13718dbbd84ab446bd673dc52259e3b" 626 + integrity sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA== 627 + 628 + pino@^9.0.0: 629 + version "9.6.0" 630 + resolved "https://registry.yarnpkg.com/pino/-/pino-9.6.0.tgz#6bc628159ba0cc81806d286718903b7fc6b13169" 631 + integrity sha512-i85pKRCt4qMjZ1+L7sy2Ag4t1atFcdbEt76+7iRJn1g2BvsnRMGu9p8pivl9fs63M2kF/A0OacFZhTub+m/qMg== 632 + dependencies: 633 + atomic-sleep "^1.0.0" 634 + fast-redact "^3.1.1" 635 + on-exit-leak-free "^2.1.0" 636 + pino-abstract-transport "^2.0.0" 637 + pino-std-serializers "^7.0.0" 638 + process-warning "^4.0.0" 639 + quick-format-unescaped "^4.0.3" 640 + real-require "^0.2.0" 641 + safe-stable-stringify "^2.3.1" 642 + sonic-boom "^4.0.1" 643 + thread-stream "^3.0.0" 644 + 645 + process-warning@^3.0.0: 646 + version "3.0.0" 647 + resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-3.0.0.tgz#96e5b88884187a1dce6f5c3166d611132058710b" 648 + integrity sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ== 649 + 650 + process-warning@^4.0.0: 651 + version "4.0.1" 652 + resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-4.0.1.tgz#5c1db66007c67c756e4e09eb170cdece15da32fb" 653 + integrity sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q== 654 + 655 + process-warning@^5.0.0: 656 + version "5.0.0" 657 + resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-5.0.0.tgz#566e0bf79d1dff30a72d8bbbe9e8ecefe8d378d7" 658 + integrity sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA== 659 + 660 + promise-limit@^2.7.0: 661 + version "2.7.0" 662 + resolved "https://registry.yarnpkg.com/promise-limit/-/promise-limit-2.7.0.tgz#eb5737c33342a030eaeaecea9b3d3a93cb592b26" 663 + integrity sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw== 664 + 665 + prompts@^2.4.2: 666 + version "2.4.2" 667 + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" 668 + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== 669 + dependencies: 670 + kleur "^3.0.3" 671 + sisteransi "^1.0.5" 672 + 673 + proxy-addr@^2.0.7: 674 + version "2.0.7" 675 + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" 676 + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== 677 + dependencies: 678 + forwarded "0.2.0" 679 + ipaddr.js "1.9.1" 680 + 681 + quick-format-unescaped@^4.0.3: 682 + version "4.0.4" 683 + resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz#93ef6dd8d3453cbc7970dd614fad4c5954d6b5a7" 684 + integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== 685 + 686 + readable-stream@^3.1.1: 687 + version "3.6.2" 688 + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" 689 + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== 690 + dependencies: 691 + inherits "^2.0.3" 692 + string_decoder "^1.1.1" 693 + util-deprecate "^1.0.1" 694 + 695 + real-require@^0.2.0: 696 + version "0.2.0" 697 + resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.2.0.tgz#209632dea1810be2ae063a6ac084fee7e33fba78" 698 + integrity sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg== 699 + 700 + require-from-string@^2.0.2: 701 + version "2.0.2" 702 + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" 703 + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== 704 + 705 + ret@~0.4.0: 706 + version "0.4.3" 707 + resolved "https://registry.yarnpkg.com/ret/-/ret-0.4.3.tgz#5243fa30e704a2e78a9b9b1e86079e15891aa85c" 708 + integrity sha512-0f4Memo5QP7WQyUEAYUO3esD/XjOc3Zjjg5CPsAq1p8sIu0XPeMbHJemKA0BO7tV0X7+A0FoEpbmHXWxPyD3wQ== 709 + 710 + ret@~0.5.0: 711 + version "0.5.0" 712 + resolved "https://registry.yarnpkg.com/ret/-/ret-0.5.0.tgz#30a4d38a7e704bd96dc5ffcbe7ce2a9274c41c95" 713 + integrity sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw== 714 + 715 + reusify@^1.0.4: 716 + version "1.1.0" 717 + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" 718 + integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== 719 + 720 + rfdc@^1.2.0, rfdc@^1.3.0, rfdc@^1.3.1: 721 + version "1.4.1" 722 + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" 723 + integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== 724 + 725 + safe-buffer@~5.2.0: 726 + version "5.2.1" 727 + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 728 + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 729 + 730 + safe-regex2@^3.1.0: 731 + version "3.1.0" 732 + resolved "https://registry.yarnpkg.com/safe-regex2/-/safe-regex2-3.1.0.tgz#fd7ec23908e2c730e1ce7359a5b72883a87d2763" 733 + integrity sha512-RAAZAGbap2kBfbVhvmnTFv73NWLMvDGOITFYTZBAaY8eR+Ir4ef7Up/e7amo+y1+AH+3PtLkrt9mvcTsG9LXug== 734 + dependencies: 735 + ret "~0.4.0" 736 + 737 + safe-regex2@^5.0.0: 738 + version "5.0.0" 739 + resolved "https://registry.yarnpkg.com/safe-regex2/-/safe-regex2-5.0.0.tgz#762e4a4c328603427281d2b99662f2d04e4ae811" 740 + integrity sha512-YwJwe5a51WlK7KbOJREPdjNrpViQBI3p4T50lfwPuDhZnE3XGVTlGvi+aolc5+RvxDD6bnUmjVsU9n1eboLUYw== 741 + dependencies: 742 + ret "~0.5.0" 743 + 744 + safe-stable-stringify@^2.3.1: 745 + version "2.5.0" 746 + resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz#4ca2f8e385f2831c432a719b108a3bf7af42a1dd" 747 + integrity sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA== 748 + 749 + secure-json-parse@^2.7.0: 750 + version "2.7.0" 751 + resolved "https://registry.yarnpkg.com/secure-json-parse/-/secure-json-parse-2.7.0.tgz#5a5f9cd6ae47df23dba3151edd06855d47e09862" 752 + integrity sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw== 753 + 754 + secure-json-parse@^4.0.0: 755 + version "4.0.0" 756 + resolved "https://registry.yarnpkg.com/secure-json-parse/-/secure-json-parse-4.0.0.tgz#2ee1b7581be38ab348bab5a3e49280ba80a89c85" 757 + integrity sha512-dxtLJO6sc35jWidmLxo7ij+Eg48PM/kleBsxpC8QJE0qJICe+KawkDQmvCMZUr9u7WKVHgMW6vy3fQ7zMiFZMA== 758 + 759 + semver@^7.5.4, semver@^7.6.0: 760 + version "7.7.1" 761 + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" 762 + integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== 763 + 764 + set-cookie-parser@^2.4.1, set-cookie-parser@^2.6.0: 765 + version "2.7.1" 766 + resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz#3016f150072202dfbe90fadee053573cc89d2943" 767 + integrity sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ== 768 + 769 + sisteransi@^1.0.5: 770 + version "1.0.5" 771 + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" 772 + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== 773 + 774 + sonic-boom@^4.0.1: 775 + version "4.2.0" 776 + resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-4.2.0.tgz#e59a525f831210fa4ef1896428338641ac1c124d" 777 + integrity sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww== 778 + dependencies: 779 + atomic-sleep "^1.0.0" 780 + 781 + split2@^4.0.0: 782 + version "4.2.0" 783 + resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" 784 + integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== 785 + 786 + stream-shift@^1.0.2: 787 + version "1.0.3" 788 + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.3.tgz#85b8fab4d71010fc3ba8772e8046cc49b8a3864b" 789 + integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ== 790 + 791 + string_decoder@^1.1.1: 792 + version "1.3.0" 793 + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" 794 + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== 795 + dependencies: 796 + safe-buffer "~5.2.0" 797 + 798 + thread-stream@^3.0.0: 799 + version "3.1.0" 800 + resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-3.1.0.tgz#4b2ef252a7c215064507d4ef70c05a5e2d34c4f1" 801 + integrity sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A== 802 + dependencies: 803 + real-require "^0.2.0" 804 + 805 + toad-cache@^3.3.0, toad-cache@^3.7.0: 806 + version "3.7.0" 807 + resolved "https://registry.yarnpkg.com/toad-cache/-/toad-cache-3.7.0.tgz#b9b63304ea7c45ec34d91f1d2fa513517025c441" 808 + integrity sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw== 809 + 810 + typescript@^5.8.3: 811 + version "5.8.3" 812 + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.3.tgz#92f8a3e5e3cf497356f4178c34cd65a7f5e8440e" 813 + integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== 814 + 815 + uint8arrays@^5.1.0: 816 + version "5.1.0" 817 + resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-5.1.0.tgz#14047c9bdf825d025b7391299436e5e50e7270f1" 818 + integrity sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww== 819 + dependencies: 820 + multiformats "^13.0.0" 821 + 822 + undici-types@~6.21.0: 823 + version "6.21.0" 824 + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" 825 + integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== 826 + 827 + util-deprecate@^1.0.1: 828 + version "1.0.2" 829 + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 830 + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== 831 + 832 + web-streams-polyfill@^3.0.3: 833 + version "3.3.3" 834 + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" 835 + integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== 836 + 837 + wrappy@1: 838 + version "1.0.2" 839 + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 840 + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 841 + 842 + ws@^8.0.0, ws@^8.13.0: 843 + version "8.18.2" 844 + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.2.tgz#42738b2be57ced85f46154320aabb51ab003705a" 845 + integrity sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==
+72 -80
main.go
··· 1 1 package main 2 2 3 3 import ( 4 + "bytes" 4 5 "context" 5 6 "encoding/json" 6 7 "fmt" 8 + "io" 7 9 "log" 8 10 "log/slog" 11 + "net/http" 9 12 "os" 10 13 11 14 "github.com/bluesky-social/indigo/api/bsky" 15 + "github.com/bluesky-social/indigo/util" 12 16 "github.com/bluesky-social/indigo/xrpc" 13 17 "github.com/bluesky-social/jetstream/pkg/client" 14 18 "github.com/bluesky-social/jetstream/pkg/client/schedulers/sequential" 15 19 "github.com/bluesky-social/jetstream/pkg/models" 16 20 _ "github.com/joho/godotenv/autoload" 21 + "github.com/redis/go-redis/v9" 17 22 "github.com/urfave/cli/v2" 18 23 ) 19 24 25 + const ( 26 + RedisPrefix = "dsmt/" 27 + LabelPolLink = "pol-link" 28 + LabelPolLinkReply = "pol-link-reply" 29 + ) 30 + 20 31 func main() { 21 32 app := &cli.App{ 22 33 Name: "dontshowmethis", 23 34 Action: run, 24 35 Flags: []cli.Flag{ 25 36 &cli.StringFlag{ 26 - Name: "ozone", 27 - EnvVars: []string{"OZONE"}, 28 - // Required: true, 29 - }, 30 - &cli.StringFlag{ 31 - Name: "pds", 32 - EnvVars: []string{"PDS"}, 33 - Value: "https://bsky.social", 34 - // Required: true, 37 + Name: "jetstream-url", 38 + EnvVars: []string{"JETSTREAM_URL"}, 39 + Value: "wss://jetstream2.us-west.bsky.network/subscribe", 35 40 }, 36 41 &cli.StringFlag{ 37 - Name: "username", 38 - EnvVars: []string{"USERNAME"}, 39 - // Required: true, 42 + Name: "labeler-url", 43 + Usage: "skyware labeler event emission url", 44 + Required: true, 45 + EnvVars: []string{"LABELER_URL"}, 40 46 }, 41 47 &cli.StringFlag{ 42 - Name: "password", 43 - EnvVars: []string{"PASSWORD"}, 44 - // Required: true, 48 + Name: "labeler-key", 49 + Usage: "skyware labeler event emission key", 50 + Required: true, 51 + EnvVars: []string{"LABELER_KEY"}, 45 52 }, 46 53 &cli.StringFlag{ 47 - Name: "jetstream-url", 48 - EnvVars: []string{"JETSTREAM_URL"}, 49 - Value: "wss://jetstream2.us-west.bsky.network/subscribe", 54 + Name: "redis-addr", 55 + Usage: "redis addr", 56 + Required: true, 57 + EnvVars: []string{"REDIS_ADDR"}, 50 58 }, 51 59 }, 52 60 } ··· 55 63 } 56 64 57 65 type DontShowMeThis struct { 58 - logger *slog.Logger 59 - client *xrpc.Client 66 + logger *slog.Logger 67 + bskyClient *xrpc.Client 68 + h *http.Client 69 + r *redis.Client 70 + 71 + labelerUrl string 72 + labelerKey string 60 73 } 61 74 62 75 var run = func(cmd *cli.Context) error { ··· 65 78 Level: slog.LevelInfo, 66 79 AddSource: true, 67 80 })), 81 + labelerUrl: cmd.String("labeler-url"), 82 + labelerKey: cmd.String("labeler-key"), 68 83 } 69 - 70 - dsmt.startConsumer(cmd.String("jetstream-url")) 71 84 72 85 cli := &xrpc.Client{ 73 86 Host: cmd.String("pds"), ··· 75 88 Auth: &xrpc.AuthInfo{}, 76 89 } 77 90 78 - // if loaded, err := dsmt.loadSession(); !loaded { 79 - // if err != nil { 80 - // fmt.Printf("there was an error when loading the session: %v", err) 81 - // } 82 - // 83 - // res, err := atproto.ServerCreateSession(context.TODO(), cli, &atproto.ServerCreateSession_Input{ 84 - // Identifier: cmd.String("username"), 85 - // Password: cmd.String("password"), 86 - // }) 87 - // 88 - // if err != nil { 89 - // return err 90 - // } 91 - // 92 - // cli.Auth.Did = res.Did 93 - // cli.Auth.Handle = res.Handle 94 - // cli.Auth.AccessJwt = res.AccessJwt 95 - // cli.Auth.RefreshJwt = res.RefreshJwt 96 - // 97 - // dsmt.saveSession() 98 - // } 99 - // 100 - // cli.Headers = map[string]string{ 101 - // "atproto-proxy": cmd.String("ozone") + "#atproto_labeler", 102 - // } 91 + dsmt.bskyClient = cli 92 + 93 + dsmt.h = util.RobustHTTPClient() 94 + 95 + r := redis.NewClient(&redis.Options{ 96 + Addr: cmd.String("redis-addr"), 97 + }) 98 + 99 + dsmt.r = r 103 100 104 - dsmt.client = cli 101 + dsmt.startConsumer(cmd.String("jetstream-url")) 105 102 106 103 return nil 107 104 } ··· 147 144 return nil 148 145 } 149 146 150 - type session struct { 151 - Did string `json:"did"` 152 - Handle string `json:"handle"` 153 - AccessJwt string `json:"access_jwt"` 154 - RefreshJwt string `json:"refresh_jwt"` 147 + type EmitLabelRequest struct { 148 + Uri string `json:"uri"` 149 + Label string `json:"label"` 155 150 } 156 151 157 - func (dsmt *DontShowMeThis) loadSession() (bool, error) { 158 - b, err := os.ReadFile("./auth.auth") 159 - if err != nil { 160 - return false, err 152 + func (dsmt *DontShowMeThis) emitLabel(ctx context.Context, uri, label string) error { 153 + body := &EmitLabelRequest{ 154 + Uri: uri, 155 + Label: label, 161 156 } 162 157 163 - var s session 164 - err = json.Unmarshal(b, &s) 158 + b, err := json.Marshal(body) 165 159 if err != nil { 166 - return false, err 160 + return err 167 161 } 168 162 169 - dsmt.client.Auth.Did = s.Did 170 - dsmt.client.Auth.Handle = s.Handle 171 - dsmt.client.Auth.AccessJwt = s.AccessJwt 172 - dsmt.client.Auth.RefreshJwt = s.RefreshJwt 163 + req, err := http.NewRequestWithContext(ctx, "POST", dsmt.labelerUrl+"/emit", bytes.NewReader(b)) 164 + if err != nil { 165 + return err 166 + } 173 167 174 - return true, nil 175 - } 168 + req.Header.Set("authorization", "Bearer "+dsmt.labelerKey) 169 + req.Header.Set("content-type", "application/json") 176 170 177 - func (dsmt *DontShowMeThis) saveSession() { 178 - s := &session{ 179 - Did: dsmt.client.Auth.Did, 180 - Handle: dsmt.client.Auth.Handle, 181 - AccessJwt: dsmt.client.Auth.AccessJwt, 182 - RefreshJwt: dsmt.client.Auth.RefreshJwt, 171 + resp, err := dsmt.h.Do(req) 172 + if err != nil { 173 + return err 183 174 } 175 + defer resp.Body.Close() 184 176 185 - // write to file 186 - b, err := json.Marshal(s) 187 - if err != nil { 188 - dsmt.logger.Error("error saving session", "err", err) 189 - return 177 + io.Copy(io.Discard, resp.Body) 178 + 179 + if resp.StatusCode != http.StatusOK { 180 + return fmt.Errorf("received invalid status code from server: %d", resp.StatusCode) 190 181 } 191 182 192 - err = os.WriteFile("./auth.auth", b, 0644) 193 - if err != nil { 194 - dsmt.logger.Error("error saving session", "err", err) 183 + if _, err := dsmt.r.SAdd(ctx, RedisPrefix+label, uri).Result(); err != nil { 184 + return err 195 185 } 186 + 187 + return nil 196 188 }
+61
sets/domains.go
··· 1 + package sets 2 + 3 + var PolDomains = map[string]bool{ 4 + "nytimes.com": true, 5 + "theguardian.com": true, 6 + "open.substack.com": true, 7 + "npr.org": true, 8 + "cnn.com": true, 9 + "washingtonpost.com": true, 10 + "wsj.com": true, 11 + "newrepublic.com": true, 12 + "apnews.com": true, 13 + "politico.com": true, 14 + "reut.rs": true, 15 + "reuters.com": true, 16 + "nbcnews.com": true, 17 + "kfor.com": true, 18 + "huffpost.com": true, 19 + "rollingstone.com": true, 20 + "rawstory.com": true, 21 + "cbsnews.com": true, 22 + "bbc.com": true, 23 + "cbc.ca": true, 24 + "nymag.com": true, 25 + "wapo.st": true, 26 + "newsweek.com": true, 27 + "theatlantic.com": true, 28 + "variety.com": true, 29 + "nyti.ms": true, 30 + "talkingpointsmemo.com": true, 31 + "thedailybeast.com": true, 32 + "axios.com": true, 33 + "publicnotice.co": true, 34 + "semafor.com": true, 35 + "msnbc.com": true, 36 + "liberation.fr": true, 37 + "newyorker.com": true, 38 + "independent.co.uk": true, 39 + "whitehouse.gov": true, 40 + "motherjones.com": true, 41 + "bbc.co.uk": true, 42 + "nbcnews.to": true, 43 + "theglobeandmail.com": true, 44 + "cnbc.com": true, 45 + "defector.com": true, 46 + "propublica.com": true, 47 + "nypost.com": true, 48 + "bloomberg.com": true, 49 + "ctvnews.ca": true, 50 + "thetimes.com": true, 51 + "abc.net.au": true, 52 + "bloom.bg": true, 53 + "democracydocker.com": true, 54 + "cnn.it": true, 55 + "latimes.com": true, 56 + "publico.es": true, 57 + "politico.eu": true, 58 + "kyivindependent.com": true, 59 + "abcnews.go.com": true, 60 + "irishtimes.com": true, 61 + }