@amaster.ai/pi-shared 0.1.7 → 0.1.9

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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=network-transport.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-transport.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/network-transport.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,47 @@
1
+ import { EventEmitter } from 'node:events';
2
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
3
+ const { requestMock } = vi.hoisted(() => ({ requestMock: vi.fn() }));
4
+ vi.mock('node:https', () => ({ request: requestMock }));
5
+ import { safeFetch } from '../network.js';
6
+ describe('network transport', () => {
7
+ beforeEach(() => {
8
+ requestMock.mockReset();
9
+ });
10
+ it('uses the single-address lookup contract when connecting to a pinned address', async () => {
11
+ requestMock.mockImplementation((_url, options, onResponse) => {
12
+ const request = new EventEmitter();
13
+ request.end = () => {
14
+ const all = options.family === undefined;
15
+ options.lookup('cdn.example', { all, family: options.family ?? 0 }, (error, address, family) => {
16
+ if (error) {
17
+ request.emit('error', error);
18
+ return;
19
+ }
20
+ if (all ? !Array.isArray(address) : typeof address !== 'string' || !family) {
21
+ request.emit('error', new TypeError('lookup callback returned the wrong shape'));
22
+ return;
23
+ }
24
+ onResponse({ headers: {}, statusCode: 200, statusMessage: 'OK' });
25
+ });
26
+ };
27
+ return request;
28
+ });
29
+ await expect(safeFetch('https://cdn.example/image.png', { method: 'HEAD' }, { lookup: async () => [{ address: '93.184.216.34', family: 4 }] })).resolves.toMatchObject({ status: 200 });
30
+ });
31
+ it('revalidates every redirect before following it', async () => {
32
+ requestMock.mockImplementation((_url, _options, onResponse) => {
33
+ const request = new EventEmitter();
34
+ request.end = () => {
35
+ onResponse({
36
+ headers: { location: 'http://169.254.169.254/latest/meta-data' },
37
+ statusCode: 302,
38
+ statusMessage: 'Found',
39
+ });
40
+ };
41
+ return request;
42
+ });
43
+ await expect(safeFetch('https://cdn.example/start', { method: 'HEAD' }, { lookup: async () => [{ address: '93.184.216.34', family: 4 }] })).rejects.toThrow(/public HTTP/i);
44
+ expect(requestMock).toHaveBeenCalledTimes(1);
45
+ });
46
+ });
47
+ //# sourceMappingURL=network-transport.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-transport.test.js","sourceRoot":"","sources":["../../src/__tests__/network-transport.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=network.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/network.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,157 @@
1
+ import { describe, expect, it, vi } from 'vitest';
2
+ import { assertPublicHttpUrl, hostFromUrl, readResponseBytes, safeFetch, trustedHostsFromUrls, } from '../network.js';
3
+ const publicLookup = async () => [{ address: '93.184.216.34', family: 4 }];
4
+ describe('network', () => {
5
+ it.each([
6
+ 'http://127.0.0.1/private',
7
+ 'http://0.0.0.0/private',
8
+ 'http://169.254.169.254/latest/meta-data',
9
+ 'http://10.0.0.1/private',
10
+ 'http://192.0.2.1/documentation',
11
+ 'http://198.51.100.1/documentation',
12
+ 'http://203.0.113.1/documentation',
13
+ 'http://[::1]/private',
14
+ 'http://[::c0a8:101]/ipv4-compatible-private',
15
+ 'http://[100::1]/discard-only',
16
+ 'http://[2001:2::1]/benchmarking',
17
+ 'http://[2001:db8::1]/documentation',
18
+ 'http://[3fff::1]/documentation',
19
+ 'http://[5f00::1]/segment-routing',
20
+ 'http://[fec0::1]/private',
21
+ 'http://[64:ff9b:1::a00:1]/private',
22
+ 'http://[64:ff9b::a9fe:a9fe]/latest/meta-data',
23
+ 'http://[2002:a9fe:a9fe::]/latest/meta-data',
24
+ 'http://[2002:a9fe::]/private',
25
+ 'http://[2002:5db8:d822::]/path',
26
+ 'http://[::ffff:127.0.0.1]/private',
27
+ 'http://[::ffff:169.254.169.254]/latest/meta-data',
28
+ 'file:///etc/passwd',
29
+ ])('rejects non-public destination %s', async (url) => {
30
+ await expect(assertPublicHttpUrl(url, { lookup: publicLookup })).rejects.toThrow(/public HTTP/i);
31
+ });
32
+ it('rejects a hostname when DNS returns a private address', async () => {
33
+ const privateLookup = async () => [{ address: '192.168.1.20', family: 4 }];
34
+ await expect(assertPublicHttpUrl('https://internal.example/path', { lookup: privateLookup })).rejects.toThrow(/public HTTP/i);
35
+ });
36
+ it('rejects a hostname when DNS64 embeds a private IPv4 address', async () => {
37
+ const privateNat64Lookup = async () => [
38
+ { address: '64:ff9b::a9fe:a9fe', family: 6 },
39
+ ];
40
+ await expect(assertPublicHttpUrl('https://internal.example/path', { lookup: privateNat64Lookup })).rejects.toThrow(/public HTTP/i);
41
+ });
42
+ it('allows a public HTTP URL', async () => {
43
+ await expect(assertPublicHttpUrl('https://example.com/path', { lookup: publicLookup })).resolves.toMatchObject({ hostname: 'example.com', protocol: 'https:' });
44
+ await expect(assertPublicHttpUrl('http://[::ffff:93.184.216.34]/path', { lookup: publicLookup })).resolves.toMatchObject({ hostname: '[::ffff:5db8:d822]' });
45
+ await expect(assertPublicHttpUrl('http://[64:ff9b::5db8:d822]/path', { lookup: publicLookup })).resolves.toMatchObject({ hostname: '[64:ff9b::5db8:d822]' });
46
+ await expect(assertPublicHttpUrl('https://[2606:4700:4700::1111]/path', { lookup: publicLookup })).resolves.toMatchObject({ hostname: '[2606:4700:4700::1111]' });
47
+ await expect(assertPublicHttpUrl('https://[2001:3::1]/path', { lookup: publicLookup })).resolves.toMatchObject({ hostname: '[2001:3::1]' });
48
+ });
49
+ it('does not let a wrapped global fetch bypass DNS validation', async () => {
50
+ const originalFetch = globalThis.fetch;
51
+ const wrappedFetch = vi.fn().mockResolvedValue(new Response('unsafe'));
52
+ globalThis.fetch = wrappedFetch;
53
+ try {
54
+ await expect(safeFetch('https://does-not-resolve.invalid/private')).rejects.toThrow(/public HTTP/i);
55
+ expect(wrappedFetch).not.toHaveBeenCalled();
56
+ }
57
+ finally {
58
+ globalThis.fetch = originalFetch;
59
+ }
60
+ });
61
+ it('reports the host and resolved address when rejecting non-public DNS answers', async () => {
62
+ const fakeIpLookup = async () => [{ address: '198.18.1.86', family: 4 }];
63
+ await expect(assertPublicHttpUrl('https://gateway.internal.example/path', { lookup: fakeIpLookup })).rejects.toThrow(/gateway\.internal\.example.*198\.18\.1\.86/s);
64
+ });
65
+ it('reports an unresolvable host distinctly', async () => {
66
+ const emptyLookup = async () => [];
67
+ await expect(assertPublicHttpUrl('https://gone.example/path', { lookup: emptyLookup })).rejects.toThrow(/could not be resolved/i);
68
+ });
69
+ it.each([
70
+ 'gateway.internal.example',
71
+ '*.internal.example',
72
+ 'INTERNAL.example',
73
+ ' gateway.internal.example ',
74
+ ])('trusts %s past the public-IP check', async (trusted) => {
75
+ const fakeIpLookup = async () => [{ address: '198.18.1.86', family: 4 }];
76
+ await expect(assertPublicHttpUrl('https://gateway.internal.example/path', {
77
+ lookup: fakeIpLookup,
78
+ trustedHosts: [trusted],
79
+ })).resolves.toMatchObject({ hostname: 'gateway.internal.example' });
80
+ });
81
+ it('trusts subdomains of a trusted host', async () => {
82
+ const fakeIpLookup = async () => [{ address: '198.18.1.86', family: 4 }];
83
+ await expect(assertPublicHttpUrl('https://cdn.internal.example/path', {
84
+ lookup: fakeIpLookup,
85
+ trustedHosts: ['internal.example'],
86
+ })).resolves.toMatchObject({ hostname: 'cdn.internal.example' });
87
+ });
88
+ it('does not trust a mere suffix match', async () => {
89
+ const fakeIpLookup = async () => [{ address: '198.18.1.86', family: 4 }];
90
+ await expect(assertPublicHttpUrl('https://evil-internal.example/path', {
91
+ lookup: fakeIpLookup,
92
+ trustedHosts: ['internal.example'],
93
+ })).rejects.toThrow(/public HTTP/i);
94
+ });
95
+ it('matches bracketed IPv6-literal trusted hosts', async () => {
96
+ // ULA literals fail the public-IP check unless trusted; hostFromUrl keeps
97
+ // the brackets, so the pattern side must strip them too.
98
+ await expect(assertPublicHttpUrl('http://[fd00::1]/')).rejects.toThrow(/public HTTP/i);
99
+ await expect(assertPublicHttpUrl('http://[fd00::1]/', { trustedHosts: ['[fd00::1]'] })).resolves.toBeDefined();
100
+ });
101
+ it('still applies protocol and localhost rules to trusted hosts', async () => {
102
+ await expect(assertPublicHttpUrl('ftp://internal.example/path', {
103
+ lookup: publicLookup,
104
+ trustedHosts: ['internal.example'],
105
+ })).rejects.toThrow(/public HTTP/i);
106
+ await expect(assertPublicHttpUrl('https://localhost/path', {
107
+ lookup: publicLookup,
108
+ trustedHosts: ['localhost'],
109
+ })).rejects.toThrow(/public HTTP/i);
110
+ await expect(assertPublicHttpUrl('https://user:pass@internal.example/path', {
111
+ lookup: publicLookup,
112
+ trustedHosts: ['internal.example'],
113
+ })).rejects.toThrow(/public HTTP/i);
114
+ });
115
+ it('still rejects a trusted host that cannot be resolved', async () => {
116
+ const emptyLookup = async () => [];
117
+ await expect(assertPublicHttpUrl('https://internal.example/path', {
118
+ lookup: emptyLookup,
119
+ trustedHosts: ['internal.example'],
120
+ })).rejects.toThrow(/could not be resolved/i);
121
+ });
122
+ it('cancels and rejects a response body that exceeds the byte ceiling', async () => {
123
+ let cancelled = false;
124
+ const response = new Response(new ReadableStream({
125
+ start(controller) {
126
+ controller.enqueue(new Uint8Array(6));
127
+ controller.enqueue(new Uint8Array(6));
128
+ },
129
+ cancel() {
130
+ cancelled = true;
131
+ },
132
+ }));
133
+ await expect(readResponseBytes(response, 10)).rejects.toThrow(/size ceiling/i);
134
+ expect(cancelled).toBe(true);
135
+ });
136
+ });
137
+ describe('hostFromUrl', () => {
138
+ it.each([
139
+ ['https://credits.example.com/v1', 'credits.example.com'],
140
+ ['http://internal.example:8080/api', 'internal.example'],
141
+ ['https://[2001:3::1]/v1', '[2001:3::1]'],
142
+ ])('extracts the hostname from %s', (input, expected) => {
143
+ expect(hostFromUrl(input)).toBe(expected);
144
+ });
145
+ it.each([[undefined], [''], ['not a url'], ['http://']])('returns undefined for %j', (input) => {
146
+ expect(hostFromUrl(input)).toBeUndefined();
147
+ });
148
+ });
149
+ describe('trustedHostsFromUrls', () => {
150
+ it('collects hosts from valid URLs and skips the rest', () => {
151
+ expect(trustedHostsFromUrls('https://credits.example.com/v1', undefined, 'not a url', 'http://internal.example:8080/api')).toEqual(['credits.example.com', 'internal.example']);
152
+ });
153
+ it('returns an empty list when nothing parses', () => {
154
+ expect(trustedHostsFromUrls(undefined, '')).toEqual([]);
155
+ });
156
+ });
157
+ //# sourceMappingURL=network.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network.test.js","sourceRoot":"","sources":["../../src/__tests__/network.test.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -406,4 +406,5 @@ export type SandboxFileEntry = {
406
406
  size?: number;
407
407
  modifiedAt?: string;
408
408
  };
409
+ export { assertPublicHttpUrl, type DnsLookup, hostFromUrl, readResponseBytes, safeFetch, type TrustedHosts, trustedHostsFromUrls, } from './network.js';
409
410
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export {};
1
+ export { assertPublicHttpUrl, hostFromUrl, readResponseBytes, safeFetch, trustedHostsFromUrls, } from './network.js';
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA8dA,OAAO,EACL,mBAAmB,EAEnB,WAAW,EACX,iBAAiB,EACjB,SAAS,EAET,oBAAoB,GACrB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,34 @@
1
+ export type DnsLookup = (hostname: string) => Promise<Array<{
2
+ address: string;
3
+ family: number;
4
+ }>>;
5
+ /**
6
+ * Hosts the caller explicitly trusts (typically from user-configured provider
7
+ * baseUrls). Matching is case-insensitive; an entry matches the host itself or
8
+ * any subdomain (`example.com` covers `cdn.example.com`). A leading `*.` is
9
+ * accepted and treated identically. Trusted hosts bypass only the public-IP
10
+ * check — protocol / userinfo / localhost rules still apply.
11
+ */
12
+ export type TrustedHosts = readonly string[];
13
+ /**
14
+ * Extract the hostname from a configured baseUrl, returning undefined for
15
+ * missing or malformed values. Used by extensions to build `trustedHosts`
16
+ * from their provider settings.
17
+ */
18
+ export declare function hostFromUrl(value: string | undefined): string | undefined;
19
+ /**
20
+ * Build a TrustedHosts list from configured URLs (provider baseUrls, or URLs
21
+ * returned by a configured provider). Malformed values are skipped.
22
+ */
23
+ export declare function trustedHostsFromUrls(...values: Array<string | undefined>): TrustedHosts;
24
+ export declare function assertPublicHttpUrl(value: string | URL, options?: {
25
+ lookup?: DnsLookup | undefined;
26
+ trustedHosts?: TrustedHosts | undefined;
27
+ }): Promise<URL>;
28
+ export declare function safeFetch(value: string | URL, init?: RequestInit, options?: {
29
+ lookup?: DnsLookup | undefined;
30
+ maxRedirects?: number | undefined;
31
+ trustedHosts?: TrustedHosts | undefined;
32
+ }): Promise<Response>;
33
+ export declare function readResponseBytes(response: Response, maxBytes: number): Promise<Uint8Array>;
34
+ //# sourceMappingURL=network.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAAC;AAoFlG;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG,SAAS,MAAM,EAAE,CAAC;AAmB7C;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAOzE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,YAAY,CAOvF;AAmDD,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,GAAG,GAAG,EACnB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAAC,YAAY,CAAC,EAAE,YAAY,GAAG,SAAS,CAAA;CAAO,GACxF,OAAO,CAAC,GAAG,CAAC,CAEd;AAED,wBAAsB,SAAS,CAC7B,KAAK,EAAE,MAAM,GAAG,GAAG,EACnB,IAAI,GAAE,WAAgB,EACtB,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,YAAY,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;CACpC,GACL,OAAO,CAAC,QAAQ,CAAC,CAkBnB;AA4DD,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAiCjG"}
@@ -0,0 +1,277 @@
1
+ import { lookup as nodeLookup } from 'node:dns/promises';
2
+ import { request as httpRequest } from 'node:http';
3
+ import { request as httpsRequest } from 'node:https';
4
+ import { BlockList, isIP } from 'node:net';
5
+ import { Readable } from 'node:stream';
6
+ const defaultLookup = async (hostname) => nodeLookup(hostname, { all: true, verbatim: true });
7
+ const wellKnownNat64Addresses = new BlockList();
8
+ wellKnownNat64Addresses.addSubnet('64:ff9b::', 96, 'ipv6');
9
+ const globalIpv6Addresses = new BlockList();
10
+ globalIpv6Addresses.addSubnet('2000::', 3, 'ipv6');
11
+ const nonGlobalIpv6Addresses = new BlockList();
12
+ nonGlobalIpv6Addresses.addSubnet('2001::', 23, 'ipv6');
13
+ nonGlobalIpv6Addresses.addSubnet('2001:db8::', 32, 'ipv6');
14
+ nonGlobalIpv6Addresses.addSubnet('2002::', 16, 'ipv6');
15
+ nonGlobalIpv6Addresses.addSubnet('3fff::', 20, 'ipv6');
16
+ // IANA marks 2001::/23 non-global except for these more-specific allocations.
17
+ const globalIetfProtocolAddresses = new BlockList();
18
+ globalIetfProtocolAddresses.addAddress('2001:1::1', 'ipv6');
19
+ globalIetfProtocolAddresses.addAddress('2001:1::2', 'ipv6');
20
+ globalIetfProtocolAddresses.addAddress('2001:1::3', 'ipv6');
21
+ globalIetfProtocolAddresses.addSubnet('2001:3::', 32, 'ipv6');
22
+ globalIetfProtocolAddresses.addSubnet('2001:4:112::', 48, 'ipv6');
23
+ globalIetfProtocolAddresses.addSubnet('2001:20::', 28, 'ipv6');
24
+ globalIetfProtocolAddresses.addSubnet('2001:30::', 28, 'ipv6');
25
+ function isPublicIpv4(address) {
26
+ const octets = address.split('.').map(Number);
27
+ if (octets.length !== 4 || octets.some((part) => !Number.isInteger(part)))
28
+ return false;
29
+ const [a, b, c] = octets;
30
+ if (a === 0 ||
31
+ a === 10 ||
32
+ a === 127 ||
33
+ a >= 224 ||
34
+ (a === 100 && b >= 64 && b <= 127) ||
35
+ (a === 169 && b === 254) ||
36
+ (a === 172 && b >= 16 && b <= 31) ||
37
+ (a === 192 && b === 168) ||
38
+ (a === 192 && b === 0 && c === 0) ||
39
+ (a === 192 && b === 0 && c === 2) ||
40
+ (a === 192 && b === 88 && c === 99) ||
41
+ (a === 198 && (b === 18 || b === 19 || (b === 51 && c === 100))) ||
42
+ (a === 203 && b === 0 && c === 113)) {
43
+ return false;
44
+ }
45
+ return true;
46
+ }
47
+ function mappedIpv4(address) {
48
+ const dotted = /^::ffff:(\d+\.\d+\.\d+\.\d+)$/.exec(address);
49
+ if (dotted)
50
+ return dotted[1];
51
+ const hex = /^(?:::ffff:|(?:0{1,4}:){5}ffff:)([0-9a-f]{1,4}):([0-9a-f]{1,4})$/.exec(address);
52
+ if (!hex)
53
+ return undefined;
54
+ const value = Number.parseInt(hex[1], 16) * 65_536 + Number.parseInt(hex[2], 16);
55
+ return [value >>> 24, (value >>> 16) & 255, (value >>> 8) & 255, value & 255].join('.');
56
+ }
57
+ function nat64Ipv4(address) {
58
+ if (!wellKnownNat64Addresses.check(address, 'ipv6'))
59
+ return undefined;
60
+ let canonical;
61
+ try {
62
+ canonical = new URL(`http://[${address}]/`).hostname.slice(1, -1);
63
+ }
64
+ catch {
65
+ return undefined;
66
+ }
67
+ const hex = /^64:ff9b::([0-9a-f]{1,4}):([0-9a-f]{1,4})$/.exec(canonical);
68
+ if (!hex)
69
+ return undefined;
70
+ const value = Number.parseInt(hex[1], 16) * 65_536 + Number.parseInt(hex[2], 16);
71
+ return [value >>> 24, (value >>> 16) & 255, (value >>> 8) & 255, value & 255].join('.');
72
+ }
73
+ function isPublicIp(address) {
74
+ const normalized = address.toLowerCase().replace(/^\[|\]$/g, '');
75
+ const family = isIP(normalized);
76
+ if (family === 4)
77
+ return isPublicIpv4(normalized);
78
+ if (family !== 6)
79
+ return false;
80
+ const embeddedIpv4 = mappedIpv4(normalized) ?? nat64Ipv4(normalized);
81
+ if (embeddedIpv4)
82
+ return isPublicIpv4(embeddedIpv4);
83
+ if (!globalIpv6Addresses.check(normalized, 'ipv6'))
84
+ return false;
85
+ return (globalIetfProtocolAddresses.check(normalized, 'ipv6') ||
86
+ !nonGlobalIpv6Addresses.check(normalized, 'ipv6'));
87
+ }
88
+ function isTrustedHost(hostname, trustedHosts) {
89
+ if (trustedHosts.length === 0)
90
+ return false;
91
+ const lower = hostname.toLowerCase().replace(/^\[|\]$/g, '');
92
+ for (const raw of trustedHosts) {
93
+ const pattern = raw
94
+ .trim()
95
+ .toLowerCase()
96
+ .replace(/^\[|\]$/g, '')
97
+ .replace(/^\*\./, '');
98
+ if (!pattern)
99
+ continue;
100
+ if (lower === pattern || lower.endsWith(`.${pattern}`))
101
+ return true;
102
+ }
103
+ return false;
104
+ }
105
+ const PUBLIC_DESTINATION = 'Outbound URL must use a public HTTP(S) destination.';
106
+ /**
107
+ * Extract the hostname from a configured baseUrl, returning undefined for
108
+ * missing or malformed values. Used by extensions to build `trustedHosts`
109
+ * from their provider settings.
110
+ */
111
+ export function hostFromUrl(value) {
112
+ if (!value)
113
+ return undefined;
114
+ try {
115
+ return new URL(value).hostname || undefined;
116
+ }
117
+ catch {
118
+ return undefined;
119
+ }
120
+ }
121
+ /**
122
+ * Build a TrustedHosts list from configured URLs (provider baseUrls, or URLs
123
+ * returned by a configured provider). Malformed values are skipped.
124
+ */
125
+ export function trustedHostsFromUrls(...values) {
126
+ const hosts = [];
127
+ for (const value of values) {
128
+ const host = hostFromUrl(value);
129
+ if (host)
130
+ hosts.push(host);
131
+ }
132
+ return hosts;
133
+ }
134
+ /**
135
+ * Parse an outbound URL once using Node's WHATWG parser and require every DNS
136
+ * answer to be globally routable — unless the hostname matches `trustedHosts`,
137
+ * in which case the public-IP check is skipped (the connection still pins the
138
+ * first resolved address). Call this again for every redirect target.
139
+ */
140
+ async function resolvePublicHttpUrl(value, options = {}) {
141
+ const lookup = options.lookup ?? defaultLookup;
142
+ let url;
143
+ try {
144
+ url = value instanceof URL ? new URL(value) : new URL(value);
145
+ }
146
+ catch {
147
+ throw new Error(PUBLIC_DESTINATION);
148
+ }
149
+ if ((url.protocol !== 'http:' && url.protocol !== 'https:') ||
150
+ url.username ||
151
+ url.password ||
152
+ !url.hostname ||
153
+ url.hostname === 'localhost' ||
154
+ url.hostname.endsWith('.localhost')) {
155
+ throw new Error(PUBLIC_DESTINATION);
156
+ }
157
+ const hostname = url.hostname.replace(/^\[|\]$/g, '');
158
+ const literalFamily = isIP(hostname);
159
+ const addresses = literalFamily
160
+ ? [{ address: hostname, family: literalFamily }]
161
+ : await lookup(hostname).catch(() => []);
162
+ if (addresses.length === 0) {
163
+ throw new Error(`${PUBLIC_DESTINATION} Host "${hostname}" could not be resolved.`);
164
+ }
165
+ if (!isTrustedHost(hostname, options.trustedHosts ?? [])) {
166
+ const nonPublic = addresses.filter(({ address }) => !isPublicIp(address));
167
+ if (nonPublic.length > 0) {
168
+ const list = nonPublic.map(({ address }) => address).join(', ');
169
+ throw new Error(`${PUBLIC_DESTINATION} Host "${hostname}" resolved to non-public address ${list}. ` +
170
+ 'If this host is reached via a trusted proxy (e.g. fake-ip DNS), pass it via trustedHosts.');
171
+ }
172
+ }
173
+ return { url, addresses };
174
+ }
175
+ export async function assertPublicHttpUrl(value, options = {}) {
176
+ return (await resolvePublicHttpUrl(value, options)).url;
177
+ }
178
+ export async function safeFetch(value, init = {}, options = {}) {
179
+ const lookup = options.lookup ?? defaultLookup;
180
+ const maxRedirects = options.maxRedirects ?? 5;
181
+ const trustedHosts = options.trustedHosts;
182
+ let resolved = await resolvePublicHttpUrl(value, { lookup, trustedHosts });
183
+ for (let redirects = 0;; redirects++) {
184
+ const response = await pinnedFetch(resolved.url, resolved.addresses[0], init);
185
+ if (![301, 302, 303, 307, 308].includes(response.status))
186
+ return response;
187
+ const location = response.headers.get('location');
188
+ if (!location || redirects >= maxRedirects) {
189
+ await response.body?.cancel().catch(() => { });
190
+ throw new Error('Outbound request exceeded the redirect limit.');
191
+ }
192
+ const next = new URL(location, resolved.url);
193
+ await response.body?.cancel().catch(() => { });
194
+ resolved = await resolvePublicHttpUrl(next, { lookup, trustedHosts });
195
+ }
196
+ }
197
+ async function pinnedFetch(url, target, init) {
198
+ const method = init.method?.toUpperCase() ?? 'GET';
199
+ if ((method === 'GET' || method === 'HEAD') && init.body) {
200
+ throw new Error(`${method} outbound requests cannot include a body.`);
201
+ }
202
+ if (init.body !== undefined &&
203
+ init.body !== null &&
204
+ typeof init.body !== 'string' &&
205
+ !(init.body instanceof Uint8Array)) {
206
+ throw new Error('Safe outbound fetch requires a replayable string or byte body.');
207
+ }
208
+ return new Promise((resolve, reject) => {
209
+ const headers = Object.fromEntries(new Headers(init.headers).entries());
210
+ const request = (url.protocol === 'https:' ? httpsRequest : httpRequest)(url, {
211
+ method,
212
+ headers,
213
+ signal: init.signal ?? undefined,
214
+ family: target.family,
215
+ lookup(_hostname, _options, callback) {
216
+ callback(null, target.address, target.family);
217
+ },
218
+ }, (incoming) => {
219
+ const responseHeaders = new Headers();
220
+ for (const [name, value] of Object.entries(incoming.headers)) {
221
+ if (Array.isArray(value)) {
222
+ for (const item of value)
223
+ responseHeaders.append(name, item);
224
+ }
225
+ else if (value !== undefined) {
226
+ responseHeaders.set(name, value);
227
+ }
228
+ }
229
+ const body = method === 'HEAD' || incoming.statusCode === 204 || incoming.statusCode === 304
230
+ ? null
231
+ : Readable.toWeb(incoming);
232
+ resolve(new Response(body, {
233
+ status: incoming.statusCode ?? 500,
234
+ statusText: incoming.statusMessage ?? '',
235
+ headers: responseHeaders,
236
+ }));
237
+ });
238
+ request.once('error', reject);
239
+ request.end(init.body ?? undefined);
240
+ });
241
+ }
242
+ export async function readResponseBytes(response, maxBytes) {
243
+ const contentLength = Number(response.headers.get('content-length'));
244
+ if (Number.isFinite(contentLength) && contentLength > maxBytes) {
245
+ await response.body?.cancel().catch(() => { });
246
+ throw new Error('Remote response exceeds the size ceiling.');
247
+ }
248
+ if (!response.body)
249
+ return new Uint8Array();
250
+ const reader = response.body.getReader();
251
+ const chunks = [];
252
+ let total = 0;
253
+ try {
254
+ for (;;) {
255
+ const { done, value } = await reader.read();
256
+ if (done)
257
+ break;
258
+ total += value.byteLength;
259
+ if (total > maxBytes) {
260
+ await reader.cancel();
261
+ throw new Error('Remote response exceeds the size ceiling.');
262
+ }
263
+ chunks.push(value);
264
+ }
265
+ }
266
+ finally {
267
+ reader.releaseLock();
268
+ }
269
+ const result = new Uint8Array(total);
270
+ let offset = 0;
271
+ for (const chunk of chunks) {
272
+ result.set(chunk, offset);
273
+ offset += chunk.byteLength;
274
+ }
275
+ return result;
276
+ }
277
+ //# sourceMappingURL=network.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network.js","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Shared threat-pattern library for memory content scanning.
3
+ *
4
+ * Covers prompt injection, role hijack, C2 framework names, exfiltration,
5
+ * persistence (SSH backdoor, agent-config edits), and invisible unicode.
6
+ *
7
+ * Pattern philosophy: anchor on attack-specific vocabulary or unambiguous
8
+ * attack behavior, NOT on bossy English. Multi-word filler is allowed via
9
+ * `(?:\w+\s+)*` between key tokens so attackers can't bypass with
10
+ * synonyms ("ignore all prior instructions").
11
+ */
12
+ type Scope = 'all' | 'context' | 'strict';
13
+ /**
14
+ * Invisible / bidirectional unicode characters used in injection attacks.
15
+ */
16
+ export declare const INVISIBLE_CHARS: ReadonlySet<string>;
17
+ /**
18
+ * Return matched pattern IDs in `content` at the given scope.
19
+ *
20
+ * - `all`: classic injection + exfil only (lowest false-positive set).
21
+ * - `context`: adds promptware / C2 / role-play patterns.
22
+ * - `strict`: adds persistence / SSH backdoor / exfil-URL patterns.
23
+ *
24
+ * Invisible-unicode hits are reported as `invisible_unicode_U+XXXX`.
25
+ */
26
+ export declare function scanForThreats(content: string, scope?: Scope): string[];
27
+ /**
28
+ * Return a human-readable error string for the first threat in `content`,
29
+ * or `null` when clean. Convenience wrapper for paths that block on first
30
+ * hit (memory writes).
31
+ */
32
+ export declare function firstThreatMessage(content: string, scope?: Scope): string | null;
33
+ export {};
34
+ //# sourceMappingURL=threat-patterns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"threat-patterns.d.ts","sourceRoot":"","sources":["../src/threat-patterns.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,KAAK,KAAK,GAAG,KAAK,GAAG,SAAS,GAAG,QAAQ,CAAC;AAmH1C;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,MAAM,CAkB9C,CAAC;AA0BH;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,KAAiB,GAAG,MAAM,EAAE,CA0BlF;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,KAAgB,GAAG,MAAM,GAAG,IAAI,CAW1F"}
@@ -0,0 +1,211 @@
1
+ /**
2
+ * Shared threat-pattern library for memory content scanning.
3
+ *
4
+ * Covers prompt injection, role hijack, C2 framework names, exfiltration,
5
+ * persistence (SSH backdoor, agent-config edits), and invisible unicode.
6
+ *
7
+ * Pattern philosophy: anchor on attack-specific vocabulary or unambiguous
8
+ * attack behavior, NOT on bossy English. Multi-word filler is allowed via
9
+ * `(?:\w+\s+)*` between key tokens so attackers can't bypass with
10
+ * synonyms ("ignore all prior instructions").
11
+ */
12
+ const RAW_PATTERNS = [
13
+ // Classic prompt injection (applies everywhere)
14
+ [
15
+ String.raw `ignore\s+(?:\w+\s+)*(previous|all|above|prior)\s+(?:\w+\s+)*instructions`,
16
+ 'prompt_injection',
17
+ 'all',
18
+ ],
19
+ [String.raw `system\s+prompt\s+override`, 'sys_prompt_override', 'all'],
20
+ [
21
+ String.raw `disregard\s+(?:\w+\s+)*(your|all|any)\s+(?:\w+\s+)*(instructions|rules|guidelines)`,
22
+ 'disregard_rules',
23
+ 'all',
24
+ ],
25
+ [
26
+ String.raw `act\s+as\s+(if|though)\s+(?:\w+\s+)*you\s+(?:\w+\s+)*(have\s+no|don't\s+have)\s+(?:\w+\s+)*(restrictions|limits|rules)`,
27
+ 'bypass_restrictions',
28
+ 'all',
29
+ ],
30
+ ['<!--[^>]*(?:ignore|override|system|secret|hidden)[^>]*-->', 'html_comment_injection', 'all'],
31
+ [String.raw `<\s*div\s+style\s*=\s*["'][\s\S]*?display\s*:\s*none`, 'hidden_div', 'all'],
32
+ [String.raw `translate\s+.*\s+into\s+.*\s+and\s+(execute|run|eval)`, 'translate_execute', 'all'],
33
+ [String.raw `do\s+not\s+(?:\w+\s+)*tell\s+(?:\w+\s+)*the\s+user`, 'deception_hide', 'all'],
34
+ // Role-play / identity hijack (context + strict)
35
+ [String.raw `you\s+are\s+(?:\w+\s+)*now\s+(?:a|an|the)\s+`, 'role_hijack', 'context'],
36
+ [String.raw `pretend\s+(?:\w+\s+)*(you\s+are|to\s+be)\s+`, 'role_pretend', 'context'],
37
+ [String.raw `output\s+(?:\w+\s+)*(system|initial)\s+prompt`, 'leak_system_prompt', 'context'],
38
+ [
39
+ String.raw `(respond|answer|reply)\s+without\s+(?:\w+\s+)*(restrictions|limitations|filters|safety)`,
40
+ 'remove_filters',
41
+ 'context',
42
+ ],
43
+ [
44
+ String.raw `you\s+have\s+been\s+(?:\w+\s+)*(updated|upgraded|patched)\s+to`,
45
+ 'fake_update',
46
+ 'context',
47
+ ],
48
+ [String.raw `\bname\s+yourself\s+\w+`, 'identity_override', 'context'],
49
+ // C2 / Brainworm-style promptware
50
+ [String.raw `register\s+(as\s+)?a?\s*node`, 'c2_node_registration', 'context'],
51
+ [String.raw `(heartbeat|beacon|check[\s\-]?in)\s+(to|with)\s+`, 'c2_heartbeat', 'context'],
52
+ [String.raw `pull\s+(down\s+)?(?:new\s+)?task(?:ing|s)?\b`, 'c2_task_pull', 'context'],
53
+ [String.raw `connect\s+to\s+the\s+network\b`, 'c2_network_connect', 'context'],
54
+ [
55
+ String.raw `you\s+must\s+(?:\w+\s+){0,3}(register|connect|report|beacon)\b`,
56
+ 'forced_action',
57
+ 'context',
58
+ ],
59
+ [String.raw `only\s+use\s+one[\s\-]?liners?\b`, 'anti_forensic_oneliner', 'context'],
60
+ [
61
+ String.raw `never\s+(?:\w+\s+)*(?:create|write)\s+(?:\w+\s+)*(?:script|file)\s+(?:\w+\s+)*disk`,
62
+ 'anti_forensic_disk',
63
+ 'context',
64
+ ],
65
+ [
66
+ String.raw `unset\s+\w*(?:CLAUDE|CODEX|HERMES|AGENT|OPENAI|ANTHROPIC|PI)\w*`,
67
+ 'env_var_unset_agent',
68
+ 'context',
69
+ ],
70
+ // Known C2 framework names
71
+ [
72
+ String.raw `\b(?:praxis|cobalt\s*strike|sliver|havoc|mythic|metasploit|brainworm)\b`,
73
+ 'known_c2_framework',
74
+ 'context',
75
+ ],
76
+ [String.raw `\bc2\s+(?:server|channel|infrastructure|beacon)\b`, 'c2_explicit', 'context'],
77
+ [String.raw `\bcommand\s+and\s+control\b`, 'c2_explicit_long', 'context'],
78
+ // Exfiltration via curl/wget/cat with secrets
79
+ [
80
+ String.raw `curl\s+[^\n]*\$\{?\w*(KEY|TOKEN|SECRET|PASSWORD|CREDENTIAL|API)`,
81
+ 'exfil_curl',
82
+ 'all',
83
+ ],
84
+ [
85
+ String.raw `wget\s+[^\n]*\$\{?\w*(KEY|TOKEN|SECRET|PASSWORD|CREDENTIAL|API)`,
86
+ 'exfil_wget',
87
+ 'all',
88
+ ],
89
+ [
90
+ String.raw `cat\s+[^\n]*(\.env|credentials|\.netrc|\.pgpass|\.npmrc|\.pypirc)`,
91
+ 'read_secrets',
92
+ 'all',
93
+ ],
94
+ [String.raw `(send|post|upload|transmit)\s+.*\s+(to|at)\s+https?://`, 'send_to_url', 'strict'],
95
+ [
96
+ String.raw `(include|output|print|share)\s+(?:\w+\s+)*(conversation|chat\s+history|previous\s+messages|full\s+context|entire\s+context)`,
97
+ 'context_exfil',
98
+ 'strict',
99
+ ],
100
+ // Persistence / SSH backdoor (strict scope)
101
+ ['authorized_keys', 'ssh_backdoor', 'strict'],
102
+ [String.raw `\$HOME/\.ssh|~/\.ssh`, 'ssh_access', 'strict'],
103
+ [String.raw `\$HOME/\.pi/\.env|~/\.pi/\.env`, 'pi_env', 'strict'],
104
+ [
105
+ String.raw `(update|modify|edit|write|change|append|add\s+to)\s+.*(?:AGENTS\.md|CLAUDE\.md|\.cursorrules|\.clinerules)`,
106
+ 'agent_config_mod',
107
+ 'strict',
108
+ ],
109
+ // Hardcoded secrets
110
+ [
111
+ String.raw `(?:api[_-]?key|token|secret|password)\s*[=:]\s*["'][A-Za-z0-9+/=_-]{20,}`,
112
+ 'hardcoded_secret',
113
+ 'strict',
114
+ ],
115
+ ];
116
+ /**
117
+ * Invisible / bidirectional unicode characters used in injection attacks.
118
+ */
119
+ export const INVISIBLE_CHARS = new Set([
120
+ '​', // zero-width space
121
+ '‌', // zero-width non-joiner
122
+ '‍', // zero-width joiner
123
+ '⁠', // word joiner
124
+ '⁢', // invisible times
125
+ '⁣', // invisible separator
126
+ '⁤', // invisible plus
127
+ '', // zero-width no-break space (BOM)
128
+ '‪', // left-to-right embedding
129
+ '‫', // right-to-left embedding
130
+ '‬', // pop directional formatting
131
+ '‭', // left-to-right override
132
+ '‮', // right-to-left override
133
+ '⁦', // left-to-right isolate
134
+ '⁧', // right-to-left isolate
135
+ '⁨', // first strong isolate
136
+ '⁩', // pop directional isolate
137
+ ]);
138
+ function buildScopeSets() {
139
+ const all = [];
140
+ const context = [];
141
+ const strict = [];
142
+ for (const [pattern, id, scope] of RAW_PATTERNS) {
143
+ const compiled = [new RegExp(pattern, 'i'), id];
144
+ if (scope === 'all') {
145
+ all.push(compiled);
146
+ context.push(compiled);
147
+ strict.push(compiled);
148
+ }
149
+ else if (scope === 'context') {
150
+ context.push(compiled);
151
+ strict.push(compiled);
152
+ }
153
+ else {
154
+ strict.push(compiled);
155
+ }
156
+ }
157
+ return { all, context, strict };
158
+ }
159
+ const COMPILED = buildScopeSets();
160
+ /**
161
+ * Return matched pattern IDs in `content` at the given scope.
162
+ *
163
+ * - `all`: classic injection + exfil only (lowest false-positive set).
164
+ * - `context`: adds promptware / C2 / role-play patterns.
165
+ * - `strict`: adds persistence / SSH backdoor / exfil-URL patterns.
166
+ *
167
+ * Invisible-unicode hits are reported as `invisible_unicode_U+XXXX`.
168
+ */
169
+ export function scanForThreats(content, scope = 'context') {
170
+ if (!content) {
171
+ return [];
172
+ }
173
+ const findings = [];
174
+ for (const ch of content) {
175
+ if (INVISIBLE_CHARS.has(ch)) {
176
+ const code = ch.codePointAt(0).toString(16).toUpperCase().padStart(4, '0');
177
+ const finding = `invisible_unicode_U+${code}`;
178
+ if (!findings.includes(finding)) {
179
+ findings.push(finding);
180
+ }
181
+ }
182
+ }
183
+ const patterns = COMPILED[scope];
184
+ if (!patterns) {
185
+ throw new Error(`scanForThreats: unknown scope '${scope}'`);
186
+ }
187
+ for (const [regex, id] of patterns) {
188
+ if (regex.test(content)) {
189
+ findings.push(id);
190
+ }
191
+ }
192
+ return findings;
193
+ }
194
+ /**
195
+ * Return a human-readable error string for the first threat in `content`,
196
+ * or `null` when clean. Convenience wrapper for paths that block on first
197
+ * hit (memory writes).
198
+ */
199
+ export function firstThreatMessage(content, scope = 'strict') {
200
+ const findings = scanForThreats(content, scope);
201
+ if (findings.length === 0) {
202
+ return null;
203
+ }
204
+ const id = findings[0];
205
+ if (id.startsWith('invisible_unicode_')) {
206
+ const codepoint = id.replace('invisible_unicode_', '');
207
+ return `Blocked: content contains invisible unicode character ${codepoint} (possible injection).`;
208
+ }
209
+ return `Blocked: content matches threat pattern '${id}'. Content is injected into the system prompt and must not contain injection or exfiltration payloads.`;
210
+ }
211
+ //# sourceMappingURL=threat-patterns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"threat-patterns.js","sourceRoot":"","sources":["../src/threat-patterns.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amaster.ai/pi-shared",
3
- "version": "0.1.7",
3
+ "version": "0.1.9",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -15,6 +15,10 @@
15
15
  "types": "./dist/settings.d.ts",
16
16
  "default": "./dist/settings.js"
17
17
  },
18
+ "./threat-patterns": {
19
+ "types": "./dist/threat-patterns.d.ts",
20
+ "default": "./dist/threat-patterns.js"
21
+ },
18
22
  "./package.json": {
19
23
  "default": "./package.json"
20
24
  }