indigiarmor 0.1.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 (47) hide show
  1. package/LICENSE +24 -0
  2. package/README.md +257 -0
  3. package/dist/client.d.ts +117 -0
  4. package/dist/client.d.ts.map +1 -0
  5. package/dist/client.js +359 -0
  6. package/dist/client.js.map +1 -0
  7. package/dist/errors.d.ts +20 -0
  8. package/dist/errors.d.ts.map +1 -0
  9. package/dist/errors.js +39 -0
  10. package/dist/errors.js.map +1 -0
  11. package/dist/guard.d.ts +17 -0
  12. package/dist/guard.d.ts.map +1 -0
  13. package/dist/guard.js +39 -0
  14. package/dist/guard.js.map +1 -0
  15. package/dist/index.d.ts +4 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +3 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/middleware.d.ts +13 -0
  20. package/dist/middleware.d.ts.map +1 -0
  21. package/dist/middleware.js +34 -0
  22. package/dist/middleware.js.map +1 -0
  23. package/dist/next-handler.d.ts +4 -0
  24. package/dist/next-handler.d.ts.map +1 -0
  25. package/dist/next-handler.js +39 -0
  26. package/dist/next-handler.js.map +1 -0
  27. package/dist/protect.d.ts +9 -0
  28. package/dist/protect.d.ts.map +1 -0
  29. package/dist/protect.js +24 -0
  30. package/dist/protect.js.map +1 -0
  31. package/dist/types.d.ts +356 -0
  32. package/dist/types.d.ts.map +1 -0
  33. package/dist/types.js +3 -0
  34. package/dist/types.js.map +1 -0
  35. package/dist/wrap-anthropic.d.ts +5 -0
  36. package/dist/wrap-anthropic.d.ts.map +1 -0
  37. package/dist/wrap-anthropic.js +107 -0
  38. package/dist/wrap-anthropic.js.map +1 -0
  39. package/dist/wrap-gemini.d.ts +5 -0
  40. package/dist/wrap-gemini.d.ts.map +1 -0
  41. package/dist/wrap-gemini.js +122 -0
  42. package/dist/wrap-gemini.js.map +1 -0
  43. package/dist/wrap-openai.d.ts +5 -0
  44. package/dist/wrap-openai.d.ts.map +1 -0
  45. package/dist/wrap-openai.js +106 -0
  46. package/dist/wrap-openai.js.map +1 -0
  47. package/package.json +54 -0
@@ -0,0 +1,122 @@
1
+ import { IndigiArmorError } from './errors.js';
2
+ import { isSafe, resolvePrompt } from './guard.js';
3
+ /** Extract text from Gemini contents (string, single content obj, or content array). */
4
+ function extractUserTexts(contents) {
5
+ const results = [];
6
+ if (typeof contents === 'string') {
7
+ // Simple string prompt — treated as single user message
8
+ results.push({ index: -1, text: contents });
9
+ return results;
10
+ }
11
+ if (Array.isArray(contents)) {
12
+ for (let i = 0; i < contents.length; i++) {
13
+ const item = contents[i];
14
+ if (!item || typeof item !== 'object')
15
+ continue;
16
+ if ('role' in item && item.role !== 'user')
17
+ continue;
18
+ const parts = 'parts' in item ? item.parts : undefined;
19
+ if (Array.isArray(parts)) {
20
+ const texts = [];
21
+ for (const part of parts) {
22
+ if (part && typeof part === 'object' && 'text' in part && typeof part.text === 'string') {
23
+ texts.push(part.text);
24
+ }
25
+ }
26
+ if (texts.length > 0) {
27
+ results.push({ index: i, text: texts.join('\n') });
28
+ }
29
+ }
30
+ }
31
+ }
32
+ return results;
33
+ }
34
+ /** Replace text in content parts at a given index. */
35
+ function replaceContentText(contents, index, newText) {
36
+ if (index === -1 && typeof contents === 'string') {
37
+ return newText;
38
+ }
39
+ if (Array.isArray(contents)) {
40
+ const updated = [...contents];
41
+ const item = updated[index];
42
+ if (item && typeof item === 'object' && 'parts' in item && Array.isArray(item.parts)) {
43
+ let replaced = false;
44
+ const newParts = item.parts.map((part) => {
45
+ if (!replaced && part && typeof part === 'object' && 'text' in part && typeof part.text === 'string') {
46
+ replaced = true;
47
+ return { ...part, text: newText };
48
+ }
49
+ return part;
50
+ });
51
+ updated[index] = { ...item, parts: newParts };
52
+ }
53
+ return updated;
54
+ }
55
+ return contents;
56
+ }
57
+ export function createWrapGemini(scanFn, scanResponseFn) {
58
+ return function wrapGemini(client, options = {}) {
59
+ const yellowStrategy = options.yellowStrategy ?? 'sanitize';
60
+ const scanOutput = options.scanOutput ?? false;
61
+ // Proxy chain: client -> models -> generateContent()
62
+ return new Proxy(client, {
63
+ get(target, prop, receiver) {
64
+ if (prop === 'models') {
65
+ const models = Reflect.get(target, prop, receiver);
66
+ return new Proxy(models, {
67
+ get(modelsTarget, modelsProp, modelsReceiver) {
68
+ if (modelsProp === 'generateContent') {
69
+ const originalFn = Reflect.get(modelsTarget, modelsProp, modelsReceiver);
70
+ return async function interceptedGenerateContent(params) {
71
+ // Scan system instruction if present
72
+ const config = params.config;
73
+ if (config && typeof config.systemInstruction === 'string' && config.systemInstruction) {
74
+ const sysResult = await scanFn(config.systemInstruction);
75
+ if (!isSafe(sysResult, yellowStrategy)) {
76
+ throw new IndigiArmorError(sysResult.explanation || 'System instruction blocked by IndigiArmor', 'PROMPT_BLOCKED', 0);
77
+ }
78
+ const safeSys = resolvePrompt(config.systemInstruction, sysResult, yellowStrategy);
79
+ if (safeSys !== config.systemInstruction) {
80
+ params = { ...params, config: { ...config, systemInstruction: safeSys } };
81
+ }
82
+ }
83
+ // Scan user contents
84
+ const userTexts = extractUserTexts(params.contents);
85
+ let contents = params.contents;
86
+ for (const { index, text } of userTexts) {
87
+ const result = await scanFn(text);
88
+ if (!isSafe(result, yellowStrategy)) {
89
+ throw new IndigiArmorError(result.explanation || 'Prompt blocked by IndigiArmor', 'PROMPT_BLOCKED', 0);
90
+ }
91
+ const safeText = resolvePrompt(text, result, yellowStrategy);
92
+ if (safeText !== text) {
93
+ contents = replaceContentText(contents, index, safeText);
94
+ }
95
+ }
96
+ if (contents !== params.contents) {
97
+ params = { ...params, contents };
98
+ }
99
+ const response = await originalFn.call(modelsTarget, params);
100
+ // Output scanning
101
+ if (scanOutput && response && typeof response === 'object') {
102
+ const text = response.text;
103
+ if (typeof text === 'string' && text) {
104
+ const outputScan = await scanResponseFn(text);
105
+ if (!outputScan.clean) {
106
+ throw new IndigiArmorError('LLM response blocked by IndigiArmor', 'RESPONSE_BLOCKED', 0);
107
+ }
108
+ }
109
+ }
110
+ return response;
111
+ };
112
+ }
113
+ return Reflect.get(modelsTarget, modelsProp, modelsReceiver);
114
+ },
115
+ });
116
+ }
117
+ return Reflect.get(target, prop, receiver);
118
+ },
119
+ });
120
+ };
121
+ }
122
+ //# sourceMappingURL=wrap-gemini.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrap-gemini.js","sourceRoot":"","sources":["../src/wrap-gemini.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { WrapLLMOptions } from './types.js';
2
+ import { type ScanFn } from './guard.js';
3
+ import type { ScanResponseFn } from './protect.js';
4
+ export declare function createWrapOpenAI(scanFn: ScanFn, scanResponseFn: ScanResponseFn): <T extends object>(client: T, options?: WrapLLMOptions) => T;
5
+ //# sourceMappingURL=wrap-openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrap-openai.d.ts","sourceRoot":"","sources":["../src/wrap-openai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAsB,cAAc,EAAE,MAAM,YAAY,CAAC;AAErE,OAAO,EAAyB,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAkCnD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,IAClD,CAAC,SAAS,MAAM,EAAE,QAAQ,CAAC,EAAE,UAAS,cAAmB,KAAG,CAAC,CAmFzF"}
@@ -0,0 +1,106 @@
1
+ import { IndigiArmorError } from './errors.js';
2
+ import { isSafe, resolvePrompt } from './guard.js';
3
+ /** Extract text from a message content value (string or ContentPart[]). */
4
+ function extractText(content) {
5
+ if (typeof content === 'string')
6
+ return content;
7
+ if (Array.isArray(content)) {
8
+ const texts = [];
9
+ for (const part of content) {
10
+ if (part && typeof part === 'object' && 'type' in part && part.type === 'text' && 'text' in part) {
11
+ texts.push(part.text);
12
+ }
13
+ }
14
+ return texts.length > 0 ? texts.join('\n') : null;
15
+ }
16
+ return null;
17
+ }
18
+ /** Replace text content in a message, preserving structure. */
19
+ function replaceContent(content, newText) {
20
+ if (typeof content === 'string')
21
+ return newText;
22
+ if (Array.isArray(content)) {
23
+ // Replace only the first text part, leave others (images) untouched
24
+ let replaced = false;
25
+ return content.map((part) => {
26
+ if (!replaced && part && typeof part === 'object' && 'type' in part && part.type === 'text') {
27
+ replaced = true;
28
+ return { ...part, text: newText };
29
+ }
30
+ return part;
31
+ });
32
+ }
33
+ return content;
34
+ }
35
+ export function createWrapOpenAI(scanFn, scanResponseFn) {
36
+ return function wrapOpenAI(client, options = {}) {
37
+ const yellowStrategy = options.yellowStrategy ?? 'sanitize';
38
+ const scanOutput = options.scanOutput ?? false;
39
+ // Proxy chain: client -> chat -> completions -> create()
40
+ return new Proxy(client, {
41
+ get(target, prop, receiver) {
42
+ if (prop === 'chat') {
43
+ const chat = Reflect.get(target, prop, receiver);
44
+ return new Proxy(chat, {
45
+ get(chatTarget, chatProp, chatReceiver) {
46
+ if (chatProp === 'completions') {
47
+ const completions = Reflect.get(chatTarget, chatProp, chatReceiver);
48
+ return new Proxy(completions, {
49
+ get(compTarget, compProp, compReceiver) {
50
+ if (compProp === 'create') {
51
+ const originalCreate = Reflect.get(compTarget, compProp, compReceiver);
52
+ return async function interceptedCreate(params) {
53
+ const messages = params.messages;
54
+ if (messages) {
55
+ const scannedMessages = [...messages];
56
+ for (let i = 0; i < scannedMessages.length; i++) {
57
+ const msg = scannedMessages[i];
58
+ if (msg.role !== 'user')
59
+ continue;
60
+ const text = extractText(msg.content);
61
+ if (!text)
62
+ continue;
63
+ const result = await scanFn(text);
64
+ if (!isSafe(result, yellowStrategy)) {
65
+ throw new IndigiArmorError(result.explanation || 'Prompt blocked by IndigiArmor', 'PROMPT_BLOCKED', 0);
66
+ }
67
+ const safeText = resolvePrompt(text, result, yellowStrategy);
68
+ if (safeText !== text) {
69
+ scannedMessages[i] = { ...msg, content: replaceContent(msg.content, safeText) };
70
+ }
71
+ }
72
+ params = { ...params, messages: scannedMessages };
73
+ }
74
+ const response = await originalCreate.call(compTarget, params);
75
+ if (scanOutput && response && typeof response === 'object') {
76
+ const choices = response.choices;
77
+ if (choices) {
78
+ for (const choice of choices) {
79
+ const message = choice.message;
80
+ const content = message?.content;
81
+ if (typeof content === 'string' && content) {
82
+ const outputScan = await scanResponseFn(content);
83
+ if (!outputScan.clean) {
84
+ throw new IndigiArmorError('LLM response blocked by IndigiArmor', 'RESPONSE_BLOCKED', 0);
85
+ }
86
+ }
87
+ }
88
+ }
89
+ }
90
+ return response;
91
+ };
92
+ }
93
+ return Reflect.get(compTarget, compProp, compReceiver);
94
+ },
95
+ });
96
+ }
97
+ return Reflect.get(chatTarget, chatProp, chatReceiver);
98
+ },
99
+ });
100
+ }
101
+ return Reflect.get(target, prop, receiver);
102
+ },
103
+ });
104
+ };
105
+ }
106
+ //# sourceMappingURL=wrap-openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrap-openai.js","sourceRoot":"","sources":["../src/wrap-openai.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "indigiarmor",
3
+ "version": "0.1.0",
4
+ "description": "Official JavaScript/TypeScript client for the IndigiArmor API",
5
+ "private": false,
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/index.js",
12
+ "types": "./dist/index.d.ts"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "README.md",
18
+ "LICENSE"
19
+ ],
20
+ "scripts": {
21
+ "build": "tsc",
22
+ "test": "vitest run",
23
+ "test:watch": "vitest",
24
+ "prepublishOnly": "npm run build"
25
+ },
26
+ "publishConfig": {
27
+ "access": "public"
28
+ },
29
+ "repository": {
30
+ "type": "git",
31
+ "url": "git+https://github.com/rschance1/indigiarmor.git",
32
+ "directory": "packages/sdk"
33
+ },
34
+ "keywords": [
35
+ "ai-safety",
36
+ "pii-detection",
37
+ "ferpa",
38
+ "prompt-scanning",
39
+ "data-sovereignty",
40
+ "indigenous-data",
41
+ "ai-governance",
42
+ "content-safety"
43
+ ],
44
+ "homepage": "https://indigiarmor.com/docs/sdk",
45
+ "bugs": "https://github.com/rschance1/indigiarmor/issues",
46
+ "license": "SEE LICENSE IN LICENSE",
47
+ "engines": {
48
+ "node": ">=18"
49
+ },
50
+ "devDependencies": {
51
+ "typescript": "^5.7.0",
52
+ "vitest": "^4.0.18"
53
+ }
54
+ }