// npm 패키지
@autofleet/rabbit
The breaking change in this version is the removal of `zehut` from dependencies and usage as a peer-dependency. The required version of zehut is now `^4.0.0`.
버전
422
메인테이너
79
라이선스
Proprietary
최초 publish
2018-12-05
publisher
GitHub Actions
tarball
305,789 B
AUTO-PUBLISHED·1개 버전 인덱싱됨·최근 publish: 2026-05-26
// publisher 캠페인by GitHub Actions
이 계정에서 catch된 패키지 9건고립된 catch가 아닙니다. 동일 publisher가 8개의 다른 패키지를 추가로 발행했고, 모두 파이프라인이 catch했습니다 — 일회성이 아닌 조직적 캠페인의 형태. 아래 링크는 각 형제 catch의 분석으로 이동합니다.
// offending code· @5.6.0· 1 file flagged
llm: benign · 0.85→ 의심 전송지 없음, 원격 실행 형태 없음 — 1 known-vendor host(s).
- @5.6.0··AUTO-PUBLISHED·publisher: GitHub Actionsheuristic 75/100static flags 1llm benign (0.85) via ollamainstall-scripts:postinstallmature-packagehas-source-repoosv-flagged:MAL-2026-4787public-github-push
→ 의심 전송지 없음, 원격 실행 형태 없음 — 1 known-vendor host(s).
// offending code· 1 file flaggedpatterns: 1
--- install scripts --- ### postinstall echo '\033[0;31m WARNING: in case of migrating to new version of @autofleet/rabbit you might have to delete existing queues or the deployment will fail.\033[0m ' --- package/package.json (excerpt) --- { "name": "@autofleet/rabbit", "version": "5.6.0", "description": "", "type": "module", "main": "dist/index.js", "types": "dist/index.d.ts", "exports": { ".": { "import": { "types": "./dist/index.d.ts", "default": "./dist/index.js" }, "require": { "types": "./dist/index.d.cts", "default": "./dist/index.cjs" } }, "./dist/mock": { "import": { "types": "./dist/mock/index.d.ts", "default": "./dist/mock/index.js" }, "require": { "types": "./dist/mock/index.d.cts", "default": "./dist/mock/index.cjs" } }, "./mock/vitest": { "import": { "types": "./dist/mock/vitest.d.ts", "default": "./dist/mock/vitest.js" }, "require": { "types": "./dist/mock/vitest.d.cts", "default": "./dist/mock/vitest.cjs" } } }, "files": [ "dist/" ], "engines": { "node": ">=18.0.0" }, "repository": { "type": "git", "url": "git+https://github.com/Autofleet/autorepo.git" }, "bugs": { "url": "https://github.com/Autofleet/autorepo/issues" }, "homepage": "https://github.com/Autofleet/autorepo/tree/master/packages/rabbit#readme", "dependencies": { "amqp-connection-manager": "4.1.14", "amqplib": "0.10.5", "exponential-backoff": "^3.1.2", "moment": "^2.30.1", "redis": "^4.7.1", "redis-lock": "^1.0.0" }, "peerDependencies": { "@autofleet/logger": --- bundled output (OSV-MAL flagged — LLM scope expansion) --- --- dist/index-_hV-HaYU.d.ts (bundled) --- import { EventEmitter } from "node:events"; import RedisLock from "redis-lock"; import { AmqpConnectionManager, ChannelWrapper, CreateChannelOpts } from "amqp-connection-manager"; import "exponential-backoff"; import { LoggerInstanceManager } from "@autofleet/logger"; import { createClient } from "redis"; import { PublishOptions } from "amqp-connection-manager/dist/types/ChannelWrapper"; import { ConfirmChannel, ConsumeMessage, Options, Replies } from "amqplib"; //#region src/lib/redis.d.ts interface RedisConfig { host: string; port: number | undefined; prefix?: string; } //#endregion //#region src/lib/consts.d.ts declare const CONNECTION_ROLE: { readonly CONSUMER: "consumer"; readonly PUBLISHER: "publisher"; }; //#endregion //#region src/lib/types.d.ts type ExchangesCache = Record<string, Replies.AssertExchange | undefined>; type QueuesCache = Record<string, Replies.AssertQueue | undefined>; type QueueSetupPromisesDictionary = Record<string, Promise<Replies.AssertQueue> | undefined>; type AssertExchangePromisesDictionary = Record<string, Promise<Replies.AssertExchange> | undefined>; interface CustomMessageHeaders { redisTimestampValidationKey?: string; } type ConsumeMessageOrNull = ConsumeMessage | null; interface ConsumeOptions { retries?: number; deadMessageTtl?: number; messageTtl?: number; limit?: number; lockTimeout?: number; useConsumeWithLock?: boolean; auditContext?: any; enableRabbitTrace?: boolean; isQuorumQueue?: boolean; callNackOnAbort?: boolean; onNack?: (params: { msg: Message; retryCount: number; remainingRetries: number; sendToDeadQueue: boolean; nackContext?: Record<string, unknown>; }) => void | Promise<void>; } interface NackOptions { skipRetry?: boolean; nackContext?: Record<string, unknown>; } type Message = Omit<ConsumeMessage, "content"> & { content: any; }; type CallbackFunction = (msg: Message, ack: () => Promise<void>, nack: (ignored: ConsumeMessageOrNull, nackOptions?: NackO --- dist/index.cjs (bundled) --- Object.defineProperty(exports,`__esModule`,{value:!0});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let c=require(`node:process`),l=require(`node:timers/promises`),u=require(`node:events`),d=require(`moment`);d=s(d);let f=require(`redis-lock`);f=s(f);let p=require(`amqp-connection-manager`),m=require(`exponential-backoff`),h=require(`@autofleet/zehut`),g=require(`node:crypto`),_=require(`@autofleet/logger`);_=s(_);let v=require(`redis`);const y=(0,_.default)();var b=y,x=class extends Error{constructor(e){super(e),this.name=`RabbitError`}};const S=e=>(0,v.createClient)({socket:e});var C=S;const w=6e4*60*12,T=1e3*5,E=`x-retry-count`,D=`x-trace-id`,O=`x-af-user-id`,k=`x-af-automation-id`,A=`x-total-processing-duration-ms`,j=`x-redelivered-count`,M=!1,N={limit:1,retries:1,deadMessageTtl:432e5,lockTimeout:T,useConsumeWithLock:!1,auditContext:null,enableRabbitTrace:!1,callNackOnAbort:!1},P={startingDelay:500,timeMultiple:4,numOfAttempts:5},F={startingDelay:1,timeMultiple:1,numOfAttempts:5},I=`ha-promote-on-failure`,L=`ha-promote-on-shutdown`,R={arguments:{"ha-promote-on-failure":`always`,"ha-promote-on-shutdown":`always`}},z={CONSUMER:`consumer`,PUBLISHER:`publisher`},{PROJECT_ID:B}=process.env,V=async(e,t)=>e.assertExchange(t,`fanout`),H=()=>Math.floor(Math.random()*1e5),U=()=>{if(Promise.withResolvers)return Promise.withResolvers();let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}},W=()=>[`af-experiment-manager`,`dev1-experiment-manager`].includes(B||``),G=()=>W()?P:F,K={host:process.env.RABBITMQ_SERVICE_HOST||`localhost`, --- dist/index.d.ts (bundled) --- import { a as sendCeleryTaskViaHttp, i as RabbitMq, n as ConsumerCallbackFunction, r as IAfRabbitMq, t as AfRabbitOptions } from "./index-_hV-HaYU.js"; export { AfRabbitOptions, ConsumerCallbackFunction, IAfRabbitMq, RabbitMq as default, sendCeleryTaskViaHttp }; --- dist/index.js (bundled) --- import{env as e}from"node:process";import{setImmediate as t}from"node:timers/promises";import{EventEmitter as n,addAbortListener as r,once as i}from"node:events";import a from"moment";import o from"redis-lock";import{connect as s}from"amqp-connection-manager";import{backOff as c}from"exponential-backoff";import{CONTEXTS_IDS_HEADER as l,createOrSetRabbitTrace as u,getUser as d,newTrace as f,outbreak as p,traceTypes as m}from"@autofleet/zehut";import{randomUUID as h}from"node:crypto";import g from"@autofleet/logger";import{createClient as _}from"redis";var v=g(),y=class extends Error{constructor(e){super(e),this.name=`RabbitError`}},b=e=>_({socket:e});const x=1e3*5,S=`x-retry-count`,C=`x-trace-id`,w=`x-af-user-id`,T=`x-af-automation-id`,E=`x-total-processing-duration-ms`,D=`x-redelivered-count`,O={limit:1,retries:1,deadMessageTtl:432e5,lockTimeout:x,useConsumeWithLock:!1,auditContext:null,enableRabbitTrace:!1,callNackOnAbort:!1},k={startingDelay:500,timeMultiple:4,numOfAttempts:5},A={startingDelay:1,timeMultiple:1,numOfAttempts:5},j={arguments:{"ha-promote-on-failure":`always`,"ha-promote-on-shutdown":`always`}},M={CONSUMER:`consumer`,PUBLISHER:`publisher`},{PROJECT_ID:N}=process.env,P=async(e,t)=>e.assertExchange(t,`fanout`),F=()=>Math.floor(Math.random()*1e5),I=()=>{if(Promise.withResolvers)return Promise.withResolvers();let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}},L=()=>[`af-experiment-manager`,`dev1-experiment-manager`].includes(N||``),R=()=>L()?k:A,z={host:process.env.RABBITMQ_SERVICE_HOST||`localhost`,username:process.env.RABBITMQ_USERNAME||`guest`,password:process.env.RABBITMQ_PASSWORD||`guest`};async function B(e,{taskName:t,queueName:n}){let r=`http://${z.host}:15672/api/exchanges/%2f/amq.default/publish`,i={task:t,id:h(),args:[e]},a={properties:{delivery_mode:2,content_type:`application/json`},routing_key:n,payload:JSON.stringify(i),payload_encoding:`string`};try{let e=await fetch(r,{method:`POST`,headers:{"Content-Type":`applica --- dist/mock/index.cjs (bundled) --- Object.defineProperty(exports,`__esModule`,{value:!0}),require(`jest`);var e=class{constructor(){this.ack=jest.fn(),this.nack=jest.fn(),this.assertChannel=jest.fn(),this.assertExchange=jest.fn(),this.assertQueue=jest.fn(),this.consume=jest.fn(),this.consumeFromExchange=jest.fn(),this.publish=jest.fn(),this.sendToQueue=jest.fn(),this.getRetriesCount=jest.fn(),this.getTotalConsumptionDuration=jest.fn(),this.stopAcceptingWork=jest.fn(),this.drain=jest.fn(),this.startConsume=jest.fn()}},t=e;exports.default=t; //# sourceMappingURL=index.cjs.map --- dist/mock/index.d.ts (bundled) --- import { r as IAfRabbitMq } from "../index-_hV-HaYU.js"; import "jest"; //#region src/mock/index.d.ts declare class RabbitMq implements IAfRabbitMq { ack: any; nack: any; assertChannel: any; assertExchange: any; assertQueue: any; consume: any; consumeFromExchange: any; publish: any; sendToQueue: any; getRetriesCount: any; getTotalConsumptionDuration: any; stopAcceptingWork: any; drain: any; startConsume: any; } //#endregion export { RabbitMq as default }; //# sourceMappingURL=index.d.ts.map --- dist/mock/index.js (bundled) --- import"jest";var e=class{constructor(){this.ack=jest.fn(),this.nack=jest.fn(),this.assertChannel=jest.fn(),this.assertExchange=jest.fn(),this.assertQueue=jest.fn(),this.consume=jest.fn(),this.consumeFromExchange=jest.fn(),this.publish=jest.fn(),this.sendToQueue=jest.fn(),this.getRetriesCount=jest.fn(),this.getTotalConsumptionDuration=jest.fn(),this.stopAcceptingWork=jest.fn(),this.drain=jest.fn(),this.startCon
