@stellar-agent/policy 0.4.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 stellar-agent-bridge contributors
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.
@@ -0,0 +1,359 @@
1
+ import { PaymentRequest } from "@stellar-agent/core";
2
+ import { z } from "zod";
3
+ export type PolicyDecisionStatus = "allowed" | "denied" | "requires_approval";
4
+ export type DefiBlendRequestType = "supply" | "withdraw" | "supply_collateral" | "withdraw_collateral" | "borrow" | "repay";
5
+ export type MarketLiquidityAction = "deposit" | "withdraw";
6
+ export interface PolicyDecision {
7
+ status: PolicyDecisionStatus;
8
+ network: "testnet" | "mainnet" | "local";
9
+ realFunds: boolean;
10
+ matchedRules: string[];
11
+ reasons: string[];
12
+ approval?: {
13
+ required: boolean;
14
+ reason: string;
15
+ };
16
+ }
17
+ export interface SpendHistory {
18
+ dailyTotal?: string;
19
+ monthlyTotal?: string;
20
+ knownRecipients?: string[];
21
+ knownDomains?: string[];
22
+ unreadable?: boolean;
23
+ }
24
+ export interface DefiBlendPolicyRequest {
25
+ network: "testnet" | "mainnet" | "local";
26
+ pool: string;
27
+ requestTypes: DefiBlendRequestType[];
28
+ borrowValue?: string;
29
+ protocolExposureValue?: string;
30
+ healthFactorAfter?: number | null;
31
+ }
32
+ export interface MarketLiquidityPolicyRequest {
33
+ network: "testnet" | "mainnet" | "local";
34
+ pool: string;
35
+ assets: string[];
36
+ action: MarketLiquidityAction;
37
+ exposureValue?: string;
38
+ priceBoundsProvided?: boolean;
39
+ }
40
+ export declare const policySchema: z.ZodObject<{
41
+ version: z.ZodLiteral<1>;
42
+ name: z.ZodString;
43
+ network: z.ZodEnum<["testnet", "mainnet", "local"]>;
44
+ assets: z.ZodObject<{
45
+ allow: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
46
+ }, "strip", z.ZodTypeAny, {
47
+ allow: string[];
48
+ }, {
49
+ allow?: string[] | undefined;
50
+ }>;
51
+ limits: z.ZodObject<{
52
+ perTransaction: z.ZodString;
53
+ dailyTotal: z.ZodString;
54
+ monthlyTotal: z.ZodString;
55
+ }, "strip", z.ZodTypeAny, {
56
+ perTransaction: string;
57
+ dailyTotal: string;
58
+ monthlyTotal: string;
59
+ }, {
60
+ perTransaction: string;
61
+ dailyTotal: string;
62
+ monthlyTotal: string;
63
+ }>;
64
+ approval: z.ZodObject<{
65
+ requireForAllPayments: z.ZodDefault<z.ZodBoolean>;
66
+ requireForNewRecipient: z.ZodDefault<z.ZodBoolean>;
67
+ requireForNewDomain: z.ZodDefault<z.ZodBoolean>;
68
+ requireAbove: z.ZodString;
69
+ }, "strip", z.ZodTypeAny, {
70
+ requireForAllPayments: boolean;
71
+ requireForNewRecipient: boolean;
72
+ requireForNewDomain: boolean;
73
+ requireAbove: string;
74
+ }, {
75
+ requireAbove: string;
76
+ requireForAllPayments?: boolean | undefined;
77
+ requireForNewRecipient?: boolean | undefined;
78
+ requireForNewDomain?: boolean | undefined;
79
+ }>;
80
+ x402: z.ZodDefault<z.ZodObject<{
81
+ enabled: z.ZodDefault<z.ZodBoolean>;
82
+ allowDomains: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
83
+ maxPricePerRequest: z.ZodDefault<z.ZodString>;
84
+ bindPaymentToUrl: z.ZodDefault<z.ZodBoolean>;
85
+ denyRedirectPaymentChanges: z.ZodDefault<z.ZodBoolean>;
86
+ }, "strip", z.ZodTypeAny, {
87
+ enabled: boolean;
88
+ allowDomains: string[];
89
+ maxPricePerRequest: string;
90
+ bindPaymentToUrl: boolean;
91
+ denyRedirectPaymentChanges: boolean;
92
+ }, {
93
+ enabled?: boolean | undefined;
94
+ allowDomains?: string[] | undefined;
95
+ maxPricePerRequest?: string | undefined;
96
+ bindPaymentToUrl?: boolean | undefined;
97
+ denyRedirectPaymentChanges?: boolean | undefined;
98
+ }>>;
99
+ safety: z.ZodOptional<z.ZodObject<{
100
+ simulationRequired: z.ZodDefault<z.ZodBoolean>;
101
+ explainTransactionRequired: z.ZodDefault<z.ZodBoolean>;
102
+ blockBlindSigning: z.ZodDefault<z.ZodBoolean>;
103
+ blockOpaqueTransactions: z.ZodDefault<z.ZodBoolean>;
104
+ }, "strip", z.ZodTypeAny, {
105
+ simulationRequired: boolean;
106
+ explainTransactionRequired: boolean;
107
+ blockBlindSigning: boolean;
108
+ blockOpaqueTransactions: boolean;
109
+ }, {
110
+ simulationRequired?: boolean | undefined;
111
+ explainTransactionRequired?: boolean | undefined;
112
+ blockBlindSigning?: boolean | undefined;
113
+ blockOpaqueTransactions?: boolean | undefined;
114
+ }>>;
115
+ market: z.ZodDefault<z.ZodObject<{
116
+ liquidity: z.ZodDefault<z.ZodObject<{
117
+ enabled: z.ZodDefault<z.ZodBoolean>;
118
+ allowedPools: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
119
+ allowedAssets: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
120
+ allowedActions: z.ZodDefault<z.ZodArray<z.ZodEnum<["deposit", "withdraw"]>, "many">>;
121
+ maxPoolExposureValue: z.ZodDefault<z.ZodString>;
122
+ requirePriceBounds: z.ZodDefault<z.ZodBoolean>;
123
+ }, "strip", z.ZodTypeAny, {
124
+ enabled: boolean;
125
+ allowedPools: string[];
126
+ allowedAssets: string[];
127
+ allowedActions: ("deposit" | "withdraw")[];
128
+ maxPoolExposureValue: string;
129
+ requirePriceBounds: boolean;
130
+ }, {
131
+ enabled?: boolean | undefined;
132
+ allowedPools?: string[] | undefined;
133
+ allowedAssets?: string[] | undefined;
134
+ allowedActions?: ("deposit" | "withdraw")[] | undefined;
135
+ maxPoolExposureValue?: string | undefined;
136
+ requirePriceBounds?: boolean | undefined;
137
+ }>>;
138
+ }, "strip", z.ZodTypeAny, {
139
+ liquidity: {
140
+ enabled: boolean;
141
+ allowedPools: string[];
142
+ allowedAssets: string[];
143
+ allowedActions: ("deposit" | "withdraw")[];
144
+ maxPoolExposureValue: string;
145
+ requirePriceBounds: boolean;
146
+ };
147
+ }, {
148
+ liquidity?: {
149
+ enabled?: boolean | undefined;
150
+ allowedPools?: string[] | undefined;
151
+ allowedAssets?: string[] | undefined;
152
+ allowedActions?: ("deposit" | "withdraw")[] | undefined;
153
+ maxPoolExposureValue?: string | undefined;
154
+ requirePriceBounds?: boolean | undefined;
155
+ } | undefined;
156
+ }>>;
157
+ defi: z.ZodDefault<z.ZodObject<{
158
+ blend: z.ZodDefault<z.ZodObject<{
159
+ enabled: z.ZodDefault<z.ZodBoolean>;
160
+ allowedPools: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
161
+ allowedRequestTypes: z.ZodDefault<z.ZodArray<z.ZodEnum<["supply", "withdraw", "supply_collateral", "withdraw_collateral", "borrow", "repay"]>, "many">>;
162
+ maxBorrowValue: z.ZodDefault<z.ZodString>;
163
+ maxProtocolExposureValue: z.ZodDefault<z.ZodString>;
164
+ minimumHealthFactor: z.ZodDefault<z.ZodNumber>;
165
+ requireSimulation: z.ZodDefault<z.ZodBoolean>;
166
+ }, "strip", z.ZodTypeAny, {
167
+ enabled: boolean;
168
+ allowedPools: string[];
169
+ allowedRequestTypes: ("withdraw" | "supply" | "supply_collateral" | "withdraw_collateral" | "borrow" | "repay")[];
170
+ maxBorrowValue: string;
171
+ maxProtocolExposureValue: string;
172
+ minimumHealthFactor: number;
173
+ requireSimulation: boolean;
174
+ }, {
175
+ enabled?: boolean | undefined;
176
+ allowedPools?: string[] | undefined;
177
+ allowedRequestTypes?: ("withdraw" | "supply" | "supply_collateral" | "withdraw_collateral" | "borrow" | "repay")[] | undefined;
178
+ maxBorrowValue?: string | undefined;
179
+ maxProtocolExposureValue?: string | undefined;
180
+ minimumHealthFactor?: number | undefined;
181
+ requireSimulation?: boolean | undefined;
182
+ }>>;
183
+ }, "strip", z.ZodTypeAny, {
184
+ blend: {
185
+ enabled: boolean;
186
+ allowedPools: string[];
187
+ allowedRequestTypes: ("withdraw" | "supply" | "supply_collateral" | "withdraw_collateral" | "borrow" | "repay")[];
188
+ maxBorrowValue: string;
189
+ maxProtocolExposureValue: string;
190
+ minimumHealthFactor: number;
191
+ requireSimulation: boolean;
192
+ };
193
+ }, {
194
+ blend?: {
195
+ enabled?: boolean | undefined;
196
+ allowedPools?: string[] | undefined;
197
+ allowedRequestTypes?: ("withdraw" | "supply" | "supply_collateral" | "withdraw_collateral" | "borrow" | "repay")[] | undefined;
198
+ maxBorrowValue?: string | undefined;
199
+ maxProtocolExposureValue?: string | undefined;
200
+ minimumHealthFactor?: number | undefined;
201
+ requireSimulation?: boolean | undefined;
202
+ } | undefined;
203
+ }>>;
204
+ privacy: z.ZodObject<{
205
+ redactUrlQueryParamsInLogs: z.ZodDefault<z.ZodBoolean>;
206
+ blockPiiInReason: z.ZodDefault<z.ZodBoolean>;
207
+ blockedMemoPatterns: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
208
+ }, "strip", z.ZodTypeAny, {
209
+ redactUrlQueryParamsInLogs: boolean;
210
+ blockPiiInReason: boolean;
211
+ blockedMemoPatterns: string[];
212
+ }, {
213
+ redactUrlQueryParamsInLogs?: boolean | undefined;
214
+ blockPiiInReason?: boolean | undefined;
215
+ blockedMemoPatterns?: string[] | undefined;
216
+ }>;
217
+ logging: z.ZodObject<{
218
+ writeReceipts: z.ZodDefault<z.ZodBoolean>;
219
+ writeEventLog: z.ZodDefault<z.ZodBoolean>;
220
+ }, "strip", z.ZodTypeAny, {
221
+ writeReceipts: boolean;
222
+ writeEventLog: boolean;
223
+ }, {
224
+ writeReceipts?: boolean | undefined;
225
+ writeEventLog?: boolean | undefined;
226
+ }>;
227
+ }, "strip", z.ZodTypeAny, {
228
+ version: 1;
229
+ name: string;
230
+ network: "testnet" | "mainnet" | "local";
231
+ assets: {
232
+ allow: string[];
233
+ };
234
+ limits: {
235
+ perTransaction: string;
236
+ dailyTotal: string;
237
+ monthlyTotal: string;
238
+ };
239
+ approval: {
240
+ requireForAllPayments: boolean;
241
+ requireForNewRecipient: boolean;
242
+ requireForNewDomain: boolean;
243
+ requireAbove: string;
244
+ };
245
+ x402: {
246
+ enabled: boolean;
247
+ allowDomains: string[];
248
+ maxPricePerRequest: string;
249
+ bindPaymentToUrl: boolean;
250
+ denyRedirectPaymentChanges: boolean;
251
+ };
252
+ market: {
253
+ liquidity: {
254
+ enabled: boolean;
255
+ allowedPools: string[];
256
+ allowedAssets: string[];
257
+ allowedActions: ("deposit" | "withdraw")[];
258
+ maxPoolExposureValue: string;
259
+ requirePriceBounds: boolean;
260
+ };
261
+ };
262
+ defi: {
263
+ blend: {
264
+ enabled: boolean;
265
+ allowedPools: string[];
266
+ allowedRequestTypes: ("withdraw" | "supply" | "supply_collateral" | "withdraw_collateral" | "borrow" | "repay")[];
267
+ maxBorrowValue: string;
268
+ maxProtocolExposureValue: string;
269
+ minimumHealthFactor: number;
270
+ requireSimulation: boolean;
271
+ };
272
+ };
273
+ privacy: {
274
+ redactUrlQueryParamsInLogs: boolean;
275
+ blockPiiInReason: boolean;
276
+ blockedMemoPatterns: string[];
277
+ };
278
+ logging: {
279
+ writeReceipts: boolean;
280
+ writeEventLog: boolean;
281
+ };
282
+ safety?: {
283
+ simulationRequired: boolean;
284
+ explainTransactionRequired: boolean;
285
+ blockBlindSigning: boolean;
286
+ blockOpaqueTransactions: boolean;
287
+ } | undefined;
288
+ }, {
289
+ version: 1;
290
+ name: string;
291
+ network: "testnet" | "mainnet" | "local";
292
+ assets: {
293
+ allow?: string[] | undefined;
294
+ };
295
+ limits: {
296
+ perTransaction: string;
297
+ dailyTotal: string;
298
+ monthlyTotal: string;
299
+ };
300
+ approval: {
301
+ requireAbove: string;
302
+ requireForAllPayments?: boolean | undefined;
303
+ requireForNewRecipient?: boolean | undefined;
304
+ requireForNewDomain?: boolean | undefined;
305
+ };
306
+ privacy: {
307
+ redactUrlQueryParamsInLogs?: boolean | undefined;
308
+ blockPiiInReason?: boolean | undefined;
309
+ blockedMemoPatterns?: string[] | undefined;
310
+ };
311
+ logging: {
312
+ writeReceipts?: boolean | undefined;
313
+ writeEventLog?: boolean | undefined;
314
+ };
315
+ x402?: {
316
+ enabled?: boolean | undefined;
317
+ allowDomains?: string[] | undefined;
318
+ maxPricePerRequest?: string | undefined;
319
+ bindPaymentToUrl?: boolean | undefined;
320
+ denyRedirectPaymentChanges?: boolean | undefined;
321
+ } | undefined;
322
+ safety?: {
323
+ simulationRequired?: boolean | undefined;
324
+ explainTransactionRequired?: boolean | undefined;
325
+ blockBlindSigning?: boolean | undefined;
326
+ blockOpaqueTransactions?: boolean | undefined;
327
+ } | undefined;
328
+ market?: {
329
+ liquidity?: {
330
+ enabled?: boolean | undefined;
331
+ allowedPools?: string[] | undefined;
332
+ allowedAssets?: string[] | undefined;
333
+ allowedActions?: ("deposit" | "withdraw")[] | undefined;
334
+ maxPoolExposureValue?: string | undefined;
335
+ requirePriceBounds?: boolean | undefined;
336
+ } | undefined;
337
+ } | undefined;
338
+ defi?: {
339
+ blend?: {
340
+ enabled?: boolean | undefined;
341
+ allowedPools?: string[] | undefined;
342
+ allowedRequestTypes?: ("withdraw" | "supply" | "supply_collateral" | "withdraw_collateral" | "borrow" | "repay")[] | undefined;
343
+ maxBorrowValue?: string | undefined;
344
+ maxProtocolExposureValue?: string | undefined;
345
+ minimumHealthFactor?: number | undefined;
346
+ requireSimulation?: boolean | undefined;
347
+ } | undefined;
348
+ } | undefined;
349
+ }>;
350
+ export type Policy = z.infer<typeof policySchema>;
351
+ export declare const DEFAULT_TESTNET_POLICY: Policy;
352
+ export declare const DEFAULT_MAINNET_POLICY: Policy;
353
+ export declare function parsePolicyYaml(source: string): Policy;
354
+ export declare function policyToYaml(policy: Policy): string;
355
+ export declare function defaultPolicyForNetwork(network: "testnet" | "mainnet" | "local"): Policy;
356
+ export declare function evaluatePaymentRequest(policyInput: Policy, requestInput: PaymentRequest, history?: SpendHistory): PolicyDecision;
357
+ export declare function evaluateDefiBlendRequest(policyInput: Policy, request: DefiBlendPolicyRequest): PolicyDecision;
358
+ export declare function evaluateMarketLiquidityRequest(policyInput: Policy, request: MarketLiquidityPolicyRequest): PolicyDecision;
359
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,561 @@
1
+ import { MAINNET_PROFILE, StellarAgentError, amountIsGreaterThan, parseAmount, parseAsset, paymentRequestSchema, redactSensitive } from "@stellar-agent/core";
2
+ import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
3
+ import { z } from "zod";
4
+ const defiBlendRequestTypeSchema = z.enum([
5
+ "supply",
6
+ "withdraw",
7
+ "supply_collateral",
8
+ "withdraw_collateral",
9
+ "borrow",
10
+ "repay"
11
+ ]);
12
+ const defiPolicySchema = z
13
+ .object({
14
+ blend: z
15
+ .object({
16
+ enabled: z.boolean().default(false),
17
+ allowedPools: z.array(z.string().min(1)).default([]),
18
+ allowedRequestTypes: z.array(defiBlendRequestTypeSchema).default([]),
19
+ maxBorrowValue: z.string().min(1).default("0"),
20
+ maxProtocolExposureValue: z.string().min(1).default("0"),
21
+ minimumHealthFactor: z.number().positive().default(1.25),
22
+ requireSimulation: z.boolean().default(true)
23
+ })
24
+ .default({
25
+ enabled: false,
26
+ allowedPools: [],
27
+ allowedRequestTypes: [],
28
+ maxBorrowValue: "0",
29
+ maxProtocolExposureValue: "0",
30
+ minimumHealthFactor: 1.25,
31
+ requireSimulation: true
32
+ })
33
+ })
34
+ .default({
35
+ blend: {
36
+ enabled: false,
37
+ allowedPools: [],
38
+ allowedRequestTypes: [],
39
+ maxBorrowValue: "0",
40
+ maxProtocolExposureValue: "0",
41
+ minimumHealthFactor: 1.25,
42
+ requireSimulation: true
43
+ }
44
+ });
45
+ const marketLiquidityActionSchema = z.enum(["deposit", "withdraw"]);
46
+ const marketPolicySchema = z
47
+ .object({
48
+ liquidity: z
49
+ .object({
50
+ enabled: z.boolean().default(false),
51
+ allowedPools: z.array(z.string().min(1)).default([]),
52
+ allowedAssets: z.array(z.string().min(1)).default([]),
53
+ allowedActions: z.array(marketLiquidityActionSchema).default([]),
54
+ maxPoolExposureValue: z.string().min(1).default("0"),
55
+ requirePriceBounds: z.boolean().default(true)
56
+ })
57
+ .default({
58
+ enabled: false,
59
+ allowedPools: [],
60
+ allowedAssets: [],
61
+ allowedActions: [],
62
+ maxPoolExposureValue: "0",
63
+ requirePriceBounds: true
64
+ })
65
+ })
66
+ .default({
67
+ liquidity: {
68
+ enabled: false,
69
+ allowedPools: [],
70
+ allowedAssets: [],
71
+ allowedActions: [],
72
+ maxPoolExposureValue: "0",
73
+ requirePriceBounds: true
74
+ }
75
+ });
76
+ export const policySchema = z.object({
77
+ version: z.literal(1),
78
+ name: z.string().min(1),
79
+ network: z.enum(["testnet", "mainnet", "local"]),
80
+ assets: z.object({
81
+ allow: z.array(z.string().min(1)).default(["XLM"])
82
+ }),
83
+ limits: z.object({
84
+ perTransaction: z.string().min(1),
85
+ dailyTotal: z.string().min(1),
86
+ monthlyTotal: z.string().min(1)
87
+ }),
88
+ approval: z.object({
89
+ requireForAllPayments: z.boolean().default(false),
90
+ requireForNewRecipient: z.boolean().default(false),
91
+ requireForNewDomain: z.boolean().default(false),
92
+ requireAbove: z.string().min(1)
93
+ }),
94
+ x402: z
95
+ .object({
96
+ enabled: z.boolean().default(false),
97
+ allowDomains: z.array(z.string()).default([]),
98
+ maxPricePerRequest: z.string().min(1).default("1 XLM"),
99
+ bindPaymentToUrl: z.boolean().default(true),
100
+ denyRedirectPaymentChanges: z.boolean().default(true)
101
+ })
102
+ .default({
103
+ enabled: false,
104
+ allowDomains: [],
105
+ maxPricePerRequest: "1 XLM",
106
+ bindPaymentToUrl: true,
107
+ denyRedirectPaymentChanges: true
108
+ }),
109
+ safety: z
110
+ .object({
111
+ simulationRequired: z.boolean().default(false),
112
+ explainTransactionRequired: z.boolean().default(true),
113
+ blockBlindSigning: z.boolean().default(true),
114
+ blockOpaqueTransactions: z.boolean().default(true)
115
+ })
116
+ .optional(),
117
+ market: marketPolicySchema,
118
+ defi: defiPolicySchema,
119
+ privacy: z.object({
120
+ redactUrlQueryParamsInLogs: z.boolean().default(true),
121
+ blockPiiInReason: z.boolean().default(true),
122
+ blockedMemoPatterns: z.array(z.string()).default(["ssn", "password", "secret", "api_key"])
123
+ }),
124
+ logging: z.object({
125
+ writeReceipts: z.boolean().default(true),
126
+ writeEventLog: z.boolean().default(true)
127
+ })
128
+ });
129
+ export const DEFAULT_TESTNET_POLICY = {
130
+ version: 1,
131
+ name: "default-testnet-policy",
132
+ network: "testnet",
133
+ assets: { allow: ["XLM"] },
134
+ limits: {
135
+ perTransaction: "10 XLM",
136
+ dailyTotal: "100 XLM",
137
+ monthlyTotal: "1000 XLM"
138
+ },
139
+ approval: {
140
+ requireForAllPayments: false,
141
+ requireForNewRecipient: false,
142
+ requireForNewDomain: false,
143
+ requireAbove: "5 XLM"
144
+ },
145
+ x402: {
146
+ enabled: false,
147
+ allowDomains: [],
148
+ maxPricePerRequest: "1 XLM",
149
+ bindPaymentToUrl: true,
150
+ denyRedirectPaymentChanges: true
151
+ },
152
+ defi: {
153
+ blend: {
154
+ enabled: true,
155
+ allowedPools: ["*"],
156
+ allowedRequestTypes: ["supply", "withdraw", "supply_collateral", "withdraw_collateral", "repay"],
157
+ maxBorrowValue: "0",
158
+ maxProtocolExposureValue: "1000",
159
+ minimumHealthFactor: 1.5,
160
+ requireSimulation: true
161
+ }
162
+ },
163
+ market: {
164
+ liquidity: {
165
+ enabled: true,
166
+ allowedPools: ["*"],
167
+ allowedAssets: ["*"],
168
+ allowedActions: ["deposit", "withdraw"],
169
+ maxPoolExposureValue: "1000",
170
+ requirePriceBounds: true
171
+ }
172
+ },
173
+ privacy: {
174
+ redactUrlQueryParamsInLogs: true,
175
+ blockPiiInReason: true,
176
+ blockedMemoPatterns: ["ssn", "password", "secret", "api_key"]
177
+ },
178
+ logging: {
179
+ writeReceipts: true,
180
+ writeEventLog: true
181
+ }
182
+ };
183
+ export const DEFAULT_MAINNET_POLICY = {
184
+ version: 1,
185
+ name: "default-mainnet-policy",
186
+ network: "mainnet",
187
+ assets: { allow: ["XLM", "USDC"] },
188
+ limits: {
189
+ perTransaction: "0.05 XLM",
190
+ dailyTotal: "0.25 XLM",
191
+ monthlyTotal: "1 XLM"
192
+ },
193
+ approval: {
194
+ requireForAllPayments: true,
195
+ requireForNewRecipient: true,
196
+ requireForNewDomain: true,
197
+ requireAbove: "0 XLM"
198
+ },
199
+ x402: {
200
+ enabled: false,
201
+ allowDomains: [],
202
+ maxPricePerRequest: "0.05 XLM",
203
+ bindPaymentToUrl: true,
204
+ denyRedirectPaymentChanges: true
205
+ },
206
+ safety: {
207
+ simulationRequired: true,
208
+ explainTransactionRequired: true,
209
+ blockBlindSigning: true,
210
+ blockOpaqueTransactions: true
211
+ },
212
+ defi: {
213
+ blend: {
214
+ enabled: false,
215
+ allowedPools: [],
216
+ allowedRequestTypes: [],
217
+ maxBorrowValue: "0",
218
+ maxProtocolExposureValue: "0",
219
+ minimumHealthFactor: 2,
220
+ requireSimulation: true
221
+ }
222
+ },
223
+ market: {
224
+ liquidity: {
225
+ enabled: false,
226
+ allowedPools: [],
227
+ allowedAssets: [],
228
+ allowedActions: [],
229
+ maxPoolExposureValue: "0",
230
+ requirePriceBounds: true
231
+ }
232
+ },
233
+ privacy: {
234
+ redactUrlQueryParamsInLogs: true,
235
+ blockPiiInReason: true,
236
+ blockedMemoPatterns: ["ssn", "password", "secret", "api_key"]
237
+ },
238
+ logging: {
239
+ writeReceipts: true,
240
+ writeEventLog: true
241
+ }
242
+ };
243
+ export function parsePolicyYaml(source) {
244
+ try {
245
+ return policySchema.parse(parseYaml(source));
246
+ }
247
+ catch (error) {
248
+ throw new StellarAgentError({
249
+ code: "POLICY_INVALID",
250
+ message: "Policy file is invalid.",
251
+ hint: "Run stellar-agent policy check to inspect validation failures.",
252
+ docs: "docs/troubleshooting.md#policy-denied",
253
+ details: error
254
+ });
255
+ }
256
+ }
257
+ export function policyToYaml(policy) {
258
+ return stringifyYaml(policy);
259
+ }
260
+ export function defaultPolicyForNetwork(network) {
261
+ if (network === "mainnet")
262
+ return DEFAULT_MAINNET_POLICY;
263
+ return DEFAULT_TESTNET_POLICY;
264
+ }
265
+ export function evaluatePaymentRequest(policyInput, requestInput, history = {}) {
266
+ const policy = policySchema.parse(policyInput);
267
+ const request = paymentRequestSchema.parse(requestInput);
268
+ const decision = {
269
+ status: "allowed",
270
+ network: policy.network,
271
+ realFunds: policy.network === "mainnet" || MAINNET_PROFILE.name === policy.network,
272
+ matchedRules: [],
273
+ reasons: []
274
+ };
275
+ const deny = (rule, reason) => {
276
+ decision.status = "denied";
277
+ decision.matchedRules.push(rule);
278
+ decision.reasons.push(reason);
279
+ };
280
+ const requireApproval = (rule, reason) => {
281
+ if (decision.status !== "denied") {
282
+ decision.status = "requires_approval";
283
+ decision.approval ??= { required: true, reason: rule };
284
+ }
285
+ decision.matchedRules.push(rule);
286
+ decision.reasons.push(reason);
287
+ };
288
+ const note = (rule, reason) => {
289
+ decision.matchedRules.push(rule);
290
+ decision.reasons.push(reason);
291
+ };
292
+ let normalizedAmount;
293
+ try {
294
+ normalizedAmount = parseAmount(stripAssetSuffix(request.amount), request.asset).value;
295
+ parseAsset(request.asset);
296
+ }
297
+ catch (error) {
298
+ deny("invalid_payment_request", error instanceof Error ? error.message : "Invalid payment request.");
299
+ return sanitizeDecision(policy, decision);
300
+ }
301
+ const requestedAsset = request.asset.toUpperCase();
302
+ if (!policy.assets.allow.map((asset) => asset.toUpperCase()).includes(requestedAsset)) {
303
+ deny("asset_not_allowed", `Asset ${requestedAsset} is not allowed by policy.`);
304
+ }
305
+ else {
306
+ note("asset_allowed", `Asset ${requestedAsset} is allowed by policy.`);
307
+ }
308
+ if (amountIsGreaterThan(normalizedAmount, stripAssetSuffix(policy.limits.perTransaction))) {
309
+ deny("amount_over_per_transaction_limit", "Payment exceeds the per-transaction policy limit.");
310
+ }
311
+ else {
312
+ note("amount_under_hard_limit", "Payment is under the per-transaction limit.");
313
+ }
314
+ if (history.unreadable) {
315
+ deny("spend_history_unreadable", "Local spend history could not be read, so payment fails closed.");
316
+ }
317
+ if (history.dailyTotal &&
318
+ amountIsGreaterThan(addAmountStrings(history.dailyTotal, normalizedAmount), stripAssetSuffix(policy.limits.dailyTotal))) {
319
+ deny("daily_total_limit_exceeded", "Payment would exceed the daily total policy limit.");
320
+ }
321
+ if (history.monthlyTotal &&
322
+ amountIsGreaterThan(addAmountStrings(history.monthlyTotal, normalizedAmount), stripAssetSuffix(policy.limits.monthlyTotal))) {
323
+ deny("monthly_total_limit_exceeded", "Payment would exceed the monthly total policy limit.");
324
+ }
325
+ if (containsBlockedMemo(request.memo, policy)) {
326
+ deny("memo_blocked_sensitive_pattern", "Payment memo contains a blocked sensitive pattern.");
327
+ }
328
+ if (request.domain) {
329
+ if (!policy.x402.enabled) {
330
+ deny("x402_or_domain_payments_disabled", "Domain-bound payments are disabled by policy.");
331
+ }
332
+ else if (policy.x402.allowDomains.length > 0 &&
333
+ !policy.x402.allowDomains.includes(request.domain)) {
334
+ deny("domain_not_allowlisted", "The requested payment domain is not allowlisted.");
335
+ }
336
+ else if (amountIsGreaterThan(normalizedAmount, stripAssetSuffix(policy.x402.maxPricePerRequest))) {
337
+ deny("x402_price_over_limit", "The requested x402 payment exceeds the max price per request.");
338
+ }
339
+ else {
340
+ note("x402_domain_allowed", "Domain-bound payment is enabled and within the x402 price limit.");
341
+ }
342
+ }
343
+ if (policy.approval.requireForAllPayments) {
344
+ requireApproval("approval_required_for_all_payments", "Policy requires approval for all payments.");
345
+ }
346
+ if (amountIsGreaterThan(normalizedAmount, stripAssetSuffix(policy.approval.requireAbove))) {
347
+ requireApproval("amount_above_auto_approval_threshold", "Payment is above the auto-approval threshold.");
348
+ }
349
+ if (policy.approval.requireForNewRecipient &&
350
+ !history.knownRecipients?.includes(request.destination)) {
351
+ requireApproval("new_recipient_requires_approval", "Recipient has no prior approved receipt.");
352
+ }
353
+ if (request.domain && policy.approval.requireForNewDomain && !history.knownDomains?.includes(request.domain)) {
354
+ requireApproval("new_domain_requires_approval", "Domain has no prior approved receipt.");
355
+ }
356
+ if (policy.network === "mainnet") {
357
+ requireApproval("mainnet_requires_approval", "Mainnet payments require explicit approval.");
358
+ }
359
+ if (decision.status === "allowed") {
360
+ note("policy_allowed", "Policy allows this payment without additional approval.");
361
+ }
362
+ return sanitizeDecision(policy, decision);
363
+ }
364
+ export function evaluateDefiBlendRequest(policyInput, request) {
365
+ const policy = policySchema.parse(policyInput);
366
+ const decision = {
367
+ status: "allowed",
368
+ network: policy.network,
369
+ realFunds: policy.network === "mainnet" || request.network === "mainnet",
370
+ matchedRules: [],
371
+ reasons: []
372
+ };
373
+ const blend = policy.defi.blend;
374
+ const deny = (rule, reason) => {
375
+ decision.status = "denied";
376
+ decision.matchedRules.push(rule);
377
+ decision.reasons.push(reason);
378
+ };
379
+ const requireApproval = (rule, reason) => {
380
+ if (decision.status !== "denied") {
381
+ decision.status = "requires_approval";
382
+ decision.approval ??= { required: true, reason: rule };
383
+ }
384
+ decision.matchedRules.push(rule);
385
+ decision.reasons.push(reason);
386
+ };
387
+ const note = (rule, reason) => {
388
+ decision.matchedRules.push(rule);
389
+ decision.reasons.push(reason);
390
+ };
391
+ if (!blend.enabled) {
392
+ deny("defi_blend_disabled", "Blend DeFi requests are disabled by policy.");
393
+ }
394
+ else {
395
+ note("defi_blend_enabled", "Blend DeFi requests are enabled by policy.");
396
+ }
397
+ const allowedPools = blend.allowedPools.map((pool) => pool.toUpperCase());
398
+ if (!allowedPools.includes("*") && !allowedPools.includes(request.pool.toUpperCase())) {
399
+ deny("defi_blend_pool_not_allowed", "Blend pool is not allowed by policy.");
400
+ }
401
+ else {
402
+ note("defi_blend_pool_allowed", "Blend pool is allowed by policy.");
403
+ }
404
+ for (const requestType of request.requestTypes) {
405
+ if (!blend.allowedRequestTypes.includes(requestType)) {
406
+ deny("defi_blend_request_type_not_allowed", `Blend request type ${requestType} is not allowed by policy.`);
407
+ }
408
+ }
409
+ if (request.requestTypes.every((requestType) => blend.allowedRequestTypes.includes(requestType))) {
410
+ note("defi_blend_request_types_allowed", "Blend request types are allowed by policy.");
411
+ }
412
+ const borrowValue = parsePolicyNumber(request.borrowValue ?? "0", "borrow value");
413
+ const maxBorrowValue = parsePolicyNumber(blend.maxBorrowValue, "max borrow value");
414
+ if (borrowValue > maxBorrowValue) {
415
+ deny("defi_blend_borrow_over_limit", "Blend borrow value exceeds the policy limit.");
416
+ }
417
+ const exposureValue = parsePolicyNumber(request.protocolExposureValue ?? "0", "protocol exposure value");
418
+ const maxExposureValue = parsePolicyNumber(blend.maxProtocolExposureValue, "max protocol exposure value");
419
+ if (exposureValue > maxExposureValue) {
420
+ deny("defi_blend_exposure_over_limit", "Blend protocol exposure would exceed the policy limit.");
421
+ }
422
+ if (request.healthFactorAfter !== undefined && request.healthFactorAfter !== null) {
423
+ if (request.healthFactorAfter < blend.minimumHealthFactor) {
424
+ deny("defi_blend_health_factor_too_low", "Blend health factor would be below the policy minimum.");
425
+ }
426
+ else {
427
+ note("defi_blend_health_factor_ok", "Blend health factor is above the policy minimum.");
428
+ }
429
+ }
430
+ if (decision.realFunds) {
431
+ requireApproval("defi_blend_mainnet_requires_approval", "Mainnet Blend requests require explicit approval.");
432
+ }
433
+ if (decision.status === "allowed") {
434
+ note("policy_allowed", "Blend DeFi request is allowed by policy.");
435
+ }
436
+ return sanitizeDecision(policy, decision);
437
+ }
438
+ export function evaluateMarketLiquidityRequest(policyInput, request) {
439
+ const policy = policySchema.parse(policyInput);
440
+ const decision = {
441
+ status: "allowed",
442
+ network: policy.network,
443
+ realFunds: policy.network === "mainnet" || request.network === "mainnet",
444
+ matchedRules: [],
445
+ reasons: []
446
+ };
447
+ const liquidity = policy.market.liquidity;
448
+ const deny = (rule, reason) => {
449
+ decision.status = "denied";
450
+ decision.matchedRules.push(rule);
451
+ decision.reasons.push(reason);
452
+ };
453
+ const requireApproval = (rule, reason) => {
454
+ if (decision.status !== "denied") {
455
+ decision.status = "requires_approval";
456
+ decision.approval ??= { required: true, reason: rule };
457
+ }
458
+ decision.matchedRules.push(rule);
459
+ decision.reasons.push(reason);
460
+ };
461
+ const note = (rule, reason) => {
462
+ decision.matchedRules.push(rule);
463
+ decision.reasons.push(reason);
464
+ };
465
+ if (!liquidity.enabled) {
466
+ deny("market_liquidity_disabled", "Market liquidity pool requests are disabled by policy.");
467
+ }
468
+ else {
469
+ note("market_liquidity_enabled", "Market liquidity pool requests are enabled by policy.");
470
+ }
471
+ const allowedPools = liquidity.allowedPools.map((pool) => pool.toUpperCase());
472
+ if (!allowedPools.includes("*") && !allowedPools.includes(request.pool.toUpperCase())) {
473
+ deny("market_liquidity_pool_not_allowed", "Liquidity pool is not allowed by policy.");
474
+ }
475
+ else {
476
+ note("market_liquidity_pool_allowed", "Liquidity pool is allowed by policy.");
477
+ }
478
+ const allowedAssets = liquidity.allowedAssets.map((asset) => asset.toUpperCase());
479
+ const deniedAssets = request.assets.filter((asset) => !allowedAssets.includes("*") && !allowedAssets.includes(asset.toUpperCase()));
480
+ if (deniedAssets.length > 0) {
481
+ deny("market_liquidity_asset_not_allowed", "One or more liquidity pool assets are not allowed by policy.");
482
+ }
483
+ else {
484
+ note("market_liquidity_assets_allowed", "Liquidity pool assets are allowed by policy.");
485
+ }
486
+ if (!liquidity.allowedActions.includes(request.action)) {
487
+ deny("market_liquidity_action_not_allowed", `Liquidity action ${request.action} is not allowed by policy.`);
488
+ }
489
+ else {
490
+ note("market_liquidity_action_allowed", "Liquidity action is allowed by policy.");
491
+ }
492
+ const exposureValue = parsePolicyNumber(request.exposureValue ?? "0", "liquidity exposure value");
493
+ const maxExposureValue = parsePolicyNumber(liquidity.maxPoolExposureValue, "max liquidity pool exposure value");
494
+ if (exposureValue > maxExposureValue) {
495
+ deny("market_liquidity_exposure_over_limit", "Liquidity pool exposure would exceed the policy limit.");
496
+ }
497
+ if (liquidity.requirePriceBounds && request.action === "deposit" && request.priceBoundsProvided === false) {
498
+ deny("market_liquidity_price_bounds_required", "Liquidity deposits require explicit price bounds.");
499
+ }
500
+ if (decision.realFunds) {
501
+ requireApproval("market_liquidity_mainnet_requires_approval", "Mainnet liquidity pool requests require explicit approval.");
502
+ }
503
+ if (decision.status === "allowed") {
504
+ note("policy_allowed", "Market liquidity request is allowed by policy.");
505
+ }
506
+ return sanitizeDecision(policy, decision);
507
+ }
508
+ function sanitizeDecision(policy, decision) {
509
+ if (!policy.privacy.redactUrlQueryParamsInLogs)
510
+ return decision;
511
+ return {
512
+ ...decision,
513
+ reasons: decision.reasons.map((reason) => redactSensitive(reason))
514
+ };
515
+ }
516
+ function containsBlockedMemo(memo, policy) {
517
+ if (!memo)
518
+ return false;
519
+ const lowered = memo.toLowerCase();
520
+ return policy.privacy.blockedMemoPatterns.some((pattern) => lowered.includes(pattern.toLowerCase()));
521
+ }
522
+ function parsePolicyNumber(input, label) {
523
+ const value = Number(input);
524
+ if (!Number.isFinite(value) || value < 0) {
525
+ throw new StellarAgentError({
526
+ code: "POLICY_INVALID",
527
+ message: `Invalid ${label} in policy.`,
528
+ docs: "docs/troubleshooting.md#policy-denied"
529
+ });
530
+ }
531
+ return value;
532
+ }
533
+ function stripAssetSuffix(amount) {
534
+ return amount.trim().split(/\s+/)[0] ?? amount;
535
+ }
536
+ function addAmountStrings(a, b) {
537
+ const left = parseNonNegativeAmount(stripAssetSuffix(a));
538
+ const right = parseNonNegativeAmount(stripAssetSuffix(b));
539
+ const sum = left + right;
540
+ const whole = sum / 10000000n;
541
+ const fraction = (sum % 10000000n).toString().padStart(7, "0");
542
+ return `${whole}.${fraction}`;
543
+ }
544
+ function parseNonNegativeAmount(input) {
545
+ const trimmed = input.trim();
546
+ if (!/^(0|[1-9]\d*)(\.\d+)?$/.test(trimmed)) {
547
+ throw new StellarAgentError({
548
+ code: "INVALID_AMOUNT",
549
+ message: "Amount must be a decimal string."
550
+ });
551
+ }
552
+ const [wholeRaw, fractionRaw = ""] = trimmed.split(".");
553
+ if (fractionRaw.length > 7) {
554
+ throw new StellarAgentError({
555
+ code: "INVALID_AMOUNT",
556
+ message: "Stellar amounts support at most 7 decimal places."
557
+ });
558
+ }
559
+ return BigInt(wholeRaw ?? "0") * 10000000n + BigInt(fractionRaw.padEnd(7, "0"));
560
+ }
561
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@stellar-agent/policy",
3
+ "version": "0.4.0",
4
+ "description": "Deterministic policy parsing and payment decision logic for Stellar Agent Bridge.",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+ssh://git@github.com/someone-in-texas/Stellar-Agent.git",
10
+ "directory": "packages/policy"
11
+ },
12
+ "bugs": {
13
+ "url": "https://github.com/someone-in-texas/Stellar-Agent/issues"
14
+ },
15
+ "homepage": "https://github.com/someone-in-texas/Stellar-Agent#readme",
16
+ "engines": {
17
+ "node": ">=22"
18
+ },
19
+ "main": "./dist/index.js",
20
+ "types": "./dist/index.d.ts",
21
+ "exports": {
22
+ ".": {
23
+ "types": "./dist/index.d.ts",
24
+ "import": "./dist/index.js"
25
+ }
26
+ },
27
+ "files": [
28
+ "dist"
29
+ ],
30
+ "scripts": {
31
+ "build": "tsc -b",
32
+ "test": "vitest run"
33
+ },
34
+ "dependencies": {
35
+ "@stellar-agent/core": "0.4.0",
36
+ "yaml": "^2.7.1",
37
+ "zod": "^3.25.46"
38
+ }
39
+ }