@mandatez/sdk 0.1.1 → 0.1.8

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 (62) hide show
  1. package/README.md +193 -95
  2. package/dist/attestations/index.d.ts +50 -0
  3. package/dist/attestations/index.d.ts.map +1 -0
  4. package/dist/attestations/index.js +30 -0
  5. package/dist/attestations/index.js.map +1 -0
  6. package/dist/client.d.ts +183 -0
  7. package/dist/client.d.ts.map +1 -1
  8. package/dist/client.js +256 -3
  9. package/dist/client.js.map +1 -1
  10. package/dist/exporters/datadog.d.ts +34 -0
  11. package/dist/exporters/datadog.d.ts.map +1 -0
  12. package/dist/exporters/datadog.js +69 -0
  13. package/dist/exporters/datadog.js.map +1 -0
  14. package/dist/exporters/index.d.ts +26 -0
  15. package/dist/exporters/index.d.ts.map +1 -0
  16. package/dist/exporters/index.js +5 -0
  17. package/dist/exporters/index.js.map +1 -0
  18. package/dist/exporters/otel.d.ts +38 -0
  19. package/dist/exporters/otel.d.ts.map +1 -0
  20. package/dist/exporters/otel.js +115 -0
  21. package/dist/exporters/otel.js.map +1 -0
  22. package/dist/exporters/splunk.d.ts +33 -0
  23. package/dist/exporters/splunk.d.ts.map +1 -0
  24. package/dist/exporters/splunk.js +62 -0
  25. package/dist/exporters/splunk.js.map +1 -0
  26. package/dist/exporters/webhook.d.ts +33 -0
  27. package/dist/exporters/webhook.d.ts.map +1 -0
  28. package/dist/exporters/webhook.js +52 -0
  29. package/dist/exporters/webhook.js.map +1 -0
  30. package/dist/identity/hibp.d.ts +39 -0
  31. package/dist/identity/hibp.d.ts.map +1 -0
  32. package/dist/identity/hibp.js +85 -0
  33. package/dist/identity/hibp.js.map +1 -0
  34. package/dist/index.d.ts +16 -1
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +8 -0
  37. package/dist/index.js.map +1 -1
  38. package/dist/integrations/langchain/decorator.d.ts +31 -0
  39. package/dist/integrations/langchain/decorator.d.ts.map +1 -0
  40. package/dist/integrations/langchain/decorator.js +36 -0
  41. package/dist/integrations/langchain/decorator.js.map +1 -0
  42. package/dist/policies/templates.d.ts +223 -0
  43. package/dist/policies/templates.d.ts.map +1 -0
  44. package/dist/policies/templates.js +102 -0
  45. package/dist/policies/templates.js.map +1 -0
  46. package/dist/risk/index.d.ts +58 -0
  47. package/dist/risk/index.d.ts.map +1 -0
  48. package/dist/risk/index.js +45 -0
  49. package/dist/risk/index.js.map +1 -0
  50. package/dist/transport/supabase.d.ts +29 -0
  51. package/dist/transport/supabase.d.ts.map +1 -1
  52. package/dist/transport/supabase.js +81 -0
  53. package/dist/transport/supabase.js.map +1 -1
  54. package/dist/trust/posture.d.ts +24 -0
  55. package/dist/trust/posture.d.ts.map +1 -0
  56. package/dist/trust/posture.js +79 -0
  57. package/dist/trust/posture.js.map +1 -0
  58. package/dist/wrapper/index.d.ts +26 -0
  59. package/dist/wrapper/index.d.ts.map +1 -0
  60. package/dist/wrapper/index.js +162 -0
  61. package/dist/wrapper/index.js.map +1 -0
  62. package/package.json +8 -8
@@ -0,0 +1,33 @@
1
+ import type { AgentEvent } from '../events/schema.js';
2
+ import type { EventExporter } from './index.js';
3
+ export interface SplunkExporterConfig {
4
+ /**
5
+ * Base URL of your Splunk HTTP Event Collector, without the
6
+ * /services/collector path. Example: https://splunk.acme.com:8088
7
+ */
8
+ hecUrl: string;
9
+ /** HEC token, sent as `Authorization: Splunk <token>`. */
10
+ token: string;
11
+ /** Splunk source field — defaults to 'mandatez'. */
12
+ source?: string;
13
+ /** Splunk sourcetype — defaults to 'mandatez:event'. */
14
+ sourcetype?: string;
15
+ /** Splunk index — defaults to 'main'. */
16
+ index?: string;
17
+ }
18
+ /**
19
+ * Ships MandateZ AgentEvents to Splunk via HTTP Event Collector.
20
+ *
21
+ * @see https://docs.splunk.com/Documentation/Splunk/latest/Data/UsetheHTTPEventCollector
22
+ */
23
+ export declare class SplunkExporter implements EventExporter {
24
+ readonly name = "splunk";
25
+ private readonly endpoint;
26
+ private readonly token;
27
+ private readonly source;
28
+ private readonly sourcetype;
29
+ private readonly index;
30
+ constructor(config: SplunkExporterConfig);
31
+ export(event: AgentEvent): Promise<void>;
32
+ }
33
+ //# sourceMappingURL=splunk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"splunk.d.ts","sourceRoot":"","sources":["../../src/exporters/splunk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,qBAAa,cAAe,YAAW,aAAa;IAClD,QAAQ,CAAC,IAAI,YAAY;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBAEnB,MAAM,EAAE,oBAAoB;IAelC,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAoC/C"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Ships MandateZ AgentEvents to Splunk via HTTP Event Collector.
3
+ *
4
+ * @see https://docs.splunk.com/Documentation/Splunk/latest/Data/UsetheHTTPEventCollector
5
+ */
6
+ export class SplunkExporter {
7
+ name = 'splunk';
8
+ endpoint;
9
+ token;
10
+ source;
11
+ sourcetype;
12
+ index;
13
+ constructor(config) {
14
+ if (!config.hecUrl) {
15
+ throw new Error('SplunkExporter: hecUrl is required');
16
+ }
17
+ if (!config.token) {
18
+ throw new Error('SplunkExporter: token is required');
19
+ }
20
+ const base = config.hecUrl.replace(/\/+$/, '');
21
+ this.endpoint = `${base}/services/collector/event`;
22
+ this.token = config.token;
23
+ this.source = config.source ?? 'mandatez';
24
+ this.sourcetype = config.sourcetype ?? 'mandatez:event';
25
+ this.index = config.index ?? 'main';
26
+ }
27
+ async export(event) {
28
+ const payload = {
29
+ time: Math.floor(new Date(event.timestamp).getTime() / 1000),
30
+ host: 'mandatez-sdk',
31
+ source: this.source,
32
+ sourcetype: this.sourcetype,
33
+ index: this.index,
34
+ event: {
35
+ event_id: event.event_id,
36
+ agent_id: event.agent_id,
37
+ owner_id: event.owner_id,
38
+ timestamp: event.timestamp,
39
+ action_type: event.action_type,
40
+ resource: event.resource,
41
+ outcome: event.outcome,
42
+ policy_id: event.policy_id,
43
+ signature: event.signature,
44
+ public_key: event.public_key,
45
+ metadata: event.metadata,
46
+ },
47
+ };
48
+ const res = await fetch(this.endpoint, {
49
+ method: 'POST',
50
+ headers: {
51
+ 'Content-Type': 'application/json',
52
+ Authorization: `Splunk ${this.token}`,
53
+ },
54
+ body: JSON.stringify(payload),
55
+ });
56
+ if (!res.ok) {
57
+ const body = await res.text().catch(() => '');
58
+ throw new Error(`SplunkExporter: HTTP ${res.status} ${body.slice(0, 200)}`);
59
+ }
60
+ }
61
+ }
62
+ //# sourceMappingURL=splunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"splunk.js","sourceRoot":"","sources":["../../src/exporters/splunk.ts"],"names":[],"mappings":"AAmBA;;;;GAIG;AACH,MAAM,OAAO,cAAc;IAChB,IAAI,GAAG,QAAQ,CAAC;IACR,QAAQ,CAAS;IACjB,KAAK,CAAS;IACd,MAAM,CAAS;IACf,UAAU,CAAS;IACnB,KAAK,CAAS;IAE/B,YAAY,MAA4B;QACtC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ,GAAG,GAAG,IAAI,2BAA2B,CAAC;QACnD,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,UAAU,CAAC;QAC1C,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,gBAAgB,CAAC;QACxD,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAiB;QAC5B,MAAM,OAAO,GAAG;YACd,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;YAC5D,IAAI,EAAE,cAAc;YACpB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE;gBACL,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ;aACzB;SACF,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE;YACrC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE;aACtC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAC9B,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,33 @@
1
+ import type { AgentEvent } from '../events/schema.js';
2
+ import type { EventExporter } from './index.js';
3
+ export interface WebhookExporterConfig {
4
+ /** Destination URL. Must be HTTPS in production. */
5
+ url: string;
6
+ /**
7
+ * Optional shared-secret header. Sent as `Authorization: Bearer <secret>`.
8
+ * Use this to authenticate the webhook on the receiver side.
9
+ */
10
+ secret?: string;
11
+ /** Extra headers merged into every request. */
12
+ headers?: Record<string, string>;
13
+ /** Request timeout in milliseconds. Defaults to 5000. */
14
+ timeoutMs?: number;
15
+ }
16
+ /**
17
+ * Generic POST-an-AgentEvent-to-a-URL exporter. Handy for wiring
18
+ * MandateZ into any SIEM, log pipeline, or internal webhook queue
19
+ * that can accept JSON over HTTPS.
20
+ *
21
+ * Payload shape is the full AgentEvent — never modify or rename
22
+ * fields, this is the canonical cross-vendor envelope.
23
+ */
24
+ export declare class WebhookExporter implements EventExporter {
25
+ readonly name = "webhook";
26
+ private readonly url;
27
+ private readonly secret?;
28
+ private readonly headers;
29
+ private readonly timeoutMs;
30
+ constructor(config: WebhookExporterConfig);
31
+ export(event: AgentEvent): Promise<void>;
32
+ }
33
+ //# sourceMappingURL=webhook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../src/exporters/webhook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,WAAW,qBAAqB;IACpC,oDAAoD;IACpD,GAAG,EAAE,MAAM,CAAC;IACZ;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,qBAAa,eAAgB,YAAW,aAAa;IACnD,QAAQ,CAAC,IAAI,aAAa;IAC1B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,MAAM,EAAE,qBAAqB;IAUnC,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CA6B/C"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Generic POST-an-AgentEvent-to-a-URL exporter. Handy for wiring
3
+ * MandateZ into any SIEM, log pipeline, or internal webhook queue
4
+ * that can accept JSON over HTTPS.
5
+ *
6
+ * Payload shape is the full AgentEvent — never modify or rename
7
+ * fields, this is the canonical cross-vendor envelope.
8
+ */
9
+ export class WebhookExporter {
10
+ name = 'webhook';
11
+ url;
12
+ secret;
13
+ headers;
14
+ timeoutMs;
15
+ constructor(config) {
16
+ if (!config.url) {
17
+ throw new Error('WebhookExporter: url is required');
18
+ }
19
+ this.url = config.url;
20
+ this.secret = config.secret;
21
+ this.headers = config.headers ?? {};
22
+ this.timeoutMs = config.timeoutMs ?? 5000;
23
+ }
24
+ async export(event) {
25
+ const controller = new AbortController();
26
+ const timer = setTimeout(() => controller.abort(), this.timeoutMs);
27
+ const headers = {
28
+ 'Content-Type': 'application/json',
29
+ 'User-Agent': 'mandatez-sdk/webhook-exporter',
30
+ ...this.headers,
31
+ };
32
+ if (this.secret) {
33
+ headers.Authorization = `Bearer ${this.secret}`;
34
+ }
35
+ try {
36
+ const res = await fetch(this.url, {
37
+ method: 'POST',
38
+ headers,
39
+ body: JSON.stringify(event),
40
+ signal: controller.signal,
41
+ });
42
+ if (!res.ok) {
43
+ const body = await res.text().catch(() => '');
44
+ throw new Error(`WebhookExporter: HTTP ${res.status} ${body.slice(0, 200)}`);
45
+ }
46
+ }
47
+ finally {
48
+ clearTimeout(timer);
49
+ }
50
+ }
51
+ }
52
+ //# sourceMappingURL=webhook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../src/exporters/webhook.ts"],"names":[],"mappings":"AAiBA;;;;;;;GAOG;AACH,MAAM,OAAO,eAAe;IACjB,IAAI,GAAG,SAAS,CAAC;IACT,GAAG,CAAS;IACZ,MAAM,CAAU;IAChB,OAAO,CAAyB;IAChC,SAAS,CAAS;IAEnC,YAAY,MAA6B;QACvC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;QACpC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAiB;QAC5B,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAEnE,MAAM,OAAO,GAA2B;YACtC,cAAc,EAAE,kBAAkB;YAClC,YAAY,EAAE,+BAA+B;YAC7C,GAAG,IAAI,CAAC,OAAO;SAChB,CAAC;QACF,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,CAAC,aAAa,GAAG,UAAU,IAAI,CAAC,MAAM,EAAE,CAAC;QAClD,CAAC;QAED,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;gBAChC,MAAM,EAAE,MAAM;gBACd,OAAO;gBACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;gBAC3B,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC9C,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAC/E,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * HaveIBeenPwned v3 API wrapper for Identity Intelligence.
3
+ *
4
+ * Checks whether an email has appeared in known data breaches,
5
+ * then converts the breach list into a numeric risk score + status.
6
+ *
7
+ * API docs: https://haveibeenpwned.com/API/v3
8
+ */
9
+ export type IdentityStatus = 'clean' | 'flagged' | 'blocked';
10
+ export interface HibpBreach {
11
+ name: string;
12
+ /** ISO date string (YYYY-MM-DD) when the breach occurred */
13
+ date: string;
14
+ /** HIBP marks some breaches as "sensitive" — e.g. leaked dating sites */
15
+ sensitive: boolean;
16
+ }
17
+ export interface IdentityCheckResult {
18
+ status: IdentityStatus;
19
+ risk_score: 0 | 1 | 2 | 3;
20
+ breach_count: number;
21
+ breaches: HibpBreach[];
22
+ }
23
+ /**
24
+ * Calls HIBP and returns a normalized risk result.
25
+ *
26
+ * Risk scoring:
27
+ * - 0 breaches → score 0, status 'clean'
28
+ * - 1 breach, all >1yr old → score 1, status 'clean'
29
+ * - 1-2 recent breaches → score 2, status 'flagged'
30
+ * - 3+ breaches OR any → score 3, status 'blocked'
31
+ * sensitive breach
32
+ */
33
+ export declare function checkIdentity(email: string, apiKey: string): Promise<IdentityCheckResult>;
34
+ /**
35
+ * Pure function — given a list of breaches, compute risk_score + status.
36
+ * Exported so callers can re-score cached breach lists without re-hitting HIBP.
37
+ */
38
+ export declare function scoreBreaches(breaches: HibpBreach[]): IdentityCheckResult;
39
+ //# sourceMappingURL=hibp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hibp.d.ts","sourceRoot":"","sources":["../../src/identity/hibp.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;AAE7D,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,UAAU,EAAE,CAAC;CACxB;AAYD;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,mBAAmB,CAAC,CA8C9B;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,mBAAmB,CAyBzE"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * HaveIBeenPwned v3 API wrapper for Identity Intelligence.
3
+ *
4
+ * Checks whether an email has appeared in known data breaches,
5
+ * then converts the breach list into a numeric risk score + status.
6
+ *
7
+ * API docs: https://haveibeenpwned.com/API/v3
8
+ */
9
+ const HIBP_API_BASE = 'https://haveibeenpwned.com/api/v3';
10
+ const ONE_YEAR_MS = 365 * 24 * 60 * 60 * 1000;
11
+ /**
12
+ * Calls HIBP and returns a normalized risk result.
13
+ *
14
+ * Risk scoring:
15
+ * - 0 breaches → score 0, status 'clean'
16
+ * - 1 breach, all >1yr old → score 1, status 'clean'
17
+ * - 1-2 recent breaches → score 2, status 'flagged'
18
+ * - 3+ breaches OR any → score 3, status 'blocked'
19
+ * sensitive breach
20
+ */
21
+ export async function checkIdentity(email, apiKey) {
22
+ if (!email || !email.includes('@')) {
23
+ throw new Error('checkIdentity: invalid email');
24
+ }
25
+ if (!apiKey) {
26
+ throw new Error('checkIdentity: HIBP API key is required');
27
+ }
28
+ const url = `${HIBP_API_BASE}/breachedaccount/${encodeURIComponent(email)}?truncateResponse=false`;
29
+ const response = await fetch(url, {
30
+ headers: {
31
+ 'hibp-api-key': apiKey,
32
+ 'user-agent': 'MandateZ-IdentityIntelligence',
33
+ accept: 'application/json',
34
+ },
35
+ });
36
+ // 404 = clean (HIBP returns 404 when the account is not in any breach)
37
+ if (response.status === 404) {
38
+ return { status: 'clean', risk_score: 0, breach_count: 0, breaches: [] };
39
+ }
40
+ if (response.status === 401 || response.status === 403) {
41
+ throw new Error('HIBP API key is invalid or missing required entitlements');
42
+ }
43
+ if (response.status === 429) {
44
+ throw new Error('HIBP rate limit exceeded — back off and retry');
45
+ }
46
+ if (!response.ok) {
47
+ throw new Error(`HIBP API error: ${response.status} ${response.statusText}`);
48
+ }
49
+ const raw = (await response.json());
50
+ const breaches = raw
51
+ .filter((b) => !b.IsFabricated && !b.IsRetired)
52
+ .map((b) => ({
53
+ name: b.Title ?? b.Name,
54
+ date: b.BreachDate,
55
+ sensitive: Boolean(b.IsSensitive),
56
+ }));
57
+ return scoreBreaches(breaches);
58
+ }
59
+ /**
60
+ * Pure function — given a list of breaches, compute risk_score + status.
61
+ * Exported so callers can re-score cached breach lists without re-hitting HIBP.
62
+ */
63
+ export function scoreBreaches(breaches) {
64
+ const count = breaches.length;
65
+ if (count === 0) {
66
+ return { status: 'clean', risk_score: 0, breach_count: 0, breaches: [] };
67
+ }
68
+ const hasSensitive = breaches.some((b) => b.sensitive);
69
+ if (hasSensitive || count >= 3) {
70
+ return { status: 'blocked', risk_score: 3, breach_count: count, breaches };
71
+ }
72
+ const now = Date.now();
73
+ const recentBreaches = breaches.filter((b) => {
74
+ const breachTime = new Date(b.date).getTime();
75
+ if (Number.isNaN(breachTime))
76
+ return true; // unknown date → treat as recent
77
+ return now - breachTime < ONE_YEAR_MS;
78
+ });
79
+ if (count === 1 && recentBreaches.length === 0) {
80
+ return { status: 'clean', risk_score: 1, breach_count: 1, breaches };
81
+ }
82
+ // 1-2 recent breaches
83
+ return { status: 'flagged', risk_score: 2, breach_count: count, breaches };
84
+ }
85
+ //# sourceMappingURL=hibp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hibp.js","sourceRoot":"","sources":["../../src/identity/hibp.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -8,10 +8,25 @@ export type { SupabaseTransportConfig } from './transport/index.js';
8
8
  export { PolicyEngine } from './policy/index.js';
9
9
  export { PolicyRuleSchema, PolicySchema } from './policy/index.js';
10
10
  export type { PolicyRule, Policy, PolicyOutcome, PolicyEvaluation } from './policy/index.js';
11
+ export { POLICY_TEMPLATES, POLICY_TEMPLATE_LIST, findTemplate } from './policies/templates.js';
12
+ export type { PolicyTemplate, PolicyTemplateKey } from './policies/templates.js';
11
13
  export { OversightGate, SlackAlertChannel, WebhookAlertChannel } from './oversight/index.js';
12
14
  export type { OversightConfig, OversightResult, AlertChannel, OversightAlert, TimeoutAction, ApprovalDecision } from './oversight/index.js';
13
15
  export { MandateZClient } from './client.js';
14
- export type { MandateZClientConfig, TrackInput } from './client.js';
16
+ export type { MandateZClientConfig, TrackInput, TrackBatchInput, TrackBatchResult, BatchConfig, CheckIdentityInput, CheckIdentityOutput, VerifyAgentInput, VerifyAgentOutput, VerifyAgentRawResponse, AgentTrustGrade, } from './client.js';
17
+ export { checkIdentity, scoreBreaches } from './identity/hibp.js';
18
+ export type { IdentityCheckResult, IdentityStatus, HibpBreach } from './identity/hibp.js';
19
+ export { computeTrustScore } from './trust/posture.js';
20
+ export type { AgentTrustProfile } from './trust/posture.js';
21
+ export { getRiskScore, computeRiskScore } from './risk/index.js';
22
+ export type { RiskScoreRecord, RiskGrade, RiskDomain, RiskActionType, RiskSeverityBucket, RiskIncidentPatterns, RiskClientConfig, } from './risk/index.js';
15
23
  export { MandateZN8nHook } from './integrations/n8n/index.js';
16
24
  export { MandateZLangChainCallback } from './integrations/langchain/index.js';
25
+ export { MandateZAgent } from './wrapper/index.js';
26
+ export type { MandateZAgentConfig } from './wrapper/index.js';
27
+ export { withMandateZ } from './integrations/langchain/decorator.js';
28
+ export { verifyAttestation } from './attestations/index.js';
29
+ export type { AttestationRecord, AttestationViolation, Verdict, VerifyAttestationResponse, VerifyAttestationOptions, } from './attestations/index.js';
30
+ export { DatadogExporter, SplunkExporter, WebhookExporter, OpenTelemetryExporter, } from './exporters/index.js';
31
+ export type { EventExporter, DatadogExporterConfig, SplunkExporterConfig, WebhookExporterConfig, OpenTelemetryExporterConfig, } from './exporters/index.js';
17
32
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC5E,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACnE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE7F,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC7F,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE5I,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC5E,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACnE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE7F,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC/F,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjF,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC7F,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE5I,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EACV,oBAAoB,EACpB,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAClE,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE1F,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACjE,YAAY,EACV,eAAe,EACf,SAAS,EACT,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAE9E,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAErE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,YAAY,EACV,iBAAiB,EACjB,oBAAoB,EACpB,OAAO,EACP,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,eAAe,EACf,cAAc,EACd,eAAe,EACf,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,sBAAsB,CAAC"}
package/dist/index.js CHANGED
@@ -6,8 +6,16 @@ export { createSignedEvent, verifyEvent } from './events/index.js';
6
6
  export { SupabaseTransport } from './transport/index.js';
7
7
  export { PolicyEngine } from './policy/index.js';
8
8
  export { PolicyRuleSchema, PolicySchema } from './policy/index.js';
9
+ export { POLICY_TEMPLATES, POLICY_TEMPLATE_LIST, findTemplate } from './policies/templates.js';
9
10
  export { OversightGate, SlackAlertChannel, WebhookAlertChannel } from './oversight/index.js';
10
11
  export { MandateZClient } from './client.js';
12
+ export { checkIdentity, scoreBreaches } from './identity/hibp.js';
13
+ export { computeTrustScore } from './trust/posture.js';
14
+ export { getRiskScore, computeRiskScore } from './risk/index.js';
11
15
  export { MandateZN8nHook } from './integrations/n8n/index.js';
12
16
  export { MandateZLangChainCallback } from './integrations/langchain/index.js';
17
+ export { MandateZAgent } from './wrapper/index.js';
18
+ export { withMandateZ } from './integrations/langchain/decorator.js';
19
+ export { verifyAttestation } from './attestations/index.js';
20
+ export { DatadogExporter, SplunkExporter, WebhookExporter, OpenTelemetryExporter, } from './exporters/index.js';
13
21
  //# 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":"AAAA,2CAA2C;AAC3C,+BAA+B;AAE/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAG5D,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE5E,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGzD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGnE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAG7F,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,+BAA+B;AAE/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAG5D,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE5E,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGzD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGnE,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAG/F,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAG7F,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAe7C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGlE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAWjE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAE9E,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAErE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAS5D,OAAO,EACL,eAAe,EACf,cAAc,EACd,eAAe,EACf,qBAAqB,GACtB,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,31 @@
1
+ import type { MandateZAgentConfig } from '../../wrapper/index.js';
2
+ /**
3
+ * Minimal structural type for a LangChain runnable.
4
+ * We don't depend on @langchain/core — anything with invoke/stream works.
5
+ */
6
+ interface LangChainRunnable {
7
+ invoke?: (...args: unknown[]) => unknown;
8
+ stream?: (...args: unknown[]) => unknown;
9
+ batch?: (...args: unknown[]) => unknown;
10
+ [key: string]: unknown;
11
+ }
12
+ /**
13
+ * Wrap a LangChain runnable (chain, agent, LLM, tool) with MandateZ governance.
14
+ *
15
+ * Transparently wraps .invoke(), .stream(), and .batch() if present, leaving
16
+ * all other methods untouched. Each invocation emits a signed AgentEvent.
17
+ *
18
+ * @example
19
+ * const chain = new ChatOpenAI();
20
+ * const governed = withMandateZ(chain, {
21
+ * agentId: 'ag_...',
22
+ * ownerId: 'owner_1',
23
+ * privateKey: process.env.AGENT_PRIVATE_KEY!,
24
+ * supabaseUrl: process.env.SUPABASE_URL!,
25
+ * supabaseAnonKey: process.env.SUPABASE_ANON_KEY!,
26
+ * });
27
+ * await governed.invoke({ input: 'hello' });
28
+ */
29
+ export declare function withMandateZ<T extends LangChainRunnable>(chain: T, config: MandateZAgentConfig): T;
30
+ export {};
31
+ //# sourceMappingURL=decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorator.d.ts","sourceRoot":"","sources":["../../../src/integrations/langchain/decorator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAElE;;;GAGG;AACH,UAAU,iBAAiB;IACzB,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;IACzC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;IACzC,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;IACxC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,iBAAiB,EACtD,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,mBAAmB,GAC1B,CAAC,CAsBH"}
@@ -0,0 +1,36 @@
1
+ import { MandateZAgent } from '../../wrapper/index.js';
2
+ /**
3
+ * Wrap a LangChain runnable (chain, agent, LLM, tool) with MandateZ governance.
4
+ *
5
+ * Transparently wraps .invoke(), .stream(), and .batch() if present, leaving
6
+ * all other methods untouched. Each invocation emits a signed AgentEvent.
7
+ *
8
+ * @example
9
+ * const chain = new ChatOpenAI();
10
+ * const governed = withMandateZ(chain, {
11
+ * agentId: 'ag_...',
12
+ * ownerId: 'owner_1',
13
+ * privateKey: process.env.AGENT_PRIVATE_KEY!,
14
+ * supabaseUrl: process.env.SUPABASE_URL!,
15
+ * supabaseAnonKey: process.env.SUPABASE_ANON_KEY!,
16
+ * });
17
+ * await governed.invoke({ input: 'hello' });
18
+ */
19
+ export function withMandateZ(chain, config) {
20
+ const baseName = config.name ?? (chain.constructor?.name ?? 'langchain/runnable');
21
+ const handler = {
22
+ get(target, prop, receiver) {
23
+ const value = Reflect.get(target, prop, receiver);
24
+ if (prop === 'invoke' || prop === 'stream' || prop === 'batch') {
25
+ if (typeof value !== 'function')
26
+ return value;
27
+ const method = value.bind(target);
28
+ const wrapped = MandateZAgent(async (...args) => method(...args), { ...config, name: `${baseName}/${String(prop)}` });
29
+ return wrapped;
30
+ }
31
+ return value;
32
+ },
33
+ };
34
+ return new Proxy(chain, handler);
35
+ }
36
+ //# sourceMappingURL=decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorator.js","sourceRoot":"","sources":["../../../src/integrations/langchain/decorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAcvD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,YAAY,CAC1B,KAAQ,EACR,MAA2B;IAE3B,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,IAAI,oBAAoB,CAAC,CAAC;IAClF,MAAM,OAAO,GAAoB;QAC/B,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ;YACxB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAElD,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC/D,IAAI,OAAO,KAAK,KAAK,UAAU;oBAAE,OAAO,KAAK,CAAC;gBAE9C,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAoC,CAAC;gBACrE,MAAM,OAAO,GAAG,aAAa,CAC3B,KAAK,EAAE,GAAG,IAAe,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,EAC7C,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,CACnD,CAAC;gBACF,OAAO,OAAO,CAAC;YACjB,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;KACF,CAAC;IAEF,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACnC,CAAC"}