@dereekb/nestjs 13.17.0 → 13.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "@dereekb/nestjs/openrouter",
3
+ "version": "13.19.0",
4
+ "peerDependencies": {
5
+ "@dereekb/util": "13.19.0",
6
+ "@dereekb/nestjs": "13.19.0",
7
+ "@nestjs/common": "^11.1.19",
8
+ "@nestjs/config": "^4.0.4",
9
+ "express": "^5.2.1",
10
+ "@openrouter/sdk": "^0.12.79"
11
+ },
12
+ "exports": {
13
+ "./package.json": "./package.json",
14
+ ".": {
15
+ "module": "./index.esm.js",
16
+ "types": "./index.d.ts",
17
+ "import": "./index.cjs.mjs",
18
+ "default": "./index.cjs.js"
19
+ }
20
+ },
21
+ "module": "./index.esm.js",
22
+ "main": "./index.cjs.js",
23
+ "types": "./index.d.ts"
24
+ }
@@ -0,0 +1 @@
1
+ export * from './lib';
@@ -0,0 +1,5 @@
1
+ export * from './webhook';
2
+ export * from './openrouter.module';
3
+ export * from './openrouter.api';
4
+ export * from './openrouter.config';
5
+ export * from './openrouter.type';
@@ -0,0 +1,7 @@
1
+ import { OpenRouterServiceConfig } from './openrouter.config';
2
+ import { OpenRouter } from '@openrouter/sdk';
3
+ export declare class OpenRouterApi {
4
+ readonly config: OpenRouterServiceConfig;
5
+ readonly openRouterClient: OpenRouter;
6
+ constructor(config: OpenRouterServiceConfig);
7
+ }
@@ -0,0 +1,29 @@
1
+ import { type OpenRouterApiKey, type OpenRouterServerUrl } from './openrouter.type';
2
+ /**
3
+ * Default environment variable for the OpenRouter API key.
4
+ */
5
+ export declare const OPENROUTER_API_KEY_ENV_VAR = "OPENROUTER_API_KEY";
6
+ /**
7
+ * Optional environment variable for overriding the OpenRouter server/base URL.
8
+ */
9
+ export declare const OPENROUTER_SERVER_URL_ENV_VAR = "OPENROUTER_SERVER_URL";
10
+ export interface OpenRouterServiceApiConfig {
11
+ /**
12
+ * API key used to authenticate requests to OpenRouter.
13
+ */
14
+ readonly apiKey: OpenRouterApiKey;
15
+ /**
16
+ * Optional override for the OpenRouter server/base URL.
17
+ *
18
+ * Maps to the SDK's `serverURL` option. When omitted the SDK's default
19
+ * production server (`https://openrouter.ai/api/v1`) is used.
20
+ */
21
+ readonly serverURL?: OpenRouterServerUrl;
22
+ }
23
+ /**
24
+ * Configuration for OpenRouterApi.
25
+ */
26
+ export declare abstract class OpenRouterServiceConfig {
27
+ readonly openrouter: OpenRouterServiceApiConfig;
28
+ static assertValidConfig(config: OpenRouterServiceConfig): void;
29
+ }
@@ -0,0 +1,18 @@
1
+ import { ConfigService } from '@nestjs/config';
2
+ import { OpenRouterServiceConfig } from './openrouter.config';
3
+ /**
4
+ * Factory that creates an OpenRouterServiceConfig from environment variables.
5
+ *
6
+ * Reads the API key and optional server/base URL override from environment variables.
7
+ *
8
+ * @param configService - NestJS config service for reading environment variables.
9
+ * @returns A validated OpenRouterServiceConfig.
10
+ */
11
+ export declare function openRouterServiceConfigFactory(configService: ConfigService): OpenRouterServiceConfig;
12
+ /**
13
+ * NestJS module that provides the OpenRouterApi service.
14
+ *
15
+ * Reads the OpenRouter API key and optional server URL override from environment variables.
16
+ */
17
+ export declare class OpenRouterModule {
18
+ }
@@ -0,0 +1,28 @@
1
+ import { type OpenRouter } from '@openrouter/sdk';
2
+ /**
3
+ * Api key used by OpenRouter for making requests.
4
+ */
5
+ export type OpenRouterApiKey = string;
6
+ /**
7
+ * Override for the OpenRouter server/base URL (maps to the SDK's `serverURL` option).
8
+ */
9
+ export type OpenRouterServerUrl = string;
10
+ /**
11
+ * Shared secret used to authenticate incoming OpenRouter broadcast webhook requests.
12
+ *
13
+ * OpenRouter broadcast webhooks have no HMAC signature scheme; instead the secret is
14
+ * sent verbatim in a user-configured request header.
15
+ */
16
+ export type OpenRouterWebhookSecret = string;
17
+ /**
18
+ * The OpenRouter SDK client type.
19
+ */
20
+ export type OpenRouterClient = OpenRouter;
21
+ /**
22
+ * A generation id returned by OpenRouter for a completed request.
23
+ */
24
+ export type OpenRouterGenerationId = string;
25
+ /**
26
+ * A model slug/id as used by OpenRouter (e.g. `openai/gpt-4o`).
27
+ */
28
+ export type OpenRouterModelId = string;
@@ -0,0 +1,6 @@
1
+ export * from './webhook.openrouter';
2
+ export * from './webhook.openrouter.config';
3
+ export * from './webhook.openrouter.controller';
4
+ export * from './webhook.openrouter.module';
5
+ export * from './webhook.openrouter.service';
6
+ export * from './webhook.openrouter.verify';
@@ -0,0 +1,40 @@
1
+ import { type Maybe } from '@dereekb/util';
2
+ import { type OpenRouterWebhookSecret } from '../openrouter.type';
3
+ export declare const OPENROUTER_WEBHOOK_SECRET_TOKEN_ENV_VAR = "OPENROUTER_WEBHOOK_SECRET_TOKEN";
4
+ export declare const OPENROUTER_WEBHOOK_HEADER_ENV_VAR = "OPENROUTER_WEBHOOK_HEADER";
5
+ export declare const OPENROUTER_WEBHOOK_SCHEME_ENV_VAR = "OPENROUTER_WEBHOOK_SCHEME";
6
+ /**
7
+ * Default request header that carries the OpenRouter webhook secret.
8
+ *
9
+ * OpenRouter broadcast webhooks send a user-configured header (commonly `Authorization`)
10
+ * verbatim with each request. Express lower-cases incoming header names.
11
+ */
12
+ export declare const DEFAULT_OPENROUTER_WEBHOOK_HEADER = "authorization";
13
+ /**
14
+ * Default scheme prefix expected on the secret-bearing header value (e.g. `Bearer <secret>`).
15
+ */
16
+ export declare const DEFAULT_OPENROUTER_WEBHOOK_SCHEME = "Bearer";
17
+ export interface OpenRouterWebhookConfig {
18
+ /**
19
+ * The expected shared secret token sent by OpenRouter on each webhook request.
20
+ */
21
+ readonly webhookSecret: OpenRouterWebhookSecret;
22
+ /**
23
+ * The header that carries the secret. Defaults to {@link DEFAULT_OPENROUTER_WEBHOOK_HEADER}.
24
+ */
25
+ readonly header?: Maybe<string>;
26
+ /**
27
+ * The scheme prefix stripped from the header value before comparison (e.g. `Bearer`).
28
+ *
29
+ * Defaults to {@link DEFAULT_OPENROUTER_WEBHOOK_SCHEME}. Set to an empty string or null to
30
+ * compare the raw header value with no prefix stripping.
31
+ */
32
+ readonly scheme?: Maybe<string>;
33
+ }
34
+ /**
35
+ * Configuration for OpenRouterWebhookService.
36
+ */
37
+ export declare abstract class OpenRouterWebhookServiceConfig {
38
+ readonly openrouterWebhook: OpenRouterWebhookConfig;
39
+ static assertValidConfig(config: OpenRouterWebhookServiceConfig): void;
40
+ }
@@ -0,0 +1,16 @@
1
+ import { type Request } from 'express';
2
+ import { OpenRouterWebhookService } from './webhook.openrouter.service';
3
+ /**
4
+ * Controller for incoming OpenRouter broadcast webhook requests.
5
+ *
6
+ * OpenRouter can be configured to deliver broadcast traces via POST (default) or PUT, so both
7
+ * verbs are handled. Authentication is a user-configured header carrying a shared secret, so a
8
+ * plain `@Body()` (parsed JSON) is sufficient — no raw-body middleware is required.
9
+ */
10
+ export declare class OpenRouterWebhookController {
11
+ private readonly _openrouterWebhookService;
12
+ constructor(openrouterWebhookService: OpenRouterWebhookService);
13
+ handleOpenRouterWebhookPost(req: Request, body: unknown): Promise<void>;
14
+ handleOpenRouterWebhookPut(req: Request, body: unknown): Promise<void>;
15
+ private handleOpenRouterWebhook;
16
+ }
@@ -0,0 +1,182 @@
1
+ import { type HandlerBindAccessor, type HandlerMappedSetFunction, type HandlerMappedSetFunctionFactory, type Handler, type Maybe } from '@dereekb/util';
2
+ import { type OpenRouterGenerationId, type OpenRouterModelId } from '../openrouter.type';
3
+ /**
4
+ * An OTLP `AnyValue`. Only the variants OpenRouter emits are modeled; integer values arrive as
5
+ * JSON strings per the OTLP/JSON encoding.
6
+ */
7
+ export interface OpenRouterAnyValue {
8
+ readonly stringValue?: Maybe<string>;
9
+ readonly boolValue?: Maybe<boolean>;
10
+ readonly intValue?: Maybe<string | number>;
11
+ readonly doubleValue?: Maybe<number>;
12
+ readonly arrayValue?: Maybe<{
13
+ readonly values: OpenRouterAnyValue[];
14
+ }>;
15
+ readonly kvlistValue?: Maybe<{
16
+ readonly values: OpenRouterKeyValue[];
17
+ }>;
18
+ readonly bytesValue?: Maybe<string>;
19
+ }
20
+ /**
21
+ * An OTLP key/value attribute pair.
22
+ */
23
+ export interface OpenRouterKeyValue {
24
+ readonly key: string;
25
+ readonly value: OpenRouterAnyValue;
26
+ }
27
+ /**
28
+ * A single OTLP span from a broadcast trace.
29
+ */
30
+ export interface OpenRouterSpan {
31
+ readonly traceId?: Maybe<string>;
32
+ readonly spanId?: Maybe<string>;
33
+ readonly parentSpanId?: Maybe<string>;
34
+ readonly name?: Maybe<string>;
35
+ readonly kind?: Maybe<number>;
36
+ readonly startTimeUnixNano?: Maybe<string>;
37
+ readonly endTimeUnixNano?: Maybe<string>;
38
+ readonly attributes?: Maybe<OpenRouterKeyValue[]>;
39
+ }
40
+ export interface OpenRouterScopeSpan {
41
+ readonly scope?: Maybe<{
42
+ readonly name?: Maybe<string>;
43
+ readonly version?: Maybe<string>;
44
+ }>;
45
+ readonly spans?: Maybe<OpenRouterSpan[]>;
46
+ }
47
+ export interface OpenRouterResourceSpan {
48
+ readonly resource?: Maybe<{
49
+ readonly attributes?: Maybe<OpenRouterKeyValue[]>;
50
+ }>;
51
+ readonly scopeSpans?: Maybe<OpenRouterScopeSpan[]>;
52
+ }
53
+ /**
54
+ * The OTLP/JSON trace payload POSTed by an OpenRouter broadcast webhook.
55
+ */
56
+ export interface OpenRouterBroadcastPayload {
57
+ readonly resourceSpans?: Maybe<OpenRouterResourceSpan[]>;
58
+ }
59
+ /**
60
+ * Candidate attribute keys for the request model. OpenRouter follows the OpenTelemetry GenAI
61
+ * semantic conventions (`gen_ai.*`).
62
+ */
63
+ export declare const OPENROUTER_SPAN_ATTRIBUTE_MODEL_KEYS: string[];
64
+ export declare const OPENROUTER_SPAN_ATTRIBUTE_PROVIDER_KEYS: string[];
65
+ export declare const OPENROUTER_SPAN_ATTRIBUTE_PROMPT_TOKENS_KEYS: string[];
66
+ export declare const OPENROUTER_SPAN_ATTRIBUTE_COMPLETION_TOKENS_KEYS: string[];
67
+ export declare const OPENROUTER_SPAN_ATTRIBUTE_TOTAL_TOKENS_KEYS: string[];
68
+ export declare const OPENROUTER_SPAN_ATTRIBUTE_COST_KEYS: string[];
69
+ export declare const OPENROUTER_SPAN_ATTRIBUTE_GENERATION_ID_KEYS: string[];
70
+ /**
71
+ * A primitive value extracted from an OTLP `AnyValue`.
72
+ */
73
+ export type OpenRouterAttributeValue = string | number | boolean;
74
+ /**
75
+ * A flat map of an OTLP span's attributes, keyed by attribute name.
76
+ */
77
+ export type OpenRouterAttributeMap = Map<string, OpenRouterAttributeValue>;
78
+ /**
79
+ * Extracts the primitive value from an OTLP `AnyValue`. Integer values encoded as strings are
80
+ * parsed to numbers; nested array/kvlist/bytes values are ignored.
81
+ *
82
+ * @param value - The OTLP AnyValue to read.
83
+ * @returns The primitive value, or undefined when none of the modeled variants are present.
84
+ */
85
+ export declare function readOpenRouterAnyValue(value: Maybe<OpenRouterAnyValue>): Maybe<OpenRouterAttributeValue>;
86
+ /**
87
+ * Builds a flat attribute map from a list of OTLP key/value pairs.
88
+ *
89
+ * @param attributes - The OTLP attributes to flatten.
90
+ * @returns The attribute values indexed by name for direct lookup.
91
+ */
92
+ export declare function openRouterAttributeMap(attributes: Maybe<OpenRouterKeyValue[]>): OpenRouterAttributeMap;
93
+ /**
94
+ * The commonly-used generation fields extracted from a broadcast span's attributes.
95
+ */
96
+ export interface OpenRouterGenerationInfo {
97
+ readonly generationId?: Maybe<OpenRouterGenerationId>;
98
+ readonly model?: Maybe<OpenRouterModelId>;
99
+ readonly provider?: Maybe<string>;
100
+ readonly promptTokens?: Maybe<number>;
101
+ readonly completionTokens?: Maybe<number>;
102
+ readonly totalTokens?: Maybe<number>;
103
+ readonly cost?: Maybe<number>;
104
+ }
105
+ /**
106
+ * Extracts the commonly-used generation fields (model, provider, token usage, cost, generation id)
107
+ * from a flattened attribute map.
108
+ *
109
+ * @param map - The flattened span attribute map.
110
+ * @returns The extracted generation info.
111
+ */
112
+ export declare function openRouterGenerationInfoFromAttributes(map: OpenRouterAttributeMap): OpenRouterGenerationInfo;
113
+ /**
114
+ * The span name, used as the handler dispatch key.
115
+ */
116
+ export type OpenRouterBroadcastSpanName = string;
117
+ /**
118
+ * A single broadcast span paired with its flattened attributes and extracted generation info.
119
+ */
120
+ export interface OpenRouterBroadcastSpan {
121
+ /**
122
+ * The raw OTLP span.
123
+ */
124
+ readonly span: OpenRouterSpan;
125
+ /**
126
+ * The span name (operation), used as the handler dispatch key.
127
+ */
128
+ readonly name: Maybe<OpenRouterBroadcastSpanName>;
129
+ /**
130
+ * The span's own attributes, flattened to a map.
131
+ */
132
+ readonly attributes: OpenRouterAttributeMap;
133
+ /**
134
+ * The resource-level attributes for the span's `resourceSpans` entry.
135
+ */
136
+ readonly resourceAttributes: OpenRouterAttributeMap;
137
+ /**
138
+ * The commonly-used generation fields extracted from the span's attributes.
139
+ */
140
+ readonly generation: OpenRouterGenerationInfo;
141
+ }
142
+ /**
143
+ * Flattens a broadcast payload into a list of {@link OpenRouterBroadcastSpan}s, extracting
144
+ * attributes and generation info from each span.
145
+ *
146
+ * @param payload - The OTLP broadcast payload.
147
+ * @returns The flattened broadcast spans (empty for an empty / test-connection payload).
148
+ */
149
+ export declare function openRouterBroadcastSpansFromPayload(payload: Maybe<OpenRouterBroadcastPayload>): OpenRouterBroadcastSpan[];
150
+ export type OpenRouterEventHandler = Handler<OpenRouterBroadcastSpan, OpenRouterBroadcastSpanName>;
151
+ /**
152
+ * Creates a handler that dispatches broadcast spans by their span name.
153
+ */
154
+ export declare const openRouterEventHandlerFactory: import("@dereekb/util").HandlerFactory<OpenRouterBroadcastSpan, string, boolean>;
155
+ export type OpenRouterHandlerMappedSetFunction = HandlerMappedSetFunction<OpenRouterBroadcastSpan>;
156
+ export type OpenRouterHandlerMappedSetFunctionFactory = HandlerMappedSetFunctionFactory<OpenRouterBroadcastSpan, OpenRouterBroadcastSpanName>;
157
+ /**
158
+ * Identity map for broadcast spans, used by the handler configurer.
159
+ *
160
+ * @param span - The broadcast span.
161
+ * @returns The same broadcast span.
162
+ */
163
+ export declare function openRouterBroadcastSpan(span: OpenRouterBroadcastSpan): OpenRouterBroadcastSpan;
164
+ export interface OpenRouterEventHandlerConfigurer extends HandlerBindAccessor<OpenRouterBroadcastSpan, OpenRouterBroadcastSpanName> {
165
+ /**
166
+ * Registers a handler for broadcast spans with a specific span name.
167
+ *
168
+ * Span names are open-ended (OpenRouter has no fixed event-type enum), so this is a factory:
169
+ * call it with a name to obtain a setter for that name.
170
+ *
171
+ * @example
172
+ * ```ts
173
+ * configure.handleSpanName('chat')((span) => { ... });
174
+ * ```
175
+ */
176
+ readonly handleSpanName: OpenRouterHandlerMappedSetFunctionFactory;
177
+ /**
178
+ * Registers a catch-all handler invoked for every span not matched by a name-specific handler.
179
+ */
180
+ readonly handleAnySpan: OpenRouterHandlerMappedSetFunction;
181
+ }
182
+ export declare const openRouterEventHandlerConfigurerFactory: import("@dereekb/util").HandlerConfigurerFactory<OpenRouterEventHandlerConfigurer, OpenRouterBroadcastSpan, string, boolean>;
@@ -0,0 +1,21 @@
1
+ import { OpenRouterWebhookServiceConfig } from './webhook.openrouter.config';
2
+ import { ConfigService } from '@nestjs/config';
3
+ /**
4
+ * Factory that creates an OpenRouterWebhookServiceConfig from environment variables.
5
+ *
6
+ * Reads the OpenRouter webhook secret token, and the optional header name and scheme, from
7
+ * environment variables.
8
+ *
9
+ * @param configService - NestJS config service for reading environment variables.
10
+ * @returns A validated OpenRouterWebhookServiceConfig.
11
+ */
12
+ export declare function openRouterWebhookServiceConfigFactory(configService: ConfigService): OpenRouterWebhookServiceConfig;
13
+ /**
14
+ * NestJS module that handles incoming OpenRouter broadcast webhook events.
15
+ *
16
+ * Standalone — does not depend on OpenRouterModule (no API key needed). Verification is a
17
+ * constant-time comparison of the user-configured secret header, so the SDK client is unused here.
18
+ * Provides the OpenRouterWebhookService and controller for verifying and processing broadcast payloads.
19
+ */
20
+ export declare class OpenRouterWebhookModule {
21
+ }
@@ -0,0 +1,33 @@
1
+ import { type Request } from 'express';
2
+ import { type Handler } from '@dereekb/util';
3
+ import { type OpenRouterBroadcastPayload, type OpenRouterBroadcastSpan, type OpenRouterBroadcastSpanName } from './webhook.openrouter';
4
+ import { OpenRouterWebhookServiceConfig } from './webhook.openrouter.config';
5
+ /**
6
+ * Result of handling an incoming OpenRouter broadcast webhook request.
7
+ */
8
+ export interface OpenRouterWebhookHandleResult {
9
+ /**
10
+ * Whether the request's secret token was valid.
11
+ */
12
+ readonly valid: boolean;
13
+ /**
14
+ * The total number of spans in the broadcast payload.
15
+ */
16
+ readonly totalSpans: number;
17
+ /**
18
+ * The number of spans that were matched and handled.
19
+ */
20
+ readonly handledSpans: number;
21
+ }
22
+ /**
23
+ * Service that makes system changes based on OpenRouter broadcast webhook events.
24
+ */
25
+ export declare class OpenRouterWebhookService {
26
+ private readonly logger;
27
+ private readonly _verifier;
28
+ readonly handler: Handler<OpenRouterBroadcastSpan, OpenRouterBroadcastSpanName>;
29
+ readonly configure: import("@dereekb/util").HandlerConfigurer<import("./webhook.openrouter").OpenRouterEventHandlerConfigurer, OpenRouterBroadcastSpan, string, boolean>;
30
+ constructor(openRouterWebhookServiceConfig: OpenRouterWebhookServiceConfig);
31
+ updateForWebhook(req: Request, body: unknown): Promise<OpenRouterWebhookHandleResult>;
32
+ updateForBroadcast(payload: OpenRouterBroadcastPayload): Promise<OpenRouterWebhookHandleResult>;
33
+ }
@@ -0,0 +1,66 @@
1
+ import { type Maybe } from '@dereekb/util';
2
+ import { type Request } from 'express';
3
+ import { type OpenRouterWebhookSecret } from '../openrouter.type';
4
+ export interface OpenRouterWebhookEventVerificationConfig {
5
+ /**
6
+ * The expected shared secret token.
7
+ */
8
+ readonly secret: OpenRouterWebhookSecret;
9
+ /**
10
+ * The header that carries the secret. Defaults to {@link DEFAULT_OPENROUTER_WEBHOOK_HEADER}.
11
+ */
12
+ readonly header?: Maybe<string>;
13
+ /**
14
+ * The scheme prefix stripped from the header value before comparison (e.g. `Bearer`).
15
+ *
16
+ * Defaults to {@link DEFAULT_OPENROUTER_WEBHOOK_SCHEME}. Set to an empty string or null to
17
+ * compare the raw header value with no prefix stripping.
18
+ */
19
+ readonly scheme?: Maybe<string>;
20
+ }
21
+ export interface OpenRouterWebhookEventVerificationResult {
22
+ readonly valid: boolean;
23
+ }
24
+ /**
25
+ * Function that verifies an incoming OpenRouter broadcast webhook request.
26
+ */
27
+ export type OpenRouterWebhookEventVerifier = (req: Request) => OpenRouterWebhookEventVerificationResult;
28
+ /**
29
+ * Constant-time comparison of two secret tokens.
30
+ *
31
+ * Guards against the length-mismatch exception thrown by `crypto.timingSafeEqual` by
32
+ * returning false up front when lengths differ.
33
+ *
34
+ * @param provided - The token presented on the request.
35
+ * @param expected - The configured expected secret token.
36
+ * @returns True when the tokens are byte-for-byte equal.
37
+ */
38
+ export declare function safeCompareOpenRouterWebhookToken(provided: string, expected: string): boolean;
39
+ /**
40
+ * Reads a single header value from the request, normalizing array-valued headers to their first entry.
41
+ *
42
+ * @param req - The incoming request.
43
+ * @param header - The (case-insensitive) header name to read.
44
+ * @returns The header value, or undefined when absent.
45
+ */
46
+ export declare function readOpenRouterWebhookHeader(req: Request, header: string): Maybe<string>;
47
+ /**
48
+ * Strips a scheme prefix (e.g. `Bearer `) from a header value, case-insensitively.
49
+ *
50
+ * @param value - The raw header value.
51
+ * @param scheme - The scheme prefix to strip, or null/empty to leave the value untouched.
52
+ * @returns The token portion of the header value, trimmed.
53
+ */
54
+ export declare function stripOpenRouterWebhookScheme(value: string, scheme: Maybe<string>): string;
55
+ /**
56
+ * Creates a verifier for OpenRouter broadcast webhook requests.
57
+ *
58
+ * OpenRouter broadcast webhooks have no HMAC signature scheme. Authentication is a
59
+ * user-configured custom header (e.g. `Authorization: Bearer <secret>`) sent verbatim on every
60
+ * request. This verifier extracts the configured header, strips the scheme prefix, and compares
61
+ * the token to the expected secret using a constant-time comparison.
62
+ *
63
+ * @param config - Verification config containing the secret, header, and scheme.
64
+ * @returns A verifier function that validates each request's secret token.
65
+ */
66
+ export declare function openRouterWebhookEventVerifier(config: OpenRouterWebhookEventVerificationConfig): OpenRouterWebhookEventVerifier;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dereekb/nestjs",
3
- "version": "13.17.0",
3
+ "version": "13.19.0",
4
4
  "types": "./src/index.d.ts",
5
5
  "module": "./index.esm.js",
6
6
  "main": "./index.cjs.js",
@@ -29,6 +29,12 @@
29
29
  "import": "./openai/index.cjs.mjs",
30
30
  "default": "./openai/index.cjs.js"
31
31
  },
32
+ "./openrouter": {
33
+ "module": "./openrouter/index.esm.js",
34
+ "types": "./openrouter/index.d.ts",
35
+ "import": "./openrouter/index.cjs.mjs",
36
+ "default": "./openrouter/index.cjs.js"
37
+ },
32
38
  "./twilio": {
33
39
  "module": "./twilio/index.esm.js",
34
40
  "types": "./twilio/index.d.ts",
@@ -62,8 +68,8 @@
62
68
  }
63
69
  },
64
70
  "peerDependencies": {
65
- "@dereekb/rxjs": "13.17.0",
66
- "@dereekb/util": "13.17.0",
71
+ "@dereekb/rxjs": "13.19.0",
72
+ "@dereekb/util": "13.19.0",
67
73
  "@nestjs/common": "^11.1.19",
68
74
  "@nestjs/config": "^4.0.4",
69
75
  "@typeform/api-client": "^2.10.2",
@@ -74,6 +80,7 @@
74
80
  "form-data": "^4.0.5",
75
81
  "mailgun.js": "^12.9.0",
76
82
  "openai": "^6.34.0",
83
+ "@openrouter/sdk": "^0.12.79",
77
84
  "raw-body": "^3.0.2",
78
85
  "stripe": "^20.4.1",
79
86
  "twilio": "^6.0.2"
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@dereekb/nestjs/stripe",
3
- "version": "13.17.0",
3
+ "version": "13.19.0",
4
4
  "peerDependencies": {
5
- "@dereekb/date": "13.17.0",
6
- "@dereekb/model": "13.17.0",
7
- "@dereekb/nestjs": "13.17.0",
8
- "@dereekb/rxjs": "13.17.0",
9
- "@dereekb/util": "13.17.0",
5
+ "@dereekb/date": "13.19.0",
6
+ "@dereekb/model": "13.19.0",
7
+ "@dereekb/nestjs": "13.19.0",
8
+ "@dereekb/rxjs": "13.19.0",
9
+ "@dereekb/util": "13.19.0",
10
10
  "@nestjs/common": "^11.1.19",
11
11
  "@nestjs/config": "^4.0.4",
12
12
  "express": "^5.2.1",
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@dereekb/nestjs/twilio",
3
- "version": "13.17.0",
3
+ "version": "13.19.0",
4
4
  "peerDependencies": {
5
- "@dereekb/date": "13.17.0",
6
- "@dereekb/model": "13.17.0",
7
- "@dereekb/nestjs": "13.17.0",
8
- "@dereekb/rxjs": "13.17.0",
9
- "@dereekb/util": "13.17.0",
5
+ "@dereekb/date": "13.19.0",
6
+ "@dereekb/model": "13.19.0",
7
+ "@dereekb/nestjs": "13.19.0",
8
+ "@dereekb/rxjs": "13.19.0",
9
+ "@dereekb/util": "13.19.0",
10
10
  "@nestjs/common": "^11.1.19",
11
11
  "@nestjs/config": "^4.0.4",
12
12
  "express": "^5.2.1",
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@dereekb/nestjs/typeform",
3
- "version": "13.17.0",
3
+ "version": "13.19.0",
4
4
  "peerDependencies": {
5
- "@dereekb/date": "13.17.0",
6
- "@dereekb/model": "13.17.0",
7
- "@dereekb/nestjs": "13.17.0",
8
- "@dereekb/rxjs": "13.17.0",
9
- "@dereekb/util": "13.17.0",
5
+ "@dereekb/date": "13.19.0",
6
+ "@dereekb/model": "13.19.0",
7
+ "@dereekb/nestjs": "13.19.0",
8
+ "@dereekb/rxjs": "13.19.0",
9
+ "@dereekb/util": "13.19.0",
10
10
  "@nestjs/common": "^11.1.19",
11
11
  "@nestjs/config": "^4.0.4",
12
12
  "@typeform/api-client": "^2.10.2",
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@dereekb/nestjs/vapiai",
3
- "version": "13.17.0",
3
+ "version": "13.19.0",
4
4
  "peerDependencies": {
5
- "@dereekb/date": "13.17.0",
6
- "@dereekb/model": "13.17.0",
7
- "@dereekb/nestjs": "13.17.0",
8
- "@dereekb/rxjs": "13.17.0",
9
- "@dereekb/util": "13.17.0",
5
+ "@dereekb/date": "13.19.0",
6
+ "@dereekb/model": "13.19.0",
7
+ "@dereekb/nestjs": "13.19.0",
8
+ "@dereekb/rxjs": "13.19.0",
9
+ "@dereekb/util": "13.19.0",
10
10
  "@nestjs/common": "^11.1.19",
11
11
  "@nestjs/config": "^4.0.4",
12
12
  "@vapi-ai/server-sdk": "^0.11.0",