{"id":47979415,"url":"https://github.com/lyezinho/danbooru-sdk","last_synced_at":"2026-04-04T11:02:35.564Z","repository":{"id":329659557,"uuid":"1120291392","full_name":"LyeZinho/danbooru-sdk","owner":"LyeZinho","description":"Typescript SDK for Danbooru/Safebooru api.","archived":false,"fork":false,"pushed_at":"2025-12-22T10:51:41.000Z","size":138,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-22T22:44:56.941Z","etag":null,"topics":["api","api-client","api-sdk","danbooru","safebooru","sdk","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/LyeZinho.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-20T22:18:37.000Z","updated_at":"2025-12-22T10:51:44.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/LyeZinho/danbooru-sdk","commit_stats":null,"previous_names":["lyezinho/danbooru-sdk"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/LyeZinho/danbooru-sdk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LyeZinho%2Fdanbooru-sdk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LyeZinho%2Fdanbooru-sdk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LyeZinho%2Fdanbooru-sdk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LyeZinho%2Fdanbooru-sdk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LyeZinho","download_url":"https://codeload.github.com/LyeZinho/danbooru-sdk/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LyeZinho%2Fdanbooru-sdk/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31397056,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T10:20:44.708Z","status":"ssl_error","status_checked_at":"2026-04-04T10:20:06.846Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","api-client","api-sdk","danbooru","safebooru","sdk","typescript"],"created_at":"2026-04-04T11:01:12.473Z","updated_at":"2026-04-04T11:02:35.557Z","avatar_url":"https://github.com/LyeZinho.png","language":"TypeScript","readme":"# Danbooru SDK\n\n[![CI](https://github.com/LyeZinho/danbooru-sdk/actions/workflows/ci.yml/badge.svg)](https://github.com/LyeZinho/danbooru-sdk/actions/workflows/ci.yml)\n\nUma SDK TypeScript completa e padronizada para a API do Danbooru/Safebooru.\n\n## 🚀 Características\n\n- ✅ **Totalmente tipado** com TypeScript\n- 🔄 **Suporte completo** para Danbooru e Safebooru\n- 📦 **Modular** - Recursos organizados em classes separadas\n- 🔐 **Autenticação** integrada\n- 🎯 **API padronizada** com base na documentação oficial\n- ⚡ **Promise-based** com async/await\n- 🛠️ **Extensível** - Fácil de customizar e estender\n\n## 📦 Instalação\n\n```bash\nnpm install danbooru-sdk\n# ou\nyarn add danbooru-sdk\n# ou\npnpm add danbooru-sdk\n```\n\n## 📚 Documentação da SDK\nA documentação completa da SDK (referência de uso, configuração e exemplos baseados no código) está em `sdk_docs/README.md` (índice da documentação localizada em `sdk_docs/`).\n\n## 🎯 Uso Básico\n\n### Inicialização\n\n```typescript\nimport { createDanbooruClient, createSafebooruClient } from 'danbooru-sdk';\n\n// Danbooru (requer autenticação para alguns recursos)\nconst danbooru = createDanbooruClient({\n  baseURL: 'https://danbooru.donmai.us',\n  username: 'seu-usuario',\n  apiKey: 'sua-api-key',\n});\n// Observação: se você estiver instanciando Manualmente `new DanbooruClient(...)`,\n// o campo `baseURL` também pode ser passado como `baseUrl` (alias) para compatibilidade\n// com exemplos existentes (a SDK aceita ambos).\n// Safebooru (versão SFW)\nconst safebooru = createSafebooruClient({\n  // username e apiKey são opcionais\n});\n```\n\n### Posts\n\n```typescript\n// Buscar posts por tags\nconst posts = await danbooru.posts.search('touhou rating:safe', 20);\n\n// Listar posts com parâmetros\nconst posts = await danbooru.posts.list({\n  tags: 'original',\n  limit: 100,\n  page: 1,\n});\n\n// Obter um post específico\nconst post = await danbooru.posts.get(123456);\n\n// Criar um novo post (requer autenticação)\nconst newPost = await danbooru.posts.create({\n  upload: {\n    source: 'https://exemplo.com/imagem.jpg',\n    rating: 's',\n    tag_string: 'original solo 1girl',\n  },\n});\n\n// Atualizar um post\nconst updatedPost = await danbooru.posts.update(123456, {\n  post: {\n    tag_string: 'original solo 1girl blue_hair',\n  },\n});\n\n// Deletar um post\nawait danbooru.posts.delete(123456);\n```\n\n### Tags\n\n```typescript\n// Buscar tags\nconst tags = await danbooru.tags.search('touhou*', 50);\n\n// Listar tags com filtros\nconst tags = await danbooru.tags.list({\n  search: {\n    name_matches: 'original*',\n    category: TagCategory.General,\n    post_count: '100..',\n  },\n  limit: 50,\n});\n\n// Obter uma tag específica\nconst tag = await danbooru.tags.get(12345);\n```\n\n### Artists\n\n```typescript\n// Buscar artistas\nconst artists = await danbooru.artists.search('wanke*', 20);\n\n// Listar artistas\nconst artists = await danbooru.artists.list({\n  search: {\n    name_matches: 'artist_name',\n    is_banned: false,\n  },\n  limit: 50,\n});\n\n// Criar um artista\nconst newArtist = await danbooru.artists.create({\n  artist: {\n    name: 'artist_name',\n    other_names: ['alternate_name'],\n    urls: ['https://twitter.com/artist'],\n  },\n});\n\n// Atualizar um artista\nconst updatedArtist = await danbooru.artists.update(123, {\n  artist: {\n    group_name: 'art_group',\n  },\n});\n```\n\n### Pools\n\n```typescript\n// Buscar pools\nconst pools = await danbooru.pools.search('touhou*', 20);\n\n// Listar pools\nconst pools = await danbooru.pools.list({\n  search: {\n    name_matches: 'pool_name',\n    category: 'series',\n  },\n  limit: 50,\n});\n\n// Obter um pool\nconst pool = await danbooru.pools.get(12345);\n\n// Criar um pool\nconst newPool = await danbooru.pools.create({\n  pool: {\n    name: 'My Pool',\n    description: 'Pool description',\n    category: 'series',\n  },\n});\n```\n\n### Comments\n\n```typescript\n// Listar comentários\nconst comments = await danbooru.comments.list({\n  search: {\n    post_id: 123456,\n  },\n  limit: 50,\n});\n\n// Criar comentário\nconst newComment = await danbooru.comments.create({\n  comment: {\n    post_id: 123456,\n    body: 'Great artwork!',\n  },\n});\n\n// Atualizar comentário\nconst updatedComment = await danbooru.comments.update(789, {\n  comment: {\n    body: 'Updated comment text',\n  },\n});\n\n// Deletar comentário\nawait danbooru.comments.delete(789);\n```\n\n### Notes\n\n```typescript\n// Listar notes\nconst notes = await danbooru.notes.list({\n  search: {\n    post_id: 123456,\n  },\n});\n\n// Criar note\nconst newNote = await danbooru.notes.create({\n  note: {\n    post_id: 123456,\n    body: 'Translation here',\n    x: 100,\n    y: 100,\n    width: 200,\n    height: 50,\n  },\n});\n```\n\n### Users\n\n```typescript\n// Buscar usuários\nconst users = await danbooru.users.search('username*', 20);\n\n// Listar usuários\nconst users = await danbooru.users.list({\n  search: {\n    level: UserLevel.Gold,\n  },\n  limit: 50,\n});\n\n// Obter usuário específico\nconst user = await danbooru.users.get(12345);\n```\n\n### Wiki Pages\n\n```typescript\n// Buscar páginas wiki\nconst pages = await danbooru.wikiPages.search('touhou', 20);\n\n// Listar páginas wiki\nconst pages = await danbooru.wikiPages.list({\n  search: {\n    title: 'tag_name',\n  },\n  limit: 50,\n});\n\n// Criar página wiki\nconst newPage = await danbooru.wikiPages.create({\n  wiki_page: {\n    title: 'tag_name',\n    body: 'Wiki content here',\n  },\n});\n```\n\n## 🔧 Configuração Avançada\n\n### Customização do Cliente HTTP\n\n```typescript\nimport { createDanbooruClient } from 'danbooru-sdk';\n\nconst client = createDanbooruClient({\n  baseURL: 'https://danbooru.donmai.us',\n  username: 'seu-usuario',\n  apiKey: 'sua-api-key',\n  timeout: 60000, // 60 segundos\n  userAgent: 'MeuApp/1.0.0',\n  axiosConfig: {\n    // Configurações adicionais do Axios\n    proxy: {\n      host: 'proxy.exemplo.com',\n      port: 8080,\n    },\n  },\n});\n```\n\n### Acesso ao Cliente HTTP Interno\n\n```typescript\nconst httpClient = client.getHttpClient();\nconst axiosInstance = httpClient.getAxiosInstance();\n\n// Use para requisições customizadas\n```\n\n## 📚 Tipos TypeScript\n\nA SDK inclui tipos completos para todos os recursos:\n\n```typescript\nimport {\n  Post,\n  Tag,\n  Artist,\n  Pool,\n  Comment,\n  Note,\n  User,\n  WikiPage,\n  PostRating,\n  TagCategory,\n  UserLevel,\n} from 'danbooru-sdk';\n```\n\n## 🔍 Sintaxe de Busca\n\nA SDK suporta toda a sintaxe de busca do Danbooru:\n\n### Posts\n```typescript\n// Tags múltiplas\nconst posts = await danbooru.posts.search('touhou cirno');\n\n// Operadores\nconst posts = await danbooru.posts.search('touhou -flandre_scarlet');\n\n// Metatags\nconst posts = await danbooru.posts.search('rating:safe score:\u003e10 width:\u003e1000');\n\n// Intervalos\nconst posts = await danbooru.posts.search('id:100..200');\n```\n\n### Tags\n```typescript\n// Wildcards\nconst tags = await danbooru.tags.search('touh*');\n\n// Categorias\nconst tags = await danbooru.tags.list({\n  search: {\n    category: TagCategory.Artist,\n    post_count: '100..',\n  },\n});\n```\n\n## 🛠️ Desenvolvimento\n\n```bash\n# Instalar dependências\nnpm install\n\n# Build\nnpm run build\n\n# Watch mode\nnpm run dev\n\n# Lint\nnpm run lint\n\n# Format\nnpm run format\n```\n\n## 📖 Documentação da API\n\nEsta SDK é baseada na documentação oficial do Danbooru:\n- [Documentação da API Danbooru](https://safebooru.donmai.us/wiki_pages/help:api)\n\n## 📄 Licença\n\nMIT © Pedro Kaleb\n\n## 🤝 Contribuindo\n\nContribuições são bem-vindas! Por favor, sinta-se à vontade para abrir issues ou pull requests.\n\n## ⚠️ Avisos\n\n- Respeite os limites de taxa da API\n- Membros: 10 requisições de escrita (burst), 1 req/s (regeneração)\n- Gold: 30 requisições de escrita (burst), 2 req/s (regeneração)\n- Platinum+: 60 requisições de escrita (burst), 4 req/s (regeneração)\n- Requisições de leitura são ilimitadas para todos os níveis de usuário\n\n## 🔗 Links Úteis\n\n- [Danbooru](https://danbooru.donmai.us/)\n- [Safebooru](https://safebooru.donmai.us/)\n- [Testbooru](https://testbooru.donmai.us/) - Para testes da API\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flyezinho%2Fdanbooru-sdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flyezinho%2Fdanbooru-sdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flyezinho%2Fdanbooru-sdk/lists"}