promptguard-sdk 1.2.0 → 1.6.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.
Files changed (59) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +226 -78
  3. package/dist/auto.d.ts +39 -0
  4. package/dist/auto.d.ts.map +1 -0
  5. package/dist/auto.js +105 -0
  6. package/dist/auto.js.map +1 -0
  7. package/dist/client.d.ts +219 -0
  8. package/dist/client.d.ts.map +1 -0
  9. package/dist/client.js +198 -0
  10. package/dist/client.js.map +1 -0
  11. package/dist/guard.d.ts +80 -0
  12. package/dist/guard.d.ts.map +1 -0
  13. package/dist/guard.js +106 -0
  14. package/dist/guard.js.map +1 -0
  15. package/dist/index.d.ts +23 -146
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +42 -150
  18. package/dist/index.js.map +1 -1
  19. package/dist/integrations/langchain.d.ts +51 -0
  20. package/dist/integrations/langchain.d.ts.map +1 -0
  21. package/dist/integrations/langchain.js +193 -0
  22. package/dist/integrations/langchain.js.map +1 -0
  23. package/dist/integrations/vercel-ai.d.ts +49 -0
  24. package/dist/integrations/vercel-ai.d.ts.map +1 -0
  25. package/dist/integrations/vercel-ai.js +153 -0
  26. package/dist/integrations/vercel-ai.js.map +1 -0
  27. package/dist/patches/anthropic.d.ts +13 -0
  28. package/dist/patches/anthropic.d.ts.map +1 -0
  29. package/dist/patches/anthropic.js +146 -0
  30. package/dist/patches/anthropic.js.map +1 -0
  31. package/dist/patches/base.d.ts +20 -0
  32. package/dist/patches/base.d.ts.map +1 -0
  33. package/dist/patches/base.js +63 -0
  34. package/dist/patches/base.js.map +1 -0
  35. package/dist/patches/bedrock.d.ts +14 -0
  36. package/dist/patches/bedrock.d.ts.map +1 -0
  37. package/dist/patches/bedrock.js +205 -0
  38. package/dist/patches/bedrock.js.map +1 -0
  39. package/dist/patches/cohere.d.ts +14 -0
  40. package/dist/patches/cohere.d.ts.map +1 -0
  41. package/dist/patches/cohere.js +143 -0
  42. package/dist/patches/cohere.js.map +1 -0
  43. package/dist/patches/google.d.ts +13 -0
  44. package/dist/patches/google.d.ts.map +1 -0
  45. package/dist/patches/google.js +127 -0
  46. package/dist/patches/google.js.map +1 -0
  47. package/dist/patches/openai.d.ts +14 -0
  48. package/dist/patches/openai.d.ts.map +1 -0
  49. package/dist/patches/openai.js +122 -0
  50. package/dist/patches/openai.js.map +1 -0
  51. package/dist/resolve.d.ts +9 -0
  52. package/dist/resolve.d.ts.map +1 -0
  53. package/dist/resolve.js +19 -0
  54. package/dist/resolve.js.map +1 -0
  55. package/dist/version.d.ts +2 -0
  56. package/dist/version.d.ts.map +1 -0
  57. package/dist/version.js +5 -0
  58. package/dist/version.js.map +1 -0
  59. package/package.json +84 -12
@@ -0,0 +1 @@
1
+ {"version":3,"file":"langchain.js","sourceRoot":"","sources":["../../src/integrations/langchain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Vercel AI SDK integration - middleware for `ai` package.
3
+ *
4
+ * Works with the Vercel AI SDK's `wrapLanguageModel` API to intercept
5
+ * all model calls with PromptGuard security scanning.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import { openai } from '@ai-sdk/openai';
10
+ * import { wrapLanguageModel, generateText } from 'ai';
11
+ * import { promptGuardMiddleware } from 'promptguard-sdk/integrations/vercel-ai';
12
+ *
13
+ * const model = wrapLanguageModel({
14
+ * model: openai('gpt-4o'),
15
+ * middleware: promptGuardMiddleware({ apiKey: 'pg_xxx' }),
16
+ * });
17
+ *
18
+ * const { text } = await generateText({ model, prompt: 'Hello!' });
19
+ * ```
20
+ */
21
+ import { type GuardClientConfig } from "../guard";
22
+ export interface PromptGuardMiddlewareOptions extends GuardClientConfig {
23
+ mode?: "enforce" | "monitor";
24
+ scanResponses?: boolean;
25
+ failOpen?: boolean;
26
+ }
27
+ /**
28
+ * Create a Vercel AI SDK middleware that scans inputs/outputs via
29
+ * the PromptGuard Guard API.
30
+ *
31
+ * Returns an object conforming to the Vercel AI SDK `LanguageModelMiddleware`
32
+ * interface (`transformParams` + `wrapGenerate`).
33
+ */
34
+ export declare function promptGuardMiddleware(options: PromptGuardMiddlewareOptions): {
35
+ /**
36
+ * transformParams - scans the input messages before they reach the model.
37
+ */
38
+ transformParams: ({ params }: {
39
+ params: Record<string, unknown>;
40
+ }) => Promise<Record<string, unknown>>;
41
+ /**
42
+ * wrapGenerate - optionally scans the model's response.
43
+ */
44
+ wrapGenerate: (({ doGenerate, params, }: {
45
+ doGenerate: () => Promise<unknown>;
46
+ params: Record<string, unknown>;
47
+ }) => Promise<unknown>) | undefined;
48
+ };
49
+ //# sourceMappingURL=vercel-ai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel-ai.d.ts","sourceRoot":"","sources":["../../src/integrations/vercel-ai.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAEL,KAAK,iBAAiB,EAGvB,MAAM,UAAU,CAAA;AAOjB,MAAM,WAAW,4BAA6B,SAAQ,iBAAiB;IACrE,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAA;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAMD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,4BAA4B;IASvE;;OAEG;kCACiC;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE;IAsCvE;;OAEG;6CAKI;QACD,UAAU,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;QAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAChC;EAiCR"}
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ /**
3
+ * Vercel AI SDK integration - middleware for `ai` package.
4
+ *
5
+ * Works with the Vercel AI SDK's `wrapLanguageModel` API to intercept
6
+ * all model calls with PromptGuard security scanning.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import { openai } from '@ai-sdk/openai';
11
+ * import { wrapLanguageModel, generateText } from 'ai';
12
+ * import { promptGuardMiddleware } from 'promptguard-sdk/integrations/vercel-ai';
13
+ *
14
+ * const model = wrapLanguageModel({
15
+ * model: openai('gpt-4o'),
16
+ * middleware: promptGuardMiddleware({ apiKey: 'pg_xxx' }),
17
+ * });
18
+ *
19
+ * const { text } = await generateText({ model, prompt: 'Hello!' });
20
+ * ```
21
+ */
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.promptGuardMiddleware = promptGuardMiddleware;
24
+ const guard_1 = require("../guard");
25
+ const resolve_1 = require("../resolve");
26
+ // ---------------------------------------------------------------------------
27
+ // Middleware factory
28
+ // ---------------------------------------------------------------------------
29
+ /**
30
+ * Create a Vercel AI SDK middleware that scans inputs/outputs via
31
+ * the PromptGuard Guard API.
32
+ *
33
+ * Returns an object conforming to the Vercel AI SDK `LanguageModelMiddleware`
34
+ * interface (`transformParams` + `wrapGenerate`).
35
+ */
36
+ function promptGuardMiddleware(options) {
37
+ const { apiKey, baseUrl } = (0, resolve_1.resolveCredentials)(options.apiKey, options.baseUrl);
38
+ const guard = new guard_1.GuardClient({ apiKey, baseUrl, timeout: options.timeout });
39
+ const mode = options.mode ?? "enforce";
40
+ const scanResponses = options.scanResponses ?? false;
41
+ const failOpen = options.failOpen ?? true;
42
+ return {
43
+ /**
44
+ * transformParams - scans the input messages before they reach the model.
45
+ */
46
+ transformParams: async ({ params }) => {
47
+ const prompt = params?.prompt;
48
+ if (!prompt)
49
+ return params;
50
+ const guardMessages = vercelPromptToGuardMessages(prompt);
51
+ if (!guardMessages.length)
52
+ return params;
53
+ try {
54
+ const decision = await guard.scan(guardMessages, "input", params?.modelId ?? undefined, {
55
+ framework: "vercel-ai-sdk",
56
+ });
57
+ if (decision.blocked) {
58
+ if (mode === "enforce")
59
+ throw new guard_1.PromptGuardBlockedError(decision);
60
+ console.warn(`[promptguard][monitor] would block: ${decision.threatType} (event=${decision.eventId})`);
61
+ }
62
+ if (decision.redacted && decision.redactedMessages && mode === "enforce") {
63
+ return {
64
+ ...params,
65
+ prompt: applyRedactionToPrompt(prompt, decision.redactedMessages),
66
+ };
67
+ }
68
+ }
69
+ catch (err) {
70
+ if (err instanceof guard_1.PromptGuardBlockedError)
71
+ throw err;
72
+ if (!failOpen)
73
+ throw err;
74
+ }
75
+ return params;
76
+ },
77
+ /**
78
+ * wrapGenerate - optionally scans the model's response.
79
+ */
80
+ wrapGenerate: scanResponses
81
+ ? async ({ doGenerate, params, }) => {
82
+ const result = await doGenerate();
83
+ const typed = result;
84
+ const toolCalls = typed?.toolCalls;
85
+ const text = typed?.text ?? toolCalls?.[0]?.args ?? null;
86
+ if (typeof text !== "string" || !text)
87
+ return result;
88
+ try {
89
+ const respDecision = await guard.scan([{ role: "assistant", content: text }], "output", params?.modelId ?? undefined, { framework: "vercel-ai-sdk" });
90
+ if (respDecision.blocked) {
91
+ if (mode === "enforce") {
92
+ throw new guard_1.PromptGuardBlockedError(respDecision);
93
+ }
94
+ console.warn(`[promptguard][monitor] would block response: ${respDecision.threatType}`);
95
+ }
96
+ }
97
+ catch (err) {
98
+ if (err instanceof guard_1.PromptGuardBlockedError)
99
+ throw err;
100
+ if (!failOpen)
101
+ throw err;
102
+ }
103
+ return result;
104
+ }
105
+ : undefined,
106
+ };
107
+ }
108
+ // ---------------------------------------------------------------------------
109
+ // Helpers
110
+ // ---------------------------------------------------------------------------
111
+ function vercelPromptToGuardMessages(prompt) {
112
+ if (typeof prompt === "string") {
113
+ return [{ role: "user", content: prompt }];
114
+ }
115
+ if (!Array.isArray(prompt))
116
+ return [];
117
+ const result = [];
118
+ for (const msg of prompt) {
119
+ if (!msg)
120
+ continue;
121
+ const role = String(msg.role ?? "user");
122
+ if (typeof msg.content === "string") {
123
+ result.push({ role, content: msg.content });
124
+ }
125
+ else if (Array.isArray(msg.content)) {
126
+ const textParts = [];
127
+ for (const part of msg.content) {
128
+ if (typeof part === "string")
129
+ textParts.push(part);
130
+ else if (part?.type === "text")
131
+ textParts.push(part.text ?? "");
132
+ }
133
+ if (textParts.length) {
134
+ result.push({ role, content: textParts.join("\n") });
135
+ }
136
+ }
137
+ }
138
+ return result;
139
+ }
140
+ function applyRedactionToPrompt(prompt, redacted) {
141
+ if (typeof prompt === "string" && redacted[0]) {
142
+ return redacted[0].content;
143
+ }
144
+ if (!Array.isArray(prompt))
145
+ return prompt;
146
+ return prompt.map((msg, i) => {
147
+ if (i < redacted.length && msg && typeof msg === "object") {
148
+ return { ...msg, content: redacted[i].content };
149
+ }
150
+ return msg;
151
+ });
152
+ }
153
+ //# sourceMappingURL=vercel-ai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel-ai.js","sourceRoot":"","sources":["../../src/integrations/vercel-ai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Anthropic SDK patch - wraps `Messages.prototype.create` from
3
+ * `@anthropic-ai/sdk`.
4
+ *
5
+ * Covers direct Anthropic usage and frameworks that use it (LangChain.js
6
+ * ChatAnthropic, etc.).
7
+ */
8
+ import type { GuardMessage } from "../guard";
9
+ export declare function messagesToGuardFormat(messages: unknown[], system?: unknown): GuardMessage[];
10
+ export declare function extractResponseContent(response: unknown): string | null;
11
+ export declare function apply(): boolean;
12
+ export declare function revert(): void;
13
+ //# sourceMappingURL=anthropic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/patches/anthropic.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAU5C,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,YAAY,EAAE,CA0C3F;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAcvE;AAMD,wBAAgB,KAAK,IAAI,OAAO,CAiD/B;AAED,wBAAgB,MAAM,IAAI,IAAI,CAY7B"}
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ /**
3
+ * Anthropic SDK patch - wraps `Messages.prototype.create` from
4
+ * `@anthropic-ai/sdk`.
5
+ *
6
+ * Covers direct Anthropic usage and frameworks that use it (LangChain.js
7
+ * ChatAnthropic, etc.).
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.messagesToGuardFormat = messagesToGuardFormat;
11
+ exports.extractResponseContent = extractResponseContent;
12
+ exports.apply = apply;
13
+ exports.revert = revert;
14
+ const base_1 = require("./base");
15
+ let originalCreate = null;
16
+ let patched = false;
17
+ // ---------------------------------------------------------------------------
18
+ // Message conversion
19
+ // ---------------------------------------------------------------------------
20
+ function messagesToGuardFormat(messages, system) {
21
+ const result = [];
22
+ if (system) {
23
+ if (typeof system === "string") {
24
+ result.push({ role: "system", content: system });
25
+ }
26
+ else if (Array.isArray(system)) {
27
+ const parts = [];
28
+ for (const block of system) {
29
+ if (typeof block === "object" && block?.type === "text") {
30
+ parts.push(block.text ?? "");
31
+ }
32
+ }
33
+ if (parts.length)
34
+ result.push({ role: "system", content: parts.join("\n") });
35
+ }
36
+ }
37
+ if (!messages)
38
+ return result;
39
+ for (const raw of messages) {
40
+ if (!raw)
41
+ continue;
42
+ const msg = raw;
43
+ const role = String(msg.role ?? "user");
44
+ let content;
45
+ if (typeof msg.content === "string") {
46
+ content = msg.content;
47
+ }
48
+ else if (Array.isArray(msg.content)) {
49
+ const textParts = [];
50
+ for (const block of msg.content) {
51
+ if (typeof block === "string")
52
+ textParts.push(block);
53
+ else if (block?.type === "text")
54
+ textParts.push(block.text ?? "");
55
+ }
56
+ content = textParts.join("\n");
57
+ }
58
+ else {
59
+ content = String(msg.content ?? "");
60
+ }
61
+ result.push({ role, content });
62
+ }
63
+ return result;
64
+ }
65
+ function extractResponseContent(response) {
66
+ try {
67
+ const r = response;
68
+ if (r?.content && Array.isArray(r.content)) {
69
+ const parts = [];
70
+ for (const block of r.content) {
71
+ if (block?.type === "text")
72
+ parts.push(block.text ?? "");
73
+ }
74
+ return parts.length ? parts.join("\n") : null;
75
+ }
76
+ }
77
+ catch {
78
+ // ignore
79
+ }
80
+ return null;
81
+ }
82
+ // ---------------------------------------------------------------------------
83
+ // Apply / revert
84
+ // ---------------------------------------------------------------------------
85
+ function apply() {
86
+ if (patched)
87
+ return true;
88
+ let Messages;
89
+ try {
90
+ const mod = require("@anthropic-ai/sdk/resources/messages");
91
+ Messages = mod.Messages;
92
+ if (!Messages?.prototype?.create)
93
+ return false;
94
+ }
95
+ catch {
96
+ return false;
97
+ }
98
+ const original = Messages.prototype.create;
99
+ originalCreate = original;
100
+ Messages.prototype.create = (0, base_1.createPatchedMethod)(original, {
101
+ framework: "anthropic",
102
+ extractMessages: (args) => {
103
+ const params = (args[0] ?? {});
104
+ const messages = params.messages;
105
+ return {
106
+ messages: messages ? messagesToGuardFormat(messages, params.system) : [],
107
+ model: params.model ? String(params.model) : undefined,
108
+ };
109
+ },
110
+ extractResponseText: (response) => extractResponseContent(response),
111
+ applyRedaction: (args, redactedMessages) => {
112
+ const params = (args[0] ?? {});
113
+ const messages = params.messages;
114
+ const hasSystem = params.system != null;
115
+ const offset = hasSystem ? 1 : 0;
116
+ const newParams = { ...params };
117
+ if (hasSystem && redactedMessages[0]) {
118
+ newParams.system = redactedMessages[0].content;
119
+ }
120
+ newParams.messages = messages.map((msg, i) => {
121
+ const idx = i + offset;
122
+ if (idx < redactedMessages.length) {
123
+ return { ...msg, content: redactedMessages[idx].content };
124
+ }
125
+ return msg;
126
+ });
127
+ return [newParams, ...args.slice(1)];
128
+ },
129
+ });
130
+ patched = true;
131
+ return true;
132
+ }
133
+ function revert() {
134
+ if (!patched || !originalCreate)
135
+ return;
136
+ try {
137
+ const mod = require("@anthropic-ai/sdk/resources/messages");
138
+ mod.Messages.prototype.create = originalCreate;
139
+ }
140
+ catch {
141
+ // ignore
142
+ }
143
+ originalCreate = null;
144
+ patched = false;
145
+ }
146
+ //# sourceMappingURL=anthropic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/patches/anthropic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Shared patch wrapper — the single place where pre-call scan,
3
+ * block/redact handling, original call, and post-call scan live.
4
+ *
5
+ * Every SDK-specific patch provides a {@link PatchConfig} describing
6
+ * how to extract messages and responses; this module handles the rest.
7
+ */
8
+ import { type GuardMessage } from "../guard";
9
+ export interface PatchConfig {
10
+ framework: string;
11
+ extractMessages: (args: unknown[], thisArg: unknown) => {
12
+ messages: GuardMessage[];
13
+ model?: string;
14
+ };
15
+ extractResponseText?: (response: unknown, args: unknown[]) => string | null;
16
+ applyRedaction?: (args: unknown[], redactedMessages: GuardMessage[]) => unknown[];
17
+ shouldIntercept?: (args: unknown[], thisArg: unknown) => boolean;
18
+ }
19
+ export declare function createPatchedMethod(original: (...args: unknown[]) => unknown, config: PatchConfig): (...args: unknown[]) => Promise<unknown>;
20
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/patches/base.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAGL,KAAK,YAAY,EAElB,MAAM,UAAU,CAAA;AAEjB,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,CACf,IAAI,EAAE,OAAO,EAAE,EACf,OAAO,EAAE,OAAO,KACb;QAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACjD,mBAAmB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,MAAM,GAAG,IAAI,CAAA;IAC3E,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,gBAAgB,EAAE,YAAY,EAAE,KAAK,OAAO,EAAE,CAAA;IACjF,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAA;CACjE;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,EACzC,MAAM,EAAE,WAAW,GAClB,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CA2D1C"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ /**
3
+ * Shared patch wrapper — the single place where pre-call scan,
4
+ * block/redact handling, original call, and post-call scan live.
5
+ *
6
+ * Every SDK-specific patch provides a {@link PatchConfig} describing
7
+ * how to extract messages and responses; this module handles the rest.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.createPatchedMethod = createPatchedMethod;
11
+ const guard_1 = require("../guard");
12
+ function createPatchedMethod(original, config) {
13
+ return async function patched(...args) {
14
+ const { getGuardClient, getMode, isFailOpen, shouldScanResponses } = require("../auto");
15
+ if (config.shouldIntercept && !config.shouldIntercept(args, this)) {
16
+ return original.apply(this, args);
17
+ }
18
+ const guard = getGuardClient();
19
+ if (!guard)
20
+ return original.apply(this, args);
21
+ const { messages, model } = config.extractMessages(args, this);
22
+ if (messages.length) {
23
+ let decision = null;
24
+ try {
25
+ decision = await guard.scan(messages, "input", model, { framework: config.framework });
26
+ }
27
+ catch (err) {
28
+ if (err instanceof guard_1.GuardApiError && !isFailOpen())
29
+ throw err;
30
+ }
31
+ if (decision?.blocked) {
32
+ if (getMode() === "enforce")
33
+ throw new guard_1.PromptGuardBlockedError(decision);
34
+ console.warn(`[promptguard][monitor] would block: ${decision.threatType} (event=${decision.eventId})`);
35
+ }
36
+ if (decision?.redacted && decision.redactedMessages && config.applyRedaction) {
37
+ if (getMode() === "enforce") {
38
+ args = config.applyRedaction(args, decision.redactedMessages);
39
+ }
40
+ }
41
+ }
42
+ const response = await original.apply(this, args);
43
+ if (shouldScanResponses() && response && guard && config.extractResponseText) {
44
+ try {
45
+ const text = config.extractResponseText(response, args);
46
+ if (text) {
47
+ const respDecision = await guard.scan([{ role: "assistant", content: text }], "output", model);
48
+ if (respDecision.blocked && getMode() === "enforce") {
49
+ throw new guard_1.PromptGuardBlockedError(respDecision);
50
+ }
51
+ }
52
+ }
53
+ catch (err) {
54
+ if (err instanceof guard_1.PromptGuardBlockedError)
55
+ throw err;
56
+ if (err instanceof guard_1.GuardApiError && !isFailOpen())
57
+ throw err;
58
+ }
59
+ }
60
+ return response;
61
+ };
62
+ }
63
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/patches/base.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAoBH,kDA8DC;AAhFD,oCAKiB;AAajB,SAAgB,mBAAmB,CACjC,QAAyC,EACzC,MAAmB;IAEnB,OAAO,KAAK,UAAU,OAAO,CAAgB,GAAG,IAAe;QAC7D,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;QAEvF,IAAI,MAAM,CAAC,eAAe,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YAClE,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QACnC,CAAC;QAED,MAAM,KAAK,GAAuB,cAAc,EAAE,CAAA;QAClD,IAAI,CAAC,KAAK;YAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAE7C,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAE9D,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YACpB,IAAI,QAAQ,GAAG,IAAI,CAAA;YAEnB,IAAI,CAAC;gBACH,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAA;YACxF,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,IAAI,GAAG,YAAY,qBAAa,IAAI,CAAC,UAAU,EAAE;oBAAE,MAAM,GAAG,CAAA;YAC9D,CAAC;YAED,IAAI,QAAQ,EAAE,OAAO,EAAE,CAAC;gBACtB,IAAI,OAAO,EAAE,KAAK,SAAS;oBAAE,MAAM,IAAI,+BAAuB,CAAC,QAAQ,CAAC,CAAA;gBACxE,OAAO,CAAC,IAAI,CACV,uCAAuC,QAAQ,CAAC,UAAU,WAAW,QAAQ,CAAC,OAAO,GAAG,CACzF,CAAA;YACH,CAAC;YAED,IAAI,QAAQ,EAAE,QAAQ,IAAI,QAAQ,CAAC,gBAAgB,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;gBAC7E,IAAI,OAAO,EAAE,KAAK,SAAS,EAAE,CAAC;oBAC5B,IAAI,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAA;gBAC/D,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAEjD,IAAI,mBAAmB,EAAE,IAAI,QAAQ,IAAI,KAAK,IAAI,MAAM,CAAC,mBAAmB,EAAE,CAAC;YAC7E,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;gBACvD,IAAI,IAAI,EAAE,CAAC;oBACT,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,IAAI,CACnC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EACtC,QAAQ,EACR,KAAK,CACN,CAAA;oBACD,IAAI,YAAY,CAAC,OAAO,IAAI,OAAO,EAAE,KAAK,SAAS,EAAE,CAAC;wBACpD,MAAM,IAAI,+BAAuB,CAAC,YAAY,CAAC,CAAA;oBACjD,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,IAAI,GAAG,YAAY,+BAAuB;oBAAE,MAAM,GAAG,CAAA;gBACrD,IAAI,GAAG,YAAY,qBAAa,IAAI,CAAC,UAAU,EAAE;oBAAE,MAAM,GAAG,CAAA;YAC9D,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAA;IACjB,CAAC,CAAA;AACH,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * AWS Bedrock Runtime patch - wraps the `send` method on
3
+ * `BedrockRuntimeClient` from `@aws-sdk/client-bedrock-runtime`.
4
+ *
5
+ * Unlike the other patches which target LLM-specific SDKs, this wraps
6
+ * the AWS SDK v3 command pattern: `client.send(new InvokeModelCommand(...))`
7
+ * and `client.send(new ConverseCommand(...))`.
8
+ *
9
+ * Covers all Bedrock-hosted models: Claude, Titan, Llama, Mistral, Cohere,
10
+ * and any model accessible via the Bedrock Runtime API.
11
+ */
12
+ export declare function apply(): boolean;
13
+ export declare function revert(): void;
14
+ //# sourceMappingURL=bedrock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bedrock.d.ts","sourceRoot":"","sources":["../../src/patches/bedrock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA8IH,wBAAgB,KAAK,IAAI,OAAO,CA0C/B;AAED,wBAAgB,MAAM,IAAI,IAAI,CAc7B"}