{"_id":"@adalink/spark-http","_rev":"2-1397083eedb381af8be123cd424bc8f3","name":"@adalink/spark-http","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"@adalink/spark-http","version":"1.0.0","keywords":["http","fetch","api","rest","client","fluent","web-development"],"author":{"url":"https://github.com/deMGoncalves","name":"Cleber de Moraes Goncalves","email":"cleber.engineer@gmail.com"},"license":"Apache-2.0","_id":"@adalink/spark-http@1.0.0","maintainers":[{"name":"cleiton.couto","email":"cleiton.couto@adalink.ai"}],"homepage":"https://github.com/Adalink-ai/spark_http#readme","bugs":{"url":"https://github.com/Adalink-ai/spark_http/issues"},"dist":{"shasum":"ef4887d688b4bb5d89750d0b4aaf09dc47dbf04a","tarball":"https://registry.npmjs.org/@adalink/spark-http/-/spark-http-1.0.0.tgz","fileCount":5,"integrity":"sha512-FoMf21ULYRdqzOd/8eEiiRk6M6tIVeivN42grxwvTb1hngONdSjgPebZG5NxatoAsC7uLMpHjGKFWLnr/efC5Q==","signatures":[{"sig":"MEUCIQDuyDvoOHU8S7sa4K7Gb1Gfm9fDdBIQwedToHt+YP+Q7AIgFrj9TwOogVlwUmv7NbBBicSOk9uXqmUxE9VIWUhBCzc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31744},"type":"module","exports":{".":{"import":"./dist/http.js","require":"./dist/http.cjs"}},"gitHead":"a42d13cee95952b304c156fc38c5dbba20808e5b","scripts":{"dev":"vite","lint":"biome check .","build":"vite build","prepare":"husky"},"_npmUser":{"name":"cleiton.couto","email":"cleiton.couto@adalink.ai"},"repository":{"url":"git+https://github.com/Adalink-ai/spark_http.git","type":"git"},"_npmVersion":"10.8.2","description":"Fluent HTTP client for web development","directories":{},"_nodeVersion":"20.20.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.0","husky":"^9.1.7","esbuild":"^0.27.2","lint-staged":"^16.4.0","@biomejs/biome":"2.4.7","@commitlint/cli":"^20.5.0","@commitlint/config-conventional":"^20.5.0"},"_npmOperationalInternal":{"tmp":"tmp/spark-http_1.0.0_1774374446187_0.9869322037191071","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@adalink/spark-http","version":"1.0.1","description":"Fluent HTTP client for web development","type":"module","license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/Adalink-ai/spark_http.git"},"bugs":{"url":"https://github.com/Adalink-ai/spark_http/issues"},"homepage":"https://github.com/Adalink-ai/spark_http#readme","author":{"name":"Cleber de Moraes Goncalves","email":"cleber.engineer@gmail.com","url":"https://github.com/deMGoncalves"},"exports":{".":{"import":"./dist/http.js","require":"./dist/http.cjs"}},"keywords":["http","fetch","api","rest","client","fluent","web-development"],"devDependencies":{"@biomejs/biome":"2.4.8","@commitlint/cli":"^20.5.0","@commitlint/config-conventional":"^20.5.0","esbuild":"^0.27.2","husky":"^9.1.7","lint-staged":"^16.4.0","vite":"^8.0.0"},"scripts":{"build":"vite build","dev":"vite","lint":"biome check .","prepare":"husky"},"_id":"@adalink/spark-http@1.0.1","gitHead":"54057cbcb32c84fe0bdea390c3f97809dc634737","_nodeVersion":"20.20.1","_npmVersion":"10.8.2","dist":{"integrity":"sha512-nzqKBmDu/tBieEuLra5G6S1NBZ8c4JMS2o7AVyp+QT0J1xx3gvS2FiNQJ0mVw9aEJaNDl8boocdceLnwYLdlpQ==","shasum":"3658975281d12c28063dca5221f35704d8d9fd31","tarball":"https://registry.npmjs.org/@adalink/spark-http/-/spark-http-1.0.1.tgz","fileCount":5,"unpackedSize":31744,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHELO9ef74x0gK+a64eSo50idd/IFQUHLbtx8B887NpeAiEA0ukcB6S6GDiblMCjvkjqujeNNzNnHG5HwhdUpPe9RIw="}]},"_npmUser":{"name":"cleiton.couto","email":"cleiton.couto@adalink.ai"},"directories":{},"maintainers":[{"name":"cleiton.couto","email":"cleiton.couto@adalink.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/spark-http_1.0.1_1774375595694_0.2922841803446019"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-24T17:47:26.119Z","modified":"2026-03-24T18:06:36.074Z","1.0.0":"2026-03-24T17:47:26.335Z","1.0.1":"2026-03-24T18:06:35.933Z"},"bugs":{"url":"https://github.com/Adalink-ai/spark_http/issues"},"author":{"name":"Cleber de Moraes Goncalves","email":"cleber.engineer@gmail.com","url":"https://github.com/deMGoncalves"},"license":"Apache-2.0","homepage":"https://github.com/Adalink-ai/spark_http#readme","keywords":["http","fetch","api","rest","client","fluent","web-development"],"repository":{"type":"git","url":"git+https://github.com/Adalink-ai/spark_http.git"},"description":"Fluent HTTP client for web development","maintainers":[{"name":"cleiton.couto","email":"cleiton.couto@adalink.ai"}],"readme":"# 🌐 Spark HTTP\n\n[![npm version](https://img.shields.io/npm/v/@adalink/spark-http?style=flat-square)](https://www.npmjs.com/package/@adalink/spark-http)\n[![License](https://img.shields.io/npm/l/@adalink/spark-http?style=flat-square)](LICENSE)\n[![Build Status](https://img.shields.io/github/actions/workflow/status/Adalink-ai/spark_http/ci.yml?style=flat-square)](https://github.com/Adalink-ai/spark_http/actions)\n[![Code Style](https://img.shields.io/badge/code_style-biome-purple?style=flat-square)](https://biomejs.dev)\n[![Ecosystem](https://img.shields.io/badge/Spark_Ecosystem-compatible-blue?style=flat-square)](https://github.com/Adalink-ai)\n\n**Fluent HTTP client for web development. Zero dependencies, tree-shakeable.**\n\n---\n\n## 📖 What is Spark HTTP?\n\nSpark HTTP is a modern, lightweight HTTP client with a fluent API. Built on native Web Platform APIs, it provides powerful utilities for making HTTP requests without framework overhead.\n\n### 🎯 Why Choose Spark HTTP?\n\n- **Zero Dependencies** - No runtime dependencies, just pure Fetch API\n- **Fluent API** - Chain methods naturally for clean code\n- **Framework Agnostic** - Works with any framework or vanilla JavaScript\n- **Performance First** - Minimal bundle size (~530B gzipped)\n- **Developer Experience** - Consistent error handling built-in\n- **Production Ready** - Battle-tested in real-world applications\n\n### 🚀 Perfect For\n\n- **Web Components Projects** - Make HTTP requests in custom elements\n- **Progressive Enhancement** - Build on web standards\n- **Performance-Critical Apps** - Minimal overhead, maximum speed\n- **Cross-Framework Projects** - Consistent HTTP handling\n- **REST APIs** - Simple, clean API interactions\n\n---\n\n## ✨ Key Features\n\n### 🌐 Fluent API\n\nMake HTTP requests with a clean, chainable API:\n\n```javascript\nimport http from '@adalink/spark-http';\n\n// Simple GET request\nconst { data } = await http.GET('https://api.example.com/data').json();\n\n// POST with headers and body\nconst result = await http\n  .POST('https://api.example.com/users')\n  .headers({ Authorization: 'Bearer token' })\n  .body({ name: 'John', email: 'john@example.com' })\n  .json();\n```\n\n### 🎯 Dynamic HTTP Methods\n\nAny HTTP method works via Proxy:\n\n```javascript\nhttp.GET(url)     // GET request\nhttp.POST(url)    // POST request\nhttp.PUT(url)     // PUT request\nhttp.DELETE(url)  // DELETE request\nhttp.PATCH(url)   // PATCH request\n// ... any HTTP method\n```\n\n### ⚡ Error Handling\n\nBuilt-in promise wrapper for consistent error handling:\n\n```javascript\nconst { data, error } = await http.GET('https://api.example.com/data').json();\n\nif (error) {\n  console.error('Request failed:', error);\n} else {\n  console.log('Response:', data);\n}\n```\n\n---\n\n## 🔗 Integração com Spark Ecosystem\n\nO Spark HTTP é parte do Spark Ecosystem, trabalhando em harmonia com outras bibliotecas Spark para criar aplicações web completas.\n\n### 📦 Pacotes Relacionados\n\n**[@adalink/spark-std](https://github.com/Adalink-ai/spark_std)** - Biblioteca padrão com decorators para Web Components\n\nUse Spark HTTP em componentes criados com Spark Std:\n\n```javascript\nimport { define, connected, disconnected } from '@adalink/spark-std';\nimport { paint, html, css } from '@adalink/spark-std/dom';\nimport { event } from '@adalink/spark-std/event';\nimport { paint as paintDom, html as htmlDom, css as cssDom } from '@adalink/spark-std/dom';\nimport http from '@adalink/spark-http';\nimport cookie from '@adalink/spark-cookie';\n\n@define('spark-data-fetcher')\n@paintDom(template, styles)\nclass DataFetcher extends HTMLElement {\n  #data = null;\n  #loading = false;\n  #error = null;\n\n  connectedCallback() {\n    this.fetchData();\n  }\n\n  @event.click('button.refresh')\n  refresh() {\n    this.fetchData();\n  }\n\n  async fetchData() {\n    this.#loading = true;\n    this.render();\n\n    const { data, error } = await http\n      .GET('https://api.example.com/data')\n      .headers({ \n        Authorization: cookie.getItem('access_token') || '' \n      })\n      .json();\n\n    this.#loading = false;\n    this.#data = data;\n    this.#error = error;\n    this.render();\n  }\n\n  render() {\n    if (this.#loading) {\n      this.shadowRoot.innerHTML = htmlDom`<div class=\"loading\">Loading...</div>`;\n    } else if (this.#error) {\n      this.shadowRoot.innerHTML = htmlDom`<div class=\"error\">Error loading data</div>`;\n    } else {\n      this.shadowRoot.innerHTML = htmlDom`\n        <div class=\"data\">\n          ${JSON.stringify(this.#data, null, 2)}\n        </div>\n        <button class=\"refresh\">Refresh</button>\n      `;\n    }\n  }\n}\n\nfunction template(component) {\n  return htmlDom`<div id=\"content\"></div>`;\n}\n\nfunction styles(component) {\n  return cssDom`\n    .loading, .error {\n      padding: 1rem;\n      text-align: center;\n    }\n    .error { color: red; }\n    .data {\n      padding: 1rem;\n      background: #f5f5f5;\n      border-radius: 4px;\n      margin-bottom: 1rem;\n    }\n    button {\n      padding: 0.5rem 1rem;\n      background: #667eea;\n      color: white;\n      border: none;\n      border-radius: 4px;\n      cursor: pointer;\n    }\n  `;\n}\n```\n\n**Funcionalidades Combinadas:**\n- ✅ Spark Std fornece decorators (`@define`, `@paint`, `@event`)\n- ✅ Spark HTTP fornece requests HTTP fluentes\n- ✅ Spark Cookie fornece gerenciamento de cookies (opcional)\n- ✅ Use decorators para definir comportamento do componente\n- ✅ Use HTTP para fazer requests em métodos de componente\n- ✅ Todos funcionam com Web Components nativos\n\n---\n\n## 🚀 Quick Start\n\n### Installation\n\n#### Option 1: Install from npm (Recommended)\n\n```bash\n# Using npm\nnpm install @adalink/spark-http\n\n# Using yarn\nyarn add @adalink/spark-http\n\n# Using pnpm\npnpm add @adalink/spark-http\n\n# Using bun\nbun add @adalink/spark-http\n```\n\n#### Option 2: Install from GitHub (Alternative)\n\n```bash\n# Install directly from GitHub repository\nnpm install github:Adalink-ai/spark_http#v1.0.0\n```\n\n#### Option 3: Import from CDN (Browser Only)\n\n```javascript\n// Import modules from unpkg or jsDelivr (ESM)\nimport http from \"https://unpkg.com/@adalink/spark-http@1.0.0/dist/http.js\";\n```\n\n**⚠️ Important Notice:**\nThis package is **private** and published to npm. To install it:\n1. Have an npm account\n2. Request access to the `@adalink` scope from the maintainers\n3. Configure npm authentication in your environment\n\n---\n\n### Basic Usage\n\n#### GET Request\n\n```javascript\nimport http from '@adalink/spark-http';\n\n// Simple GET\nconst { data } = await http.GET('https://api.example.com/users').json();\nconsole.log(data); // Array of users\n\n// With error handling\nconst { data, error } = await http.GET('https://api.example.com/data').json();\nif (error) {\n  console.error('Request failed:', error);\n} else {\n  console.log('Response:', data);\n}\n```\n\n#### POST Request\n\n```javascript\nimport http from '@adalink/spark-http';\n\n// Simple POST\nconst { data } = await http\n  .POST('https://api.example.com/users')\n  .body({ name: 'John', email: 'john@example.com' })\n  .json();\n\n// With headers\nconst response = await http\n  .POST('https://api.example.com/login')\n  .headers({\n    'Content-Type': 'application/json',\n    'Authorization': 'Bearer token'\n  })\n  .body({ username: 'john', password: 'secret' })\n  .json();\n```\n\n#### PUT and PATCH\n\n```javascript\nimport http from '@adalink/spark-http';\n\n// PUT request\nconst { data } = await http\n  .PUT('https://api.example.com/users/1')\n  .body({ name: 'John Updated' })\n  .json();\n\n// PATCH request\nconst { data } = await http\n  .PATCH('https://api.example.com/users/1')\n  .body({ email: 'new.email@example.com' })\n  .json();\n```\n\n#### DELETE Request\n\n```javascript\nimport http from '@adalink/spark-http';\n\nconst { error } = await http\n  .DELETE('https://api.example.com/users/1')\n  .json();\n\nif (!error) {\n  console.log('Deleted successfully');\n}\n```\n\n#### Custom Headers\n\n```javascript\nimport http from '@adalink/spark-http';\n\nconst { data } = await http\n  .GET('https://api.example.com/data')\n  .headers({\n    'Authorization': 'Bearer token',\n    'Accept': 'application/json',\n    'X-Custom-Header': 'custom-value'\n  })\n  .json();\n```\n\n#### Request Mode\n\n```javascript\nimport http from '@adalink/spark-http';\n\n// CORS mode\nconst { data } = await http\n  .GET('https://api.example.com/data')\n  .mode('cors')\n  .json();\n\n// No CORS mode\nconst { data } = await http\n  .GET('https://api.example.com/data')\n  .mode('no-cors')\n  .json();\n```\n\n#### Abort Signal\n\n```javascript\nimport http from '@adalink/spark-http';\n\nconst controller = new AbortController();\n\n// Abort after 5 seconds\nsetTimeout(() => controller.abort(), 5000);\n\nconst { data, error } = await http\n  .GET('https://api.example.com/slow-data')\n  .signal(controller.signal)\n  .json();\n\nif (error && error.name === 'AbortError') {\n  console.log('Request aborted');\n}\n```\n\n#### Blob Response\n\n```javascript\nimport http from '@adalink/spark-http';\n\n// Download file as Blob\nconst { data } = await http\n  .GET('https://api.example.com/file.pdf')\n  .blob();\n\n// Create download link\nconst url = URL.createObjectURL(data);\nconst link = document.createElement('a');\nlink.href = url;\nlink.download = 'file.pdf';\nlink.click();\n```\n\n---\n\n## 📦 API Reference\n\n### HTTP Methods\n\nAll HTTP methods are available via the Proxy:\n\n- **http.GET(url)** - GET request\n- **http.POST(url)** - POST request\n- **http.PUT(url)** - PUT request\n- **http.DELETE(url)** - DELETE request\n- **http.PATCH(url)** - PATCH request\n- **http.HEAD(url)** - HEAD request\n- **http.OPTIONS(url)** - OPTIONS request\n- **http.[method](url)** - Any HTTP method\n\n### Chain Methods\n\n#### headers(target)\n\nAdd or update request headers.\n\n**Parameters:**\n- `target` (object) - Key-value pairs of headers\n\n**Example:**\n```javascript\nhttp.GET(url).headers({ 'Authorization': 'Bearer token' })\n```\n\n#### body(target)\n\nAdd JSON body to request.\n\n**Parameters:**\n- `target` (object|array) - Data to stringify and send\n\n**Example:**\n```javascript\nhttp.POST(url).body({ name: 'John' })\n```\n\n#### json()\n\nParse response as JSON.\n\n**Returns:**\n- `{ data: any } | { error: Error }` - Response data or error\n\n**Example:**\n```javascript\nconst { data, error } = await http.GET(url).json();\n```\n\n#### blob()\n\nGet response as Blob.\n\n**Returns:**\n- `{ data: Blob } | { error: Error }` - Response blob or error\n\n**Example:**\n```javascript\nconst { data } = await http.GET(url).blob();\n```\n\n#### mode(target)\n\nSet fetch mode.\n\n**Parameters:**\n- `target` (string) - `'cors'`, `'no-cors'`, `'same-origin'`\n\n**Example:**\n```javascript\nhttp.GET(url).mode('cors')\n```\n\n#### signal(target)\n\nAdd abort signal.\n\n**Parameters:**\n- `target` (AbortSignal) - Signal to abort request\n\n**Example:**\n```javascript\nconst controller = new AbortController();\nhttp.GET(url).signal(controller.signal)\n```\n\n---\n\n## 🎯 Real-World Use Cases\n\n### Data Fetching Service\n\n```javascript\nimport http from '@adalink/spark-http';\nimport cookie from '@adalink/spark-cookie';\n\nclass ApiService {\n  constructor(baseUrl) {\n    this.baseUrl = baseUrl;\n  }\n\n  async get(url, options = {}) {\n    return http\n      .GET(`${this.baseUrl}${url}`)\n      .headers(this.getHeaders(options))\n      .json();\n  }\n\n  async post(url, data, options = {}) {\n    return http\n      .POST(`${this.baseUrl}${url}`)\n      .headers(this.getHeaders(options))\n      .body(data)\n      .json();\n  }\n\n  async put(url, data, options = {}) {\n    return http\n      .PUT(`${this.baseUrl}${url}`)\n      .headers(this.getHeaders(options))\n      .body(data)\n      .json();\n  }\n\n  async delete(url, options = {}) {\n    return http\n      .DELETE(`${this.baseUrl}${url}`)\n      .headers(this.getHeaders(options))\n      .json();\n  }\n\n  getHeaders(options = {}) {\n    const token = cookie.getItem('access_token');\n    const headers = {\n      'Content-Type': 'application/json',\n      ...options.headers\n    };\n    \n    if (token) {\n      headers['Authorization'] = `Bearer ${token}`;\n    }\n    \n    return headers;\n  }\n}\n\n// Usage\nconst api = new ApiService('https://api.example.com');\nconst { data, error } = await api.get('/users');\n```\n\n### File Upload\n\n```javascript\nimport http from '@adalink/spark-http';\n\nasync function uploadFile(file, url) {\n  const formData = new FormData();\n  formData.append('file', file);\n\n  const response = await fetch(url, {\n    method: 'POST',\n    body: formData\n  });\n\n  return response.json();\n}\n\n// Alternative with custom headers\nasync function uploadFileWithAuth(file, url, token) {\n  const { data, error } = await http\n    .POST(url)\n    .headers({\n      'Authorization': `Bearer ${token}`\n    })\n    .body(file) // Note: for FormData, use native fetch\n    .json();\n}\n```\n\n### Request Interceptor\n\n```javascript\nimport http from '@adalink/spark-http';\n\nfunction createHttpClient(config = {}) {\n  return {\n    async request(method, url, body = null) {\n      const chain = http[config.baseURL ? config.baseURL + url : url];\n      \n      if (config.headers) {\n        chain.headers(config.headers);\n      }\n      \n      if (body && ['POST', 'PUT', 'PATCH'].includes(method)) {\n        chain.body(body);\n      }\n      \n      const { data, error } = await chain.json();\n      \n      // Error interceptor\n      if (error) {\n        config.onError?.(error);\n        throw error;\n      }\n      \n      // Success interceptor\n      return config.onSuccess?.(data) ?? data;\n    }\n  };\n}\n\n// Usage\nconst client = createHttpClient({\n  baseURL: 'https://api.example.com',\n  headers: { 'X-API-Key': 'secret' },\n  onError: (error) => console.error('Request failed:', error)\n});\n\nconst data = await client.request('GET', '/users');\n```\n\n---\n\n## 📊 Why Spark HTTP Over Alternatives?\n\n| Feature | Spark HTTP | Axios | fetch | ky |\n|---------|-----------|-------|-------|-----|\n| Zero Dependencies | ✅ | ❌ | ✅ | ✅ |\n| Bundle Size | ~530B | ~11KB | 0B | ~2.5KB |\n| Fluent API | ✅ | ❌ | ❌ | ✅ |\n| Error Handling | ✅ | ✅ | ❌ | ✅ |\n| Request Chaining | ✅ | ❌ | ❌ | ✅ |\n| Proxy Pattern | ✅ | ❌ | ❌ | ❌ |\n| TypeScript Ready | ✅ | ✅ | ✅ | ✅ |\n| Interceptors | ⚠️ | ✅ | ❌ | ✅ |\n\n---\n\n## 🌐 Usage in Frameworks\n\n### With React\n\n```javascript\nimport { useState, useEffect } from 'react';\nimport http from '@adalink/spark-http';\n\nfunction UserList() {\n  const [users, setUsers] = useState([]);\n  const [error, setError] = useState(null);\n  const [loading, setLoading] = useState(true);\n\n  useEffect(() => {\n    async function fetchUsers() {\n      const { data, error } = await http.GET('https://api.example.com/users').json();\n      \n      if (error) {\n        setError(error);\n      } else {\n        setUsers(data);\n      }\n      setLoading(false);\n    }\n    \n    fetchUsers();\n  }, []);\n\n  if (loading) return <div>Loading...</div>;\n  if (error) return <div>Error: {error.message}</div>;\n\n  return (\n    <ul>\n      {users.map(user => (\n        <li key={user.id}>{user.name}</li>\n      ))}\n    </ul>\n  );\n}\n```\n\n### With Vue\n\n```javascript\nimport http from '@adalink/spark-http';\n\nexport default {\n  data() {\n    return {\n      users: [],\n      error: null,\n      loading: true\n    }\n  },\n  async mounted() {\n    const { data, error } = await http.GET('https://api.example.com/users').json();\n    \n    if (error) {\n      this.error = error;\n    } else {\n      this.users = data;\n    }\n    this.loading = false;\n  }\n}\n```\n\n---\n\n## 🛠️ Development\n\n### Prerequisites\n\n- Node.js 18+\n\n### Setup\n\n```bash\n# Clone repository\ngit clone https://github.com/Adalink-ai/spark_http.git\ncd spark_http\n\n# Install dependencies\nnpm install\n\n# Build package\nnpm run build\n\n# Start development server\nnpm run dev\n\n# Lint and format\nnpx biome check .\nnpx biome check --write .\n```\n\n---\n\n## 📚 Documentation\n\n- **Architecture:** [ARCHITECTURE.md](ARCHITECTURE.md) - Design decisions and patterns\n- **Contributing:** [CONTRIBUTING.md](CONTRIBUTING.md) - Development guidelines\n- **Security:** [SECURITY.md](SECURITY.md) - Security policies\n- **Changelog:** [CHANGELOG.md](CHANGELOG.md) - Project changes\n- **Authors:** [AUTHORS.md](AUTHORS.md) - Author information\n\n---\n\n## 🤝 Contributing\n\nWe welcome contributions! Please read our [Contributing Guide](CONTRIBUTING.md) before getting started.\n\n**Ways to contribute:**\n- 🐛 [Report bugs](https://github.com/Adalink-ai/spark_http/issues/new?template=bug_report.md)\n- 💡 [Suggest features](https://github.com/Adalink-ai/spark_http/issues/new?template=feature_request.md)\n- 📖 [Improve documentation](https://github.com/Adalink-ai/spark_http/issues/new?template=documentation.md)\n- 🔧 [Submit pull requests](https://github.com/Adalink-ai/spark_http/pulls)\n\n---\n\n## 👥 Author & Community\n\n**Cleber de Moraes Goncalves** - Creator & Lead Maintainer\n\n- 📧 Email: cleber.engineer@gmail.com\n- 🐙 GitHub: [deMGoncalves](https://github.com/deMGoncalves)\n- 💼 LinkedIn: [deMGoncalves](https://linkedin.com/in/deMGoncalves)\n- 📸 Instagram: [deMGoncalves](https://instagram.com/deMGoncalves)\n\n### 🌟 Star the Project\n\nIf you find Spark HTTP useful, please ⭐ star it on GitHub!\n\n### 📢 Share\n\nShare Spark HTTP with your network:\n- [Twitter](https://twitter.com/intent/tweet?text=Check%20out%20@adalink/spark-http%20-%20A%20modern%20HTTP%20client!&url=https://github.com/Adalink-ai/spark_http)\n- [LinkedIn](https://www.linkedin.com/shareArticle?mini=true&url=https://github.com/Adalink-ai/spark_http&title=Spark%20HTTP&summary=Modern%20HTTP%20client%20for%20web%20development)\n\n---\n\n## 🌐 Spark Ecosystem\n\nO Spark Ecosystem é um conjunto de bibliotecas para desenvolvimento web reativo:\n\n- **[@adalink/spark-std](https://github.com/Adalink-ai/spark_std)** - Biblioteca padrão com decorators para Web Components\n- **[@adalink/spark-echo](https://github.com/Adalink-ai/spark_echo)** - Sistema de comunicação reativa entre componentes\n- **[@adalink/spark-cookie](https://github.com/Adalink-ai/spark_cookie)** - Gerenciamento de cookies\n\n**Mais pacotes em breve:**\n- [@adalink/spark-form](https://github.com/Adalink-ai/spark_form) - Componentes de formulário reativos (em breve)\n- [@adalink/spark-router](https://github.com/Adalink-ai/spark_router) - Roteamento SPA (em breve)\n\n---\n\n## 📄 License\n\n[Apache-2.0](LICENSE) © 2026 Adalink\n\n---\n\n## 🔗 Links\n\n- **Repository:** [github.com/Adalink-ai/spark_http](https://github.com/Adalink-ai/spark_http)\n- **NPM Package:** [npmjs.com/package/@adalink/spark-http](https://www.npmjs.com/package/@adalink/spark-http)\n- **Organization:** [github.com/Adalink-ai](https://github.com/Adalink-ai)\n\n---\n\n**Built with ❤️ by [Adalink](https://github.com/Adalink-ai)**\n\n**Spark HTTP** - Make HTTP requests with ease. 🌐\n","readmeFilename":"README.md"}