
Security News
/Research
Fake Corepack Site Distributes Infostealer and Proxyware to Developers
A fake corepack.org site is impersonating the Node.js tool and delivers an infostealer and proxyware to developers who download it.
A tiny (~2kb after gzipped) fetch API wrapper.
response.ok for you.npm i teleman
NOTE: The code is written in ES2020 syntax and not transpiled. To use it in old browsers, you should transpile the code using tools such as Babel.
import Teleman from 'teleman'
async function main() {
const api = new Teleman({
base: 'http://api.example.com'
});
const article = await api.get('/articles', { id: 123 });
// post JSON
await api.post('/articles', { title: 'Hello', content: '# Hello' });
// post with Content-Type: multipart/form-data
await api.post('/upload', new FormData(document.forms[0]));
}
You can also use Teleman directly without creating an instance.
import { teleman } from 'teleman';
teleman.get(url, query, options);
teleman.post(url, body, options);
teleman.put(url, body, options);
teleman.patch(url, body, options);
teleman.delete(url, query, options);
teleman.head(url, query, options);
teleman.purge(url, query, options);
teleman.use(middleware);
Node.js v18+ included native fetch.
new Teleman({ base, headers, parseResponseBody = true, throwFailedResponse = true})
Creates a Teleman instance.
String. Optional. Base URL. In browser, it's default value is document.baseURI.
Object. Optional. Default headers. It can be a simple key-value object or
Headers object.
Boolean. Optional. Defaults to true. Whether to auto read the response body.
According to content-type header of the response, it will use different methods:
application/json: response.json()text/*: response.text()multipart/form-data: response.formData()If you turn off parseResponseBody, you need to handle response body in the middleware.
const api = new Teleman({ parseResponseBody: false })
api.use(async(ctx, next) => {
await next()
return ctx.response.json()
})
Boolean. Optional. Defaults to true. If response.ok is false, throw the response body.
teleman.fetch(url, {
method = 'GET',
base = this.base,
headers,
query,
params = {},
body,
parseResponseBody = this.parseResponseBody,
throwFailedResponse = this.throwFailedResponse,
use = this.middleware,
useBefore = [],
useAfter = [],
...rest } = {}
)
String. The URL of the request. If it's a relative URL, it's relative to base parameter.
String. Base URL. The request URL will be new URL(url, base).
String. HTTP methods. GET, POST, PUT, PATCH, DELETE, HEAD, PURGE. Defaults to 'GET'.
Object | Headers. HTTP headers.
It will be merged with instance's default headers.
String | Object | Array | URLSearchParams.
The query string appends to the URL. It takes the same format as
URLSearchParams constructor's param.
Object. URL path params.
teleman.fetch('/articles/:id', { params: { id: 1 } })
It will use encodeURIComponent() to encode the values.
Object | FormData | Blob | BufferSource | URLSearchParams | String. The request body.
If the body is a plain object, it will be converted to other type according to content-type of headers:
content-type to application/json.application/json: to JSON string.multipart/form-data: to FormData.application/x-www-form-urlencoded: to URLSearchParams.Boolean. Whether to read response body.
Boolean. Whether to throw when response.ok is false.
Array[function]. Middleware functions to use. Defaults to the middleware functions added by teleman.use().
Array[function]. Applies middleware functions before use.
Array[function]. Applies middleware functions after use.
Other params will be set into the context object.
teleman.fetch() returns a promise.
response.ok is true, the promise will be resolved with the response body, otherwise it will be rejected with
the response body.parseResponseBody is set to false, or content-type can't be handled, the promise will be resolved or rejected with
no value, depending on response.ok. In this case, you should handle the response your self in the middleware.teleman.get(url, query, options)
teleman.post(url, body, options)
teleman.put(url, body, options)
teleman.patch(url, body, options)
teleman.delete(url, query, options)
teleman.head(url, query, options)
teleman.purge(url, query, options)
Add the given middleware function to the instance.
Function. The middleware function to use.
Boolean. Inserts the middleware function at the beginning of middleware chain. Defaults to false.
api.use(async(ctx, next) => {
const start = Date.now()
const data = await next()
const ms = Date.now() - start
console.log(`${ctx.options.method} ${ctx.url.href} - ${ms}ms`)
return data
})
api.use(async(ctx, next) => {
try {
return await next()
} catch (e) {
alert(e ? e.message || e : 'fetch failed')
throw e
}
})
{
url, // URL object
options: { method, headers, body },
response, // available after `await next()`
parseResponseBody,
...rest
}
url and options are params of fetch():
fetch(ctx.url.href, ctx.options)
You can modify the context properties to interfere the request and response.
A middleware function should receive response body from next(), and can optionally transform the data.
Finally it should return the data.
Cross-browser Testing Platform and Open Source <3 Provided by Sauce Labs
FAQs
A browser and node.js fetch API wrapper.
The npm package teleman receives a total of 42 weekly downloads. As such, teleman popularity was classified as not popular.
We found that teleman demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
/Research
A fake corepack.org site is impersonating the Node.js tool and delivers an infostealer and proxyware to developers who download it.

Research
/Security News
A large-scale campaign abused GitHub Actions in compromised repositories to exploit CVE-2026-41940 in cPanel and WHM and steal server credentials.

Security News
Five frontier LLMs generated the same nonexistent package names, leaving 53 available for potential slopsquatting across PyPI and npm.