this repo has no description
0
fork

Configure Feed

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

chore: initial setup

Lino Le Van 22329aec

+12992
+8
.dockerignore
··· 1 + **/node_modules 2 + node_modules 3 + **/.env 4 + .env 5 + tap.db 6 + tap.db-shm 7 + tap.db-wal 8 + db/internal
+6
.gitignore
··· 1 + node_modules 2 + .env 3 + tap.db 4 + tap.db-shm 5 + tap.db-wal 6 + db/internal
+15
README.md
··· 1 + # Pinecone 2 + 3 + Cooking in the wilderness. 4 + 5 + ## Setup 6 + 7 + 1. Install postgres 18 and tap locally 8 + 9 + ``` 10 + brew install postgresql@18 11 + go install github.com/bluesky-social/indigo/cmd/tap 12 + ``` 13 + 14 + 2. Copy `api/.example.env` to `.env` 15 + 3. Run `pnpm dev`. Done! You'll start backfilling all of tangled :P.
+2
api/.example.env
··· 1 + DATABASE_URL=postgresql://postgres@localhost:5432/postgres 2 + TAP_URL=http://localhost:2480
+15
api/Dockerfile
··· 1 + FROM node:25-alpine 2 + 3 + RUN npm install -g pnpm@11.0.3 4 + 5 + WORKDIR /app 6 + 7 + COPY . . 8 + 9 + RUN pnpm install --frozen-lockfile 10 + 11 + WORKDIR /app/api 12 + 13 + EXPOSE 3000 14 + 15 + CMD ["node", "src/index.ts"]
+20
api/drizzle.config.ts
··· 1 + import process from "node:process"; 2 + import { defineConfig } from "drizzle-kit"; 3 + 4 + try { 5 + process.loadEnvFile(".env"); 6 + } catch { } 7 + 8 + console.log(process.env.DATABASE_URL) 9 + 10 + export default defineConfig({ 11 + casing: "snake_case", 12 + dbCredentials: { 13 + url: process.env.DATABASE_URL!, 14 + }, 15 + dialect: "postgresql", 16 + out: "./src/db/drizzle", 17 + schema: "./src/db/tables", 18 + verbose: true, 19 + strict: true, 20 + });
+1
api/lexicons/README.md
··· 1 + These lexicons are stolen from tangled's repo. Try to keep it in sync otherwise it's kinda cooked tbh.
+87
api/lexicons/sh/tangled/actor/profile.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.actor.profile", 4 + "defs": { 5 + "main": { 6 + "type": "record", 7 + "description": "A declaration of a Tangled account profile.", 8 + "key": "literal:self", 9 + "record": { 10 + "type": "object", 11 + "required": ["bluesky"], 12 + "properties": { 13 + "avatar": { 14 + "type": "blob", 15 + "description": "Small image to be displayed next to posts from account. AKA, 'profile picture'", 16 + "accept": ["image/png", "image/jpeg"], 17 + "maxSize": 1000000 18 + }, 19 + "description": { 20 + "type": "string", 21 + "description": "Free-form profile description text.", 22 + "maxGraphemes": 256, 23 + "maxLength": 2560 24 + }, 25 + "links": { 26 + "type": "array", 27 + "minLength": 0, 28 + "maxLength": 5, 29 + "items": { 30 + "type": "string", 31 + "description": "Any URI, intended for social profiles or websites, can be used to link DIDs/AT-URIs too.", 32 + "format": "uri" 33 + } 34 + }, 35 + "stats": { 36 + "type": "array", 37 + "minLength": 0, 38 + "maxLength": 2, 39 + "items": { 40 + "type": "string", 41 + "description": "Vanity stats.", 42 + "enum": [ 43 + "merged-pull-request-count", 44 + "closed-pull-request-count", 45 + "open-pull-request-count", 46 + "open-issue-count", 47 + "closed-issue-count", 48 + "repository-count", 49 + "star-count" 50 + ] 51 + } 52 + }, 53 + "bluesky": { 54 + "type": "boolean", 55 + "description": "Include link to this account on Bluesky." 56 + }, 57 + "location": { 58 + "type": "string", 59 + "description": "Free-form location text.", 60 + "maxGraphemes": 40, 61 + "maxLength": 400 62 + }, 63 + "pinnedRepositories": { 64 + "type": "array", 65 + "description": "Pinned repositories. Values are repo DIDs for repos that have them, or AT-URIs for legacy repos.", 66 + "minLength": 0, 67 + "maxLength": 6, 68 + "items": { 69 + "type": "string" 70 + } 71 + }, 72 + "pronouns": { 73 + "type": "string", 74 + "description": "Preferred gender pronouns.", 75 + "maxLength": 40 76 + }, 77 + "preferredHandle": { 78 + "type": "string", 79 + "description": "A handle the user prefers to be displayed as.", 80 + "format": "handle", 81 + "maxLength": 253 82 + } 83 + } 84 + } 85 + } 86 + } 87 + }
+34
api/lexicons/sh/tangled/feed/reaction.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.feed.reaction", 4 + "needsCbor": true, 5 + "needsType": true, 6 + "defs": { 7 + "main": { 8 + "type": "record", 9 + "key": "tid", 10 + "record": { 11 + "type": "object", 12 + "required": [ 13 + "subject", 14 + "reaction", 15 + "createdAt" 16 + ], 17 + "properties": { 18 + "subject": { 19 + "type": "string", 20 + "format": "at-uri" 21 + }, 22 + "reaction": { 23 + "type": "string", 24 + "enum": [ "👍", "👎", "😆", "🎉", "🫤", "❤️", "🚀", "👀" ] 25 + }, 26 + "createdAt": { 27 + "type": "string", 28 + "format": "datetime" 29 + } 30 + } 31 + } 32 + } 33 + } 34 + }
+32
api/lexicons/sh/tangled/feed/star.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.feed.star", 4 + "needsCbor": true, 5 + "needsType": true, 6 + "defs": { 7 + "main": { 8 + "type": "record", 9 + "key": "tid", 10 + "record": { 11 + "type": "object", 12 + "required": [ 13 + "createdAt" 14 + ], 15 + "properties": { 16 + "subject": { 17 + "type": "string", 18 + "format": "at-uri" 19 + }, 20 + "subjectDid": { 21 + "type": "string", 22 + "format": "did" 23 + }, 24 + "createdAt": { 25 + "type": "string", 26 + "format": "datetime" 27 + } 28 + } 29 + } 30 + } 31 + } 32 + }
+132
api/lexicons/sh/tangled/git/refUpdate.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.git.refUpdate", 4 + "defs": { 5 + "main": { 6 + "type": "record", 7 + "description": "An update to a git repository, emitted by knots.", 8 + "key": "tid", 9 + "record": { 10 + "type": "object", 11 + "required": [ 12 + "ref", 13 + "committerDid", 14 + "repoName", 15 + "oldSha", 16 + "newSha", 17 + "meta" 18 + ], 19 + "properties": { 20 + "ref": { 21 + "type": "string", 22 + "description": "Ref being updated", 23 + "maxGraphemes": 256, 24 + "maxLength": 2560 25 + }, 26 + "committerDid": { 27 + "type": "string", 28 + "description": "did of the user that pushed this ref", 29 + "format": "did" 30 + }, 31 + "ownerDid": { 32 + "type": "string", 33 + "description": "did of the owner of the repo", 34 + "format": "did" 35 + }, 36 + "repoDid": { 37 + "type": "string", 38 + "description": "DID of the repo itself", 39 + "format": "did" 40 + }, 41 + "repoName": { 42 + "type": "string", 43 + "description": "name of the repo" 44 + }, 45 + "oldSha": { 46 + "type": "string", 47 + "description": "old SHA of this ref", 48 + "minLength": 40, 49 + "maxLength": 40 50 + }, 51 + "newSha": { 52 + "type": "string", 53 + "description": "new SHA of this ref", 54 + "minLength": 40, 55 + "maxLength": 40 56 + }, 57 + "meta": { 58 + "type": "ref", 59 + "ref": "#meta" 60 + } 61 + } 62 + } 63 + }, 64 + "meta": { 65 + "type": "object", 66 + "required": ["isDefaultRef", "commitCount"], 67 + "properties": { 68 + "isDefaultRef": { 69 + "type": "boolean", 70 + "default": false 71 + }, 72 + "langBreakdown": { 73 + "type": "ref", 74 + "ref": "#langBreakdown" 75 + }, 76 + "commitCount": { 77 + "type": "ref", 78 + "ref": "#commitCountBreakdown" 79 + } 80 + } 81 + }, 82 + "langBreakdown": { 83 + "type": "object", 84 + "properties": { 85 + "inputs": { 86 + "type": "array", 87 + "items": { 88 + "type": "ref", 89 + "ref": "#individualLanguageSize" 90 + } 91 + } 92 + } 93 + }, 94 + "individualLanguageSize": { 95 + "type": "object", 96 + "required": ["lang", "size"], 97 + "properties": { 98 + "lang": { 99 + "type": "string" 100 + }, 101 + "size": { 102 + "type": "integer" 103 + } 104 + } 105 + }, 106 + "commitCountBreakdown": { 107 + "type": "object", 108 + "required": [], 109 + "properties": { 110 + "byEmail": { 111 + "type": "array", 112 + "items": { 113 + "type": "ref", 114 + "ref": "#individualEmailCommitCount" 115 + } 116 + } 117 + } 118 + }, 119 + "individualEmailCommitCount": { 120 + "type": "object", 121 + "required": ["email", "count"], 122 + "properties": { 123 + "email": { 124 + "type": "string" 125 + }, 126 + "count": { 127 + "type": "integer" 128 + } 129 + } 130 + } 131 + } 132 + }
+64
api/lexicons/sh/tangled/git/temp/analyzeMerge.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.git.temp.analyzeMerge", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Check if a merge is possible between two branches", 8 + "parameters": { 9 + "type": "params", 10 + "required": ["repo", "patch", "branch"], 11 + "properties": { 12 + "repo": { 13 + "type": "string", 14 + "format": "at-uri", 15 + "description": "AT-URI of the repository" 16 + }, 17 + "patch": { 18 + "type": "string", 19 + "description": "Patch or pull request to check for merge conflicts" 20 + }, 21 + "branch": { 22 + "type": "string", 23 + "description": "Target branch to merge into" 24 + } 25 + } 26 + }, 27 + "output": { 28 + "encoding": "application/json", 29 + "schema": { 30 + "type": "object", 31 + "required": ["is_conflicted"], 32 + "properties": { 33 + "is_conflicted": { 34 + "type": "boolean", 35 + "description": "Whether the merge has conflicts" 36 + }, 37 + "conflicts": { 38 + "type": "array", 39 + "description": "List of files with merge conflicts", 40 + "items": { 41 + "type": "ref", 42 + "ref": "#conflictInfo" 43 + } 44 + } 45 + } 46 + } 47 + } 48 + }, 49 + "conflictInfo": { 50 + "type": "object", 51 + "required": ["filename", "reason"], 52 + "properties": { 53 + "filename": { 54 + "type": "string", 55 + "description": "Name of the conflicted file" 56 + }, 57 + "reason": { 58 + "type": "string", 59 + "description": "Reason for the conflict" 60 + } 61 + } 62 + } 63 + } 64 + }
+112
api/lexicons/sh/tangled/git/temp/defs.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.git.temp.defs", 4 + "defs": { 5 + "blob": { 6 + "type": "object", 7 + "description": "blob metadata. This object doesn't include the blob content", 8 + "required": ["name", "mode", "size", "lastCommit"], 9 + "properties": { 10 + "name": { 11 + "type": "string", 12 + "description": "The file name" 13 + }, 14 + "mode": { 15 + "type": "string" 16 + }, 17 + "size": { 18 + "type": "integer", 19 + "description": "File size in bytes" 20 + }, 21 + "lastCommit": { 22 + "type": "ref", 23 + "ref": "#commit" 24 + }, 25 + "submodule": { 26 + "type": "ref", 27 + "ref": "#submodule", 28 + "description": "Submodule information if path is a submodule" 29 + } 30 + } 31 + }, 32 + "branch": { 33 + "type": "object", 34 + "required": ["name", "commit"], 35 + "properties": { 36 + "name": { 37 + "type": "string", 38 + "description": "branch name" 39 + }, 40 + "commit": { 41 + "type": "ref", 42 + "ref": "#commit", 43 + "description": "hydrated commit object" 44 + } 45 + } 46 + }, 47 + "tag": { 48 + "type": "object", 49 + "required": ["name", "tagger", "target"], 50 + "properties": { 51 + "name": { 52 + "type": "string", 53 + "description": "tag name" 54 + }, 55 + "tagger": { "type": "ref", "ref": "#signature" }, 56 + "message": { "type": "string" }, 57 + "target": { "type": "unknown" } 58 + } 59 + }, 60 + "commit": { 61 + "type": "object", 62 + "required": ["hash", "author", "committer", "message", "tree"], 63 + "properties": { 64 + "hash": { "type": "ref", "ref": "#hash" }, 65 + "author": { "type": "ref", "ref": "#signature" }, 66 + "committer": { "type": "ref", "ref": "#signature" }, 67 + "message": { "type": "string" }, 68 + "tree": { "type": "ref", "ref": "#hash" } 69 + } 70 + }, 71 + "hash": { 72 + "type": "string" 73 + }, 74 + "signature": { 75 + "type": "object", 76 + "required": ["name", "email", "when"], 77 + "properties": { 78 + "name": { 79 + "type": "string", 80 + "description": "Person name" 81 + }, 82 + "email": { 83 + "type": "string", 84 + "description": "Person email" 85 + }, 86 + "when": { 87 + "type": "string", 88 + "format": "datetime", 89 + "description": "Timestamp of the signature" 90 + } 91 + } 92 + }, 93 + "submodule": { 94 + "type": "object", 95 + "required": ["name", "url"], 96 + "properties": { 97 + "name": { 98 + "type": "string", 99 + "description": "Submodule name" 100 + }, 101 + "url": { 102 + "type": "string", 103 + "description": "Submodule repository URL" 104 + }, 105 + "branch": { 106 + "type": "string", 107 + "description": "Branch to track in the submodule" 108 + } 109 + } 110 + } 111 + } 112 + }
+56
api/lexicons/sh/tangled/git/temp/getArchive.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.git.temp.getArchive", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "parameters": { 8 + "type": "params", 9 + "required": ["repo", "ref"], 10 + "properties": { 11 + "repo": { 12 + "type": "string", 13 + "format": "at-uri", 14 + "description": "AT-URI of the repository" 15 + }, 16 + "ref": { 17 + "type": "string", 18 + "description": "Git reference (branch, tag, or commit SHA)" 19 + }, 20 + "format": { 21 + "type": "string", 22 + "description": "Archive format", 23 + "enum": ["tar", "zip", "tar.gz", "tar.bz2", "tar.xz"], 24 + "default": "tar.gz" 25 + }, 26 + "prefix": { 27 + "type": "string", 28 + "description": "Prefix for files in the archive" 29 + } 30 + } 31 + }, 32 + "output": { 33 + "encoding": "*/*", 34 + "description": "Binary archive data" 35 + }, 36 + "errors": [ 37 + { 38 + "name": "RepoNotFound", 39 + "description": "Repository not found or access denied" 40 + }, 41 + { 42 + "name": "RefNotFound", 43 + "description": "Git reference not found" 44 + }, 45 + { 46 + "name": "InvalidRequest", 47 + "description": "Invalid request parameters" 48 + }, 49 + { 50 + "name": "ArchiveError", 51 + "description": "Failed to create archive" 52 + } 53 + ] 54 + } 55 + } 56 + }
+47
api/lexicons/sh/tangled/git/temp/getBlob.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.git.temp.getBlob", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "parameters": { 8 + "type": "params", 9 + "required": ["repo", "path"], 10 + "properties": { 11 + "repo": { 12 + "type": "string", 13 + "format": "at-uri", 14 + "description": "AT-URI of the repository" 15 + }, 16 + "ref": { 17 + "type": "string", 18 + "description": "Git reference (branch, tag, or commit SHA)", 19 + "default": "HEAD" 20 + }, 21 + "path": { 22 + "type": "string", 23 + "description": "Path within the repository tree" 24 + } 25 + } 26 + }, 27 + "output": { 28 + "encoding": "*/*", 29 + "description": "raw blob served in octet-stream" 30 + }, 31 + "errors": [ 32 + { 33 + "name": "RepoNotFound", 34 + "description": "Repository not found or access denied" 35 + }, 36 + { 37 + "name": "BlobNotFound", 38 + "description": "Blob not found" 39 + }, 40 + { 41 + "name": "InvalidRequest", 42 + "description": "Invalid request parameters" 43 + } 44 + ] 45 + } 46 + } 47 + }
+68
api/lexicons/sh/tangled/git/temp/getBranch.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.git.temp.getBranch", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "parameters": { 8 + "type": "params", 9 + "required": ["repo", "name"], 10 + "properties": { 11 + "repo": { 12 + "type": "string", 13 + "format": "at-uri", 14 + "description": "AT-URI of the repository" 15 + }, 16 + "name": { 17 + "type": "string", 18 + "description": "Branch name to get information for" 19 + } 20 + } 21 + }, 22 + "output": { 23 + "encoding": "application/json", 24 + "schema": { 25 + "type": "object", 26 + "required": ["name", "hash", "when"], 27 + "properties": { 28 + "name": { 29 + "type": "string", 30 + "description": "Branch name" 31 + }, 32 + "hash": { 33 + "type": "string", 34 + "description": "Latest commit hash on this branch" 35 + }, 36 + "when": { 37 + "type": "string", 38 + "format": "datetime", 39 + "description": "Timestamp of latest commit" 40 + }, 41 + "message": { 42 + "type": "string", 43 + "description": "Latest commit message" 44 + }, 45 + "author": { 46 + "type": "ref", 47 + "ref": "sh.tangled.git.temp.defs#signature" 48 + } 49 + } 50 + } 51 + }, 52 + "errors": [ 53 + { 54 + "name": "RepoNotFound", 55 + "description": "Repository not found or access denied" 56 + }, 57 + { 58 + "name": "BranchNotFound", 59 + "description": "Branch not found" 60 + }, 61 + { 62 + "name": "InvalidRequest", 63 + "description": "Invalid request parameters" 64 + } 65 + ] 66 + } 67 + } 68 + }
+46
api/lexicons/sh/tangled/git/temp/getCommit.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.git.temp.getCommit", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "resolve commit from given ref", 8 + "parameters": { 9 + "type": "params", 10 + "required": ["repo", "ref"], 11 + "properties": { 12 + "repo": { 13 + "type": "string", 14 + "format": "at-uri", 15 + "description": "AT-URI of the repository" 16 + }, 17 + "ref": { 18 + "type": "string", 19 + "description": "reference name to resolve" 20 + } 21 + } 22 + }, 23 + "output": { 24 + "encoding": "application/json", 25 + "schema": { 26 + "type": "ref", 27 + "ref": "sh.tangled.git.temp.defs#commit" 28 + } 29 + }, 30 + "errors": [ 31 + { 32 + "name": "RepoNotFound", 33 + "description": "Repository not found or access denied" 34 + }, 35 + { 36 + "name": "CommitNotFound", 37 + "description": "Commit not found" 38 + }, 39 + { 40 + "name": "InvalidRequest", 41 + "description": "Invalid request parameters" 42 + } 43 + ] 44 + } 45 + } 46 + }
+50
api/lexicons/sh/tangled/git/temp/getDiff.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.git.temp.getDiff", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "parameters": { 8 + "type": "params", 9 + "required": ["repo", "rev1", "rev2"], 10 + "properties": { 11 + "repo": { 12 + "type": "string", 13 + "format": "at-uri", 14 + "description": "AT-URI of the repository" 15 + }, 16 + "rev1": { 17 + "type": "string", 18 + "description": "First revision (commit, branch, or tag)" 19 + }, 20 + "rev2": { 21 + "type": "string", 22 + "description": "Second revision (commit, branch, or tag)" 23 + } 24 + } 25 + }, 26 + "output": { 27 + "encoding": "*/*", 28 + "description": "Compare output in application/json" 29 + }, 30 + "errors": [ 31 + { 32 + "name": "RepoNotFound", 33 + "description": "Repository not found or access denied" 34 + }, 35 + { 36 + "name": "RevisionNotFound", 37 + "description": "One or both revisions not found" 38 + }, 39 + { 40 + "name": "InvalidRequest", 41 + "description": "Invalid request parameters" 42 + }, 43 + { 44 + "name": "CompareError", 45 + "description": "Failed to compare revisions" 46 + } 47 + ] 48 + } 49 + } 50 + }
+51
api/lexicons/sh/tangled/git/temp/getEntity.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.git.temp.getEntity", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "get metadata of blob by ref and path", 8 + "parameters": { 9 + "type": "params", 10 + "required": ["repo", "path"], 11 + "properties": { 12 + "repo": { 13 + "type": "string", 14 + "format": "at-uri", 15 + "description": "AT-URI of the repository" 16 + }, 17 + "ref": { 18 + "type": "string", 19 + "description": "Git reference (branch, tag, or commit SHA)", 20 + "default": "HEAD" 21 + }, 22 + "path": { 23 + "type": "string", 24 + "description": "path of the entity" 25 + } 26 + } 27 + }, 28 + "output": { 29 + "encoding": "application/json", 30 + "schema": { 31 + "type": "ref", 32 + "ref": "sh.tangled.git.temp.defs#blob" 33 + } 34 + }, 35 + "errors": [ 36 + { 37 + "name": "RepoNotFound", 38 + "description": "Repository not found or access denied" 39 + }, 40 + { 41 + "name": "BlobNotFound", 42 + "description": "Blob not found" 43 + }, 44 + { 45 + "name": "InvalidRequest", 46 + "description": "Invalid request parameters" 47 + } 48 + ] 49 + } 50 + } 51 + }
+37
api/lexicons/sh/tangled/git/temp/getHead.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.git.temp.getHead", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "parameters": { 8 + "type": "params", 9 + "required": ["repo"], 10 + "properties": { 11 + "repo": { 12 + "type": "string", 13 + "format": "at-uri", 14 + "description": "AT-URI of the repository" 15 + } 16 + } 17 + }, 18 + "output": { 19 + "encoding": "application/json", 20 + "schema": { 21 + "type": "ref", 22 + "ref": "sh.tangled.git.temp.defs#branch" 23 + } 24 + }, 25 + "errors": [ 26 + { 27 + "name": "RepoNotFound", 28 + "description": "Repository not found or access denied" 29 + }, 30 + { 31 + "name": "InvalidRequest", 32 + "description": "Invalid request parameters" 33 + } 34 + ] 35 + } 36 + } 37 + }
+44
api/lexicons/sh/tangled/git/temp/getTag.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.git.temp.getTag", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "parameters": { 8 + "type": "params", 9 + "required": [ 10 + "repo", 11 + "tag" 12 + ], 13 + "properties": { 14 + "repo": { 15 + "type": "string", 16 + "format": "at-uri", 17 + "description": "AT-URI of the repository" 18 + }, 19 + "tag": { 20 + "type": "string", 21 + "description": "Name of tag, such as v1.3.0" 22 + } 23 + } 24 + }, 25 + "output": { 26 + "encoding": "*/*" 27 + }, 28 + "errors": [ 29 + { 30 + "name": "RepoNotFound", 31 + "description": "Repository not found or access denied" 32 + }, 33 + { 34 + "name": "TagNotFound", 35 + "description": "Tag not found" 36 + }, 37 + { 38 + "name": "InvalidRequest", 39 + "description": "Invalid request parameters" 40 + } 41 + ] 42 + } 43 + } 44 + }
+183
api/lexicons/sh/tangled/git/temp/getTree.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.git.temp.getTree", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "parameters": { 8 + "type": "params", 9 + "required": [ 10 + "repo", 11 + "ref" 12 + ], 13 + "properties": { 14 + "repo": { 15 + "type": "string", 16 + "format": "at-uri", 17 + "description": "AT-URI of the repository" 18 + }, 19 + "ref": { 20 + "type": "string", 21 + "description": "Git reference (branch, tag, or commit SHA)" 22 + }, 23 + "path": { 24 + "type": "string", 25 + "description": "Path within the repository tree", 26 + "default": "" 27 + } 28 + } 29 + }, 30 + "output": { 31 + "encoding": "application/json", 32 + "schema": { 33 + "type": "object", 34 + "required": [ 35 + "ref", 36 + "files" 37 + ], 38 + "properties": { 39 + "ref": { 40 + "type": "string", 41 + "description": "The git reference used" 42 + }, 43 + "parent": { 44 + "type": "string", 45 + "description": "The parent path in the tree" 46 + }, 47 + "dotdot": { 48 + "type": "string", 49 + "description": "Parent directory path" 50 + }, 51 + "readme": { 52 + "type": "ref", 53 + "ref": "#readme", 54 + "description": "Readme for this file tree" 55 + }, 56 + "lastCommit": { 57 + "type": "ref", 58 + "ref": "#lastCommit" 59 + }, 60 + "files": { 61 + "type": "array", 62 + "items": { 63 + "type": "ref", 64 + "ref": "#treeEntry" 65 + } 66 + } 67 + } 68 + } 69 + }, 70 + "errors": [ 71 + { 72 + "name": "RepoNotFound", 73 + "description": "Repository not found or access denied" 74 + }, 75 + { 76 + "name": "RefNotFound", 77 + "description": "Git reference not found" 78 + }, 79 + { 80 + "name": "PathNotFound", 81 + "description": "Path not found in repository tree" 82 + }, 83 + { 84 + "name": "InvalidRequest", 85 + "description": "Invalid request parameters" 86 + } 87 + ] 88 + }, 89 + "readme": { 90 + "type": "object", 91 + "required": [ 92 + "filename", 93 + "contents" 94 + ], 95 + "properties": { 96 + "filename": { 97 + "type": "string", 98 + "description": "Name of the readme file" 99 + }, 100 + "contents": { 101 + "type": "string", 102 + "description": "Contents of the readme file" 103 + } 104 + } 105 + }, 106 + "treeEntry": { 107 + "type": "object", 108 + "required": [ 109 + "name", 110 + "mode", 111 + "size" 112 + ], 113 + "properties": { 114 + "name": { 115 + "type": "string", 116 + "description": "Relative file or directory name" 117 + }, 118 + "mode": { 119 + "type": "string", 120 + "description": "File mode" 121 + }, 122 + "size": { 123 + "type": "integer", 124 + "description": "File size in bytes" 125 + }, 126 + "last_commit": { 127 + "type": "ref", 128 + "ref": "#lastCommit" 129 + } 130 + } 131 + }, 132 + "lastCommit": { 133 + "type": "object", 134 + "required": [ 135 + "hash", 136 + "message", 137 + "when" 138 + ], 139 + "properties": { 140 + "hash": { 141 + "type": "string", 142 + "description": "Commit hash" 143 + }, 144 + "message": { 145 + "type": "string", 146 + "description": "Commit message" 147 + }, 148 + "author": { 149 + "type": "ref", 150 + "ref": "#signature" 151 + }, 152 + "when": { 153 + "type": "string", 154 + "format": "datetime", 155 + "description": "Commit timestamp" 156 + } 157 + } 158 + }, 159 + "signature": { 160 + "type": "object", 161 + "required": [ 162 + "name", 163 + "email", 164 + "when" 165 + ], 166 + "properties": { 167 + "name": { 168 + "type": "string", 169 + "description": "Author name" 170 + }, 171 + "email": { 172 + "type": "string", 173 + "description": "Author email" 174 + }, 175 + "when": { 176 + "type": "string", 177 + "format": "datetime", 178 + "description": "Author timestamp" 179 + } 180 + } 181 + } 182 + } 183 + }
+44
api/lexicons/sh/tangled/git/temp/listBranches.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.git.temp.listBranches", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "parameters": { 8 + "type": "params", 9 + "required": ["repo"], 10 + "properties": { 11 + "repo": { 12 + "type": "string", 13 + "format": "at-uri", 14 + "description": "AT-URI of the repository" 15 + }, 16 + "limit": { 17 + "type": "integer", 18 + "description": "Maximum number of branches to return", 19 + "minimum": 1, 20 + "maximum": 100, 21 + "default": 50 22 + }, 23 + "cursor": { 24 + "type": "string", 25 + "description": "Pagination cursor" 26 + } 27 + } 28 + }, 29 + "output": { 30 + "encoding": "*/*" 31 + }, 32 + "errors": [ 33 + { 34 + "name": "RepoNotFound", 35 + "description": "Repository not found or access denied" 36 + }, 37 + { 38 + "name": "InvalidRequest", 39 + "description": "Invalid request parameters" 40 + } 41 + ] 42 + } 43 + } 44 + }
+56
api/lexicons/sh/tangled/git/temp/listCommits.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.git.temp.listCommits", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "parameters": { 8 + "type": "params", 9 + "required": ["repo"], 10 + "properties": { 11 + "repo": { 12 + "type": "string", 13 + "format": "at-uri", 14 + "description": "AT-URI of the repository" 15 + }, 16 + "ref": { 17 + "type": "string", 18 + "description": "Git reference (branch, tag, or commit SHA)" 19 + }, 20 + "limit": { 21 + "type": "integer", 22 + "description": "Maximum number of commits to return", 23 + "minimum": 1, 24 + "maximum": 100, 25 + "default": 50 26 + }, 27 + "cursor": { 28 + "type": "string", 29 + "description": "Pagination cursor (commit SHA)" 30 + } 31 + } 32 + }, 33 + "output": { 34 + "encoding": "*/*" 35 + }, 36 + "errors": [ 37 + { 38 + "name": "RepoNotFound", 39 + "description": "Repository not found or access denied" 40 + }, 41 + { 42 + "name": "RefNotFound", 43 + "description": "Git reference not found" 44 + }, 45 + { 46 + "name": "PathNotFound", 47 + "description": "Path not found in repository" 48 + }, 49 + { 50 + "name": "InvalidRequest", 51 + "description": "Invalid request parameters" 52 + } 53 + ] 54 + } 55 + } 56 + }
+100
api/lexicons/sh/tangled/git/temp/listLanguages.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.git.temp.listLanguages", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "parameters": { 8 + "type": "params", 9 + "required": ["repo"], 10 + "properties": { 11 + "repo": { 12 + "type": "string", 13 + "format": "at-uri", 14 + "description": "AT-URI of the repository" 15 + }, 16 + "ref": { 17 + "type": "string", 18 + "description": "Git reference (branch, tag, or commit SHA)", 19 + "default": "HEAD" 20 + } 21 + } 22 + }, 23 + "output": { 24 + "encoding": "application/json", 25 + "schema": { 26 + "type": "object", 27 + "required": ["ref", "languages"], 28 + "properties": { 29 + "ref": { 30 + "type": "string", 31 + "description": "The git reference used" 32 + }, 33 + "languages": { 34 + "type": "array", 35 + "items": { 36 + "type": "ref", 37 + "ref": "#language" 38 + } 39 + }, 40 + "totalSize": { 41 + "type": "integer", 42 + "description": "Total size of all analyzed files in bytes" 43 + }, 44 + "totalFiles": { 45 + "type": "integer", 46 + "description": "Total number of files analyzed" 47 + } 48 + } 49 + } 50 + }, 51 + "errors": [ 52 + { 53 + "name": "RepoNotFound", 54 + "description": "Repository not found or access denied" 55 + }, 56 + { 57 + "name": "RefNotFound", 58 + "description": "Git reference not found" 59 + }, 60 + { 61 + "name": "InvalidRequest", 62 + "description": "Invalid request parameters" 63 + } 64 + ] 65 + }, 66 + "language": { 67 + "type": "object", 68 + "required": ["name", "size", "percentage"], 69 + "properties": { 70 + "name": { 71 + "type": "string", 72 + "description": "Programming language name" 73 + }, 74 + "size": { 75 + "type": "integer", 76 + "description": "Total size of files in this language (bytes)" 77 + }, 78 + "percentage": { 79 + "type": "integer", 80 + "description": "Percentage of total codebase (0-100)" 81 + }, 82 + "fileCount": { 83 + "type": "integer", 84 + "description": "Number of files in this language" 85 + }, 86 + "color": { 87 + "type": "string", 88 + "description": "Hex color code for this language" 89 + }, 90 + "extensions": { 91 + "type": "array", 92 + "items": { 93 + "type": "string" 94 + }, 95 + "description": "File extensions associated with this language" 96 + } 97 + } 98 + } 99 + } 100 + }
+44
api/lexicons/sh/tangled/git/temp/listTags.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.git.temp.listTags", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "parameters": { 8 + "type": "params", 9 + "required": ["repo"], 10 + "properties": { 11 + "repo": { 12 + "type": "string", 13 + "format": "at-uri", 14 + "description": "AT-URI of the repository" 15 + }, 16 + "limit": { 17 + "type": "integer", 18 + "description": "Maximum number of tags to return", 19 + "minimum": 1, 20 + "maximum": 100, 21 + "default": 50 22 + }, 23 + "cursor": { 24 + "type": "string", 25 + "description": "Pagination cursor" 26 + } 27 + } 28 + }, 29 + "output": { 30 + "encoding": "*/*" 31 + }, 32 + "errors": [ 33 + { 34 + "name": "RepoNotFound", 35 + "description": "Repository not found or access denied" 36 + }, 37 + { 38 + "name": "InvalidRequest", 39 + "description": "Invalid request parameters" 40 + } 41 + ] 42 + } 43 + } 44 + }
+29
api/lexicons/sh/tangled/graph/follow.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.graph.follow", 4 + "needsCbor": true, 5 + "needsType": true, 6 + "defs": { 7 + "main": { 8 + "type": "record", 9 + "key": "tid", 10 + "record": { 11 + "type": "object", 12 + "required": [ 13 + "subject", 14 + "createdAt" 15 + ], 16 + "properties": { 17 + "subject": { 18 + "type": "string", 19 + "format": "did" 20 + }, 21 + "createdAt": { 22 + "type": "string", 23 + "format": "datetime" 24 + } 25 + } 26 + } 27 + } 28 + } 29 + }
+38
api/lexicons/sh/tangled/graph/vouch.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.graph.vouch", 4 + "needsCbor": true, 5 + "needsType": true, 6 + "defs": { 7 + "main": { 8 + "type": "record", 9 + "key": "any", 10 + "record": { 11 + "type": "object", 12 + "required": [ 13 + "kind", 14 + "createdAt" 15 + ], 16 + "properties": { 17 + "kind": { 18 + "type": "string", 19 + "description": "Whether this user is being vouched for or denounced", 20 + "enum": ["vouch", "denounce"], 21 + "default": "vouch" 22 + }, 23 + "reason": { 24 + "type": "string", 25 + "description": "The reason for this vouch/denouncement", 26 + "maxGraphemes": 256, 27 + "maxLength": 2560 28 + }, 29 + "createdAt": { 30 + "type": "string", 31 + "format": "datetime" 32 + } 33 + } 34 + } 35 + } 36 + } 37 + } 38 +
+12
api/lexicons/sh/tangled/issue/closed.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo.issue.state.closed", 4 + "needsCbor": true, 5 + "needsType": true, 6 + "defs": { 7 + "main": { 8 + "type": "token", 9 + "description": "closed issue" 10 + } 11 + } 12 + }
+51
api/lexicons/sh/tangled/issue/comment.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo.issue.comment", 4 + "needsCbor": true, 5 + "needsType": true, 6 + "defs": { 7 + "main": { 8 + "type": "record", 9 + "key": "tid", 10 + "record": { 11 + "type": "object", 12 + "required": [ 13 + "issue", 14 + "body", 15 + "createdAt" 16 + ], 17 + "properties": { 18 + "issue": { 19 + "type": "string", 20 + "format": "at-uri" 21 + }, 22 + "body": { 23 + "type": "string" 24 + }, 25 + "createdAt": { 26 + "type": "string", 27 + "format": "datetime" 28 + }, 29 + "replyTo": { 30 + "type": "string", 31 + "format": "at-uri" 32 + }, 33 + "mentions": { 34 + "type": "array", 35 + "items": { 36 + "type": "string", 37 + "format": "did" 38 + } 39 + }, 40 + "references": { 41 + "type": "array", 42 + "items": { 43 + "type": "string", 44 + "format": "at-uri" 45 + } 46 + } 47 + } 48 + } 49 + } 50 + } 51 + }
+50
api/lexicons/sh/tangled/issue/issue.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo.issue", 4 + "needsCbor": true, 5 + "needsType": true, 6 + "defs": { 7 + "main": { 8 + "type": "record", 9 + "key": "tid", 10 + "record": { 11 + "type": "object", 12 + "required": ["title", "createdAt"], 13 + "properties": { 14 + "repo": { 15 + "type": "string", 16 + "format": "at-uri" 17 + }, 18 + "repoDid": { 19 + "type": "string", 20 + "format": "did" 21 + }, 22 + "title": { 23 + "type": "string" 24 + }, 25 + "body": { 26 + "type": "string" 27 + }, 28 + "createdAt": { 29 + "type": "string", 30 + "format": "datetime" 31 + }, 32 + "mentions": { 33 + "type": "array", 34 + "items": { 35 + "type": "string", 36 + "format": "did" 37 + } 38 + }, 39 + "references": { 40 + "type": "array", 41 + "items": { 42 + "type": "string", 43 + "format": "at-uri" 44 + } 45 + } 46 + } 47 + } 48 + } 49 + } 50 + }
+12
api/lexicons/sh/tangled/issue/open.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo.issue.state.open", 4 + "needsCbor": true, 5 + "needsType": true, 6 + "defs": { 7 + "main": { 8 + "type": "token", 9 + "description": "open issue" 10 + } 11 + } 12 + }
+34
api/lexicons/sh/tangled/issue/state.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo.issue.state", 4 + "needsCbor": true, 5 + "needsType": true, 6 + "defs": { 7 + "main": { 8 + "type": "record", 9 + "key": "tid", 10 + "record": { 11 + "type": "object", 12 + "required": [ 13 + "issue", 14 + "state" 15 + ], 16 + "properties": { 17 + "issue": { 18 + "type": "string", 19 + "format": "at-uri" 20 + }, 21 + "state": { 22 + "type": "string", 23 + "description": "state of the issue", 24 + "knownValues": [ 25 + "sh.tangled.repo.issue.state.open", 26 + "sh.tangled.repo.issue.state.closed" 27 + ], 28 + "default": "sh.tangled.repo.issue.state.open" 29 + } 30 + } 31 + } 32 + } 33 + } 34 + }
+24
api/lexicons/sh/tangled/knot/knot.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.knot", 4 + "needsCbor": true, 5 + "needsType": true, 6 + "defs": { 7 + "main": { 8 + "type": "record", 9 + "key": "any", 10 + "record": { 11 + "type": "object", 12 + "required": [ 13 + "createdAt" 14 + ], 15 + "properties": { 16 + "createdAt": { 17 + "type": "string", 18 + "format": "datetime" 19 + } 20 + } 21 + } 22 + } 23 + } 24 + }
+73
api/lexicons/sh/tangled/knot/listKeys.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.knot.listKeys", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "List all public keys stored in the knot server", 8 + "parameters": { 9 + "type": "params", 10 + "properties": { 11 + "limit": { 12 + "type": "integer", 13 + "description": "Maximum number of keys to return", 14 + "minimum": 1, 15 + "maximum": 1000, 16 + "default": 100 17 + }, 18 + "cursor": { 19 + "type": "string", 20 + "description": "Pagination cursor" 21 + } 22 + } 23 + }, 24 + "output": { 25 + "encoding": "application/json", 26 + "schema": { 27 + "type": "object", 28 + "required": ["keys"], 29 + "properties": { 30 + "keys": { 31 + "type": "array", 32 + "items": { 33 + "type": "ref", 34 + "ref": "#publicKey" 35 + } 36 + }, 37 + "cursor": { 38 + "type": "string", 39 + "description": "Pagination cursor for next page" 40 + } 41 + } 42 + } 43 + }, 44 + "errors": [ 45 + { 46 + "name": "InternalServerError", 47 + "description": "Failed to retrieve public keys" 48 + } 49 + ] 50 + }, 51 + "publicKey": { 52 + "type": "object", 53 + "required": ["did", "key", "createdAt"], 54 + "properties": { 55 + "did": { 56 + "type": "string", 57 + "format": "did", 58 + "description": "DID associated with the public key" 59 + }, 60 + "key": { 61 + "type": "string", 62 + "maxLength": 4096, 63 + "description": "Public key contents" 64 + }, 65 + "createdAt": { 66 + "type": "string", 67 + "format": "datetime", 68 + "description": "Key upload timestamp" 69 + } 70 + } 71 + } 72 + } 73 + }
+34
api/lexicons/sh/tangled/knot/member.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.knot.member", 4 + "needsCbor": true, 5 + "needsType": true, 6 + "defs": { 7 + "main": { 8 + "type": "record", 9 + "key": "tid", 10 + "record": { 11 + "type": "object", 12 + "required": [ 13 + "subject", 14 + "domain", 15 + "createdAt" 16 + ], 17 + "properties": { 18 + "subject": { 19 + "type": "string", 20 + "format": "did" 21 + }, 22 + "domain": { 23 + "type": "string", 24 + "description": "domain that this member now belongs to" 25 + }, 26 + "createdAt": { 27 + "type": "string", 28 + "format": "datetime" 29 + } 30 + } 31 + } 32 + } 33 + } 34 + }
+57
api/lexicons/sh/tangled/knot/subscribeRepos.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.knot.subscribeRepos", 4 + "defs": { 5 + "main": { 6 + "type": "subscription", 7 + "description": "Repository event stream, aka Firehose endpoint. Outputs repo commits with diff data, and identity update events, for all repositories on the current server. See the atproto specifications for details around stream sequencing, repo versioning, CAR diff format, and more. Public and does not require auth; implemented by PDS and Relay.", 8 + "parameters": { 9 + "type": "params", 10 + "properties": { 11 + "cursor": { 12 + "type": "integer", 13 + "description": "The last known event seq number to backfill from." 14 + } 15 + } 16 + }, 17 + "message": { 18 + "schema": { 19 + "type": "union", 20 + "refs": ["#identity", "sh.tangled.git.refUpdate"] 21 + } 22 + }, 23 + "errors": [ 24 + { "name": "FutureCursor" }, 25 + { 26 + "name": "ConsumerTooSlow", 27 + "description": "If the consumer of the stream can not keep up with events, and a backlog gets too large, the server will drop the connection." 28 + } 29 + ] 30 + }, 31 + "identity": { 32 + "type": "object", 33 + "required": ["seq", "did", "time"], 34 + "properties": { 35 + "seq": { "type": "integer", "description": "The stream sequence number of this message." }, 36 + "did": { "type": "string", "format": "did", "description": "Repository DID identifier" }, 37 + "time": { "type": "string", "format": "datetime" } 38 + } 39 + }, 40 + "gitSync1": { 41 + "type": "object", 42 + "required": ["seq", "did"], 43 + "properties": { 44 + "seq": { "type": "integer", "description": "The stream sequence number of this message." }, 45 + "did": { "type": "string", "format": "did", "description": "Repository DID identifier" } 46 + } 47 + }, 48 + "gitSync2": { 49 + "type": "object", 50 + "required": ["seq", "repo"], 51 + "properties": { 52 + "seq": { "type": "integer", "description": "The stream sequence number of this message." }, 53 + "repo": { "type": "string", "format": "at-uri", "description": "Repository AT-URI identifier" } 54 + } 55 + } 56 + } 57 + }
+25
api/lexicons/sh/tangled/knot/version.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.knot.version", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get the version of a knot", 8 + "output": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "required": [ 13 + "version" 14 + ], 15 + "properties": { 16 + "version": { 17 + "type": "string" 18 + } 19 + } 20 + } 21 + }, 22 + "errors": [] 23 + } 24 + } 25 + }
+89
api/lexicons/sh/tangled/label/definition.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.label.definition", 4 + "needsCbor": true, 5 + "needsType": true, 6 + "defs": { 7 + "main": { 8 + "type": "record", 9 + "key": "any", 10 + "record": { 11 + "type": "object", 12 + "required": [ 13 + "name", 14 + "valueType", 15 + "scope", 16 + "createdAt" 17 + ], 18 + "properties": { 19 + "name": { 20 + "type": "string", 21 + "description": "The display name of this label.", 22 + "minGraphemes": 1, 23 + "maxGraphemes": 40 24 + }, 25 + "valueType": { 26 + "type": "ref", 27 + "ref": "#valueType", 28 + "description": "The type definition of this label. Appviews may allow sorting for certain types." 29 + }, 30 + "scope": { 31 + "type": "array", 32 + "description": "The areas of the repo this label may apply to, eg.: sh.tangled.repo.issue. Appviews may choose to respect this.", 33 + "items": { 34 + "type": "string", 35 + "format": "nsid" 36 + } 37 + }, 38 + "color": { 39 + "type": "string", 40 + "description": "The hex value for the background color for the label. Appviews may choose to respect this." 41 + }, 42 + "createdAt": { 43 + "type": "string", 44 + "format": "datetime" 45 + }, 46 + "multiple": { 47 + "type": "boolean", 48 + "description": "Whether this label can be repeated for a given entity, eg.: [reviewer:foo, reviewer:bar]" 49 + } 50 + } 51 + } 52 + }, 53 + "valueType": { 54 + "type": "object", 55 + "required": [ 56 + "type", 57 + "format" 58 + ], 59 + "properties": { 60 + "type": { 61 + "type": "string", 62 + "enum": [ 63 + "null", 64 + "boolean", 65 + "integer", 66 + "string" 67 + ], 68 + "description": "The concrete type of this label's value." 69 + }, 70 + "format": { 71 + "type": "string", 72 + "enum": [ 73 + "any", 74 + "did", 75 + "nsid" 76 + ], 77 + "description": "An optional constraint that can be applied on string concrete types." 78 + }, 79 + "enum": { 80 + "type": "array", 81 + "description": "Closed set of values that this label can take.", 82 + "items": { 83 + "type": "string" 84 + } 85 + } 86 + } 87 + } 88 + } 89 + }
+64
api/lexicons/sh/tangled/label/op.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.label.op", 4 + "needsCbor": true, 5 + "needsType": true, 6 + "defs": { 7 + "main": { 8 + "type": "record", 9 + "key": "tid", 10 + "record": { 11 + "type": "object", 12 + "required": [ 13 + "subject", 14 + "add", 15 + "delete", 16 + "performedAt" 17 + ], 18 + "properties": { 19 + "subject": { 20 + "type": "string", 21 + "format": "at-uri", 22 + "description": "The subject (task, pull or discussion) of this label. Appviews may apply a `scope` check and refuse this op." 23 + }, 24 + "performedAt": { 25 + "type": "string", 26 + "format": "datetime" 27 + }, 28 + "add": { 29 + "type": "array", 30 + "items": { 31 + "type": "ref", 32 + "ref": "#operand" 33 + } 34 + }, 35 + "delete": { 36 + "type": "array", 37 + "items": { 38 + "type": "ref", 39 + "ref": "#operand" 40 + } 41 + } 42 + } 43 + } 44 + }, 45 + "operand": { 46 + "type": "object", 47 + "required": [ 48 + "key", 49 + "value" 50 + ], 51 + "properties": { 52 + "key": { 53 + "type": "string", 54 + "format": "at-uri", 55 + "description": "ATURI to the label definition" 56 + }, 57 + "value": { 58 + "type": "string", 59 + "description": "Stringified value of the label. This is first unstringed by appviews and then interpreted as a concrete value." 60 + } 61 + } 62 + } 63 + } 64 + }
+31
api/lexicons/sh/tangled/owner.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.owner", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get the owner of a service", 8 + "output": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "required": [ 13 + "owner" 14 + ], 15 + "properties": { 16 + "owner": { 17 + "type": "string", 18 + "format": "did" 19 + } 20 + } 21 + } 22 + }, 23 + "errors": [ 24 + { 25 + "name": "OwnerNotFound", 26 + "description": "Owner is not set for this service" 27 + } 28 + ] 29 + } 30 + } 31 + }
+33
api/lexicons/sh/tangled/pipeline/cancelPipeline.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.pipeline.cancelPipeline", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Cancel a running pipeline", 8 + "input": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "required": ["repo", "pipeline", "workflow"], 13 + "properties": { 14 + "repo": { 15 + "type": "string", 16 + "format": "at-uri", 17 + "description": "repo at-uri, spindle can't resolve repo from pipeline at-uri yet" 18 + }, 19 + "pipeline": { 20 + "type": "string", 21 + "format": "at-uri", 22 + "description": "pipeline at-uri" 23 + }, 24 + "workflow": { 25 + "type": "string", 26 + "description": "workflow name" 27 + } 28 + } 29 + } 30 + } 31 + } 32 + } 33 + }
+211
api/lexicons/sh/tangled/pipeline/pipeline.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.pipeline", 4 + "needsCbor": true, 5 + "needsType": true, 6 + "defs": { 7 + "main": { 8 + "type": "record", 9 + "key": "tid", 10 + "record": { 11 + "type": "object", 12 + "required": [ 13 + "triggerMetadata", 14 + "workflows" 15 + ], 16 + "properties": { 17 + "triggerMetadata": { 18 + "type": "ref", 19 + "ref": "#triggerMetadata" 20 + }, 21 + "workflows": { 22 + "type": "array", 23 + "items": { 24 + "type": "ref", 25 + "ref": "#workflow" 26 + } 27 + } 28 + } 29 + } 30 + }, 31 + "triggerMetadata": { 32 + "type": "object", 33 + "required": [ 34 + "kind", 35 + "repo" 36 + ], 37 + "properties": { 38 + "kind": { 39 + "type": "string", 40 + "enum": [ 41 + "push", 42 + "pull_request", 43 + "manual" 44 + ] 45 + }, 46 + "repo": { 47 + "type": "ref", 48 + "ref": "#triggerRepo" 49 + }, 50 + "push": { 51 + "type": "ref", 52 + "ref": "#pushTriggerData" 53 + }, 54 + "pullRequest": { 55 + "type": "ref", 56 + "ref": "#pullRequestTriggerData" 57 + }, 58 + "manual": { 59 + "type": "ref", 60 + "ref": "#manualTriggerData" 61 + } 62 + } 63 + }, 64 + "triggerRepo": { 65 + "type": "object", 66 + "required": [ 67 + "knot", 68 + "did", 69 + "defaultBranch" 70 + ], 71 + "properties": { 72 + "knot": { 73 + "type": "string" 74 + }, 75 + "did": { 76 + "type": "string", 77 + "format": "did" 78 + }, 79 + "repoDid": { 80 + "type": "string", 81 + "description": "DID of the repo itself", 82 + "format": "did" 83 + }, 84 + "repo": { 85 + "type": "string" 86 + }, 87 + "defaultBranch": { 88 + "type": "string" 89 + } 90 + } 91 + }, 92 + "pushTriggerData": { 93 + "type": "object", 94 + "required": [ 95 + "ref", 96 + "newSha", 97 + "oldSha" 98 + ], 99 + "properties": { 100 + "ref": { 101 + "type": "string" 102 + }, 103 + "newSha": { 104 + "type": "string", 105 + "minLength": 40, 106 + "maxLength": 40 107 + }, 108 + "oldSha": { 109 + "type": "string", 110 + "minLength": 40, 111 + "maxLength": 40 112 + } 113 + } 114 + }, 115 + "pullRequestTriggerData": { 116 + "type": "object", 117 + "required": [ 118 + "sourceBranch", 119 + "targetBranch", 120 + "sourceSha", 121 + "action" 122 + ], 123 + "properties": { 124 + "sourceBranch": { 125 + "type": "string" 126 + }, 127 + "targetBranch": { 128 + "type": "string" 129 + }, 130 + "sourceSha": { 131 + "type": "string", 132 + "minLength": 40, 133 + "maxLength": 40 134 + }, 135 + "action": { 136 + "type": "string" 137 + } 138 + } 139 + }, 140 + "manualTriggerData": { 141 + "type": "object", 142 + "properties": { 143 + "inputs": { 144 + "type": "array", 145 + "items": { 146 + "type": "ref", 147 + "ref": "#pair" 148 + } 149 + } 150 + } 151 + }, 152 + "workflow": { 153 + "type": "object", 154 + "required": [ 155 + "name", 156 + "engine", 157 + "clone", 158 + "raw" 159 + ], 160 + "properties": { 161 + "name": { 162 + "type": "string" 163 + }, 164 + "engine": { 165 + "type": "string" 166 + }, 167 + "clone": { 168 + "type": "ref", 169 + "ref": "#cloneOpts" 170 + }, 171 + "raw": { 172 + "type": "string" 173 + } 174 + } 175 + }, 176 + "cloneOpts": { 177 + "type": "object", 178 + "required": [ 179 + "skip", 180 + "depth", 181 + "submodules" 182 + ], 183 + "properties": { 184 + "skip": { 185 + "type": "boolean" 186 + }, 187 + "depth": { 188 + "type": "integer" 189 + }, 190 + "submodules": { 191 + "type": "boolean" 192 + } 193 + } 194 + }, 195 + "pair": { 196 + "type": "object", 197 + "required": [ 198 + "key", 199 + "value" 200 + ], 201 + "properties": { 202 + "key": { 203 + "type": "string" 204 + }, 205 + "value": { 206 + "type": "string" 207 + } 208 + } 209 + } 210 + } 211 + }
+53
api/lexicons/sh/tangled/pipeline/status.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.pipeline.status", 4 + "needsCbor": true, 5 + "needsType": true, 6 + "defs": { 7 + "main": { 8 + "type": "record", 9 + "key": "tid", 10 + "record": { 11 + "type": "object", 12 + "required": ["pipeline", "workflow", "status", "createdAt"], 13 + "properties": { 14 + "pipeline": { 15 + "type": "string", 16 + "format": "at-uri", 17 + "description": "ATURI of the pipeline" 18 + }, 19 + "workflow": { 20 + "type": "string", 21 + "format": "at-uri", 22 + "description": "name of the workflow within this pipeline" 23 + }, 24 + "status": { 25 + "type": "string", 26 + "description": "status of the workflow", 27 + "enum": [ 28 + "pending", 29 + "running", 30 + "failed", 31 + "timeout", 32 + "cancelled", 33 + "success" 34 + ] 35 + }, 36 + "createdAt": { 37 + "type": "string", 38 + "format": "datetime", 39 + "description": "time of creation of this status update" 40 + }, 41 + "error": { 42 + "type": "string", 43 + "description": "error message if failed" 44 + }, 45 + "exitCode": { 46 + "type": "integer", 47 + "description": "exit code if failed" 48 + } 49 + } 50 + } 51 + } 52 + } 53 + }
+36
api/lexicons/sh/tangled/publicKey.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.publicKey", 4 + "needsCbor": true, 5 + "needsType": true, 6 + "defs": { 7 + "main": { 8 + "type": "record", 9 + "key": "tid", 10 + "record": { 11 + "type": "object", 12 + "required": [ 13 + "key", 14 + "name", 15 + "createdAt" 16 + ], 17 + "properties": { 18 + "key": { 19 + "type": "string", 20 + "maxLength": 4096, 21 + "description": "public key contents" 22 + }, 23 + "name": { 24 + "type": "string", 25 + "description": "human-readable name for this key" 26 + }, 27 + "createdAt": { 28 + "type": "string", 29 + "format": "datetime", 30 + "description": "key upload timestamp" 31 + } 32 + } 33 + } 34 + } 35 + } 36 + }
+12
api/lexicons/sh/tangled/pulls/closed.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo.pull.status.closed", 4 + "needsCbor": true, 5 + "needsType": true, 6 + "defs": { 7 + "main": { 8 + "type": "token", 9 + "description": "closed pull request" 10 + } 11 + } 12 + }
+47
api/lexicons/sh/tangled/pulls/comment.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo.pull.comment", 4 + "needsCbor": true, 5 + "needsType": true, 6 + "defs": { 7 + "main": { 8 + "type": "record", 9 + "key": "tid", 10 + "record": { 11 + "type": "object", 12 + "required": [ 13 + "pull", 14 + "body", 15 + "createdAt" 16 + ], 17 + "properties": { 18 + "pull": { 19 + "type": "string", 20 + "format": "at-uri" 21 + }, 22 + "body": { 23 + "type": "string" 24 + }, 25 + "createdAt": { 26 + "type": "string", 27 + "format": "datetime" 28 + }, 29 + "mentions": { 30 + "type": "array", 31 + "items": { 32 + "type": "string", 33 + "format": "did" 34 + } 35 + }, 36 + "references": { 37 + "type": "array", 38 + "items": { 39 + "type": "string", 40 + "format": "at-uri" 41 + } 42 + } 43 + } 44 + } 45 + } 46 + } 47 + }
+12
api/lexicons/sh/tangled/pulls/merged.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo.pull.status.merged", 4 + "needsCbor": true, 5 + "needsType": true, 6 + "defs": { 7 + "main": { 8 + "type": "token", 9 + "description": "merged pull request" 10 + } 11 + } 12 + }
+12
api/lexicons/sh/tangled/pulls/open.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo.pull.status.open", 4 + "needsCbor": true, 5 + "needsType": true, 6 + "defs": { 7 + "main": { 8 + "type": "token", 9 + "description": "open pull request" 10 + } 11 + } 12 + }
+124
api/lexicons/sh/tangled/pulls/pull.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo.pull", 4 + "needsCbor": true, 5 + "needsType": true, 6 + "defs": { 7 + "main": { 8 + "type": "record", 9 + "key": "tid", 10 + "record": { 11 + "type": "object", 12 + "required": [ 13 + "target", 14 + "title", 15 + "createdAt", 16 + "rounds" 17 + ], 18 + "properties": { 19 + "title": { 20 + "type": "string" 21 + }, 22 + "body": { 23 + "type": "string" 24 + }, 25 + "rounds": { 26 + "type": "array", 27 + "items": { 28 + "type": "ref", 29 + "ref": "#round" 30 + } 31 + }, 32 + "source": { 33 + "type": "ref", 34 + "ref": "#source" 35 + }, 36 + "target": { 37 + "type": "ref", 38 + "ref": "#target" 39 + }, 40 + "createdAt": { 41 + "type": "string", 42 + "format": "datetime" 43 + }, 44 + "mentions": { 45 + "type": "array", 46 + "items": { 47 + "type": "string", 48 + "format": "did" 49 + } 50 + }, 51 + "references": { 52 + "type": "array", 53 + "items": { 54 + "type": "string", 55 + "format": "at-uri" 56 + } 57 + }, 58 + "dependentOn": { 59 + "type": "string", 60 + "format": "at-uri" 61 + } 62 + } 63 + } 64 + }, 65 + "target": { 66 + "type": "object", 67 + "required": [ 68 + "branch" 69 + ], 70 + "properties": { 71 + "repo": { 72 + "type": "string", 73 + "format": "at-uri" 74 + }, 75 + "repoDid": { 76 + "type": "string", 77 + "format": "did" 78 + }, 79 + "branch": { 80 + "type": "string" 81 + } 82 + } 83 + }, 84 + "source": { 85 + "type": "object", 86 + "required": [ 87 + "branch" 88 + ], 89 + "properties": { 90 + "branch": { 91 + "type": "string" 92 + }, 93 + "repo": { 94 + "type": "string", 95 + "format": "at-uri" 96 + }, 97 + "repoDid": { 98 + "type": "string", 99 + "format": "did" 100 + } 101 + } 102 + }, 103 + "round": { 104 + "type": "object", 105 + "required": [ 106 + "patchBlob", 107 + "createdAt" 108 + ], 109 + "description": "revisions of this pull request, newer rounds are appended to this array. appviews may reject records do not treat this field as append-only. the blob format is gzipped text-based git-format-patches.", 110 + "properties": { 111 + "createdAt": { 112 + "type": "string", 113 + "format": "datetime" 114 + }, 115 + "patchBlob": { 116 + "type": "blob", 117 + "accept": [ 118 + "application/gzip" 119 + ] 120 + } 121 + } 122 + } 123 + } 124 + }
+35
api/lexicons/sh/tangled/pulls/state.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo.pull.status", 4 + "needsCbor": true, 5 + "needsType": true, 6 + "defs": { 7 + "main": { 8 + "type": "record", 9 + "key": "tid", 10 + "record": { 11 + "type": "object", 12 + "required": [ 13 + "pull", 14 + "status" 15 + ], 16 + "properties": { 17 + "pull": { 18 + "type": "string", 19 + "format": "at-uri" 20 + }, 21 + "status": { 22 + "type": "string", 23 + "description": "status of the pull request", 24 + "knownValues": [ 25 + "sh.tangled.repo.pull.status.open", 26 + "sh.tangled.repo.pull.status.closed", 27 + "sh.tangled.repo.pull.status.merged" 28 + ], 29 + "default": "sh.tangled.repo.pull.status.open" 30 + } 31 + } 32 + } 33 + } 34 + } 35 + }
+37
api/lexicons/sh/tangled/repo/addSecret.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo.addSecret", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Add a CI secret", 8 + "input": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "required": [ 13 + "repo", 14 + "key", 15 + "value" 16 + ], 17 + "properties": { 18 + "repo": { 19 + "type": "string", 20 + "format": "at-uri" 21 + }, 22 + "key": { 23 + "type": "string", 24 + "maxLength": 50, 25 + "minLength": 1 26 + }, 27 + "value": { 28 + "type": "string", 29 + "maxLength": 200, 30 + "minLength": 1 31 + } 32 + } 33 + } 34 + } 35 + } 36 + } 37 + }
+55
api/lexicons/sh/tangled/repo/archive.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo.archive", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "parameters": { 8 + "type": "params", 9 + "required": ["repo", "ref"], 10 + "properties": { 11 + "repo": { 12 + "type": "string", 13 + "description": "Repository identifier in format 'did:plc:.../repoName'" 14 + }, 15 + "ref": { 16 + "type": "string", 17 + "description": "Git reference (branch, tag, or commit SHA)" 18 + }, 19 + "format": { 20 + "type": "string", 21 + "description": "Archive format", 22 + "enum": ["tar", "zip", "tar.gz", "tar.bz2", "tar.xz"], 23 + "default": "tar.gz" 24 + }, 25 + "prefix": { 26 + "type": "string", 27 + "description": "Prefix for files in the archive" 28 + } 29 + } 30 + }, 31 + "output": { 32 + "encoding": "*/*", 33 + "description": "Binary archive data" 34 + }, 35 + "errors": [ 36 + { 37 + "name": "RepoNotFound", 38 + "description": "Repository not found or access denied" 39 + }, 40 + { 41 + "name": "RefNotFound", 42 + "description": "Git reference not found" 43 + }, 44 + { 45 + "name": "InvalidRequest", 46 + "description": "Invalid request parameters" 47 + }, 48 + { 49 + "name": "ArchiveError", 50 + "description": "Failed to create archive" 51 + } 52 + ] 53 + } 54 + } 55 + }
+55
api/lexicons/sh/tangled/repo/artifact.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo.artifact", 4 + "needsCbor": true, 5 + "needsType": true, 6 + "defs": { 7 + "main": { 8 + "type": "record", 9 + "key": "tid", 10 + "record": { 11 + "type": "object", 12 + "required": [ 13 + "name", 14 + "tag", 15 + "createdAt", 16 + "artifact" 17 + ], 18 + "properties": { 19 + "name": { 20 + "type": "string", 21 + "description": "name of the artifact" 22 + }, 23 + "repo": { 24 + "type": "string", 25 + "format": "at-uri", 26 + "description": "repo that this artifact is being uploaded to" 27 + }, 28 + "repoDid": { 29 + "type": "string", 30 + "format": "did" 31 + }, 32 + "tag": { 33 + "type": "bytes", 34 + "description": "hash of the tag object that this artifact is attached to (only annotated tags are supported)", 35 + "minLength": 20, 36 + "maxLength": 20 37 + }, 38 + "createdAt": { 39 + "type": "string", 40 + "format": "datetime", 41 + "description": "time of creation of this artifact" 42 + }, 43 + "artifact": { 44 + "type": "blob", 45 + "description": "the artifact", 46 + "accept": [ 47 + "*/*" 48 + ], 49 + "maxSize": 52428800 50 + } 51 + } 52 + } 53 + } 54 + } 55 + }
+181
api/lexicons/sh/tangled/repo/blob.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo.blob", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "parameters": { 8 + "type": "params", 9 + "required": [ 10 + "repo", 11 + "ref", 12 + "path" 13 + ], 14 + "properties": { 15 + "repo": { 16 + "type": "string", 17 + "description": "Repository identifier in format 'did:plc:.../repoName'" 18 + }, 19 + "ref": { 20 + "type": "string", 21 + "description": "Git reference (branch, tag, or commit SHA)" 22 + }, 23 + "path": { 24 + "type": "string", 25 + "description": "Path to the file within the repository" 26 + }, 27 + "raw": { 28 + "type": "boolean", 29 + "description": "Return raw file content instead of JSON response", 30 + "default": false 31 + } 32 + } 33 + }, 34 + "output": { 35 + "encoding": "application/json", 36 + "schema": { 37 + "type": "object", 38 + "required": [ 39 + "ref", 40 + "path" 41 + ], 42 + "properties": { 43 + "ref": { 44 + "type": "string", 45 + "description": "The git reference used" 46 + }, 47 + "path": { 48 + "type": "string", 49 + "description": "The file path" 50 + }, 51 + "content": { 52 + "type": "string", 53 + "description": "File content (base64 encoded for binary files)" 54 + }, 55 + "encoding": { 56 + "type": "string", 57 + "description": "Content encoding", 58 + "enum": [ 59 + "utf-8", 60 + "base64" 61 + ] 62 + }, 63 + "size": { 64 + "type": "integer", 65 + "description": "File size in bytes" 66 + }, 67 + "isBinary": { 68 + "type": "boolean", 69 + "description": "Whether the file is binary" 70 + }, 71 + "mimeType": { 72 + "type": "string", 73 + "description": "MIME type of the file" 74 + }, 75 + "submodule": { 76 + "type": "ref", 77 + "ref": "#submodule", 78 + "description": "Submodule information if path is a submodule" 79 + }, 80 + "lastCommit": { 81 + "type": "ref", 82 + "ref": "#lastCommit" 83 + }, 84 + "fileTooLarge": { 85 + "type": "boolean" 86 + } 87 + } 88 + } 89 + }, 90 + "errors": [ 91 + { 92 + "name": "RepoNotFound", 93 + "description": "Repository not found or access denied" 94 + }, 95 + { 96 + "name": "RefNotFound", 97 + "description": "Git reference not found" 98 + }, 99 + { 100 + "name": "FileNotFound", 101 + "description": "File not found at the specified path" 102 + }, 103 + { 104 + "name": "InvalidRequest", 105 + "description": "Invalid request parameters" 106 + } 107 + ] 108 + }, 109 + "lastCommit": { 110 + "type": "object", 111 + "required": [ 112 + "hash", 113 + "message", 114 + "when" 115 + ], 116 + "properties": { 117 + "hash": { 118 + "type": "string", 119 + "description": "Commit hash" 120 + }, 121 + "message": { 122 + "type": "string", 123 + "description": "Commit message" 124 + }, 125 + "author": { 126 + "type": "ref", 127 + "ref": "#signature" 128 + }, 129 + "when": { 130 + "type": "string", 131 + "format": "datetime", 132 + "description": "Commit timestamp" 133 + } 134 + } 135 + }, 136 + "signature": { 137 + "type": "object", 138 + "required": [ 139 + "name", 140 + "email", 141 + "when" 142 + ], 143 + "properties": { 144 + "name": { 145 + "type": "string", 146 + "description": "Author name" 147 + }, 148 + "email": { 149 + "type": "string", 150 + "description": "Author email" 151 + }, 152 + "when": { 153 + "type": "string", 154 + "format": "datetime", 155 + "description": "Author timestamp" 156 + } 157 + } 158 + }, 159 + "submodule": { 160 + "type": "object", 161 + "required": [ 162 + "name", 163 + "url" 164 + ], 165 + "properties": { 166 + "name": { 167 + "type": "string", 168 + "description": "Submodule name" 169 + }, 170 + "url": { 171 + "type": "string", 172 + "description": "Submodule repository URL" 173 + }, 174 + "branch": { 175 + "type": "string", 176 + "description": "Branch to track in the submodule" 177 + } 178 + } 179 + } 180 + } 181 + }
+94
api/lexicons/sh/tangled/repo/branch.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo.branch", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "parameters": { 8 + "type": "params", 9 + "required": ["repo", "name"], 10 + "properties": { 11 + "repo": { 12 + "type": "string", 13 + "description": "Repository identifier in format 'did:plc:.../repoName'" 14 + }, 15 + "name": { 16 + "type": "string", 17 + "description": "Branch name to get information for" 18 + } 19 + } 20 + }, 21 + "output": { 22 + "encoding": "application/json", 23 + "schema": { 24 + "type": "object", 25 + "required": ["name", "hash", "when"], 26 + "properties": { 27 + "name": { 28 + "type": "string", 29 + "description": "Branch name" 30 + }, 31 + "hash": { 32 + "type": "string", 33 + "description": "Latest commit hash on this branch" 34 + }, 35 + "shortHash": { 36 + "type": "string", 37 + "description": "Short commit hash" 38 + }, 39 + "when": { 40 + "type": "string", 41 + "format": "datetime", 42 + "description": "Timestamp of latest commit" 43 + }, 44 + "message": { 45 + "type": "string", 46 + "description": "Latest commit message" 47 + }, 48 + "author": { 49 + "type": "ref", 50 + "ref": "#signature" 51 + }, 52 + "isDefault": { 53 + "type": "boolean", 54 + "description": "Whether this is the default branch" 55 + } 56 + } 57 + } 58 + }, 59 + "errors": [ 60 + { 61 + "name": "RepoNotFound", 62 + "description": "Repository not found or access denied" 63 + }, 64 + { 65 + "name": "BranchNotFound", 66 + "description": "Branch not found" 67 + }, 68 + { 69 + "name": "InvalidRequest", 70 + "description": "Invalid request parameters" 71 + } 72 + ] 73 + }, 74 + "signature": { 75 + "type": "object", 76 + "required": ["name", "email", "when"], 77 + "properties": { 78 + "name": { 79 + "type": "string", 80 + "description": "Author name" 81 + }, 82 + "email": { 83 + "type": "string", 84 + "description": "Author email" 85 + }, 86 + "when": { 87 + "type": "string", 88 + "format": "datetime", 89 + "description": "Author timestamp" 90 + } 91 + } 92 + } 93 + } 94 + }
+43
api/lexicons/sh/tangled/repo/branches.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo.branches", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "parameters": { 8 + "type": "params", 9 + "required": ["repo"], 10 + "properties": { 11 + "repo": { 12 + "type": "string", 13 + "description": "Repository identifier in format 'did:plc:.../repoName'" 14 + }, 15 + "limit": { 16 + "type": "integer", 17 + "description": "Maximum number of branches to return", 18 + "minimum": 1, 19 + "maximum": 100, 20 + "default": 50 21 + }, 22 + "cursor": { 23 + "type": "string", 24 + "description": "Pagination cursor" 25 + } 26 + } 27 + }, 28 + "output": { 29 + "encoding": "*/*" 30 + }, 31 + "errors": [ 32 + { 33 + "name": "RepoNotFound", 34 + "description": "Repository not found or access denied" 35 + }, 36 + { 37 + "name": "InvalidRequest", 38 + "description": "Invalid request parameters" 39 + } 40 + ] 41 + } 42 + } 43 + }
+39
api/lexicons/sh/tangled/repo/collaborator.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo.collaborator", 4 + "needsCbor": true, 5 + "needsType": true, 6 + "defs": { 7 + "main": { 8 + "type": "record", 9 + "key": "tid", 10 + "record": { 11 + "type": "object", 12 + "required": [ 13 + "subject", 14 + "createdAt" 15 + ], 16 + "properties": { 17 + "subject": { 18 + "type": "string", 19 + "format": "did" 20 + }, 21 + "repo": { 22 + "type": "string", 23 + "description": "repo to add this user to", 24 + "format": "at-uri" 25 + }, 26 + "repoDid": { 27 + "type": "string", 28 + "format": "did" 29 + }, 30 + "createdAt": { 31 + "type": "string", 32 + "format": "datetime" 33 + } 34 + } 35 + } 36 + } 37 + } 38 + } 39 +
+49
api/lexicons/sh/tangled/repo/compare.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo.compare", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "parameters": { 8 + "type": "params", 9 + "required": ["repo", "rev1", "rev2"], 10 + "properties": { 11 + "repo": { 12 + "type": "string", 13 + "description": "Repository identifier in format 'did:plc:.../repoName'" 14 + }, 15 + "rev1": { 16 + "type": "string", 17 + "description": "First revision (commit, branch, or tag)" 18 + }, 19 + "rev2": { 20 + "type": "string", 21 + "description": "Second revision (commit, branch, or tag)" 22 + } 23 + } 24 + }, 25 + "output": { 26 + "encoding": "*/*", 27 + "description": "Compare output in application/json" 28 + }, 29 + "errors": [ 30 + { 31 + "name": "RepoNotFound", 32 + "description": "Repository not found or access denied" 33 + }, 34 + { 35 + "name": "RevisionNotFound", 36 + "description": "One or both revisions not found" 37 + }, 38 + { 39 + "name": "InvalidRequest", 40 + "description": "Invalid request parameters" 41 + }, 42 + { 43 + "name": "CompareError", 44 + "description": "Failed to compare revisions" 45 + } 46 + ] 47 + } 48 + } 49 + }
+55
api/lexicons/sh/tangled/repo/create.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo.create", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Create a new repository", 8 + "input": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "required": [ 13 + "rkey", 14 + "name" 15 + ], 16 + "properties": { 17 + "rkey": { 18 + "type": "string", 19 + "description": "Rkey of the repository record" 20 + }, 21 + "name": { 22 + "type": "string", 23 + "description": "Name of the repository" 24 + }, 25 + "defaultBranch": { 26 + "type": "string", 27 + "description": "Default branch to push to" 28 + }, 29 + "source": { 30 + "type": "string", 31 + "description": "A source URL to clone from, populate this when forking or importing a repository." 32 + }, 33 + "repoDid": { 34 + "type": "string", 35 + "format": "did", 36 + "description": "Optional user-provided did:web to use as the repo identity instead of minting a did:plc." 37 + } 38 + } 39 + } 40 + }, 41 + "output": { 42 + "encoding": "application/json", 43 + "schema": { 44 + "type": "object", 45 + "properties": { 46 + "repoDid": { 47 + "type": "string", 48 + "format": "did" 49 + } 50 + } 51 + } 52 + } 53 + } 54 + } 55 + }
+29
api/lexicons/sh/tangled/repo/defaultBranch.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo.setDefaultBranch", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Set the default branch for a repository", 8 + "input": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "required": [ 13 + "repo", 14 + "defaultBranch" 15 + ], 16 + "properties": { 17 + "repo": { 18 + "type": "string", 19 + "format": "at-uri" 20 + }, 21 + "defaultBranch": { 22 + "type": "string" 23 + } 24 + } 25 + } 26 + } 27 + } 28 + } 29 + }
+32
api/lexicons/sh/tangled/repo/delete.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo.delete", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Delete a repository", 8 + "input": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "required": ["did", "name", "rkey"], 13 + "properties": { 14 + "did": { 15 + "type": "string", 16 + "format": "did", 17 + "description": "DID of the repository owner" 18 + }, 19 + "name": { 20 + "type": "string", 21 + "description": "Name of the repository to delete" 22 + }, 23 + "rkey": { 24 + "type": "string", 25 + "description": "Rkey of the repository record" 26 + } 27 + } 28 + } 29 + } 30 + } 31 + } 32 + }
+30
api/lexicons/sh/tangled/repo/deleteBranch.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo.deleteBranch", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Delete a branch on this repository", 8 + "input": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "required": [ 13 + "repo", 14 + "branch" 15 + ], 16 + "properties": { 17 + "repo": { 18 + "type": "string", 19 + "format": "at-uri" 20 + }, 21 + "branch": { 22 + "type": "string" 23 + } 24 + } 25 + } 26 + } 27 + } 28 + } 29 + } 30 +
+40
api/lexicons/sh/tangled/repo/diff.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo.diff", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "parameters": { 8 + "type": "params", 9 + "required": ["repo", "ref"], 10 + "properties": { 11 + "repo": { 12 + "type": "string", 13 + "description": "Repository identifier in format 'did:plc:.../repoName'" 14 + }, 15 + "ref": { 16 + "type": "string", 17 + "description": "Git reference (branch, tag, or commit SHA)" 18 + } 19 + } 20 + }, 21 + "output": { 22 + "encoding": "*/*" 23 + }, 24 + "errors": [ 25 + { 26 + "name": "RepoNotFound", 27 + "description": "Repository not found or access denied" 28 + }, 29 + { 30 + "name": "RefNotFound", 31 + "description": "Git reference not found" 32 + }, 33 + { 34 + "name": "InvalidRequest", 35 + "description": "Invalid request parameters" 36 + } 37 + ] 38 + } 39 + } 40 + }
+53
api/lexicons/sh/tangled/repo/forkStatus.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo.forkStatus", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Check fork status relative to upstream source", 8 + "input": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "required": ["did", "name", "source", "branch", "hiddenRef"], 13 + "properties": { 14 + "did": { 15 + "type": "string", 16 + "format": "did", 17 + "description": "DID of the fork owner" 18 + }, 19 + "name": { 20 + "type": "string", 21 + "description": "Name of the forked repository" 22 + }, 23 + "source": { 24 + "type": "string", 25 + "description": "Source repository URL" 26 + }, 27 + "branch": { 28 + "type": "string", 29 + "description": "Branch to check status for" 30 + }, 31 + "hiddenRef": { 32 + "type": "string", 33 + "description": "Hidden ref to use for comparison" 34 + } 35 + } 36 + } 37 + }, 38 + "output": { 39 + "encoding": "application/json", 40 + "schema": { 41 + "type": "object", 42 + "required": ["status"], 43 + "properties": { 44 + "status": { 45 + "type": "integer", 46 + "description": "Fork status: 0=UpToDate, 1=FastForwardable, 2=Conflict, 3=MissingBranch" 47 + } 48 + } 49 + } 50 + } 51 + } 52 + } 53 + }
+42
api/lexicons/sh/tangled/repo/forkSync.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo.forkSync", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Sync a forked repository with its upstream source", 8 + "input": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "required": [ 13 + "did", 14 + "source", 15 + "name", 16 + "branch" 17 + ], 18 + "properties": { 19 + "did": { 20 + "type": "string", 21 + "format": "did", 22 + "description": "DID of the fork owner" 23 + }, 24 + "source": { 25 + "type": "string", 26 + "format": "at-uri", 27 + "description": "AT-URI of the source repository" 28 + }, 29 + "name": { 30 + "type": "string", 31 + "description": "Name of the forked repository" 32 + }, 33 + "branch": { 34 + "type": "string", 35 + "description": "Branch to sync" 36 + } 37 + } 38 + } 39 + } 40 + } 41 + } 42 + }
+82
api/lexicons/sh/tangled/repo/getDefaultBranch.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo.getDefaultBranch", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "parameters": { 8 + "type": "params", 9 + "required": ["repo"], 10 + "properties": { 11 + "repo": { 12 + "type": "string", 13 + "description": "Repository identifier in format 'did:plc:.../repoName'" 14 + } 15 + } 16 + }, 17 + "output": { 18 + "encoding": "application/json", 19 + "schema": { 20 + "type": "object", 21 + "required": ["name", "hash", "when"], 22 + "properties": { 23 + "name": { 24 + "type": "string", 25 + "description": "Default branch name" 26 + }, 27 + "hash": { 28 + "type": "string", 29 + "description": "Latest commit hash on default branch" 30 + }, 31 + "shortHash": { 32 + "type": "string", 33 + "description": "Short commit hash" 34 + }, 35 + "when": { 36 + "type": "string", 37 + "format": "datetime", 38 + "description": "Timestamp of latest commit" 39 + }, 40 + "message": { 41 + "type": "string", 42 + "description": "Latest commit message" 43 + }, 44 + "author": { 45 + "type": "ref", 46 + "ref": "#signature" 47 + } 48 + } 49 + } 50 + }, 51 + "errors": [ 52 + { 53 + "name": "RepoNotFound", 54 + "description": "Repository not found or access denied" 55 + }, 56 + { 57 + "name": "InvalidRequest", 58 + "description": "Invalid request parameters" 59 + } 60 + ] 61 + }, 62 + "signature": { 63 + "type": "object", 64 + "required": ["name", "email", "when"], 65 + "properties": { 66 + "name": { 67 + "type": "string", 68 + "description": "Author name" 69 + }, 70 + "email": { 71 + "type": "string", 72 + "description": "Author email" 73 + }, 74 + "when": { 75 + "type": "string", 76 + "format": "datetime", 77 + "description": "Author timestamp" 78 + } 79 + } 80 + } 81 + } 82 + }
+59
api/lexicons/sh/tangled/repo/hiddenRef.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo.hiddenRef", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Create a hidden ref in a repository", 8 + "input": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "required": [ 13 + "repo", 14 + "forkRef", 15 + "remoteRef" 16 + ], 17 + "properties": { 18 + "repo": { 19 + "type": "string", 20 + "format": "at-uri", 21 + "description": "AT-URI of the repository" 22 + }, 23 + "forkRef": { 24 + "type": "string", 25 + "description": "Fork reference name" 26 + }, 27 + "remoteRef": { 28 + "type": "string", 29 + "description": "Remote reference name" 30 + } 31 + } 32 + } 33 + }, 34 + "output": { 35 + "encoding": "application/json", 36 + "schema": { 37 + "type": "object", 38 + "required": [ 39 + "success" 40 + ], 41 + "properties": { 42 + "success": { 43 + "type": "boolean", 44 + "description": "Whether the hidden ref was created successfully" 45 + }, 46 + "ref": { 47 + "type": "string", 48 + "description": "The created hidden ref name" 49 + }, 50 + "error": { 51 + "type": "string", 52 + "description": "Error message if creation failed" 53 + } 54 + } 55 + } 56 + } 57 + } 58 + } 59 + }
+99
api/lexicons/sh/tangled/repo/languages.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo.languages", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "parameters": { 8 + "type": "params", 9 + "required": ["repo"], 10 + "properties": { 11 + "repo": { 12 + "type": "string", 13 + "description": "Repository identifier in format 'did:plc:.../repoName'" 14 + }, 15 + "ref": { 16 + "type": "string", 17 + "description": "Git reference (branch, tag, or commit SHA)", 18 + "default": "HEAD" 19 + } 20 + } 21 + }, 22 + "output": { 23 + "encoding": "application/json", 24 + "schema": { 25 + "type": "object", 26 + "required": ["ref", "languages"], 27 + "properties": { 28 + "ref": { 29 + "type": "string", 30 + "description": "The git reference used" 31 + }, 32 + "languages": { 33 + "type": "array", 34 + "items": { 35 + "type": "ref", 36 + "ref": "#language" 37 + } 38 + }, 39 + "totalSize": { 40 + "type": "integer", 41 + "description": "Total size of all analyzed files in bytes" 42 + }, 43 + "totalFiles": { 44 + "type": "integer", 45 + "description": "Total number of files analyzed" 46 + } 47 + } 48 + } 49 + }, 50 + "errors": [ 51 + { 52 + "name": "RepoNotFound", 53 + "description": "Repository not found or access denied" 54 + }, 55 + { 56 + "name": "RefNotFound", 57 + "description": "Git reference not found" 58 + }, 59 + { 60 + "name": "InvalidRequest", 61 + "description": "Invalid request parameters" 62 + } 63 + ] 64 + }, 65 + "language": { 66 + "type": "object", 67 + "required": ["name", "size", "percentage"], 68 + "properties": { 69 + "name": { 70 + "type": "string", 71 + "description": "Programming language name" 72 + }, 73 + "size": { 74 + "type": "integer", 75 + "description": "Total size of files in this language (bytes)" 76 + }, 77 + "percentage": { 78 + "type": "integer", 79 + "description": "Percentage of total codebase (0-100)" 80 + }, 81 + "fileCount": { 82 + "type": "integer", 83 + "description": "Number of files in this language" 84 + }, 85 + "color": { 86 + "type": "string", 87 + "description": "Hex color code for this language" 88 + }, 89 + "extensions": { 90 + "type": "array", 91 + "items": { 92 + "type": "string" 93 + }, 94 + "description": "File extensions associated with this language" 95 + } 96 + } 97 + } 98 + } 99 + }
+67
api/lexicons/sh/tangled/repo/listSecrets.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo.listSecrets", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "parameters": { 8 + "type": "params", 9 + "required": [ 10 + "repo" 11 + ], 12 + "properties": { 13 + "repo": { 14 + "type": "string", 15 + "format": "at-uri" 16 + } 17 + } 18 + }, 19 + "output": { 20 + "encoding": "application/json", 21 + "schema": { 22 + "type": "object", 23 + "required": [ 24 + "secrets" 25 + ], 26 + "properties": { 27 + "secrets": { 28 + "type": "array", 29 + "items": { 30 + "type": "ref", 31 + "ref": "#secret" 32 + } 33 + } 34 + } 35 + } 36 + } 37 + }, 38 + "secret": { 39 + "type": "object", 40 + "required": [ 41 + "repo", 42 + "key", 43 + "createdAt", 44 + "createdBy" 45 + ], 46 + "properties": { 47 + "repo": { 48 + "type": "string", 49 + "format": "at-uri" 50 + }, 51 + "key": { 52 + "type": "string", 53 + "maxLength": 50, 54 + "minLength": 1 55 + }, 56 + "createdAt": { 57 + "type": "string", 58 + "format": "datetime" 59 + }, 60 + "createdBy": { 61 + "type": "string", 62 + "format": "did" 63 + } 64 + } 65 + } 66 + } 67 + }
+60
api/lexicons/sh/tangled/repo/log.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo.log", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "parameters": { 8 + "type": "params", 9 + "required": ["repo", "ref"], 10 + "properties": { 11 + "repo": { 12 + "type": "string", 13 + "description": "Repository identifier in format 'did:plc:.../repoName'" 14 + }, 15 + "ref": { 16 + "type": "string", 17 + "description": "Git reference (branch, tag, or commit SHA)" 18 + }, 19 + "path": { 20 + "type": "string", 21 + "description": "Path to filter commits by", 22 + "default": "" 23 + }, 24 + "limit": { 25 + "type": "integer", 26 + "description": "Maximum number of commits to return", 27 + "minimum": 1, 28 + "maximum": 100, 29 + "default": 50 30 + }, 31 + "cursor": { 32 + "type": "string", 33 + "description": "Pagination cursor (commit SHA)" 34 + } 35 + } 36 + }, 37 + "output": { 38 + "encoding": "*/*" 39 + }, 40 + "errors": [ 41 + { 42 + "name": "RepoNotFound", 43 + "description": "Repository not found or access denied" 44 + }, 45 + { 46 + "name": "RefNotFound", 47 + "description": "Git reference not found" 48 + }, 49 + { 50 + "name": "PathNotFound", 51 + "description": "Path not found in repository" 52 + }, 53 + { 54 + "name": "InvalidRequest", 55 + "description": "Invalid request parameters" 56 + } 57 + ] 58 + } 59 + } 60 + }
+52
api/lexicons/sh/tangled/repo/merge.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo.merge", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Merge a patch into a repository branch", 8 + "input": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "required": ["did", "name", "patch", "branch"], 13 + "properties": { 14 + "did": { 15 + "type": "string", 16 + "format": "did", 17 + "description": "DID of the repository owner" 18 + }, 19 + "name": { 20 + "type": "string", 21 + "description": "Name of the repository" 22 + }, 23 + "patch": { 24 + "type": "string", 25 + "description": "Patch content to merge" 26 + }, 27 + "branch": { 28 + "type": "string", 29 + "description": "Target branch to merge into" 30 + }, 31 + "authorName": { 32 + "type": "string", 33 + "description": "Author name for the merge commit" 34 + }, 35 + "authorEmail": { 36 + "type": "string", 37 + "description": "Author email for the merge commit" 38 + }, 39 + "commitBody": { 40 + "type": "string", 41 + "description": "Additional commit message body" 42 + }, 43 + "commitMessage": { 44 + "type": "string", 45 + "description": "Merge commit message" 46 + } 47 + } 48 + } 49 + } 50 + } 51 + } 52 + }
+79
api/lexicons/sh/tangled/repo/mergeCheck.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo.mergeCheck", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Check if a merge is possible between two branches", 8 + "input": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "required": ["did", "name", "patch", "branch"], 13 + "properties": { 14 + "did": { 15 + "type": "string", 16 + "format": "did", 17 + "description": "DID of the repository owner" 18 + }, 19 + "name": { 20 + "type": "string", 21 + "description": "Name of the repository" 22 + }, 23 + "patch": { 24 + "type": "string", 25 + "description": "Patch or pull request to check for merge conflicts" 26 + }, 27 + "branch": { 28 + "type": "string", 29 + "description": "Target branch to merge into" 30 + } 31 + } 32 + } 33 + }, 34 + "output": { 35 + "encoding": "application/json", 36 + "schema": { 37 + "type": "object", 38 + "required": ["is_conflicted"], 39 + "properties": { 40 + "is_conflicted": { 41 + "type": "boolean", 42 + "description": "Whether the merge has conflicts" 43 + }, 44 + "conflicts": { 45 + "type": "array", 46 + "description": "List of files with merge conflicts", 47 + "items": { 48 + "type": "ref", 49 + "ref": "#conflictInfo" 50 + } 51 + }, 52 + "message": { 53 + "type": "string", 54 + "description": "Additional message about the merge check" 55 + }, 56 + "error": { 57 + "type": "string", 58 + "description": "Error message if check failed" 59 + } 60 + } 61 + } 62 + } 63 + }, 64 + "conflictInfo": { 65 + "type": "object", 66 + "required": ["filename", "reason"], 67 + "properties": { 68 + "filename": { 69 + "type": "string", 70 + "description": "Name of the conflicted file" 71 + }, 72 + "reason": { 73 + "type": "string", 74 + "description": "Reason for the conflict" 75 + } 76 + } 77 + } 78 + } 79 + }
+31
api/lexicons/sh/tangled/repo/removeSecret.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo.removeSecret", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Remove a CI secret", 8 + "input": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "required": [ 13 + "repo", 14 + "key" 15 + ], 16 + "properties": { 17 + "repo": { 18 + "type": "string", 19 + "format": "at-uri" 20 + }, 21 + "key": { 22 + "type": "string", 23 + "maxLength": 50, 24 + "minLength": 1 25 + } 26 + } 27 + } 28 + } 29 + } 30 + } 31 + }
+76
api/lexicons/sh/tangled/repo/repo.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo", 4 + "needsCbor": true, 5 + "needsType": true, 6 + "defs": { 7 + "main": { 8 + "type": "record", 9 + "key": "tid", 10 + "record": { 11 + "type": "object", 12 + "required": [ 13 + "name", 14 + "knot", 15 + "createdAt" 16 + ], 17 + "properties": { 18 + "name": { 19 + "type": "string", 20 + "description": "name of the repo" 21 + }, 22 + "knot": { 23 + "type": "string", 24 + "description": "knot where the repo was created" 25 + }, 26 + "spindle": { 27 + "type": "string", 28 + "description": "CI runner to send jobs to and receive results from" 29 + }, 30 + "description": { 31 + "type": "string", 32 + "minGraphemes": 1, 33 + "maxGraphemes": 140 34 + }, 35 + "website": { 36 + "type": "string", 37 + "format": "uri", 38 + "description": "Any URI related to the repo" 39 + }, 40 + "topics": { 41 + "type": "array", 42 + "description": "Topics related to the repo", 43 + "items": { 44 + "type": "string", 45 + "minLength": 1, 46 + "maxLength": 50 47 + }, 48 + "maxLength": 50 49 + }, 50 + "source": { 51 + "type": "string", 52 + "format": "uri", 53 + "description": "source of the repo" 54 + }, 55 + "labels": { 56 + "type": "array", 57 + "description": "List of labels that this repo subscribes to", 58 + "items": { 59 + "type": "string", 60 + "format": "at-uri" 61 + } 62 + }, 63 + "repoDid": { 64 + "type": "string", 65 + "format": "did", 66 + "description": "DID of the repo itself, if assigned" 67 + }, 68 + "createdAt": { 69 + "type": "string", 70 + "format": "datetime" 71 + } 72 + } 73 + } 74 + } 75 + } 76 + }
+43
api/lexicons/sh/tangled/repo/tag.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo.tag", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "parameters": { 8 + "type": "params", 9 + "required": [ 10 + "repo", 11 + "tag" 12 + ], 13 + "properties": { 14 + "repo": { 15 + "type": "string", 16 + "description": "Repository identifier in format 'did:plc:.../repoName'" 17 + }, 18 + "tag": { 19 + "type": "string", 20 + "description": "Name of tag, such as v1.3.0" 21 + } 22 + } 23 + }, 24 + "output": { 25 + "encoding": "*/*" 26 + }, 27 + "errors": [ 28 + { 29 + "name": "RepoNotFound", 30 + "description": "Repository not found or access denied" 31 + }, 32 + { 33 + "name": "TagNotFound", 34 + "description": "Tag not found" 35 + }, 36 + { 37 + "name": "InvalidRequest", 38 + "description": "Invalid request parameters" 39 + } 40 + ] 41 + } 42 + } 43 + }
+43
api/lexicons/sh/tangled/repo/tags.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo.tags", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "parameters": { 8 + "type": "params", 9 + "required": ["repo"], 10 + "properties": { 11 + "repo": { 12 + "type": "string", 13 + "description": "Repository identifier in format 'did:plc:.../repoName'" 14 + }, 15 + "limit": { 16 + "type": "integer", 17 + "description": "Maximum number of tags to return", 18 + "minimum": 1, 19 + "maximum": 100, 20 + "default": 50 21 + }, 22 + "cursor": { 23 + "type": "string", 24 + "description": "Pagination cursor" 25 + } 26 + } 27 + }, 28 + "output": { 29 + "encoding": "*/*" 30 + }, 31 + "errors": [ 32 + { 33 + "name": "RepoNotFound", 34 + "description": "Repository not found or access denied" 35 + }, 36 + { 37 + "name": "InvalidRequest", 38 + "description": "Invalid request parameters" 39 + } 40 + ] 41 + } 42 + } 43 + }
+182
api/lexicons/sh/tangled/repo/tree.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.repo.tree", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "parameters": { 8 + "type": "params", 9 + "required": [ 10 + "repo", 11 + "ref" 12 + ], 13 + "properties": { 14 + "repo": { 15 + "type": "string", 16 + "description": "Repository identifier in format 'did:plc:.../repoName'" 17 + }, 18 + "ref": { 19 + "type": "string", 20 + "description": "Git reference (branch, tag, or commit SHA)" 21 + }, 22 + "path": { 23 + "type": "string", 24 + "description": "Path within the repository tree", 25 + "default": "" 26 + } 27 + } 28 + }, 29 + "output": { 30 + "encoding": "application/json", 31 + "schema": { 32 + "type": "object", 33 + "required": [ 34 + "ref", 35 + "files" 36 + ], 37 + "properties": { 38 + "ref": { 39 + "type": "string", 40 + "description": "The git reference used" 41 + }, 42 + "parent": { 43 + "type": "string", 44 + "description": "The parent path in the tree" 45 + }, 46 + "dotdot": { 47 + "type": "string", 48 + "description": "Parent directory path" 49 + }, 50 + "readme": { 51 + "type": "ref", 52 + "ref": "#readme", 53 + "description": "Readme for this file tree" 54 + }, 55 + "lastCommit": { 56 + "type": "ref", 57 + "ref": "#lastCommit" 58 + }, 59 + "files": { 60 + "type": "array", 61 + "items": { 62 + "type": "ref", 63 + "ref": "#treeEntry" 64 + } 65 + } 66 + } 67 + } 68 + }, 69 + "errors": [ 70 + { 71 + "name": "RepoNotFound", 72 + "description": "Repository not found or access denied" 73 + }, 74 + { 75 + "name": "RefNotFound", 76 + "description": "Git reference not found" 77 + }, 78 + { 79 + "name": "PathNotFound", 80 + "description": "Path not found in repository tree" 81 + }, 82 + { 83 + "name": "InvalidRequest", 84 + "description": "Invalid request parameters" 85 + } 86 + ] 87 + }, 88 + "readme": { 89 + "type": "object", 90 + "required": [ 91 + "filename", 92 + "contents" 93 + ], 94 + "properties": { 95 + "filename": { 96 + "type": "string", 97 + "description": "Name of the readme file" 98 + }, 99 + "contents": { 100 + "type": "string", 101 + "description": "Contents of the readme file" 102 + } 103 + } 104 + }, 105 + "treeEntry": { 106 + "type": "object", 107 + "required": [ 108 + "name", 109 + "mode", 110 + "size" 111 + ], 112 + "properties": { 113 + "name": { 114 + "type": "string", 115 + "description": "Relative file or directory name" 116 + }, 117 + "mode": { 118 + "type": "string", 119 + "description": "File mode" 120 + }, 121 + "size": { 122 + "type": "integer", 123 + "description": "File size in bytes" 124 + }, 125 + "last_commit": { 126 + "type": "ref", 127 + "ref": "#lastCommit" 128 + } 129 + } 130 + }, 131 + "lastCommit": { 132 + "type": "object", 133 + "required": [ 134 + "hash", 135 + "message", 136 + "when" 137 + ], 138 + "properties": { 139 + "hash": { 140 + "type": "string", 141 + "description": "Commit hash" 142 + }, 143 + "message": { 144 + "type": "string", 145 + "description": "Commit message" 146 + }, 147 + "author": { 148 + "type": "ref", 149 + "ref": "#signature" 150 + }, 151 + "when": { 152 + "type": "string", 153 + "format": "datetime", 154 + "description": "Commit timestamp" 155 + } 156 + } 157 + }, 158 + "signature": { 159 + "type": "object", 160 + "required": [ 161 + "name", 162 + "email", 163 + "when" 164 + ], 165 + "properties": { 166 + "name": { 167 + "type": "string", 168 + "description": "Author name" 169 + }, 170 + "email": { 171 + "type": "string", 172 + "description": "Author email" 173 + }, 174 + "when": { 175 + "type": "string", 176 + "format": "datetime", 177 + "description": "Author timestamp" 178 + } 179 + } 180 + } 181 + } 182 + }
+34
api/lexicons/sh/tangled/spindle/member.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.spindle.member", 4 + "needsCbor": true, 5 + "needsType": true, 6 + "defs": { 7 + "main": { 8 + "type": "record", 9 + "key": "tid", 10 + "record": { 11 + "type": "object", 12 + "required": [ 13 + "subject", 14 + "instance", 15 + "createdAt" 16 + ], 17 + "properties": { 18 + "subject": { 19 + "type": "string", 20 + "format": "did" 21 + }, 22 + "instance": { 23 + "type": "string", 24 + "description": "spindle instance that the subject is now a member of" 25 + }, 26 + "createdAt": { 27 + "type": "string", 28 + "format": "datetime" 29 + } 30 + } 31 + } 32 + } 33 + } 34 + }
+25
api/lexicons/sh/tangled/spindle/spindle.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.spindle", 4 + "needsCbor": true, 5 + "needsType": true, 6 + "defs": { 7 + "main": { 8 + "type": "record", 9 + "key": "any", 10 + "record": { 11 + "type": "object", 12 + "required": [ 13 + "createdAt" 14 + ], 15 + "properties": { 16 + "createdAt": { 17 + "type": "string", 18 + "format": "datetime" 19 + } 20 + } 21 + } 22 + } 23 + } 24 + } 25 +
+40
api/lexicons/sh/tangled/string/string.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.string", 4 + "needsCbor": true, 5 + "needsType": true, 6 + "defs": { 7 + "main": { 8 + "type": "record", 9 + "key": "tid", 10 + "record": { 11 + "type": "object", 12 + "required": [ 13 + "filename", 14 + "description", 15 + "createdAt", 16 + "contents" 17 + ], 18 + "properties": { 19 + "filename": { 20 + "type": "string", 21 + "maxGraphemes": 140, 22 + "minGraphemes": 1 23 + }, 24 + "description": { 25 + "type": "string", 26 + "maxGraphemes": 280 27 + }, 28 + "createdAt": { 29 + "type": "string", 30 + "format": "datetime" 31 + }, 32 + "contents": { 33 + "type": "string", 34 + "minGraphemes": 1 35 + } 36 + } 37 + } 38 + } 39 + } 40 + }
+29
api/lexicons/sh/tangled/sync/requestCrawl.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.tangled.sync.requestCrawl", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Request a service to persistently crawl hosted repos. Does not require auth.", 8 + "input": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "required": ["hostname"], 13 + "properties": { 14 + "hostname": { 15 + "type": "string", 16 + "description": "Hostname of the current service (eg, Knot) that is requesting to be crawled." 17 + }, 18 + "ensureRepo": { 19 + "type": "string", 20 + "format": "at-uri", 21 + "description": "specific repository to ensure crawling" 22 + } 23 + } 24 + } 25 + }, 26 + "errors": [{ "name": "HostBanned" }] 27 + } 28 + } 29 + }
+43
api/package.json
··· 1 + { 2 + "private": true, 3 + "name": "api", 4 + "version": "1.0.0", 5 + "imports": { 6 + "#/*": "./src/*" 7 + }, 8 + "scripts": { 9 + "dev": "node --env-file=.env --watch src/index.ts", 10 + "db:generate": "node ../scripts/db-generate.ts", 11 + "db:migrate": "drizzle-kit migrate", 12 + "db:studio": "drizzle-kit studio", 13 + "build:lexicons": "rm -rf ./src/lexicons && lex build --lexicons ./lexicons --out ./src/lexicons" 14 + }, 15 + "keywords": [], 16 + "author": "", 17 + "license": "ISC", 18 + "devEngines": { 19 + "packageManager": { 20 + "name": "pnpm", 21 + "version": "^11.0.3", 22 + "onFail": "download" 23 + } 24 + }, 25 + "type": "module", 26 + "dependencies": { 27 + "@atproto/lex": "^0.0.25", 28 + "@atproto/lexicon": "^0.6.2", 29 + "@atproto/tap": "^0.2.13", 30 + "@hono/node-server": "^2.0.1", 31 + "@std/uuid": "jsr:^1.1.1", 32 + "dotenv": "^17.4.2", 33 + "drizzle-orm": "^0.45.2", 34 + "hono": "^4.12.16", 35 + "pg": "^8.20.0", 36 + "zod": "^4.4.1" 37 + }, 38 + "devDependencies": { 39 + "@types/pg": "^8.20.0", 40 + "drizzle-kit": "^0.31.10", 41 + "tsx": "^4.21.0" 42 + } 43 + }
+1350
api/pnpm-lock.yaml
··· 1 + --- 2 + lockfileVersion: '9.0' 3 + 4 + importers: 5 + 6 + .: 7 + configDependencies: {} 8 + packageManagerDependencies: 9 + '@pnpm/exe': 10 + specifier: ^11.0.3 11 + version: 11.0.3 12 + pnpm: 13 + specifier: ^11.0.3 14 + version: 11.0.3 15 + 16 + packages: 17 + 18 + '@pnpm/exe@11.0.3': 19 + resolution: {integrity: sha512-smSgw9W0knkDPvjmoRRl0vsanhvk+7At8+w/MT3G/lZfcVGfWhWuBbjMkL0qYX5D1UTUh4g17iS3ubCyN1vJ9w==} 20 + hasBin: true 21 + 22 + '@pnpm/linux-arm64@11.0.3': 23 + resolution: {integrity: sha512-E0ApJTF+HEWp2ifXl4iXiwdlowbjqD4PLNDyYjIl5dD0BNxycR1WYMDqem+BBRX3JB25+9WSFOW/Ey+CZC6DNQ==} 24 + cpu: [arm64] 25 + os: [linux] 26 + 27 + '@pnpm/linux-x64@11.0.3': 28 + resolution: {integrity: sha512-Zg5t6oJSegJJlLkwhUYXhnmFvcf5c1yBkCuJM5t6dGAVAK+wVUSRvmKzNJE2WC+m296E9w4VEcOfCOBQCvxT+g==} 29 + cpu: [x64] 30 + os: [linux] 31 + 32 + '@pnpm/linuxstatic-arm64@11.0.3': 33 + resolution: {integrity: sha512-X8tXWlgMeNkhHQXvCe7+7YRGkJos9NA6zgX6a31982k6F1wG3QmHkHKyVjekqN42nkm6Wt3yNGwXGHziq5ImZQ==} 34 + cpu: [arm64] 35 + os: [linux] 36 + libc: [musl] 37 + 38 + '@pnpm/linuxstatic-x64@11.0.3': 39 + resolution: {integrity: sha512-ReVy0hfz5g9176+lmxxiVQ85B3dNS1wOZmqfLk0LCEKz0YthWLjQNqTYbOw41UJan8HOkXUr2a2pJcaHWjzORQ==} 40 + cpu: [x64] 41 + os: [linux] 42 + libc: [musl] 43 + 44 + '@pnpm/macos-arm64@11.0.3': 45 + resolution: {integrity: sha512-fT59cNCtP91y2lz8Xe+Uvb2uxLayNHgUz+y+xPEalz1dqc15ygoDNmCkXDM8OZ9NOthvsYbxCep9w6LgMvn/Fw==} 46 + cpu: [arm64] 47 + os: [darwin] 48 + 49 + '@pnpm/macos-x64@11.0.3': 50 + resolution: {integrity: sha512-TjeXBkRYeS3Ud4jcg0J6LE7LDqhBu3y8FCqsEe6nenqdqSIm1yzZmvgR8kYazDL4w8EU558UapO7WUHbpUl4Kw==} 51 + cpu: [x64] 52 + os: [darwin] 53 + 54 + '@pnpm/win-arm64@11.0.3': 55 + resolution: {integrity: sha512-pzFg2gSZTHGQJK7V10m8VE7XS7Q+h3fAx1XDUJt3iV6T/TMaIW8hzNZ3dQvMz7JSKnBYoPCUvCGQ9MSOY14EvQ==} 56 + cpu: [arm64] 57 + os: [win32] 58 + 59 + '@pnpm/win-x64@11.0.3': 60 + resolution: {integrity: sha512-ImgIktkAvn+k47u+fKMwTo37eq5UUzjII9VvaX6yRY54NCf/aM+AXZcstJxubAkIGxH4TZybwwsRWYMxy+gg3Q==} 61 + cpu: [x64] 62 + os: [win32] 63 + 64 + '@reflink/reflink-darwin-arm64@0.1.19': 65 + resolution: {integrity: sha512-ruy44Lpepdk1FqDz38vExBY/PVUsjxZA+chd9wozjUH9JjuDT/HEaQYA6wYN9mf041l0yLVar6BCZuWABJvHSA==} 66 + engines: {node: '>= 10'} 67 + cpu: [arm64] 68 + os: [darwin] 69 + 70 + '@reflink/reflink-darwin-x64@0.1.19': 71 + resolution: {integrity: sha512-By85MSWrMZa+c26TcnAy8SDk0sTUkYlNnwknSchkhHpGXOtjNDUOxJE9oByBnGbeuIE1PiQsxDG3Ud+IVV9yuA==} 72 + engines: {node: '>= 10'} 73 + cpu: [x64] 74 + os: [darwin] 75 + 76 + '@reflink/reflink-linux-arm64-gnu@0.1.19': 77 + resolution: {integrity: sha512-7P+er8+rP9iNeN+bfmccM4hTAaLP6PQJPKWSA4iSk2bNvo6KU6RyPgYeHxXmzNKzPVRcypZQTpFgstHam6maVg==} 78 + engines: {node: '>= 10'} 79 + cpu: [arm64] 80 + os: [linux] 81 + libc: [glibc] 82 + 83 + '@reflink/reflink-linux-arm64-musl@0.1.19': 84 + resolution: {integrity: sha512-37iO/Dp6m5DDaC2sf3zPtx/hl9FV3Xze4xoYidrxxS9bgP3S8ALroxRK6xBG/1TtfXKTvolvp+IjrUU6ujIGmA==} 85 + engines: {node: '>= 10'} 86 + cpu: [arm64] 87 + os: [linux] 88 + libc: [musl] 89 + 90 + '@reflink/reflink-linux-x64-gnu@0.1.19': 91 + resolution: {integrity: sha512-jbI8jvuYCaA3MVUdu8vLoLAFqC+iNMpiSuLbxlAgg7x3K5bsS8nOpTRnkLF7vISJ+rVR8W+7ThXlXlUQ93ulkw==} 92 + engines: {node: '>= 10'} 93 + cpu: [x64] 94 + os: [linux] 95 + libc: [glibc] 96 + 97 + '@reflink/reflink-linux-x64-musl@0.1.19': 98 + resolution: {integrity: sha512-e9FBWDe+lv7QKAwtKOt6A2W/fyy/aEEfr0g6j/hWzvQcrzHCsz07BNQYlNOjTfeytrtLU7k449H1PI95jA4OjQ==} 99 + engines: {node: '>= 10'} 100 + cpu: [x64] 101 + os: [linux] 102 + libc: [musl] 103 + 104 + '@reflink/reflink-win32-arm64-msvc@0.1.19': 105 + resolution: {integrity: sha512-09PxnVIQcd+UOn4WAW73WU6PXL7DwGS6wPlkMhMg2zlHHG65F3vHepOw06HFCq+N42qkaNAc8AKIabWvtk6cIQ==} 106 + engines: {node: '>= 10'} 107 + cpu: [arm64] 108 + os: [win32] 109 + 110 + '@reflink/reflink-win32-x64-msvc@0.1.19': 111 + resolution: {integrity: sha512-E//yT4ni2SyhwP8JRjVGWr3cbnhWDiPLgnQ66qqaanjjnMiu3O/2tjCPQXlcGc/DEYofpDc9fvhv6tALQsMV9w==} 112 + engines: {node: '>= 10'} 113 + cpu: [x64] 114 + os: [win32] 115 + 116 + '@reflink/reflink@0.1.19': 117 + resolution: {integrity: sha512-DmCG8GzysnCZ15bres3N5AHCmwBwYgp0As6xjhQ47rAUTUXxJiK+lLUxaGsX3hd/30qUpVElh05PbGuxRPgJwA==} 118 + engines: {node: '>= 10'} 119 + 120 + detect-libc@2.1.2: 121 + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} 122 + engines: {node: '>=8'} 123 + 124 + pnpm@11.0.3: 125 + resolution: {integrity: sha512-EESPKYiTN4fGaZrvaDF0x0H2RyrZG348j+PivaV76KD3yvWJSbi8IuYkV4s9xuV4drpMYxkoobhMwUHhLHm8zQ==} 126 + engines: {node: '>=22.13'} 127 + hasBin: true 128 + 129 + snapshots: 130 + 131 + '@pnpm/exe@11.0.3': 132 + dependencies: 133 + '@reflink/reflink': 0.1.19 134 + detect-libc: 2.1.2 135 + optionalDependencies: 136 + '@pnpm/linux-arm64': 11.0.3 137 + '@pnpm/linux-x64': 11.0.3 138 + '@pnpm/linuxstatic-arm64': 11.0.3 139 + '@pnpm/linuxstatic-x64': 11.0.3 140 + '@pnpm/macos-arm64': 11.0.3 141 + '@pnpm/macos-x64': 11.0.3 142 + '@pnpm/win-arm64': 11.0.3 143 + '@pnpm/win-x64': 11.0.3 144 + 145 + '@pnpm/linux-arm64@11.0.3': 146 + optional: true 147 + 148 + '@pnpm/linux-x64@11.0.3': 149 + optional: true 150 + 151 + '@pnpm/linuxstatic-arm64@11.0.3': 152 + optional: true 153 + 154 + '@pnpm/linuxstatic-x64@11.0.3': 155 + optional: true 156 + 157 + '@pnpm/macos-arm64@11.0.3': 158 + optional: true 159 + 160 + '@pnpm/macos-x64@11.0.3': 161 + optional: true 162 + 163 + '@pnpm/win-arm64@11.0.3': 164 + optional: true 165 + 166 + '@pnpm/win-x64@11.0.3': 167 + optional: true 168 + 169 + '@reflink/reflink-darwin-arm64@0.1.19': 170 + optional: true 171 + 172 + '@reflink/reflink-darwin-x64@0.1.19': 173 + optional: true 174 + 175 + '@reflink/reflink-linux-arm64-gnu@0.1.19': 176 + optional: true 177 + 178 + '@reflink/reflink-linux-arm64-musl@0.1.19': 179 + optional: true 180 + 181 + '@reflink/reflink-linux-x64-gnu@0.1.19': 182 + optional: true 183 + 184 + '@reflink/reflink-linux-x64-musl@0.1.19': 185 + optional: true 186 + 187 + '@reflink/reflink-win32-arm64-msvc@0.1.19': 188 + optional: true 189 + 190 + '@reflink/reflink-win32-x64-msvc@0.1.19': 191 + optional: true 192 + 193 + '@reflink/reflink@0.1.19': 194 + optionalDependencies: 195 + '@reflink/reflink-darwin-arm64': 0.1.19 196 + '@reflink/reflink-darwin-x64': 0.1.19 197 + '@reflink/reflink-linux-arm64-gnu': 0.1.19 198 + '@reflink/reflink-linux-arm64-musl': 0.1.19 199 + '@reflink/reflink-linux-x64-gnu': 0.1.19 200 + '@reflink/reflink-linux-x64-musl': 0.1.19 201 + '@reflink/reflink-win32-arm64-msvc': 0.1.19 202 + '@reflink/reflink-win32-x64-msvc': 0.1.19 203 + 204 + detect-libc@2.1.2: {} 205 + 206 + pnpm@11.0.3: {} 207 + 208 + --- 209 + lockfileVersion: '9.0' 210 + 211 + settings: 212 + autoInstallPeers: true 213 + excludeLinksFromLockfile: false 214 + 215 + importers: 216 + 217 + .: 218 + dependencies: 219 + '@std/uuid': 220 + specifier: jsr:^1.1.1 221 + version: '@jsr/std__uuid@1.1.1' 222 + dotenv: 223 + specifier: ^17.4.2 224 + version: 17.4.2 225 + drizzle-orm: 226 + specifier: ^0.45.2 227 + version: 0.45.2(@types/pg@8.20.0)(pg@8.20.0) 228 + pg: 229 + specifier: ^8.20.0 230 + version: 8.20.0 231 + zod: 232 + specifier: ^4.4.1 233 + version: 4.4.1 234 + devDependencies: 235 + '@types/pg': 236 + specifier: ^8.20.0 237 + version: 8.20.0 238 + drizzle-kit: 239 + specifier: ^0.31.10 240 + version: 0.31.10 241 + tsx: 242 + specifier: ^4.21.0 243 + version: 4.21.0 244 + 245 + packages: 246 + 247 + '@drizzle-team/brocli@0.10.2': 248 + resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==} 249 + 250 + '@esbuild-kit/core-utils@3.3.2': 251 + resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} 252 + deprecated: 'Merged into tsx: https://tsx.is' 253 + 254 + '@esbuild-kit/esm-loader@2.6.5': 255 + resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==} 256 + deprecated: 'Merged into tsx: https://tsx.is' 257 + 258 + '@esbuild/aix-ppc64@0.25.12': 259 + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} 260 + engines: {node: '>=18'} 261 + cpu: [ppc64] 262 + os: [aix] 263 + 264 + '@esbuild/aix-ppc64@0.27.7': 265 + resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} 266 + engines: {node: '>=18'} 267 + cpu: [ppc64] 268 + os: [aix] 269 + 270 + '@esbuild/android-arm64@0.18.20': 271 + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} 272 + engines: {node: '>=12'} 273 + cpu: [arm64] 274 + os: [android] 275 + 276 + '@esbuild/android-arm64@0.25.12': 277 + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} 278 + engines: {node: '>=18'} 279 + cpu: [arm64] 280 + os: [android] 281 + 282 + '@esbuild/android-arm64@0.27.7': 283 + resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==} 284 + engines: {node: '>=18'} 285 + cpu: [arm64] 286 + os: [android] 287 + 288 + '@esbuild/android-arm@0.18.20': 289 + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} 290 + engines: {node: '>=12'} 291 + cpu: [arm] 292 + os: [android] 293 + 294 + '@esbuild/android-arm@0.25.12': 295 + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} 296 + engines: {node: '>=18'} 297 + cpu: [arm] 298 + os: [android] 299 + 300 + '@esbuild/android-arm@0.27.7': 301 + resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==} 302 + engines: {node: '>=18'} 303 + cpu: [arm] 304 + os: [android] 305 + 306 + '@esbuild/android-x64@0.18.20': 307 + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} 308 + engines: {node: '>=12'} 309 + cpu: [x64] 310 + os: [android] 311 + 312 + '@esbuild/android-x64@0.25.12': 313 + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} 314 + engines: {node: '>=18'} 315 + cpu: [x64] 316 + os: [android] 317 + 318 + '@esbuild/android-x64@0.27.7': 319 + resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==} 320 + engines: {node: '>=18'} 321 + cpu: [x64] 322 + os: [android] 323 + 324 + '@esbuild/darwin-arm64@0.18.20': 325 + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} 326 + engines: {node: '>=12'} 327 + cpu: [arm64] 328 + os: [darwin] 329 + 330 + '@esbuild/darwin-arm64@0.25.12': 331 + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} 332 + engines: {node: '>=18'} 333 + cpu: [arm64] 334 + os: [darwin] 335 + 336 + '@esbuild/darwin-arm64@0.27.7': 337 + resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==} 338 + engines: {node: '>=18'} 339 + cpu: [arm64] 340 + os: [darwin] 341 + 342 + '@esbuild/darwin-x64@0.18.20': 343 + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} 344 + engines: {node: '>=12'} 345 + cpu: [x64] 346 + os: [darwin] 347 + 348 + '@esbuild/darwin-x64@0.25.12': 349 + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} 350 + engines: {node: '>=18'} 351 + cpu: [x64] 352 + os: [darwin] 353 + 354 + '@esbuild/darwin-x64@0.27.7': 355 + resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==} 356 + engines: {node: '>=18'} 357 + cpu: [x64] 358 + os: [darwin] 359 + 360 + '@esbuild/freebsd-arm64@0.18.20': 361 + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} 362 + engines: {node: '>=12'} 363 + cpu: [arm64] 364 + os: [freebsd] 365 + 366 + '@esbuild/freebsd-arm64@0.25.12': 367 + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} 368 + engines: {node: '>=18'} 369 + cpu: [arm64] 370 + os: [freebsd] 371 + 372 + '@esbuild/freebsd-arm64@0.27.7': 373 + resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==} 374 + engines: {node: '>=18'} 375 + cpu: [arm64] 376 + os: [freebsd] 377 + 378 + '@esbuild/freebsd-x64@0.18.20': 379 + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} 380 + engines: {node: '>=12'} 381 + cpu: [x64] 382 + os: [freebsd] 383 + 384 + '@esbuild/freebsd-x64@0.25.12': 385 + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} 386 + engines: {node: '>=18'} 387 + cpu: [x64] 388 + os: [freebsd] 389 + 390 + '@esbuild/freebsd-x64@0.27.7': 391 + resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==} 392 + engines: {node: '>=18'} 393 + cpu: [x64] 394 + os: [freebsd] 395 + 396 + '@esbuild/linux-arm64@0.18.20': 397 + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} 398 + engines: {node: '>=12'} 399 + cpu: [arm64] 400 + os: [linux] 401 + 402 + '@esbuild/linux-arm64@0.25.12': 403 + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} 404 + engines: {node: '>=18'} 405 + cpu: [arm64] 406 + os: [linux] 407 + 408 + '@esbuild/linux-arm64@0.27.7': 409 + resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==} 410 + engines: {node: '>=18'} 411 + cpu: [arm64] 412 + os: [linux] 413 + 414 + '@esbuild/linux-arm@0.18.20': 415 + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} 416 + engines: {node: '>=12'} 417 + cpu: [arm] 418 + os: [linux] 419 + 420 + '@esbuild/linux-arm@0.25.12': 421 + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} 422 + engines: {node: '>=18'} 423 + cpu: [arm] 424 + os: [linux] 425 + 426 + '@esbuild/linux-arm@0.27.7': 427 + resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==} 428 + engines: {node: '>=18'} 429 + cpu: [arm] 430 + os: [linux] 431 + 432 + '@esbuild/linux-ia32@0.18.20': 433 + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} 434 + engines: {node: '>=12'} 435 + cpu: [ia32] 436 + os: [linux] 437 + 438 + '@esbuild/linux-ia32@0.25.12': 439 + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} 440 + engines: {node: '>=18'} 441 + cpu: [ia32] 442 + os: [linux] 443 + 444 + '@esbuild/linux-ia32@0.27.7': 445 + resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==} 446 + engines: {node: '>=18'} 447 + cpu: [ia32] 448 + os: [linux] 449 + 450 + '@esbuild/linux-loong64@0.18.20': 451 + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} 452 + engines: {node: '>=12'} 453 + cpu: [loong64] 454 + os: [linux] 455 + 456 + '@esbuild/linux-loong64@0.25.12': 457 + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} 458 + engines: {node: '>=18'} 459 + cpu: [loong64] 460 + os: [linux] 461 + 462 + '@esbuild/linux-loong64@0.27.7': 463 + resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==} 464 + engines: {node: '>=18'} 465 + cpu: [loong64] 466 + os: [linux] 467 + 468 + '@esbuild/linux-mips64el@0.18.20': 469 + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} 470 + engines: {node: '>=12'} 471 + cpu: [mips64el] 472 + os: [linux] 473 + 474 + '@esbuild/linux-mips64el@0.25.12': 475 + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} 476 + engines: {node: '>=18'} 477 + cpu: [mips64el] 478 + os: [linux] 479 + 480 + '@esbuild/linux-mips64el@0.27.7': 481 + resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==} 482 + engines: {node: '>=18'} 483 + cpu: [mips64el] 484 + os: [linux] 485 + 486 + '@esbuild/linux-ppc64@0.18.20': 487 + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} 488 + engines: {node: '>=12'} 489 + cpu: [ppc64] 490 + os: [linux] 491 + 492 + '@esbuild/linux-ppc64@0.25.12': 493 + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} 494 + engines: {node: '>=18'} 495 + cpu: [ppc64] 496 + os: [linux] 497 + 498 + '@esbuild/linux-ppc64@0.27.7': 499 + resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==} 500 + engines: {node: '>=18'} 501 + cpu: [ppc64] 502 + os: [linux] 503 + 504 + '@esbuild/linux-riscv64@0.18.20': 505 + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} 506 + engines: {node: '>=12'} 507 + cpu: [riscv64] 508 + os: [linux] 509 + 510 + '@esbuild/linux-riscv64@0.25.12': 511 + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} 512 + engines: {node: '>=18'} 513 + cpu: [riscv64] 514 + os: [linux] 515 + 516 + '@esbuild/linux-riscv64@0.27.7': 517 + resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==} 518 + engines: {node: '>=18'} 519 + cpu: [riscv64] 520 + os: [linux] 521 + 522 + '@esbuild/linux-s390x@0.18.20': 523 + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} 524 + engines: {node: '>=12'} 525 + cpu: [s390x] 526 + os: [linux] 527 + 528 + '@esbuild/linux-s390x@0.25.12': 529 + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} 530 + engines: {node: '>=18'} 531 + cpu: [s390x] 532 + os: [linux] 533 + 534 + '@esbuild/linux-s390x@0.27.7': 535 + resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==} 536 + engines: {node: '>=18'} 537 + cpu: [s390x] 538 + os: [linux] 539 + 540 + '@esbuild/linux-x64@0.18.20': 541 + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} 542 + engines: {node: '>=12'} 543 + cpu: [x64] 544 + os: [linux] 545 + 546 + '@esbuild/linux-x64@0.25.12': 547 + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} 548 + engines: {node: '>=18'} 549 + cpu: [x64] 550 + os: [linux] 551 + 552 + '@esbuild/linux-x64@0.27.7': 553 + resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==} 554 + engines: {node: '>=18'} 555 + cpu: [x64] 556 + os: [linux] 557 + 558 + '@esbuild/netbsd-arm64@0.25.12': 559 + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} 560 + engines: {node: '>=18'} 561 + cpu: [arm64] 562 + os: [netbsd] 563 + 564 + '@esbuild/netbsd-arm64@0.27.7': 565 + resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==} 566 + engines: {node: '>=18'} 567 + cpu: [arm64] 568 + os: [netbsd] 569 + 570 + '@esbuild/netbsd-x64@0.18.20': 571 + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} 572 + engines: {node: '>=12'} 573 + cpu: [x64] 574 + os: [netbsd] 575 + 576 + '@esbuild/netbsd-x64@0.25.12': 577 + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} 578 + engines: {node: '>=18'} 579 + cpu: [x64] 580 + os: [netbsd] 581 + 582 + '@esbuild/netbsd-x64@0.27.7': 583 + resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==} 584 + engines: {node: '>=18'} 585 + cpu: [x64] 586 + os: [netbsd] 587 + 588 + '@esbuild/openbsd-arm64@0.25.12': 589 + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} 590 + engines: {node: '>=18'} 591 + cpu: [arm64] 592 + os: [openbsd] 593 + 594 + '@esbuild/openbsd-arm64@0.27.7': 595 + resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==} 596 + engines: {node: '>=18'} 597 + cpu: [arm64] 598 + os: [openbsd] 599 + 600 + '@esbuild/openbsd-x64@0.18.20': 601 + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} 602 + engines: {node: '>=12'} 603 + cpu: [x64] 604 + os: [openbsd] 605 + 606 + '@esbuild/openbsd-x64@0.25.12': 607 + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} 608 + engines: {node: '>=18'} 609 + cpu: [x64] 610 + os: [openbsd] 611 + 612 + '@esbuild/openbsd-x64@0.27.7': 613 + resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==} 614 + engines: {node: '>=18'} 615 + cpu: [x64] 616 + os: [openbsd] 617 + 618 + '@esbuild/openharmony-arm64@0.25.12': 619 + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} 620 + engines: {node: '>=18'} 621 + cpu: [arm64] 622 + os: [openharmony] 623 + 624 + '@esbuild/openharmony-arm64@0.27.7': 625 + resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==} 626 + engines: {node: '>=18'} 627 + cpu: [arm64] 628 + os: [openharmony] 629 + 630 + '@esbuild/sunos-x64@0.18.20': 631 + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} 632 + engines: {node: '>=12'} 633 + cpu: [x64] 634 + os: [sunos] 635 + 636 + '@esbuild/sunos-x64@0.25.12': 637 + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} 638 + engines: {node: '>=18'} 639 + cpu: [x64] 640 + os: [sunos] 641 + 642 + '@esbuild/sunos-x64@0.27.7': 643 + resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==} 644 + engines: {node: '>=18'} 645 + cpu: [x64] 646 + os: [sunos] 647 + 648 + '@esbuild/win32-arm64@0.18.20': 649 + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} 650 + engines: {node: '>=12'} 651 + cpu: [arm64] 652 + os: [win32] 653 + 654 + '@esbuild/win32-arm64@0.25.12': 655 + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} 656 + engines: {node: '>=18'} 657 + cpu: [arm64] 658 + os: [win32] 659 + 660 + '@esbuild/win32-arm64@0.27.7': 661 + resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==} 662 + engines: {node: '>=18'} 663 + cpu: [arm64] 664 + os: [win32] 665 + 666 + '@esbuild/win32-ia32@0.18.20': 667 + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} 668 + engines: {node: '>=12'} 669 + cpu: [ia32] 670 + os: [win32] 671 + 672 + '@esbuild/win32-ia32@0.25.12': 673 + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} 674 + engines: {node: '>=18'} 675 + cpu: [ia32] 676 + os: [win32] 677 + 678 + '@esbuild/win32-ia32@0.27.7': 679 + resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==} 680 + engines: {node: '>=18'} 681 + cpu: [ia32] 682 + os: [win32] 683 + 684 + '@esbuild/win32-x64@0.18.20': 685 + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} 686 + engines: {node: '>=12'} 687 + cpu: [x64] 688 + os: [win32] 689 + 690 + '@esbuild/win32-x64@0.25.12': 691 + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} 692 + engines: {node: '>=18'} 693 + cpu: [x64] 694 + os: [win32] 695 + 696 + '@esbuild/win32-x64@0.27.7': 697 + resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==} 698 + engines: {node: '>=18'} 699 + cpu: [x64] 700 + os: [win32] 701 + 702 + '@jsr/std__bytes@1.0.6': 703 + resolution: {integrity: sha512-St6yKggjFGhxS52IFLJWvkchRFbAKg2Xh8UxA4S1EGz7GJ2Ui+ssDDldj/w2c8vCxvl6qgR0HaYbKeFJNqujmA==} 704 + 705 + '@jsr/std__crypto@1.1.0': 706 + resolution: {integrity: sha512-3k5X+V01YqCgIu3tuvS6saFVUn39p+Xe0ITMigwyoDDZsRMUsZcyjwxJpyL6TZF7NFI5Do7alSsHQElZQH1OJg==} 707 + 708 + '@jsr/std__uuid@1.1.1': 709 + resolution: {integrity: sha512-LRHNRnFWWC2sGe8bxhDOZgZsomTEBepvjcG/sPmwCGH/4sT0JlcUWoxM6Gf5I01B6BRVMJdEjCY5gPu0buJqWQ==} 710 + 711 + '@types/node@25.6.0': 712 + resolution: {integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==} 713 + 714 + '@types/pg@8.20.0': 715 + resolution: {integrity: sha512-bEPFOaMAHTEP1EzpvHTbmwR8UsFyHSKsRisLIHVMXnpNefSbGA1bD6CVy+qKjGSqmZqNqBDV2azOBo8TgkcVow==} 716 + 717 + buffer-from@1.1.2: 718 + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 719 + 720 + dotenv@17.4.2: 721 + resolution: {integrity: sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==} 722 + engines: {node: '>=12'} 723 + 724 + drizzle-kit@0.31.10: 725 + resolution: {integrity: sha512-7OZcmQUrdGI+DUNNsKBn1aW8qSoKuTH7d0mYgSP8bAzdFzKoovxEFnoGQp2dVs82EOJeYycqRtciopszwUf8bw==} 726 + hasBin: true 727 + 728 + drizzle-orm@0.45.2: 729 + resolution: {integrity: sha512-kY0BSaTNYWnoDMVoyY8uxmyHjpJW1geOmBMdSSicKo9CIIWkSxMIj2rkeSR51b8KAPB7m+qysjuHme5nKP+E5Q==} 730 + peerDependencies: 731 + '@aws-sdk/client-rds-data': '>=3' 732 + '@cloudflare/workers-types': '>=4' 733 + '@electric-sql/pglite': '>=0.2.0' 734 + '@libsql/client': '>=0.10.0' 735 + '@libsql/client-wasm': '>=0.10.0' 736 + '@neondatabase/serverless': '>=0.10.0' 737 + '@op-engineering/op-sqlite': '>=2' 738 + '@opentelemetry/api': ^1.4.1 739 + '@planetscale/database': '>=1.13' 740 + '@prisma/client': '*' 741 + '@tidbcloud/serverless': '*' 742 + '@types/better-sqlite3': '*' 743 + '@types/pg': '*' 744 + '@types/sql.js': '*' 745 + '@upstash/redis': '>=1.34.7' 746 + '@vercel/postgres': '>=0.8.0' 747 + '@xata.io/client': '*' 748 + better-sqlite3: '>=7' 749 + bun-types: '*' 750 + expo-sqlite: '>=14.0.0' 751 + gel: '>=2' 752 + knex: '*' 753 + kysely: '*' 754 + mysql2: '>=2' 755 + pg: '>=8' 756 + postgres: '>=3' 757 + prisma: '*' 758 + sql.js: '>=1' 759 + sqlite3: '>=5' 760 + peerDependenciesMeta: 761 + '@aws-sdk/client-rds-data': 762 + optional: true 763 + '@cloudflare/workers-types': 764 + optional: true 765 + '@electric-sql/pglite': 766 + optional: true 767 + '@libsql/client': 768 + optional: true 769 + '@libsql/client-wasm': 770 + optional: true 771 + '@neondatabase/serverless': 772 + optional: true 773 + '@op-engineering/op-sqlite': 774 + optional: true 775 + '@opentelemetry/api': 776 + optional: true 777 + '@planetscale/database': 778 + optional: true 779 + '@prisma/client': 780 + optional: true 781 + '@tidbcloud/serverless': 782 + optional: true 783 + '@types/better-sqlite3': 784 + optional: true 785 + '@types/pg': 786 + optional: true 787 + '@types/sql.js': 788 + optional: true 789 + '@upstash/redis': 790 + optional: true 791 + '@vercel/postgres': 792 + optional: true 793 + '@xata.io/client': 794 + optional: true 795 + better-sqlite3: 796 + optional: true 797 + bun-types: 798 + optional: true 799 + expo-sqlite: 800 + optional: true 801 + gel: 802 + optional: true 803 + knex: 804 + optional: true 805 + kysely: 806 + optional: true 807 + mysql2: 808 + optional: true 809 + pg: 810 + optional: true 811 + postgres: 812 + optional: true 813 + prisma: 814 + optional: true 815 + sql.js: 816 + optional: true 817 + sqlite3: 818 + optional: true 819 + 820 + esbuild@0.18.20: 821 + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} 822 + engines: {node: '>=12'} 823 + hasBin: true 824 + 825 + esbuild@0.25.12: 826 + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} 827 + engines: {node: '>=18'} 828 + hasBin: true 829 + 830 + esbuild@0.27.7: 831 + resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} 832 + engines: {node: '>=18'} 833 + hasBin: true 834 + 835 + fsevents@2.3.3: 836 + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 837 + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 838 + os: [darwin] 839 + 840 + get-tsconfig@4.14.0: 841 + resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} 842 + 843 + pg-cloudflare@1.3.0: 844 + resolution: {integrity: sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ==} 845 + 846 + pg-connection-string@2.12.0: 847 + resolution: {integrity: sha512-U7qg+bpswf3Cs5xLzRqbXbQl85ng0mfSV/J0nnA31MCLgvEaAo7CIhmeyrmJpOr7o+zm0rXK+hNnT5l9RHkCkQ==} 848 + 849 + pg-int8@1.0.1: 850 + resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} 851 + engines: {node: '>=4.0.0'} 852 + 853 + pg-pool@3.13.0: 854 + resolution: {integrity: sha512-gB+R+Xud1gLFuRD/QgOIgGOBE2KCQPaPwkzBBGC9oG69pHTkhQeIuejVIk3/cnDyX39av2AxomQiyPT13WKHQA==} 855 + peerDependencies: 856 + pg: '>=8.0' 857 + 858 + pg-protocol@1.13.0: 859 + resolution: {integrity: sha512-zzdvXfS6v89r6v7OcFCHfHlyG/wvry1ALxZo4LqgUoy7W9xhBDMaqOuMiF3qEV45VqsN6rdlcehHrfDtlCPc8w==} 860 + 861 + pg-types@2.2.0: 862 + resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} 863 + engines: {node: '>=4'} 864 + 865 + pg@8.20.0: 866 + resolution: {integrity: sha512-ldhMxz2r8fl/6QkXnBD3CR9/xg694oT6DZQ2s6c/RI28OjtSOpxnPrUCGOBJ46RCUxcWdx3p6kw/xnDHjKvaRA==} 867 + engines: {node: '>= 16.0.0'} 868 + peerDependencies: 869 + pg-native: '>=3.0.1' 870 + peerDependenciesMeta: 871 + pg-native: 872 + optional: true 873 + 874 + pgpass@1.0.5: 875 + resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==} 876 + 877 + postgres-array@2.0.0: 878 + resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} 879 + engines: {node: '>=4'} 880 + 881 + postgres-bytea@1.0.1: 882 + resolution: {integrity: sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==} 883 + engines: {node: '>=0.10.0'} 884 + 885 + postgres-date@1.0.7: 886 + resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} 887 + engines: {node: '>=0.10.0'} 888 + 889 + postgres-interval@1.2.0: 890 + resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} 891 + engines: {node: '>=0.10.0'} 892 + 893 + resolve-pkg-maps@1.0.0: 894 + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 895 + 896 + source-map-support@0.5.21: 897 + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} 898 + 899 + source-map@0.6.1: 900 + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 901 + engines: {node: '>=0.10.0'} 902 + 903 + split2@4.2.0: 904 + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} 905 + engines: {node: '>= 10.x'} 906 + 907 + tsx@4.21.0: 908 + resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} 909 + engines: {node: '>=18.0.0'} 910 + hasBin: true 911 + 912 + undici-types@7.19.2: 913 + resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==} 914 + 915 + xtend@4.0.2: 916 + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} 917 + engines: {node: '>=0.4'} 918 + 919 + zod@4.4.1: 920 + resolution: {integrity: sha512-a6ENMBBGZBsnlSebQ/eKCguSBeGKSf4O7BPnqVPmYGtpBYI7VSqoVqw+QcB7kPRjbqPwhYTpFbVj/RqNz/CT0Q==} 921 + 922 + snapshots: 923 + 924 + '@drizzle-team/brocli@0.10.2': {} 925 + 926 + '@esbuild-kit/core-utils@3.3.2': 927 + dependencies: 928 + esbuild: 0.18.20 929 + source-map-support: 0.5.21 930 + 931 + '@esbuild-kit/esm-loader@2.6.5': 932 + dependencies: 933 + '@esbuild-kit/core-utils': 3.3.2 934 + get-tsconfig: 4.14.0 935 + 936 + '@esbuild/aix-ppc64@0.25.12': 937 + optional: true 938 + 939 + '@esbuild/aix-ppc64@0.27.7': 940 + optional: true 941 + 942 + '@esbuild/android-arm64@0.18.20': 943 + optional: true 944 + 945 + '@esbuild/android-arm64@0.25.12': 946 + optional: true 947 + 948 + '@esbuild/android-arm64@0.27.7': 949 + optional: true 950 + 951 + '@esbuild/android-arm@0.18.20': 952 + optional: true 953 + 954 + '@esbuild/android-arm@0.25.12': 955 + optional: true 956 + 957 + '@esbuild/android-arm@0.27.7': 958 + optional: true 959 + 960 + '@esbuild/android-x64@0.18.20': 961 + optional: true 962 + 963 + '@esbuild/android-x64@0.25.12': 964 + optional: true 965 + 966 + '@esbuild/android-x64@0.27.7': 967 + optional: true 968 + 969 + '@esbuild/darwin-arm64@0.18.20': 970 + optional: true 971 + 972 + '@esbuild/darwin-arm64@0.25.12': 973 + optional: true 974 + 975 + '@esbuild/darwin-arm64@0.27.7': 976 + optional: true 977 + 978 + '@esbuild/darwin-x64@0.18.20': 979 + optional: true 980 + 981 + '@esbuild/darwin-x64@0.25.12': 982 + optional: true 983 + 984 + '@esbuild/darwin-x64@0.27.7': 985 + optional: true 986 + 987 + '@esbuild/freebsd-arm64@0.18.20': 988 + optional: true 989 + 990 + '@esbuild/freebsd-arm64@0.25.12': 991 + optional: true 992 + 993 + '@esbuild/freebsd-arm64@0.27.7': 994 + optional: true 995 + 996 + '@esbuild/freebsd-x64@0.18.20': 997 + optional: true 998 + 999 + '@esbuild/freebsd-x64@0.25.12': 1000 + optional: true 1001 + 1002 + '@esbuild/freebsd-x64@0.27.7': 1003 + optional: true 1004 + 1005 + '@esbuild/linux-arm64@0.18.20': 1006 + optional: true 1007 + 1008 + '@esbuild/linux-arm64@0.25.12': 1009 + optional: true 1010 + 1011 + '@esbuild/linux-arm64@0.27.7': 1012 + optional: true 1013 + 1014 + '@esbuild/linux-arm@0.18.20': 1015 + optional: true 1016 + 1017 + '@esbuild/linux-arm@0.25.12': 1018 + optional: true 1019 + 1020 + '@esbuild/linux-arm@0.27.7': 1021 + optional: true 1022 + 1023 + '@esbuild/linux-ia32@0.18.20': 1024 + optional: true 1025 + 1026 + '@esbuild/linux-ia32@0.25.12': 1027 + optional: true 1028 + 1029 + '@esbuild/linux-ia32@0.27.7': 1030 + optional: true 1031 + 1032 + '@esbuild/linux-loong64@0.18.20': 1033 + optional: true 1034 + 1035 + '@esbuild/linux-loong64@0.25.12': 1036 + optional: true 1037 + 1038 + '@esbuild/linux-loong64@0.27.7': 1039 + optional: true 1040 + 1041 + '@esbuild/linux-mips64el@0.18.20': 1042 + optional: true 1043 + 1044 + '@esbuild/linux-mips64el@0.25.12': 1045 + optional: true 1046 + 1047 + '@esbuild/linux-mips64el@0.27.7': 1048 + optional: true 1049 + 1050 + '@esbuild/linux-ppc64@0.18.20': 1051 + optional: true 1052 + 1053 + '@esbuild/linux-ppc64@0.25.12': 1054 + optional: true 1055 + 1056 + '@esbuild/linux-ppc64@0.27.7': 1057 + optional: true 1058 + 1059 + '@esbuild/linux-riscv64@0.18.20': 1060 + optional: true 1061 + 1062 + '@esbuild/linux-riscv64@0.25.12': 1063 + optional: true 1064 + 1065 + '@esbuild/linux-riscv64@0.27.7': 1066 + optional: true 1067 + 1068 + '@esbuild/linux-s390x@0.18.20': 1069 + optional: true 1070 + 1071 + '@esbuild/linux-s390x@0.25.12': 1072 + optional: true 1073 + 1074 + '@esbuild/linux-s390x@0.27.7': 1075 + optional: true 1076 + 1077 + '@esbuild/linux-x64@0.18.20': 1078 + optional: true 1079 + 1080 + '@esbuild/linux-x64@0.25.12': 1081 + optional: true 1082 + 1083 + '@esbuild/linux-x64@0.27.7': 1084 + optional: true 1085 + 1086 + '@esbuild/netbsd-arm64@0.25.12': 1087 + optional: true 1088 + 1089 + '@esbuild/netbsd-arm64@0.27.7': 1090 + optional: true 1091 + 1092 + '@esbuild/netbsd-x64@0.18.20': 1093 + optional: true 1094 + 1095 + '@esbuild/netbsd-x64@0.25.12': 1096 + optional: true 1097 + 1098 + '@esbuild/netbsd-x64@0.27.7': 1099 + optional: true 1100 + 1101 + '@esbuild/openbsd-arm64@0.25.12': 1102 + optional: true 1103 + 1104 + '@esbuild/openbsd-arm64@0.27.7': 1105 + optional: true 1106 + 1107 + '@esbuild/openbsd-x64@0.18.20': 1108 + optional: true 1109 + 1110 + '@esbuild/openbsd-x64@0.25.12': 1111 + optional: true 1112 + 1113 + '@esbuild/openbsd-x64@0.27.7': 1114 + optional: true 1115 + 1116 + '@esbuild/openharmony-arm64@0.25.12': 1117 + optional: true 1118 + 1119 + '@esbuild/openharmony-arm64@0.27.7': 1120 + optional: true 1121 + 1122 + '@esbuild/sunos-x64@0.18.20': 1123 + optional: true 1124 + 1125 + '@esbuild/sunos-x64@0.25.12': 1126 + optional: true 1127 + 1128 + '@esbuild/sunos-x64@0.27.7': 1129 + optional: true 1130 + 1131 + '@esbuild/win32-arm64@0.18.20': 1132 + optional: true 1133 + 1134 + '@esbuild/win32-arm64@0.25.12': 1135 + optional: true 1136 + 1137 + '@esbuild/win32-arm64@0.27.7': 1138 + optional: true 1139 + 1140 + '@esbuild/win32-ia32@0.18.20': 1141 + optional: true 1142 + 1143 + '@esbuild/win32-ia32@0.25.12': 1144 + optional: true 1145 + 1146 + '@esbuild/win32-ia32@0.27.7': 1147 + optional: true 1148 + 1149 + '@esbuild/win32-x64@0.18.20': 1150 + optional: true 1151 + 1152 + '@esbuild/win32-x64@0.25.12': 1153 + optional: true 1154 + 1155 + '@esbuild/win32-x64@0.27.7': 1156 + optional: true 1157 + 1158 + '@jsr/std__bytes@1.0.6': {} 1159 + 1160 + '@jsr/std__crypto@1.1.0': {} 1161 + 1162 + '@jsr/std__uuid@1.1.1': 1163 + dependencies: 1164 + '@jsr/std__bytes': 1.0.6 1165 + '@jsr/std__crypto': 1.1.0 1166 + 1167 + '@types/node@25.6.0': 1168 + dependencies: 1169 + undici-types: 7.19.2 1170 + 1171 + '@types/pg@8.20.0': 1172 + dependencies: 1173 + '@types/node': 25.6.0 1174 + pg-protocol: 1.13.0 1175 + pg-types: 2.2.0 1176 + 1177 + buffer-from@1.1.2: {} 1178 + 1179 + dotenv@17.4.2: {} 1180 + 1181 + drizzle-kit@0.31.10: 1182 + dependencies: 1183 + '@drizzle-team/brocli': 0.10.2 1184 + '@esbuild-kit/esm-loader': 2.6.5 1185 + esbuild: 0.25.12 1186 + tsx: 4.21.0 1187 + 1188 + drizzle-orm@0.45.2(@types/pg@8.20.0)(pg@8.20.0): 1189 + optionalDependencies: 1190 + '@types/pg': 8.20.0 1191 + pg: 8.20.0 1192 + 1193 + esbuild@0.18.20: 1194 + optionalDependencies: 1195 + '@esbuild/android-arm': 0.18.20 1196 + '@esbuild/android-arm64': 0.18.20 1197 + '@esbuild/android-x64': 0.18.20 1198 + '@esbuild/darwin-arm64': 0.18.20 1199 + '@esbuild/darwin-x64': 0.18.20 1200 + '@esbuild/freebsd-arm64': 0.18.20 1201 + '@esbuild/freebsd-x64': 0.18.20 1202 + '@esbuild/linux-arm': 0.18.20 1203 + '@esbuild/linux-arm64': 0.18.20 1204 + '@esbuild/linux-ia32': 0.18.20 1205 + '@esbuild/linux-loong64': 0.18.20 1206 + '@esbuild/linux-mips64el': 0.18.20 1207 + '@esbuild/linux-ppc64': 0.18.20 1208 + '@esbuild/linux-riscv64': 0.18.20 1209 + '@esbuild/linux-s390x': 0.18.20 1210 + '@esbuild/linux-x64': 0.18.20 1211 + '@esbuild/netbsd-x64': 0.18.20 1212 + '@esbuild/openbsd-x64': 0.18.20 1213 + '@esbuild/sunos-x64': 0.18.20 1214 + '@esbuild/win32-arm64': 0.18.20 1215 + '@esbuild/win32-ia32': 0.18.20 1216 + '@esbuild/win32-x64': 0.18.20 1217 + 1218 + esbuild@0.25.12: 1219 + optionalDependencies: 1220 + '@esbuild/aix-ppc64': 0.25.12 1221 + '@esbuild/android-arm': 0.25.12 1222 + '@esbuild/android-arm64': 0.25.12 1223 + '@esbuild/android-x64': 0.25.12 1224 + '@esbuild/darwin-arm64': 0.25.12 1225 + '@esbuild/darwin-x64': 0.25.12 1226 + '@esbuild/freebsd-arm64': 0.25.12 1227 + '@esbuild/freebsd-x64': 0.25.12 1228 + '@esbuild/linux-arm': 0.25.12 1229 + '@esbuild/linux-arm64': 0.25.12 1230 + '@esbuild/linux-ia32': 0.25.12 1231 + '@esbuild/linux-loong64': 0.25.12 1232 + '@esbuild/linux-mips64el': 0.25.12 1233 + '@esbuild/linux-ppc64': 0.25.12 1234 + '@esbuild/linux-riscv64': 0.25.12 1235 + '@esbuild/linux-s390x': 0.25.12 1236 + '@esbuild/linux-x64': 0.25.12 1237 + '@esbuild/netbsd-arm64': 0.25.12 1238 + '@esbuild/netbsd-x64': 0.25.12 1239 + '@esbuild/openbsd-arm64': 0.25.12 1240 + '@esbuild/openbsd-x64': 0.25.12 1241 + '@esbuild/openharmony-arm64': 0.25.12 1242 + '@esbuild/sunos-x64': 0.25.12 1243 + '@esbuild/win32-arm64': 0.25.12 1244 + '@esbuild/win32-ia32': 0.25.12 1245 + '@esbuild/win32-x64': 0.25.12 1246 + 1247 + esbuild@0.27.7: 1248 + optionalDependencies: 1249 + '@esbuild/aix-ppc64': 0.27.7 1250 + '@esbuild/android-arm': 0.27.7 1251 + '@esbuild/android-arm64': 0.27.7 1252 + '@esbuild/android-x64': 0.27.7 1253 + '@esbuild/darwin-arm64': 0.27.7 1254 + '@esbuild/darwin-x64': 0.27.7 1255 + '@esbuild/freebsd-arm64': 0.27.7 1256 + '@esbuild/freebsd-x64': 0.27.7 1257 + '@esbuild/linux-arm': 0.27.7 1258 + '@esbuild/linux-arm64': 0.27.7 1259 + '@esbuild/linux-ia32': 0.27.7 1260 + '@esbuild/linux-loong64': 0.27.7 1261 + '@esbuild/linux-mips64el': 0.27.7 1262 + '@esbuild/linux-ppc64': 0.27.7 1263 + '@esbuild/linux-riscv64': 0.27.7 1264 + '@esbuild/linux-s390x': 0.27.7 1265 + '@esbuild/linux-x64': 0.27.7 1266 + '@esbuild/netbsd-arm64': 0.27.7 1267 + '@esbuild/netbsd-x64': 0.27.7 1268 + '@esbuild/openbsd-arm64': 0.27.7 1269 + '@esbuild/openbsd-x64': 0.27.7 1270 + '@esbuild/openharmony-arm64': 0.27.7 1271 + '@esbuild/sunos-x64': 0.27.7 1272 + '@esbuild/win32-arm64': 0.27.7 1273 + '@esbuild/win32-ia32': 0.27.7 1274 + '@esbuild/win32-x64': 0.27.7 1275 + 1276 + fsevents@2.3.3: 1277 + optional: true 1278 + 1279 + get-tsconfig@4.14.0: 1280 + dependencies: 1281 + resolve-pkg-maps: 1.0.0 1282 + 1283 + pg-cloudflare@1.3.0: 1284 + optional: true 1285 + 1286 + pg-connection-string@2.12.0: {} 1287 + 1288 + pg-int8@1.0.1: {} 1289 + 1290 + pg-pool@3.13.0(pg@8.20.0): 1291 + dependencies: 1292 + pg: 8.20.0 1293 + 1294 + pg-protocol@1.13.0: {} 1295 + 1296 + pg-types@2.2.0: 1297 + dependencies: 1298 + pg-int8: 1.0.1 1299 + postgres-array: 2.0.0 1300 + postgres-bytea: 1.0.1 1301 + postgres-date: 1.0.7 1302 + postgres-interval: 1.2.0 1303 + 1304 + pg@8.20.0: 1305 + dependencies: 1306 + pg-connection-string: 2.12.0 1307 + pg-pool: 3.13.0(pg@8.20.0) 1308 + pg-protocol: 1.13.0 1309 + pg-types: 2.2.0 1310 + pgpass: 1.0.5 1311 + optionalDependencies: 1312 + pg-cloudflare: 1.3.0 1313 + 1314 + pgpass@1.0.5: 1315 + dependencies: 1316 + split2: 4.2.0 1317 + 1318 + postgres-array@2.0.0: {} 1319 + 1320 + postgres-bytea@1.0.1: {} 1321 + 1322 + postgres-date@1.0.7: {} 1323 + 1324 + postgres-interval@1.2.0: 1325 + dependencies: 1326 + xtend: 4.0.2 1327 + 1328 + resolve-pkg-maps@1.0.0: {} 1329 + 1330 + source-map-support@0.5.21: 1331 + dependencies: 1332 + buffer-from: 1.1.2 1333 + source-map: 0.6.1 1334 + 1335 + source-map@0.6.1: {} 1336 + 1337 + split2@4.2.0: {} 1338 + 1339 + tsx@4.21.0: 1340 + dependencies: 1341 + esbuild: 0.27.7 1342 + get-tsconfig: 4.14.0 1343 + optionalDependencies: 1344 + fsevents: 2.3.3 1345 + 1346 + undici-types@7.19.2: {} 1347 + 1348 + xtend@4.0.2: {} 1349 + 1350 + zod@4.4.1: {}
+19
api/src/db/drizzle/0000_raw_records.sql
··· 1 + CREATE DOMAIN uuidv7 AS uuid CHECK (uuid_extract_version(VALUE) = 7);--> statement-breakpoint 2 + CREATE TYPE "public"."raw_action" AS ENUM('create', 'update', 'delete');--> statement-breakpoint 3 + CREATE TABLE "raw_records" ( 4 + "id" uuidv7 PRIMARY KEY NOT NULL, 5 + "tap_id" bigint NOT NULL, 6 + "received_at" timestamp with time zone DEFAULT now() NOT NULL, 7 + "did" text NOT NULL, 8 + "rev" text NOT NULL, 9 + "collection" text NOT NULL, 10 + "rkey" text NOT NULL, 11 + "action" "raw_action" NOT NULL, 12 + "cid" text, 13 + "record" jsonb, 14 + CONSTRAINT "raw_records_tap_id_unique" UNIQUE("tap_id"), 15 + CONSTRAINT "raw_records_not_null_unless_delete" CHECK (("raw_records"."action" = 'delete' or ("raw_records"."cid" is not null and "raw_records"."record" is not null))) 16 + ); 17 + --> statement-breakpoint 18 + CREATE INDEX "raw_records_collection_index" ON "raw_records" USING btree ("collection");--> statement-breakpoint 19 + CREATE INDEX "raw_records_did_collection_rkey_index" ON "raw_records" USING btree ("did","collection","rkey");
+1
api/src/db/drizzle/meta/0000_snapshot.json
··· 1 + {"id":"b6f04a1d-2900-4afb-9cb8-f555e332159b","prevId":"00000000-0000-0000-0000-000000000000","version":"7","dialect":"postgresql","tables":{"public.raw_records":{"name":"raw_records","schema":"","columns":{"id":{"name":"id","type":"uuidv7","primaryKey":true,"notNull":true},"tap_id":{"name":"tap_id","type":"bigint","primaryKey":false,"notNull":true},"received_at":{"name":"received_at","type":"timestamp with time zone","primaryKey":false,"notNull":true,"default":"now()"},"did":{"name":"did","type":"text","primaryKey":false,"notNull":true},"rev":{"name":"rev","type":"text","primaryKey":false,"notNull":true},"collection":{"name":"collection","type":"text","primaryKey":false,"notNull":true},"rkey":{"name":"rkey","type":"text","primaryKey":false,"notNull":true},"action":{"name":"action","type":"raw_action","typeSchema":"public","primaryKey":false,"notNull":true},"cid":{"name":"cid","type":"text","primaryKey":false,"notNull":false},"record":{"name":"record","type":"jsonb","primaryKey":false,"notNull":false}},"indexes":{"raw_records_collection_index":{"name":"raw_records_collection_index","columns":[{"expression":"collection","isExpression":false,"asc":true,"nulls":"last"}],"isUnique":false,"concurrently":false,"method":"btree","with":{}},"raw_records_did_collection_rkey_index":{"name":"raw_records_did_collection_rkey_index","columns":[{"expression":"did","isExpression":false,"asc":true,"nulls":"last"},{"expression":"collection","isExpression":false,"asc":true,"nulls":"last"},{"expression":"rkey","isExpression":false,"asc":true,"nulls":"last"}],"isUnique":false,"concurrently":false,"method":"btree","with":{}}},"foreignKeys":{},"compositePrimaryKeys":{},"uniqueConstraints":{"raw_records_tap_id_unique":{"name":"raw_records_tap_id_unique","nullsNotDistinct":false,"columns":["tap_id"]}},"policies":{},"checkConstraints":{"raw_records_not_null_unless_delete":{"name":"raw_records_not_null_unless_delete","value":"(\"raw_records\".\"action\" = 'delete' or (\"raw_records\".\"cid\" is not null and \"raw_records\".\"record\" is not null))"}},"isRLSEnabled":false}},"enums":{"public.raw_action":{"name":"raw_action","schema":"public","values":["create","update","delete"]}},"schemas":{},"sequences":{},"roles":{},"policies":{},"views":{},"_meta":{"columns":{},"schemas":{},"tables":{}}}
+13
api/src/db/drizzle/meta/_journal.json
··· 1 + { 2 + "version": "7", 3 + "dialect": "postgresql", 4 + "entries": [ 5 + { 6 + "idx": 0, 7 + "version": "7", 8 + "when": 1777734327017, 9 + "tag": "0000_raw_records", 10 + "breakpoints": true 11 + } 12 + ] 13 + }
+36
api/src/db/helpers.ts
··· 1 + import { generate, validate } from "@std/uuid/v7"; 2 + import { sql, type Column, type ColumnBaseConfig, type SQL } from "drizzle-orm"; 3 + import { customType, timestamp } from "drizzle-orm/pg-core"; 4 + import type { Id } from "../lib/id.ts"; 5 + 6 + const uuidv7Type = customType<{ data: string }>({ 7 + dataType() { 8 + return "uuidv7"; 9 + }, 10 + toDriver(value) { 11 + if (!validate(value)) throw new Error(`${value} is not a valid UUIDv7`); 12 + return value; 13 + }, 14 + }); 15 + 16 + export function uuidv7<T extends Id<string>>() { 17 + return uuidv7Type().$type<T>(); 18 + } 19 + 20 + export function uuidv7WithDefault<T extends Id<string>>() { 21 + return uuidv7Type() 22 + .$defaultFn(() => generate() as T) 23 + .$type<T>(); 24 + } 25 + 26 + export const updatedAt = () => 27 + timestamp({ withTimezone: true }) 28 + .notNull() 29 + .defaultNow() 30 + .$onUpdateFn(() => new Date()); 31 + 32 + export function timestampToIsoString( 33 + timestampColumn: Column<ColumnBaseConfig<"date", string>>, 34 + ): SQL<string> { 35 + return sql`to_char(${timestampColumn} AT TIME ZONE 'UTC', 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"')`; 36 + }
+18
api/src/db/index.ts
··· 1 + import path from "node:path"; 2 + import { drizzle } from "drizzle-orm/node-postgres"; 3 + import { migrate } from "drizzle-orm/node-postgres/migrator"; 4 + import { DATABASE_URL } from "../lib/constants.ts"; 5 + 6 + export const db = drizzle({ 7 + casing: "snake_case", 8 + connection: { 9 + connectionString: DATABASE_URL, 10 + }, 11 + }); 12 + 13 + // I uncomment this to run migrations sometimes lowkey lol 14 + export async function runMigrations() { 15 + await migrate(db, { 16 + migrationsFolder: path.join(import.meta.dirname, "drizzle"), 17 + }); 18 + }
+24
api/src/db/tables/raw_records.ts
··· 1 + import { bigint, check, index, jsonb, pgEnum, pgTable, text, timestamp } from "drizzle-orm/pg-core"; 2 + import { uuidv7WithDefault } from "../helpers.ts"; 3 + import { and, isNotNull, or, sql } from "drizzle-orm"; 4 + 5 + export const actionEnum = pgEnum('raw_action', ["create", "update", "delete"]); 6 + 7 + export const rawRecords = pgTable("raw_records", { 8 + id: uuidv7WithDefault().primaryKey(), 9 + tap_id: bigint({ mode: "bigint" }).notNull().unique(), 10 + received_at: timestamp({ withTimezone: true }) 11 + .notNull() 12 + .defaultNow(), 13 + did: text().notNull(), 14 + rev: text().notNull(), 15 + collection: text().notNull(), 16 + rkey: text().notNull(), 17 + action: actionEnum().notNull(), 18 + cid: text(), // nullable on deletes 19 + record: jsonb(), // nullable on deletes 20 + }, (table) => [ 21 + check("raw_records_not_null_unless_delete", or(sql`${table.action} = 'delete'`, and(isNotNull(table.cid), isNotNull(table.record)))!), 22 + index().on(table.collection), 23 + index().on(table.did, table.collection, table.rkey), 24 + ]);
+15
api/src/db/tables/tangled.ts
··· 1 + // import { bigint, check, index, jsonb, pgEnum, pgTable, text, timestamp } from "drizzle-orm/pg-core"; 2 + // import { uuidv7WithDefault } from "../helpers.ts"; 3 + // import { and, isNotNull, or, sql } from "drizzle-orm"; 4 + 5 + // export const rawRecords = pgTable("tangled_profile", { 6 + // did: text().primaryKey(), 7 + // // no rkey, because always self 8 + // cid: text().notNull(), 9 + // rev: text().notNull(), 10 + 11 + // }, (table) => [ 12 + // check("raw_records_not_null_unless_delete", or(sql`${table.action} = 'delete'`, and(isNotNull(table.cid), isNotNull(table.record)))!), 13 + // index().on(table.collection), 14 + // index().on(table.did, table.collection, table.rkey), 15 + // ]);
+81
api/src/importer.ts
··· 1 + import { Tap, type RecordEvent, type TapHandler } from '@atproto/tap' 2 + import { db } from './db/index.ts'; 3 + import { rawRecords } from './db/tables/raw_records.ts'; 4 + import { lexToJson } from '@atproto/lex'; 5 + import { TAP_URL } from './lib/constants.ts'; 6 + 7 + const tap = new Tap(TAP_URL); 8 + 9 + const BATCH_SIZE = 500; 10 + const FLUSH_MS = 1000; 11 + 12 + // event, ack 13 + let rowBuffer: [RecordEvent, () => Promise<void>][] = []; 14 + let flushTimer: ReturnType<typeof setTimeout> | null = null; 15 + 16 + async function flushRows(batch: [RecordEvent, () => Promise<void>][]) { 17 + if (batch.length === 0) return; 18 + try { 19 + await db.insert(rawRecords).values( 20 + batch.map(([evt]) => ({ 21 + tap_id: BigInt(evt.id), 22 + did: evt.did, 23 + rev: evt.rev, 24 + collection: evt.collection, 25 + rkey: evt.rkey, 26 + action: evt.action, 27 + cid: evt.cid, 28 + record: evt.record ? lexToJson(evt.record) : null 29 + }) 30 + )).onConflictDoNothing({ target: rawRecords.tap_id }); 31 + console.log(`Inserted ${batch.length} rows.`); 32 + await Promise.all(batch.map(([_, ack]) => ack())) 33 + } catch (err) { 34 + if (batch.length === 1) { 35 + console.error("Mb chat, it's over", err); 36 + } else { 37 + console.error("Mb chat, splitting in 2", err); 38 + const pivot = Math.floor(batch.length / 2); 39 + await flushRows(batch.slice(0, pivot)); 40 + await flushRows(batch.slice(pivot)); 41 + } 42 + } 43 + } 44 + 45 + async function flush() { 46 + if (flushTimer) { clearTimeout(flushTimer); flushTimer = null; } 47 + if (rowBuffer.length === 0) return; 48 + const batch = rowBuffer; 49 + rowBuffer = []; 50 + await flushRows(batch); 51 + } 52 + 53 + const indexer: TapHandler = { 54 + onEvent: async (evt, opts) => { 55 + // we don't care about identity events, yet 56 + if (evt.type !== "record") { 57 + await opts.ack(); 58 + return; 59 + } 60 + if ( 61 + (evt.action === "create" || evt.action === "update") && 62 + (evt.cid == null || evt.record == null) 63 + ) { 64 + console.log("slop spotted, acking and dropping") 65 + await opts.ack(); 66 + return; 67 + } 68 + rowBuffer.push([evt, opts.ack]); 69 + if (rowBuffer.length >= BATCH_SIZE) { 70 + await flush(); 71 + } else if (!flushTimer) { 72 + flushTimer = setTimeout(flush, FLUSH_MS); 73 + } 74 + }, 75 + 76 + onError: (err) => console.error("Tap Error:", err), 77 + } 78 + 79 + const channel = tap.channel(indexer) 80 + channel.start() 81 + console.log("Started Tap Importer...")
+24
api/src/index.ts
··· 1 + import "./importer.ts"; 2 + 3 + import { Hono } from 'hono' 4 + import { serve } from '@hono/node-server' 5 + const app = new Hono() 6 + 7 + app.get('/', (c) => c.text('hono!')) 8 + 9 + const server = serve(app, (d) => console.log("Listening on", d)) 10 + 11 + // graceful shutdown 12 + process.on('SIGINT', () => { 13 + server.close() 14 + process.exit(0) 15 + }) 16 + process.on('SIGTERM', () => { 17 + server.close((err) => { 18 + if (err) { 19 + console.error(err) 20 + process.exit(1) 21 + } 22 + process.exit(0) 23 + }) 24 + })
+5
api/src/lexicons/sh.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * as tangled from './sh/tangled.js'
+17
api/src/lexicons/sh/tangled.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * as actor from './tangled/actor.js' 6 + export * as feed from './tangled/feed.js' 7 + export * as git from './tangled/git.js' 8 + export * as graph from './tangled/graph.js' 9 + export * as repo from './tangled/repo.js' 10 + export * as knot from './tangled/knot.js' 11 + export * as label from './tangled/label.js' 12 + export * as owner from './tangled/owner.js' 13 + export * as pipeline from './tangled/pipeline.js' 14 + export * as publicKey from './tangled/publicKey.js' 15 + export * as spindle from './tangled/spindle.js' 16 + export * as string from './tangled/string.js' 17 + export * as sync from './tangled/sync.js'
+5
api/src/lexicons/sh/tangled/actor.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * as profile from './actor/profile.js'
+112
api/src/lexicons/sh/tangled/actor/profile.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.actor.profile' 8 + 9 + export { $nsid } 10 + 11 + /** A declaration of a Tangled account profile. */ 12 + type Main = { 13 + $type: 'sh.tangled.actor.profile' 14 + 15 + /** 16 + * Small image to be displayed next to posts from account. AKA, 'profile picture' 17 + */ 18 + avatar?: l.BlobRef 19 + 20 + /** 21 + * Free-form profile description text. 22 + */ 23 + description?: string 24 + links?: l.UriString[] 25 + stats?: ( 26 + | 'merged-pull-request-count' 27 + | 'closed-pull-request-count' 28 + | 'open-pull-request-count' 29 + | 'open-issue-count' 30 + | 'closed-issue-count' 31 + | 'repository-count' 32 + | 'star-count' 33 + )[] 34 + 35 + /** 36 + * Include link to this account on Bluesky. 37 + */ 38 + bluesky: boolean 39 + 40 + /** 41 + * Free-form location text. 42 + */ 43 + location?: string 44 + 45 + /** 46 + * Pinned repositories. Values are repo DIDs for repos that have them, or AT-URIs for legacy repos. 47 + */ 48 + pinnedRepositories?: string[] 49 + 50 + /** 51 + * Preferred gender pronouns. 52 + */ 53 + pronouns?: string 54 + 55 + /** 56 + * A handle the user prefers to be displayed as. 57 + */ 58 + preferredHandle?: l.HandleString 59 + } 60 + 61 + export type { Main } 62 + 63 + /** A declaration of a Tangled account profile. */ 64 + const main = l.record<'literal:self', Main>( 65 + 'literal:self', 66 + $nsid, 67 + l.object({ 68 + avatar: l.optional( 69 + l.blob({ accept: ['image/png', 'image/jpeg'], maxSize: 1000000 }), 70 + ), 71 + description: l.optional(l.string({ maxGraphemes: 256, maxLength: 2560 })), 72 + links: l.optional( 73 + l.array(l.string({ format: 'uri' }), { minLength: 0, maxLength: 5 }), 74 + ), 75 + stats: l.optional( 76 + l.array( 77 + l.enum([ 78 + 'merged-pull-request-count', 79 + 'closed-pull-request-count', 80 + 'open-pull-request-count', 81 + 'open-issue-count', 82 + 'closed-issue-count', 83 + 'repository-count', 84 + 'star-count', 85 + ]), 86 + { minLength: 0, maxLength: 2 }, 87 + ), 88 + ), 89 + bluesky: l.boolean(), 90 + location: l.optional(l.string({ maxGraphemes: 40, maxLength: 400 })), 91 + pinnedRepositories: l.optional( 92 + l.array(l.string(), { minLength: 0, maxLength: 6 }), 93 + ), 94 + pronouns: l.optional(l.string({ maxLength: 40 })), 95 + preferredHandle: l.optional(l.string({ format: 'handle', maxLength: 253 })), 96 + }), 97 + ) 98 + 99 + export { main } 100 + 101 + export const $isTypeOf = /*#__PURE__*/ main.isTypeOf.bind(main), 102 + $build = /*#__PURE__*/ main.build.bind(main), 103 + $type = /*#__PURE__*/ main.$type 104 + export const $assert = /*#__PURE__*/ main.assert.bind(main), 105 + $check = /*#__PURE__*/ main.check.bind(main), 106 + $cast = /*#__PURE__*/ main.cast.bind(main), 107 + $ifMatches = /*#__PURE__*/ main.ifMatches.bind(main), 108 + $matches = /*#__PURE__*/ main.matches.bind(main), 109 + $parse = /*#__PURE__*/ main.parse.bind(main), 110 + $safeParse = /*#__PURE__*/ main.safeParse.bind(main), 111 + $validate = /*#__PURE__*/ main.validate.bind(main), 112 + $safeValidate = /*#__PURE__*/ main.safeValidate.bind(main)
+6
api/src/lexicons/sh/tangled/actor/profile.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './profile.defs.js' 6 + export * as $defs from './profile.defs.js'
+6
api/src/lexicons/sh/tangled/feed.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * as reaction from './feed/reaction.js' 6 + export * as star from './feed/star.js'
+43
api/src/lexicons/sh/tangled/feed/reaction.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.feed.reaction' 8 + 9 + export { $nsid } 10 + 11 + type Main = { 12 + $type: 'sh.tangled.feed.reaction' 13 + subject: l.AtUriString 14 + reaction: '👍' | '👎' | '😆' | '🎉' | '🫤' | '❤️' | '🚀' | '👀' 15 + createdAt: l.DatetimeString 16 + } 17 + 18 + export type { Main } 19 + 20 + const main = l.record<'tid', Main>( 21 + 'tid', 22 + $nsid, 23 + l.object({ 24 + subject: l.string({ format: 'at-uri' }), 25 + reaction: l.enum(['👍', '👎', '😆', '🎉', '🫤', '❤️', '🚀', '👀']), 26 + createdAt: l.string({ format: 'datetime' }), 27 + }), 28 + ) 29 + 30 + export { main } 31 + 32 + export const $isTypeOf = /*#__PURE__*/ main.isTypeOf.bind(main), 33 + $build = /*#__PURE__*/ main.build.bind(main), 34 + $type = /*#__PURE__*/ main.$type 35 + export const $assert = /*#__PURE__*/ main.assert.bind(main), 36 + $check = /*#__PURE__*/ main.check.bind(main), 37 + $cast = /*#__PURE__*/ main.cast.bind(main), 38 + $ifMatches = /*#__PURE__*/ main.ifMatches.bind(main), 39 + $matches = /*#__PURE__*/ main.matches.bind(main), 40 + $parse = /*#__PURE__*/ main.parse.bind(main), 41 + $safeParse = /*#__PURE__*/ main.safeParse.bind(main), 42 + $validate = /*#__PURE__*/ main.validate.bind(main), 43 + $safeValidate = /*#__PURE__*/ main.safeValidate.bind(main)
+6
api/src/lexicons/sh/tangled/feed/reaction.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './reaction.defs.js' 6 + export * as $defs from './reaction.defs.js'
+43
api/src/lexicons/sh/tangled/feed/star.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.feed.star' 8 + 9 + export { $nsid } 10 + 11 + type Main = { 12 + $type: 'sh.tangled.feed.star' 13 + subject?: l.AtUriString 14 + subjectDid?: l.DidString 15 + createdAt: l.DatetimeString 16 + } 17 + 18 + export type { Main } 19 + 20 + const main = l.record<'tid', Main>( 21 + 'tid', 22 + $nsid, 23 + l.object({ 24 + subject: l.optional(l.string({ format: 'at-uri' })), 25 + subjectDid: l.optional(l.string({ format: 'did' })), 26 + createdAt: l.string({ format: 'datetime' }), 27 + }), 28 + ) 29 + 30 + export { main } 31 + 32 + export const $isTypeOf = /*#__PURE__*/ main.isTypeOf.bind(main), 33 + $build = /*#__PURE__*/ main.build.bind(main), 34 + $type = /*#__PURE__*/ main.$type 35 + export const $assert = /*#__PURE__*/ main.assert.bind(main), 36 + $check = /*#__PURE__*/ main.check.bind(main), 37 + $cast = /*#__PURE__*/ main.cast.bind(main), 38 + $ifMatches = /*#__PURE__*/ main.ifMatches.bind(main), 39 + $matches = /*#__PURE__*/ main.matches.bind(main), 40 + $parse = /*#__PURE__*/ main.parse.bind(main), 41 + $safeParse = /*#__PURE__*/ main.safeParse.bind(main), 42 + $validate = /*#__PURE__*/ main.validate.bind(main), 43 + $safeValidate = /*#__PURE__*/ main.safeValidate.bind(main)
+6
api/src/lexicons/sh/tangled/feed/star.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './star.defs.js' 6 + export * as $defs from './star.defs.js'
+6
api/src/lexicons/sh/tangled/git.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * as refUpdate from './git/refUpdate.js' 6 + export * as temp from './git/temp.js'
+184
api/src/lexicons/sh/tangled/git/refUpdate.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.git.refUpdate' 8 + 9 + export { $nsid } 10 + 11 + /** An update to a git repository, emitted by knots. */ 12 + type Main = { 13 + $type: 'sh.tangled.git.refUpdate' 14 + 15 + /** 16 + * Ref being updated 17 + */ 18 + ref: string 19 + 20 + /** 21 + * did of the user that pushed this ref 22 + */ 23 + committerDid: l.DidString 24 + 25 + /** 26 + * did of the owner of the repo 27 + */ 28 + ownerDid?: l.DidString 29 + 30 + /** 31 + * DID of the repo itself 32 + */ 33 + repoDid?: l.DidString 34 + 35 + /** 36 + * name of the repo 37 + */ 38 + repoName: string 39 + 40 + /** 41 + * old SHA of this ref 42 + */ 43 + oldSha: string 44 + 45 + /** 46 + * new SHA of this ref 47 + */ 48 + newSha: string 49 + meta: Meta 50 + } 51 + 52 + export type { Main } 53 + 54 + /** An update to a git repository, emitted by knots. */ 55 + const main = l.record<'tid', Main>( 56 + 'tid', 57 + $nsid, 58 + l.object({ 59 + ref: l.string({ maxGraphemes: 256, maxLength: 2560 }), 60 + committerDid: l.string({ format: 'did' }), 61 + ownerDid: l.optional(l.string({ format: 'did' })), 62 + repoDid: l.optional(l.string({ format: 'did' })), 63 + repoName: l.string(), 64 + oldSha: l.string({ minLength: 40, maxLength: 40 }), 65 + newSha: l.string({ minLength: 40, maxLength: 40 }), 66 + meta: l.ref<Meta>((() => meta) as any), 67 + }), 68 + ) 69 + 70 + export { main } 71 + 72 + export const $isTypeOf = /*#__PURE__*/ main.isTypeOf.bind(main), 73 + $build = /*#__PURE__*/ main.build.bind(main), 74 + $type = /*#__PURE__*/ main.$type 75 + export const $assert = /*#__PURE__*/ main.assert.bind(main), 76 + $check = /*#__PURE__*/ main.check.bind(main), 77 + $cast = /*#__PURE__*/ main.cast.bind(main), 78 + $ifMatches = /*#__PURE__*/ main.ifMatches.bind(main), 79 + $matches = /*#__PURE__*/ main.matches.bind(main), 80 + $parse = /*#__PURE__*/ main.parse.bind(main), 81 + $safeParse = /*#__PURE__*/ main.safeParse.bind(main), 82 + $validate = /*#__PURE__*/ main.validate.bind(main), 83 + $safeValidate = /*#__PURE__*/ main.safeValidate.bind(main) 84 + 85 + type Meta = { 86 + $type?: 'sh.tangled.git.refUpdate#meta' 87 + isDefaultRef: boolean 88 + langBreakdown?: LangBreakdown 89 + commitCount: CommitCountBreakdown 90 + } 91 + 92 + export type { Meta } 93 + 94 + const meta = l.typedObject<Meta>( 95 + $nsid, 96 + 'meta', 97 + l.object({ 98 + isDefaultRef: l.withDefault(l.boolean(), false), 99 + langBreakdown: l.optional( 100 + l.ref<LangBreakdown>((() => langBreakdown) as any), 101 + ), 102 + commitCount: l.ref<CommitCountBreakdown>( 103 + (() => commitCountBreakdown) as any, 104 + ), 105 + }), 106 + ) 107 + 108 + export { meta } 109 + 110 + type LangBreakdown = { 111 + $type?: 'sh.tangled.git.refUpdate#langBreakdown' 112 + inputs?: IndividualLanguageSize[] 113 + } 114 + 115 + export type { LangBreakdown } 116 + 117 + const langBreakdown = l.typedObject<LangBreakdown>( 118 + $nsid, 119 + 'langBreakdown', 120 + l.object({ 121 + inputs: l.optional( 122 + l.array( 123 + l.ref<IndividualLanguageSize>((() => individualLanguageSize) as any), 124 + ), 125 + ), 126 + }), 127 + ) 128 + 129 + export { langBreakdown } 130 + 131 + type IndividualLanguageSize = { 132 + $type?: 'sh.tangled.git.refUpdate#individualLanguageSize' 133 + lang: string 134 + size: number 135 + } 136 + 137 + export type { IndividualLanguageSize } 138 + 139 + const individualLanguageSize = l.typedObject<IndividualLanguageSize>( 140 + $nsid, 141 + 'individualLanguageSize', 142 + l.object({ lang: l.string(), size: l.integer() }), 143 + ) 144 + 145 + export { individualLanguageSize } 146 + 147 + type CommitCountBreakdown = { 148 + $type?: 'sh.tangled.git.refUpdate#commitCountBreakdown' 149 + byEmail?: IndividualEmailCommitCount[] 150 + } 151 + 152 + export type { CommitCountBreakdown } 153 + 154 + const commitCountBreakdown = l.typedObject<CommitCountBreakdown>( 155 + $nsid, 156 + 'commitCountBreakdown', 157 + l.object({ 158 + byEmail: l.optional( 159 + l.array( 160 + l.ref<IndividualEmailCommitCount>( 161 + (() => individualEmailCommitCount) as any, 162 + ), 163 + ), 164 + ), 165 + }), 166 + ) 167 + 168 + export { commitCountBreakdown } 169 + 170 + type IndividualEmailCommitCount = { 171 + $type?: 'sh.tangled.git.refUpdate#individualEmailCommitCount' 172 + email: string 173 + count: number 174 + } 175 + 176 + export type { IndividualEmailCommitCount } 177 + 178 + const individualEmailCommitCount = l.typedObject<IndividualEmailCommitCount>( 179 + $nsid, 180 + 'individualEmailCommitCount', 181 + l.object({ email: l.string(), count: l.integer() }), 182 + ) 183 + 184 + export { individualEmailCommitCount }
+6
api/src/lexicons/sh/tangled/git/refUpdate.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './refUpdate.defs.js' 6 + export * as $defs from './refUpdate.defs.js'
+19
api/src/lexicons/sh/tangled/git/temp.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * as analyzeMerge from './temp/analyzeMerge.js' 6 + export * as defs from './temp/defs.js' 7 + export * as getArchive from './temp/getArchive.js' 8 + export * as getBlob from './temp/getBlob.js' 9 + export * as getBranch from './temp/getBranch.js' 10 + export * as getCommit from './temp/getCommit.js' 11 + export * as getDiff from './temp/getDiff.js' 12 + export * as getEntity from './temp/getEntity.js' 13 + export * as getHead from './temp/getHead.js' 14 + export * as getTag from './temp/getTag.js' 15 + export * as getTree from './temp/getTree.js' 16 + export * as listBranches from './temp/listBranches.js' 17 + export * as listCommits from './temp/listCommits.js' 18 + export * as listLanguages from './temp/listLanguages.js' 19 + export * as listTags from './temp/listTags.js'
+61
api/src/lexicons/sh/tangled/git/temp/analyzeMerge.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.git.temp.analyzeMerge' 8 + 9 + export { $nsid } 10 + 11 + /** Check if a merge is possible between two branches */ 12 + const main = l.query( 13 + $nsid, 14 + l.params({ 15 + repo: l.string({ format: 'at-uri' }), 16 + patch: l.string(), 17 + branch: l.string(), 18 + }), 19 + l.jsonPayload({ 20 + is_conflicted: l.boolean(), 21 + conflicts: l.optional( 22 + l.array(l.ref<ConflictInfo>((() => conflictInfo) as any)), 23 + ), 24 + }), 25 + ) 26 + export { main } 27 + 28 + export type $Params = l.InferMethodParams<typeof main> 29 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 30 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 31 + typeof main, 32 + B 33 + > 34 + 35 + export const $lxm = main.nsid, 36 + $params = main.parameters, 37 + $output = main.output 38 + 39 + type ConflictInfo = { 40 + $type?: 'sh.tangled.git.temp.analyzeMerge#conflictInfo' 41 + 42 + /** 43 + * Name of the conflicted file 44 + */ 45 + filename: string 46 + 47 + /** 48 + * Reason for the conflict 49 + */ 50 + reason: string 51 + } 52 + 53 + export type { ConflictInfo } 54 + 55 + const conflictInfo = l.typedObject<ConflictInfo>( 56 + $nsid, 57 + 'conflictInfo', 58 + l.object({ filename: l.string(), reason: l.string() }), 59 + ) 60 + 61 + export { conflictInfo }
+6
api/src/lexicons/sh/tangled/git/temp/analyzeMerge.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './analyzeMerge.defs.js' 6 + export * as $defs from './analyzeMerge.defs.js'
+198
api/src/lexicons/sh/tangled/git/temp/defs.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.git.temp.defs' 8 + 9 + export { $nsid } 10 + 11 + /** blob metadata. This object doesn't include the blob content */ 12 + type Blob = { 13 + $type?: 'sh.tangled.git.temp.defs#blob' 14 + 15 + /** 16 + * The file name 17 + */ 18 + name: string 19 + mode: string 20 + 21 + /** 22 + * File size in bytes 23 + */ 24 + size: number 25 + lastCommit: Commit 26 + 27 + /** 28 + * Submodule information if path is a submodule 29 + */ 30 + submodule?: Submodule 31 + } 32 + 33 + export type { Blob } 34 + 35 + /** blob metadata. This object doesn't include the blob content */ 36 + const blob = l.typedObject<Blob>( 37 + $nsid, 38 + 'blob', 39 + l.object({ 40 + name: l.string(), 41 + mode: l.string(), 42 + size: l.integer(), 43 + lastCommit: l.ref<Commit>((() => commit) as any), 44 + submodule: l.optional(l.ref<Submodule>((() => submodule) as any)), 45 + }), 46 + ) 47 + 48 + export { blob } 49 + 50 + type Branch = { 51 + $type?: 'sh.tangled.git.temp.defs#branch' 52 + 53 + /** 54 + * branch name 55 + */ 56 + name: string 57 + 58 + /** 59 + * hydrated commit object 60 + */ 61 + commit: Commit 62 + } 63 + 64 + export type { Branch } 65 + 66 + const branch = l.typedObject<Branch>( 67 + $nsid, 68 + 'branch', 69 + l.object({ name: l.string(), commit: l.ref<Commit>((() => commit) as any) }), 70 + ) 71 + 72 + export { branch } 73 + 74 + type Tag = { 75 + $type?: 'sh.tangled.git.temp.defs#tag' 76 + 77 + /** 78 + * tag name 79 + */ 80 + name: string 81 + tagger: Signature 82 + message?: string 83 + target: l.LexMap 84 + } 85 + 86 + export type { Tag } 87 + 88 + const tag = l.typedObject<Tag>( 89 + $nsid, 90 + 'tag', 91 + l.object({ 92 + name: l.string(), 93 + tagger: l.ref<Signature>((() => signature) as any), 94 + message: l.optional(l.string()), 95 + target: l.lexMap(), 96 + }), 97 + ) 98 + 99 + export { tag } 100 + 101 + type Commit = { 102 + $type?: 'sh.tangled.git.temp.defs#commit' 103 + hash: Hash 104 + author: Signature 105 + committer: Signature 106 + message: string 107 + tree: Hash 108 + } 109 + 110 + export type { Commit } 111 + 112 + const commit = l.typedObject<Commit>( 113 + $nsid, 114 + 'commit', 115 + l.object({ 116 + hash: l.ref<Hash>((() => hash) as any), 117 + author: l.ref<Signature>((() => signature) as any), 118 + committer: l.ref<Signature>((() => signature) as any), 119 + message: l.string(), 120 + tree: l.ref<Hash>((() => hash) as any), 121 + }), 122 + ) 123 + 124 + export { commit } 125 + 126 + type Hash = string 127 + 128 + export type { Hash } 129 + 130 + const hash = l.string() 131 + 132 + export { hash } 133 + 134 + type Signature = { 135 + $type?: 'sh.tangled.git.temp.defs#signature' 136 + 137 + /** 138 + * Person name 139 + */ 140 + name: string 141 + 142 + /** 143 + * Person email 144 + */ 145 + email: string 146 + 147 + /** 148 + * Timestamp of the signature 149 + */ 150 + when: l.DatetimeString 151 + } 152 + 153 + export type { Signature } 154 + 155 + const signature = l.typedObject<Signature>( 156 + $nsid, 157 + 'signature', 158 + l.object({ 159 + name: l.string(), 160 + email: l.string(), 161 + when: l.string({ format: 'datetime' }), 162 + }), 163 + ) 164 + 165 + export { signature } 166 + 167 + type Submodule = { 168 + $type?: 'sh.tangled.git.temp.defs#submodule' 169 + 170 + /** 171 + * Submodule name 172 + */ 173 + name: string 174 + 175 + /** 176 + * Submodule repository URL 177 + */ 178 + url: string 179 + 180 + /** 181 + * Branch to track in the submodule 182 + */ 183 + branch?: string 184 + } 185 + 186 + export type { Submodule } 187 + 188 + const submodule = l.typedObject<Submodule>( 189 + $nsid, 190 + 'submodule', 191 + l.object({ 192 + name: l.string(), 193 + url: l.string(), 194 + branch: l.optional(l.string()), 195 + }), 196 + ) 197 + 198 + export { submodule }
+6
api/src/lexicons/sh/tangled/git/temp/defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './defs.defs.js' 6 + export * as $defs from './defs.defs.js'
+40
api/src/lexicons/sh/tangled/git/temp/getArchive.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.git.temp.getArchive' 8 + 9 + export { $nsid } 10 + 11 + const main = l.query( 12 + $nsid, 13 + l.params({ 14 + repo: l.string({ format: 'at-uri' }), 15 + ref: l.string(), 16 + format: l.optional( 17 + l.withDefault( 18 + l.enum(['tar', 'zip', 'tar.gz', 'tar.bz2', 'tar.xz']), 19 + 'tar.gz', 20 + ), 21 + ), 22 + prefix: l.optional(l.string()), 23 + }), 24 + l.payload('*/*'), 25 + ['RepoNotFound', 'RefNotFound', 'InvalidRequest', 'ArchiveError'], 26 + ) 27 + export { main } 28 + 29 + export type $Params = l.InferMethodParams<typeof main> 30 + /** Binary archive data */ 31 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 32 + /** Binary archive data */ 33 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 34 + typeof main, 35 + B 36 + > 37 + 38 + export const $lxm = main.nsid, 39 + $params = main.parameters, 40 + $output = main.output
+6
api/src/lexicons/sh/tangled/git/temp/getArchive.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './getArchive.defs.js' 6 + export * as $defs from './getArchive.defs.js'
+34
api/src/lexicons/sh/tangled/git/temp/getBlob.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.git.temp.getBlob' 8 + 9 + export { $nsid } 10 + 11 + const main = l.query( 12 + $nsid, 13 + l.params({ 14 + repo: l.string({ format: 'at-uri' }), 15 + ref: l.optional(l.withDefault(l.string(), 'HEAD')), 16 + path: l.string(), 17 + }), 18 + l.payload('*/*'), 19 + ['RepoNotFound', 'BlobNotFound', 'InvalidRequest'], 20 + ) 21 + export { main } 22 + 23 + export type $Params = l.InferMethodParams<typeof main> 24 + /** raw blob served in octet-stream */ 25 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 26 + /** raw blob served in octet-stream */ 27 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 28 + typeof main, 29 + B 30 + > 31 + 32 + export const $lxm = main.nsid, 33 + $params = main.parameters, 34 + $output = main.output
+6
api/src/lexicons/sh/tangled/git/temp/getBlob.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './getBlob.defs.js' 6 + export * as $defs from './getBlob.defs.js'
+37
api/src/lexicons/sh/tangled/git/temp/getBranch.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + import * as TempDefs from './defs.defs.js' 7 + 8 + const $nsid = 'sh.tangled.git.temp.getBranch' 9 + 10 + export { $nsid } 11 + 12 + const main = l.query( 13 + $nsid, 14 + l.params({ repo: l.string({ format: 'at-uri' }), name: l.string() }), 15 + l.jsonPayload({ 16 + name: l.string(), 17 + hash: l.string(), 18 + when: l.string({ format: 'datetime' }), 19 + message: l.optional(l.string()), 20 + author: l.optional( 21 + l.ref<TempDefs.Signature>((() => TempDefs.signature) as any), 22 + ), 23 + }), 24 + ['RepoNotFound', 'BranchNotFound', 'InvalidRequest'], 25 + ) 26 + export { main } 27 + 28 + export type $Params = l.InferMethodParams<typeof main> 29 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 30 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 31 + typeof main, 32 + B 33 + > 34 + 35 + export const $lxm = main.nsid, 36 + $params = main.parameters, 37 + $output = main.output
+6
api/src/lexicons/sh/tangled/git/temp/getBranch.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './getBranch.defs.js' 6 + export * as $defs from './getBranch.defs.js'
+33
api/src/lexicons/sh/tangled/git/temp/getCommit.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + import * as TempDefs from './defs.defs.js' 7 + 8 + const $nsid = 'sh.tangled.git.temp.getCommit' 9 + 10 + export { $nsid } 11 + 12 + /** resolve commit from given ref */ 13 + const main = l.query( 14 + $nsid, 15 + l.params({ repo: l.string({ format: 'at-uri' }), ref: l.string() }), 16 + l.payload( 17 + 'application/json', 18 + l.ref<TempDefs.Commit>((() => TempDefs.commit) as any), 19 + ), 20 + ['RepoNotFound', 'CommitNotFound', 'InvalidRequest'], 21 + ) 22 + export { main } 23 + 24 + export type $Params = l.InferMethodParams<typeof main> 25 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 26 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 27 + typeof main, 28 + B 29 + > 30 + 31 + export const $lxm = main.nsid, 32 + $params = main.parameters, 33 + $output = main.output
+6
api/src/lexicons/sh/tangled/git/temp/getCommit.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './getCommit.defs.js' 6 + export * as $defs from './getCommit.defs.js'
+34
api/src/lexicons/sh/tangled/git/temp/getDiff.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.git.temp.getDiff' 8 + 9 + export { $nsid } 10 + 11 + const main = l.query( 12 + $nsid, 13 + l.params({ 14 + repo: l.string({ format: 'at-uri' }), 15 + rev1: l.string(), 16 + rev2: l.string(), 17 + }), 18 + l.payload('*/*'), 19 + ['RepoNotFound', 'RevisionNotFound', 'InvalidRequest', 'CompareError'], 20 + ) 21 + export { main } 22 + 23 + export type $Params = l.InferMethodParams<typeof main> 24 + /** Compare output in application/json */ 25 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 26 + /** Compare output in application/json */ 27 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 28 + typeof main, 29 + B 30 + > 31 + 32 + export const $lxm = main.nsid, 33 + $params = main.parameters, 34 + $output = main.output
+6
api/src/lexicons/sh/tangled/git/temp/getDiff.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './getDiff.defs.js' 6 + export * as $defs from './getDiff.defs.js'
+37
api/src/lexicons/sh/tangled/git/temp/getEntity.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + import * as TempDefs from './defs.defs.js' 7 + 8 + const $nsid = 'sh.tangled.git.temp.getEntity' 9 + 10 + export { $nsid } 11 + 12 + /** get metadata of blob by ref and path */ 13 + const main = l.query( 14 + $nsid, 15 + l.params({ 16 + repo: l.string({ format: 'at-uri' }), 17 + ref: l.optional(l.withDefault(l.string(), 'HEAD')), 18 + path: l.string(), 19 + }), 20 + l.payload( 21 + 'application/json', 22 + l.ref<TempDefs.Blob>((() => TempDefs.blob) as any), 23 + ), 24 + ['RepoNotFound', 'BlobNotFound', 'InvalidRequest'], 25 + ) 26 + export { main } 27 + 28 + export type $Params = l.InferMethodParams<typeof main> 29 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 30 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 31 + typeof main, 32 + B 33 + > 34 + 35 + export const $lxm = main.nsid, 36 + $params = main.parameters, 37 + $output = main.output
+6
api/src/lexicons/sh/tangled/git/temp/getEntity.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './getEntity.defs.js' 6 + export * as $defs from './getEntity.defs.js'
+32
api/src/lexicons/sh/tangled/git/temp/getHead.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + import * as TempDefs from './defs.defs.js' 7 + 8 + const $nsid = 'sh.tangled.git.temp.getHead' 9 + 10 + export { $nsid } 11 + 12 + const main = l.query( 13 + $nsid, 14 + l.params({ repo: l.string({ format: 'at-uri' }) }), 15 + l.payload( 16 + 'application/json', 17 + l.ref<TempDefs.Branch>((() => TempDefs.branch) as any), 18 + ), 19 + ['RepoNotFound', 'InvalidRequest'], 20 + ) 21 + export { main } 22 + 23 + export type $Params = l.InferMethodParams<typeof main> 24 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 25 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 26 + typeof main, 27 + B 28 + > 29 + 30 + export const $lxm = main.nsid, 31 + $params = main.parameters, 32 + $output = main.output
+6
api/src/lexicons/sh/tangled/git/temp/getHead.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './getHead.defs.js' 6 + export * as $defs from './getHead.defs.js'
+28
api/src/lexicons/sh/tangled/git/temp/getTag.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.git.temp.getTag' 8 + 9 + export { $nsid } 10 + 11 + const main = l.query( 12 + $nsid, 13 + l.params({ repo: l.string({ format: 'at-uri' }), tag: l.string() }), 14 + l.payload('*/*'), 15 + ['RepoNotFound', 'TagNotFound', 'InvalidRequest'], 16 + ) 17 + export { main } 18 + 19 + export type $Params = l.InferMethodParams<typeof main> 20 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 21 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 22 + typeof main, 23 + B 24 + > 25 + 26 + export const $lxm = main.nsid, 27 + $params = main.parameters, 28 + $output = main.output
+6
api/src/lexicons/sh/tangled/git/temp/getTag.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './getTag.defs.js' 6 + export * as $defs from './getTag.defs.js'
+166
api/src/lexicons/sh/tangled/git/temp/getTree.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.git.temp.getTree' 8 + 9 + export { $nsid } 10 + 11 + const main = l.query( 12 + $nsid, 13 + l.params({ 14 + repo: l.string({ format: 'at-uri' }), 15 + ref: l.string(), 16 + path: l.optional(l.withDefault(l.string(), '')), 17 + }), 18 + l.jsonPayload({ 19 + ref: l.string(), 20 + parent: l.optional(l.string()), 21 + dotdot: l.optional(l.string()), 22 + readme: l.optional(l.ref<Readme>((() => readme) as any)), 23 + lastCommit: l.optional(l.ref<LastCommit>((() => lastCommit) as any)), 24 + files: l.array(l.ref<TreeEntry>((() => treeEntry) as any)), 25 + }), 26 + ['RepoNotFound', 'RefNotFound', 'PathNotFound', 'InvalidRequest'], 27 + ) 28 + export { main } 29 + 30 + export type $Params = l.InferMethodParams<typeof main> 31 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 32 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 33 + typeof main, 34 + B 35 + > 36 + 37 + export const $lxm = main.nsid, 38 + $params = main.parameters, 39 + $output = main.output 40 + 41 + type Readme = { 42 + $type?: 'sh.tangled.git.temp.getTree#readme' 43 + 44 + /** 45 + * Name of the readme file 46 + */ 47 + filename: string 48 + 49 + /** 50 + * Contents of the readme file 51 + */ 52 + contents: string 53 + } 54 + 55 + export type { Readme } 56 + 57 + const readme = l.typedObject<Readme>( 58 + $nsid, 59 + 'readme', 60 + l.object({ filename: l.string(), contents: l.string() }), 61 + ) 62 + 63 + export { readme } 64 + 65 + type TreeEntry = { 66 + $type?: 'sh.tangled.git.temp.getTree#treeEntry' 67 + 68 + /** 69 + * Relative file or directory name 70 + */ 71 + name: string 72 + 73 + /** 74 + * File mode 75 + */ 76 + mode: string 77 + 78 + /** 79 + * File size in bytes 80 + */ 81 + size: number 82 + last_commit?: LastCommit 83 + } 84 + 85 + export type { TreeEntry } 86 + 87 + const treeEntry = l.typedObject<TreeEntry>( 88 + $nsid, 89 + 'treeEntry', 90 + l.object({ 91 + name: l.string(), 92 + mode: l.string(), 93 + size: l.integer(), 94 + last_commit: l.optional(l.ref<LastCommit>((() => lastCommit) as any)), 95 + }), 96 + ) 97 + 98 + export { treeEntry } 99 + 100 + type LastCommit = { 101 + $type?: 'sh.tangled.git.temp.getTree#lastCommit' 102 + 103 + /** 104 + * Commit hash 105 + */ 106 + hash: string 107 + 108 + /** 109 + * Commit message 110 + */ 111 + message: string 112 + author?: Signature 113 + 114 + /** 115 + * Commit timestamp 116 + */ 117 + when: l.DatetimeString 118 + } 119 + 120 + export type { LastCommit } 121 + 122 + const lastCommit = l.typedObject<LastCommit>( 123 + $nsid, 124 + 'lastCommit', 125 + l.object({ 126 + hash: l.string(), 127 + message: l.string(), 128 + author: l.optional(l.ref<Signature>((() => signature) as any)), 129 + when: l.string({ format: 'datetime' }), 130 + }), 131 + ) 132 + 133 + export { lastCommit } 134 + 135 + type Signature = { 136 + $type?: 'sh.tangled.git.temp.getTree#signature' 137 + 138 + /** 139 + * Author name 140 + */ 141 + name: string 142 + 143 + /** 144 + * Author email 145 + */ 146 + email: string 147 + 148 + /** 149 + * Author timestamp 150 + */ 151 + when: l.DatetimeString 152 + } 153 + 154 + export type { Signature } 155 + 156 + const signature = l.typedObject<Signature>( 157 + $nsid, 158 + 'signature', 159 + l.object({ 160 + name: l.string(), 161 + email: l.string(), 162 + when: l.string({ format: 'datetime' }), 163 + }), 164 + ) 165 + 166 + export { signature }
+6
api/src/lexicons/sh/tangled/git/temp/getTree.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './getTree.defs.js' 6 + export * as $defs from './getTree.defs.js'
+34
api/src/lexicons/sh/tangled/git/temp/listBranches.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.git.temp.listBranches' 8 + 9 + export { $nsid } 10 + 11 + const main = l.query( 12 + $nsid, 13 + l.params({ 14 + repo: l.string({ format: 'at-uri' }), 15 + limit: l.optional( 16 + l.withDefault(l.integer({ minimum: 1, maximum: 100 }), 50), 17 + ), 18 + cursor: l.optional(l.string()), 19 + }), 20 + l.payload('*/*'), 21 + ['RepoNotFound', 'InvalidRequest'], 22 + ) 23 + export { main } 24 + 25 + export type $Params = l.InferMethodParams<typeof main> 26 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 27 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 28 + typeof main, 29 + B 30 + > 31 + 32 + export const $lxm = main.nsid, 33 + $params = main.parameters, 34 + $output = main.output
+6
api/src/lexicons/sh/tangled/git/temp/listBranches.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './listBranches.defs.js' 6 + export * as $defs from './listBranches.defs.js'
+35
api/src/lexicons/sh/tangled/git/temp/listCommits.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.git.temp.listCommits' 8 + 9 + export { $nsid } 10 + 11 + const main = l.query( 12 + $nsid, 13 + l.params({ 14 + repo: l.string({ format: 'at-uri' }), 15 + ref: l.optional(l.string()), 16 + limit: l.optional( 17 + l.withDefault(l.integer({ minimum: 1, maximum: 100 }), 50), 18 + ), 19 + cursor: l.optional(l.string()), 20 + }), 21 + l.payload('*/*'), 22 + ['RepoNotFound', 'RefNotFound', 'PathNotFound', 'InvalidRequest'], 23 + ) 24 + export { main } 25 + 26 + export type $Params = l.InferMethodParams<typeof main> 27 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 28 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 29 + typeof main, 30 + B 31 + > 32 + 33 + export const $lxm = main.nsid, 34 + $params = main.parameters, 35 + $output = main.output
+6
api/src/lexicons/sh/tangled/git/temp/listCommits.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './listCommits.defs.js' 6 + export * as $defs from './listCommits.defs.js'
+87
api/src/lexicons/sh/tangled/git/temp/listLanguages.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.git.temp.listLanguages' 8 + 9 + export { $nsid } 10 + 11 + const main = l.query( 12 + $nsid, 13 + l.params({ 14 + repo: l.string({ format: 'at-uri' }), 15 + ref: l.optional(l.withDefault(l.string(), 'HEAD')), 16 + }), 17 + l.jsonPayload({ 18 + ref: l.string(), 19 + languages: l.array(l.ref<Language>((() => language) as any)), 20 + totalSize: l.optional(l.integer()), 21 + totalFiles: l.optional(l.integer()), 22 + }), 23 + ['RepoNotFound', 'RefNotFound', 'InvalidRequest'], 24 + ) 25 + export { main } 26 + 27 + export type $Params = l.InferMethodParams<typeof main> 28 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 29 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 30 + typeof main, 31 + B 32 + > 33 + 34 + export const $lxm = main.nsid, 35 + $params = main.parameters, 36 + $output = main.output 37 + 38 + type Language = { 39 + $type?: 'sh.tangled.git.temp.listLanguages#language' 40 + 41 + /** 42 + * Programming language name 43 + */ 44 + name: string 45 + 46 + /** 47 + * Total size of files in this language (bytes) 48 + */ 49 + size: number 50 + 51 + /** 52 + * Percentage of total codebase (0-100) 53 + */ 54 + percentage: number 55 + 56 + /** 57 + * Number of files in this language 58 + */ 59 + fileCount?: number 60 + 61 + /** 62 + * Hex color code for this language 63 + */ 64 + color?: string 65 + 66 + /** 67 + * File extensions associated with this language 68 + */ 69 + extensions?: string[] 70 + } 71 + 72 + export type { Language } 73 + 74 + const language = l.typedObject<Language>( 75 + $nsid, 76 + 'language', 77 + l.object({ 78 + name: l.string(), 79 + size: l.integer(), 80 + percentage: l.integer(), 81 + fileCount: l.optional(l.integer()), 82 + color: l.optional(l.string()), 83 + extensions: l.optional(l.array(l.string())), 84 + }), 85 + ) 86 + 87 + export { language }
+6
api/src/lexicons/sh/tangled/git/temp/listLanguages.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './listLanguages.defs.js' 6 + export * as $defs from './listLanguages.defs.js'
+34
api/src/lexicons/sh/tangled/git/temp/listTags.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.git.temp.listTags' 8 + 9 + export { $nsid } 10 + 11 + const main = l.query( 12 + $nsid, 13 + l.params({ 14 + repo: l.string({ format: 'at-uri' }), 15 + limit: l.optional( 16 + l.withDefault(l.integer({ minimum: 1, maximum: 100 }), 50), 17 + ), 18 + cursor: l.optional(l.string()), 19 + }), 20 + l.payload('*/*'), 21 + ['RepoNotFound', 'InvalidRequest'], 22 + ) 23 + export { main } 24 + 25 + export type $Params = l.InferMethodParams<typeof main> 26 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 27 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 28 + typeof main, 29 + B 30 + > 31 + 32 + export const $lxm = main.nsid, 33 + $params = main.parameters, 34 + $output = main.output
+6
api/src/lexicons/sh/tangled/git/temp/listTags.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './listTags.defs.js' 6 + export * as $defs from './listTags.defs.js'
+6
api/src/lexicons/sh/tangled/graph.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * as follow from './graph/follow.js' 6 + export * as vouch from './graph/vouch.js'
+41
api/src/lexicons/sh/tangled/graph/follow.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.graph.follow' 8 + 9 + export { $nsid } 10 + 11 + type Main = { 12 + $type: 'sh.tangled.graph.follow' 13 + subject: l.DidString 14 + createdAt: l.DatetimeString 15 + } 16 + 17 + export type { Main } 18 + 19 + const main = l.record<'tid', Main>( 20 + 'tid', 21 + $nsid, 22 + l.object({ 23 + subject: l.string({ format: 'did' }), 24 + createdAt: l.string({ format: 'datetime' }), 25 + }), 26 + ) 27 + 28 + export { main } 29 + 30 + export const $isTypeOf = /*#__PURE__*/ main.isTypeOf.bind(main), 31 + $build = /*#__PURE__*/ main.build.bind(main), 32 + $type = /*#__PURE__*/ main.$type 33 + export const $assert = /*#__PURE__*/ main.assert.bind(main), 34 + $check = /*#__PURE__*/ main.check.bind(main), 35 + $cast = /*#__PURE__*/ main.cast.bind(main), 36 + $ifMatches = /*#__PURE__*/ main.ifMatches.bind(main), 37 + $matches = /*#__PURE__*/ main.matches.bind(main), 38 + $parse = /*#__PURE__*/ main.parse.bind(main), 39 + $safeParse = /*#__PURE__*/ main.safeParse.bind(main), 40 + $validate = /*#__PURE__*/ main.validate.bind(main), 41 + $safeValidate = /*#__PURE__*/ main.safeValidate.bind(main)
+6
api/src/lexicons/sh/tangled/graph/follow.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './follow.defs.js' 6 + export * as $defs from './follow.defs.js'
+51
api/src/lexicons/sh/tangled/graph/vouch.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.graph.vouch' 8 + 9 + export { $nsid } 10 + 11 + type Main = { 12 + $type: 'sh.tangled.graph.vouch' 13 + 14 + /** 15 + * Whether this user is being vouched for or denounced 16 + */ 17 + kind: 'vouch' | 'denounce' 18 + 19 + /** 20 + * The reason for this vouch/denouncement 21 + */ 22 + reason?: string 23 + createdAt: l.DatetimeString 24 + } 25 + 26 + export type { Main } 27 + 28 + const main = l.record<'any', Main>( 29 + 'any', 30 + $nsid, 31 + l.object({ 32 + kind: l.withDefault(l.enum(['vouch', 'denounce']), 'vouch'), 33 + reason: l.optional(l.string({ maxGraphemes: 256, maxLength: 2560 })), 34 + createdAt: l.string({ format: 'datetime' }), 35 + }), 36 + ) 37 + 38 + export { main } 39 + 40 + export const $isTypeOf = /*#__PURE__*/ main.isTypeOf.bind(main), 41 + $build = /*#__PURE__*/ main.build.bind(main), 42 + $type = /*#__PURE__*/ main.$type 43 + export const $assert = /*#__PURE__*/ main.assert.bind(main), 44 + $check = /*#__PURE__*/ main.check.bind(main), 45 + $cast = /*#__PURE__*/ main.cast.bind(main), 46 + $ifMatches = /*#__PURE__*/ main.ifMatches.bind(main), 47 + $matches = /*#__PURE__*/ main.matches.bind(main), 48 + $parse = /*#__PURE__*/ main.parse.bind(main), 49 + $safeParse = /*#__PURE__*/ main.safeParse.bind(main), 50 + $validate = /*#__PURE__*/ main.validate.bind(main), 51 + $safeValidate = /*#__PURE__*/ main.safeValidate.bind(main)
+6
api/src/lexicons/sh/tangled/graph/vouch.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './vouch.defs.js' 6 + export * as $defs from './vouch.defs.js'
+34
api/src/lexicons/sh/tangled/knot.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.knot' 8 + 9 + export { $nsid } 10 + 11 + type Main = { $type: 'sh.tangled.knot'; createdAt: l.DatetimeString } 12 + 13 + export type { Main } 14 + 15 + const main = l.record<'any', Main>( 16 + 'any', 17 + $nsid, 18 + l.object({ createdAt: l.string({ format: 'datetime' }) }), 19 + ) 20 + 21 + export { main } 22 + 23 + export const $isTypeOf = /*#__PURE__*/ main.isTypeOf.bind(main), 24 + $build = /*#__PURE__*/ main.build.bind(main), 25 + $type = /*#__PURE__*/ main.$type 26 + export const $assert = /*#__PURE__*/ main.assert.bind(main), 27 + $check = /*#__PURE__*/ main.check.bind(main), 28 + $cast = /*#__PURE__*/ main.cast.bind(main), 29 + $ifMatches = /*#__PURE__*/ main.ifMatches.bind(main), 30 + $matches = /*#__PURE__*/ main.matches.bind(main), 31 + $parse = /*#__PURE__*/ main.parse.bind(main), 32 + $safeParse = /*#__PURE__*/ main.safeParse.bind(main), 33 + $validate = /*#__PURE__*/ main.validate.bind(main), 34 + $safeValidate = /*#__PURE__*/ main.safeValidate.bind(main)
+10
api/src/lexicons/sh/tangled/knot.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './knot.defs.js' 6 + export * as $defs from './knot.defs.js' 7 + export * as listKeys from './knot/listKeys.js' 8 + export * as member from './knot/member.js' 9 + export * as subscribeRepos from './knot/subscribeRepos.js' 10 + export * as version from './knot/version.js'
+70
api/src/lexicons/sh/tangled/knot/listKeys.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.knot.listKeys' 8 + 9 + export { $nsid } 10 + 11 + /** List all public keys stored in the knot server */ 12 + const main = l.query( 13 + $nsid, 14 + l.params({ 15 + limit: l.optional( 16 + l.withDefault(l.integer({ minimum: 1, maximum: 1000 }), 100), 17 + ), 18 + cursor: l.optional(l.string()), 19 + }), 20 + l.jsonPayload({ 21 + keys: l.array(l.ref<PublicKey>((() => publicKey) as any)), 22 + cursor: l.optional(l.string()), 23 + }), 24 + ['InternalServerError'], 25 + ) 26 + export { main } 27 + 28 + export type $Params = l.InferMethodParams<typeof main> 29 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 30 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 31 + typeof main, 32 + B 33 + > 34 + 35 + export const $lxm = main.nsid, 36 + $params = main.parameters, 37 + $output = main.output 38 + 39 + type PublicKey = { 40 + $type?: 'sh.tangled.knot.listKeys#publicKey' 41 + 42 + /** 43 + * DID associated with the public key 44 + */ 45 + did: l.DidString 46 + 47 + /** 48 + * Public key contents 49 + */ 50 + key: string 51 + 52 + /** 53 + * Key upload timestamp 54 + */ 55 + createdAt: l.DatetimeString 56 + } 57 + 58 + export type { PublicKey } 59 + 60 + const publicKey = l.typedObject<PublicKey>( 61 + $nsid, 62 + 'publicKey', 63 + l.object({ 64 + did: l.string({ format: 'did' }), 65 + key: l.string({ maxLength: 4096 }), 66 + createdAt: l.string({ format: 'datetime' }), 67 + }), 68 + ) 69 + 70 + export { publicKey }
+6
api/src/lexicons/sh/tangled/knot/listKeys.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './listKeys.defs.js' 6 + export * as $defs from './listKeys.defs.js'
+47
api/src/lexicons/sh/tangled/knot/member.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.knot.member' 8 + 9 + export { $nsid } 10 + 11 + type Main = { 12 + $type: 'sh.tangled.knot.member' 13 + subject: l.DidString 14 + 15 + /** 16 + * domain that this member now belongs to 17 + */ 18 + domain: string 19 + createdAt: l.DatetimeString 20 + } 21 + 22 + export type { Main } 23 + 24 + const main = l.record<'tid', Main>( 25 + 'tid', 26 + $nsid, 27 + l.object({ 28 + subject: l.string({ format: 'did' }), 29 + domain: l.string(), 30 + createdAt: l.string({ format: 'datetime' }), 31 + }), 32 + ) 33 + 34 + export { main } 35 + 36 + export const $isTypeOf = /*#__PURE__*/ main.isTypeOf.bind(main), 37 + $build = /*#__PURE__*/ main.build.bind(main), 38 + $type = /*#__PURE__*/ main.$type 39 + export const $assert = /*#__PURE__*/ main.assert.bind(main), 40 + $check = /*#__PURE__*/ main.check.bind(main), 41 + $cast = /*#__PURE__*/ main.cast.bind(main), 42 + $ifMatches = /*#__PURE__*/ main.ifMatches.bind(main), 43 + $matches = /*#__PURE__*/ main.matches.bind(main), 44 + $parse = /*#__PURE__*/ main.parse.bind(main), 45 + $safeParse = /*#__PURE__*/ main.safeParse.bind(main), 46 + $validate = /*#__PURE__*/ main.validate.bind(main), 47 + $safeValidate = /*#__PURE__*/ main.safeValidate.bind(main)
+6
api/src/lexicons/sh/tangled/knot/member.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './member.defs.js' 6 + export * as $defs from './member.defs.js'
+109
api/src/lexicons/sh/tangled/knot/subscribeRepos.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + import * as GitRefUpdate from '../git/refUpdate.defs.js' 7 + 8 + const $nsid = 'sh.tangled.knot.subscribeRepos' 9 + 10 + export { $nsid } 11 + 12 + /** Repository event stream, aka Firehose endpoint. Outputs repo commits with diff data, and identity update events, for all repositories on the current server. See the atproto specifications for details around stream sequencing, repo versioning, CAR diff format, and more. Public and does not require auth; implemented by PDS and Relay. */ 13 + const main = l.subscription( 14 + $nsid, 15 + l.params({ cursor: l.optional(l.integer()) }), 16 + l.typedUnion( 17 + [ 18 + l.typedRef<Identity>((() => identity) as any), 19 + l.typedRef<GitRefUpdate.Main>((() => GitRefUpdate.main) as any), 20 + ], 21 + false, 22 + ), 23 + ['FutureCursor', 'ConsumerTooSlow'], 24 + ) 25 + export { main } 26 + 27 + export type $Params = l.InferMethodParams<typeof main> 28 + export type $Message = l.InferSubscriptionMessage<typeof main> 29 + 30 + export const $lxm = main.nsid, 31 + $params = main.parameters, 32 + $message = main.message 33 + 34 + type Identity = { 35 + $type?: 'sh.tangled.knot.subscribeRepos#identity' 36 + 37 + /** 38 + * The stream sequence number of this message. 39 + */ 40 + seq: number 41 + 42 + /** 43 + * Repository DID identifier 44 + */ 45 + did: l.DidString 46 + time: l.DatetimeString 47 + } 48 + 49 + export type { Identity } 50 + 51 + const identity = l.typedObject<Identity>( 52 + $nsid, 53 + 'identity', 54 + l.object({ 55 + seq: l.integer(), 56 + did: l.string({ format: 'did' }), 57 + time: l.string({ format: 'datetime' }), 58 + }), 59 + ) 60 + 61 + export { identity } 62 + 63 + type GitSync1 = { 64 + $type?: 'sh.tangled.knot.subscribeRepos#gitSync1' 65 + 66 + /** 67 + * The stream sequence number of this message. 68 + */ 69 + seq: number 70 + 71 + /** 72 + * Repository DID identifier 73 + */ 74 + did: l.DidString 75 + } 76 + 77 + export type { GitSync1 } 78 + 79 + const gitSync1 = l.typedObject<GitSync1>( 80 + $nsid, 81 + 'gitSync1', 82 + l.object({ seq: l.integer(), did: l.string({ format: 'did' }) }), 83 + ) 84 + 85 + export { gitSync1 } 86 + 87 + type GitSync2 = { 88 + $type?: 'sh.tangled.knot.subscribeRepos#gitSync2' 89 + 90 + /** 91 + * The stream sequence number of this message. 92 + */ 93 + seq: number 94 + 95 + /** 96 + * Repository AT-URI identifier 97 + */ 98 + repo: l.AtUriString 99 + } 100 + 101 + export type { GitSync2 } 102 + 103 + const gitSync2 = l.typedObject<GitSync2>( 104 + $nsid, 105 + 'gitSync2', 106 + l.object({ seq: l.integer(), repo: l.string({ format: 'at-uri' }) }), 107 + ) 108 + 109 + export { gitSync2 }
+6
api/src/lexicons/sh/tangled/knot/subscribeRepos.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './subscribeRepos.defs.js' 6 + export * as $defs from './subscribeRepos.defs.js'
+24
api/src/lexicons/sh/tangled/knot/version.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.knot.version' 8 + 9 + export { $nsid } 10 + 11 + /** Get the version of a knot */ 12 + const main = l.query($nsid, l.params(), l.jsonPayload({ version: l.string() })) 13 + export { main } 14 + 15 + export type $Params = l.InferMethodParams<typeof main> 16 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 17 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 18 + typeof main, 19 + B 20 + > 21 + 22 + export const $lxm = main.nsid, 23 + $params = main.parameters, 24 + $output = main.output
+6
api/src/lexicons/sh/tangled/knot/version.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './version.defs.js' 6 + export * as $defs from './version.defs.js'
+6
api/src/lexicons/sh/tangled/label.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * as definition from './label/definition.js' 6 + export * as op from './label/op.js'
+102
api/src/lexicons/sh/tangled/label/definition.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.label.definition' 8 + 9 + export { $nsid } 10 + 11 + type Main = { 12 + $type: 'sh.tangled.label.definition' 13 + 14 + /** 15 + * The display name of this label. 16 + */ 17 + name: string 18 + 19 + /** 20 + * The type definition of this label. Appviews may allow sorting for certain types. 21 + */ 22 + valueType: ValueType 23 + 24 + /** 25 + * The areas of the repo this label may apply to, eg.: sh.tangled.repo.issue. Appviews may choose to respect this. 26 + */ 27 + scope: l.NsidString[] 28 + 29 + /** 30 + * The hex value for the background color for the label. Appviews may choose to respect this. 31 + */ 32 + color?: string 33 + createdAt: l.DatetimeString 34 + 35 + /** 36 + * Whether this label can be repeated for a given entity, eg.: [reviewer:foo, reviewer:bar] 37 + */ 38 + multiple?: boolean 39 + } 40 + 41 + export type { Main } 42 + 43 + const main = l.record<'any', Main>( 44 + 'any', 45 + $nsid, 46 + l.object({ 47 + name: l.string({ minGraphemes: 1, maxGraphemes: 40 }), 48 + valueType: l.ref<ValueType>((() => valueType) as any), 49 + scope: l.array(l.string({ format: 'nsid' })), 50 + color: l.optional(l.string()), 51 + createdAt: l.string({ format: 'datetime' }), 52 + multiple: l.optional(l.boolean()), 53 + }), 54 + ) 55 + 56 + export { main } 57 + 58 + export const $isTypeOf = /*#__PURE__*/ main.isTypeOf.bind(main), 59 + $build = /*#__PURE__*/ main.build.bind(main), 60 + $type = /*#__PURE__*/ main.$type 61 + export const $assert = /*#__PURE__*/ main.assert.bind(main), 62 + $check = /*#__PURE__*/ main.check.bind(main), 63 + $cast = /*#__PURE__*/ main.cast.bind(main), 64 + $ifMatches = /*#__PURE__*/ main.ifMatches.bind(main), 65 + $matches = /*#__PURE__*/ main.matches.bind(main), 66 + $parse = /*#__PURE__*/ main.parse.bind(main), 67 + $safeParse = /*#__PURE__*/ main.safeParse.bind(main), 68 + $validate = /*#__PURE__*/ main.validate.bind(main), 69 + $safeValidate = /*#__PURE__*/ main.safeValidate.bind(main) 70 + 71 + type ValueType = { 72 + $type?: 'sh.tangled.label.definition#valueType' 73 + 74 + /** 75 + * The concrete type of this label's value. 76 + */ 77 + type: 'null' | 'boolean' | 'integer' | 'string' 78 + 79 + /** 80 + * An optional constraint that can be applied on string concrete types. 81 + */ 82 + format: 'any' | 'did' | 'nsid' 83 + 84 + /** 85 + * Closed set of values that this label can take. 86 + */ 87 + enum?: string[] 88 + } 89 + 90 + export type { ValueType } 91 + 92 + const valueType = l.typedObject<ValueType>( 93 + $nsid, 94 + 'valueType', 95 + l.object({ 96 + type: l.enum(['null', 'boolean', 'integer', 'string']), 97 + format: l.enum(['any', 'did', 'nsid']), 98 + enum: l.optional(l.array(l.string())), 99 + }), 100 + ) 101 + 102 + export { valueType }
+6
api/src/lexicons/sh/tangled/label/definition.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './definition.defs.js' 6 + export * as $defs from './definition.defs.js'
+73
api/src/lexicons/sh/tangled/label/op.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.label.op' 8 + 9 + export { $nsid } 10 + 11 + type Main = { 12 + $type: 'sh.tangled.label.op' 13 + 14 + /** 15 + * The subject (task, pull or discussion) of this label. Appviews may apply a `scope` check and refuse this op. 16 + */ 17 + subject: l.AtUriString 18 + performedAt: l.DatetimeString 19 + add: Operand[] 20 + delete: Operand[] 21 + } 22 + 23 + export type { Main } 24 + 25 + const main = l.record<'tid', Main>( 26 + 'tid', 27 + $nsid, 28 + l.object({ 29 + subject: l.string({ format: 'at-uri' }), 30 + performedAt: l.string({ format: 'datetime' }), 31 + add: l.array(l.ref<Operand>((() => operand) as any)), 32 + delete: l.array(l.ref<Operand>((() => operand) as any)), 33 + }), 34 + ) 35 + 36 + export { main } 37 + 38 + export const $isTypeOf = /*#__PURE__*/ main.isTypeOf.bind(main), 39 + $build = /*#__PURE__*/ main.build.bind(main), 40 + $type = /*#__PURE__*/ main.$type 41 + export const $assert = /*#__PURE__*/ main.assert.bind(main), 42 + $check = /*#__PURE__*/ main.check.bind(main), 43 + $cast = /*#__PURE__*/ main.cast.bind(main), 44 + $ifMatches = /*#__PURE__*/ main.ifMatches.bind(main), 45 + $matches = /*#__PURE__*/ main.matches.bind(main), 46 + $parse = /*#__PURE__*/ main.parse.bind(main), 47 + $safeParse = /*#__PURE__*/ main.safeParse.bind(main), 48 + $validate = /*#__PURE__*/ main.validate.bind(main), 49 + $safeValidate = /*#__PURE__*/ main.safeValidate.bind(main) 50 + 51 + type Operand = { 52 + $type?: 'sh.tangled.label.op#operand' 53 + 54 + /** 55 + * ATURI to the label definition 56 + */ 57 + key: l.AtUriString 58 + 59 + /** 60 + * Stringified value of the label. This is first unstringed by appviews and then interpreted as a concrete value. 61 + */ 62 + value: string 63 + } 64 + 65 + export type { Operand } 66 + 67 + const operand = l.typedObject<Operand>( 68 + $nsid, 69 + 'operand', 70 + l.object({ key: l.string({ format: 'at-uri' }), value: l.string() }), 71 + ) 72 + 73 + export { operand }
+6
api/src/lexicons/sh/tangled/label/op.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './op.defs.js' 6 + export * as $defs from './op.defs.js'
+29
api/src/lexicons/sh/tangled/owner.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.owner' 8 + 9 + export { $nsid } 10 + 11 + /** Get the owner of a service */ 12 + const main = l.query( 13 + $nsid, 14 + l.params(), 15 + l.jsonPayload({ owner: l.string({ format: 'did' }) }), 16 + ['OwnerNotFound'], 17 + ) 18 + export { main } 19 + 20 + export type $Params = l.InferMethodParams<typeof main> 21 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 22 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 23 + typeof main, 24 + B 25 + > 26 + 27 + export const $lxm = main.nsid, 28 + $params = main.parameters, 29 + $output = main.output
+6
api/src/lexicons/sh/tangled/owner.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './owner.defs.js' 6 + export * as $defs from './owner.defs.js'
+210
api/src/lexicons/sh/tangled/pipeline.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.pipeline' 8 + 9 + export { $nsid } 10 + 11 + type Main = { 12 + $type: 'sh.tangled.pipeline' 13 + triggerMetadata: TriggerMetadata 14 + workflows: Workflow[] 15 + } 16 + 17 + export type { Main } 18 + 19 + const main = l.record<'tid', Main>( 20 + 'tid', 21 + $nsid, 22 + l.object({ 23 + triggerMetadata: l.ref<TriggerMetadata>((() => triggerMetadata) as any), 24 + workflows: l.array(l.ref<Workflow>((() => workflow) as any)), 25 + }), 26 + ) 27 + 28 + export { main } 29 + 30 + export const $isTypeOf = /*#__PURE__*/ main.isTypeOf.bind(main), 31 + $build = /*#__PURE__*/ main.build.bind(main), 32 + $type = /*#__PURE__*/ main.$type 33 + export const $assert = /*#__PURE__*/ main.assert.bind(main), 34 + $check = /*#__PURE__*/ main.check.bind(main), 35 + $cast = /*#__PURE__*/ main.cast.bind(main), 36 + $ifMatches = /*#__PURE__*/ main.ifMatches.bind(main), 37 + $matches = /*#__PURE__*/ main.matches.bind(main), 38 + $parse = /*#__PURE__*/ main.parse.bind(main), 39 + $safeParse = /*#__PURE__*/ main.safeParse.bind(main), 40 + $validate = /*#__PURE__*/ main.validate.bind(main), 41 + $safeValidate = /*#__PURE__*/ main.safeValidate.bind(main) 42 + 43 + type TriggerMetadata = { 44 + $type?: 'sh.tangled.pipeline#triggerMetadata' 45 + kind: 'push' | 'pull_request' | 'manual' 46 + repo: TriggerRepo 47 + push?: PushTriggerData 48 + pullRequest?: PullRequestTriggerData 49 + manual?: ManualTriggerData 50 + } 51 + 52 + export type { TriggerMetadata } 53 + 54 + const triggerMetadata = l.typedObject<TriggerMetadata>( 55 + $nsid, 56 + 'triggerMetadata', 57 + l.object({ 58 + kind: l.enum(['push', 'pull_request', 'manual']), 59 + repo: l.ref<TriggerRepo>((() => triggerRepo) as any), 60 + push: l.optional(l.ref<PushTriggerData>((() => pushTriggerData) as any)), 61 + pullRequest: l.optional( 62 + l.ref<PullRequestTriggerData>((() => pullRequestTriggerData) as any), 63 + ), 64 + manual: l.optional( 65 + l.ref<ManualTriggerData>((() => manualTriggerData) as any), 66 + ), 67 + }), 68 + ) 69 + 70 + export { triggerMetadata } 71 + 72 + type TriggerRepo = { 73 + $type?: 'sh.tangled.pipeline#triggerRepo' 74 + knot: string 75 + did: l.DidString 76 + 77 + /** 78 + * DID of the repo itself 79 + */ 80 + repoDid?: l.DidString 81 + repo?: string 82 + defaultBranch: string 83 + } 84 + 85 + export type { TriggerRepo } 86 + 87 + const triggerRepo = l.typedObject<TriggerRepo>( 88 + $nsid, 89 + 'triggerRepo', 90 + l.object({ 91 + knot: l.string(), 92 + did: l.string({ format: 'did' }), 93 + repoDid: l.optional(l.string({ format: 'did' })), 94 + repo: l.optional(l.string()), 95 + defaultBranch: l.string(), 96 + }), 97 + ) 98 + 99 + export { triggerRepo } 100 + 101 + type PushTriggerData = { 102 + $type?: 'sh.tangled.pipeline#pushTriggerData' 103 + ref: string 104 + newSha: string 105 + oldSha: string 106 + } 107 + 108 + export type { PushTriggerData } 109 + 110 + const pushTriggerData = l.typedObject<PushTriggerData>( 111 + $nsid, 112 + 'pushTriggerData', 113 + l.object({ 114 + ref: l.string(), 115 + newSha: l.string({ minLength: 40, maxLength: 40 }), 116 + oldSha: l.string({ minLength: 40, maxLength: 40 }), 117 + }), 118 + ) 119 + 120 + export { pushTriggerData } 121 + 122 + type PullRequestTriggerData = { 123 + $type?: 'sh.tangled.pipeline#pullRequestTriggerData' 124 + sourceBranch: string 125 + targetBranch: string 126 + sourceSha: string 127 + action: string 128 + } 129 + 130 + export type { PullRequestTriggerData } 131 + 132 + const pullRequestTriggerData = l.typedObject<PullRequestTriggerData>( 133 + $nsid, 134 + 'pullRequestTriggerData', 135 + l.object({ 136 + sourceBranch: l.string(), 137 + targetBranch: l.string(), 138 + sourceSha: l.string({ minLength: 40, maxLength: 40 }), 139 + action: l.string(), 140 + }), 141 + ) 142 + 143 + export { pullRequestTriggerData } 144 + 145 + type ManualTriggerData = { 146 + $type?: 'sh.tangled.pipeline#manualTriggerData' 147 + inputs?: Pair[] 148 + } 149 + 150 + export type { ManualTriggerData } 151 + 152 + const manualTriggerData = l.typedObject<ManualTriggerData>( 153 + $nsid, 154 + 'manualTriggerData', 155 + l.object({ inputs: l.optional(l.array(l.ref<Pair>((() => pair) as any))) }), 156 + ) 157 + 158 + export { manualTriggerData } 159 + 160 + type Workflow = { 161 + $type?: 'sh.tangled.pipeline#workflow' 162 + name: string 163 + engine: string 164 + clone: CloneOpts 165 + raw: string 166 + } 167 + 168 + export type { Workflow } 169 + 170 + const workflow = l.typedObject<Workflow>( 171 + $nsid, 172 + 'workflow', 173 + l.object({ 174 + name: l.string(), 175 + engine: l.string(), 176 + clone: l.ref<CloneOpts>((() => cloneOpts) as any), 177 + raw: l.string(), 178 + }), 179 + ) 180 + 181 + export { workflow } 182 + 183 + type CloneOpts = { 184 + $type?: 'sh.tangled.pipeline#cloneOpts' 185 + skip: boolean 186 + depth: number 187 + submodules: boolean 188 + } 189 + 190 + export type { CloneOpts } 191 + 192 + const cloneOpts = l.typedObject<CloneOpts>( 193 + $nsid, 194 + 'cloneOpts', 195 + l.object({ skip: l.boolean(), depth: l.integer(), submodules: l.boolean() }), 196 + ) 197 + 198 + export { cloneOpts } 199 + 200 + type Pair = { $type?: 'sh.tangled.pipeline#pair'; key: string; value: string } 201 + 202 + export type { Pair } 203 + 204 + const pair = l.typedObject<Pair>( 205 + $nsid, 206 + 'pair', 207 + l.object({ key: l.string(), value: l.string() }), 208 + ) 209 + 210 + export { pair }
+8
api/src/lexicons/sh/tangled/pipeline.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * as cancelPipeline from './pipeline/cancelPipeline.js' 6 + export * from './pipeline.defs.js' 7 + export * as $defs from './pipeline.defs.js' 8 + export * as status from './pipeline/status.js'
+39
api/src/lexicons/sh/tangled/pipeline/cancelPipeline.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.pipeline.cancelPipeline' 8 + 9 + export { $nsid } 10 + 11 + /** Cancel a running pipeline */ 12 + const main = l.procedure( 13 + $nsid, 14 + l.params(), 15 + l.jsonPayload({ 16 + repo: l.string({ format: 'at-uri' }), 17 + pipeline: l.string({ format: 'at-uri' }), 18 + workflow: l.string(), 19 + }), 20 + l.payload(), 21 + ) 22 + export { main } 23 + 24 + export type $Params = l.InferMethodParams<typeof main> 25 + export type $Input<B = l.BinaryData> = l.InferMethodInput<typeof main, B> 26 + export type $InputBody<B = l.BinaryData> = l.InferMethodInputBody< 27 + typeof main, 28 + B 29 + > 30 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 31 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 32 + typeof main, 33 + B 34 + > 35 + 36 + export const $lxm = main.nsid, 37 + $params = main.parameters, 38 + $input = main.input, 39 + $output = main.output
+6
api/src/lexicons/sh/tangled/pipeline/cancelPipeline.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './cancelPipeline.defs.js' 6 + export * as $defs from './cancelPipeline.defs.js'
+80
api/src/lexicons/sh/tangled/pipeline/status.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.pipeline.status' 8 + 9 + export { $nsid } 10 + 11 + type Main = { 12 + $type: 'sh.tangled.pipeline.status' 13 + 14 + /** 15 + * ATURI of the pipeline 16 + */ 17 + pipeline: l.AtUriString 18 + 19 + /** 20 + * name of the workflow within this pipeline 21 + */ 22 + workflow: l.AtUriString 23 + 24 + /** 25 + * status of the workflow 26 + */ 27 + status: 'pending' | 'running' | 'failed' | 'timeout' | 'cancelled' | 'success' 28 + 29 + /** 30 + * time of creation of this status update 31 + */ 32 + createdAt: l.DatetimeString 33 + 34 + /** 35 + * error message if failed 36 + */ 37 + error?: string 38 + 39 + /** 40 + * exit code if failed 41 + */ 42 + exitCode?: number 43 + } 44 + 45 + export type { Main } 46 + 47 + const main = l.record<'tid', Main>( 48 + 'tid', 49 + $nsid, 50 + l.object({ 51 + pipeline: l.string({ format: 'at-uri' }), 52 + workflow: l.string({ format: 'at-uri' }), 53 + status: l.enum([ 54 + 'pending', 55 + 'running', 56 + 'failed', 57 + 'timeout', 58 + 'cancelled', 59 + 'success', 60 + ]), 61 + createdAt: l.string({ format: 'datetime' }), 62 + error: l.optional(l.string()), 63 + exitCode: l.optional(l.integer()), 64 + }), 65 + ) 66 + 67 + export { main } 68 + 69 + export const $isTypeOf = /*#__PURE__*/ main.isTypeOf.bind(main), 70 + $build = /*#__PURE__*/ main.build.bind(main), 71 + $type = /*#__PURE__*/ main.$type 72 + export const $assert = /*#__PURE__*/ main.assert.bind(main), 73 + $check = /*#__PURE__*/ main.check.bind(main), 74 + $cast = /*#__PURE__*/ main.cast.bind(main), 75 + $ifMatches = /*#__PURE__*/ main.ifMatches.bind(main), 76 + $matches = /*#__PURE__*/ main.matches.bind(main), 77 + $parse = /*#__PURE__*/ main.parse.bind(main), 78 + $safeParse = /*#__PURE__*/ main.safeParse.bind(main), 79 + $validate = /*#__PURE__*/ main.validate.bind(main), 80 + $safeValidate = /*#__PURE__*/ main.safeValidate.bind(main)
+6
api/src/lexicons/sh/tangled/pipeline/status.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './status.defs.js' 6 + export * as $defs from './status.defs.js'
+55
api/src/lexicons/sh/tangled/publicKey.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.publicKey' 8 + 9 + export { $nsid } 10 + 11 + type Main = { 12 + $type: 'sh.tangled.publicKey' 13 + 14 + /** 15 + * public key contents 16 + */ 17 + key: string 18 + 19 + /** 20 + * human-readable name for this key 21 + */ 22 + name: string 23 + 24 + /** 25 + * key upload timestamp 26 + */ 27 + createdAt: l.DatetimeString 28 + } 29 + 30 + export type { Main } 31 + 32 + const main = l.record<'tid', Main>( 33 + 'tid', 34 + $nsid, 35 + l.object({ 36 + key: l.string({ maxLength: 4096 }), 37 + name: l.string(), 38 + createdAt: l.string({ format: 'datetime' }), 39 + }), 40 + ) 41 + 42 + export { main } 43 + 44 + export const $isTypeOf = /*#__PURE__*/ main.isTypeOf.bind(main), 45 + $build = /*#__PURE__*/ main.build.bind(main), 46 + $type = /*#__PURE__*/ main.$type 47 + export const $assert = /*#__PURE__*/ main.assert.bind(main), 48 + $check = /*#__PURE__*/ main.check.bind(main), 49 + $cast = /*#__PURE__*/ main.cast.bind(main), 50 + $ifMatches = /*#__PURE__*/ main.ifMatches.bind(main), 51 + $matches = /*#__PURE__*/ main.matches.bind(main), 52 + $parse = /*#__PURE__*/ main.parse.bind(main), 53 + $safeParse = /*#__PURE__*/ main.safeParse.bind(main), 54 + $validate = /*#__PURE__*/ main.validate.bind(main), 55 + $safeValidate = /*#__PURE__*/ main.safeValidate.bind(main)
+6
api/src/lexicons/sh/tangled/publicKey.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './publicKey.defs.js' 6 + export * as $defs from './publicKey.defs.js'
+91
api/src/lexicons/sh/tangled/repo.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo' 8 + 9 + export { $nsid } 10 + 11 + type Main = { 12 + $type: 'sh.tangled.repo' 13 + 14 + /** 15 + * name of the repo 16 + */ 17 + name: string 18 + 19 + /** 20 + * knot where the repo was created 21 + */ 22 + knot: string 23 + 24 + /** 25 + * CI runner to send jobs to and receive results from 26 + */ 27 + spindle?: string 28 + description?: string 29 + 30 + /** 31 + * Any URI related to the repo 32 + */ 33 + website?: l.UriString 34 + 35 + /** 36 + * Topics related to the repo 37 + */ 38 + topics?: string[] 39 + 40 + /** 41 + * source of the repo 42 + */ 43 + source?: l.UriString 44 + 45 + /** 46 + * List of labels that this repo subscribes to 47 + */ 48 + labels?: l.AtUriString[] 49 + 50 + /** 51 + * DID of the repo itself, if assigned 52 + */ 53 + repoDid?: l.DidString 54 + createdAt: l.DatetimeString 55 + } 56 + 57 + export type { Main } 58 + 59 + const main = l.record<'tid', Main>( 60 + 'tid', 61 + $nsid, 62 + l.object({ 63 + name: l.string(), 64 + knot: l.string(), 65 + spindle: l.optional(l.string()), 66 + description: l.optional(l.string({ minGraphemes: 1, maxGraphemes: 140 })), 67 + website: l.optional(l.string({ format: 'uri' })), 68 + topics: l.optional( 69 + l.array(l.string({ minLength: 1, maxLength: 50 }), { maxLength: 50 }), 70 + ), 71 + source: l.optional(l.string({ format: 'uri' })), 72 + labels: l.optional(l.array(l.string({ format: 'at-uri' }))), 73 + repoDid: l.optional(l.string({ format: 'did' })), 74 + createdAt: l.string({ format: 'datetime' }), 75 + }), 76 + ) 77 + 78 + export { main } 79 + 80 + export const $isTypeOf = /*#__PURE__*/ main.isTypeOf.bind(main), 81 + $build = /*#__PURE__*/ main.build.bind(main), 82 + $type = /*#__PURE__*/ main.$type 83 + export const $assert = /*#__PURE__*/ main.assert.bind(main), 84 + $check = /*#__PURE__*/ main.check.bind(main), 85 + $cast = /*#__PURE__*/ main.cast.bind(main), 86 + $ifMatches = /*#__PURE__*/ main.ifMatches.bind(main), 87 + $matches = /*#__PURE__*/ main.matches.bind(main), 88 + $parse = /*#__PURE__*/ main.parse.bind(main), 89 + $safeParse = /*#__PURE__*/ main.safeParse.bind(main), 90 + $validate = /*#__PURE__*/ main.validate.bind(main), 91 + $safeValidate = /*#__PURE__*/ main.safeValidate.bind(main)
+34
api/src/lexicons/sh/tangled/repo.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * as issue from './repo/issue.js' 6 + export * as pull from './repo/pull.js' 7 + export * as addSecret from './repo/addSecret.js' 8 + export * as archive from './repo/archive.js' 9 + export * as artifact from './repo/artifact.js' 10 + export * as blob from './repo/blob.js' 11 + export * as branch from './repo/branch.js' 12 + export * as branches from './repo/branches.js' 13 + export * as collaborator from './repo/collaborator.js' 14 + export * as compare from './repo/compare.js' 15 + export * as create from './repo/create.js' 16 + export * as setDefaultBranch from './repo/setDefaultBranch.js' 17 + export * as 'delete' from './repo/delete.js' 18 + export * as deleteBranch from './repo/deleteBranch.js' 19 + export * as diff from './repo/diff.js' 20 + export * as forkStatus from './repo/forkStatus.js' 21 + export * as forkSync from './repo/forkSync.js' 22 + export * as getDefaultBranch from './repo/getDefaultBranch.js' 23 + export * as hiddenRef from './repo/hiddenRef.js' 24 + export * as languages from './repo/languages.js' 25 + export * as listSecrets from './repo/listSecrets.js' 26 + export * as log from './repo/log.js' 27 + export * as merge from './repo/merge.js' 28 + export * as mergeCheck from './repo/mergeCheck.js' 29 + export * as removeSecret from './repo/removeSecret.js' 30 + export * from './repo.defs.js' 31 + export * as $defs from './repo.defs.js' 32 + export * as tag from './repo/tag.js' 33 + export * as tags from './repo/tags.js' 34 + export * as tree from './repo/tree.js'
+39
api/src/lexicons/sh/tangled/repo/addSecret.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo.addSecret' 8 + 9 + export { $nsid } 10 + 11 + /** Add a CI secret */ 12 + const main = l.procedure( 13 + $nsid, 14 + l.params(), 15 + l.jsonPayload({ 16 + repo: l.string({ format: 'at-uri' }), 17 + key: l.string({ maxLength: 50, minLength: 1 }), 18 + value: l.string({ maxLength: 200, minLength: 1 }), 19 + }), 20 + l.payload(), 21 + ) 22 + export { main } 23 + 24 + export type $Params = l.InferMethodParams<typeof main> 25 + export type $Input<B = l.BinaryData> = l.InferMethodInput<typeof main, B> 26 + export type $InputBody<B = l.BinaryData> = l.InferMethodInputBody< 27 + typeof main, 28 + B 29 + > 30 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 31 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 32 + typeof main, 33 + B 34 + > 35 + 36 + export const $lxm = main.nsid, 37 + $params = main.parameters, 38 + $input = main.input, 39 + $output = main.output
+6
api/src/lexicons/sh/tangled/repo/addSecret.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './addSecret.defs.js' 6 + export * as $defs from './addSecret.defs.js'
+40
api/src/lexicons/sh/tangled/repo/archive.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo.archive' 8 + 9 + export { $nsid } 10 + 11 + const main = l.query( 12 + $nsid, 13 + l.params({ 14 + repo: l.string(), 15 + ref: l.string(), 16 + format: l.optional( 17 + l.withDefault( 18 + l.enum(['tar', 'zip', 'tar.gz', 'tar.bz2', 'tar.xz']), 19 + 'tar.gz', 20 + ), 21 + ), 22 + prefix: l.optional(l.string()), 23 + }), 24 + l.payload('*/*'), 25 + ['RepoNotFound', 'RefNotFound', 'InvalidRequest', 'ArchiveError'], 26 + ) 27 + export { main } 28 + 29 + export type $Params = l.InferMethodParams<typeof main> 30 + /** Binary archive data */ 31 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 32 + /** Binary archive data */ 33 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 34 + typeof main, 35 + B 36 + > 37 + 38 + export const $lxm = main.nsid, 39 + $params = main.parameters, 40 + $output = main.output
+6
api/src/lexicons/sh/tangled/repo/archive.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './archive.defs.js' 6 + export * as $defs from './archive.defs.js'
+69
api/src/lexicons/sh/tangled/repo/artifact.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo.artifact' 8 + 9 + export { $nsid } 10 + 11 + type Main = { 12 + $type: 'sh.tangled.repo.artifact' 13 + 14 + /** 15 + * name of the artifact 16 + */ 17 + name: string 18 + 19 + /** 20 + * repo that this artifact is being uploaded to 21 + */ 22 + repo?: l.AtUriString 23 + repoDid?: l.DidString 24 + 25 + /** 26 + * hash of the tag object that this artifact is attached to (only annotated tags are supported) 27 + */ 28 + tag: Uint8Array 29 + 30 + /** 31 + * time of creation of this artifact 32 + */ 33 + createdAt: l.DatetimeString 34 + 35 + /** 36 + * the artifact 37 + */ 38 + artifact: l.BlobRef 39 + } 40 + 41 + export type { Main } 42 + 43 + const main = l.record<'tid', Main>( 44 + 'tid', 45 + $nsid, 46 + l.object({ 47 + name: l.string(), 48 + repo: l.optional(l.string({ format: 'at-uri' })), 49 + repoDid: l.optional(l.string({ format: 'did' })), 50 + tag: l.bytes({ minLength: 20, maxLength: 20 }), 51 + createdAt: l.string({ format: 'datetime' }), 52 + artifact: l.blob({ accept: ['*/*'], maxSize: 52428800 }), 53 + }), 54 + ) 55 + 56 + export { main } 57 + 58 + export const $isTypeOf = /*#__PURE__*/ main.isTypeOf.bind(main), 59 + $build = /*#__PURE__*/ main.build.bind(main), 60 + $type = /*#__PURE__*/ main.$type 61 + export const $assert = /*#__PURE__*/ main.assert.bind(main), 62 + $check = /*#__PURE__*/ main.check.bind(main), 63 + $cast = /*#__PURE__*/ main.cast.bind(main), 64 + $ifMatches = /*#__PURE__*/ main.ifMatches.bind(main), 65 + $matches = /*#__PURE__*/ main.matches.bind(main), 66 + $parse = /*#__PURE__*/ main.parse.bind(main), 67 + $safeParse = /*#__PURE__*/ main.safeParse.bind(main), 68 + $validate = /*#__PURE__*/ main.validate.bind(main), 69 + $safeValidate = /*#__PURE__*/ main.safeValidate.bind(main)
+6
api/src/lexicons/sh/tangled/repo/artifact.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './artifact.defs.js' 6 + export * as $defs from './artifact.defs.js'
+145
api/src/lexicons/sh/tangled/repo/blob.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo.blob' 8 + 9 + export { $nsid } 10 + 11 + const main = l.query( 12 + $nsid, 13 + l.params({ 14 + repo: l.string(), 15 + ref: l.string(), 16 + path: l.string(), 17 + raw: l.optional(l.withDefault(l.boolean(), false)), 18 + }), 19 + l.jsonPayload({ 20 + ref: l.string(), 21 + path: l.string(), 22 + content: l.optional(l.string()), 23 + encoding: l.optional(l.enum(['utf-8', 'base64'])), 24 + size: l.optional(l.integer()), 25 + isBinary: l.optional(l.boolean()), 26 + mimeType: l.optional(l.string()), 27 + submodule: l.optional(l.ref<Submodule>((() => submodule) as any)), 28 + lastCommit: l.optional(l.ref<LastCommit>((() => lastCommit) as any)), 29 + fileTooLarge: l.optional(l.boolean()), 30 + }), 31 + ['RepoNotFound', 'RefNotFound', 'FileNotFound', 'InvalidRequest'], 32 + ) 33 + export { main } 34 + 35 + export type $Params = l.InferMethodParams<typeof main> 36 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 37 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 38 + typeof main, 39 + B 40 + > 41 + 42 + export const $lxm = main.nsid, 43 + $params = main.parameters, 44 + $output = main.output 45 + 46 + type LastCommit = { 47 + $type?: 'sh.tangled.repo.blob#lastCommit' 48 + 49 + /** 50 + * Commit hash 51 + */ 52 + hash: string 53 + 54 + /** 55 + * Commit message 56 + */ 57 + message: string 58 + author?: Signature 59 + 60 + /** 61 + * Commit timestamp 62 + */ 63 + when: l.DatetimeString 64 + } 65 + 66 + export type { LastCommit } 67 + 68 + const lastCommit = l.typedObject<LastCommit>( 69 + $nsid, 70 + 'lastCommit', 71 + l.object({ 72 + hash: l.string(), 73 + message: l.string(), 74 + author: l.optional(l.ref<Signature>((() => signature) as any)), 75 + when: l.string({ format: 'datetime' }), 76 + }), 77 + ) 78 + 79 + export { lastCommit } 80 + 81 + type Signature = { 82 + $type?: 'sh.tangled.repo.blob#signature' 83 + 84 + /** 85 + * Author name 86 + */ 87 + name: string 88 + 89 + /** 90 + * Author email 91 + */ 92 + email: string 93 + 94 + /** 95 + * Author timestamp 96 + */ 97 + when: l.DatetimeString 98 + } 99 + 100 + export type { Signature } 101 + 102 + const signature = l.typedObject<Signature>( 103 + $nsid, 104 + 'signature', 105 + l.object({ 106 + name: l.string(), 107 + email: l.string(), 108 + when: l.string({ format: 'datetime' }), 109 + }), 110 + ) 111 + 112 + export { signature } 113 + 114 + type Submodule = { 115 + $type?: 'sh.tangled.repo.blob#submodule' 116 + 117 + /** 118 + * Submodule name 119 + */ 120 + name: string 121 + 122 + /** 123 + * Submodule repository URL 124 + */ 125 + url: string 126 + 127 + /** 128 + * Branch to track in the submodule 129 + */ 130 + branch?: string 131 + } 132 + 133 + export type { Submodule } 134 + 135 + const submodule = l.typedObject<Submodule>( 136 + $nsid, 137 + 'submodule', 138 + l.object({ 139 + name: l.string(), 140 + url: l.string(), 141 + branch: l.optional(l.string()), 142 + }), 143 + ) 144 + 145 + export { submodule }
+6
api/src/lexicons/sh/tangled/repo/blob.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './blob.defs.js' 6 + export * as $defs from './blob.defs.js'
+69
api/src/lexicons/sh/tangled/repo/branch.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo.branch' 8 + 9 + export { $nsid } 10 + 11 + const main = l.query( 12 + $nsid, 13 + l.params({ repo: l.string(), name: l.string() }), 14 + l.jsonPayload({ 15 + name: l.string(), 16 + hash: l.string(), 17 + shortHash: l.optional(l.string()), 18 + when: l.string({ format: 'datetime' }), 19 + message: l.optional(l.string()), 20 + author: l.optional(l.ref<Signature>((() => signature) as any)), 21 + isDefault: l.optional(l.boolean()), 22 + }), 23 + ['RepoNotFound', 'BranchNotFound', 'InvalidRequest'], 24 + ) 25 + export { main } 26 + 27 + export type $Params = l.InferMethodParams<typeof main> 28 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 29 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 30 + typeof main, 31 + B 32 + > 33 + 34 + export const $lxm = main.nsid, 35 + $params = main.parameters, 36 + $output = main.output 37 + 38 + type Signature = { 39 + $type?: 'sh.tangled.repo.branch#signature' 40 + 41 + /** 42 + * Author name 43 + */ 44 + name: string 45 + 46 + /** 47 + * Author email 48 + */ 49 + email: string 50 + 51 + /** 52 + * Author timestamp 53 + */ 54 + when: l.DatetimeString 55 + } 56 + 57 + export type { Signature } 58 + 59 + const signature = l.typedObject<Signature>( 60 + $nsid, 61 + 'signature', 62 + l.object({ 63 + name: l.string(), 64 + email: l.string(), 65 + when: l.string({ format: 'datetime' }), 66 + }), 67 + ) 68 + 69 + export { signature }
+6
api/src/lexicons/sh/tangled/repo/branch.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './branch.defs.js' 6 + export * as $defs from './branch.defs.js'
+34
api/src/lexicons/sh/tangled/repo/branches.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo.branches' 8 + 9 + export { $nsid } 10 + 11 + const main = l.query( 12 + $nsid, 13 + l.params({ 14 + repo: l.string(), 15 + limit: l.optional( 16 + l.withDefault(l.integer({ minimum: 1, maximum: 100 }), 50), 17 + ), 18 + cursor: l.optional(l.string()), 19 + }), 20 + l.payload('*/*'), 21 + ['RepoNotFound', 'InvalidRequest'], 22 + ) 23 + export { main } 24 + 25 + export type $Params = l.InferMethodParams<typeof main> 26 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 27 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 28 + typeof main, 29 + B 30 + > 31 + 32 + export const $lxm = main.nsid, 33 + $params = main.parameters, 34 + $output = main.output
+6
api/src/lexicons/sh/tangled/repo/branches.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './branches.defs.js' 6 + export * as $defs from './branches.defs.js'
+49
api/src/lexicons/sh/tangled/repo/collaborator.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo.collaborator' 8 + 9 + export { $nsid } 10 + 11 + type Main = { 12 + $type: 'sh.tangled.repo.collaborator' 13 + subject: l.DidString 14 + 15 + /** 16 + * repo to add this user to 17 + */ 18 + repo?: l.AtUriString 19 + repoDid?: l.DidString 20 + createdAt: l.DatetimeString 21 + } 22 + 23 + export type { Main } 24 + 25 + const main = l.record<'tid', Main>( 26 + 'tid', 27 + $nsid, 28 + l.object({ 29 + subject: l.string({ format: 'did' }), 30 + repo: l.optional(l.string({ format: 'at-uri' })), 31 + repoDid: l.optional(l.string({ format: 'did' })), 32 + createdAt: l.string({ format: 'datetime' }), 33 + }), 34 + ) 35 + 36 + export { main } 37 + 38 + export const $isTypeOf = /*#__PURE__*/ main.isTypeOf.bind(main), 39 + $build = /*#__PURE__*/ main.build.bind(main), 40 + $type = /*#__PURE__*/ main.$type 41 + export const $assert = /*#__PURE__*/ main.assert.bind(main), 42 + $check = /*#__PURE__*/ main.check.bind(main), 43 + $cast = /*#__PURE__*/ main.cast.bind(main), 44 + $ifMatches = /*#__PURE__*/ main.ifMatches.bind(main), 45 + $matches = /*#__PURE__*/ main.matches.bind(main), 46 + $parse = /*#__PURE__*/ main.parse.bind(main), 47 + $safeParse = /*#__PURE__*/ main.safeParse.bind(main), 48 + $validate = /*#__PURE__*/ main.validate.bind(main), 49 + $safeValidate = /*#__PURE__*/ main.safeValidate.bind(main)
+6
api/src/lexicons/sh/tangled/repo/collaborator.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './collaborator.defs.js' 6 + export * as $defs from './collaborator.defs.js'
+30
api/src/lexicons/sh/tangled/repo/compare.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo.compare' 8 + 9 + export { $nsid } 10 + 11 + const main = l.query( 12 + $nsid, 13 + l.params({ repo: l.string(), rev1: l.string(), rev2: l.string() }), 14 + l.payload('*/*'), 15 + ['RepoNotFound', 'RevisionNotFound', 'InvalidRequest', 'CompareError'], 16 + ) 17 + export { main } 18 + 19 + export type $Params = l.InferMethodParams<typeof main> 20 + /** Compare output in application/json */ 21 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 22 + /** Compare output in application/json */ 23 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 24 + typeof main, 25 + B 26 + > 27 + 28 + export const $lxm = main.nsid, 29 + $params = main.parameters, 30 + $output = main.output
+6
api/src/lexicons/sh/tangled/repo/compare.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './compare.defs.js' 6 + export * as $defs from './compare.defs.js'
+41
api/src/lexicons/sh/tangled/repo/create.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo.create' 8 + 9 + export { $nsid } 10 + 11 + /** Create a new repository */ 12 + const main = l.procedure( 13 + $nsid, 14 + l.params(), 15 + l.jsonPayload({ 16 + rkey: l.string(), 17 + name: l.string(), 18 + defaultBranch: l.optional(l.string()), 19 + source: l.optional(l.string()), 20 + repoDid: l.optional(l.string({ format: 'did' })), 21 + }), 22 + l.jsonPayload({ repoDid: l.optional(l.string({ format: 'did' })) }), 23 + ) 24 + export { main } 25 + 26 + export type $Params = l.InferMethodParams<typeof main> 27 + export type $Input<B = l.BinaryData> = l.InferMethodInput<typeof main, B> 28 + export type $InputBody<B = l.BinaryData> = l.InferMethodInputBody< 29 + typeof main, 30 + B 31 + > 32 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 33 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 34 + typeof main, 35 + B 36 + > 37 + 38 + export const $lxm = main.nsid, 39 + $params = main.parameters, 40 + $input = main.input, 41 + $output = main.output
+6
api/src/lexicons/sh/tangled/repo/create.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './create.defs.js' 6 + export * as $defs from './create.defs.js'
+39
api/src/lexicons/sh/tangled/repo/delete.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo.delete' 8 + 9 + export { $nsid } 10 + 11 + /** Delete a repository */ 12 + const main = l.procedure( 13 + $nsid, 14 + l.params(), 15 + l.jsonPayload({ 16 + did: l.string({ format: 'did' }), 17 + name: l.string(), 18 + rkey: l.string(), 19 + }), 20 + l.payload(), 21 + ) 22 + export { main } 23 + 24 + export type $Params = l.InferMethodParams<typeof main> 25 + export type $Input<B = l.BinaryData> = l.InferMethodInput<typeof main, B> 26 + export type $InputBody<B = l.BinaryData> = l.InferMethodInputBody< 27 + typeof main, 28 + B 29 + > 30 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 31 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 32 + typeof main, 33 + B 34 + > 35 + 36 + export const $lxm = main.nsid, 37 + $params = main.parameters, 38 + $input = main.input, 39 + $output = main.output
+6
api/src/lexicons/sh/tangled/repo/delete.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './delete.defs.js' 6 + export * as $defs from './delete.defs.js'
+35
api/src/lexicons/sh/tangled/repo/deleteBranch.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo.deleteBranch' 8 + 9 + export { $nsid } 10 + 11 + /** Delete a branch on this repository */ 12 + const main = l.procedure( 13 + $nsid, 14 + l.params(), 15 + l.jsonPayload({ repo: l.string({ format: 'at-uri' }), branch: l.string() }), 16 + l.payload(), 17 + ) 18 + export { main } 19 + 20 + export type $Params = l.InferMethodParams<typeof main> 21 + export type $Input<B = l.BinaryData> = l.InferMethodInput<typeof main, B> 22 + export type $InputBody<B = l.BinaryData> = l.InferMethodInputBody< 23 + typeof main, 24 + B 25 + > 26 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 27 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 28 + typeof main, 29 + B 30 + > 31 + 32 + export const $lxm = main.nsid, 33 + $params = main.parameters, 34 + $input = main.input, 35 + $output = main.output
+6
api/src/lexicons/sh/tangled/repo/deleteBranch.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './deleteBranch.defs.js' 6 + export * as $defs from './deleteBranch.defs.js'
+28
api/src/lexicons/sh/tangled/repo/diff.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo.diff' 8 + 9 + export { $nsid } 10 + 11 + const main = l.query( 12 + $nsid, 13 + l.params({ repo: l.string(), ref: l.string() }), 14 + l.payload('*/*'), 15 + ['RepoNotFound', 'RefNotFound', 'InvalidRequest'], 16 + ) 17 + export { main } 18 + 19 + export type $Params = l.InferMethodParams<typeof main> 20 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 21 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 22 + typeof main, 23 + B 24 + > 25 + 26 + export const $lxm = main.nsid, 27 + $params = main.parameters, 28 + $output = main.output
+6
api/src/lexicons/sh/tangled/repo/diff.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './diff.defs.js' 6 + export * as $defs from './diff.defs.js'
+41
api/src/lexicons/sh/tangled/repo/forkStatus.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo.forkStatus' 8 + 9 + export { $nsid } 10 + 11 + /** Check fork status relative to upstream source */ 12 + const main = l.procedure( 13 + $nsid, 14 + l.params(), 15 + l.jsonPayload({ 16 + did: l.string({ format: 'did' }), 17 + name: l.string(), 18 + source: l.string(), 19 + branch: l.string(), 20 + hiddenRef: l.string(), 21 + }), 22 + l.jsonPayload({ status: l.integer() }), 23 + ) 24 + export { main } 25 + 26 + export type $Params = l.InferMethodParams<typeof main> 27 + export type $Input<B = l.BinaryData> = l.InferMethodInput<typeof main, B> 28 + export type $InputBody<B = l.BinaryData> = l.InferMethodInputBody< 29 + typeof main, 30 + B 31 + > 32 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 33 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 34 + typeof main, 35 + B 36 + > 37 + 38 + export const $lxm = main.nsid, 39 + $params = main.parameters, 40 + $input = main.input, 41 + $output = main.output
+6
api/src/lexicons/sh/tangled/repo/forkStatus.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './forkStatus.defs.js' 6 + export * as $defs from './forkStatus.defs.js'
+40
api/src/lexicons/sh/tangled/repo/forkSync.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo.forkSync' 8 + 9 + export { $nsid } 10 + 11 + /** Sync a forked repository with its upstream source */ 12 + const main = l.procedure( 13 + $nsid, 14 + l.params(), 15 + l.jsonPayload({ 16 + did: l.string({ format: 'did' }), 17 + source: l.string({ format: 'at-uri' }), 18 + name: l.string(), 19 + branch: l.string(), 20 + }), 21 + l.payload(), 22 + ) 23 + export { main } 24 + 25 + export type $Params = l.InferMethodParams<typeof main> 26 + export type $Input<B = l.BinaryData> = l.InferMethodInput<typeof main, B> 27 + export type $InputBody<B = l.BinaryData> = l.InferMethodInputBody< 28 + typeof main, 29 + B 30 + > 31 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 32 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 33 + typeof main, 34 + B 35 + > 36 + 37 + export const $lxm = main.nsid, 38 + $params = main.parameters, 39 + $input = main.input, 40 + $output = main.output
+6
api/src/lexicons/sh/tangled/repo/forkSync.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './forkSync.defs.js' 6 + export * as $defs from './forkSync.defs.js'
+68
api/src/lexicons/sh/tangled/repo/getDefaultBranch.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo.getDefaultBranch' 8 + 9 + export { $nsid } 10 + 11 + const main = l.query( 12 + $nsid, 13 + l.params({ repo: l.string() }), 14 + l.jsonPayload({ 15 + name: l.string(), 16 + hash: l.string(), 17 + shortHash: l.optional(l.string()), 18 + when: l.string({ format: 'datetime' }), 19 + message: l.optional(l.string()), 20 + author: l.optional(l.ref<Signature>((() => signature) as any)), 21 + }), 22 + ['RepoNotFound', 'InvalidRequest'], 23 + ) 24 + export { main } 25 + 26 + export type $Params = l.InferMethodParams<typeof main> 27 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 28 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 29 + typeof main, 30 + B 31 + > 32 + 33 + export const $lxm = main.nsid, 34 + $params = main.parameters, 35 + $output = main.output 36 + 37 + type Signature = { 38 + $type?: 'sh.tangled.repo.getDefaultBranch#signature' 39 + 40 + /** 41 + * Author name 42 + */ 43 + name: string 44 + 45 + /** 46 + * Author email 47 + */ 48 + email: string 49 + 50 + /** 51 + * Author timestamp 52 + */ 53 + when: l.DatetimeString 54 + } 55 + 56 + export type { Signature } 57 + 58 + const signature = l.typedObject<Signature>( 59 + $nsid, 60 + 'signature', 61 + l.object({ 62 + name: l.string(), 63 + email: l.string(), 64 + when: l.string({ format: 'datetime' }), 65 + }), 66 + ) 67 + 68 + export { signature }
+6
api/src/lexicons/sh/tangled/repo/getDefaultBranch.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './getDefaultBranch.defs.js' 6 + export * as $defs from './getDefaultBranch.defs.js'
+43
api/src/lexicons/sh/tangled/repo/hiddenRef.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo.hiddenRef' 8 + 9 + export { $nsid } 10 + 11 + /** Create a hidden ref in a repository */ 12 + const main = l.procedure( 13 + $nsid, 14 + l.params(), 15 + l.jsonPayload({ 16 + repo: l.string({ format: 'at-uri' }), 17 + forkRef: l.string(), 18 + remoteRef: l.string(), 19 + }), 20 + l.jsonPayload({ 21 + success: l.boolean(), 22 + ref: l.optional(l.string()), 23 + error: l.optional(l.string()), 24 + }), 25 + ) 26 + export { main } 27 + 28 + export type $Params = l.InferMethodParams<typeof main> 29 + export type $Input<B = l.BinaryData> = l.InferMethodInput<typeof main, B> 30 + export type $InputBody<B = l.BinaryData> = l.InferMethodInputBody< 31 + typeof main, 32 + B 33 + > 34 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 35 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 36 + typeof main, 37 + B 38 + > 39 + 40 + export const $lxm = main.nsid, 41 + $params = main.parameters, 42 + $input = main.input, 43 + $output = main.output
+6
api/src/lexicons/sh/tangled/repo/hiddenRef.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './hiddenRef.defs.js' 6 + export * as $defs from './hiddenRef.defs.js'
+51
api/src/lexicons/sh/tangled/repo/issue.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo.issue' 8 + 9 + export { $nsid } 10 + 11 + type Main = { 12 + $type: 'sh.tangled.repo.issue' 13 + repo?: l.AtUriString 14 + repoDid?: l.DidString 15 + title: string 16 + body?: string 17 + createdAt: l.DatetimeString 18 + mentions?: l.DidString[] 19 + references?: l.AtUriString[] 20 + } 21 + 22 + export type { Main } 23 + 24 + const main = l.record<'tid', Main>( 25 + 'tid', 26 + $nsid, 27 + l.object({ 28 + repo: l.optional(l.string({ format: 'at-uri' })), 29 + repoDid: l.optional(l.string({ format: 'did' })), 30 + title: l.string(), 31 + body: l.optional(l.string()), 32 + createdAt: l.string({ format: 'datetime' }), 33 + mentions: l.optional(l.array(l.string({ format: 'did' }))), 34 + references: l.optional(l.array(l.string({ format: 'at-uri' }))), 35 + }), 36 + ) 37 + 38 + export { main } 39 + 40 + export const $isTypeOf = /*#__PURE__*/ main.isTypeOf.bind(main), 41 + $build = /*#__PURE__*/ main.build.bind(main), 42 + $type = /*#__PURE__*/ main.$type 43 + export const $assert = /*#__PURE__*/ main.assert.bind(main), 44 + $check = /*#__PURE__*/ main.check.bind(main), 45 + $cast = /*#__PURE__*/ main.cast.bind(main), 46 + $ifMatches = /*#__PURE__*/ main.ifMatches.bind(main), 47 + $matches = /*#__PURE__*/ main.matches.bind(main), 48 + $parse = /*#__PURE__*/ main.parse.bind(main), 49 + $safeParse = /*#__PURE__*/ main.safeParse.bind(main), 50 + $validate = /*#__PURE__*/ main.validate.bind(main), 51 + $safeValidate = /*#__PURE__*/ main.safeValidate.bind(main)
+8
api/src/lexicons/sh/tangled/repo/issue.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * as state from './issue/state.js' 6 + export * as comment from './issue/comment.js' 7 + export * from './issue.defs.js' 8 + export * as $defs from './issue.defs.js'
+49
api/src/lexicons/sh/tangled/repo/issue/comment.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo.issue.comment' 8 + 9 + export { $nsid } 10 + 11 + type Main = { 12 + $type: 'sh.tangled.repo.issue.comment' 13 + issue: l.AtUriString 14 + body: string 15 + createdAt: l.DatetimeString 16 + replyTo?: l.AtUriString 17 + mentions?: l.DidString[] 18 + references?: l.AtUriString[] 19 + } 20 + 21 + export type { Main } 22 + 23 + const main = l.record<'tid', Main>( 24 + 'tid', 25 + $nsid, 26 + l.object({ 27 + issue: l.string({ format: 'at-uri' }), 28 + body: l.string(), 29 + createdAt: l.string({ format: 'datetime' }), 30 + replyTo: l.optional(l.string({ format: 'at-uri' })), 31 + mentions: l.optional(l.array(l.string({ format: 'did' }))), 32 + references: l.optional(l.array(l.string({ format: 'at-uri' }))), 33 + }), 34 + ) 35 + 36 + export { main } 37 + 38 + export const $isTypeOf = /*#__PURE__*/ main.isTypeOf.bind(main), 39 + $build = /*#__PURE__*/ main.build.bind(main), 40 + $type = /*#__PURE__*/ main.$type 41 + export const $assert = /*#__PURE__*/ main.assert.bind(main), 42 + $check = /*#__PURE__*/ main.check.bind(main), 43 + $cast = /*#__PURE__*/ main.cast.bind(main), 44 + $ifMatches = /*#__PURE__*/ main.ifMatches.bind(main), 45 + $matches = /*#__PURE__*/ main.matches.bind(main), 46 + $parse = /*#__PURE__*/ main.parse.bind(main), 47 + $safeParse = /*#__PURE__*/ main.safeParse.bind(main), 48 + $validate = /*#__PURE__*/ main.validate.bind(main), 49 + $safeValidate = /*#__PURE__*/ main.safeValidate.bind(main)
+6
api/src/lexicons/sh/tangled/repo/issue/comment.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './comment.defs.js' 6 + export * as $defs from './comment.defs.js'
+56
api/src/lexicons/sh/tangled/repo/issue/state.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo.issue.state' 8 + 9 + export { $nsid } 10 + 11 + type Main = { 12 + $type: 'sh.tangled.repo.issue.state' 13 + issue: l.AtUriString 14 + 15 + /** 16 + * state of the issue 17 + */ 18 + state: 19 + | 'sh.tangled.repo.issue.state.open' 20 + | 'sh.tangled.repo.issue.state.closed' 21 + | l.UnknownString 22 + } 23 + 24 + export type { Main } 25 + 26 + const main = l.record<'tid', Main>( 27 + 'tid', 28 + $nsid, 29 + l.object({ 30 + issue: l.string({ format: 'at-uri' }), 31 + state: l.withDefault( 32 + l.string<{ 33 + knownValues: [ 34 + 'sh.tangled.repo.issue.state.open', 35 + 'sh.tangled.repo.issue.state.closed', 36 + ] 37 + }>(), 38 + 'sh.tangled.repo.issue.state.open', 39 + ), 40 + }), 41 + ) 42 + 43 + export { main } 44 + 45 + export const $isTypeOf = /*#__PURE__*/ main.isTypeOf.bind(main), 46 + $build = /*#__PURE__*/ main.build.bind(main), 47 + $type = /*#__PURE__*/ main.$type 48 + export const $assert = /*#__PURE__*/ main.assert.bind(main), 49 + $check = /*#__PURE__*/ main.check.bind(main), 50 + $cast = /*#__PURE__*/ main.cast.bind(main), 51 + $ifMatches = /*#__PURE__*/ main.ifMatches.bind(main), 52 + $matches = /*#__PURE__*/ main.matches.bind(main), 53 + $parse = /*#__PURE__*/ main.parse.bind(main), 54 + $safeParse = /*#__PURE__*/ main.safeParse.bind(main), 55 + $validate = /*#__PURE__*/ main.validate.bind(main), 56 + $safeValidate = /*#__PURE__*/ main.safeValidate.bind(main)
+8
api/src/lexicons/sh/tangled/repo/issue/state.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * as closed from './state/closed.js' 6 + export * as open from './state/open.js' 7 + export * from './state.defs.js' 8 + export * as $defs from './state.defs.js'
+29
api/src/lexicons/sh/tangled/repo/issue/state/closed.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo.issue.state.closed' 8 + 9 + export { $nsid } 10 + 11 + /** closed issue */ 12 + type Main = 'sh.tangled.repo.issue.state.closed' 13 + 14 + export type { Main } 15 + 16 + /** closed issue */ 17 + const main = l.token($nsid, 'main') 18 + 19 + export { main } 20 + 21 + export const $assert = /*#__PURE__*/ main.assert.bind(main), 22 + $check = /*#__PURE__*/ main.check.bind(main), 23 + $cast = /*#__PURE__*/ main.cast.bind(main), 24 + $ifMatches = /*#__PURE__*/ main.ifMatches.bind(main), 25 + $matches = /*#__PURE__*/ main.matches.bind(main), 26 + $parse = /*#__PURE__*/ main.parse.bind(main), 27 + $safeParse = /*#__PURE__*/ main.safeParse.bind(main), 28 + $validate = /*#__PURE__*/ main.validate.bind(main), 29 + $safeValidate = /*#__PURE__*/ main.safeValidate.bind(main)
+6
api/src/lexicons/sh/tangled/repo/issue/state/closed.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './closed.defs.js' 6 + export * as $defs from './closed.defs.js'
+29
api/src/lexicons/sh/tangled/repo/issue/state/open.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo.issue.state.open' 8 + 9 + export { $nsid } 10 + 11 + /** open issue */ 12 + type Main = 'sh.tangled.repo.issue.state.open' 13 + 14 + export type { Main } 15 + 16 + /** open issue */ 17 + const main = l.token($nsid, 'main') 18 + 19 + export { main } 20 + 21 + export const $assert = /*#__PURE__*/ main.assert.bind(main), 22 + $check = /*#__PURE__*/ main.check.bind(main), 23 + $cast = /*#__PURE__*/ main.cast.bind(main), 24 + $ifMatches = /*#__PURE__*/ main.ifMatches.bind(main), 25 + $matches = /*#__PURE__*/ main.matches.bind(main), 26 + $parse = /*#__PURE__*/ main.parse.bind(main), 27 + $safeParse = /*#__PURE__*/ main.safeParse.bind(main), 28 + $validate = /*#__PURE__*/ main.validate.bind(main), 29 + $safeValidate = /*#__PURE__*/ main.safeValidate.bind(main)
+6
api/src/lexicons/sh/tangled/repo/issue/state/open.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './open.defs.js' 6 + export * as $defs from './open.defs.js'
+87
api/src/lexicons/sh/tangled/repo/languages.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo.languages' 8 + 9 + export { $nsid } 10 + 11 + const main = l.query( 12 + $nsid, 13 + l.params({ 14 + repo: l.string(), 15 + ref: l.optional(l.withDefault(l.string(), 'HEAD')), 16 + }), 17 + l.jsonPayload({ 18 + ref: l.string(), 19 + languages: l.array(l.ref<Language>((() => language) as any)), 20 + totalSize: l.optional(l.integer()), 21 + totalFiles: l.optional(l.integer()), 22 + }), 23 + ['RepoNotFound', 'RefNotFound', 'InvalidRequest'], 24 + ) 25 + export { main } 26 + 27 + export type $Params = l.InferMethodParams<typeof main> 28 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 29 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 30 + typeof main, 31 + B 32 + > 33 + 34 + export const $lxm = main.nsid, 35 + $params = main.parameters, 36 + $output = main.output 37 + 38 + type Language = { 39 + $type?: 'sh.tangled.repo.languages#language' 40 + 41 + /** 42 + * Programming language name 43 + */ 44 + name: string 45 + 46 + /** 47 + * Total size of files in this language (bytes) 48 + */ 49 + size: number 50 + 51 + /** 52 + * Percentage of total codebase (0-100) 53 + */ 54 + percentage: number 55 + 56 + /** 57 + * Number of files in this language 58 + */ 59 + fileCount?: number 60 + 61 + /** 62 + * Hex color code for this language 63 + */ 64 + color?: string 65 + 66 + /** 67 + * File extensions associated with this language 68 + */ 69 + extensions?: string[] 70 + } 71 + 72 + export type { Language } 73 + 74 + const language = l.typedObject<Language>( 75 + $nsid, 76 + 'language', 77 + l.object({ 78 + name: l.string(), 79 + size: l.integer(), 80 + percentage: l.integer(), 81 + fileCount: l.optional(l.integer()), 82 + color: l.optional(l.string()), 83 + extensions: l.optional(l.array(l.string())), 84 + }), 85 + ) 86 + 87 + export { language }
+6
api/src/lexicons/sh/tangled/repo/languages.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './languages.defs.js' 6 + export * as $defs from './languages.defs.js'
+50
api/src/lexicons/sh/tangled/repo/listSecrets.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo.listSecrets' 8 + 9 + export { $nsid } 10 + 11 + const main = l.query( 12 + $nsid, 13 + l.params({ repo: l.string({ format: 'at-uri' }) }), 14 + l.jsonPayload({ secrets: l.array(l.ref<Secret>((() => secret) as any)) }), 15 + ) 16 + export { main } 17 + 18 + export type $Params = l.InferMethodParams<typeof main> 19 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 20 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 21 + typeof main, 22 + B 23 + > 24 + 25 + export const $lxm = main.nsid, 26 + $params = main.parameters, 27 + $output = main.output 28 + 29 + type Secret = { 30 + $type?: 'sh.tangled.repo.listSecrets#secret' 31 + repo: l.AtUriString 32 + key: string 33 + createdAt: l.DatetimeString 34 + createdBy: l.DidString 35 + } 36 + 37 + export type { Secret } 38 + 39 + const secret = l.typedObject<Secret>( 40 + $nsid, 41 + 'secret', 42 + l.object({ 43 + repo: l.string({ format: 'at-uri' }), 44 + key: l.string({ maxLength: 50, minLength: 1 }), 45 + createdAt: l.string({ format: 'datetime' }), 46 + createdBy: l.string({ format: 'did' }), 47 + }), 48 + ) 49 + 50 + export { secret }
+6
api/src/lexicons/sh/tangled/repo/listSecrets.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './listSecrets.defs.js' 6 + export * as $defs from './listSecrets.defs.js'
+36
api/src/lexicons/sh/tangled/repo/log.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo.log' 8 + 9 + export { $nsid } 10 + 11 + const main = l.query( 12 + $nsid, 13 + l.params({ 14 + repo: l.string(), 15 + ref: l.string(), 16 + path: l.optional(l.withDefault(l.string(), '')), 17 + limit: l.optional( 18 + l.withDefault(l.integer({ minimum: 1, maximum: 100 }), 50), 19 + ), 20 + cursor: l.optional(l.string()), 21 + }), 22 + l.payload('*/*'), 23 + ['RepoNotFound', 'RefNotFound', 'PathNotFound', 'InvalidRequest'], 24 + ) 25 + export { main } 26 + 27 + export type $Params = l.InferMethodParams<typeof main> 28 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 29 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 30 + typeof main, 31 + B 32 + > 33 + 34 + export const $lxm = main.nsid, 35 + $params = main.parameters, 36 + $output = main.output
+6
api/src/lexicons/sh/tangled/repo/log.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './log.defs.js' 6 + export * as $defs from './log.defs.js'
+44
api/src/lexicons/sh/tangled/repo/merge.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo.merge' 8 + 9 + export { $nsid } 10 + 11 + /** Merge a patch into a repository branch */ 12 + const main = l.procedure( 13 + $nsid, 14 + l.params(), 15 + l.jsonPayload({ 16 + did: l.string({ format: 'did' }), 17 + name: l.string(), 18 + patch: l.string(), 19 + branch: l.string(), 20 + authorName: l.optional(l.string()), 21 + authorEmail: l.optional(l.string()), 22 + commitBody: l.optional(l.string()), 23 + commitMessage: l.optional(l.string()), 24 + }), 25 + l.payload(), 26 + ) 27 + export { main } 28 + 29 + export type $Params = l.InferMethodParams<typeof main> 30 + export type $Input<B = l.BinaryData> = l.InferMethodInput<typeof main, B> 31 + export type $InputBody<B = l.BinaryData> = l.InferMethodInputBody< 32 + typeof main, 33 + B 34 + > 35 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 36 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 37 + typeof main, 38 + B 39 + > 40 + 41 + export const $lxm = main.nsid, 42 + $params = main.parameters, 43 + $input = main.input, 44 + $output = main.output
+6
api/src/lexicons/sh/tangled/repo/merge.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './merge.defs.js' 6 + export * as $defs from './merge.defs.js'
+71
api/src/lexicons/sh/tangled/repo/mergeCheck.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo.mergeCheck' 8 + 9 + export { $nsid } 10 + 11 + /** Check if a merge is possible between two branches */ 12 + const main = l.procedure( 13 + $nsid, 14 + l.params(), 15 + l.jsonPayload({ 16 + did: l.string({ format: 'did' }), 17 + name: l.string(), 18 + patch: l.string(), 19 + branch: l.string(), 20 + }), 21 + l.jsonPayload({ 22 + is_conflicted: l.boolean(), 23 + conflicts: l.optional( 24 + l.array(l.ref<ConflictInfo>((() => conflictInfo) as any)), 25 + ), 26 + message: l.optional(l.string()), 27 + error: l.optional(l.string()), 28 + }), 29 + ) 30 + export { main } 31 + 32 + export type $Params = l.InferMethodParams<typeof main> 33 + export type $Input<B = l.BinaryData> = l.InferMethodInput<typeof main, B> 34 + export type $InputBody<B = l.BinaryData> = l.InferMethodInputBody< 35 + typeof main, 36 + B 37 + > 38 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 39 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 40 + typeof main, 41 + B 42 + > 43 + 44 + export const $lxm = main.nsid, 45 + $params = main.parameters, 46 + $input = main.input, 47 + $output = main.output 48 + 49 + type ConflictInfo = { 50 + $type?: 'sh.tangled.repo.mergeCheck#conflictInfo' 51 + 52 + /** 53 + * Name of the conflicted file 54 + */ 55 + filename: string 56 + 57 + /** 58 + * Reason for the conflict 59 + */ 60 + reason: string 61 + } 62 + 63 + export type { ConflictInfo } 64 + 65 + const conflictInfo = l.typedObject<ConflictInfo>( 66 + $nsid, 67 + 'conflictInfo', 68 + l.object({ filename: l.string(), reason: l.string() }), 69 + ) 70 + 71 + export { conflictInfo }
+6
api/src/lexicons/sh/tangled/repo/mergeCheck.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './mergeCheck.defs.js' 6 + export * as $defs from './mergeCheck.defs.js'
+118
api/src/lexicons/sh/tangled/repo/pull.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo.pull' 8 + 9 + export { $nsid } 10 + 11 + type Main = { 12 + $type: 'sh.tangled.repo.pull' 13 + title: string 14 + body?: string 15 + rounds: Round[] 16 + source?: Source 17 + target: Target 18 + createdAt: l.DatetimeString 19 + mentions?: l.DidString[] 20 + references?: l.AtUriString[] 21 + dependentOn?: l.AtUriString 22 + } 23 + 24 + export type { Main } 25 + 26 + const main = l.record<'tid', Main>( 27 + 'tid', 28 + $nsid, 29 + l.object({ 30 + title: l.string(), 31 + body: l.optional(l.string()), 32 + rounds: l.array(l.ref<Round>((() => round) as any)), 33 + source: l.optional(l.ref<Source>((() => source) as any)), 34 + target: l.ref<Target>((() => target) as any), 35 + createdAt: l.string({ format: 'datetime' }), 36 + mentions: l.optional(l.array(l.string({ format: 'did' }))), 37 + references: l.optional(l.array(l.string({ format: 'at-uri' }))), 38 + dependentOn: l.optional(l.string({ format: 'at-uri' })), 39 + }), 40 + ) 41 + 42 + export { main } 43 + 44 + export const $isTypeOf = /*#__PURE__*/ main.isTypeOf.bind(main), 45 + $build = /*#__PURE__*/ main.build.bind(main), 46 + $type = /*#__PURE__*/ main.$type 47 + export const $assert = /*#__PURE__*/ main.assert.bind(main), 48 + $check = /*#__PURE__*/ main.check.bind(main), 49 + $cast = /*#__PURE__*/ main.cast.bind(main), 50 + $ifMatches = /*#__PURE__*/ main.ifMatches.bind(main), 51 + $matches = /*#__PURE__*/ main.matches.bind(main), 52 + $parse = /*#__PURE__*/ main.parse.bind(main), 53 + $safeParse = /*#__PURE__*/ main.safeParse.bind(main), 54 + $validate = /*#__PURE__*/ main.validate.bind(main), 55 + $safeValidate = /*#__PURE__*/ main.safeValidate.bind(main) 56 + 57 + type Target = { 58 + $type?: 'sh.tangled.repo.pull#target' 59 + repo?: l.AtUriString 60 + repoDid?: l.DidString 61 + branch: string 62 + } 63 + 64 + export type { Target } 65 + 66 + const target = l.typedObject<Target>( 67 + $nsid, 68 + 'target', 69 + l.object({ 70 + repo: l.optional(l.string({ format: 'at-uri' })), 71 + repoDid: l.optional(l.string({ format: 'did' })), 72 + branch: l.string(), 73 + }), 74 + ) 75 + 76 + export { target } 77 + 78 + type Source = { 79 + $type?: 'sh.tangled.repo.pull#source' 80 + branch: string 81 + repo?: l.AtUriString 82 + repoDid?: l.DidString 83 + } 84 + 85 + export type { Source } 86 + 87 + const source = l.typedObject<Source>( 88 + $nsid, 89 + 'source', 90 + l.object({ 91 + branch: l.string(), 92 + repo: l.optional(l.string({ format: 'at-uri' })), 93 + repoDid: l.optional(l.string({ format: 'did' })), 94 + }), 95 + ) 96 + 97 + export { source } 98 + 99 + /** revisions of this pull request, newer rounds are appended to this array. appviews may reject records do not treat this field as append-only. the blob format is gzipped text-based git-format-patches. */ 100 + type Round = { 101 + $type?: 'sh.tangled.repo.pull#round' 102 + createdAt: l.DatetimeString 103 + patchBlob: l.BlobRef 104 + } 105 + 106 + export type { Round } 107 + 108 + /** revisions of this pull request, newer rounds are appended to this array. appviews may reject records do not treat this field as append-only. the blob format is gzipped text-based git-format-patches. */ 109 + const round = l.typedObject<Round>( 110 + $nsid, 111 + 'round', 112 + l.object({ 113 + createdAt: l.string({ format: 'datetime' }), 114 + patchBlob: l.blob({ accept: ['application/gzip'] }), 115 + }), 116 + ) 117 + 118 + export { round }
+8
api/src/lexicons/sh/tangled/repo/pull.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * as status from './pull/status.js' 6 + export * as comment from './pull/comment.js' 7 + export * from './pull.defs.js' 8 + export * as $defs from './pull.defs.js'
+47
api/src/lexicons/sh/tangled/repo/pull/comment.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo.pull.comment' 8 + 9 + export { $nsid } 10 + 11 + type Main = { 12 + $type: 'sh.tangled.repo.pull.comment' 13 + pull: l.AtUriString 14 + body: string 15 + createdAt: l.DatetimeString 16 + mentions?: l.DidString[] 17 + references?: l.AtUriString[] 18 + } 19 + 20 + export type { Main } 21 + 22 + const main = l.record<'tid', Main>( 23 + 'tid', 24 + $nsid, 25 + l.object({ 26 + pull: l.string({ format: 'at-uri' }), 27 + body: l.string(), 28 + createdAt: l.string({ format: 'datetime' }), 29 + mentions: l.optional(l.array(l.string({ format: 'did' }))), 30 + references: l.optional(l.array(l.string({ format: 'at-uri' }))), 31 + }), 32 + ) 33 + 34 + export { main } 35 + 36 + export const $isTypeOf = /*#__PURE__*/ main.isTypeOf.bind(main), 37 + $build = /*#__PURE__*/ main.build.bind(main), 38 + $type = /*#__PURE__*/ main.$type 39 + export const $assert = /*#__PURE__*/ main.assert.bind(main), 40 + $check = /*#__PURE__*/ main.check.bind(main), 41 + $cast = /*#__PURE__*/ main.cast.bind(main), 42 + $ifMatches = /*#__PURE__*/ main.ifMatches.bind(main), 43 + $matches = /*#__PURE__*/ main.matches.bind(main), 44 + $parse = /*#__PURE__*/ main.parse.bind(main), 45 + $safeParse = /*#__PURE__*/ main.safeParse.bind(main), 46 + $validate = /*#__PURE__*/ main.validate.bind(main), 47 + $safeValidate = /*#__PURE__*/ main.safeValidate.bind(main)
+6
api/src/lexicons/sh/tangled/repo/pull/comment.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './comment.defs.js' 6 + export * as $defs from './comment.defs.js'
+58
api/src/lexicons/sh/tangled/repo/pull/status.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo.pull.status' 8 + 9 + export { $nsid } 10 + 11 + type Main = { 12 + $type: 'sh.tangled.repo.pull.status' 13 + pull: l.AtUriString 14 + 15 + /** 16 + * status of the pull request 17 + */ 18 + status: 19 + | 'sh.tangled.repo.pull.status.open' 20 + | 'sh.tangled.repo.pull.status.closed' 21 + | 'sh.tangled.repo.pull.status.merged' 22 + | l.UnknownString 23 + } 24 + 25 + export type { Main } 26 + 27 + const main = l.record<'tid', Main>( 28 + 'tid', 29 + $nsid, 30 + l.object({ 31 + pull: l.string({ format: 'at-uri' }), 32 + status: l.withDefault( 33 + l.string<{ 34 + knownValues: [ 35 + 'sh.tangled.repo.pull.status.open', 36 + 'sh.tangled.repo.pull.status.closed', 37 + 'sh.tangled.repo.pull.status.merged', 38 + ] 39 + }>(), 40 + 'sh.tangled.repo.pull.status.open', 41 + ), 42 + }), 43 + ) 44 + 45 + export { main } 46 + 47 + export const $isTypeOf = /*#__PURE__*/ main.isTypeOf.bind(main), 48 + $build = /*#__PURE__*/ main.build.bind(main), 49 + $type = /*#__PURE__*/ main.$type 50 + export const $assert = /*#__PURE__*/ main.assert.bind(main), 51 + $check = /*#__PURE__*/ main.check.bind(main), 52 + $cast = /*#__PURE__*/ main.cast.bind(main), 53 + $ifMatches = /*#__PURE__*/ main.ifMatches.bind(main), 54 + $matches = /*#__PURE__*/ main.matches.bind(main), 55 + $parse = /*#__PURE__*/ main.parse.bind(main), 56 + $safeParse = /*#__PURE__*/ main.safeParse.bind(main), 57 + $validate = /*#__PURE__*/ main.validate.bind(main), 58 + $safeValidate = /*#__PURE__*/ main.safeValidate.bind(main)
+9
api/src/lexicons/sh/tangled/repo/pull/status.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * as closed from './status/closed.js' 6 + export * as merged from './status/merged.js' 7 + export * as open from './status/open.js' 8 + export * from './status.defs.js' 9 + export * as $defs from './status.defs.js'
+29
api/src/lexicons/sh/tangled/repo/pull/status/closed.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo.pull.status.closed' 8 + 9 + export { $nsid } 10 + 11 + /** closed pull request */ 12 + type Main = 'sh.tangled.repo.pull.status.closed' 13 + 14 + export type { Main } 15 + 16 + /** closed pull request */ 17 + const main = l.token($nsid, 'main') 18 + 19 + export { main } 20 + 21 + export const $assert = /*#__PURE__*/ main.assert.bind(main), 22 + $check = /*#__PURE__*/ main.check.bind(main), 23 + $cast = /*#__PURE__*/ main.cast.bind(main), 24 + $ifMatches = /*#__PURE__*/ main.ifMatches.bind(main), 25 + $matches = /*#__PURE__*/ main.matches.bind(main), 26 + $parse = /*#__PURE__*/ main.parse.bind(main), 27 + $safeParse = /*#__PURE__*/ main.safeParse.bind(main), 28 + $validate = /*#__PURE__*/ main.validate.bind(main), 29 + $safeValidate = /*#__PURE__*/ main.safeValidate.bind(main)
+6
api/src/lexicons/sh/tangled/repo/pull/status/closed.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './closed.defs.js' 6 + export * as $defs from './closed.defs.js'
+29
api/src/lexicons/sh/tangled/repo/pull/status/merged.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo.pull.status.merged' 8 + 9 + export { $nsid } 10 + 11 + /** merged pull request */ 12 + type Main = 'sh.tangled.repo.pull.status.merged' 13 + 14 + export type { Main } 15 + 16 + /** merged pull request */ 17 + const main = l.token($nsid, 'main') 18 + 19 + export { main } 20 + 21 + export const $assert = /*#__PURE__*/ main.assert.bind(main), 22 + $check = /*#__PURE__*/ main.check.bind(main), 23 + $cast = /*#__PURE__*/ main.cast.bind(main), 24 + $ifMatches = /*#__PURE__*/ main.ifMatches.bind(main), 25 + $matches = /*#__PURE__*/ main.matches.bind(main), 26 + $parse = /*#__PURE__*/ main.parse.bind(main), 27 + $safeParse = /*#__PURE__*/ main.safeParse.bind(main), 28 + $validate = /*#__PURE__*/ main.validate.bind(main), 29 + $safeValidate = /*#__PURE__*/ main.safeValidate.bind(main)
+6
api/src/lexicons/sh/tangled/repo/pull/status/merged.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './merged.defs.js' 6 + export * as $defs from './merged.defs.js'
+29
api/src/lexicons/sh/tangled/repo/pull/status/open.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo.pull.status.open' 8 + 9 + export { $nsid } 10 + 11 + /** open pull request */ 12 + type Main = 'sh.tangled.repo.pull.status.open' 13 + 14 + export type { Main } 15 + 16 + /** open pull request */ 17 + const main = l.token($nsid, 'main') 18 + 19 + export { main } 20 + 21 + export const $assert = /*#__PURE__*/ main.assert.bind(main), 22 + $check = /*#__PURE__*/ main.check.bind(main), 23 + $cast = /*#__PURE__*/ main.cast.bind(main), 24 + $ifMatches = /*#__PURE__*/ main.ifMatches.bind(main), 25 + $matches = /*#__PURE__*/ main.matches.bind(main), 26 + $parse = /*#__PURE__*/ main.parse.bind(main), 27 + $safeParse = /*#__PURE__*/ main.safeParse.bind(main), 28 + $validate = /*#__PURE__*/ main.validate.bind(main), 29 + $safeValidate = /*#__PURE__*/ main.safeValidate.bind(main)
+6
api/src/lexicons/sh/tangled/repo/pull/status/open.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './open.defs.js' 6 + export * as $defs from './open.defs.js'
+38
api/src/lexicons/sh/tangled/repo/removeSecret.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo.removeSecret' 8 + 9 + export { $nsid } 10 + 11 + /** Remove a CI secret */ 12 + const main = l.procedure( 13 + $nsid, 14 + l.params(), 15 + l.jsonPayload({ 16 + repo: l.string({ format: 'at-uri' }), 17 + key: l.string({ maxLength: 50, minLength: 1 }), 18 + }), 19 + l.payload(), 20 + ) 21 + export { main } 22 + 23 + export type $Params = l.InferMethodParams<typeof main> 24 + export type $Input<B = l.BinaryData> = l.InferMethodInput<typeof main, B> 25 + export type $InputBody<B = l.BinaryData> = l.InferMethodInputBody< 26 + typeof main, 27 + B 28 + > 29 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 30 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 31 + typeof main, 32 + B 33 + > 34 + 35 + export const $lxm = main.nsid, 36 + $params = main.parameters, 37 + $input = main.input, 38 + $output = main.output
+6
api/src/lexicons/sh/tangled/repo/removeSecret.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './removeSecret.defs.js' 6 + export * as $defs from './removeSecret.defs.js'
+38
api/src/lexicons/sh/tangled/repo/setDefaultBranch.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo.setDefaultBranch' 8 + 9 + export { $nsid } 10 + 11 + /** Set the default branch for a repository */ 12 + const main = l.procedure( 13 + $nsid, 14 + l.params(), 15 + l.jsonPayload({ 16 + repo: l.string({ format: 'at-uri' }), 17 + defaultBranch: l.string(), 18 + }), 19 + l.payload(), 20 + ) 21 + export { main } 22 + 23 + export type $Params = l.InferMethodParams<typeof main> 24 + export type $Input<B = l.BinaryData> = l.InferMethodInput<typeof main, B> 25 + export type $InputBody<B = l.BinaryData> = l.InferMethodInputBody< 26 + typeof main, 27 + B 28 + > 29 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 30 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 31 + typeof main, 32 + B 33 + > 34 + 35 + export const $lxm = main.nsid, 36 + $params = main.parameters, 37 + $input = main.input, 38 + $output = main.output
+6
api/src/lexicons/sh/tangled/repo/setDefaultBranch.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './setDefaultBranch.defs.js' 6 + export * as $defs from './setDefaultBranch.defs.js'
+28
api/src/lexicons/sh/tangled/repo/tag.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo.tag' 8 + 9 + export { $nsid } 10 + 11 + const main = l.query( 12 + $nsid, 13 + l.params({ repo: l.string(), tag: l.string() }), 14 + l.payload('*/*'), 15 + ['RepoNotFound', 'TagNotFound', 'InvalidRequest'], 16 + ) 17 + export { main } 18 + 19 + export type $Params = l.InferMethodParams<typeof main> 20 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 21 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 22 + typeof main, 23 + B 24 + > 25 + 26 + export const $lxm = main.nsid, 27 + $params = main.parameters, 28 + $output = main.output
+6
api/src/lexicons/sh/tangled/repo/tag.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './tag.defs.js' 6 + export * as $defs from './tag.defs.js'
+34
api/src/lexicons/sh/tangled/repo/tags.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo.tags' 8 + 9 + export { $nsid } 10 + 11 + const main = l.query( 12 + $nsid, 13 + l.params({ 14 + repo: l.string(), 15 + limit: l.optional( 16 + l.withDefault(l.integer({ minimum: 1, maximum: 100 }), 50), 17 + ), 18 + cursor: l.optional(l.string()), 19 + }), 20 + l.payload('*/*'), 21 + ['RepoNotFound', 'InvalidRequest'], 22 + ) 23 + export { main } 24 + 25 + export type $Params = l.InferMethodParams<typeof main> 26 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 27 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 28 + typeof main, 29 + B 30 + > 31 + 32 + export const $lxm = main.nsid, 33 + $params = main.parameters, 34 + $output = main.output
+6
api/src/lexicons/sh/tangled/repo/tags.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './tags.defs.js' 6 + export * as $defs from './tags.defs.js'
+166
api/src/lexicons/sh/tangled/repo/tree.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.repo.tree' 8 + 9 + export { $nsid } 10 + 11 + const main = l.query( 12 + $nsid, 13 + l.params({ 14 + repo: l.string(), 15 + ref: l.string(), 16 + path: l.optional(l.withDefault(l.string(), '')), 17 + }), 18 + l.jsonPayload({ 19 + ref: l.string(), 20 + parent: l.optional(l.string()), 21 + dotdot: l.optional(l.string()), 22 + readme: l.optional(l.ref<Readme>((() => readme) as any)), 23 + lastCommit: l.optional(l.ref<LastCommit>((() => lastCommit) as any)), 24 + files: l.array(l.ref<TreeEntry>((() => treeEntry) as any)), 25 + }), 26 + ['RepoNotFound', 'RefNotFound', 'PathNotFound', 'InvalidRequest'], 27 + ) 28 + export { main } 29 + 30 + export type $Params = l.InferMethodParams<typeof main> 31 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 32 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 33 + typeof main, 34 + B 35 + > 36 + 37 + export const $lxm = main.nsid, 38 + $params = main.parameters, 39 + $output = main.output 40 + 41 + type Readme = { 42 + $type?: 'sh.tangled.repo.tree#readme' 43 + 44 + /** 45 + * Name of the readme file 46 + */ 47 + filename: string 48 + 49 + /** 50 + * Contents of the readme file 51 + */ 52 + contents: string 53 + } 54 + 55 + export type { Readme } 56 + 57 + const readme = l.typedObject<Readme>( 58 + $nsid, 59 + 'readme', 60 + l.object({ filename: l.string(), contents: l.string() }), 61 + ) 62 + 63 + export { readme } 64 + 65 + type TreeEntry = { 66 + $type?: 'sh.tangled.repo.tree#treeEntry' 67 + 68 + /** 69 + * Relative file or directory name 70 + */ 71 + name: string 72 + 73 + /** 74 + * File mode 75 + */ 76 + mode: string 77 + 78 + /** 79 + * File size in bytes 80 + */ 81 + size: number 82 + last_commit?: LastCommit 83 + } 84 + 85 + export type { TreeEntry } 86 + 87 + const treeEntry = l.typedObject<TreeEntry>( 88 + $nsid, 89 + 'treeEntry', 90 + l.object({ 91 + name: l.string(), 92 + mode: l.string(), 93 + size: l.integer(), 94 + last_commit: l.optional(l.ref<LastCommit>((() => lastCommit) as any)), 95 + }), 96 + ) 97 + 98 + export { treeEntry } 99 + 100 + type LastCommit = { 101 + $type?: 'sh.tangled.repo.tree#lastCommit' 102 + 103 + /** 104 + * Commit hash 105 + */ 106 + hash: string 107 + 108 + /** 109 + * Commit message 110 + */ 111 + message: string 112 + author?: Signature 113 + 114 + /** 115 + * Commit timestamp 116 + */ 117 + when: l.DatetimeString 118 + } 119 + 120 + export type { LastCommit } 121 + 122 + const lastCommit = l.typedObject<LastCommit>( 123 + $nsid, 124 + 'lastCommit', 125 + l.object({ 126 + hash: l.string(), 127 + message: l.string(), 128 + author: l.optional(l.ref<Signature>((() => signature) as any)), 129 + when: l.string({ format: 'datetime' }), 130 + }), 131 + ) 132 + 133 + export { lastCommit } 134 + 135 + type Signature = { 136 + $type?: 'sh.tangled.repo.tree#signature' 137 + 138 + /** 139 + * Author name 140 + */ 141 + name: string 142 + 143 + /** 144 + * Author email 145 + */ 146 + email: string 147 + 148 + /** 149 + * Author timestamp 150 + */ 151 + when: l.DatetimeString 152 + } 153 + 154 + export type { Signature } 155 + 156 + const signature = l.typedObject<Signature>( 157 + $nsid, 158 + 'signature', 159 + l.object({ 160 + name: l.string(), 161 + email: l.string(), 162 + when: l.string({ format: 'datetime' }), 163 + }), 164 + ) 165 + 166 + export { signature }
+6
api/src/lexicons/sh/tangled/repo/tree.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './tree.defs.js' 6 + export * as $defs from './tree.defs.js'
+34
api/src/lexicons/sh/tangled/spindle.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.spindle' 8 + 9 + export { $nsid } 10 + 11 + type Main = { $type: 'sh.tangled.spindle'; createdAt: l.DatetimeString } 12 + 13 + export type { Main } 14 + 15 + const main = l.record<'any', Main>( 16 + 'any', 17 + $nsid, 18 + l.object({ createdAt: l.string({ format: 'datetime' }) }), 19 + ) 20 + 21 + export { main } 22 + 23 + export const $isTypeOf = /*#__PURE__*/ main.isTypeOf.bind(main), 24 + $build = /*#__PURE__*/ main.build.bind(main), 25 + $type = /*#__PURE__*/ main.$type 26 + export const $assert = /*#__PURE__*/ main.assert.bind(main), 27 + $check = /*#__PURE__*/ main.check.bind(main), 28 + $cast = /*#__PURE__*/ main.cast.bind(main), 29 + $ifMatches = /*#__PURE__*/ main.ifMatches.bind(main), 30 + $matches = /*#__PURE__*/ main.matches.bind(main), 31 + $parse = /*#__PURE__*/ main.parse.bind(main), 32 + $safeParse = /*#__PURE__*/ main.safeParse.bind(main), 33 + $validate = /*#__PURE__*/ main.validate.bind(main), 34 + $safeValidate = /*#__PURE__*/ main.safeValidate.bind(main)
+7
api/src/lexicons/sh/tangled/spindle.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * as member from './spindle/member.js' 6 + export * from './spindle.defs.js' 7 + export * as $defs from './spindle.defs.js'
+47
api/src/lexicons/sh/tangled/spindle/member.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.spindle.member' 8 + 9 + export { $nsid } 10 + 11 + type Main = { 12 + $type: 'sh.tangled.spindle.member' 13 + subject: l.DidString 14 + 15 + /** 16 + * spindle instance that the subject is now a member of 17 + */ 18 + instance: string 19 + createdAt: l.DatetimeString 20 + } 21 + 22 + export type { Main } 23 + 24 + const main = l.record<'tid', Main>( 25 + 'tid', 26 + $nsid, 27 + l.object({ 28 + subject: l.string({ format: 'did' }), 29 + instance: l.string(), 30 + createdAt: l.string({ format: 'datetime' }), 31 + }), 32 + ) 33 + 34 + export { main } 35 + 36 + export const $isTypeOf = /*#__PURE__*/ main.isTypeOf.bind(main), 37 + $build = /*#__PURE__*/ main.build.bind(main), 38 + $type = /*#__PURE__*/ main.$type 39 + export const $assert = /*#__PURE__*/ main.assert.bind(main), 40 + $check = /*#__PURE__*/ main.check.bind(main), 41 + $cast = /*#__PURE__*/ main.cast.bind(main), 42 + $ifMatches = /*#__PURE__*/ main.ifMatches.bind(main), 43 + $matches = /*#__PURE__*/ main.matches.bind(main), 44 + $parse = /*#__PURE__*/ main.parse.bind(main), 45 + $safeParse = /*#__PURE__*/ main.safeParse.bind(main), 46 + $validate = /*#__PURE__*/ main.validate.bind(main), 47 + $safeValidate = /*#__PURE__*/ main.safeValidate.bind(main)
+6
api/src/lexicons/sh/tangled/spindle/member.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './member.defs.js' 6 + export * as $defs from './member.defs.js'
+45
api/src/lexicons/sh/tangled/string.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.string' 8 + 9 + export { $nsid } 10 + 11 + type Main = { 12 + $type: 'sh.tangled.string' 13 + filename: string 14 + description: string 15 + createdAt: l.DatetimeString 16 + contents: string 17 + } 18 + 19 + export type { Main } 20 + 21 + const main = l.record<'tid', Main>( 22 + 'tid', 23 + $nsid, 24 + l.object({ 25 + filename: l.string({ maxGraphemes: 140, minGraphemes: 1 }), 26 + description: l.string({ maxGraphemes: 280 }), 27 + createdAt: l.string({ format: 'datetime' }), 28 + contents: l.string({ minGraphemes: 1 }), 29 + }), 30 + ) 31 + 32 + export { main } 33 + 34 + export const $isTypeOf = /*#__PURE__*/ main.isTypeOf.bind(main), 35 + $build = /*#__PURE__*/ main.build.bind(main), 36 + $type = /*#__PURE__*/ main.$type 37 + export const $assert = /*#__PURE__*/ main.assert.bind(main), 38 + $check = /*#__PURE__*/ main.check.bind(main), 39 + $cast = /*#__PURE__*/ main.cast.bind(main), 40 + $ifMatches = /*#__PURE__*/ main.ifMatches.bind(main), 41 + $matches = /*#__PURE__*/ main.matches.bind(main), 42 + $parse = /*#__PURE__*/ main.parse.bind(main), 43 + $safeParse = /*#__PURE__*/ main.safeParse.bind(main), 44 + $validate = /*#__PURE__*/ main.validate.bind(main), 45 + $safeValidate = /*#__PURE__*/ main.safeValidate.bind(main)
+6
api/src/lexicons/sh/tangled/string.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './string.defs.js' 6 + export * as $defs from './string.defs.js'
+5
api/src/lexicons/sh/tangled/sync.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * as requestCrawl from './sync/requestCrawl.js'
+39
api/src/lexicons/sh/tangled/sync/requestCrawl.defs.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + import { l } from '@atproto/lex' 6 + 7 + const $nsid = 'sh.tangled.sync.requestCrawl' 8 + 9 + export { $nsid } 10 + 11 + /** Request a service to persistently crawl hosted repos. Does not require auth. */ 12 + const main = l.procedure( 13 + $nsid, 14 + l.params(), 15 + l.jsonPayload({ 16 + hostname: l.string(), 17 + ensureRepo: l.optional(l.string({ format: 'at-uri' })), 18 + }), 19 + l.payload(), 20 + ['HostBanned'], 21 + ) 22 + export { main } 23 + 24 + export type $Params = l.InferMethodParams<typeof main> 25 + export type $Input<B = l.BinaryData> = l.InferMethodInput<typeof main, B> 26 + export type $InputBody<B = l.BinaryData> = l.InferMethodInputBody< 27 + typeof main, 28 + B 29 + > 30 + export type $Output<B = l.BinaryData> = l.InferMethodOutput<typeof main, B> 31 + export type $OutputBody<B = l.BinaryData> = l.InferMethodOutputBody< 32 + typeof main, 33 + B 34 + > 35 + 36 + export const $lxm = main.nsid, 37 + $params = main.parameters, 38 + $input = main.input, 39 + $output = main.output
+6
api/src/lexicons/sh/tangled/sync/requestCrawl.ts
··· 1 + /* 2 + * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT. 3 + */ 4 + 5 + export * from './requestCrawl.defs.js' 6 + export * as $defs from './requestCrawl.defs.js'
+2
api/src/lib/constants.ts
··· 1 + export const DATABASE_URL = process.env.DATABASE_URL; 2 + export const TAP_URL = process.env.TAP_URL!;
+13
api/src/lib/id.ts
··· 1 + import { validate } from "@std/uuid/v7"; 2 + import type { BRAND } from "zod"; 3 + 4 + export type UuidString = `${string}-${string}-7${string}-${string}-${string}`; 5 + export type Id<For extends string> = UuidString & BRAND<`${For}.id`>; 6 + 7 + 8 + export function parseId<T extends Id<string>>(value: string): T { 9 + if (!validate(value)) { 10 + throw new Error(`Invalid UUIDv7: ${value}`); 11 + } 12 + return value as T; 13 + }
+1
db/Dockerfile
··· 1 + FROM ghcr.io/railwayapp-templates/postgres-ssl:18
+9
db/dev.sh
··· 1 + #!/bin/bash 2 + 3 + export PGDATA=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/internal 4 + 5 + if [ ! -f "$PGDATA/PG_VERSION" ]; then 6 + initdb -D "$PGDATA" -U postgres 7 + fi 8 + 9 + exec postgres
+7
db/package.json
··· 1 + { 2 + "private": true, 3 + "name": "db", 4 + "scripts": { 5 + "dev": "./dev.sh" 6 + } 7 + }
+8
package.json
··· 1 + { 2 + "scripts": { 3 + "dev": "pnpm -r --parallel run dev", 4 + "db:generate": "pnpm --filter api db:generate", 5 + "db:migrate": "pnpm --filter api db:migrate", 6 + "db:studio": "pnpm --filter api db:studio" 7 + } 8 + }
+38
patches/@atproto__ws-client.patch
··· 1 + diff --git a/dist/index.js b/dist/index.js 2 + index 11eb1e5719ad783df3d61345f304dfff2a5931fd..2009e3dcdd837cb88be544bb86f5532f9aecc63c 100644 3 + --- a/dist/index.js 4 + +++ b/dist/index.js 5 + @@ -56,10 +56,8 @@ class WebSocketKeepAlive { 6 + } 7 + }); 8 + this.ws.once('close', (code, reason) => { 9 + - if (code === CloseCode.Abnormal) { 10 + - // Forward into an error to distinguish from a clean close 11 + - ac.abort(new AbnormalCloseError(`Abnormal ws close: ${reason.toString()}`)); 12 + - } 13 + + // Forward into an error to distinguish from a clean close 14 + + ac.abort(new AbnormalCloseError(`Abnormal ws close: ${reason.toString()}`)); 15 + }); 16 + try { 17 + const wsStream = (0, ws_1.createWebSocketStream)(this.ws, { 18 + diff --git a/src/index.ts b/src/index.ts 19 + index d874a05481d5e80b2964f7ec95a99da92c710fae..6c609c5b1b16e65b3873eeb7a1f75b16713120af 100644 20 + --- a/src/index.ts 21 + +++ b/src/index.ts 22 + @@ -47,12 +47,10 @@ export class WebSocketKeepAlive { 23 + } 24 + }) 25 + this.ws.once('close', (code, reason) => { 26 + - if (code === CloseCode.Abnormal) { 27 + - // Forward into an error to distinguish from a clean close 28 + - ac.abort( 29 + - new AbnormalCloseError(`Abnormal ws close: ${reason.toString()}`), 30 + - ) 31 + - } 32 + + // Forward into an error to distinguish from a clean close 33 + + ac.abort( 34 + + new AbnormalCloseError(`Abnormal ws close: ${reason.toString()}`), 35 + + ) 36 + }) 37 + 38 + try {
+1866
pnpm-lock.yaml
··· 1 + lockfileVersion: '9.0' 2 + 3 + settings: 4 + autoInstallPeers: true 5 + excludeLinksFromLockfile: false 6 + 7 + patchedDependencies: 8 + '@atproto/ws-client': c27ff9e830a1f8d238a5e4a4f271b42236cc3239b7e7f8e84fe031b6eb5f79b1 9 + 10 + importers: 11 + 12 + .: {} 13 + 14 + api: 15 + dependencies: 16 + '@atproto/lex': 17 + specifier: ^0.0.25 18 + version: 0.0.25 19 + '@atproto/lexicon': 20 + specifier: ^0.6.2 21 + version: 0.6.2 22 + '@atproto/tap': 23 + specifier: ^0.2.13 24 + version: 0.2.13 25 + '@hono/node-server': 26 + specifier: ^2.0.1 27 + version: 2.0.1(hono@4.12.16) 28 + '@std/uuid': 29 + specifier: jsr:^1.1.1 30 + version: '@jsr/std__uuid@1.1.1' 31 + dotenv: 32 + specifier: ^17.4.2 33 + version: 17.4.2 34 + drizzle-orm: 35 + specifier: ^0.45.2 36 + version: 0.45.2(@types/pg@8.20.0)(pg@8.20.0) 37 + hono: 38 + specifier: ^4.12.16 39 + version: 4.12.16 40 + pg: 41 + specifier: ^8.20.0 42 + version: 8.20.0 43 + zod: 44 + specifier: ^4.4.1 45 + version: 4.4.2 46 + devDependencies: 47 + '@types/pg': 48 + specifier: ^8.20.0 49 + version: 8.20.0 50 + drizzle-kit: 51 + specifier: ^0.31.10 52 + version: 0.31.10 53 + tsx: 54 + specifier: ^4.21.0 55 + version: 4.21.0 56 + 57 + db: {} 58 + 59 + tap: {} 60 + 61 + packages: 62 + 63 + '@atproto-labs/did-resolver@0.2.6': 64 + resolution: {integrity: sha512-2K1bC04nI2fmgNcvof+yA28IhGlpWn2JKYlPa7To9JTKI45FINCGkQSGiL2nyXlyzDJJ34fZ1aq6/IRFIOIiqg==, tarball: https://registry.npmjs.org/@atproto-labs/did-resolver/-/did-resolver-0.2.6.tgz} 65 + 66 + '@atproto-labs/fetch@0.2.3': 67 + resolution: {integrity: sha512-NZtbJOCbxKUFRFKMpamT38PUQMY0hX0p7TG5AEYOPhZKZEP7dHZ1K2s1aB8MdVH0qxmqX7nQleNrrvLf09Zfdw==, tarball: https://registry.npmjs.org/@atproto-labs/fetch/-/fetch-0.2.3.tgz} 68 + 69 + '@atproto-labs/pipe@0.1.1': 70 + resolution: {integrity: sha512-hdNw2oUs2B6BN1lp+32pF7cp8EMKuIN5Qok2Vvv/aOpG/3tNSJ9YkvfI0k6Zd188LeDDYRUpYpxcoFIcGH/FNg==, tarball: https://registry.npmjs.org/@atproto-labs/pipe/-/pipe-0.1.1.tgz} 71 + 72 + '@atproto-labs/simple-store-memory@0.1.4': 73 + resolution: {integrity: sha512-3mKY4dP8I7yKPFj9VKpYyCRzGJOi5CEpOLPlRhoJyLmgs3J4RzDrjn323Oakjz2Aj2JzRU/AIvWRAZVhpYNJHw==, tarball: https://registry.npmjs.org/@atproto-labs/simple-store-memory/-/simple-store-memory-0.1.4.tgz} 74 + 75 + '@atproto-labs/simple-store@0.3.0': 76 + resolution: {integrity: sha512-nOb6ONKBRJHRlukW1sVawUkBqReLlLx6hT35VS3imaNPwiXDxLnTK7lxw3Lrl9k5yugSBDQAkZAq3MPTEFSUBQ==, tarball: https://registry.npmjs.org/@atproto-labs/simple-store/-/simple-store-0.3.0.tgz} 77 + 78 + '@atproto/common-web@0.4.21': 79 + resolution: {integrity: sha512-Odq+wdk3YNasGCjjlpl3bCIPvqYHige5DLfMkIffNv/2PI/iIj5ZvAvMvJlJ59OhReKSxtpI0invx5UQPc3+fw==, tarball: https://registry.npmjs.org/@atproto/common-web/-/common-web-0.4.21.tgz} 80 + 81 + '@atproto/common@0.5.16': 82 + resolution: {integrity: sha512-DTWgaVlDJN3zDxJ3agZK3pbiSZc+z8QQe9iy15sIuorLrceIp4kHXMO/QqjWBXnmLVTd6+/5BVDzex5amYc0rg==, tarball: https://registry.npmjs.org/@atproto/common/-/common-0.5.16.tgz} 83 + engines: {node: '>=18.7.0'} 84 + 85 + '@atproto/crypto@0.4.5': 86 + resolution: {integrity: sha512-n40aKkMoCatP0u9Yvhrdk6fXyOHFDDbkdm4h4HCyWW+KlKl8iXfD5iV+ECq+w5BM+QH25aIpt3/j6EUNerhLxw==, tarball: https://registry.npmjs.org/@atproto/crypto/-/crypto-0.4.5.tgz} 87 + engines: {node: '>=18.7.0'} 88 + 89 + '@atproto/did@0.3.0': 90 + resolution: {integrity: sha512-raUPzUGegtW/6OxwCmM8bhZvuIMzxG5t9oWsth6Tp91Kb5fTnHV2h/KKNF1C82doeA4BdXCErTyg7ISwLbQkzA==, tarball: https://registry.npmjs.org/@atproto/did/-/did-0.3.0.tgz} 91 + 92 + '@atproto/lex-builder@0.0.22': 93 + resolution: {integrity: sha512-XwnOloOS5VMkHmx3ZXHzNOh5NKx8F4aUKw/oRxKe028YWOCLiKu20fWQ11f0o8GHczKou5i6/8Qd89JRSCpibA==, tarball: https://registry.npmjs.org/@atproto/lex-builder/-/lex-builder-0.0.22.tgz} 94 + 95 + '@atproto/lex-cbor@0.0.16': 96 + resolution: {integrity: sha512-x3NTvOX5/4Wh7uk8RNJpUJqZjcWRSUYDYRJ6VZPLmp/CAnsMySmBAinBu/dva/1hqS3C1oiYz258x6bRYpKJ4w==, tarball: https://registry.npmjs.org/@atproto/lex-cbor/-/lex-cbor-0.0.16.tgz} 97 + 98 + '@atproto/lex-client@0.0.20': 99 + resolution: {integrity: sha512-K6x+kGWs67olnv1sEasI4NqlUJ+Gd1N9Rv1c6WkIqQnZff8WF1HDUyg3SpmGcYBG4pPPoeCmY5c9go/Box8OQA==, tarball: https://registry.npmjs.org/@atproto/lex-client/-/lex-client-0.0.20.tgz} 100 + 101 + '@atproto/lex-data@0.0.15': 102 + resolution: {integrity: sha512-ZsbGiaM5S3CnGrcTMbDGON3bLZzCi/Mx9UvcMREKSRujnF68eHgMiXxJqvykP7+QpOX6tYCK93axZkuJVhtSEw==, tarball: https://registry.npmjs.org/@atproto/lex-data/-/lex-data-0.0.15.tgz} 103 + 104 + '@atproto/lex-document@0.0.20': 105 + resolution: {integrity: sha512-DO/ZK9sJTGbFUs99zUqJ60KXJID+NM0crMyeSc9G1v/u6j+WPpA3bFAVHNq0322KpINfL5izL5JmT4eUyt3HeQ==, tarball: https://registry.npmjs.org/@atproto/lex-document/-/lex-document-0.0.20.tgz} 106 + 107 + '@atproto/lex-installer@0.0.25': 108 + resolution: {integrity: sha512-KdSvojycYP7JQ+ejFnZdNwL1QJy8R8qoNNiwgrvCuikST2lTxivm7X744hstXJ2fo/EnOvoXwho9gkVaJAhIaQ==, tarball: https://registry.npmjs.org/@atproto/lex-installer/-/lex-installer-0.0.25.tgz} 109 + 110 + '@atproto/lex-json@0.0.16': 111 + resolution: {integrity: sha512-IgLgQ0krshVlrIYZ+heTBDbCnM3LmAgWvsaYn5MxvKA3LcBot3PG3ptdO8VOweVZ+WgCLuo39cz9EbUmIbqdtg==, tarball: https://registry.npmjs.org/@atproto/lex-json/-/lex-json-0.0.16.tgz} 112 + 113 + '@atproto/lex-resolver@0.0.22': 114 + resolution: {integrity: sha512-D2a1RHxuJSgMZGUy5SZNar+Ay5X3JHOGhP83CqbJSYLy/HMKthACobeP/h0yb7/ZiMCNPP0TP5XMXazaRv+spQ==, tarball: https://registry.npmjs.org/@atproto/lex-resolver/-/lex-resolver-0.0.22.tgz} 115 + 116 + '@atproto/lex-schema@0.0.19': 117 + resolution: {integrity: sha512-rEVTnbgYx4FwcvfrfnuACXvBcdkb4wqSOALG9leW302YIPB+HLRSwpBVC0iLun+yozEKg7BJdwiS0bvfje6tcQ==, tarball: https://registry.npmjs.org/@atproto/lex-schema/-/lex-schema-0.0.19.tgz} 118 + 119 + '@atproto/lex@0.0.25': 120 + resolution: {integrity: sha512-kZk/Fjwpt7rz+XeS9D1jCdG14q8+FXdIOdlFWzXDbTzYxKE6Y3DBZablNgt1kI5ePNe3HYBNsdLSpdXusr8qzA==, tarball: https://registry.npmjs.org/@atproto/lex/-/lex-0.0.25.tgz} 121 + hasBin: true 122 + 123 + '@atproto/lexicon@0.6.2': 124 + resolution: {integrity: sha512-p3Ly6hinVZW0ETuAXZMeUGwuMm3g8HvQMQ41yyEE6AL0hAkfeKFaZKos6BdBrr6CjkpbrDZqE8M+5+QOceysMw==, tarball: https://registry.npmjs.org/@atproto/lexicon/-/lexicon-0.6.2.tgz} 125 + 126 + '@atproto/repo@0.9.1': 127 + resolution: {integrity: sha512-++MUbILqVraIpTiTvixGZK9RK/fIfa2nQvRzT1mrSX6Kd/r1XKTzqz0wCfZkSNU+MsWmQPkvmmaykYBE00RSgg==, tarball: https://registry.npmjs.org/@atproto/repo/-/repo-0.9.1.tgz} 128 + engines: {node: '>=18.7.0'} 129 + 130 + '@atproto/syntax@0.5.4': 131 + resolution: {integrity: sha512-9XJOpMAgsGFxMEIp8nJ8AIWv+krrY1xQMj+wULbbXhQztQV+9aZ0TbG9Jtn3Op2or8Kr6OqyWR4ga9Z189kKDw==, tarball: https://registry.npmjs.org/@atproto/syntax/-/syntax-0.5.4.tgz} 132 + 133 + '@atproto/tap@0.2.13': 134 + resolution: {integrity: sha512-nFtb1cWSFWFJghEzWxqzVYiOwnBPHjb4T3x3eWvp0n2lsmac+xIcZRvCWu8tkX+eqzQcc2YFj9xt/MSWMFWcXA==, tarball: https://registry.npmjs.org/@atproto/tap/-/tap-0.2.13.tgz} 135 + engines: {node: '>=18.7.0'} 136 + 137 + '@atproto/ws-client@0.0.4': 138 + resolution: {integrity: sha512-dox1XIymuC7/ZRhUqKezIGgooZS45C6vHCfu0PnWjfvsLCK2kAlnvX4IBkA/WpcoijDhQ9ejChnFbo/sLmgvAg==, tarball: https://registry.npmjs.org/@atproto/ws-client/-/ws-client-0.0.4.tgz} 139 + engines: {node: '>=18.7.0'} 140 + 141 + '@drizzle-team/brocli@0.10.2': 142 + resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==, tarball: https://registry.npmjs.org/@drizzle-team/brocli/-/brocli-0.10.2.tgz} 143 + 144 + '@esbuild-kit/core-utils@3.3.2': 145 + resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==, tarball: https://registry.npmjs.org/@esbuild-kit/core-utils/-/core-utils-3.3.2.tgz} 146 + deprecated: 'Merged into tsx: https://tsx.is' 147 + 148 + '@esbuild-kit/esm-loader@2.6.5': 149 + resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==, tarball: https://registry.npmjs.org/@esbuild-kit/esm-loader/-/esm-loader-2.6.5.tgz} 150 + deprecated: 'Merged into tsx: https://tsx.is' 151 + 152 + '@esbuild/aix-ppc64@0.25.12': 153 + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==, tarball: https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz} 154 + engines: {node: '>=18'} 155 + cpu: [ppc64] 156 + os: [aix] 157 + 158 + '@esbuild/aix-ppc64@0.27.7': 159 + resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==, tarball: https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz} 160 + engines: {node: '>=18'} 161 + cpu: [ppc64] 162 + os: [aix] 163 + 164 + '@esbuild/android-arm64@0.18.20': 165 + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==, tarball: https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz} 166 + engines: {node: '>=12'} 167 + cpu: [arm64] 168 + os: [android] 169 + 170 + '@esbuild/android-arm64@0.25.12': 171 + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==, tarball: https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz} 172 + engines: {node: '>=18'} 173 + cpu: [arm64] 174 + os: [android] 175 + 176 + '@esbuild/android-arm64@0.27.7': 177 + resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==, tarball: https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz} 178 + engines: {node: '>=18'} 179 + cpu: [arm64] 180 + os: [android] 181 + 182 + '@esbuild/android-arm@0.18.20': 183 + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==, tarball: https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz} 184 + engines: {node: '>=12'} 185 + cpu: [arm] 186 + os: [android] 187 + 188 + '@esbuild/android-arm@0.25.12': 189 + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==, tarball: https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz} 190 + engines: {node: '>=18'} 191 + cpu: [arm] 192 + os: [android] 193 + 194 + '@esbuild/android-arm@0.27.7': 195 + resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==, tarball: https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz} 196 + engines: {node: '>=18'} 197 + cpu: [arm] 198 + os: [android] 199 + 200 + '@esbuild/android-x64@0.18.20': 201 + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==, tarball: https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz} 202 + engines: {node: '>=12'} 203 + cpu: [x64] 204 + os: [android] 205 + 206 + '@esbuild/android-x64@0.25.12': 207 + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==, tarball: https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz} 208 + engines: {node: '>=18'} 209 + cpu: [x64] 210 + os: [android] 211 + 212 + '@esbuild/android-x64@0.27.7': 213 + resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==, tarball: https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz} 214 + engines: {node: '>=18'} 215 + cpu: [x64] 216 + os: [android] 217 + 218 + '@esbuild/darwin-arm64@0.18.20': 219 + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==, tarball: https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz} 220 + engines: {node: '>=12'} 221 + cpu: [arm64] 222 + os: [darwin] 223 + 224 + '@esbuild/darwin-arm64@0.25.12': 225 + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==, tarball: https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz} 226 + engines: {node: '>=18'} 227 + cpu: [arm64] 228 + os: [darwin] 229 + 230 + '@esbuild/darwin-arm64@0.27.7': 231 + resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==, tarball: https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz} 232 + engines: {node: '>=18'} 233 + cpu: [arm64] 234 + os: [darwin] 235 + 236 + '@esbuild/darwin-x64@0.18.20': 237 + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==, tarball: https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz} 238 + engines: {node: '>=12'} 239 + cpu: [x64] 240 + os: [darwin] 241 + 242 + '@esbuild/darwin-x64@0.25.12': 243 + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==, tarball: https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz} 244 + engines: {node: '>=18'} 245 + cpu: [x64] 246 + os: [darwin] 247 + 248 + '@esbuild/darwin-x64@0.27.7': 249 + resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==, tarball: https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz} 250 + engines: {node: '>=18'} 251 + cpu: [x64] 252 + os: [darwin] 253 + 254 + '@esbuild/freebsd-arm64@0.18.20': 255 + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==, tarball: https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz} 256 + engines: {node: '>=12'} 257 + cpu: [arm64] 258 + os: [freebsd] 259 + 260 + '@esbuild/freebsd-arm64@0.25.12': 261 + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==, tarball: https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz} 262 + engines: {node: '>=18'} 263 + cpu: [arm64] 264 + os: [freebsd] 265 + 266 + '@esbuild/freebsd-arm64@0.27.7': 267 + resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==, tarball: https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz} 268 + engines: {node: '>=18'} 269 + cpu: [arm64] 270 + os: [freebsd] 271 + 272 + '@esbuild/freebsd-x64@0.18.20': 273 + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==, tarball: https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz} 274 + engines: {node: '>=12'} 275 + cpu: [x64] 276 + os: [freebsd] 277 + 278 + '@esbuild/freebsd-x64@0.25.12': 279 + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==, tarball: https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz} 280 + engines: {node: '>=18'} 281 + cpu: [x64] 282 + os: [freebsd] 283 + 284 + '@esbuild/freebsd-x64@0.27.7': 285 + resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==, tarball: https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz} 286 + engines: {node: '>=18'} 287 + cpu: [x64] 288 + os: [freebsd] 289 + 290 + '@esbuild/linux-arm64@0.18.20': 291 + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==, tarball: https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz} 292 + engines: {node: '>=12'} 293 + cpu: [arm64] 294 + os: [linux] 295 + 296 + '@esbuild/linux-arm64@0.25.12': 297 + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==, tarball: https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz} 298 + engines: {node: '>=18'} 299 + cpu: [arm64] 300 + os: [linux] 301 + 302 + '@esbuild/linux-arm64@0.27.7': 303 + resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==, tarball: https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz} 304 + engines: {node: '>=18'} 305 + cpu: [arm64] 306 + os: [linux] 307 + 308 + '@esbuild/linux-arm@0.18.20': 309 + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==, tarball: https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz} 310 + engines: {node: '>=12'} 311 + cpu: [arm] 312 + os: [linux] 313 + 314 + '@esbuild/linux-arm@0.25.12': 315 + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==, tarball: https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz} 316 + engines: {node: '>=18'} 317 + cpu: [arm] 318 + os: [linux] 319 + 320 + '@esbuild/linux-arm@0.27.7': 321 + resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==, tarball: https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz} 322 + engines: {node: '>=18'} 323 + cpu: [arm] 324 + os: [linux] 325 + 326 + '@esbuild/linux-ia32@0.18.20': 327 + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==, tarball: https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz} 328 + engines: {node: '>=12'} 329 + cpu: [ia32] 330 + os: [linux] 331 + 332 + '@esbuild/linux-ia32@0.25.12': 333 + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==, tarball: https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz} 334 + engines: {node: '>=18'} 335 + cpu: [ia32] 336 + os: [linux] 337 + 338 + '@esbuild/linux-ia32@0.27.7': 339 + resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==, tarball: https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz} 340 + engines: {node: '>=18'} 341 + cpu: [ia32] 342 + os: [linux] 343 + 344 + '@esbuild/linux-loong64@0.18.20': 345 + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==, tarball: https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz} 346 + engines: {node: '>=12'} 347 + cpu: [loong64] 348 + os: [linux] 349 + 350 + '@esbuild/linux-loong64@0.25.12': 351 + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==, tarball: https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz} 352 + engines: {node: '>=18'} 353 + cpu: [loong64] 354 + os: [linux] 355 + 356 + '@esbuild/linux-loong64@0.27.7': 357 + resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==, tarball: https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz} 358 + engines: {node: '>=18'} 359 + cpu: [loong64] 360 + os: [linux] 361 + 362 + '@esbuild/linux-mips64el@0.18.20': 363 + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==, tarball: https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz} 364 + engines: {node: '>=12'} 365 + cpu: [mips64el] 366 + os: [linux] 367 + 368 + '@esbuild/linux-mips64el@0.25.12': 369 + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==, tarball: https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz} 370 + engines: {node: '>=18'} 371 + cpu: [mips64el] 372 + os: [linux] 373 + 374 + '@esbuild/linux-mips64el@0.27.7': 375 + resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==, tarball: https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz} 376 + engines: {node: '>=18'} 377 + cpu: [mips64el] 378 + os: [linux] 379 + 380 + '@esbuild/linux-ppc64@0.18.20': 381 + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==, tarball: https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz} 382 + engines: {node: '>=12'} 383 + cpu: [ppc64] 384 + os: [linux] 385 + 386 + '@esbuild/linux-ppc64@0.25.12': 387 + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==, tarball: https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz} 388 + engines: {node: '>=18'} 389 + cpu: [ppc64] 390 + os: [linux] 391 + 392 + '@esbuild/linux-ppc64@0.27.7': 393 + resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==, tarball: https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz} 394 + engines: {node: '>=18'} 395 + cpu: [ppc64] 396 + os: [linux] 397 + 398 + '@esbuild/linux-riscv64@0.18.20': 399 + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==, tarball: https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz} 400 + engines: {node: '>=12'} 401 + cpu: [riscv64] 402 + os: [linux] 403 + 404 + '@esbuild/linux-riscv64@0.25.12': 405 + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==, tarball: https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz} 406 + engines: {node: '>=18'} 407 + cpu: [riscv64] 408 + os: [linux] 409 + 410 + '@esbuild/linux-riscv64@0.27.7': 411 + resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==, tarball: https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz} 412 + engines: {node: '>=18'} 413 + cpu: [riscv64] 414 + os: [linux] 415 + 416 + '@esbuild/linux-s390x@0.18.20': 417 + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==, tarball: https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz} 418 + engines: {node: '>=12'} 419 + cpu: [s390x] 420 + os: [linux] 421 + 422 + '@esbuild/linux-s390x@0.25.12': 423 + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==, tarball: https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz} 424 + engines: {node: '>=18'} 425 + cpu: [s390x] 426 + os: [linux] 427 + 428 + '@esbuild/linux-s390x@0.27.7': 429 + resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==, tarball: https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz} 430 + engines: {node: '>=18'} 431 + cpu: [s390x] 432 + os: [linux] 433 + 434 + '@esbuild/linux-x64@0.18.20': 435 + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==, tarball: https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz} 436 + engines: {node: '>=12'} 437 + cpu: [x64] 438 + os: [linux] 439 + 440 + '@esbuild/linux-x64@0.25.12': 441 + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==, tarball: https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz} 442 + engines: {node: '>=18'} 443 + cpu: [x64] 444 + os: [linux] 445 + 446 + '@esbuild/linux-x64@0.27.7': 447 + resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==, tarball: https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz} 448 + engines: {node: '>=18'} 449 + cpu: [x64] 450 + os: [linux] 451 + 452 + '@esbuild/netbsd-arm64@0.25.12': 453 + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==, tarball: https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz} 454 + engines: {node: '>=18'} 455 + cpu: [arm64] 456 + os: [netbsd] 457 + 458 + '@esbuild/netbsd-arm64@0.27.7': 459 + resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==, tarball: https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz} 460 + engines: {node: '>=18'} 461 + cpu: [arm64] 462 + os: [netbsd] 463 + 464 + '@esbuild/netbsd-x64@0.18.20': 465 + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==, tarball: https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz} 466 + engines: {node: '>=12'} 467 + cpu: [x64] 468 + os: [netbsd] 469 + 470 + '@esbuild/netbsd-x64@0.25.12': 471 + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==, tarball: https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz} 472 + engines: {node: '>=18'} 473 + cpu: [x64] 474 + os: [netbsd] 475 + 476 + '@esbuild/netbsd-x64@0.27.7': 477 + resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==, tarball: https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz} 478 + engines: {node: '>=18'} 479 + cpu: [x64] 480 + os: [netbsd] 481 + 482 + '@esbuild/openbsd-arm64@0.25.12': 483 + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==, tarball: https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz} 484 + engines: {node: '>=18'} 485 + cpu: [arm64] 486 + os: [openbsd] 487 + 488 + '@esbuild/openbsd-arm64@0.27.7': 489 + resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==, tarball: https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz} 490 + engines: {node: '>=18'} 491 + cpu: [arm64] 492 + os: [openbsd] 493 + 494 + '@esbuild/openbsd-x64@0.18.20': 495 + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==, tarball: https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz} 496 + engines: {node: '>=12'} 497 + cpu: [x64] 498 + os: [openbsd] 499 + 500 + '@esbuild/openbsd-x64@0.25.12': 501 + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==, tarball: https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz} 502 + engines: {node: '>=18'} 503 + cpu: [x64] 504 + os: [openbsd] 505 + 506 + '@esbuild/openbsd-x64@0.27.7': 507 + resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==, tarball: https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz} 508 + engines: {node: '>=18'} 509 + cpu: [x64] 510 + os: [openbsd] 511 + 512 + '@esbuild/openharmony-arm64@0.25.12': 513 + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==, tarball: https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz} 514 + engines: {node: '>=18'} 515 + cpu: [arm64] 516 + os: [openharmony] 517 + 518 + '@esbuild/openharmony-arm64@0.27.7': 519 + resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==, tarball: https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz} 520 + engines: {node: '>=18'} 521 + cpu: [arm64] 522 + os: [openharmony] 523 + 524 + '@esbuild/sunos-x64@0.18.20': 525 + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==, tarball: https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz} 526 + engines: {node: '>=12'} 527 + cpu: [x64] 528 + os: [sunos] 529 + 530 + '@esbuild/sunos-x64@0.25.12': 531 + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==, tarball: https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz} 532 + engines: {node: '>=18'} 533 + cpu: [x64] 534 + os: [sunos] 535 + 536 + '@esbuild/sunos-x64@0.27.7': 537 + resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==, tarball: https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz} 538 + engines: {node: '>=18'} 539 + cpu: [x64] 540 + os: [sunos] 541 + 542 + '@esbuild/win32-arm64@0.18.20': 543 + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==, tarball: https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz} 544 + engines: {node: '>=12'} 545 + cpu: [arm64] 546 + os: [win32] 547 + 548 + '@esbuild/win32-arm64@0.25.12': 549 + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==, tarball: https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz} 550 + engines: {node: '>=18'} 551 + cpu: [arm64] 552 + os: [win32] 553 + 554 + '@esbuild/win32-arm64@0.27.7': 555 + resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==, tarball: https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz} 556 + engines: {node: '>=18'} 557 + cpu: [arm64] 558 + os: [win32] 559 + 560 + '@esbuild/win32-ia32@0.18.20': 561 + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==, tarball: https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz} 562 + engines: {node: '>=12'} 563 + cpu: [ia32] 564 + os: [win32] 565 + 566 + '@esbuild/win32-ia32@0.25.12': 567 + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==, tarball: https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz} 568 + engines: {node: '>=18'} 569 + cpu: [ia32] 570 + os: [win32] 571 + 572 + '@esbuild/win32-ia32@0.27.7': 573 + resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==, tarball: https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz} 574 + engines: {node: '>=18'} 575 + cpu: [ia32] 576 + os: [win32] 577 + 578 + '@esbuild/win32-x64@0.18.20': 579 + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==, tarball: https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz} 580 + engines: {node: '>=12'} 581 + cpu: [x64] 582 + os: [win32] 583 + 584 + '@esbuild/win32-x64@0.25.12': 585 + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==, tarball: https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz} 586 + engines: {node: '>=18'} 587 + cpu: [x64] 588 + os: [win32] 589 + 590 + '@esbuild/win32-x64@0.27.7': 591 + resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==, tarball: https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz} 592 + engines: {node: '>=18'} 593 + cpu: [x64] 594 + os: [win32] 595 + 596 + '@hono/node-server@2.0.1': 597 + resolution: {integrity: sha512-jI9yMDyFpqBeSighf/zlXnQG/nl9AyBc6aAgy4XtxJMyt/CNyJpvPfzDD+bCc2zAOmhhqtF6TnmIaY+xV4mIrw==, tarball: https://registry.npmjs.org/@hono/node-server/-/node-server-2.0.1.tgz} 598 + engines: {node: '>=20'} 599 + peerDependencies: 600 + hono: ^4 601 + 602 + '@jsr/std__bytes@1.0.6': 603 + resolution: {integrity: sha512-St6yKggjFGhxS52IFLJWvkchRFbAKg2Xh8UxA4S1EGz7GJ2Ui+ssDDldj/w2c8vCxvl6qgR0HaYbKeFJNqujmA==, tarball: https://npm.jsr.io/~/11/@jsr/std__bytes/1.0.6.tgz} 604 + 605 + '@jsr/std__crypto@1.1.0': 606 + resolution: {integrity: sha512-3k5X+V01YqCgIu3tuvS6saFVUn39p+Xe0ITMigwyoDDZsRMUsZcyjwxJpyL6TZF7NFI5Do7alSsHQElZQH1OJg==, tarball: https://npm.jsr.io/~/11/@jsr/std__crypto/1.1.0.tgz} 607 + 608 + '@jsr/std__uuid@1.1.1': 609 + resolution: {integrity: sha512-LRHNRnFWWC2sGe8bxhDOZgZsomTEBepvjcG/sPmwCGH/4sT0JlcUWoxM6Gf5I01B6BRVMJdEjCY5gPu0buJqWQ==, tarball: https://npm.jsr.io/~/11/@jsr/std__uuid/1.1.1.tgz} 610 + 611 + '@noble/curves@1.9.7': 612 + resolution: {integrity: sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==, tarball: https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz} 613 + engines: {node: ^14.21.3 || >=16} 614 + 615 + '@noble/hashes@1.8.0': 616 + resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==, tarball: https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz} 617 + engines: {node: ^14.21.3 || >=16} 618 + 619 + '@standard-schema/spec@1.1.0': 620 + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==, tarball: https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz} 621 + 622 + '@ts-morph/common@0.28.1': 623 + resolution: {integrity: sha512-W74iWf7ILp1ZKNYXY5qbddNaml7e9Sedv5lvU1V8lftlitkc9Pq1A+jlH23ltDgWYeZFFEqGCD1Ies9hqu3O+g==, tarball: https://registry.npmjs.org/@ts-morph/common/-/common-0.28.1.tgz} 624 + 625 + '@types/node@25.6.0': 626 + resolution: {integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==, tarball: https://registry.npmjs.org/@types/node/-/node-25.6.0.tgz} 627 + 628 + '@types/pg@8.20.0': 629 + resolution: {integrity: sha512-bEPFOaMAHTEP1EzpvHTbmwR8UsFyHSKsRisLIHVMXnpNefSbGA1bD6CVy+qKjGSqmZqNqBDV2azOBo8TgkcVow==, tarball: https://registry.npmjs.org/@types/pg/-/pg-8.20.0.tgz} 630 + 631 + abort-controller@3.0.0: 632 + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==, tarball: https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz} 633 + engines: {node: '>=6.5'} 634 + 635 + ansi-regex@5.0.1: 636 + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, tarball: https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz} 637 + engines: {node: '>=8'} 638 + 639 + ansi-styles@4.3.0: 640 + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, tarball: https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz} 641 + engines: {node: '>=8'} 642 + 643 + atomic-sleep@1.0.0: 644 + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==, tarball: https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz} 645 + engines: {node: '>=8.0.0'} 646 + 647 + balanced-match@4.0.4: 648 + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==, tarball: https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz} 649 + engines: {node: 18 || 20 || >=22} 650 + 651 + base64-js@1.5.1: 652 + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==, tarball: https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz} 653 + 654 + brace-expansion@5.0.5: 655 + resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==, tarball: https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz} 656 + engines: {node: 18 || 20 || >=22} 657 + 658 + buffer-from@1.1.2: 659 + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==, tarball: https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz} 660 + 661 + buffer@6.0.3: 662 + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==, tarball: https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz} 663 + 664 + cliui@8.0.1: 665 + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==, tarball: https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz} 666 + engines: {node: '>=12'} 667 + 668 + code-block-writer@13.0.3: 669 + resolution: {integrity: sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==, tarball: https://registry.npmjs.org/code-block-writer/-/code-block-writer-13.0.3.tgz} 670 + 671 + color-convert@2.0.1: 672 + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, tarball: https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz} 673 + engines: {node: '>=7.0.0'} 674 + 675 + color-name@1.1.4: 676 + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, tarball: https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz} 677 + 678 + core-js@3.49.0: 679 + resolution: {integrity: sha512-es1U2+YTtzpwkxVLwAFdSpaIMyQaq0PBgm3YD1W3Qpsn1NAmO3KSgZfu+oGSWVu6NvLHoHCV/aYcsE5wiB7ALg==, tarball: https://registry.npmjs.org/core-js/-/core-js-3.49.0.tgz} 680 + 681 + dotenv@17.4.2: 682 + resolution: {integrity: sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==, tarball: https://registry.npmjs.org/dotenv/-/dotenv-17.4.2.tgz} 683 + engines: {node: '>=12'} 684 + 685 + drizzle-kit@0.31.10: 686 + resolution: {integrity: sha512-7OZcmQUrdGI+DUNNsKBn1aW8qSoKuTH7d0mYgSP8bAzdFzKoovxEFnoGQp2dVs82EOJeYycqRtciopszwUf8bw==, tarball: https://registry.npmjs.org/drizzle-kit/-/drizzle-kit-0.31.10.tgz} 687 + hasBin: true 688 + 689 + drizzle-orm@0.45.2: 690 + resolution: {integrity: sha512-kY0BSaTNYWnoDMVoyY8uxmyHjpJW1geOmBMdSSicKo9CIIWkSxMIj2rkeSR51b8KAPB7m+qysjuHme5nKP+E5Q==, tarball: https://registry.npmjs.org/drizzle-orm/-/drizzle-orm-0.45.2.tgz} 691 + peerDependencies: 692 + '@aws-sdk/client-rds-data': '>=3' 693 + '@cloudflare/workers-types': '>=4' 694 + '@electric-sql/pglite': '>=0.2.0' 695 + '@libsql/client': '>=0.10.0' 696 + '@libsql/client-wasm': '>=0.10.0' 697 + '@neondatabase/serverless': '>=0.10.0' 698 + '@op-engineering/op-sqlite': '>=2' 699 + '@opentelemetry/api': ^1.4.1 700 + '@planetscale/database': '>=1.13' 701 + '@prisma/client': '*' 702 + '@tidbcloud/serverless': '*' 703 + '@types/better-sqlite3': '*' 704 + '@types/pg': '*' 705 + '@types/sql.js': '*' 706 + '@upstash/redis': '>=1.34.7' 707 + '@vercel/postgres': '>=0.8.0' 708 + '@xata.io/client': '*' 709 + better-sqlite3: '>=7' 710 + bun-types: '*' 711 + expo-sqlite: '>=14.0.0' 712 + gel: '>=2' 713 + knex: '*' 714 + kysely: '*' 715 + mysql2: '>=2' 716 + pg: '>=8' 717 + postgres: '>=3' 718 + prisma: '*' 719 + sql.js: '>=1' 720 + sqlite3: '>=5' 721 + peerDependenciesMeta: 722 + '@aws-sdk/client-rds-data': 723 + optional: true 724 + '@cloudflare/workers-types': 725 + optional: true 726 + '@electric-sql/pglite': 727 + optional: true 728 + '@libsql/client': 729 + optional: true 730 + '@libsql/client-wasm': 731 + optional: true 732 + '@neondatabase/serverless': 733 + optional: true 734 + '@op-engineering/op-sqlite': 735 + optional: true 736 + '@opentelemetry/api': 737 + optional: true 738 + '@planetscale/database': 739 + optional: true 740 + '@prisma/client': 741 + optional: true 742 + '@tidbcloud/serverless': 743 + optional: true 744 + '@types/better-sqlite3': 745 + optional: true 746 + '@types/pg': 747 + optional: true 748 + '@types/sql.js': 749 + optional: true 750 + '@upstash/redis': 751 + optional: true 752 + '@vercel/postgres': 753 + optional: true 754 + '@xata.io/client': 755 + optional: true 756 + better-sqlite3: 757 + optional: true 758 + bun-types: 759 + optional: true 760 + expo-sqlite: 761 + optional: true 762 + gel: 763 + optional: true 764 + knex: 765 + optional: true 766 + kysely: 767 + optional: true 768 + mysql2: 769 + optional: true 770 + pg: 771 + optional: true 772 + postgres: 773 + optional: true 774 + prisma: 775 + optional: true 776 + sql.js: 777 + optional: true 778 + sqlite3: 779 + optional: true 780 + 781 + emoji-regex@8.0.0: 782 + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==, tarball: https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz} 783 + 784 + esbuild@0.18.20: 785 + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==, tarball: https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz} 786 + engines: {node: '>=12'} 787 + hasBin: true 788 + 789 + esbuild@0.25.12: 790 + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==, tarball: https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz} 791 + engines: {node: '>=18'} 792 + hasBin: true 793 + 794 + esbuild@0.27.7: 795 + resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==, tarball: https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz} 796 + engines: {node: '>=18'} 797 + hasBin: true 798 + 799 + escalade@3.2.0: 800 + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==, tarball: https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz} 801 + engines: {node: '>=6'} 802 + 803 + event-target-shim@5.0.1: 804 + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==, tarball: https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz} 805 + engines: {node: '>=6'} 806 + 807 + events@3.3.0: 808 + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==, tarball: https://registry.npmjs.org/events/-/events-3.3.0.tgz} 809 + engines: {node: '>=0.8.x'} 810 + 811 + fast-redact@3.5.0: 812 + resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==, tarball: https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz} 813 + engines: {node: '>=6'} 814 + 815 + fdir@6.5.0: 816 + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==, tarball: https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz} 817 + engines: {node: '>=12.0.0'} 818 + peerDependencies: 819 + picomatch: ^3 || ^4 820 + peerDependenciesMeta: 821 + picomatch: 822 + optional: true 823 + 824 + fsevents@2.3.3: 825 + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, tarball: https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz} 826 + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 827 + os: [darwin] 828 + 829 + get-caller-file@2.0.5: 830 + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==, tarball: https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz} 831 + engines: {node: 6.* || 8.* || >= 10.*} 832 + 833 + get-tsconfig@4.14.0: 834 + resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==, tarball: https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.0.tgz} 835 + 836 + hono@4.12.16: 837 + resolution: {integrity: sha512-jN0ZewiNAWSe5khM3EyCmBb250+b40wWbwNILNfEvq84VREWwOIkuUsFONk/3i3nqkz7Oe1PcpM2mwQEK2L9Kg==, tarball: https://registry.npmjs.org/hono/-/hono-4.12.16.tgz} 838 + engines: {node: '>=16.9.0'} 839 + 840 + ieee754@1.2.1: 841 + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==, tarball: https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz} 842 + 843 + is-fullwidth-code-point@3.0.0: 844 + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, tarball: https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz} 845 + engines: {node: '>=8'} 846 + 847 + iso-datestring-validator@2.2.2: 848 + resolution: {integrity: sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA==, tarball: https://registry.npmjs.org/iso-datestring-validator/-/iso-datestring-validator-2.2.2.tgz} 849 + 850 + lru-cache@10.4.3: 851 + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==, tarball: https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz} 852 + 853 + minimatch@10.2.5: 854 + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==, tarball: https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz} 855 + engines: {node: 18 || 20 || >=22} 856 + 857 + multiformats@9.9.0: 858 + resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==, tarball: https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz} 859 + 860 + on-exit-leak-free@2.1.2: 861 + resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==, tarball: https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz} 862 + engines: {node: '>=14.0.0'} 863 + 864 + path-browserify@1.0.1: 865 + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==, tarball: https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz} 866 + 867 + pg-cloudflare@1.3.0: 868 + resolution: {integrity: sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ==, tarball: https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.3.0.tgz} 869 + 870 + pg-connection-string@2.12.0: 871 + resolution: {integrity: sha512-U7qg+bpswf3Cs5xLzRqbXbQl85ng0mfSV/J0nnA31MCLgvEaAo7CIhmeyrmJpOr7o+zm0rXK+hNnT5l9RHkCkQ==, tarball: https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.12.0.tgz} 872 + 873 + pg-int8@1.0.1: 874 + resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==, tarball: https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz} 875 + engines: {node: '>=4.0.0'} 876 + 877 + pg-pool@3.13.0: 878 + resolution: {integrity: sha512-gB+R+Xud1gLFuRD/QgOIgGOBE2KCQPaPwkzBBGC9oG69pHTkhQeIuejVIk3/cnDyX39av2AxomQiyPT13WKHQA==, tarball: https://registry.npmjs.org/pg-pool/-/pg-pool-3.13.0.tgz} 879 + peerDependencies: 880 + pg: '>=8.0' 881 + 882 + pg-protocol@1.13.0: 883 + resolution: {integrity: sha512-zzdvXfS6v89r6v7OcFCHfHlyG/wvry1ALxZo4LqgUoy7W9xhBDMaqOuMiF3qEV45VqsN6rdlcehHrfDtlCPc8w==, tarball: https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.13.0.tgz} 884 + 885 + pg-types@2.2.0: 886 + resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==, tarball: https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz} 887 + engines: {node: '>=4'} 888 + 889 + pg@8.20.0: 890 + resolution: {integrity: sha512-ldhMxz2r8fl/6QkXnBD3CR9/xg694oT6DZQ2s6c/RI28OjtSOpxnPrUCGOBJ46RCUxcWdx3p6kw/xnDHjKvaRA==, tarball: https://registry.npmjs.org/pg/-/pg-8.20.0.tgz} 891 + engines: {node: '>= 16.0.0'} 892 + peerDependencies: 893 + pg-native: '>=3.0.1' 894 + peerDependenciesMeta: 895 + pg-native: 896 + optional: true 897 + 898 + pgpass@1.0.5: 899 + resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==, tarball: https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz} 900 + 901 + picomatch@4.0.4: 902 + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==, tarball: https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz} 903 + engines: {node: '>=12'} 904 + 905 + pino-abstract-transport@1.2.0: 906 + resolution: {integrity: sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==, tarball: https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.2.0.tgz} 907 + 908 + pino-std-serializers@6.2.2: 909 + resolution: {integrity: sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==, tarball: https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz} 910 + 911 + pino@8.21.0: 912 + resolution: {integrity: sha512-ip4qdzjkAyDDZklUaZkcRFb2iA118H9SgRh8yzTkSQK8HilsOJF7rSY8HoW5+I0M46AZgX/pxbprf2vvzQCE0Q==, tarball: https://registry.npmjs.org/pino/-/pino-8.21.0.tgz} 913 + hasBin: true 914 + 915 + postgres-array@2.0.0: 916 + resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==, tarball: https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz} 917 + engines: {node: '>=4'} 918 + 919 + postgres-bytea@1.0.1: 920 + resolution: {integrity: sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==, tarball: https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.1.tgz} 921 + engines: {node: '>=0.10.0'} 922 + 923 + postgres-date@1.0.7: 924 + resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==, tarball: https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz} 925 + engines: {node: '>=0.10.0'} 926 + 927 + postgres-interval@1.2.0: 928 + resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==, tarball: https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz} 929 + engines: {node: '>=0.10.0'} 930 + 931 + prettier@3.8.3: 932 + resolution: {integrity: sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==, tarball: https://registry.npmjs.org/prettier/-/prettier-3.8.3.tgz} 933 + engines: {node: '>=14'} 934 + hasBin: true 935 + 936 + process-warning@3.0.0: 937 + resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==, tarball: https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz} 938 + 939 + process@0.11.10: 940 + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==, tarball: https://registry.npmjs.org/process/-/process-0.11.10.tgz} 941 + engines: {node: '>= 0.6.0'} 942 + 943 + quick-format-unescaped@4.0.4: 944 + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==, tarball: https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz} 945 + 946 + readable-stream@4.7.0: 947 + resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==, tarball: https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz} 948 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 949 + 950 + real-require@0.2.0: 951 + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==, tarball: https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz} 952 + engines: {node: '>= 12.13.0'} 953 + 954 + require-directory@2.1.1: 955 + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==, tarball: https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz} 956 + engines: {node: '>=0.10.0'} 957 + 958 + resolve-pkg-maps@1.0.0: 959 + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==, tarball: https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz} 960 + 961 + safe-buffer@5.2.1: 962 + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==, tarball: https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz} 963 + 964 + safe-stable-stringify@2.5.0: 965 + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==, tarball: https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz} 966 + engines: {node: '>=10'} 967 + 968 + sonic-boom@3.8.1: 969 + resolution: {integrity: sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==, tarball: https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.8.1.tgz} 970 + 971 + source-map-support@0.5.21: 972 + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==, tarball: https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz} 973 + 974 + source-map@0.6.1: 975 + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, tarball: https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz} 976 + engines: {node: '>=0.10.0'} 977 + 978 + split2@4.2.0: 979 + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==, tarball: https://registry.npmjs.org/split2/-/split2-4.2.0.tgz} 980 + engines: {node: '>= 10.x'} 981 + 982 + string-width@4.2.3: 983 + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==, tarball: https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz} 984 + engines: {node: '>=8'} 985 + 986 + string_decoder@1.3.0: 987 + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==, tarball: https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz} 988 + 989 + strip-ansi@6.0.1: 990 + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, tarball: https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz} 991 + engines: {node: '>=8'} 992 + 993 + thread-stream@2.7.0: 994 + resolution: {integrity: sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw==, tarball: https://registry.npmjs.org/thread-stream/-/thread-stream-2.7.0.tgz} 995 + 996 + tinyglobby@0.2.16: 997 + resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==, tarball: https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz} 998 + engines: {node: '>=12.0.0'} 999 + 1000 + ts-morph@27.0.2: 1001 + resolution: {integrity: sha512-fhUhgeljcrdZ+9DZND1De1029PrE+cMkIP7ooqkLRTrRLTqcki2AstsyJm0vRNbTbVCNJ0idGlbBrfqc7/nA8w==, tarball: https://registry.npmjs.org/ts-morph/-/ts-morph-27.0.2.tgz} 1002 + 1003 + tslib@2.8.1: 1004 + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==, tarball: https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz} 1005 + 1006 + tsx@4.21.0: 1007 + resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==, tarball: https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz} 1008 + engines: {node: '>=18.0.0'} 1009 + hasBin: true 1010 + 1011 + uint8arrays@3.0.0: 1012 + resolution: {integrity: sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==, tarball: https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.0.0.tgz} 1013 + 1014 + undici-types@7.19.2: 1015 + resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==, tarball: https://registry.npmjs.org/undici-types/-/undici-types-7.19.2.tgz} 1016 + 1017 + unicode-segmenter@0.14.5: 1018 + resolution: {integrity: sha512-jHGmj2LUuqDcX3hqY12Ql+uhUTn8huuxNZGq7GvtF6bSybzH3aFgedYu/KTzQStEgt1Ra2F3HxadNXsNjb3m3g==, tarball: https://registry.npmjs.org/unicode-segmenter/-/unicode-segmenter-0.14.5.tgz} 1019 + 1020 + varint@6.0.0: 1021 + resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==, tarball: https://registry.npmjs.org/varint/-/varint-6.0.0.tgz} 1022 + 1023 + wrap-ansi@7.0.0: 1024 + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==, tarball: https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz} 1025 + engines: {node: '>=10'} 1026 + 1027 + ws@8.20.0: 1028 + resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==, tarball: https://registry.npmjs.org/ws/-/ws-8.20.0.tgz} 1029 + engines: {node: '>=10.0.0'} 1030 + peerDependencies: 1031 + bufferutil: ^4.0.1 1032 + utf-8-validate: '>=5.0.2' 1033 + peerDependenciesMeta: 1034 + bufferutil: 1035 + optional: true 1036 + utf-8-validate: 1037 + optional: true 1038 + 1039 + xtend@4.0.2: 1040 + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==, tarball: https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz} 1041 + engines: {node: '>=0.4'} 1042 + 1043 + y18n@5.0.8: 1044 + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==, tarball: https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz} 1045 + engines: {node: '>=10'} 1046 + 1047 + yargs-parser@21.1.1: 1048 + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==, tarball: https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz} 1049 + engines: {node: '>=12'} 1050 + 1051 + yargs@17.7.2: 1052 + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==, tarball: https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz} 1053 + engines: {node: '>=12'} 1054 + 1055 + zod@3.25.76: 1056 + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==, tarball: https://registry.npmjs.org/zod/-/zod-3.25.76.tgz} 1057 + 1058 + zod@4.4.2: 1059 + resolution: {integrity: sha512-IynmDyxsEsb9RKzO3J9+4SxXnl2FTFSzNBaKKaMV6tsSk0rw9gYw9gs+JFCq/qk2LCZ78KDwyj+Z289TijSkUw==, tarball: https://registry.npmjs.org/zod/-/zod-4.4.2.tgz} 1060 + 1061 + snapshots: 1062 + 1063 + '@atproto-labs/did-resolver@0.2.6': 1064 + dependencies: 1065 + '@atproto-labs/fetch': 0.2.3 1066 + '@atproto-labs/pipe': 0.1.1 1067 + '@atproto-labs/simple-store': 0.3.0 1068 + '@atproto-labs/simple-store-memory': 0.1.4 1069 + '@atproto/did': 0.3.0 1070 + zod: 3.25.76 1071 + 1072 + '@atproto-labs/fetch@0.2.3': 1073 + dependencies: 1074 + '@atproto-labs/pipe': 0.1.1 1075 + 1076 + '@atproto-labs/pipe@0.1.1': {} 1077 + 1078 + '@atproto-labs/simple-store-memory@0.1.4': 1079 + dependencies: 1080 + '@atproto-labs/simple-store': 0.3.0 1081 + lru-cache: 10.4.3 1082 + 1083 + '@atproto-labs/simple-store@0.3.0': {} 1084 + 1085 + '@atproto/common-web@0.4.21': 1086 + dependencies: 1087 + '@atproto/lex-data': 0.0.15 1088 + '@atproto/lex-json': 0.0.16 1089 + '@atproto/syntax': 0.5.4 1090 + zod: 3.25.76 1091 + 1092 + '@atproto/common@0.5.16': 1093 + dependencies: 1094 + '@atproto/common-web': 0.4.21 1095 + '@atproto/lex-cbor': 0.0.16 1096 + '@atproto/lex-data': 0.0.15 1097 + multiformats: 9.9.0 1098 + pino: 8.21.0 1099 + 1100 + '@atproto/crypto@0.4.5': 1101 + dependencies: 1102 + '@noble/curves': 1.9.7 1103 + '@noble/hashes': 1.8.0 1104 + uint8arrays: 3.0.0 1105 + 1106 + '@atproto/did@0.3.0': 1107 + dependencies: 1108 + zod: 3.25.76 1109 + 1110 + '@atproto/lex-builder@0.0.22': 1111 + dependencies: 1112 + '@atproto/lex-document': 0.0.20 1113 + '@atproto/lex-schema': 0.0.19 1114 + prettier: 3.8.3 1115 + ts-morph: 27.0.2 1116 + tslib: 2.8.1 1117 + 1118 + '@atproto/lex-cbor@0.0.16': 1119 + dependencies: 1120 + '@atproto/lex-data': 0.0.15 1121 + tslib: 2.8.1 1122 + 1123 + '@atproto/lex-client@0.0.20': 1124 + dependencies: 1125 + '@atproto/lex-data': 0.0.15 1126 + '@atproto/lex-json': 0.0.16 1127 + '@atproto/lex-schema': 0.0.19 1128 + tslib: 2.8.1 1129 + 1130 + '@atproto/lex-data@0.0.15': 1131 + dependencies: 1132 + multiformats: 9.9.0 1133 + tslib: 2.8.1 1134 + uint8arrays: 3.0.0 1135 + unicode-segmenter: 0.14.5 1136 + 1137 + '@atproto/lex-document@0.0.20': 1138 + dependencies: 1139 + '@atproto/lex-schema': 0.0.19 1140 + core-js: 3.49.0 1141 + tslib: 2.8.1 1142 + 1143 + '@atproto/lex-installer@0.0.25': 1144 + dependencies: 1145 + '@atproto/lex-builder': 0.0.22 1146 + '@atproto/lex-cbor': 0.0.16 1147 + '@atproto/lex-data': 0.0.15 1148 + '@atproto/lex-document': 0.0.20 1149 + '@atproto/lex-resolver': 0.0.22 1150 + '@atproto/lex-schema': 0.0.19 1151 + '@atproto/syntax': 0.5.4 1152 + tslib: 2.8.1 1153 + 1154 + '@atproto/lex-json@0.0.16': 1155 + dependencies: 1156 + '@atproto/lex-data': 0.0.15 1157 + tslib: 2.8.1 1158 + 1159 + '@atproto/lex-resolver@0.0.22': 1160 + dependencies: 1161 + '@atproto-labs/did-resolver': 0.2.6 1162 + '@atproto/crypto': 0.4.5 1163 + '@atproto/lex-client': 0.0.20 1164 + '@atproto/lex-data': 0.0.15 1165 + '@atproto/lex-document': 0.0.20 1166 + '@atproto/lex-schema': 0.0.19 1167 + '@atproto/repo': 0.9.1 1168 + '@atproto/syntax': 0.5.4 1169 + tslib: 2.8.1 1170 + 1171 + '@atproto/lex-schema@0.0.19': 1172 + dependencies: 1173 + '@atproto/lex-data': 0.0.15 1174 + '@atproto/syntax': 0.5.4 1175 + '@standard-schema/spec': 1.1.0 1176 + iso-datestring-validator: 2.2.2 1177 + tslib: 2.8.1 1178 + 1179 + '@atproto/lex@0.0.25': 1180 + dependencies: 1181 + '@atproto/lex-builder': 0.0.22 1182 + '@atproto/lex-client': 0.0.20 1183 + '@atproto/lex-data': 0.0.15 1184 + '@atproto/lex-installer': 0.0.25 1185 + '@atproto/lex-json': 0.0.16 1186 + '@atproto/lex-schema': 0.0.19 1187 + tslib: 2.8.1 1188 + yargs: 17.7.2 1189 + 1190 + '@atproto/lexicon@0.6.2': 1191 + dependencies: 1192 + '@atproto/common-web': 0.4.21 1193 + '@atproto/syntax': 0.5.4 1194 + iso-datestring-validator: 2.2.2 1195 + multiformats: 9.9.0 1196 + zod: 3.25.76 1197 + 1198 + '@atproto/repo@0.9.1': 1199 + dependencies: 1200 + '@atproto/common': 0.5.16 1201 + '@atproto/common-web': 0.4.21 1202 + '@atproto/crypto': 0.4.5 1203 + '@atproto/lex-cbor': 0.0.16 1204 + '@atproto/lex-data': 0.0.15 1205 + '@atproto/syntax': 0.5.4 1206 + varint: 6.0.0 1207 + zod: 3.25.76 1208 + 1209 + '@atproto/syntax@0.5.4': 1210 + dependencies: 1211 + tslib: 2.8.1 1212 + 1213 + '@atproto/tap@0.2.13': 1214 + dependencies: 1215 + '@atproto/common': 0.5.16 1216 + '@atproto/lex': 0.0.25 1217 + '@atproto/syntax': 0.5.4 1218 + '@atproto/ws-client': 0.0.4(patch_hash=c27ff9e830a1f8d238a5e4a4f271b42236cc3239b7e7f8e84fe031b6eb5f79b1) 1219 + ws: 8.20.0 1220 + transitivePeerDependencies: 1221 + - bufferutil 1222 + - utf-8-validate 1223 + 1224 + '@atproto/ws-client@0.0.4(patch_hash=c27ff9e830a1f8d238a5e4a4f271b42236cc3239b7e7f8e84fe031b6eb5f79b1)': 1225 + dependencies: 1226 + '@atproto/common': 0.5.16 1227 + ws: 8.20.0 1228 + transitivePeerDependencies: 1229 + - bufferutil 1230 + - utf-8-validate 1231 + 1232 + '@drizzle-team/brocli@0.10.2': {} 1233 + 1234 + '@esbuild-kit/core-utils@3.3.2': 1235 + dependencies: 1236 + esbuild: 0.18.20 1237 + source-map-support: 0.5.21 1238 + 1239 + '@esbuild-kit/esm-loader@2.6.5': 1240 + dependencies: 1241 + '@esbuild-kit/core-utils': 3.3.2 1242 + get-tsconfig: 4.14.0 1243 + 1244 + '@esbuild/aix-ppc64@0.25.12': 1245 + optional: true 1246 + 1247 + '@esbuild/aix-ppc64@0.27.7': 1248 + optional: true 1249 + 1250 + '@esbuild/android-arm64@0.18.20': 1251 + optional: true 1252 + 1253 + '@esbuild/android-arm64@0.25.12': 1254 + optional: true 1255 + 1256 + '@esbuild/android-arm64@0.27.7': 1257 + optional: true 1258 + 1259 + '@esbuild/android-arm@0.18.20': 1260 + optional: true 1261 + 1262 + '@esbuild/android-arm@0.25.12': 1263 + optional: true 1264 + 1265 + '@esbuild/android-arm@0.27.7': 1266 + optional: true 1267 + 1268 + '@esbuild/android-x64@0.18.20': 1269 + optional: true 1270 + 1271 + '@esbuild/android-x64@0.25.12': 1272 + optional: true 1273 + 1274 + '@esbuild/android-x64@0.27.7': 1275 + optional: true 1276 + 1277 + '@esbuild/darwin-arm64@0.18.20': 1278 + optional: true 1279 + 1280 + '@esbuild/darwin-arm64@0.25.12': 1281 + optional: true 1282 + 1283 + '@esbuild/darwin-arm64@0.27.7': 1284 + optional: true 1285 + 1286 + '@esbuild/darwin-x64@0.18.20': 1287 + optional: true 1288 + 1289 + '@esbuild/darwin-x64@0.25.12': 1290 + optional: true 1291 + 1292 + '@esbuild/darwin-x64@0.27.7': 1293 + optional: true 1294 + 1295 + '@esbuild/freebsd-arm64@0.18.20': 1296 + optional: true 1297 + 1298 + '@esbuild/freebsd-arm64@0.25.12': 1299 + optional: true 1300 + 1301 + '@esbuild/freebsd-arm64@0.27.7': 1302 + optional: true 1303 + 1304 + '@esbuild/freebsd-x64@0.18.20': 1305 + optional: true 1306 + 1307 + '@esbuild/freebsd-x64@0.25.12': 1308 + optional: true 1309 + 1310 + '@esbuild/freebsd-x64@0.27.7': 1311 + optional: true 1312 + 1313 + '@esbuild/linux-arm64@0.18.20': 1314 + optional: true 1315 + 1316 + '@esbuild/linux-arm64@0.25.12': 1317 + optional: true 1318 + 1319 + '@esbuild/linux-arm64@0.27.7': 1320 + optional: true 1321 + 1322 + '@esbuild/linux-arm@0.18.20': 1323 + optional: true 1324 + 1325 + '@esbuild/linux-arm@0.25.12': 1326 + optional: true 1327 + 1328 + '@esbuild/linux-arm@0.27.7': 1329 + optional: true 1330 + 1331 + '@esbuild/linux-ia32@0.18.20': 1332 + optional: true 1333 + 1334 + '@esbuild/linux-ia32@0.25.12': 1335 + optional: true 1336 + 1337 + '@esbuild/linux-ia32@0.27.7': 1338 + optional: true 1339 + 1340 + '@esbuild/linux-loong64@0.18.20': 1341 + optional: true 1342 + 1343 + '@esbuild/linux-loong64@0.25.12': 1344 + optional: true 1345 + 1346 + '@esbuild/linux-loong64@0.27.7': 1347 + optional: true 1348 + 1349 + '@esbuild/linux-mips64el@0.18.20': 1350 + optional: true 1351 + 1352 + '@esbuild/linux-mips64el@0.25.12': 1353 + optional: true 1354 + 1355 + '@esbuild/linux-mips64el@0.27.7': 1356 + optional: true 1357 + 1358 + '@esbuild/linux-ppc64@0.18.20': 1359 + optional: true 1360 + 1361 + '@esbuild/linux-ppc64@0.25.12': 1362 + optional: true 1363 + 1364 + '@esbuild/linux-ppc64@0.27.7': 1365 + optional: true 1366 + 1367 + '@esbuild/linux-riscv64@0.18.20': 1368 + optional: true 1369 + 1370 + '@esbuild/linux-riscv64@0.25.12': 1371 + optional: true 1372 + 1373 + '@esbuild/linux-riscv64@0.27.7': 1374 + optional: true 1375 + 1376 + '@esbuild/linux-s390x@0.18.20': 1377 + optional: true 1378 + 1379 + '@esbuild/linux-s390x@0.25.12': 1380 + optional: true 1381 + 1382 + '@esbuild/linux-s390x@0.27.7': 1383 + optional: true 1384 + 1385 + '@esbuild/linux-x64@0.18.20': 1386 + optional: true 1387 + 1388 + '@esbuild/linux-x64@0.25.12': 1389 + optional: true 1390 + 1391 + '@esbuild/linux-x64@0.27.7': 1392 + optional: true 1393 + 1394 + '@esbuild/netbsd-arm64@0.25.12': 1395 + optional: true 1396 + 1397 + '@esbuild/netbsd-arm64@0.27.7': 1398 + optional: true 1399 + 1400 + '@esbuild/netbsd-x64@0.18.20': 1401 + optional: true 1402 + 1403 + '@esbuild/netbsd-x64@0.25.12': 1404 + optional: true 1405 + 1406 + '@esbuild/netbsd-x64@0.27.7': 1407 + optional: true 1408 + 1409 + '@esbuild/openbsd-arm64@0.25.12': 1410 + optional: true 1411 + 1412 + '@esbuild/openbsd-arm64@0.27.7': 1413 + optional: true 1414 + 1415 + '@esbuild/openbsd-x64@0.18.20': 1416 + optional: true 1417 + 1418 + '@esbuild/openbsd-x64@0.25.12': 1419 + optional: true 1420 + 1421 + '@esbuild/openbsd-x64@0.27.7': 1422 + optional: true 1423 + 1424 + '@esbuild/openharmony-arm64@0.25.12': 1425 + optional: true 1426 + 1427 + '@esbuild/openharmony-arm64@0.27.7': 1428 + optional: true 1429 + 1430 + '@esbuild/sunos-x64@0.18.20': 1431 + optional: true 1432 + 1433 + '@esbuild/sunos-x64@0.25.12': 1434 + optional: true 1435 + 1436 + '@esbuild/sunos-x64@0.27.7': 1437 + optional: true 1438 + 1439 + '@esbuild/win32-arm64@0.18.20': 1440 + optional: true 1441 + 1442 + '@esbuild/win32-arm64@0.25.12': 1443 + optional: true 1444 + 1445 + '@esbuild/win32-arm64@0.27.7': 1446 + optional: true 1447 + 1448 + '@esbuild/win32-ia32@0.18.20': 1449 + optional: true 1450 + 1451 + '@esbuild/win32-ia32@0.25.12': 1452 + optional: true 1453 + 1454 + '@esbuild/win32-ia32@0.27.7': 1455 + optional: true 1456 + 1457 + '@esbuild/win32-x64@0.18.20': 1458 + optional: true 1459 + 1460 + '@esbuild/win32-x64@0.25.12': 1461 + optional: true 1462 + 1463 + '@esbuild/win32-x64@0.27.7': 1464 + optional: true 1465 + 1466 + '@hono/node-server@2.0.1(hono@4.12.16)': 1467 + dependencies: 1468 + hono: 4.12.16 1469 + 1470 + '@jsr/std__bytes@1.0.6': {} 1471 + 1472 + '@jsr/std__crypto@1.1.0': {} 1473 + 1474 + '@jsr/std__uuid@1.1.1': 1475 + dependencies: 1476 + '@jsr/std__bytes': 1.0.6 1477 + '@jsr/std__crypto': 1.1.0 1478 + 1479 + '@noble/curves@1.9.7': 1480 + dependencies: 1481 + '@noble/hashes': 1.8.0 1482 + 1483 + '@noble/hashes@1.8.0': {} 1484 + 1485 + '@standard-schema/spec@1.1.0': {} 1486 + 1487 + '@ts-morph/common@0.28.1': 1488 + dependencies: 1489 + minimatch: 10.2.5 1490 + path-browserify: 1.0.1 1491 + tinyglobby: 0.2.16 1492 + 1493 + '@types/node@25.6.0': 1494 + dependencies: 1495 + undici-types: 7.19.2 1496 + 1497 + '@types/pg@8.20.0': 1498 + dependencies: 1499 + '@types/node': 25.6.0 1500 + pg-protocol: 1.13.0 1501 + pg-types: 2.2.0 1502 + 1503 + abort-controller@3.0.0: 1504 + dependencies: 1505 + event-target-shim: 5.0.1 1506 + 1507 + ansi-regex@5.0.1: {} 1508 + 1509 + ansi-styles@4.3.0: 1510 + dependencies: 1511 + color-convert: 2.0.1 1512 + 1513 + atomic-sleep@1.0.0: {} 1514 + 1515 + balanced-match@4.0.4: {} 1516 + 1517 + base64-js@1.5.1: {} 1518 + 1519 + brace-expansion@5.0.5: 1520 + dependencies: 1521 + balanced-match: 4.0.4 1522 + 1523 + buffer-from@1.1.2: {} 1524 + 1525 + buffer@6.0.3: 1526 + dependencies: 1527 + base64-js: 1.5.1 1528 + ieee754: 1.2.1 1529 + 1530 + cliui@8.0.1: 1531 + dependencies: 1532 + string-width: 4.2.3 1533 + strip-ansi: 6.0.1 1534 + wrap-ansi: 7.0.0 1535 + 1536 + code-block-writer@13.0.3: {} 1537 + 1538 + color-convert@2.0.1: 1539 + dependencies: 1540 + color-name: 1.1.4 1541 + 1542 + color-name@1.1.4: {} 1543 + 1544 + core-js@3.49.0: {} 1545 + 1546 + dotenv@17.4.2: {} 1547 + 1548 + drizzle-kit@0.31.10: 1549 + dependencies: 1550 + '@drizzle-team/brocli': 0.10.2 1551 + '@esbuild-kit/esm-loader': 2.6.5 1552 + esbuild: 0.25.12 1553 + tsx: 4.21.0 1554 + 1555 + drizzle-orm@0.45.2(@types/pg@8.20.0)(pg@8.20.0): 1556 + optionalDependencies: 1557 + '@types/pg': 8.20.0 1558 + pg: 8.20.0 1559 + 1560 + emoji-regex@8.0.0: {} 1561 + 1562 + esbuild@0.18.20: 1563 + optionalDependencies: 1564 + '@esbuild/android-arm': 0.18.20 1565 + '@esbuild/android-arm64': 0.18.20 1566 + '@esbuild/android-x64': 0.18.20 1567 + '@esbuild/darwin-arm64': 0.18.20 1568 + '@esbuild/darwin-x64': 0.18.20 1569 + '@esbuild/freebsd-arm64': 0.18.20 1570 + '@esbuild/freebsd-x64': 0.18.20 1571 + '@esbuild/linux-arm': 0.18.20 1572 + '@esbuild/linux-arm64': 0.18.20 1573 + '@esbuild/linux-ia32': 0.18.20 1574 + '@esbuild/linux-loong64': 0.18.20 1575 + '@esbuild/linux-mips64el': 0.18.20 1576 + '@esbuild/linux-ppc64': 0.18.20 1577 + '@esbuild/linux-riscv64': 0.18.20 1578 + '@esbuild/linux-s390x': 0.18.20 1579 + '@esbuild/linux-x64': 0.18.20 1580 + '@esbuild/netbsd-x64': 0.18.20 1581 + '@esbuild/openbsd-x64': 0.18.20 1582 + '@esbuild/sunos-x64': 0.18.20 1583 + '@esbuild/win32-arm64': 0.18.20 1584 + '@esbuild/win32-ia32': 0.18.20 1585 + '@esbuild/win32-x64': 0.18.20 1586 + 1587 + esbuild@0.25.12: 1588 + optionalDependencies: 1589 + '@esbuild/aix-ppc64': 0.25.12 1590 + '@esbuild/android-arm': 0.25.12 1591 + '@esbuild/android-arm64': 0.25.12 1592 + '@esbuild/android-x64': 0.25.12 1593 + '@esbuild/darwin-arm64': 0.25.12 1594 + '@esbuild/darwin-x64': 0.25.12 1595 + '@esbuild/freebsd-arm64': 0.25.12 1596 + '@esbuild/freebsd-x64': 0.25.12 1597 + '@esbuild/linux-arm': 0.25.12 1598 + '@esbuild/linux-arm64': 0.25.12 1599 + '@esbuild/linux-ia32': 0.25.12 1600 + '@esbuild/linux-loong64': 0.25.12 1601 + '@esbuild/linux-mips64el': 0.25.12 1602 + '@esbuild/linux-ppc64': 0.25.12 1603 + '@esbuild/linux-riscv64': 0.25.12 1604 + '@esbuild/linux-s390x': 0.25.12 1605 + '@esbuild/linux-x64': 0.25.12 1606 + '@esbuild/netbsd-arm64': 0.25.12 1607 + '@esbuild/netbsd-x64': 0.25.12 1608 + '@esbuild/openbsd-arm64': 0.25.12 1609 + '@esbuild/openbsd-x64': 0.25.12 1610 + '@esbuild/openharmony-arm64': 0.25.12 1611 + '@esbuild/sunos-x64': 0.25.12 1612 + '@esbuild/win32-arm64': 0.25.12 1613 + '@esbuild/win32-ia32': 0.25.12 1614 + '@esbuild/win32-x64': 0.25.12 1615 + 1616 + esbuild@0.27.7: 1617 + optionalDependencies: 1618 + '@esbuild/aix-ppc64': 0.27.7 1619 + '@esbuild/android-arm': 0.27.7 1620 + '@esbuild/android-arm64': 0.27.7 1621 + '@esbuild/android-x64': 0.27.7 1622 + '@esbuild/darwin-arm64': 0.27.7 1623 + '@esbuild/darwin-x64': 0.27.7 1624 + '@esbuild/freebsd-arm64': 0.27.7 1625 + '@esbuild/freebsd-x64': 0.27.7 1626 + '@esbuild/linux-arm': 0.27.7 1627 + '@esbuild/linux-arm64': 0.27.7 1628 + '@esbuild/linux-ia32': 0.27.7 1629 + '@esbuild/linux-loong64': 0.27.7 1630 + '@esbuild/linux-mips64el': 0.27.7 1631 + '@esbuild/linux-ppc64': 0.27.7 1632 + '@esbuild/linux-riscv64': 0.27.7 1633 + '@esbuild/linux-s390x': 0.27.7 1634 + '@esbuild/linux-x64': 0.27.7 1635 + '@esbuild/netbsd-arm64': 0.27.7 1636 + '@esbuild/netbsd-x64': 0.27.7 1637 + '@esbuild/openbsd-arm64': 0.27.7 1638 + '@esbuild/openbsd-x64': 0.27.7 1639 + '@esbuild/openharmony-arm64': 0.27.7 1640 + '@esbuild/sunos-x64': 0.27.7 1641 + '@esbuild/win32-arm64': 0.27.7 1642 + '@esbuild/win32-ia32': 0.27.7 1643 + '@esbuild/win32-x64': 0.27.7 1644 + 1645 + escalade@3.2.0: {} 1646 + 1647 + event-target-shim@5.0.1: {} 1648 + 1649 + events@3.3.0: {} 1650 + 1651 + fast-redact@3.5.0: {} 1652 + 1653 + fdir@6.5.0(picomatch@4.0.4): 1654 + optionalDependencies: 1655 + picomatch: 4.0.4 1656 + 1657 + fsevents@2.3.3: 1658 + optional: true 1659 + 1660 + get-caller-file@2.0.5: {} 1661 + 1662 + get-tsconfig@4.14.0: 1663 + dependencies: 1664 + resolve-pkg-maps: 1.0.0 1665 + 1666 + hono@4.12.16: {} 1667 + 1668 + ieee754@1.2.1: {} 1669 + 1670 + is-fullwidth-code-point@3.0.0: {} 1671 + 1672 + iso-datestring-validator@2.2.2: {} 1673 + 1674 + lru-cache@10.4.3: {} 1675 + 1676 + minimatch@10.2.5: 1677 + dependencies: 1678 + brace-expansion: 5.0.5 1679 + 1680 + multiformats@9.9.0: {} 1681 + 1682 + on-exit-leak-free@2.1.2: {} 1683 + 1684 + path-browserify@1.0.1: {} 1685 + 1686 + pg-cloudflare@1.3.0: 1687 + optional: true 1688 + 1689 + pg-connection-string@2.12.0: {} 1690 + 1691 + pg-int8@1.0.1: {} 1692 + 1693 + pg-pool@3.13.0(pg@8.20.0): 1694 + dependencies: 1695 + pg: 8.20.0 1696 + 1697 + pg-protocol@1.13.0: {} 1698 + 1699 + pg-types@2.2.0: 1700 + dependencies: 1701 + pg-int8: 1.0.1 1702 + postgres-array: 2.0.0 1703 + postgres-bytea: 1.0.1 1704 + postgres-date: 1.0.7 1705 + postgres-interval: 1.2.0 1706 + 1707 + pg@8.20.0: 1708 + dependencies: 1709 + pg-connection-string: 2.12.0 1710 + pg-pool: 3.13.0(pg@8.20.0) 1711 + pg-protocol: 1.13.0 1712 + pg-types: 2.2.0 1713 + pgpass: 1.0.5 1714 + optionalDependencies: 1715 + pg-cloudflare: 1.3.0 1716 + 1717 + pgpass@1.0.5: 1718 + dependencies: 1719 + split2: 4.2.0 1720 + 1721 + picomatch@4.0.4: {} 1722 + 1723 + pino-abstract-transport@1.2.0: 1724 + dependencies: 1725 + readable-stream: 4.7.0 1726 + split2: 4.2.0 1727 + 1728 + pino-std-serializers@6.2.2: {} 1729 + 1730 + pino@8.21.0: 1731 + dependencies: 1732 + atomic-sleep: 1.0.0 1733 + fast-redact: 3.5.0 1734 + on-exit-leak-free: 2.1.2 1735 + pino-abstract-transport: 1.2.0 1736 + pino-std-serializers: 6.2.2 1737 + process-warning: 3.0.0 1738 + quick-format-unescaped: 4.0.4 1739 + real-require: 0.2.0 1740 + safe-stable-stringify: 2.5.0 1741 + sonic-boom: 3.8.1 1742 + thread-stream: 2.7.0 1743 + 1744 + postgres-array@2.0.0: {} 1745 + 1746 + postgres-bytea@1.0.1: {} 1747 + 1748 + postgres-date@1.0.7: {} 1749 + 1750 + postgres-interval@1.2.0: 1751 + dependencies: 1752 + xtend: 4.0.2 1753 + 1754 + prettier@3.8.3: {} 1755 + 1756 + process-warning@3.0.0: {} 1757 + 1758 + process@0.11.10: {} 1759 + 1760 + quick-format-unescaped@4.0.4: {} 1761 + 1762 + readable-stream@4.7.0: 1763 + dependencies: 1764 + abort-controller: 3.0.0 1765 + buffer: 6.0.3 1766 + events: 3.3.0 1767 + process: 0.11.10 1768 + string_decoder: 1.3.0 1769 + 1770 + real-require@0.2.0: {} 1771 + 1772 + require-directory@2.1.1: {} 1773 + 1774 + resolve-pkg-maps@1.0.0: {} 1775 + 1776 + safe-buffer@5.2.1: {} 1777 + 1778 + safe-stable-stringify@2.5.0: {} 1779 + 1780 + sonic-boom@3.8.1: 1781 + dependencies: 1782 + atomic-sleep: 1.0.0 1783 + 1784 + source-map-support@0.5.21: 1785 + dependencies: 1786 + buffer-from: 1.1.2 1787 + source-map: 0.6.1 1788 + 1789 + source-map@0.6.1: {} 1790 + 1791 + split2@4.2.0: {} 1792 + 1793 + string-width@4.2.3: 1794 + dependencies: 1795 + emoji-regex: 8.0.0 1796 + is-fullwidth-code-point: 3.0.0 1797 + strip-ansi: 6.0.1 1798 + 1799 + string_decoder@1.3.0: 1800 + dependencies: 1801 + safe-buffer: 5.2.1 1802 + 1803 + strip-ansi@6.0.1: 1804 + dependencies: 1805 + ansi-regex: 5.0.1 1806 + 1807 + thread-stream@2.7.0: 1808 + dependencies: 1809 + real-require: 0.2.0 1810 + 1811 + tinyglobby@0.2.16: 1812 + dependencies: 1813 + fdir: 6.5.0(picomatch@4.0.4) 1814 + picomatch: 4.0.4 1815 + 1816 + ts-morph@27.0.2: 1817 + dependencies: 1818 + '@ts-morph/common': 0.28.1 1819 + code-block-writer: 13.0.3 1820 + 1821 + tslib@2.8.1: {} 1822 + 1823 + tsx@4.21.0: 1824 + dependencies: 1825 + esbuild: 0.27.7 1826 + get-tsconfig: 4.14.0 1827 + optionalDependencies: 1828 + fsevents: 2.3.3 1829 + 1830 + uint8arrays@3.0.0: 1831 + dependencies: 1832 + multiformats: 9.9.0 1833 + 1834 + undici-types@7.19.2: {} 1835 + 1836 + unicode-segmenter@0.14.5: {} 1837 + 1838 + varint@6.0.0: {} 1839 + 1840 + wrap-ansi@7.0.0: 1841 + dependencies: 1842 + ansi-styles: 4.3.0 1843 + string-width: 4.2.3 1844 + strip-ansi: 6.0.1 1845 + 1846 + ws@8.20.0: {} 1847 + 1848 + xtend@4.0.2: {} 1849 + 1850 + y18n@5.0.8: {} 1851 + 1852 + yargs-parser@21.1.1: {} 1853 + 1854 + yargs@17.7.2: 1855 + dependencies: 1856 + cliui: 8.0.1 1857 + escalade: 3.2.0 1858 + get-caller-file: 2.0.5 1859 + require-directory: 2.1.1 1860 + string-width: 4.2.3 1861 + y18n: 5.0.8 1862 + yargs-parser: 21.1.1 1863 + 1864 + zod@3.25.76: {} 1865 + 1866 + zod@4.4.2: {}
+12
pnpm-workspace.yaml
··· 1 + packages: 2 + - api 3 + - tap 4 + - db 5 + allowBuilds: 6 + core-js: true 7 + esbuild: true 8 + 9 + allowUnusedPatches: true 10 + lockfileIncludeTarballUrl: true 11 + patchedDependencies: 12 + '@atproto/ws-client': patches/@atproto__ws-client.patch
+21
scripts/db-generate.ts
··· 1 + import { execSync } from "node:child_process"; 2 + import { readFileSync, readdirSync, writeFileSync } from "node:fs"; 3 + import { join } from "node:path"; 4 + 5 + const name = process.argv[2]; 6 + if (!name) { 7 + console.error("Usage: pnpm db:generate <name>"); 8 + process.exit(1); 9 + } 10 + 11 + execSync(`pnpm drizzle-kit generate --name=${name}`, { stdio: "inherit" }); 12 + 13 + const dir = "src/db/drizzle/meta"; 14 + for (const file of readdirSync(dir)) { 15 + if (!file.endsWith("_snapshot.json")) { 16 + continue; 17 + } 18 + const path = join(dir, file); 19 + const minified = JSON.stringify(JSON.parse(readFileSync(path, "utf8"))); 20 + writeFileSync(path, minified + "\n"); 21 + }
+1
tap/Dockerfile
··· 1 + FROM ghcr.io/bluesky-social/indigo/tap:latest
+9
tap/dev.sh
··· 1 + #!/bin/bash 2 + 3 + export GOMEMLIMIT="100MiB" 4 + export TAP_COLLECTION_FILTERS="sh.tangled.*" 5 + export TAP_IDENT_CACHE_SIZE="20000" 6 + export TAP_RELAY_URL="https://relay1.us-west.bsky.network" 7 + export TAP_SIGNAL_COLLECTION="sh.tangled.actor.profile" 8 + 9 + tap run
+7
tap/package.json
··· 1 + { 2 + "private": true, 3 + "name": "tap", 4 + "scripts": { 5 + "dev": "./dev.sh" 6 + } 7 + }