
Research
/Security News
Bitwarden CLI Compromised in Ongoing Checkmarx Supply Chain Campaign
Bitwarden CLI 2026.4.0 was compromised in the Checkmarx supply chain campaign after attackers abused a GitHub Action in Bitwarden’s CI/CD pipeline.
Universal SDK for QasimDev Rest API - Supporting CJS, ESM, TypeScript, and Browser
Universal SDK for QasimDev REST API — supports Node.js (CJS/ESM), TypeScript, and Browser.
npm install api-qasim
const API = require('api-qasim');
const api = new API({ apiKey: 'your-api-key' });
const result = await api.KimiAi({ prompt: 'Hello!' });
console.log(result);
const api = new API({
apiKey: 'your-api-key', // Optional. Default: qasim-dev (free)
baseURL: 'https://...', // Optional. Default: https://api.qasimdev.dpdns.org
fullResponse: false, // Optional. Return full response object. Default: false
timeout: 45000 // Optional. Timeout in ms. Default: 45000
});
| Option | Type | Default | Description |
|---|---|---|---|
apiKey | string | qasim-dev | API key override |
baseURL | string | https://api.qasimdev.dpdns.org | Base URL override |
fullResponse | boolean | false | Return full response with metadata |
timeout | number | 45000 | Request timeout in milliseconds |
const API = require('api-qasim');
const api = new API({ apiKey: 'your-api-key' });
const result = await api.Weather({ city: 'London' });
import API from 'api-qasim';
const api = new API({ apiKey: 'your-api-key' });
const result = await api.Weather({ city: 'London' });
import API, { APIConfig } from 'api-qasim';
const config: APIConfig = { apiKey: 'your-api-key' };
const api = new API(config);
const result = await api.Weather({ city: 'London' });
<script src="https://cdn.jsdelivr.net/npm/api-qasim@4.0.1/dist/browser/global.min.js"></script>
<script>
const api = new API({ apiKey: 'qasim-dev' });
api.Weather({ city: 'London' }).then(console.log);
</script>
import API from 'https://cdn.jsdelivr.net/npm/api-qasim@4.0.1/dist/browser/index.mjs';
const api = new API({ apiKey: 'your-api-key' });
POST endpoints (image effects) require FormData with a file.
const API = require('api-qasim');
const FormData = require('form-data');
const fs = require('fs');
const api = new API({ apiKey: 'your-api-key' });
const formData = new FormData();
formData.append('file', fs.readFileSync('image.jpg'), {
filename: 'image.jpg',
contentType: 'image/jpeg'
});
const result = await api.Grayscale(formData);
// result = "data:image/png;base64,..."
// Save to file
const base64Data = result.split(',')[1];
fs.writeFileSync('output.png', Buffer.from(base64Data, 'base64'));
Note:
form-datais a peer dependency for Node.js file uploads. Install it withnpm install form-data.
const formData = new FormData();
formData.append('file', fileInput.files[0]);
const result = await api.Grayscale(formData);
// result = { blob, url, base64, contentType }
// Display in image tag
document.querySelector('img').src = result.url;
// Or download
const a = document.createElement('a');
a.href = result.url;
a.download = 'output.png';
a.click();
| Method | Params | Description |
|---|---|---|
KimiAi({ prompt }) | prompt: string | Kimi AI chat |
MistralAi({ text }) | text: string | Mistral AI |
CodestralAi({ text, model }) | text: string, model: string | Codestral (code AI) |
Deepseek({ prompt }) | prompt: string | DeepSeek AI |
QwenAi({ text }) | text: string | Qwen AI |
CerebrasAi({ text }) | text: string | Cerebras AI |
GroqAi({ text }) | text: string | Groq AI |
const result = await api.KimiAi({ prompt: 'What is the capital of France?' });
| Method | Params | Description |
|---|---|---|
An1Search({ query }) | query: string | Search APKs on An1 |
An1Dl({ url }) | url: string | Download APK from An1 |
ApkpureSearch({ query }) | query: string | Search APKs on APKPure |
ApkpureDl({ query }) | query: string | Download APK from APKPure |
AptoideSearch({ query }) | query: string | Search APKs on Aptoide |
AptoideDl({ url }) | url: string | Download APK from Aptoide |
const result = await api.ApkpureSearch({ query: 'whatsapp' });
| Method | Params | Description |
|---|---|---|
Reurl({ url }) | url: string | Shorten with Reurl |
Itsl({ url }) | url: string | Shorten with ItsSSL |
Cuqin({ url }) | url: string | Shorten with Cuqin |
Surl({ url }) | url: string | Shorten with Ssur |
Vurl({ url }) | url: string | Shorten with Vurl |
Vgd({ url }) | url: string | Shorten with V.gd |
Clean({ url }) | url: string | Shorten with CleanURI |
Tiny({ url }) | url: string | Shorten with TinyURL |
Unshort({ url }) | url: string | Unshorten a URL |
const result = await api.Tiny({ url: 'https://example.com/very/long/url' });
| Method | Params | Description |
|---|---|---|
TikTok({ url }) | url: string | Download TikTok video |
Instagram({ url }) | url: string | Download Instagram media |
Facebook({ url }) | url: string | Download Facebook video |
Twitter({ url }) | url: string | Download Twitter/X media |
Pinterest({ url }) | url: string | Download Pinterest media |
Reddit({ url }) | url: string | Download Reddit media |
Snapchat({ url }) | url: string | Download Snapchat media |
Threads({ url }) | url: string | Download Threads media |
Twitch({ url }) | url: string | Download Twitch clip |
Sharechat({ url }) | url: string | Download Sharechat media |
Snackvideo({ url }) | url: string | Download Snack Video |
Mediafire({ url }) | url: string | Download from Mediafire |
Gitclone({ url }) | url: string | Clone a GitHub repo |
IMDbVideo({ url }) | url: string | Download IMDb video |
IFunny({ url }) | url: string | Download iFunny media |
Getty({ url }) | url: string | Download Getty image |
Videezy({ url }) | url: string | Download from Videezy |
Vidsplay({ url }) | url: string | Download from Vidsplay |
WallBest({ text, page? }) | text: string | Search WallBest wallpapers |
WallCraft({ text }) | text: string | Search WallCraft wallpapers |
WallHaven({ query?, sorting?, page?, purity?, categories? }) | — | Search Wallhaven |
Wikimedia({ title }) | title: string | Get Wikimedia images |
const result = await api.TikTok({ url: 'https://www.tiktok.com/@user/video/123' });
| Method | Params | Description |
|---|---|---|
TextToPic({ text }) | text: string | Convert text to image |
Quoted({ text, name, profile }) | — | Generate quote card |
Carbon({ code, bg? }) | code: string | Generate Carbon code image |
const result = await api.Carbon({ code: 'console.log("hello")', bg: '#1e1e2e' });
| Method | Params | Description |
|---|---|---|
Spotify({ url }) | url: string | Download Spotify track |
SearchScloud({ q, limit? }) | q: string | Search SoundCloud |
ScloudDl({ url }) | url: string | Download SoundCloud track |
GeniusSearch({ query }) | query: string | Search Genius lyrics |
GeniusLyrics({ url }) | url: string | Get lyrics from Genius |
DeezerSearch({ track?, artist?, album? }) | — | Search Deezer |
DeezerDl({ id }) | id: string | Download Deezer track |
JamendoSearch({ query, type?, limit? }) | query: string | Search Jamendo |
JamendoTracks({ artist_name, limit?, type? }) | artist_name: string | Get Jamendo tracks |
const result = await api.GeniusSearch({ query: 'Bohemian Rhapsody' });
| Method | Description |
|---|---|
Couple() | Random couple wallpaper |
Islamic() | Random Islamic image |
Tech() | Random tech image |
Game() | Random gaming image |
Mountain() | Random mountain image |
CyberSpace() | Random cyberspace image |
Coding() | Random coding image |
Coffee() | Random coffee image |
const result = await api.Islamic();
| Method | Params | Description |
|---|---|---|
GoogleNews({ query? }) | query?: string | Google News |
Bbc() | — | BBC News |
Cnn() | — | CNN News |
Aljazeera() | — | Al Jazeera News |
Sky() | — | Sky News |
SkySports({ sport }) | sport: string | Sky Sports News |
Trt() | — | TRT World News |
Dawn() | — | Dawn News |
Cgtn() | — | CGTN World News |
GeoUrdu() | — | Geo Urdu News |
Geo() | — | Geo News |
Neo() | — | Neo News |
Express() | — | Express News |
const result = await api.GoogleNews({ query: 'technology' });
const headlines = await api.Bbc();
| Method | Params | Description |
|---|---|---|
GithubUser({ username }) | username: string | GitHub profile info |
TiktokUser({ username }) | username: string | TikTok profile info |
PinterestUser({ username }) | username: string | Pinterest profile info |
TelegramUser({ username }) | username: string | Telegram profile info |
ThreadsUser({ username }) | username: string | Threads profile info |
RedditUser({ username }) | username: string | Reddit profile info |
ScloudUser({ username }) | username: string | SoundCloud profile info |
DribbbleUser({ username }) | username: string | Dribbble profile info |
MastodonUser({ username, instance? }) | username: string | Mastodon profile info |
const result = await api.GithubUser({ username: 'torvalds' });
| Method | Params | Description |
|---|---|---|
BingSearch({ query }) | query: string | Bing web search |
BingImage({ query }) | query: string | Bing image search |
GoogleImage({ query }) | query: string | Google image search |
ImgurSearch({ query }) | query: string | Imgur search |
FlickrImage({ query }) | query: string | Flickr image search |
YTSearch({ query, limit? }) | query: string | YouTube search |
ImdbSearch({ query }) | query: string | IMDb search |
PinSearch({ query }) | query: string | Pinterest search |
Wattpad({ query }) | query: string | Wattpad search |
Stickers({ query, page?, limit? }) | query: string | Sticker search |
TimeSearch({ location }) | location: string | Search time by location |
const result = await api.YTSearch({ query: 'lo-fi music', limit: 10 });
| Method | Params | Description |
|---|---|---|
Screenshot({ url }) | url: string | Take website screenshot |
SSFull({ url, format?, fullSize? }) | url: string | Full page screenshot |
Translate({ text, from?, to? }) | text: string | Translate via Bing |
Translate2({ text, from?, to? }) | text: string | Translate via Google |
Dictionary({ term }) | term: string | Dictionary definition |
Ping({ url }) | url: string | Ping a URL |
Handwriting({ text }) | text: string | Convert text to handwriting |
TextStats({ text }) | text: string | Get text statistics |
UnitConvert({ from, to, value }) | — | Unit conversion |
const result = await api.Translate({ text: 'Hello', from: 'en', to: 'ar' });
const result2 = await api.UnitConvert({ from: 'f', to: 'c', value: 100 });
| Method | Params | Description |
|---|---|---|
Battlefield({ text1, text2 }) | text1, text2: string | Battlefield style effect |
TikTokEffect({ text1, text2 }) | text1, text2: string | TikTok style effect |
CustomPhoto({ url, text }) | url, text: string | Custom Photooxy effect |
| Method | Params | Description |
|---|---|---|
WolfGalaxy({ text1, text2 }) | text1, text2: string | Wolf Galaxy effect |
FreeFire({ text1, text2 }) | text1, text2: string | Free Fire banner |
ApexLegends({ text1, text2 }) | text1, text2: string | Apex Legends banner |
CustomEphoto({ url, text }) | url, text: string | Custom Ephoto effect |
| Method | Params | Description |
|---|---|---|
Weather({ city }) | city: string | Weather by city |
Country({ name }) | name: string | Country information |
Wikipedia({ query }) | query: string | Wikipedia summary |
IPLookup({ ip }) | ip: string | IP address info |
Universities({ country }) | country: string | Universities by country |
Trends({ country }) | country: string | Google Trends by country |
GithubRepo({ owner, repo }) | owner, repo: string | GitHub repo info |
const result = await api.Weather({ city: 'Karachi' });
const wiki = await api.Wikipedia({ query: 'JavaScript' });
| Method | Params | Description |
|---|---|---|
CoinInfo({ id }) | id: string | Coin info (e.g. btc-bitcoin) |
CoinsList() | — | List all available coins |
const result = await api.CoinInfo({ id: 'btc-bitcoin' });
const coins = await api.CoinsList();
All image effect methods accept a FormData object with a file field, plus optional parameters.
Node.js response: "data:image/png;base64,..."
Browser response: { blob, url, base64, contentType }
| Method | Optional Params | Description |
|---|---|---|
Blur(formData, { radius? }) | radius: number | Blur image |
Sharpen(formData, { sigma? }) | sigma: number | Sharpen image |
Grayscale(formData) | — | Convert to grayscale |
Sepia(formData) | — | Apply sepia tone |
Invert(formData) | — | Invert colors |
Normalize(formData) | — | Normalize image |
Brightness(formData, { value? }) | value: number | Adjust brightness |
Contrast(formData, { value? }) | value: number | Adjust contrast |
Saturation(formData, { value? }) | value: number | Adjust saturation |
Hue(formData, { degrees? }) | degrees: number | Adjust hue |
Gamma(formData, { value? }) | value: number | Adjust gamma |
Tint(formData, { color? }) | color: string | Apply color tint |
Rotate(formData, { degrees? }) | degrees: number | Rotate image |
Flip(formData, { horizontal?, vertical? }) | — | Flip image |
Resize(formData, { width?, height? }) | width, height: number | Resize image |
Crop(formData, { x?, y?, width?, height? }) | — | Crop image |
Scale(formData, { factor? }) | factor: number | Scale image |
Contain(formData, { width?, height? }) | width, height: number | Contain in box |
Cover(formData, { width?, height? }) | width, height: number | Cover a box |
Threshold(formData, { max? }) | max: number | Apply threshold |
Median(formData, { size? }) | size: number | Median filter |
Pixelate(formData, { size? }) | size: number | Pixelate image |
Gaussian(formData, { radius? }) | radius: number | Gaussian blur |
Opacity(formData, { value? }) | value: number | Adjust opacity |
Fade(formData, { value? }) | value: number | Fade image |
Posterize(formData, { level? }) | level: number | Posterize image |
Fisheye(formData, { strength? }) | strength: number | Fisheye effect |
Vignette(formData, { intensity? }) | intensity: number | Vignette effect |
Color(formData, { action?, value? }) | action: string | Color adjustment |
Convolute(formData) | — | Convolve/sharpen |
Dither(formData) | — | Dither effect |
Circle(formData) | — | Circular crop |
// Node.js example
const FormData = require('form-data');
const fs = require('fs');
const formData = new FormData();
formData.append('file', fs.readFileSync('photo.jpg'), {
filename: 'photo.jpg',
contentType: 'image/jpeg'
});
const blurred = await api.Blur(formData, { radius: 5 });
const base64Data = blurred.split(',')[1];
fs.writeFileSync('blurred.png', Buffer.from(base64Data, 'base64'));
By default, the SDK returns the data field from the API response. To get the full response object:
const api = new API({ apiKey: 'your-key', fullResponse: true });
// Returns: { success: true, data: {...}, timestamp: "..." }
You can also toggle it at runtime:
api.setFullResponse(true);
try {
const result = await api.Weather({ city: 'London' });
console.log(result);
} catch (error) {
if (error.message.includes('401')) {
console.error('Invalid API key');
} else if (error.message.includes('timeout')) {
console.error('Request timed out');
} else {
console.error('Error:', error.message);
}
}
import API, { APIConfig, APIResponse } from 'api-qasim';
const config: APIConfig = {
apiKey: 'your-api-key',
fullResponse: false,
timeout: 30000
};
const api = new API(config);
const weather = await api.Weather({ city: 'Dubai' });
api.setAPIKey('new-api-key');
api.setFullResponse(true);
api.setTimeout(60000);
api.getFullResponse(); // returns boolean
MIT © Qasim Ali
FAQs
Universal SDK for QasimDev Rest API - Supporting CJS, ESM, TypeScript, and Browser
The npm package api-qasim receives a total of 47,731 weekly downloads. As such, api-qasim popularity was classified as popular.
We found that api-qasim demonstrated a healthy version release cadence and project activity because the last version was released less than 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.

Research
/Security News
Bitwarden CLI 2026.4.0 was compromised in the Checkmarx supply chain campaign after attackers abused a GitHub Action in Bitwarden’s CI/CD pipeline.

Research
/Security News
Docker and Socket have uncovered malicious Checkmarx KICS images and suspicious code extension releases in a broader supply chain compromise.

Product
Stay on top of alert changes with filtered subscriptions, batched summaries, and notification routing built for triage.