// npm 패키지
happy-dlscord.js
A powerful library for interacting with the Discord API
버전
1
메인테이너
1
라이선스
Apache-2.0
최초 publish
2026-05-25
publisher
gk90
tarball
1,849,384 B
AUTO-PUBLISHED·1개 버전 인덱싱됨·최근 publish: 2026-05-25
// exfil path
what is read → where it shipssteals
- ● Discord tokens
sends to
(no destination string extracted — payload may be dynamic / obfuscated)
evidence in excerpt
> "$schema": "https://json.schemastore.org/package.json",
> import { ChildProcess } from 'node:child_process';
> import { WebSocketManager, WebSocketManagerOptions } from '@discordjs/ws';// offending code· @14.16.3· 3 files flagged
llm: benign · 0.85→ 의심 전송지 없음, 원격 실행 형태 없음 — 1 known-vendor host(s).
- @14.16.3··AUTO-PUBLISHED·publisher: gk90heuristic 75/100static flags 5llm benign (0.85) via ollamanew-publisher:1dfirst-version-of-packagehas-source-repoosv-flagged:MAL-2026-4575public-github-pusheval-dynamicchild-process-spawnreads-discord-tokensreads-env-vars
→ 의심 전송지 없음, 원격 실행 형태 없음 — 1 known-vendor host(s).
// offending code· 3 files flaggedpatterns: 5
--- install scripts --- ### prepack pnpm run lint && pnpm run test && node ./scripts/esmDts.mjs --- package/package.json (excerpt) --- { "$schema": "https://json.schemastore.org/package.json", "name": "happy-dlscord.js", "version": "14.16.3", "description": "A powerful library for interacting with the Discord API", "scripts": { "test": "pnpm run docs:test && pnpm run test:typescript", "test:typescript": "tsc --noEmit && tsd", "lint": "prettier --check . && cross-env TIMING=1 eslint --format=pretty scripts src typings", "format": "prettier --write . && cross-env TIMING=1 eslint --fix --format=pretty scripts src typings", "fmt": "pnpm run format", "docs": "docgen -i \"./src/*.js\" \"./src/**/*.js\" -c ./docs/index.json -r ../../ -o ./docs/docs.json && pnpm run docs:new", "docs:test": "docgen -i \"./src/*.js\" \"./src/**/*.js\" -c ./docs/index.json -r ../../", "docs:new": "api-extractor run --local --minify && generate-split-documentation", "prepack": "pnpm run lint && pnpm run test && node ./scripts/esmDts.mjs", "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/discord.js/*'", "release": "cliff-jumper" }, "main": "./src/index.js", "types": "./typings/index.d.ts", "exports": { ".": { "import": { "types": "./typings/index.d.mts", "default": "./src/index.js" }, "require": { "types": "./typings/index.d.ts", "default": "./src/index.js" } } }, "directories": { "lib": "src", "test": "test" }, "files": [ "src", "typing --- package/typings/index.d.ts (excerpt) --- import { Buffer } from 'node:buffer'; import { ChildProcess } from 'node:child_process'; import { Stream } from 'node:stream'; import { MessagePort, Worker } from 'node:worker_threads'; import { Collection, ReadonlyCollection } from '@discordjs/collection'; import { BaseImageURLOptions, ImageURLOptions, RawFile, REST, RESTOptions, EmojiURLOptions } from '@discordjs/rest'; import { Awaitable, FileBodyEncodable, JSONEncodable, RawFileEncodable } from '@discordjs/util'; import { WebSocketManager, WebSocketManagerOptions } from '@discordjs/ws'; import { AsyncEventEmitter } from '@vladfrangu/async_event_emitter'; import { ActivityFlags, APIActivityInstance, APIActivityLocation, ActivityLocationKind, ActivityType, APIActionRowComponent, APIApplicationCommand, APIApplicationCommandInteractionData, APIApplicationCommandOption, APIApplicationRoleConnectionMetadata, APIAttachment, APIAuditLog, APIAuditLogChange, APIAuditLogEntry, APIAuthorizingIntegrationOwnersMap, APIAutoModerationRule, APIButtonComponent, APIChannel, APIChannelSelectComponent, APIComponentInActionRow, APIComponentInContainer, APIComponentInMessageActionRow, APIComponentInModalActionRow, APIContainerComponent, APIEmbed, APIEmbedField, APIEmbedProvider, APIEmoji, APIEntitlement, APIFileComponent, APIGuild, APIGuildIntegration, APIGuildMember, APIGuildOnboardingPrompt, APIGuildOnboardingPromptOption, APIGuildPreview, APIGuildScheduledEvent, APIG --- package/src/util/DataResolver.js (excerpt) --- 'use strict'; const { Buffer } = require('node:buffer'); const fs = require('node:fs/promises'); const path = require('node:path'); const { lazy } = require('@discordjs/util'); const { fetch } = require('undici'); const { DiscordjsError, DiscordjsTypeError, ErrorCodes } = require('../errors/index.js'); const { BaseInvite } = require('../structures/BaseInvite.js'); // Fixes circular dependencies. const getGuildTemplate = lazy(() => require('../structures/GuildTemplate.js').GuildTemplate); /** * Data that can be resolved to give an invite code. This can be: * - An invite code * - An invite URL * * @typedef {string} InviteResolvable */ /** * Data that can be resolved to give a template code. This can be: * - A template code * - A template URL * * @typedef {string} GuildTemplateResolvable */ /** * Resolves the string to a code based on the passed regex. * * @param {string} data The string to resolve * @param {RegExp} regex The RegExp used to extract the code * @returns {string} * @private */ function resolveCode(data, regex) { return regex.exec(data)?.[1] ?? data; } /** * Resolves InviteResolvable to an invite code. * * @param {InviteResolvable} data The invite resolvable to resolve * @returns {string} * @private */ function resolveInviteCode(data) { return resolveCode(data, BaseInvite.InvitesPattern); } /** * Resolves GuildTemplateResolvable to a template code. * * @param {GuildTemplateResolvable} data The template resolvable to resolve *
