{
  "slug": "toss-payments-nestjs",
  "name": "@gj-kit/toss-payments-nestjs",
  "version": "0.4.4",
  "description": "NestJS dependency injection and raw-body webhook integration for @gj-kit/toss-payments.",
  "homepage": "https://gj-kit.github.io/gj-kit/packages/toss-payments-nestjs/",
  "repository": "git+https://github.com/gj-kit/gj-kit.git",
  "license": "MIT",
  "engines": {
    "node": ">=20"
  },
  "peerDependencies": {
    "@gj-kit/toss-payments": "^0.2.0 || ^0.3.0 || ^0.4.0 || ^0.5.0 || ^0.6.0",
    "@nestjs/common": "^10 || ^11",
    "reflect-metadata": "^0.1.13 || ^0.2",
    "rxjs": "^7"
  },
  "peerDependenciesMeta": {},
  "entries": [
    {
      "subpath": ".",
      "id": "root",
      "declarationTarget": "./dist/index.d.cts",
      "symbols": [
        {
          "name": "AnyTossPaymentsConfig",
          "slug": "any-toss-payments-config",
          "kind": "type",
          "declaration": "/** forRoot/forRootAsync가 수용하는 config 합집합 — 코어 defineTossPaymentsConfig 산출물. */\ntype AnyTossPaymentsConfig = TossPaymentsApiConfig<Env> | TossPaymentsWidgetConfig<Env>;",
          "sourceDocumentation": "forRoot/forRootAsync가 수용하는 config 합집합 — 코어 defineTossPaymentsConfig 산출물."
        },
        {
          "name": "getTossPaymentsToken",
          "slug": "get-toss-payments-token",
          "kind": "function",
          "declaration": "/**\n * 이름별 kit 바인딩 토큰을 만든다. `Symbol.for`를 써 ESM/CJS 이중 로드에서도 같은\n * 이름은 같은 토큰으로 해석된다. 같은 Nest application에서 같은 이름을 두 번\n * register하면 provider 토큰이 충돌하므로 이름을 유일하게 유지해야 한다.\n */\ndeclare function getTossPaymentsToken(name: TossPaymentsKitName): symbol;",
          "sourceDocumentation": "이름별 kit 바인딩 토큰을 만든다. `Symbol.for`를 써 ESM/CJS 이중 로드에서도 같은\n이름은 같은 토큰으로 해석된다. 같은 Nest application에서 같은 이름을 두 번\nregister하면 provider 토큰이 충돌하므로 이름을 유일하게 유지해야 한다."
        },
        {
          "name": "InjectTossPayments",
          "slug": "inject-toss-payments",
          "kind": "constant",
          "declaration": "InjectTossPayments: (name?: TossPaymentsKitName) => ParameterDecorator",
          "sourceDocumentation": "파사드 kit 주입 데코레이터.\n\n주입 파라미터의 타입은 소실되지 않도록 {@link TossPaymentsFor} 별칭(설계 §4.3 —\n`defineTossPaymentsConfig` + `typeof config`)으로 선언하라 — 미배선 플로우 접근이\n주입부에서도 컴파일 에러가 된다.\n\n```ts\nconstructor(@InjectTossPayments() private readonly toss: AppToss) {}\n\n// 여러 키 쌍을 쓸 때는 register({ name })와 같은 이름을 명시한다.\nconstructor(@InjectTossPayments('billing') private readonly toss: BillingToss) {}\n```"
        },
        {
          "name": "NestWebhookHandlerOptions",
          "slug": "nest-webhook-handler-options",
          "kind": "type",
          "declaration": "/**\n * 코어 `nodeHandler`의 source IP 옵션을 Nest raw-body 경계에 그대로 전달한다.\n *\n * 기본값은 원본 Node socket의 `remoteAddress`다. reverse proxy 뒤에서 원본 IP가\n * 필요하면, **앱이 신뢰하는 ingress가 재작성한 헤더만** 읽도록 sourceIp를 명시적으로\n * 제공해야 한다. 임의의 `X-Forwarded-For`를 기본 신뢰하지 않는다.\n */\ntype NestWebhookHandlerOptions = NodeHandlerOptions;",
          "sourceDocumentation": "코어 `nodeHandler`의 source IP 옵션을 Nest raw-body 경계에 그대로 전달한다.\n\n기본값은 원본 Node socket의 `remoteAddress`다. reverse proxy 뒤에서 원본 IP가\n필요하면, **앱이 신뢰하는 ingress가 재작성한 헤더만** 읽도록 sourceIp를 명시적으로\n제공해야 한다. 임의의 `X-Forwarded-For`를 기본 신뢰하지 않는다."
        },
        {
          "name": "NestWebhookRequest",
          "slug": "nest-webhook-request",
          "kind": "type",
          "declaration": "/**\n * toNestWebhookHandler — Nest 컨트롤러에서 코어 웹훅 어댑터를 rawBody 강제와 함께\n * 사용하는 헬퍼 (설계 §4.2, G9).\n *\n * Nest의 기본 body-parser가 JSON을 선파싱하면 서명/secret 검증이 전멸한다 — 이 헬퍼는\n * `NestFactory.create(AppModule, { rawBody: true })` 전제로 `req.rawBody`만 신뢰하고,\n * 부재 시 핸들러를 실행하지 않고 **명시적 500 + 설정 안내 로그**를 남긴다(조용한 검증\n * 전멸 방지 — 400 응답이 반복되며 원인을 못 찾는 사고를 차단).\n */\n/**\n * Express/Fastify의 IncomingMessage와 구조 호환인 최소 요청 형태 —\n * 코어의 NodeIncomingMessageLike(구조적 타입)를 재사용해 `node:http` 타입 결합을 피한다.\n * `RawBodyRequest<Request>`(Express)·`RawBodyRequest<FastifyRequest['raw']>` 모두 충족.\n */\ntype NestWebhookRequest = RawBodyRequest<NodeIncomingMessageLike>;",
          "sourceDocumentation": "Express/Fastify의 IncomingMessage와 구조 호환인 최소 요청 형태 —\n코어의 NodeIncomingMessageLike(구조적 타입)를 재사용해 `node:http` 타입 결합을 피한다.\n`RawBodyRequest<Request>`(Express)·`RawBodyRequest<FastifyRequest['raw']>` 모두 충족."
        },
        {
          "name": "toNestWebhookHandler",
          "slug": "to-nest-webhook-handler",
          "kind": "function",
          "declaration": "/**\n * 컨트롤러 사용 (설계 §4.4):\n * ```ts\n * @Post('webhooks/toss')\n * async handle(@Req() req: RawBodyRequest<Request>, @Res() res: Response) {\n *   await toNestWebhookHandler(verifier, handlers)(req, res);\n * }\n * ```\n *\n * 위임 구조: rawBody 확보만 이 헬퍼가 소유하고, 검증·dedupe·200 ack·autoRefetch\n * prefetch·핸들러 디스패치는 전부 코어 `verifier.nodeHandler`에 위임한다 — 로직 중복 0.\n */\ndeclare function toNestWebhookHandler(verifier: WebhookVerifier, handlers: WebhookHandlers, options?: NestWebhookHandlerOptions): (req: NestWebhookRequest, res: NodeServerResponseLike) => Promise<void>;",
          "sourceDocumentation": "컨트롤러 사용 (설계 §4.4):\n```ts"
        },
        {
          "name": "TOSS_PAYMENTS",
          "slug": "toss-payments",
          "kind": "constant",
          "declaration": "TOSS_PAYMENTS: unique symbol",
          "sourceDocumentation": "파사드 kit(createTossPayments 산출물)이 바인딩되는 토큰."
        },
        {
          "name": "TossPaymentsFor",
          "slug": "toss-payments-for",
          "kind": "type",
          "declaration": "/**\n * 앱이 조건부 파사드 타입을 보존하는 별칭 헬퍼 (설계 §4.3) — forRootAsync는 런타임\n * 토큰 주입이라 kit 타입이 소실되므로, `defineTossPaymentsConfig`로 고정한 config의\n * `typeof`에서 kit 타입을 복원한다. 배선 누락 플로우 접근은 주입부에서도 컴파일 에러.\n *\n * ```ts\n * export const tossConfig = defineTossPaymentsConfig({ ... });\n * export type AppToss = TossPaymentsFor<typeof tossConfig>;\n * ```\n */\ntype TossPaymentsFor<C extends AnyTossPaymentsConfig> = C extends TossPaymentsApiConfig<infer E> ? TossPaymentsKit<E, 'api', C> : C extends TossPaymentsWidgetConfig<infer E> ? TossPaymentsKit<E, 'widget', C> : never;",
          "sourceDocumentation": "앱이 조건부 파사드 타입을 보존하는 별칭 헬퍼 (설계 §4.3) — forRootAsync는 런타임\n토큰 주입이라 kit 타입이 소실되므로, `defineTossPaymentsConfig`로 고정한 config의\n`typeof`에서 kit 타입을 복원한다. 배선 누락 플로우 접근은 주입부에서도 컴파일 에러.\n\n```ts\nexport const tossConfig = defineTossPaymentsConfig({ ... });\nexport type AppToss = TossPaymentsFor<typeof tossConfig>;\n```"
        },
        {
          "name": "TossPaymentsKitName",
          "slug": "toss-payments-kit-name",
          "kind": "type",
          "declaration": "/**\n * Named kit 식별자. 서로 다른 키 쌍(API `sk`, 결제위젯 `gsk` 등)은 반드시 다른 이름으로\n * 등록한다. 이름은 Nest application 안에서 유일해야 한다.\n */\ntype TossPaymentsKitName = string;",
          "sourceDocumentation": "Named kit 식별자. 서로 다른 키 쌍(API `sk`, 결제위젯 `gsk` 등)은 반드시 다른 이름으로\n등록한다. 이름은 Nest application 안에서 유일해야 한다."
        },
        {
          "name": "TossPaymentsModule",
          "slug": "toss-payments-module",
          "kind": "class",
          "declaration": "declare class TossPaymentsModule {\n    /**\n     * 동기 조립 — `{ provide: TOSS_PAYMENTS, useValue: createTossPayments(config) }`.\n     * config는 코어 `defineTossPaymentsConfig` 산출물을 권장(간접 전달 시 타입 보존).\n     */\n    static forRoot<E extends Env, const C extends AnyTossPaymentsConfig>(config: C, options?: TossPaymentsModuleOptions): DynamicModule;\n    /** 비동기 조립 — 스토어를 Nest 프로바이더(inject)로 받아 useFactory에서 config를 만든다. */\n    static forRootAsync<C extends AnyTossPaymentsConfig>(options: TossPaymentsModuleAsyncOptions<C>): DynamicModule;\n    /**\n     * 이름 있는 동기 조립. `forRoot`는 기존 단일 kit(`TOSS_PAYMENTS`) 호환 API로\n     * 유지하고, 여러 키 쌍은 이 메서드로 분리한다.\n     */\n    static register<const C extends AnyTossPaymentsConfig>(options: TossPaymentsModuleRegisterOptions<C>): DynamicModule;\n    /** 이름 있는 비동기 조립. provider별 config/store를 독립적으로 주입한다. */\n    static registerAsync<C extends AnyTossPaymentsConfig>(options: TossPaymentsModuleRegisterAsyncOptions<C>): DynamicModule;\n}"
        },
        {
          "name": "TossPaymentsModuleAsyncOptions",
          "slug": "toss-payments-module-async-options",
          "kind": "interface",
          "declaration": "/** forRootAsync 옵션 (설계 §4.2) — 스토어(PrismaService 등)를 DI 의존성으로 조립하는 경로. */\ninterface TossPaymentsModuleAsyncOptions<C extends AnyTossPaymentsConfig> {\n    readonly imports?: DynamicModule['imports'];\n    /** useFactory 파라미터로 주입할 프로바이더 토큰. 예: [PrismaService, ConfigService] */\n    readonly inject?: readonly InjectionToken[];\n    /**\n     * config 팩토리. **반환값은 반드시 `defineTossPaymentsConfig(...)`로 감싸라**(설계 §4.3 강권) —\n     * 팩토리 반환 경로에서는 const 추론이 풀려 조건부 프로퍼티(배선) 판정이 무너질 수 있다.\n     */\n    readonly useFactory: (...deps: readonly any[]) => C | Promise<C>;\n    /** 기본 true — 결제 kit은 전역 싱글턴이 자연스러운 단위다(모듈마다 재조립 금지). */\n    readonly global?: boolean;\n}",
          "sourceDocumentation": "forRootAsync 옵션 (설계 §4.2) — 스토어(PrismaService 등)를 DI 의존성으로 조립하는 경로."
        },
        {
          "name": "TossPaymentsModuleOptions",
          "slug": "toss-payments-module-options",
          "kind": "interface",
          "declaration": "/** `forRoot`/`register`에서 공유하는 Nest module 옵션. */\ninterface TossPaymentsModuleOptions {\n    /** 기본 true. 모듈 경계를 엄격히 유지하려면 false를 명시한다. */\n    readonly global?: boolean;\n}",
          "sourceDocumentation": "`forRoot`/`register`에서 공유하는 Nest module 옵션."
        },
        {
          "name": "TossPaymentsModuleRegisterAsyncOptions",
          "slug": "toss-payments-module-register-async-options",
          "kind": "interface",
          "declaration": "/** 이름 있는 kit의 비동기 조립 옵션. */\ninterface TossPaymentsModuleRegisterAsyncOptions<C extends AnyTossPaymentsConfig> extends TossPaymentsModuleAsyncOptions<C> {\n    readonly name: TossPaymentsKitName;\n}",
          "sourceDocumentation": "이름 있는 kit의 비동기 조립 옵션."
        },
        {
          "name": "TossPaymentsModuleRegisterOptions",
          "slug": "toss-payments-module-register-options",
          "kind": "interface",
          "declaration": "/**\n * 이름 있는 kit의 동기 조립 옵션.\n *\n * API `sk`와 결제위젯 `gsk`처럼 서로 다른 키 쌍을 동시에 써야 할 때 사용한다.\n * `name`은 한 Nest application에서 유일해야 하며, 주입부의\n * `@InjectTossPayments(name)`와 정확히 일치해야 한다.\n */\ninterface TossPaymentsModuleRegisterOptions<C extends AnyTossPaymentsConfig> extends TossPaymentsModuleOptions {\n    readonly name: TossPaymentsKitName;\n    readonly config: C;\n}",
          "sourceDocumentation": "이름 있는 kit의 동기 조립 옵션.\n\nAPI `sk`와 결제위젯 `gsk`처럼 서로 다른 키 쌍을 동시에 써야 할 때 사용한다.\n`name`은 한 Nest application에서 유일해야 하며, 주입부의\n`@InjectTossPayments(name)`와 정확히 일치해야 한다."
        }
      ]
    }
  ]
}
