@mandaitor/sdk 0.1.1

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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025-2026 Mandaitor
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,101 @@
1
+ # @mandaitor/sdk
2
+
3
+ TypeScript SDK for the Mandaitor Delegation Mandate Registry API.
4
+
5
+ ---
6
+
7
+ ## Installation
8
+
9
+ ```bash
10
+ npm install @mandaitor/sdk
11
+ # or
12
+ pnpm add @mandaitor/sdk
13
+ ```
14
+
15
+ ## Quick Start
16
+
17
+ ```typescript
18
+ import { MandaitorClient } from "@mandaitor/sdk";
19
+
20
+ const client = new MandaitorClient({
21
+ apiKey: "mk_live_...",
22
+ tenantId: "tnt_acme_prod",
23
+ });
24
+
25
+ // Create a mandate
26
+ const mandate = await client.createMandate({
27
+ principal: { id: "user-123", type: "NATURAL_PERSON" },
28
+ delegate: { id: "agent-456", type: "AGENT" },
29
+ scope: {
30
+ actions: ["construction.validation.approve"],
31
+ resources: ["project:proj-1/zone:EG/installation:stk_01"],
32
+ effect: "ALLOW",
33
+ },
34
+ constraints: {
35
+ validFrom: new Date().toISOString(),
36
+ validUntil: new Date(Date.now() + 86400000).toISOString(),
37
+ },
38
+ });
39
+
40
+ // Verify a delegation claim
41
+ const result = await client.verify({
42
+ delegateId: "agent-456",
43
+ action: "construction.validation.approve",
44
+ resource: "project:proj-1/zone:EG/installation:stk_01",
45
+ });
46
+
47
+ console.log(result.decision); // "ALLOW" or "DENY"
48
+ ```
49
+
50
+ ## API Reference
51
+
52
+ ### `MandaitorClient`
53
+
54
+ | Method | Description |
55
+ |--------|-------------|
56
+ | `createMandate(request)` | Create a new delegation mandate |
57
+ | `getMandate(id)` | Retrieve a mandate by ID |
58
+ | `listMandates(options?)` | List mandates with optional pagination |
59
+ | `revokeMandate(id, reason?)` | Permanently revoke a mandate |
60
+ | `suspendMandate(id, reason?)` | Temporarily suspend a mandate |
61
+ | `reactivateMandate(id)` | Reactivate a suspended mandate |
62
+ | `verify(request, options?)` | Verify a delegation claim |
63
+ | `getEvents(mandateId?)` | Query audit events |
64
+
65
+ ### Configuration
66
+
67
+ ```typescript
68
+ interface MandaitorClientConfig {
69
+ apiKey: string; // API key issued during tenant onboarding
70
+ tenantId: string; // Tenant identifier, e.g. "tnt_acme_prod"
71
+ baseUrl?: string; // API base URL (defaults to production)
72
+ timeout?: number; // Request timeout in ms (default: 5000)
73
+ }
74
+ ```
75
+
76
+ ### Error Handling
77
+
78
+ The SDK provides typed error classes for all API error scenarios:
79
+
80
+ | Error Class | HTTP Status | Description |
81
+ |-------------|-------------|-------------|
82
+ | `MandaitorAuthError` | 401 | Invalid or missing API key |
83
+ | `MandaitorForbiddenError` | 403 | Insufficient permissions |
84
+ | `MandaitorNotFoundError` | 404 | Resource not found |
85
+ | `MandaitorConflictError` | 409 | State conflict (e.g., revoking an already revoked mandate) |
86
+ | `MandaitorRateLimitError` | 429 | Rate limit exceeded |
87
+ | `MandaitorValidationError` | 400 | Invalid request payload |
88
+ | `MandaitorTimeoutError` | - | Request timed out |
89
+
90
+ ## Development
91
+
92
+ ```bash
93
+ # Build
94
+ pnpm build
95
+
96
+ # Run unit tests
97
+ pnpm test:unit
98
+
99
+ # Run integration tests (requires testing stage credentials)
100
+ pnpm test:integration
101
+ ```
@@ -0,0 +1,60 @@
1
+ import type { Mandate, CreateMandateRequest, VerifyRequest, VerifyResponse, VerifyResponseWithPoM, VerifyOptions, AuditEvent, PaginatedResponse } from "./types";
2
+ export interface MandaitorClientConfig {
3
+ /** API key issued during tenant onboarding */
4
+ apiKey: string;
5
+ /** Tenant identifier, e.g. "tnt_monco_prod" */
6
+ tenantId: string;
7
+ /** API base URL (defaults to production) */
8
+ baseUrl?: string;
9
+ /** Request timeout in milliseconds (default: 5000) */
10
+ timeout?: number;
11
+ /** Number of retries for 5xx/429 errors (default: 2) */
12
+ retries?: number;
13
+ }
14
+ export declare class MandaitorClient {
15
+ private config;
16
+ constructor(config: MandaitorClientConfig);
17
+ private request;
18
+ createMandate(req: CreateMandateRequest): Promise<Mandate>;
19
+ getMandate(mandateId: string): Promise<Mandate>;
20
+ listMandates(params?: {
21
+ status?: string;
22
+ limit?: number;
23
+ cursor?: string;
24
+ }): Promise<PaginatedResponse<Mandate>>;
25
+ revokeMandate(mandateId: string, reason?: string): Promise<Mandate>;
26
+ suspendMandate(mandateId: string, reason?: string): Promise<Mandate>;
27
+ reactivateMandate(mandateId: string): Promise<Mandate>;
28
+ verify(req: VerifyRequest): Promise<VerifyResponse>;
29
+ /**
30
+ * Verify an action and optionally request a Proof-of-Mandate VC.
31
+ *
32
+ * @example
33
+ * ```ts
34
+ * const result = await client.verifyWithPoM(
35
+ * { delegate_subject_id: "agent:v2", action: "approve", resource: "proj/*" },
36
+ * { pom: "sd-jwt-vc" },
37
+ * );
38
+ * if (result.proof_of_mandate) {
39
+ * console.log(result.proof_of_mandate.compact); // SD-JWT string
40
+ * }
41
+ * ```
42
+ */
43
+ verifyWithPoM(req: VerifyRequest, options: VerifyOptions): Promise<VerifyResponseWithPoM>;
44
+ getMandateEvents(mandateId: string, params?: {
45
+ limit?: number;
46
+ cursor?: string;
47
+ }): Promise<PaginatedResponse<AuditEvent>>;
48
+ getAuditEvents(mandateId: string, options?: {
49
+ limit?: number;
50
+ cursor?: string;
51
+ }): Promise<PaginatedResponse<AuditEvent>>;
52
+ listEvents(params?: {
53
+ mandate_id?: string;
54
+ limit?: number;
55
+ cursor?: string;
56
+ event_type?: string;
57
+ }): Promise<PaginatedResponse<AuditEvent>>;
58
+ getEvent(eventId: string, mandateId: string): Promise<AuditEvent>;
59
+ }
60
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,UAAU,EACV,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAYjB,MAAM,WAAW,qBAAqB;IACpC,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAkC;gBAEpC,MAAM,EAAE,qBAAqB;YAS3B,OAAO;IAgFf,aAAa,CAAC,GAAG,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAI1D,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI/C,YAAY,CAAC,MAAM,CAAC,EAAE;QAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IASjC,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAInE,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIpE,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKtD,MAAM,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;IAIzD;;;;;;;;;;;;;OAaG;IACG,aAAa,CAAC,GAAG,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAQzF,gBAAgB,CACpB,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC3C,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAQnC,cAAc,CAClB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5C,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAYnC,UAAU,CAAC,MAAM,CAAC,EAAE;QACxB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAUpC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;CAIxE"}
package/dist/client.js ADDED
@@ -0,0 +1,178 @@
1
+ import { MandataApiError, MandaitorTimeoutError, MandaitorValidationError, MandaitorAuthError, MandaitorForbiddenError, MandaitorNotFoundError, MandaitorConflictError, MandaitorRateLimitError, } from "./errors";
2
+ export class MandaitorClient {
3
+ config;
4
+ constructor(config) {
5
+ this.config = {
6
+ baseUrl: "https://api.mandaitor.io/v1",
7
+ timeout: 5000,
8
+ retries: 2,
9
+ ...config,
10
+ };
11
+ }
12
+ async request(method, path, body) {
13
+ let lastError = null;
14
+ const url = `${this.config.baseUrl}${path}`;
15
+ for (let attempt = 0; attempt <= this.config.retries; attempt++) {
16
+ try {
17
+ const controller = new AbortController();
18
+ const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);
19
+ const response = await fetch(url, {
20
+ method,
21
+ headers: {
22
+ "Content-Type": "application/json",
23
+ Authorization: `Bearer ${this.config.tenantId}:${this.config.apiKey}`,
24
+ },
25
+ body: body ? JSON.stringify(body) : undefined,
26
+ signal: controller.signal,
27
+ });
28
+ clearTimeout(timeoutId);
29
+ if (!response.ok) {
30
+ const error = (await response.json().catch(() => ({})));
31
+ const code = error.error || "UNKNOWN";
32
+ const message = error.message || response.statusText;
33
+ const requestId = response.headers.get("x-request-id") || undefined;
34
+ switch (response.status) {
35
+ case 400:
36
+ throw new MandaitorValidationError(code, message, requestId);
37
+ case 401:
38
+ throw new MandaitorAuthError(code, message, requestId);
39
+ case 403:
40
+ throw new MandaitorForbiddenError(code, message, requestId);
41
+ case 404:
42
+ throw new MandaitorNotFoundError(code, message, requestId);
43
+ case 409:
44
+ throw new MandaitorConflictError(code, message, requestId);
45
+ case 429: {
46
+ const retryAfterHeader = response.headers.get("retry-after");
47
+ let retryAfterMs;
48
+ if (retryAfterHeader) {
49
+ const seconds = parseInt(retryAfterHeader, 10);
50
+ if (!isNaN(seconds)) {
51
+ retryAfterMs = seconds * 1000;
52
+ }
53
+ else {
54
+ // Retry-After may be an HTTP-date string
55
+ const date = new Date(retryAfterHeader);
56
+ const delta = date.getTime() - Date.now();
57
+ retryAfterMs = delta > 0 ? delta : Math.pow(2, attempt) * 100;
58
+ }
59
+ }
60
+ else {
61
+ retryAfterMs = Math.pow(2, attempt) * 100;
62
+ }
63
+ throw new MandaitorRateLimitError(code, message, retryAfterMs, requestId);
64
+ }
65
+ default:
66
+ throw new MandataApiError(response.status, code, message, requestId);
67
+ }
68
+ }
69
+ return response.json();
70
+ }
71
+ catch (err) {
72
+ if (err instanceof Error && err.name === "AbortError") {
73
+ lastError = new MandaitorTimeoutError(this.config.timeout, url);
74
+ }
75
+ else {
76
+ lastError = err instanceof Error ? err : new Error(String(err));
77
+ }
78
+ // Only retry on server errors or rate limiting
79
+ if (err instanceof MandataApiError && !err.isRetryable)
80
+ throw err;
81
+ if (attempt < this.config.retries) {
82
+ const delayMs = err instanceof MandaitorRateLimitError ? err.retryAfterMs : Math.pow(2, attempt) * 100;
83
+ await new Promise((r) => setTimeout(r, delayMs));
84
+ }
85
+ }
86
+ }
87
+ throw lastError;
88
+ }
89
+ // ── Mandate Operations ──────────────────────────────────
90
+ async createMandate(req) {
91
+ return this.request("POST", "/mandates", req);
92
+ }
93
+ async getMandate(mandateId) {
94
+ return this.request("GET", `/mandates/${mandateId}`);
95
+ }
96
+ async listMandates(params) {
97
+ const query = new URLSearchParams();
98
+ if (params?.status)
99
+ query.set("status", params.status);
100
+ if (params?.limit)
101
+ query.set("limit", String(params.limit));
102
+ if (params?.cursor)
103
+ query.set("cursor", params.cursor);
104
+ const qs = query.toString();
105
+ return this.request("GET", `/mandates${qs ? "?" + qs : ""}`);
106
+ }
107
+ async revokeMandate(mandateId, reason) {
108
+ return this.request("POST", `/mandates/${mandateId}/revoke`, { reason });
109
+ }
110
+ async suspendMandate(mandateId, reason) {
111
+ return this.request("POST", `/mandates/${mandateId}/suspend`, { reason });
112
+ }
113
+ async reactivateMandate(mandateId) {
114
+ return this.request("POST", `/mandates/${mandateId}/reactivate`);
115
+ }
116
+ // ── Verification ────────────────────────────────────────
117
+ async verify(req) {
118
+ return this.request("POST", "/verify", req);
119
+ }
120
+ /**
121
+ * Verify an action and optionally request a Proof-of-Mandate VC.
122
+ *
123
+ * @example
124
+ * ```ts
125
+ * const result = await client.verifyWithPoM(
126
+ * { delegate_subject_id: "agent:v2", action: "approve", resource: "proj/*" },
127
+ * { pom: "sd-jwt-vc" },
128
+ * );
129
+ * if (result.proof_of_mandate) {
130
+ * console.log(result.proof_of_mandate.compact); // SD-JWT string
131
+ * }
132
+ * ```
133
+ */
134
+ async verifyWithPoM(req, options) {
135
+ const query = new URLSearchParams();
136
+ if (options.pom)
137
+ query.set("pom", options.pom);
138
+ const qs = query.toString();
139
+ return this.request("POST", `/verify${qs ? "?" + qs : ""}`, req);
140
+ }
141
+ // ── Audit Events ────────────────────────────────────────
142
+ async getMandateEvents(mandateId, params) {
143
+ const query = new URLSearchParams();
144
+ if (params?.limit)
145
+ query.set("limit", String(params.limit));
146
+ if (params?.cursor)
147
+ query.set("cursor", params.cursor);
148
+ const qs = query.toString();
149
+ return this.request("GET", `/mandates/${mandateId}/events${qs ? "?" + qs : ""}`);
150
+ }
151
+ async getAuditEvents(mandateId, options) {
152
+ const queryParams = new URLSearchParams();
153
+ if (options?.limit)
154
+ queryParams.append("limit", options.limit.toString());
155
+ if (options?.cursor)
156
+ queryParams.append("cursor", options.cursor);
157
+ const qs = queryParams.toString();
158
+ return this.request("GET", `/mandates/${mandateId}/audit-events${qs ? "?" + qs : ""}`);
159
+ }
160
+ async listEvents(params) {
161
+ const query = new URLSearchParams();
162
+ if (params?.mandate_id)
163
+ query.set("mandate_id", params.mandate_id);
164
+ if (params?.limit)
165
+ query.set("limit", String(params.limit));
166
+ if (params?.cursor)
167
+ query.set("cursor", params.cursor);
168
+ if (params?.event_type)
169
+ query.set("event_type", params.event_type);
170
+ const qs = query.toString();
171
+ return this.request("GET", `/events${qs ? "?" + qs : ""}`);
172
+ }
173
+ async getEvent(eventId, mandateId) {
174
+ const query = new URLSearchParams({ mandate_id: mandateId });
175
+ return this.request("GET", `/events/${eventId}?${query.toString()}`);
176
+ }
177
+ }
178
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Error codes returned by the Mandaitor API.
3
+ * Use these constants for programmatic error handling.
4
+ */
5
+ export declare const ErrorCodes: {
6
+ readonly INVALID_REQUEST: "INVALID_REQUEST";
7
+ readonly INVALID_SCOPE: "INVALID_SCOPE";
8
+ readonly INVALID_CONSTRAINTS: "INVALID_CONSTRAINTS";
9
+ readonly TAXONOMY_VALIDATION_FAILED: "TAXONOMY_VALIDATION_FAILED";
10
+ readonly MISSING_API_KEY: "MISSING_API_KEY";
11
+ readonly INVALID_API_KEY: "INVALID_API_KEY";
12
+ readonly API_KEY_EXPIRED: "API_KEY_EXPIRED";
13
+ readonly TENANT_SUSPENDED: "TENANT_SUSPENDED";
14
+ readonly INSUFFICIENT_PERMISSIONS: "INSUFFICIENT_PERMISSIONS";
15
+ readonly MANDATE_NOT_FOUND: "MANDATE_NOT_FOUND";
16
+ readonly EVENT_NOT_FOUND: "EVENT_NOT_FOUND";
17
+ readonly TENANT_NOT_FOUND: "TENANT_NOT_FOUND";
18
+ readonly MANDATE_ALREADY_REVOKED: "MANDATE_ALREADY_REVOKED";
19
+ readonly MANDATE_ALREADY_SUSPENDED: "MANDATE_ALREADY_SUSPENDED";
20
+ readonly DUPLICATE_REQUEST: "DUPLICATE_REQUEST";
21
+ readonly RATE_LIMIT_EXCEEDED: "RATE_LIMIT_EXCEEDED";
22
+ readonly INTERNAL_ERROR: "INTERNAL_ERROR";
23
+ readonly KMS_SIGNING_FAILED: "KMS_SIGNING_FAILED";
24
+ readonly DATABASE_ERROR: "DATABASE_ERROR";
25
+ };
26
+ export type ErrorCode = (typeof ErrorCodes)[keyof typeof ErrorCodes];
27
+ /**
28
+ * Typed error class for Mandaitor API errors.
29
+ * Thrown by MandaitorClient when the API returns a non-2xx response.
30
+ *
31
+ * @example
32
+ * try {
33
+ * await client.getMandate("mnd_nonexistent");
34
+ * } catch (err) {
35
+ * if (err instanceof MandataApiError) {
36
+ * if (err.code === ErrorCodes.MANDATE_NOT_FOUND) {
37
+ * // Handle 404
38
+ * }
39
+ * console.error(`[${err.status}] ${err.code}: ${err.message}`);
40
+ * }
41
+ * }
42
+ */
43
+ export declare class MandataApiError extends Error {
44
+ /** HTTP status code (e.g. 400, 404, 500) */
45
+ readonly status: number;
46
+ /** Machine-readable error code from ErrorCodes */
47
+ readonly code: string;
48
+ /** Optional request ID for support debugging */
49
+ readonly requestId?: string | undefined;
50
+ readonly name: string;
51
+ constructor(
52
+ /** HTTP status code (e.g. 400, 404, 500) */
53
+ status: number,
54
+ /** Machine-readable error code from ErrorCodes */
55
+ code: string,
56
+ /** Human-readable error message */
57
+ message: string,
58
+ /** Optional request ID for support debugging */
59
+ requestId?: string | undefined);
60
+ /** Returns true if this is a client error (4xx) */
61
+ get isClientError(): boolean;
62
+ /** Returns true if this is a server error (5xx) — safe to retry */
63
+ get isRetryable(): boolean;
64
+ /** Structured JSON representation for logging */
65
+ toJSON(): {
66
+ name: string;
67
+ status: number;
68
+ code: string;
69
+ message: string;
70
+ requestId: string | undefined;
71
+ };
72
+ }
73
+ /**
74
+ * Thrown when the API returns a 400 Bad Request response.
75
+ */
76
+ export declare class MandaitorValidationError extends MandataApiError {
77
+ readonly name = "MandaitorValidationError";
78
+ constructor(code: string, message: string, requestId?: string);
79
+ }
80
+ /**
81
+ * Thrown when the API returns a 401 Unauthorized response.
82
+ */
83
+ export declare class MandaitorAuthError extends MandataApiError {
84
+ readonly name = "MandaitorAuthError";
85
+ constructor(code: string, message: string, requestId?: string);
86
+ }
87
+ /**
88
+ * Thrown when the API returns a 403 Forbidden response.
89
+ */
90
+ export declare class MandaitorForbiddenError extends MandataApiError {
91
+ readonly name = "MandaitorForbiddenError";
92
+ constructor(code: string, message: string, requestId?: string);
93
+ }
94
+ /**
95
+ * Thrown when the API returns a 404 Not Found response.
96
+ */
97
+ export declare class MandaitorNotFoundError extends MandataApiError {
98
+ readonly name = "MandaitorNotFoundError";
99
+ constructor(code: string, message: string, requestId?: string);
100
+ }
101
+ /**
102
+ * Thrown when the API returns a 409 Conflict response.
103
+ */
104
+ export declare class MandaitorConflictError extends MandataApiError {
105
+ readonly name = "MandaitorConflictError";
106
+ constructor(code: string, message: string, requestId?: string);
107
+ }
108
+ /**
109
+ * Thrown when the API returns a 429 Too Many Requests response.
110
+ * Contains the number of milliseconds to wait before retrying.
111
+ */
112
+ export declare class MandaitorRateLimitError extends MandataApiError {
113
+ readonly name = "MandaitorRateLimitError";
114
+ /** Milliseconds to wait before retrying (from Retry-After header, or exponential backoff) */
115
+ readonly retryAfterMs: number;
116
+ constructor(code: string, message: string, retryAfterMs: number, requestId?: string);
117
+ }
118
+ /**
119
+ * Thrown when the request times out (AbortController signal).
120
+ */
121
+ export declare class MandaitorTimeoutError extends Error {
122
+ readonly timeoutMs: number;
123
+ readonly url: string;
124
+ readonly name = "MandaitorTimeoutError";
125
+ constructor(timeoutMs: number, url: string);
126
+ }
127
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;CAiCb,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AAErE;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IAItC,4CAA4C;aAC5B,MAAM,EAAE,MAAM;IAC9B,kDAAkD;aAClC,IAAI,EAAE,MAAM;IAG5B,gDAAgD;aAChC,SAAS,CAAC,EAAE,MAAM;IAVpC,SAAgB,IAAI,EAAE,MAAM,CAAqB;;IAG/C,4CAA4C;IAC5B,MAAM,EAAE,MAAM;IAC9B,kDAAkD;IAClC,IAAI,EAAE,MAAM;IAC5B,mCAAmC;IACnC,OAAO,EAAE,MAAM;IACf,gDAAgD;IAChC,SAAS,CAAC,EAAE,MAAM,YAAA;IAOpC,mDAAmD;IACnD,IAAI,aAAa,IAAI,OAAO,CAE3B;IAED,mEAAmE;IACnE,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,iDAAiD;IACjD,MAAM;;;;;;;CASP;AAED;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,eAAe;IAC3D,SAAyB,IAAI,8BAA8B;gBAE/C,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;CAI9D;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,eAAe;IACrD,SAAyB,IAAI,wBAAwB;gBAEzC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;CAI9D;AAED;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,eAAe;IAC1D,SAAyB,IAAI,6BAA6B;gBAE9C,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;CAI9D;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,eAAe;IACzD,SAAyB,IAAI,4BAA4B;gBAE7C,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;CAI9D;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,eAAe;IACzD,SAAyB,IAAI,4BAA4B;gBAE7C,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;CAI9D;AAED;;;GAGG;AACH,qBAAa,uBAAwB,SAAQ,eAAe;IAC1D,SAAyB,IAAI,6BAA6B;IAE1D,6FAA6F;IAC7F,SAAgB,YAAY,EAAE,MAAM,CAAC;gBAEzB,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;CAKpF;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;aAI5B,SAAS,EAAE,MAAM;aACjB,GAAG,EAAE,MAAM;IAJ7B,SAAgB,IAAI,2BAA2B;gBAG7B,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM;CAK9B"}
package/dist/errors.js ADDED
@@ -0,0 +1,168 @@
1
+ // @mandaitor/sdk — Error classes and error code constants
2
+ /**
3
+ * Error codes returned by the Mandaitor API.
4
+ * Use these constants for programmatic error handling.
5
+ */
6
+ export const ErrorCodes = {
7
+ // 400 Bad Request
8
+ INVALID_REQUEST: "INVALID_REQUEST",
9
+ INVALID_SCOPE: "INVALID_SCOPE",
10
+ INVALID_CONSTRAINTS: "INVALID_CONSTRAINTS",
11
+ TAXONOMY_VALIDATION_FAILED: "TAXONOMY_VALIDATION_FAILED",
12
+ // 401 Unauthorized
13
+ MISSING_API_KEY: "MISSING_API_KEY",
14
+ INVALID_API_KEY: "INVALID_API_KEY",
15
+ API_KEY_EXPIRED: "API_KEY_EXPIRED",
16
+ // 403 Forbidden
17
+ TENANT_SUSPENDED: "TENANT_SUSPENDED",
18
+ INSUFFICIENT_PERMISSIONS: "INSUFFICIENT_PERMISSIONS",
19
+ // 404 Not Found
20
+ MANDATE_NOT_FOUND: "MANDATE_NOT_FOUND",
21
+ EVENT_NOT_FOUND: "EVENT_NOT_FOUND",
22
+ TENANT_NOT_FOUND: "TENANT_NOT_FOUND",
23
+ // 409 Conflict
24
+ MANDATE_ALREADY_REVOKED: "MANDATE_ALREADY_REVOKED",
25
+ MANDATE_ALREADY_SUSPENDED: "MANDATE_ALREADY_SUSPENDED",
26
+ DUPLICATE_REQUEST: "DUPLICATE_REQUEST",
27
+ // 429 Too Many Requests
28
+ RATE_LIMIT_EXCEEDED: "RATE_LIMIT_EXCEEDED",
29
+ // 500 Internal Server Error
30
+ INTERNAL_ERROR: "INTERNAL_ERROR",
31
+ KMS_SIGNING_FAILED: "KMS_SIGNING_FAILED",
32
+ DATABASE_ERROR: "DATABASE_ERROR",
33
+ };
34
+ /**
35
+ * Typed error class for Mandaitor API errors.
36
+ * Thrown by MandaitorClient when the API returns a non-2xx response.
37
+ *
38
+ * @example
39
+ * try {
40
+ * await client.getMandate("mnd_nonexistent");
41
+ * } catch (err) {
42
+ * if (err instanceof MandataApiError) {
43
+ * if (err.code === ErrorCodes.MANDATE_NOT_FOUND) {
44
+ * // Handle 404
45
+ * }
46
+ * console.error(`[${err.status}] ${err.code}: ${err.message}`);
47
+ * }
48
+ * }
49
+ */
50
+ export class MandataApiError extends Error {
51
+ status;
52
+ code;
53
+ requestId;
54
+ name = "MandataApiError";
55
+ constructor(
56
+ /** HTTP status code (e.g. 400, 404, 500) */
57
+ status,
58
+ /** Machine-readable error code from ErrorCodes */
59
+ code,
60
+ /** Human-readable error message */
61
+ message,
62
+ /** Optional request ID for support debugging */
63
+ requestId) {
64
+ super(message);
65
+ this.status = status;
66
+ this.code = code;
67
+ this.requestId = requestId;
68
+ // Ensure instanceof works correctly in transpiled code
69
+ Object.setPrototypeOf(this, MandataApiError.prototype);
70
+ }
71
+ /** Returns true if this is a client error (4xx) */
72
+ get isClientError() {
73
+ return this.status >= 400 && this.status < 500;
74
+ }
75
+ /** Returns true if this is a server error (5xx) — safe to retry */
76
+ get isRetryable() {
77
+ return this.status >= 500 || this.status === 429;
78
+ }
79
+ /** Structured JSON representation for logging */
80
+ toJSON() {
81
+ return {
82
+ name: this.name,
83
+ status: this.status,
84
+ code: this.code,
85
+ message: this.message,
86
+ requestId: this.requestId,
87
+ };
88
+ }
89
+ }
90
+ /**
91
+ * Thrown when the API returns a 400 Bad Request response.
92
+ */
93
+ export class MandaitorValidationError extends MandataApiError {
94
+ name = "MandaitorValidationError";
95
+ constructor(code, message, requestId) {
96
+ super(400, code, message, requestId);
97
+ Object.setPrototypeOf(this, MandaitorValidationError.prototype);
98
+ }
99
+ }
100
+ /**
101
+ * Thrown when the API returns a 401 Unauthorized response.
102
+ */
103
+ export class MandaitorAuthError extends MandataApiError {
104
+ name = "MandaitorAuthError";
105
+ constructor(code, message, requestId) {
106
+ super(401, code, message, requestId);
107
+ Object.setPrototypeOf(this, MandaitorAuthError.prototype);
108
+ }
109
+ }
110
+ /**
111
+ * Thrown when the API returns a 403 Forbidden response.
112
+ */
113
+ export class MandaitorForbiddenError extends MandataApiError {
114
+ name = "MandaitorForbiddenError";
115
+ constructor(code, message, requestId) {
116
+ super(403, code, message, requestId);
117
+ Object.setPrototypeOf(this, MandaitorForbiddenError.prototype);
118
+ }
119
+ }
120
+ /**
121
+ * Thrown when the API returns a 404 Not Found response.
122
+ */
123
+ export class MandaitorNotFoundError extends MandataApiError {
124
+ name = "MandaitorNotFoundError";
125
+ constructor(code, message, requestId) {
126
+ super(404, code, message, requestId);
127
+ Object.setPrototypeOf(this, MandaitorNotFoundError.prototype);
128
+ }
129
+ }
130
+ /**
131
+ * Thrown when the API returns a 409 Conflict response.
132
+ */
133
+ export class MandaitorConflictError extends MandataApiError {
134
+ name = "MandaitorConflictError";
135
+ constructor(code, message, requestId) {
136
+ super(409, code, message, requestId);
137
+ Object.setPrototypeOf(this, MandaitorConflictError.prototype);
138
+ }
139
+ }
140
+ /**
141
+ * Thrown when the API returns a 429 Too Many Requests response.
142
+ * Contains the number of milliseconds to wait before retrying.
143
+ */
144
+ export class MandaitorRateLimitError extends MandataApiError {
145
+ name = "MandaitorRateLimitError";
146
+ /** Milliseconds to wait before retrying (from Retry-After header, or exponential backoff) */
147
+ retryAfterMs;
148
+ constructor(code, message, retryAfterMs, requestId) {
149
+ super(429, code, message, requestId);
150
+ this.retryAfterMs = retryAfterMs;
151
+ Object.setPrototypeOf(this, MandaitorRateLimitError.prototype);
152
+ }
153
+ }
154
+ /**
155
+ * Thrown when the request times out (AbortController signal).
156
+ */
157
+ export class MandaitorTimeoutError extends Error {
158
+ timeoutMs;
159
+ url;
160
+ name = "MandaitorTimeoutError";
161
+ constructor(timeoutMs, url) {
162
+ super(`Request to ${url} timed out after ${timeoutMs}ms`);
163
+ this.timeoutMs = timeoutMs;
164
+ this.url = url;
165
+ Object.setPrototypeOf(this, MandaitorTimeoutError.prototype);
166
+ }
167
+ }
168
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export { MandaitorClient } from "./client";
2
+ export type { MandaitorClientConfig } from "./client";
3
+ export type { Mandate, MandateStatus, MandateProof, Subject, SubjectType, Scope, Constraints, TimeConstraint, TransactionLimit, EscalationRule, RateLimit, AuditEvent, AuditEventType, CreateMandateRequest, VerifyRequest, VerifyResponse, VerifyResponseWithPoM, VerifyOptions, PaginatedResponse, PomFormat, ProofOfMandateClaims, ProofOfMandateVC, Tenant, TenantStatus, AccessRequest, } from "./types";
4
+ export { MandataApiError, MandaitorTimeoutError, MandaitorValidationError, MandaitorAuthError, MandaitorForbiddenError, MandaitorNotFoundError, MandaitorConflictError, MandaitorRateLimitError, ErrorCodes, } from "./errors";
5
+ export type { ErrorCode } from "./errors";
6
+ export { MandaitorConfigClient } from "./widget-config";
7
+ export type { WidgetConfiguration, IdPConfig, IdPType, PublicWidgetConfig } from "./widget-config";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,YAAY,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAGtD,YAAY,EAEV,OAAO,EACP,aAAa,EACb,YAAY,EACZ,OAAO,EACP,WAAW,EACX,KAAK,EACL,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,SAAS,EAGT,UAAU,EACV,cAAc,EAGd,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,iBAAiB,EAGjB,SAAS,EACT,oBAAoB,EACpB,gBAAgB,EAGhB,MAAM,EACN,YAAY,EACZ,aAAa,GACd,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,wBAAwB,EACxB,kBAAkB,EAClB,uBAAuB,EACvB,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,UAAU,GACX,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAG1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,YAAY,EAAE,mBAAmB,EAAE,SAAS,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,10 @@
1
+ // @mandaitor/sdk — Public API
2
+ // This is the single entry point for all SDK consumers.
3
+ // Do NOT import from internal files directly.
4
+ // ── Client ──
5
+ export { MandaitorClient } from "./client";
6
+ // ── Errors ──
7
+ export { MandataApiError, MandaitorTimeoutError, MandaitorValidationError, MandaitorAuthError, MandaitorForbiddenError, MandaitorNotFoundError, MandaitorConflictError, MandaitorRateLimitError, ErrorCodes, } from "./errors";
8
+ // ── Widget Configuration ──
9
+ export { MandaitorConfigClient } from "./widget-config";
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,wDAAwD;AACxD,8CAA8C;AAE9C,eAAe;AACf,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAyC3C,eAAe;AACf,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,wBAAwB,EACxB,kBAAkB,EAClB,uBAAuB,EACvB,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,UAAU,GACX,MAAM,UAAU,CAAC;AAGlB,6BAA6B;AAC7B,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,231 @@
1
+ export type SubjectType = "NATURAL_PERSON" | "LEGAL_ENTITY" | "SERVICE" | "AGENT";
2
+ export interface Subject {
3
+ /** Subject type discriminator */
4
+ type: SubjectType;
5
+ /** Unique subject identifier (e.g. "oidc|auth0|user123" or "agent:monco:validate-v2") */
6
+ subject_id: string;
7
+ /** Optional display name */
8
+ display_name?: string;
9
+ /** EUDI Wallet PID (planned for eIDAS 2.0 integration) */
10
+ eudi_pid?: string;
11
+ }
12
+ export interface Scope {
13
+ /** List of action identifiers from the taxonomy, e.g. ["construction.validation.approve"] */
14
+ actions: string[];
15
+ /** Resource URI patterns, e.g. ["monco:project:proj_123/*"] */
16
+ resources: string[];
17
+ /** Whether this scope allows or denies the actions */
18
+ effect: "ALLOW" | "DENY";
19
+ /** Optional conditions for fine-grained control */
20
+ conditions?: Record<string, unknown>;
21
+ }
22
+ export interface TimeConstraint {
23
+ /** ISO 8601 timestamp — mandate becomes active */
24
+ not_before?: string;
25
+ /** ISO 8601 timestamp — mandate expires */
26
+ expires_at?: string;
27
+ /** ISO 8601 duration — alternative to expires_at, e.g. "P30D" */
28
+ duration?: string;
29
+ }
30
+ export interface TransactionLimit {
31
+ currency: string;
32
+ value: number;
33
+ }
34
+ export interface EscalationRule {
35
+ /** Condition that triggers escalation */
36
+ condition: string;
37
+ /** Who to escalate to */
38
+ escalate_to: string;
39
+ /** Escalation method */
40
+ method: "NOTIFY" | "APPROVAL_REQUIRED" | "BLOCK";
41
+ }
42
+ export interface RateLimit {
43
+ /** Maximum number of operations */
44
+ max_operations: number;
45
+ /** Time window in seconds */
46
+ window_seconds: number;
47
+ }
48
+ export interface Constraints {
49
+ time?: TimeConstraint;
50
+ transaction_limits?: Record<string, TransactionLimit>;
51
+ escalation_rules?: EscalationRule[];
52
+ rate_limits?: Record<string, RateLimit>;
53
+ /** Require human confirmation for each invocation */
54
+ require_human_confirmation?: boolean;
55
+ /** Custom constraint extensions */
56
+ custom?: Record<string, unknown>;
57
+ }
58
+ export type MandateStatus = "ACTIVE" | "SUSPENDED" | "REVOKED" | "EXPIRED";
59
+ export interface Mandate {
60
+ /** Unique mandate identifier, e.g. "mnd_abc123def456" */
61
+ mandate_id: string;
62
+ /** Tenant that owns this mandate */
63
+ tenant_id: string;
64
+ /** Who is delegating authority */
65
+ principal: Subject;
66
+ /** Who is receiving authority */
67
+ delegate: Subject;
68
+ /** What is being delegated */
69
+ scope: Scope;
70
+ /** Boundaries on the delegation */
71
+ constraints: Constraints;
72
+ /** Current status */
73
+ status: MandateStatus;
74
+ /** Cryptographic proof of creation */
75
+ proof: MandateProof;
76
+ /** Taxonomy version used for validation */
77
+ taxonomy_version?: string;
78
+ /** ISO 8601 creation timestamp */
79
+ created_at: string;
80
+ /** ISO 8601 last update timestamp */
81
+ updated_at: string;
82
+ /** Optional metadata */
83
+ metadata?: Record<string, unknown>;
84
+ }
85
+ export interface MandateProof {
86
+ /** Signature algorithm */
87
+ algorithm: string;
88
+ /** KMS key ARN used for signing */
89
+ key_id: string;
90
+ /** Base64-encoded signature */
91
+ signature: string;
92
+ /** ISO 8601 timestamp of signing */
93
+ signed_at: string;
94
+ }
95
+ export type AuditEventType = "MANDATE_CREATED" | "MANDATE_VERIFIED" | "MANDATE_REVOKED" | "MANDATE_SUSPENDED" | "MANDATE_REACTIVATED" | "MANDATE_EXPIRED" | "VERIFICATION_DENIED";
96
+ export interface AuditEvent {
97
+ /** Unique event identifier */
98
+ event_id: string;
99
+ /** Mandate this event belongs to */
100
+ mandate_id: string;
101
+ /** Tenant ID */
102
+ tenant_id: string;
103
+ /** Event type */
104
+ event_type: AuditEventType;
105
+ /** Who triggered this event */
106
+ actor: Subject;
107
+ /** Event-specific payload */
108
+ payload: Record<string, unknown>;
109
+ /** SHA-256 hash of the previous event (chain integrity) */
110
+ previous_hash: string;
111
+ /** SHA-256 hash of this event */
112
+ event_hash: string;
113
+ /** ISO 8601 timestamp */
114
+ timestamp: string;
115
+ }
116
+ export interface CreateMandateRequest {
117
+ principal: Subject;
118
+ delegate: Subject;
119
+ scope: Scope;
120
+ constraints: Constraints;
121
+ taxonomy_version?: string;
122
+ metadata?: Record<string, unknown>;
123
+ }
124
+ export interface VerifyRequest {
125
+ /** Subject ID of the delegate to verify, e.g. "agent:monco:validate-v2" */
126
+ delegate_subject_id: string;
127
+ /** Action being attempted */
128
+ action: string;
129
+ /** Resource being accessed */
130
+ resource: string;
131
+ /** Additional context for condition evaluation */
132
+ context?: Record<string, unknown>;
133
+ }
134
+ export interface VerifyResponse {
135
+ /** Verification decision */
136
+ decision: "ALLOW" | "DENY";
137
+ /** Mandate ID that matched (present on ALLOW, absent on DENY/NO_MATCHING_MANDATE) */
138
+ mandate_id?: string;
139
+ /** Unique verification event ID for audit trail */
140
+ event_id: string;
141
+ /** Reason codes for denial (present on DENY) */
142
+ reason_codes?: string[];
143
+ /** Remaining constraints snapshot (present on ESCALATION_REQUIRED) */
144
+ constraints_remaining?: Record<string, unknown>;
145
+ }
146
+ /** Supported output formats for the Proof-of-Mandate artifact */
147
+ export type PomFormat = "sd-jwt-vc";
148
+ /** W3C VC claim set embedded in the Proof-of-Mandate SD-JWT */
149
+ export interface ProofOfMandateClaims {
150
+ /** VC type discriminator */
151
+ vct: "ProofOfMandate";
152
+ /** Verification decision */
153
+ decision: "ALLOW" | "DENY";
154
+ /** Mandate ID that was evaluated (absent for DENY/NO_MATCHING_MANDATE) */
155
+ mandate_id?: string;
156
+ /** Unique verification event ID */
157
+ verification_event_id: string;
158
+ /** ISO 8601 timestamp of the verification */
159
+ verification_timestamp: string;
160
+ /** Action that was requested */
161
+ requested_action: string;
162
+ /** Resource that was requested */
163
+ requested_resource: string;
164
+ /** Subject ID of the delegate that was verified */
165
+ delegate_subject_id: string;
166
+ /** Subject ID of the principal who granted the mandate (if found) */
167
+ principal_subject_id?: string;
168
+ /** Tenant context (selectively disclosable) */
169
+ tenant_id?: string;
170
+ /** Reason codes for denial (selectively disclosable) */
171
+ reason_codes?: string[];
172
+ /** Remaining constraints snapshot (selectively disclosable) */
173
+ constraints_snapshot?: Record<string, unknown>;
174
+ /** Verification latency in ms (selectively disclosable) */
175
+ latency_ms?: number;
176
+ /** Issuer DID */
177
+ iss: string;
178
+ /** Subject (delegate_subject_id) */
179
+ sub: string;
180
+ /** Issued-at (Unix timestamp) */
181
+ iat: number;
182
+ /** Expiration (Unix timestamp) */
183
+ exp: number;
184
+ /** Selective-disclosure hash algorithm */
185
+ _sd_alg: "sha-256";
186
+ }
187
+ /** The full Proof-of-Mandate VC envelope */
188
+ export interface ProofOfMandateVC {
189
+ /** SD-JWT compact serialization (header.payload.signature~disclosure1~...~) */
190
+ compact: string;
191
+ /** Decoded payload for convenience (not authoritative — the compact form is) */
192
+ payload: ProofOfMandateClaims;
193
+ }
194
+ /** Extended verify response that optionally includes a PoM VC */
195
+ export interface VerifyResponseWithPoM extends VerifyResponse {
196
+ /** Proof-of-Mandate Verifiable Credential (present when ?pom=sd-jwt-vc) */
197
+ proof_of_mandate?: ProofOfMandateVC;
198
+ }
199
+ /** Options for the verify method */
200
+ export interface VerifyOptions {
201
+ /** Request a Proof-of-Mandate VC in the specified format */
202
+ pom?: PomFormat;
203
+ }
204
+ export interface PaginatedResponse<T> {
205
+ items: T[];
206
+ /** Cursor for next page (undefined = last page) */
207
+ next_cursor?: string;
208
+ /** Total count (only if requested) */
209
+ total_count?: number;
210
+ }
211
+ export type TenantStatus = "PENDING" | "ACTIVE" | "SUSPENDED" | "DEACTIVATED";
212
+ export interface Tenant {
213
+ tenant_id: string;
214
+ name: string;
215
+ contact_email: string;
216
+ status: TenantStatus;
217
+ api_key_hash: string;
218
+ created_at: string;
219
+ updated_at: string;
220
+ }
221
+ export interface AccessRequest {
222
+ request_id: string;
223
+ company_name: string;
224
+ contact_email: string;
225
+ use_case: string;
226
+ status: "PENDING" | "APPROVED" | "REJECTED";
227
+ submitted_at: string;
228
+ reviewed_at?: string;
229
+ reviewer_notes?: string;
230
+ }
231
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,4 @@
1
+ // @mandaitor/sdk — Shared type definitions
2
+ // These types are the canonical representation used across all Mandaitor packages.
3
+ export {};
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,mFAAmF"}
@@ -0,0 +1,130 @@
1
+ export type IdPType = "auth0" | "okta" | "azure-ad" | "entra_id" | "google" | "saml" | "oidc" | "eudi-wallet" | "eidas_wallet";
2
+ export interface IdPConfig {
3
+ enabled?: boolean;
4
+ type?: string;
5
+ clientId?: string;
6
+ clientSecret?: string;
7
+ domain?: string;
8
+ tenantId?: string;
9
+ orgId?: string;
10
+ orgUrl?: string;
11
+ metadataUrl?: string;
12
+ [key: string]: unknown;
13
+ }
14
+ export interface WidgetConfiguration {
15
+ widgetId?: string;
16
+ configVersion?: number;
17
+ idpConfigs: Record<string, IdPConfig>;
18
+ availableIdPs: string[];
19
+ taxonomyLibraries: string[];
20
+ mandateTemplates: {
21
+ id: string;
22
+ name: string;
23
+ description: string;
24
+ taxonomy: string;
25
+ actions: string[];
26
+ }[];
27
+ scopeRestrictions: string[];
28
+ constraintDefaults: {
29
+ maxDuration: number;
30
+ maxDelegationDepth: number;
31
+ requireMfa: boolean;
32
+ requireGeoFence?: boolean;
33
+ };
34
+ branding: {
35
+ logoUrl: string;
36
+ primaryColor: string;
37
+ accentColor: string;
38
+ fontFamily?: string;
39
+ consentText: {
40
+ title: string;
41
+ description: string;
42
+ locale: string;
43
+ };
44
+ darkMode: boolean;
45
+ borderRadius: string;
46
+ };
47
+ approvalRequired: boolean;
48
+ approvalWorkflow?: {
49
+ enabled?: boolean;
50
+ mode?: "auto" | "manual" | "conditional";
51
+ notificationChannel?: "email" | "webhook" | "both";
52
+ };
53
+ webhooks?: {
54
+ id?: string;
55
+ url: string;
56
+ events: string[];
57
+ secret?: string;
58
+ active?: boolean;
59
+ retryPolicy?: {
60
+ maxRetries?: number;
61
+ backoffMultiplier?: number;
62
+ };
63
+ }[];
64
+ }
65
+ export declare class MandaitorConfigClient {
66
+ private baseUrl;
67
+ private authToken;
68
+ constructor(baseUrl: string, authToken: string);
69
+ getWidgetConfig(version?: number): Promise<WidgetConfiguration>;
70
+ updateWidgetConfig(config: Partial<WidgetConfiguration>): Promise<{
71
+ version: number;
72
+ widgetId: string;
73
+ }>;
74
+ validateIdPConfig(idpType: string, config: IdPConfig): Promise<{
75
+ valid: boolean;
76
+ message: string;
77
+ }>;
78
+ listConfigVersions(): Promise<{
79
+ version: number;
80
+ updatedAt: string;
81
+ }[]>;
82
+ rollbackConfig(version: number): Promise<void>;
83
+ getPublicWidgetConfig(widgetId: string): Promise<PublicWidgetConfig>;
84
+ }
85
+ export interface PublicWidgetConfig {
86
+ widgetId: string;
87
+ availableIdPs: {
88
+ type: IdPType;
89
+ tenantId?: string;
90
+ domain?: string;
91
+ orgId?: string;
92
+ orgUrl?: string;
93
+ presentationFlow?: {
94
+ mode: string;
95
+ };
96
+ requestedAttributes?: {
97
+ pid: string[];
98
+ eaa: string[];
99
+ };
100
+ }[];
101
+ taxonomyLibraries: string[];
102
+ mandateTemplates: {
103
+ id: string;
104
+ name: string;
105
+ description: string;
106
+ taxonomy: string;
107
+ actions: string[];
108
+ }[];
109
+ scopeRestrictions: string[];
110
+ constraintDefaults: {
111
+ maxDuration: number;
112
+ maxDelegationDepth: number;
113
+ requireMfa: boolean;
114
+ };
115
+ branding: {
116
+ logoUrl: string;
117
+ primaryColor: string;
118
+ accentColor: string;
119
+ fontFamily?: string;
120
+ consentText: {
121
+ title: string;
122
+ description: string;
123
+ locale: string;
124
+ };
125
+ darkMode: boolean;
126
+ borderRadius: string;
127
+ };
128
+ approvalRequired: boolean;
129
+ }
130
+ //# sourceMappingURL=widget-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widget-config.d.ts","sourceRoot":"","sources":["../src/widget-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ // Widget configuration types (formerly in @mandaitor/core)
2
+ export class MandaitorConfigClient {
3
+ baseUrl;
4
+ authToken;
5
+ constructor(baseUrl, authToken) {
6
+ this.baseUrl = baseUrl;
7
+ this.authToken = authToken;
8
+ }
9
+ // ── Tenant Dashboard Methods (require Cognito JWT) ────────────
10
+ async getWidgetConfig(version) {
11
+ const url = version ? `${this.baseUrl}/config?version=${version}` : `${this.baseUrl}/config`;
12
+ const res = await fetch(url, {
13
+ headers: { Authorization: `Bearer ${this.authToken}` },
14
+ });
15
+ if (!res.ok)
16
+ throw new Error(`Failed to get config: ${res.status}`);
17
+ return res.json();
18
+ }
19
+ async updateWidgetConfig(config) {
20
+ const res = await fetch(`${this.baseUrl}/config`, {
21
+ method: "PUT",
22
+ headers: {
23
+ Authorization: `Bearer ${this.authToken}`,
24
+ "Content-Type": "application/json",
25
+ },
26
+ body: JSON.stringify(config),
27
+ });
28
+ if (!res.ok)
29
+ throw new Error(`Failed to update config: ${res.status}`);
30
+ return res.json();
31
+ }
32
+ async validateIdPConfig(idpType, config) {
33
+ const res = await fetch(`${this.baseUrl}/config/validate-idp`, {
34
+ method: "POST",
35
+ headers: {
36
+ Authorization: `Bearer ${this.authToken}`,
37
+ "Content-Type": "application/json",
38
+ },
39
+ body: JSON.stringify({ idpType, config }),
40
+ });
41
+ if (!res.ok)
42
+ throw new Error(`Validation request failed: ${res.status}`);
43
+ const data = (await res.json());
44
+ return data.results[idpType];
45
+ }
46
+ async listConfigVersions() {
47
+ const res = await fetch(`${this.baseUrl}/config/versions`, {
48
+ headers: { Authorization: `Bearer ${this.authToken}` },
49
+ });
50
+ if (!res.ok)
51
+ throw new Error(`Failed to list versions: ${res.status}`);
52
+ return res.json();
53
+ }
54
+ async rollbackConfig(version) {
55
+ const res = await fetch(`${this.baseUrl}/config/rollback/${version}`, {
56
+ method: "POST",
57
+ headers: { Authorization: `Bearer ${this.authToken}` },
58
+ });
59
+ if (!res.ok)
60
+ throw new Error(`Rollback failed: ${res.status}`);
61
+ }
62
+ // ── Public Widget Methods (require API Key) ───────────────────
63
+ async getPublicWidgetConfig(widgetId) {
64
+ const res = await fetch(`${this.baseUrl}/public/widget/${widgetId}`, {
65
+ headers: { "X-API-Key": this.authToken },
66
+ });
67
+ if (!res.ok)
68
+ throw new Error(`Widget not found: ${res.status}`);
69
+ return res.json();
70
+ }
71
+ }
72
+ //# sourceMappingURL=widget-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widget-config.js","sourceRoot":"","sources":["../src/widget-config.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "@mandaitor/sdk",
3
+ "version": "0.1.1",
4
+ "description": "Mandaitor Delegation Mandate Registry — TypeScript SDK",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist",
9
+ "README.md",
10
+ "LICENSE"
11
+ ],
12
+ "exports": {
13
+ ".": {
14
+ "types": "./dist/index.d.ts",
15
+ "import": "./dist/index.js",
16
+ "require": "./dist/index.cjs"
17
+ }
18
+ },
19
+ "dependencies": {},
20
+ "devDependencies": {
21
+ "typescript": "^5.6.0",
22
+ "vitest": "^4.0.0"
23
+ },
24
+ "publishConfig": {
25
+ "registry": "https://registry.npmjs.org",
26
+ "access": "public"
27
+ },
28
+ "license": "MIT",
29
+ "repository": {
30
+ "type": "git",
31
+ "url": "https://github.com/C4RR13P0TT3R/mandaitor.git",
32
+ "directory": "packages/sdk"
33
+ },
34
+ "keywords": [
35
+ "mandaitor",
36
+ "delegation",
37
+ "mandate",
38
+ "ai-governance",
39
+ "trust",
40
+ "verification",
41
+ "proof-of-mandate",
42
+ "sd-jwt",
43
+ "verifiable-credentials",
44
+ "sdk",
45
+ "typescript",
46
+ "api-client"
47
+ ],
48
+ "homepage": "https://docs.mandaitor.io/docs/guides/getting-started",
49
+ "bugs": {
50
+ "url": "https://github.com/C4RR13P0TT3R/mandaitor/issues"
51
+ },
52
+ "author": "Mandaitor <support@mandaitor.io> (https://mandaitor.io)",
53
+ "scripts": {
54
+ "build": "tsc",
55
+ "test": "vitest run",
56
+ "test:unit": "vitest run --exclude test/integration.test.ts",
57
+ "test:integration": "vitest run test/integration.test.ts",
58
+ "typecheck": "tsc --noEmit",
59
+ "lint": "eslint src/",
60
+ "lint:fix": "eslint src/ --fix",
61
+ "clean": "rm -rf dist tsconfig.tsbuildinfo"
62
+ }
63
+ }