@mandate-os/sdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,28 @@
1
+ # `@mandate-os/sdk`
2
+
3
+ Tiny TypeScript SDK for MandateOS agent integrations.
4
+
5
+ It provides:
6
+
7
+ - `MandateOsAgentClient` for issuing mandates, evaluating actions, minting execution grants, and calling enforced execute routes
8
+ - `MandateOsAgentMiddleware` for the common evaluate -> require -> grant -> execute control loop
9
+ - The minimal public types needed by agent-side integrations
10
+
11
+ Current enforced GitHub helpers cover issue labeling and keeping pull requests in draft through MandateOS-owned execute routes.
12
+
13
+ Example:
14
+
15
+ ```ts
16
+ import { MandateOsAgentClient, MandateOsAgentMiddleware } from '@mandate-os/sdk';
17
+
18
+ const client = new MandateOsAgentClient({
19
+ baseUrl: 'http://localhost:4330',
20
+ bearerToken: process.env.MANDATE_OS_AGENT_TOKEN!,
21
+ defaultSource: 'codex.repo_steward',
22
+ });
23
+
24
+ const mandate = new MandateOsAgentMiddleware(client, {
25
+ mandateId: 'mdt_123',
26
+ source: 'codex.repo_steward',
27
+ });
28
+ ```
@@ -0,0 +1,47 @@
1
+ import type { ApiErrorIssue, ApiSuccessPayload, EnforcedExecutionInput, EnforcedExecutionResult, ExecutionGrantIssueInput, ExecutionGrantRecord, GitHubIssueLabelExecutionInput, GitHubIssueLabelExecutionResult, GitHubPullRequestDraftExecutionInput, GitHubPullRequestDraftExecutionResult, MandateRecord, RuntimeActionEvaluationInput, RuntimeSimulationBatch, SignatureVerificationResult } from './contracts';
2
+ import { type EnforcedExecutionKind } from './enforced-capabilities';
3
+ import type { MandateDraft } from './mandates';
4
+ type FetchLike = typeof fetch;
5
+ type MutationOptions = {
6
+ idempotencyKey?: string;
7
+ signal?: AbortSignal;
8
+ };
9
+ export type MandateOsAgentClientOptions = {
10
+ baseUrl: string;
11
+ bearerToken: string;
12
+ fetchImpl?: FetchLike;
13
+ defaultSource?: string;
14
+ };
15
+ export type MandateOsClientResponse<T> = ApiSuccessPayload<T> & {
16
+ headers: {
17
+ idempotencyKey: string | null;
18
+ idempotencyStatus: string | null;
19
+ originRequestId: string | null;
20
+ };
21
+ };
22
+ export declare class MandateOsAgentClientError extends Error {
23
+ readonly status: number;
24
+ readonly code?: string | undefined;
25
+ readonly requestId?: string | undefined;
26
+ readonly issues?: ApiErrorIssue[] | undefined;
27
+ constructor(message: string, status: number, code?: string | undefined, requestId?: string | undefined, issues?: ApiErrorIssue[] | undefined);
28
+ }
29
+ export declare class MandateOsAgentClient {
30
+ private readonly baseUrl;
31
+ private readonly fetchImpl;
32
+ private readonly bearerToken;
33
+ private readonly defaultSource?;
34
+ constructor(options: MandateOsAgentClientOptions);
35
+ issueMandate(draft: MandateDraft, options?: MutationOptions): Promise<MandateOsClientResponse<MandateRecord>>;
36
+ evaluateActions(input: RuntimeActionEvaluationInput, options?: MutationOptions): Promise<MandateOsClientResponse<RuntimeSimulationBatch>>;
37
+ issueExecutionGrant(input: ExecutionGrantIssueInput, options?: MutationOptions): Promise<MandateOsClientResponse<ExecutionGrantRecord>>;
38
+ executeEnforcedAction<K extends EnforcedExecutionKind>(kind: K, input: EnforcedExecutionInput<K>, options?: MutationOptions): Promise<MandateOsClientResponse<EnforcedExecutionResult<K>>>;
39
+ executeGitHubIssueLabel(input: GitHubIssueLabelExecutionInput, options?: MutationOptions): Promise<MandateOsClientResponse<GitHubIssueLabelExecutionResult>>;
40
+ executeGitHubPullRequestDraft(input: GitHubPullRequestDraftExecutionInput, options?: MutationOptions): Promise<MandateOsClientResponse<GitHubPullRequestDraftExecutionResult>>;
41
+ verifyMandate(mandateId: string, signal?: AbortSignal): Promise<MandateOsClientResponse<SignatureVerificationResult>>;
42
+ verifyReceipt(receiptId: string, signal?: AbortSignal): Promise<MandateOsClientResponse<SignatureVerificationResult>>;
43
+ verifyExecutionGrant(grantId: string, signal?: AbortSignal): Promise<MandateOsClientResponse<SignatureVerificationResult>>;
44
+ private request;
45
+ }
46
+ export {};
47
+ //# sourceMappingURL=agent-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-client.d.ts","sourceRoot":"","sources":["../../../packages/mandate-os-sdk/src/agent-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ import { getEnforcedExecutionCapability, } from './enforced-capabilities';
2
+ export class MandateOsAgentClientError extends Error {
3
+ constructor(message, status, code, requestId, issues) {
4
+ super(message);
5
+ this.status = status;
6
+ this.code = code;
7
+ this.requestId = requestId;
8
+ this.issues = issues;
9
+ this.name = 'MandateOsAgentClientError';
10
+ }
11
+ }
12
+ export class MandateOsAgentClient {
13
+ constructor(options) {
14
+ this.baseUrl = options.baseUrl.replace(/\/+$/, '');
15
+ this.fetchImpl = options.fetchImpl || fetch;
16
+ this.bearerToken = options.bearerToken;
17
+ this.defaultSource = options.defaultSource?.trim() || undefined;
18
+ }
19
+ async issueMandate(draft, options) {
20
+ return this.request('/api/v1/mandates', {
21
+ method: 'POST',
22
+ body: JSON.stringify(draft),
23
+ idempotencyKey: options?.idempotencyKey,
24
+ signal: options?.signal,
25
+ });
26
+ }
27
+ async evaluateActions(input, options) {
28
+ const payload = {
29
+ ...input,
30
+ source: input.source || this.defaultSource,
31
+ };
32
+ return this.request('/api/v1/runtime/evaluate-actions', {
33
+ method: 'POST',
34
+ body: JSON.stringify(payload),
35
+ idempotencyKey: options?.idempotencyKey,
36
+ signal: options?.signal,
37
+ });
38
+ }
39
+ async issueExecutionGrant(input, options) {
40
+ return this.request('/api/v1/runtime/execution-grants', {
41
+ method: 'POST',
42
+ body: JSON.stringify(input),
43
+ idempotencyKey: options?.idempotencyKey,
44
+ signal: options?.signal,
45
+ });
46
+ }
47
+ async executeEnforcedAction(kind, input, options) {
48
+ const capability = getEnforcedExecutionCapability(kind);
49
+ return this.request(capability.executePath, {
50
+ method: 'POST',
51
+ body: JSON.stringify(input),
52
+ idempotencyKey: options?.idempotencyKey,
53
+ signal: options?.signal,
54
+ });
55
+ }
56
+ async executeGitHubIssueLabel(input, options) {
57
+ return this.executeEnforcedAction('github.issue.label', input, options);
58
+ }
59
+ async executeGitHubPullRequestDraft(input, options) {
60
+ return this.executeEnforcedAction('github.pull_request.draft', input, options);
61
+ }
62
+ async verifyMandate(mandateId, signal) {
63
+ return this.request(`/api/v1/mandates/${encodeURIComponent(mandateId)}/verify`, {
64
+ method: 'GET',
65
+ signal,
66
+ });
67
+ }
68
+ async verifyReceipt(receiptId, signal) {
69
+ return this.request(`/api/v1/receipts/${encodeURIComponent(receiptId)}/verify`, {
70
+ method: 'GET',
71
+ signal,
72
+ });
73
+ }
74
+ async verifyExecutionGrant(grantId, signal) {
75
+ return this.request(`/api/v1/execution-grants/${encodeURIComponent(grantId)}/verify`, {
76
+ method: 'GET',
77
+ signal,
78
+ });
79
+ }
80
+ async request(path, init) {
81
+ const method = (init.method || 'GET').toUpperCase();
82
+ const headers = new Headers(init.headers);
83
+ headers.set('accept', 'application/json');
84
+ headers.set('authorization', `Bearer ${this.bearerToken}`);
85
+ if (init.body !== undefined && !headers.has('content-type')) {
86
+ headers.set('content-type', 'application/json');
87
+ }
88
+ if (['POST', 'PUT', 'PATCH', 'DELETE'].includes(method) &&
89
+ !headers.has('idempotency-key')) {
90
+ headers.set('idempotency-key', init.idempotencyKey || createIdempotencyKey());
91
+ }
92
+ const response = await this.fetchImpl(`${this.baseUrl}${path}`, {
93
+ ...init,
94
+ method,
95
+ headers,
96
+ });
97
+ const payload = (await response.json().catch(() => null));
98
+ if (!response.ok || !payload?.meta || payload.data === undefined) {
99
+ throw new MandateOsAgentClientError(payload?.error?.issues?.[0]?.message ||
100
+ payload?.error?.message ||
101
+ 'MandateOS request failed.', response.status, payload?.error?.code, payload?.meta?.requestId, payload?.error?.issues);
102
+ }
103
+ return {
104
+ data: payload.data,
105
+ meta: payload.meta,
106
+ headers: {
107
+ idempotencyKey: response.headers.get('x-idempotency-key'),
108
+ idempotencyStatus: response.headers.get('x-idempotency-status'),
109
+ originRequestId: response.headers.get('x-idempotency-origin-request-id'),
110
+ },
111
+ };
112
+ }
113
+ }
114
+ function createIdempotencyKey() {
115
+ if (typeof crypto !== 'undefined' &&
116
+ typeof crypto.randomUUID === 'function') {
117
+ return `agent_${crypto.randomUUID()}`;
118
+ }
119
+ return `agent_${Date.now().toString(36)}`;
120
+ }
121
+ //# sourceMappingURL=agent-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-client.js","sourceRoot":"","sources":["../../../packages/mandate-os-sdk/src/agent-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ import type { EnforcedExecutionPayloadByKind, EnforcedExecutionResultByKind, ExecutionGrantRecord, GitHubIssueLabelExecutionPayload, GitHubIssueLabelExecutionResult, GitHubPullRequestDraftExecutionPayload, GitHubPullRequestDraftExecutionResult, ReceiptRecord, RuntimeSimulationBatch } from './contracts';
2
+ import { type EnforcedExecutionKind } from './enforced-capabilities';
3
+ import type { ActionScenario } from './mandates';
4
+ import { MandateOsAgentClient } from './agent-client';
5
+ type BaseActionOptions = {
6
+ mandateId?: string;
7
+ source?: string;
8
+ details?: Record<string, unknown>;
9
+ evaluationIdempotencyKey?: string;
10
+ };
11
+ type GitHubIssueLabelActionOptions = BaseActionOptions & {
12
+ action: ActionScenario;
13
+ payload: GitHubIssueLabelExecutionPayload;
14
+ grantExpiresInSeconds?: number;
15
+ grantIdempotencyKey?: string;
16
+ executeIdempotencyKey?: string;
17
+ };
18
+ type GitHubPullRequestDraftActionOptions = BaseActionOptions & {
19
+ action: ActionScenario;
20
+ payload: GitHubPullRequestDraftExecutionPayload;
21
+ grantExpiresInSeconds?: number;
22
+ grantIdempotencyKey?: string;
23
+ executeIdempotencyKey?: string;
24
+ };
25
+ type EnforcedActionOptions<K extends EnforcedExecutionKind> = BaseActionOptions & {
26
+ kind: K;
27
+ action: ActionScenario;
28
+ payload: EnforcedExecutionPayloadByKind[K];
29
+ grantExpiresInSeconds?: number;
30
+ grantIdempotencyKey?: string;
31
+ executeIdempotencyKey?: string;
32
+ };
33
+ export declare class MandateOsPolicyDecisionError extends Error {
34
+ readonly receipt: ReceiptRecord;
35
+ constructor(receipt: ReceiptRecord);
36
+ }
37
+ export declare class MandateOsAgentMiddleware {
38
+ private readonly client;
39
+ private readonly defaults;
40
+ constructor(client: MandateOsAgentClient, defaults?: {
41
+ mandateId?: string;
42
+ source?: string;
43
+ details?: Record<string, unknown>;
44
+ });
45
+ evaluateAction(input: BaseActionOptions & {
46
+ action: ActionScenario;
47
+ }): Promise<{
48
+ evaluation: RuntimeSimulationBatch;
49
+ receipt: ReceiptRecord;
50
+ }>;
51
+ requireAllowed(input: BaseActionOptions & {
52
+ action: ActionScenario;
53
+ }): Promise<{
54
+ evaluation: RuntimeSimulationBatch;
55
+ receipt: ReceiptRecord;
56
+ }>;
57
+ withMandateCheck<T>(input: BaseActionOptions & {
58
+ action: ActionScenario;
59
+ }, executor: (input: {
60
+ receipt: ReceiptRecord;
61
+ evaluation: RuntimeSimulationBatch;
62
+ }) => Promise<T>): Promise<T>;
63
+ executeGitHubIssueLabel(input: GitHubIssueLabelActionOptions): Promise<{
64
+ evaluation: RuntimeSimulationBatch;
65
+ receipt: ReceiptRecord;
66
+ grant: ExecutionGrantRecord;
67
+ execution: GitHubIssueLabelExecutionResult;
68
+ }>;
69
+ executeGitHubPullRequestDraft(input: GitHubPullRequestDraftActionOptions): Promise<{
70
+ evaluation: RuntimeSimulationBatch;
71
+ receipt: ReceiptRecord;
72
+ grant: ExecutionGrantRecord;
73
+ execution: GitHubPullRequestDraftExecutionResult;
74
+ }>;
75
+ executeEnforcedAction<K extends EnforcedExecutionKind>(input: EnforcedActionOptions<K>): Promise<{
76
+ evaluation: RuntimeSimulationBatch;
77
+ receipt: ReceiptRecord;
78
+ grant: ExecutionGrantRecord;
79
+ execution: EnforcedExecutionResultByKind[K];
80
+ }>;
81
+ }
82
+ export {};
83
+ //# sourceMappingURL=agent-middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-middleware.d.ts","sourceRoot":"","sources":["../../../packages/mandate-os-sdk/src/agent-middleware.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ import { getEnforcedExecutionCapability, } from './enforced-capabilities';
2
+ export class MandateOsPolicyDecisionError extends Error {
3
+ constructor(receipt) {
4
+ super(`MandateOS returned ${receipt.decision} for ${receipt.title}: ${receipt.reasons.join(' ')}`);
5
+ this.receipt = receipt;
6
+ this.name = 'MandateOsPolicyDecisionError';
7
+ }
8
+ }
9
+ export class MandateOsAgentMiddleware {
10
+ constructor(client, defaults = {}) {
11
+ this.client = client;
12
+ this.defaults = defaults;
13
+ }
14
+ async evaluateAction(input) {
15
+ const mandateId = input.mandateId || this.defaults.mandateId;
16
+ if (!mandateId) {
17
+ throw new Error('Mandate id is required. Pass it to the middleware defaults or the action call.');
18
+ }
19
+ const evaluation = await this.client.evaluateActions({
20
+ mandateId,
21
+ source: input.source || this.defaults.source,
22
+ details: {
23
+ ...(this.defaults.details || {}),
24
+ ...(input.details || {}),
25
+ },
26
+ actions: [input.action],
27
+ }, {
28
+ idempotencyKey: input.evaluationIdempotencyKey,
29
+ });
30
+ const receipt = evaluation.data.receipts[0];
31
+ if (!receipt) {
32
+ throw new Error('MandateOS did not return a receipt for the evaluated action.');
33
+ }
34
+ return {
35
+ evaluation: evaluation.data,
36
+ receipt,
37
+ };
38
+ }
39
+ async requireAllowed(input) {
40
+ const result = await this.evaluateAction(input);
41
+ if (result.receipt.decision !== 'allowed') {
42
+ throw new MandateOsPolicyDecisionError(result.receipt);
43
+ }
44
+ return result;
45
+ }
46
+ async withMandateCheck(input, executor) {
47
+ const result = await this.requireAllowed(input);
48
+ return executor(result);
49
+ }
50
+ async executeGitHubIssueLabel(input) {
51
+ return this.executeEnforcedAction({
52
+ ...input,
53
+ kind: 'github.issue.label',
54
+ });
55
+ }
56
+ async executeGitHubPullRequestDraft(input) {
57
+ return this.executeEnforcedAction({
58
+ ...input,
59
+ kind: 'github.pull_request.draft',
60
+ });
61
+ }
62
+ async executeEnforcedAction(input) {
63
+ const capability = getEnforcedExecutionCapability(input.kind);
64
+ if (input.action.tool !== capability.actionTool) {
65
+ throw new Error(`action.tool must be ${capability.actionTool} for ${input.kind}.`);
66
+ }
67
+ const allowed = await this.requireAllowed(input);
68
+ const grantInput = {
69
+ receiptId: allowed.receipt.id,
70
+ kind: input.kind,
71
+ payload: input.payload,
72
+ expiresInSeconds: input.grantExpiresInSeconds,
73
+ };
74
+ const grant = await this.client.issueExecutionGrant(grantInput, {
75
+ idempotencyKey: input.grantIdempotencyKey,
76
+ });
77
+ const execution = await this.client.executeEnforcedAction(input.kind, {
78
+ grantId: grant.data.id,
79
+ payload: input.payload,
80
+ }, {
81
+ idempotencyKey: input.executeIdempotencyKey,
82
+ });
83
+ return {
84
+ evaluation: allowed.evaluation,
85
+ receipt: allowed.receipt,
86
+ grant: grant.data,
87
+ execution: execution.data,
88
+ };
89
+ }
90
+ }
91
+ //# sourceMappingURL=agent-middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-middleware.js","sourceRoot":"","sources":["../../../packages/mandate-os-sdk/src/agent-middleware.ts"],"names":[],"mappings":"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"}
package/contracts.d.ts ADDED
@@ -0,0 +1,191 @@
1
+ import type { ActionScenario, Decision, MandateDraft, ToolId, Zone } from './mandates';
2
+ import type { EnforcedExecutionKind } from './enforced-capabilities';
3
+ export type SignatureEnvelope = {
4
+ algorithm: 'hmac-sha256';
5
+ keyId: string;
6
+ payloadHash: string;
7
+ signature: string;
8
+ signedAt: string;
9
+ };
10
+ export type AuditActorType = 'human' | 'service' | 'agent' | 'system';
11
+ export type AuditActor = {
12
+ type: AuditActorType;
13
+ id: string;
14
+ displayName: string;
15
+ };
16
+ export type AuditMetadata = {
17
+ requestId: string;
18
+ source: string;
19
+ actor: AuditActor;
20
+ workspaceId: string;
21
+ ipAddress: string | null;
22
+ userAgent: string | null;
23
+ };
24
+ export type MandateStatus = 'active' | 'revoked';
25
+ export type ExecutionGrantKind = EnforcedExecutionKind;
26
+ export type ExecutionGrantStatus = 'active' | 'consumed' | 'expired' | 'revoked';
27
+ export type GitHubIssueLabelExecutionPayload = {
28
+ owner: string;
29
+ repo: string;
30
+ issueNumber: number;
31
+ labels: string[];
32
+ };
33
+ export type GitHubPullRequestDraftExecutionPayload = {
34
+ owner: string;
35
+ repo: string;
36
+ pullRequestNumber: number;
37
+ };
38
+ export type EnforcedExecutionPayloadByKind = {
39
+ 'github.issue.label': GitHubIssueLabelExecutionPayload;
40
+ 'github.pull_request.draft': GitHubPullRequestDraftExecutionPayload;
41
+ };
42
+ export type ExecutionGrantRecord = {
43
+ id: string;
44
+ workspaceId: string;
45
+ receiptId: string;
46
+ mandateId: string;
47
+ kind: ExecutionGrantKind;
48
+ payloadHash: string;
49
+ payloadPreview: Record<string, unknown>;
50
+ status: ExecutionGrantStatus;
51
+ createdAt: string;
52
+ expiresAt: string;
53
+ consumedAt: string | null;
54
+ consumedRequestId: string | null;
55
+ revokedAt: string | null;
56
+ audit: AuditMetadata;
57
+ signature: SignatureEnvelope;
58
+ };
59
+ export type GitHubIssueLabelExecutionGrantInput = {
60
+ receiptId: string;
61
+ kind: 'github.issue.label';
62
+ payload: GitHubIssueLabelExecutionPayload;
63
+ expiresInSeconds?: number;
64
+ };
65
+ export type GitHubPullRequestDraftExecutionGrantInput = {
66
+ receiptId: string;
67
+ kind: 'github.pull_request.draft';
68
+ payload: GitHubPullRequestDraftExecutionPayload;
69
+ expiresInSeconds?: number;
70
+ };
71
+ export type ExecutionGrantIssueInput = {
72
+ [K in ExecutionGrantKind]: {
73
+ receiptId: string;
74
+ kind: K;
75
+ payload: EnforcedExecutionPayloadByKind[K];
76
+ expiresInSeconds?: number;
77
+ };
78
+ }[ExecutionGrantKind];
79
+ export type GitHubIssueLabelExecutionInput = {
80
+ grantId: string;
81
+ payload: GitHubIssueLabelExecutionPayload;
82
+ };
83
+ export type GitHubPullRequestDraftExecutionInput = {
84
+ grantId: string;
85
+ payload: GitHubPullRequestDraftExecutionPayload;
86
+ };
87
+ export type EnforcedExecutionInput<K extends ExecutionGrantKind> = {
88
+ grantId: string;
89
+ payload: EnforcedExecutionPayloadByKind[K];
90
+ };
91
+ export type GitHubIssueLabelExecutionResult = {
92
+ grantId: string;
93
+ receiptId: string;
94
+ mandateId: string;
95
+ executedAt: string;
96
+ owner: string;
97
+ repo: string;
98
+ issueNumber: number;
99
+ labels: string[];
100
+ };
101
+ export type GitHubPullRequestDraftExecutionResult = {
102
+ grantId: string;
103
+ receiptId: string;
104
+ mandateId: string;
105
+ executedAt: string;
106
+ owner: string;
107
+ repo: string;
108
+ pullRequestNumber: number;
109
+ isDraft: true;
110
+ wasAlreadyDraft: boolean;
111
+ url: string | null;
112
+ };
113
+ export type EnforcedExecutionResultByKind = {
114
+ 'github.issue.label': GitHubIssueLabelExecutionResult;
115
+ 'github.pull_request.draft': GitHubPullRequestDraftExecutionResult;
116
+ };
117
+ export type EnforcedExecutionResult<K extends ExecutionGrantKind> = EnforcedExecutionResultByKind[K];
118
+ export type MandateRecord = MandateDraft & {
119
+ id: string;
120
+ workspaceId: string;
121
+ version: number;
122
+ status: MandateStatus;
123
+ issuedAt: string;
124
+ updatedAt: string;
125
+ policyText: string;
126
+ fingerprint: string;
127
+ signature: SignatureEnvelope;
128
+ audit: AuditMetadata;
129
+ };
130
+ export type MandateSummary = Pick<MandateRecord, 'id' | 'workspaceId' | 'version' | 'status' | 'issuedAt' | 'updatedAt' | 'owner' | 'agentName' | 'purpose' | 'monthlyCapNok' | 'allowedRegion' | 'fingerprint'>;
131
+ export type ReceiptRecord = {
132
+ id: string;
133
+ batchId: string;
134
+ receiptType: 'simulation';
135
+ workspaceId: string;
136
+ mandateId: string;
137
+ mandateVersion: number;
138
+ createdAt: string;
139
+ scenarioId: string;
140
+ title: string;
141
+ description: string;
142
+ tool: ToolId;
143
+ amountNok: number;
144
+ termMonths: number;
145
+ zone: Zone;
146
+ decision: Decision;
147
+ reasons: string[];
148
+ signature: SignatureEnvelope;
149
+ audit: AuditMetadata;
150
+ };
151
+ export type RuntimeSimulationBatch = {
152
+ batchId: string;
153
+ generatedAt: string;
154
+ mandate: MandateSummary;
155
+ receipts: ReceiptRecord[];
156
+ audit: AuditMetadata;
157
+ };
158
+ export type RuntimeActionEvaluationInput = {
159
+ mandateId: string;
160
+ actions: ActionScenario[];
161
+ source?: string | null;
162
+ details?: Record<string, unknown> | null;
163
+ };
164
+ export type SignatureVerificationResult = {
165
+ resourceType: 'mandate' | 'receipt' | 'execution_grant';
166
+ resourceId: string;
167
+ keyId: string;
168
+ algorithm: 'hmac-sha256';
169
+ valid: boolean;
170
+ verifiedAt: string;
171
+ };
172
+ export type ApiErrorIssue = {
173
+ path: string;
174
+ message: string;
175
+ };
176
+ export type ApiResponseMeta = {
177
+ requestId: string;
178
+ };
179
+ export type ApiSuccessPayload<T> = {
180
+ data: T;
181
+ meta: ApiResponseMeta;
182
+ };
183
+ export type ApiErrorPayload = {
184
+ error: {
185
+ code: string;
186
+ message: string;
187
+ issues?: ApiErrorIssue[];
188
+ };
189
+ meta?: ApiResponseMeta;
190
+ };
191
+ //# sourceMappingURL=contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../../packages/mandate-os-sdk/src/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,MAAM,EACN,IAAI,EACL,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAErE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,aAAa,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEtE,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,cAAc,CAAC;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,UAAU,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,SAAS,CAAC;AACjD,MAAM,MAAM,kBAAkB,GAAG,qBAAqB,CAAC;AACvD,MAAM,MAAM,oBAAoB,GAC5B,QAAQ,GACR,UAAU,GACV,SAAS,GACT,SAAS,CAAC;AAEd,MAAM,MAAM,gCAAgC,GAAG;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,sCAAsC,GAAG;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC3C,oBAAoB,EAAE,gCAAgC,CAAC;IACvD,2BAA2B,EAAE,sCAAsC,CAAC;CACrE,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,kBAAkB,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,MAAM,EAAE,oBAAoB,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,EAAE,iBAAiB,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,mCAAmC,GAAG;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,oBAAoB,CAAC;IAC3B,OAAO,EAAE,gCAAgC,CAAC;IAC1C,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,yCAAyC,GAAG;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,2BAA2B,CAAC;IAClC,OAAO,EAAE,sCAAsC,CAAC;IAChD,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;KACpC,CAAC,IAAI,kBAAkB,GAAG;QACzB,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,CAAC,CAAC;QACR,OAAO,EAAE,8BAA8B,CAAC,CAAC,CAAC,CAAC;QAC3C,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B;CACF,CAAC,kBAAkB,CAAC,CAAC;AAEtB,MAAM,MAAM,8BAA8B,GAAG;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,gCAAgC,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,oCAAoC,GAAG;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,sCAAsC,CAAC;CACjD,CAAC;AAEF,MAAM,MAAM,sBAAsB,CAAC,CAAC,SAAS,kBAAkB,IAAI;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,8BAA8B,CAAC,CAAC,CAAC,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,qCAAqC,GAAG;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,IAAI,CAAC;IACd,eAAe,EAAE,OAAO,CAAC;IACzB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,oBAAoB,EAAE,+BAA+B,CAAC;IACtD,2BAA2B,EAAE,qCAAqC,CAAC;CACpE,CAAC;AAEF,MAAM,MAAM,uBAAuB,CAAC,CAAC,SAAS,kBAAkB,IAC9D,6BAA6B,CAAC,CAAC,CAAC,CAAC;AAEnC,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,iBAAiB,CAAC;IAC7B,KAAK,EAAE,aAAa,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,IAAI,CAC/B,aAAa,EACX,IAAI,GACJ,aAAa,GACb,SAAS,GACT,QAAQ,GACR,UAAU,GACV,WAAW,GACX,OAAO,GACP,WAAW,GACX,SAAS,GACT,eAAe,GACf,eAAe,GACf,aAAa,CAChB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,YAAY,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,iBAAiB,CAAC;IAC7B,KAAK,EAAE,aAAa,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,cAAc,CAAC;IACxB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,KAAK,EAAE,aAAa,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,YAAY,EAAE,SAAS,GAAG,SAAS,GAAG,iBAAiB,CAAC;IACxD,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,aAAa,CAAC;IACzB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI;IACjC,IAAI,EAAE,CAAC,CAAC;IACR,IAAI,EAAE,eAAe,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;KAC1B,CAAC;IACF,IAAI,CAAC,EAAE,eAAe,CAAC;CACxB,CAAC"}
package/contracts.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../../packages/mandate-os-sdk/src/contracts.ts"],"names":[],"mappings":""}