@ggoldani/agent-passport-mcp 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.
Files changed (43) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +99 -0
  3. package/build/api-bridge/analytics.d.ts +53 -0
  4. package/build/api-bridge/analytics.js +13 -0
  5. package/build/api-bridge/badge.d.ts +16 -0
  6. package/build/api-bridge/badge.js +9 -0
  7. package/build/api-bridge/client.d.ts +3 -0
  8. package/build/api-bridge/client.js +50 -0
  9. package/build/api-bridge/index.d.ts +2 -0
  10. package/build/api-bridge/index.js +66 -0
  11. package/build/api-bridge/search.d.ts +32 -0
  12. package/build/api-bridge/search.js +26 -0
  13. package/build/api-bridge/trust-check.d.ts +16 -0
  14. package/build/api-bridge/trust-check.js +16 -0
  15. package/build/generated/src/config.d.ts +14 -0
  16. package/build/generated/src/config.js +39 -0
  17. package/build/generated/src/generated/meta.d.ts +10 -0
  18. package/build/generated/src/generated/meta.js +10 -0
  19. package/build/generated/src/generated/schemas.d.ts +94 -0
  20. package/build/generated/src/generated/schemas.js +107 -0
  21. package/build/generated/src/generated/specEntries.d.ts +2 -0
  22. package/build/generated/src/generated/specEntries.js +33 -0
  23. package/build/generated/src/generated/typedClient.d.ts +117 -0
  24. package/build/generated/src/generated/typedClient.js +20 -0
  25. package/build/generated/src/index.d.ts +2 -0
  26. package/build/generated/src/index.js +17 -0
  27. package/build/generated/src/lib/contractInvoke.d.ts +20 -0
  28. package/build/generated/src/lib/contractInvoke.js +87 -0
  29. package/build/generated/src/lib/errors.d.ts +15 -0
  30. package/build/generated/src/lib/errors.js +137 -0
  31. package/build/generated/src/lib/policy.d.ts +5 -0
  32. package/build/generated/src/lib/policy.js +8 -0
  33. package/build/generated/src/lib/redact.d.ts +2 -0
  34. package/build/generated/src/lib/redact.js +42 -0
  35. package/build/generated/src/lib/stellarClient.d.ts +10 -0
  36. package/build/generated/src/lib/stellarClient.js +61 -0
  37. package/build/generated/src/registerContractTools.d.ts +3 -0
  38. package/build/generated/src/registerContractTools.js +160 -0
  39. package/build/generated/src/server.d.ts +3 -0
  40. package/build/generated/src/server.js +10 -0
  41. package/build/index.d.ts +2 -0
  42. package/build/index.js +24 -0
  43. package/package.json +58 -0
@@ -0,0 +1,107 @@
1
+ import { z } from "zod";
2
+ import { StrKey } from "@stellar/stellar-sdk";
3
+ const contractIdOverride = z
4
+ .string()
5
+ .trim()
6
+ .optional()
7
+ .describe("Optional Soroban contract id (C...). Defaults to STELLAR_CONTRACT_ID.");
8
+ const sourceAccountField = z
9
+ .string()
10
+ .trim()
11
+ .refine((value) => StrKey.isValidEd25519PublicKey(value), {
12
+ message: "Invalid Stellar public key (expected G... source account)."
13
+ })
14
+ .describe("Source account public key (G...) used to build the transaction.");
15
+ export const initInputSchema = {
16
+ contractId: contractIdOverride,
17
+ sourceAccount: sourceAccountField,
18
+ admin: z.string().describe("Stellar address (G... public key or C... contract)").describe("Contract argument admin"),
19
+ authorized_relayer: z.string().describe("Stellar address (G... public key or C... contract)").describe("Contract argument authorized_relayer")
20
+ };
21
+ export const get_agentInputSchema = {
22
+ contractId: contractIdOverride,
23
+ sourceAccount: sourceAccountField,
24
+ owner_address: z.string().describe("Stellar address (G... public key or C... contract)").describe("Contract argument owner_address")
25
+ };
26
+ export const get_configInputSchema = {
27
+ contractId: contractIdOverride,
28
+ sourceAccount: sourceAccountField
29
+ };
30
+ export const get_ratingInputSchema = {
31
+ contractId: contractIdOverride,
32
+ sourceAccount: sourceAccountField,
33
+ interaction_tx_hash: z.string().describe("Bytes as base64 or hex per simulation expectations").describe("Contract argument interaction_tx_hash")
34
+ };
35
+ export const add_relayerInputSchema = {
36
+ contractId: contractIdOverride,
37
+ sourceAccount: sourceAccountField,
38
+ admin: z.string().describe("Stellar address (G... public key or C... contract)").describe("Contract argument admin"),
39
+ relayer: z.string().describe("Stellar address (G... public key or C... contract)").describe("Contract argument relayer")
40
+ };
41
+ export const list_agentsInputSchema = {
42
+ contractId: contractIdOverride,
43
+ sourceAccount: sourceAccountField,
44
+ from: z.number().int().min(0).max(4294967295).describe("Contract argument from"),
45
+ limit: z.number().int().min(0).max(4294967295).describe("Contract argument limit")
46
+ };
47
+ export const accept_adminInputSchema = {
48
+ contractId: contractIdOverride,
49
+ sourceAccount: sourceAccountField,
50
+ new_admin: z.string().describe("Stellar address (G... public key or C... contract)").describe("Contract argument new_admin")
51
+ };
52
+ export const get_relayersInputSchema = {
53
+ contractId: contractIdOverride,
54
+ sourceAccount: sourceAccountField
55
+ };
56
+ export const submit_ratingInputSchema = {
57
+ contractId: contractIdOverride,
58
+ sourceAccount: sourceAccountField,
59
+ rating: z.unknown().describe("User-defined Soroban type; validated when building ScVals via Spec.funcArgsToScVals.").describe("Contract argument rating")
60
+ };
61
+ export const register_agentInputSchema = {
62
+ contractId: contractIdOverride,
63
+ sourceAccount: sourceAccountField,
64
+ owner_address: z.string().describe("Stellar address (G... public key or C... contract)").describe("Contract argument owner_address"),
65
+ input: z.unknown().describe("User-defined Soroban type; validated when building ScVals via Spec.funcArgsToScVals.").describe("Contract argument input")
66
+ };
67
+ export const remove_relayerInputSchema = {
68
+ contractId: contractIdOverride,
69
+ sourceAccount: sourceAccountField,
70
+ admin: z.string().describe("Stellar address (G... public key or C... contract)").describe("Contract argument admin"),
71
+ relayer: z.string().describe("Stellar address (G... public key or C... contract)").describe("Contract argument relayer")
72
+ };
73
+ export const transfer_adminInputSchema = {
74
+ contractId: contractIdOverride,
75
+ sourceAccount: sourceAccountField,
76
+ admin: z.string().describe("Stellar address (G... public key or C... contract)").describe("Contract argument admin"),
77
+ new_admin: z.string().describe("Stellar address (G... public key or C... contract)").describe("Contract argument new_admin")
78
+ };
79
+ export const update_profileInputSchema = {
80
+ contractId: contractIdOverride,
81
+ sourceAccount: sourceAccountField,
82
+ owner_address: z.string().describe("Stellar address (G... public key or C... contract)").describe("Contract argument owner_address"),
83
+ input: z.unknown().describe("User-defined Soroban type; validated when building ScVals via Spec.funcArgsToScVals.").describe("Contract argument input")
84
+ };
85
+ export const deregister_agentInputSchema = {
86
+ contractId: contractIdOverride,
87
+ sourceAccount: sourceAccountField,
88
+ owner_address: z.string().describe("Stellar address (G... public key or C... contract)").describe("Contract argument owner_address")
89
+ };
90
+ export const register_interactionInputSchema = {
91
+ contractId: contractIdOverride,
92
+ sourceAccount: sourceAccountField,
93
+ relayer: z.string().describe("Stellar address (G... public key or C... contract)").describe("Contract argument relayer"),
94
+ interaction: z.unknown().describe("User-defined Soroban type; validated when building ScVals via Spec.funcArgsToScVals.").describe("Contract argument interaction")
95
+ };
96
+ export const cancel_admin_transferInputSchema = {
97
+ contractId: contractIdOverride,
98
+ sourceAccount: sourceAccountField,
99
+ admin: z.string().describe("Stellar address (G... public key or C... contract)").describe("Contract argument admin")
100
+ };
101
+ export const list_agent_interactionsInputSchema = {
102
+ contractId: contractIdOverride,
103
+ sourceAccount: sourceAccountField,
104
+ provider_address: z.string().describe("Stellar address (G... public key or C... contract)").describe("Contract argument provider_address"),
105
+ from_seq: z.number().int().min(0).max(4294967295).describe("Contract argument from_seq"),
106
+ limit: z.number().int().min(0).max(4294967295).describe("Contract argument limit")
107
+ };
@@ -0,0 +1,2 @@
1
+ /** Auto-generated — do not edit. Contract spec entries (base64 XDR). */
2
+ export declare const SPEC_ENTRIES: readonly ["AAAAAAAAAAAAAAAEaW5pdAAAAAIAAAAAAAAABWFkbWluAAAAAAAAEwAAAAAAAAASYXV0aG9yaXplZF9yZWxheWVyAAAAAAATAAAAAA==", "AAAAAAAAAAAAAAAJZ2V0X2FnZW50AAAAAAAAAQAAAAAAAAANb3duZXJfYWRkcmVzcwAAAAAAABMAAAABAAAH0AAAAAxBZ2VudFByb2ZpbGU=", "AAAAAAAAAAAAAAAKZ2V0X2NvbmZpZwAAAAAAAAAAAAEAAAfQAAAABkNvbmZpZwAA", "AAAAAAAAAAAAAAAKZ2V0X3JhdGluZwAAAAAAAQAAAAAAAAATaW50ZXJhY3Rpb25fdHhfaGFzaAAAAAPuAAAAIAAAAAEAAAPoAAAH0AAAAAxSYXRpbmdSZWNvcmQ=", "AAAAAAAAAAAAAAALYWRkX3JlbGF5ZXIAAAAAAgAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAdyZWxheWVyAAAAABMAAAAA", "AAAAAAAAAAAAAAALbGlzdF9hZ2VudHMAAAAAAgAAAAAAAAAEZnJvbQAAAAQAAAAAAAAABWxpbWl0AAAAAAAABAAAAAEAAAPqAAAH0AAAAAxBZ2VudFByb2ZpbGU=", "AAAAAAAAAAAAAAAMYWNjZXB0X2FkbWluAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAA=", "AAAAAAAAAAAAAAAMZ2V0X3JlbGF5ZXJzAAAAAAAAAAEAAAPqAAAAEw==", "AAAAAAAAAAAAAAANc3VibWl0X3JhdGluZwAAAAAAAAEAAAAAAAAABnJhdGluZwAAAAAH0AAAAAtSYXRpbmdJbnB1dAAAAAAA", "AAAAAAAAAAAAAAAOcmVnaXN0ZXJfYWdlbnQAAAAAAAIAAAAAAAAADW93bmVyX2FkZHJlc3MAAAAAAAATAAAAAAAAAAVpbnB1dAAAAAAAB9AAAAARQWdlbnRQcm9maWxlSW5wdXQAAAAAAAAA", "AAAAAAAAAAAAAAAOcmVtb3ZlX3JlbGF5ZXIAAAAAAAIAAAAAAAAABWFkbWluAAAAAAAAEwAAAAAAAAAHcmVsYXllcgAAAAATAAAAAA==", "AAAAAAAAAAAAAAAOdHJhbnNmZXJfYWRtaW4AAAAAAAIAAAAAAAAABWFkbWluAAAAAAAAEwAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAA=", "AAAAAAAAAAAAAAAOdXBkYXRlX3Byb2ZpbGUAAAAAAAIAAAAAAAAADW93bmVyX2FkZHJlc3MAAAAAAAATAAAAAAAAAAVpbnB1dAAAAAAAB9AAAAARQWdlbnRQcm9maWxlSW5wdXQAAAAAAAAA", "AAAAAAAAAAAAAAAQZGVyZWdpc3Rlcl9hZ2VudAAAAAEAAAAAAAAADW93bmVyX2FkZHJlc3MAAAAAAAATAAAAAA==", "AAAAAAAAAAAAAAAUcmVnaXN0ZXJfaW50ZXJhY3Rpb24AAAACAAAAAAAAAAdyZWxheWVyAAAAABMAAAAAAAAAC2ludGVyYWN0aW9uAAAAB9AAAAARSW50ZXJhY3Rpb25SZWNvcmQAAAAAAAAA", "AAAAAAAAAAAAAAAVY2FuY2VsX2FkbWluX3RyYW5zZmVyAAAAAAAAAQAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAA==", "AAAAAAAAAAAAAAAXbGlzdF9hZ2VudF9pbnRlcmFjdGlvbnMAAAAAAwAAAAAAAAAQcHJvdmlkZXJfYWRkcmVzcwAAABMAAAAAAAAACGZyb21fc2VxAAAABAAAAAAAAAAFbGltaXQAAAAAAAAEAAAAAQAAA+oAAAfQAAAAEUludGVyYWN0aW9uUmVjb3JkAAAA", "AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAGQAAAAAAAAASQWxyZWFkeUluaXRpYWxpemVkAAAAAAABAAAAAAAAABFPd25lcnNoaXBDb25mbGljdAAAAAAAAAIAAAAAAAAADE1pc3NpbmdBZ2VudAAAAAMAAAAAAAAAD0R1cGxpY2F0ZVR4SGFzaAAAAAAEAAAAAAAAAA9EdXBsaWNhdGVSYXRpbmcAAAAABQAAAAAAAAAMSW52YWxpZFNjb3JlAAAABgAAAAAAAAATVW5hdXRob3JpemVkUmVsYXllcgAAAAAHAAAAAAAAABJNaXNzaW5nSW50ZXJhY3Rpb24AAAAAAAgAAAAAAAAAFFNlbGZSYXRpbmdOb3RBbGxvd2VkAAAACQAAAAAAAAALTmFtZVRvb0xvbmcAAAAACgAAAAAAAAASRGVzY3JpcHRpb25Ub29Mb25nAAAAAAALAAAAAAAAABFTZXJ2aWNlVXJsVG9vTG9uZwAAAAAAAAwAAAAAAAAAE01jcFNlcnZlclVybFRvb0xvbmcAAAAADQAAAAAAAAAWUGF5bWVudEVuZHBvaW50VG9vTG9uZwAAAAAADgAAAAAAAAALVG9vTWFueVRhZ3MAAAAADwAAAAAAAAAKVGFnVG9vTG9uZwAAAAAAEAAAAAAAAAAMTmFtZVJlcXVpcmVkAAAAEQAAAAAAAAATRGVzY3JpcHRpb25SZXF1aXJlZAAAAAASAAAAAAAAAA9Ob3RQZW5kaW5nQWRtaW4AAAAAEwAAAAAAAAAXQWRtaW5UcmFuc2Zlck5vdEV4cGlyZWQAAAAAFAAAAAAAAAAITm90QWRtaW4AAAAVAAAAAAAAAA5BbHJlYWR5UmVsYXllcgAAAAAAFgAAAAAAAAAKTm90UmVsYXllcgAAAAAAFwAAAAAAAAAPUHJvZmlsZU5vdEZvdW5kAAAAABgAAAAAAAAAGVNlbGZJbnRlcmFjdGlvbk5vdEFsbG93ZWQAAAAAAAAZ", "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"];
@@ -0,0 +1,33 @@
1
+ /** Auto-generated — do not edit. Contract spec entries (base64 XDR). */
2
+ export const SPEC_ENTRIES = [
3
+ "AAAAAAAAAAAAAAAEaW5pdAAAAAIAAAAAAAAABWFkbWluAAAAAAAAEwAAAAAAAAASYXV0aG9yaXplZF9yZWxheWVyAAAAAAATAAAAAA==",
4
+ "AAAAAAAAAAAAAAAJZ2V0X2FnZW50AAAAAAAAAQAAAAAAAAANb3duZXJfYWRkcmVzcwAAAAAAABMAAAABAAAH0AAAAAxBZ2VudFByb2ZpbGU=",
5
+ "AAAAAAAAAAAAAAAKZ2V0X2NvbmZpZwAAAAAAAAAAAAEAAAfQAAAABkNvbmZpZwAA",
6
+ "AAAAAAAAAAAAAAAKZ2V0X3JhdGluZwAAAAAAAQAAAAAAAAATaW50ZXJhY3Rpb25fdHhfaGFzaAAAAAPuAAAAIAAAAAEAAAPoAAAH0AAAAAxSYXRpbmdSZWNvcmQ=",
7
+ "AAAAAAAAAAAAAAALYWRkX3JlbGF5ZXIAAAAAAgAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAdyZWxheWVyAAAAABMAAAAA",
8
+ "AAAAAAAAAAAAAAALbGlzdF9hZ2VudHMAAAAAAgAAAAAAAAAEZnJvbQAAAAQAAAAAAAAABWxpbWl0AAAAAAAABAAAAAEAAAPqAAAH0AAAAAxBZ2VudFByb2ZpbGU=",
9
+ "AAAAAAAAAAAAAAAMYWNjZXB0X2FkbWluAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAA=",
10
+ "AAAAAAAAAAAAAAAMZ2V0X3JlbGF5ZXJzAAAAAAAAAAEAAAPqAAAAEw==",
11
+ "AAAAAAAAAAAAAAANc3VibWl0X3JhdGluZwAAAAAAAAEAAAAAAAAABnJhdGluZwAAAAAH0AAAAAtSYXRpbmdJbnB1dAAAAAAA",
12
+ "AAAAAAAAAAAAAAAOcmVnaXN0ZXJfYWdlbnQAAAAAAAIAAAAAAAAADW93bmVyX2FkZHJlc3MAAAAAAAATAAAAAAAAAAVpbnB1dAAAAAAAB9AAAAARQWdlbnRQcm9maWxlSW5wdXQAAAAAAAAA",
13
+ "AAAAAAAAAAAAAAAOcmVtb3ZlX3JlbGF5ZXIAAAAAAAIAAAAAAAAABWFkbWluAAAAAAAAEwAAAAAAAAAHcmVsYXllcgAAAAATAAAAAA==",
14
+ "AAAAAAAAAAAAAAAOdHJhbnNmZXJfYWRtaW4AAAAAAAIAAAAAAAAABWFkbWluAAAAAAAAEwAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAA=",
15
+ "AAAAAAAAAAAAAAAOdXBkYXRlX3Byb2ZpbGUAAAAAAAIAAAAAAAAADW93bmVyX2FkZHJlc3MAAAAAAAATAAAAAAAAAAVpbnB1dAAAAAAAB9AAAAARQWdlbnRQcm9maWxlSW5wdXQAAAAAAAAA",
16
+ "AAAAAAAAAAAAAAAQZGVyZWdpc3Rlcl9hZ2VudAAAAAEAAAAAAAAADW93bmVyX2FkZHJlc3MAAAAAAAATAAAAAA==",
17
+ "AAAAAAAAAAAAAAAUcmVnaXN0ZXJfaW50ZXJhY3Rpb24AAAACAAAAAAAAAAdyZWxheWVyAAAAABMAAAAAAAAAC2ludGVyYWN0aW9uAAAAB9AAAAARSW50ZXJhY3Rpb25SZWNvcmQAAAAAAAAA",
18
+ "AAAAAAAAAAAAAAAVY2FuY2VsX2FkbWluX3RyYW5zZmVyAAAAAAAAAQAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAA==",
19
+ "AAAAAAAAAAAAAAAXbGlzdF9hZ2VudF9pbnRlcmFjdGlvbnMAAAAAAwAAAAAAAAAQcHJvdmlkZXJfYWRkcmVzcwAAABMAAAAAAAAACGZyb21fc2VxAAAABAAAAAAAAAAFbGltaXQAAAAAAAAEAAAAAQAAA+oAAAfQAAAAEUludGVyYWN0aW9uUmVjb3JkAAAA",
20
+ "AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAGQAAAAAAAAASQWxyZWFkeUluaXRpYWxpemVkAAAAAAABAAAAAAAAABFPd25lcnNoaXBDb25mbGljdAAAAAAAAAIAAAAAAAAADE1pc3NpbmdBZ2VudAAAAAMAAAAAAAAAD0R1cGxpY2F0ZVR4SGFzaAAAAAAEAAAAAAAAAA9EdXBsaWNhdGVSYXRpbmcAAAAABQAAAAAAAAAMSW52YWxpZFNjb3JlAAAABgAAAAAAAAATVW5hdXRob3JpemVkUmVsYXllcgAAAAAHAAAAAAAAABJNaXNzaW5nSW50ZXJhY3Rpb24AAAAAAAgAAAAAAAAAFFNlbGZSYXRpbmdOb3RBbGxvd2VkAAAACQAAAAAAAAALTmFtZVRvb0xvbmcAAAAACgAAAAAAAAASRGVzY3JpcHRpb25Ub29Mb25nAAAAAAALAAAAAAAAABFTZXJ2aWNlVXJsVG9vTG9uZwAAAAAAAAwAAAAAAAAAE01jcFNlcnZlclVybFRvb0xvbmcAAAAADQAAAAAAAAAWUGF5bWVudEVuZHBvaW50VG9vTG9uZwAAAAAADgAAAAAAAAALVG9vTWFueVRhZ3MAAAAADwAAAAAAAAAKVGFnVG9vTG9uZwAAAAAAEAAAAAAAAAAMTmFtZVJlcXVpcmVkAAAAEQAAAAAAAAATRGVzY3JpcHRpb25SZXF1aXJlZAAAAAASAAAAAAAAAA9Ob3RQZW5kaW5nQWRtaW4AAAAAEwAAAAAAAAAXQWRtaW5UcmFuc2Zlck5vdEV4cGlyZWQAAAAAFAAAAAAAAAAITm90QWRtaW4AAAAVAAAAAAAAAA5BbHJlYWR5UmVsYXllcgAAAAAAFgAAAAAAAAAKTm90UmVsYXllcgAAAAAAFwAAAAAAAAAPUHJvZmlsZU5vdEZvdW5kAAAAABgAAAAAAAAAGVNlbGZJbnRlcmFjdGlvbk5vdEFsbG93ZWQAAAAAAAAZ",
21
+ "AAAAAgAAAAAAAAAAAAAAClN0b3JhZ2VLZXkAAAAAAA8AAAAAAAAAAAAAAAZDb25maWcAAAAAAAAAAAAAAAAAElByb2ZpbGVPd25lcnNDb3VudAAAAAAAAQAAAAAAAAATUHJvZmlsZU93bmVyQnlJbmRleAAAAAABAAAABgAAAAEAAAAAAAAAEVByb2ZpbGVPd25lckluZGV4AAAAAAAAAQAAABMAAAABAAAAAAAAAAdQcm9maWxlAAAAAAEAAAATAAAAAQAAAAAAAAAUUHJvdmlkZXJDb3VudGVycGFydHkAAAACAAAAEwAAABMAAAABAAAAAAAAABNQcm92aWRlclJhdGluZ0NvdW50AAAAAAEAAAATAAAAAQAAAAAAAAATUHJvdmlkZXJSYXRpbmdUb3RhbAAAAAABAAAAEwAAAAEAAAAAAAAAC0ludGVyYWN0aW9uAAAAAAEAAAPuAAAAIAAAAAEAAAAAAAAABlJhdGluZwAAAAAAAQAAA+4AAAAgAAAAAQAAAAAAAAAYUHJvdmlkZXJJbnRlcmFjdGlvbkNvdW50AAAAAQAAABMAAAABAAAAAAAAAB1Qcm92aWRlckludGVyYWN0aW9uQnlTZXF1ZW5jZQAAAAAAAAIAAAATAAAABgAAAAEAAAAAAAAAB1JlbGF5ZXIAAAAAAQAAABMAAAAAAAAAAAAAAA1SZWxheWVyc0NvdW50AAAAAAAAAQAAAAAAAAAOUmVsYXllckJ5SW5kZXgAAAAAAAEAAAAG",
22
+ "AAAABQAAAAAAAAAAAAAADlByb2ZpbGVVcGRhdGVkAAAAAAABAAAAD3Byb2ZpbGVfdXBkYXRlZAAAAAAHAAAAAAAAAA1vd25lcl9hZGRyZXNzAAAAAAAAEwAAAAEAAAAAAAAABG5hbWUAAAAQAAAAAAAAAAAAAAALZGVzY3JpcHRpb24AAAAAEAAAAAAAAAAAAAAABHRhZ3MAAAPqAAAAEAAAAAAAAAAAAAAAC3NlcnZpY2VfdXJsAAAAA+gAAAAQAAAAAAAAAAAAAAAObWNwX3NlcnZlcl91cmwAAAAAA+gAAAAQAAAAAAAAAAAAAAAQcGF5bWVudF9lbmRwb2ludAAAA+gAAAAQAAAAAAAAAAI=",
23
+ "AAAABQAAAAAAAAAAAAAAD0FnZW50UmVnaXN0ZXJlZAAAAAABAAAAEGFnZW50X3JlZ2lzdGVyZWQAAAAIAAAAAAAAAA1vd25lcl9hZGRyZXNzAAAAAAAAEwAAAAEAAAAAAAAABG5hbWUAAAAQAAAAAAAAAAAAAAALZGVzY3JpcHRpb24AAAAAEAAAAAAAAAAAAAAABHRhZ3MAAAPqAAAAEAAAAAAAAAAAAAAAC3NlcnZpY2VfdXJsAAAAA+gAAAAQAAAAAAAAAAAAAAAObWNwX3NlcnZlcl91cmwAAAAAA+gAAAAQAAAAAAAAAAAAAAAQcGF5bWVudF9lbmRwb2ludAAAA+gAAAAQAAAAAAAAAAAAAAAKY3JlYXRlZF9hdAAAAAAABgAAAAAAAAAC",
24
+ "AAAABQAAAAAAAAAAAAAAD1JhdGluZ1N1Ym1pdHRlZAAAAAABAAAAEHJhdGluZ19zdWJtaXR0ZWQAAAAFAAAAAAAAABBwcm92aWRlcl9hZGRyZXNzAAAAEwAAAAEAAAAAAAAAEGNvbnN1bWVyX2FkZHJlc3MAAAATAAAAAQAAAAAAAAATaW50ZXJhY3Rpb25fdHhfaGFzaAAAAAPuAAAAIAAAAAEAAAAAAAAABXNjb3JlAAAAAAAABAAAAAAAAAAAAAAACXRpbWVzdGFtcAAAAAAAAAYAAAAAAAAAAg==",
25
+ "AAAABQAAAAAAAAAAAAAAEUFnZW50RGVyZWdpc3RlcmVkAAAAAAAAAQAAABJhZ2VudF9kZXJlZ2lzdGVyZWQAAAAAAAEAAAAAAAAADW93bmVyX2FkZHJlc3MAAAAAAAATAAAAAQAAAAI=",
26
+ "AAAABQAAAAAAAAAAAAAAFUludGVyYWN0aW9uUmVnaXN0ZXJlZAAAAAAAAAEAAAAWaW50ZXJhY3Rpb25fcmVnaXN0ZXJlZAAAAAAABgAAAAAAAAAQcHJvdmlkZXJfYWRkcmVzcwAAABMAAAABAAAAAAAAABBjb25zdW1lcl9hZGRyZXNzAAAAEwAAAAEAAAAAAAAAB3R4X2hhc2gAAAAD7gAAACAAAAAAAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAAAAAAAAAAAAl0aW1lc3RhbXAAAAAAAAAGAAAAAAAAAAAAAAANc2VydmljZV9sYWJlbAAAAAAAA+gAAAAQAAAAAAAAAAI=",
27
+ "AAAAAQAAAAAAAAAAAAAABkNvbmZpZwAAAAAAAwAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAABFhZG1pbl90cmFuc2Zlcl9hdAAAAAAAAAYAAAAAAAAADXBlbmRpbmdfYWRtaW4AAAAAAAPoAAAAEw==",
28
+ "AAAAAQAAAAAAAAAAAAAAC1JhdGluZ0lucHV0AAAAAAQAAAAAAAAAEGNvbnN1bWVyX2FkZHJlc3MAAAATAAAAAAAAABNpbnRlcmFjdGlvbl90eF9oYXNoAAAAA+4AAAAgAAAAAAAAABBwcm92aWRlcl9hZGRyZXNzAAAAEwAAAAAAAAAFc2NvcmUAAAAAAAAE",
29
+ "AAAAAQAAAAAAAAAAAAAADEFnZW50UHJvZmlsZQAAAA0AAAAAAAAACmNyZWF0ZWRfYXQAAAAAAAYAAAAAAAAAC2Rlc2NyaXB0aW9uAAAAABAAAAAAAAAAGmxhc3RfaW50ZXJhY3Rpb25fdGltZXN0YW1wAAAAAAAGAAAAAAAAAA5tY3Bfc2VydmVyX3VybAAAAAAD6AAAABAAAAAAAAAABG5hbWUAAAAQAAAAAAAAAA1vd25lcl9hZGRyZXNzAAAAAAAAEwAAAAAAAAAQcGF5bWVudF9lbmRwb2ludAAAA+gAAAAQAAAAAAAAAAVzY29yZQAAAAAAAAQAAAAAAAAAC3NlcnZpY2VfdXJsAAAAA+gAAAAQAAAAAAAAAAR0YWdzAAAD6gAAABAAAAAAAAAAFXRvdGFsX2Vjb25vbWljX3ZvbHVtZQAAAAAAAAoAAAAAAAAAG3VuaXF1ZV9jb3VudGVycGFydGllc19jb3VudAAAAAAGAAAAAAAAABt2ZXJpZmllZF9pbnRlcmFjdGlvbnNfY291bnQAAAAABg==",
30
+ "AAAAAQAAAAAAAAAAAAAADFJhdGluZ1JlY29yZAAAAAUAAAAAAAAAEGNvbnN1bWVyX2FkZHJlc3MAAAATAAAAAAAAABNpbnRlcmFjdGlvbl90eF9oYXNoAAAAA+4AAAAgAAAAAAAAABBwcm92aWRlcl9hZGRyZXNzAAAAEwAAAAAAAAAFc2NvcmUAAAAAAAAEAAAAAAAAAAl0aW1lc3RhbXAAAAAAAAAG",
31
+ "AAAAAQAAAAAAAAAAAAAAEUFnZW50UHJvZmlsZUlucHV0AAAAAAAABgAAAAAAAAALZGVzY3JpcHRpb24AAAAAEAAAAAAAAAAObWNwX3NlcnZlcl91cmwAAAAAA+gAAAAQAAAAAAAAAARuYW1lAAAAEAAAAAAAAAAQcGF5bWVudF9lbmRwb2ludAAAA+gAAAAQAAAAAAAAAAtzZXJ2aWNlX3VybAAAAAPoAAAAEAAAAAAAAAAEdGFncwAAA+oAAAAQ",
32
+ "AAAAAQAAAAAAAAAAAAAAEUludGVyYWN0aW9uUmVjb3JkAAAAAAAABgAAAAAAAAAGYW1vdW50AAAAAAALAAAAAAAAABBjb25zdW1lcl9hZGRyZXNzAAAAEwAAAAAAAAAQcHJvdmlkZXJfYWRkcmVzcwAAABMAAAAAAAAADXNlcnZpY2VfbGFiZWwAAAAAAAPoAAAAEAAAAAAAAAAJdGltZXN0YW1wAAAAAAAABgAAAAAAAAAHdHhfaGFzaAAAAAPuAAAAIA=="
33
+ ];
@@ -0,0 +1,117 @@
1
+ export type InitArgs = {
2
+ admin: string;
3
+ authorized_relayer: string;
4
+ };
5
+ export type Get_agentArgs = {
6
+ owner_address: string;
7
+ };
8
+ export type Get_configArgs = Record<string, never>;
9
+ export type Get_ratingArgs = {
10
+ interaction_tx_hash: string;
11
+ };
12
+ export type Add_relayerArgs = {
13
+ admin: string;
14
+ relayer: string;
15
+ };
16
+ export type List_agentsArgs = {
17
+ from: number;
18
+ limit: number;
19
+ };
20
+ export type Accept_adminArgs = {
21
+ new_admin: string;
22
+ };
23
+ export type Get_relayersArgs = Record<string, never>;
24
+ export type Submit_ratingArgs = {
25
+ rating: unknown;
26
+ };
27
+ export type Register_agentArgs = {
28
+ owner_address: string;
29
+ input: unknown;
30
+ };
31
+ export type Remove_relayerArgs = {
32
+ admin: string;
33
+ relayer: string;
34
+ };
35
+ export type Transfer_adminArgs = {
36
+ admin: string;
37
+ new_admin: string;
38
+ };
39
+ export type Update_profileArgs = {
40
+ owner_address: string;
41
+ input: unknown;
42
+ };
43
+ export type Deregister_agentArgs = {
44
+ owner_address: string;
45
+ };
46
+ export type Register_interactionArgs = {
47
+ relayer: string;
48
+ interaction: unknown;
49
+ };
50
+ export type Cancel_admin_transferArgs = {
51
+ admin: string;
52
+ };
53
+ export type List_agent_interactionsArgs = {
54
+ provider_address: string;
55
+ from_seq: number;
56
+ limit: number;
57
+ };
58
+ /** Narrow helper for building `args` passed to Spec.funcArgsToScVals in custom integrations. */
59
+ export declare const GeneratedContractCalls: {
60
+ readonly init: (args: InitArgs) => {
61
+ admin: string;
62
+ authorized_relayer: string;
63
+ };
64
+ readonly get_agent: (args: Get_agentArgs) => {
65
+ owner_address: string;
66
+ };
67
+ readonly get_config: (_args?: Record<string, never>) => {};
68
+ readonly get_rating: (args: Get_ratingArgs) => {
69
+ interaction_tx_hash: string;
70
+ };
71
+ readonly add_relayer: (args: Add_relayerArgs) => {
72
+ admin: string;
73
+ relayer: string;
74
+ };
75
+ readonly list_agents: (args: List_agentsArgs) => {
76
+ from: number;
77
+ limit: number;
78
+ };
79
+ readonly accept_admin: (args: Accept_adminArgs) => {
80
+ new_admin: string;
81
+ };
82
+ readonly get_relayers: (_args?: Record<string, never>) => {};
83
+ readonly submit_rating: (args: Submit_ratingArgs) => {
84
+ rating: unknown;
85
+ };
86
+ readonly register_agent: (args: Register_agentArgs) => {
87
+ owner_address: string;
88
+ input: unknown;
89
+ };
90
+ readonly remove_relayer: (args: Remove_relayerArgs) => {
91
+ admin: string;
92
+ relayer: string;
93
+ };
94
+ readonly transfer_admin: (args: Transfer_adminArgs) => {
95
+ admin: string;
96
+ new_admin: string;
97
+ };
98
+ readonly update_profile: (args: Update_profileArgs) => {
99
+ owner_address: string;
100
+ input: unknown;
101
+ };
102
+ readonly deregister_agent: (args: Deregister_agentArgs) => {
103
+ owner_address: string;
104
+ };
105
+ readonly register_interaction: (args: Register_interactionArgs) => {
106
+ relayer: string;
107
+ interaction: unknown;
108
+ };
109
+ readonly cancel_admin_transfer: (args: Cancel_admin_transferArgs) => {
110
+ admin: string;
111
+ };
112
+ readonly list_agent_interactions: (args: List_agent_interactionsArgs) => {
113
+ provider_address: string;
114
+ from_seq: number;
115
+ limit: number;
116
+ };
117
+ };
@@ -0,0 +1,20 @@
1
+ /** Narrow helper for building `args` passed to Spec.funcArgsToScVals in custom integrations. */
2
+ export const GeneratedContractCalls = {
3
+ "init": (args) => ({ admin: args.admin, authorized_relayer: args.authorized_relayer }),
4
+ "get_agent": (args) => ({ owner_address: args.owner_address }),
5
+ "get_config": (_args) => ({}),
6
+ "get_rating": (args) => ({ interaction_tx_hash: args.interaction_tx_hash }),
7
+ "add_relayer": (args) => ({ admin: args.admin, relayer: args.relayer }),
8
+ "list_agents": (args) => ({ from: args.from, limit: args.limit }),
9
+ "accept_admin": (args) => ({ new_admin: args.new_admin }),
10
+ "get_relayers": (_args) => ({}),
11
+ "submit_rating": (args) => ({ rating: args.rating }),
12
+ "register_agent": (args) => ({ owner_address: args.owner_address, input: args.input }),
13
+ "remove_relayer": (args) => ({ admin: args.admin, relayer: args.relayer }),
14
+ "transfer_admin": (args) => ({ admin: args.admin, new_admin: args.new_admin }),
15
+ "update_profile": (args) => ({ owner_address: args.owner_address, input: args.input }),
16
+ "deregister_agent": (args) => ({ owner_address: args.owner_address }),
17
+ "register_interaction": (args) => ({ relayer: args.relayer, interaction: args.interaction }),
18
+ "cancel_admin_transfer": (args) => ({ admin: args.admin }),
19
+ "list_agent_interactions": (args) => ({ provider_address: args.provider_address, from_seq: args.from_seq, limit: args.limit })
20
+ };
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env node
2
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
+ import { loadConfig } from "./config.js";
4
+ import { redactSensitiveText } from "./lib/redact.js";
5
+ import { createServer } from "./server.js";
6
+ async function main() {
7
+ const config = loadConfig();
8
+ const server = createServer(config);
9
+ const transport = new StdioServerTransport();
10
+ await server.connect(transport);
11
+ console.error("agent-passport-contract MCP (stdio) ready.");
12
+ }
13
+ main().catch((error) => {
14
+ const message = error instanceof Error ? error.message : String(error);
15
+ console.error("Fatal startup error:", redactSensitiveText(message));
16
+ process.exit(1);
17
+ });
@@ -0,0 +1,20 @@
1
+ import { Spec } from "@stellar/stellar-sdk/contract";
2
+ import type { AppConfig } from "../config.js";
3
+ export type InvokeToolResult = {
4
+ content: Array<{
5
+ type: "text";
6
+ text: string;
7
+ }>;
8
+ } | {
9
+ isError: true;
10
+ content: Array<{
11
+ type: "text";
12
+ text: string;
13
+ }>;
14
+ };
15
+ export declare function invokeContractMethod(config: AppConfig, spec: Spec, params: {
16
+ contractId: string;
17
+ sourceAccount: string;
18
+ method: string;
19
+ args: Record<string, unknown>;
20
+ }): Promise<InvokeToolResult>;
@@ -0,0 +1,87 @@
1
+ import { Account, Contract, Keypair, rpc, TransactionBuilder } from "@stellar/stellar-sdk";
2
+ import { normalizeStellarError } from "./errors.js";
3
+ import { redactSensitiveText, sanitizeDebugPayload } from "./redact.js";
4
+ import { createStellarClients } from "./stellarClient.js";
5
+ import { isUnsignedSigningMode } from "./policy.js";
6
+ export async function invokeContractMethod(config, spec, params) {
7
+ try {
8
+ const stellar = createStellarClients(config);
9
+ const contract = new Contract(params.contractId);
10
+ const scArgs = spec.funcArgsToScVals(params.method, params.args);
11
+ const call = contract.call(params.method, ...scArgs);
12
+ let account;
13
+ try {
14
+ account = await stellar.runHorizon(stellar.horizon.loadAccount(params.sourceAccount), "load_source_account");
15
+ }
16
+ catch {
17
+ account = new Account(params.sourceAccount, "0");
18
+ }
19
+ const builder = new TransactionBuilder(account, {
20
+ fee: "100",
21
+ networkPassphrase: stellar.networkPassphrase
22
+ });
23
+ builder.addOperation(call);
24
+ builder.setTimeout(30);
25
+ const tx = builder.build();
26
+ const simulation = await stellar.runRpc(stellar.rpc.simulateTransaction(tx), "simulate_transaction");
27
+ if (rpc.Api.isSimulationError(simulation)) {
28
+ throw new Error(`Simulation failed: ${simulation.error}`);
29
+ }
30
+ const preparedTxBuilder = rpc.assembleTransaction(tx, simulation);
31
+ const preparedTx = preparedTxBuilder.build();
32
+ const unsignedMode = isUnsignedSigningMode(config);
33
+ if (!unsignedMode && config.secretKey) {
34
+ preparedTx.sign(Keypair.fromSecret(config.secretKey));
35
+ }
36
+ if (unsignedMode || !config.secretKey) {
37
+ return {
38
+ content: [
39
+ {
40
+ type: "text",
41
+ text: JSON.stringify({
42
+ status: "unsigned",
43
+ message: "Transaction requires signatures. Sign assembled XDR (includes Soroban footprints) or enable signing policy + STELLAR_SECRET_KEY.",
44
+ unsignedXdr: preparedTx.toXDR()
45
+ }, null, 2)
46
+ }
47
+ ]
48
+ };
49
+ }
50
+ const submission = await stellar.runRpc(stellar.rpc.sendTransaction(preparedTx), "submit_soroban_transaction");
51
+ let nativeResult = null;
52
+ try {
53
+ const success = simulation;
54
+ if (success.result?.retval) {
55
+ nativeResult = spec.funcResToNative(params.method, success.result.retval);
56
+ }
57
+ }
58
+ catch {
59
+ nativeResult = null;
60
+ }
61
+ return {
62
+ content: [
63
+ {
64
+ type: "text",
65
+ text: JSON.stringify({
66
+ status: submission.status,
67
+ hash: submission.hash,
68
+ errorResultXdr: submission.errorResult?.toXDR("base64") ?? null,
69
+ resultPreview: nativeResult,
70
+ _debug: sanitizeDebugPayload({
71
+ contractId: params.contractId,
72
+ method: params.method,
73
+ networkPassphrase: stellar.networkPassphrase
74
+ })
75
+ }, null, 2)
76
+ }
77
+ ]
78
+ };
79
+ }
80
+ catch (error) {
81
+ const mapped = normalizeStellarError(error);
82
+ return {
83
+ isError: true,
84
+ content: [{ type: "text", text: redactSensitiveText(mapped.message) }]
85
+ };
86
+ }
87
+ }
@@ -0,0 +1,15 @@
1
+ export declare class NetworkError extends Error {
2
+ constructor(message: string);
3
+ }
4
+ export declare class StellarProtocolError extends Error {
5
+ readonly code?: string | undefined;
6
+ constructor(message: string, code?: string | undefined);
7
+ }
8
+ export declare function mapStellarResultCodes(transactionCode?: string, operationCode?: string): StellarProtocolError;
9
+ export declare function normalizeStellarError(error: unknown): Error;
10
+ export declare function mapUnknownError(error: unknown): Error;
11
+ /**
12
+ * Detect Horizon HTTP 404 (resource missing) for RPC fallback paths.
13
+ * Walks Error.cause when present (SDK / fetch wrappers).
14
+ */
15
+ export declare function isHorizonAxiosNotFound(error: unknown): boolean;
@@ -0,0 +1,137 @@
1
+ import { NotFoundError as StellarNotFoundError } from "@stellar/stellar-sdk";
2
+ export class NetworkError extends Error {
3
+ constructor(message) {
4
+ super(message);
5
+ this.name = "NetworkError";
6
+ }
7
+ }
8
+ export class StellarProtocolError extends Error {
9
+ code;
10
+ constructor(message, code) {
11
+ super(message);
12
+ this.code = code;
13
+ this.name = "StellarProtocolError";
14
+ }
15
+ }
16
+ const TX_CODE_MESSAGES = {
17
+ tx_bad_auth: "Transaction failed: tx_bad_auth — invalid signatures. Rebuild and sign with required account signers, and verify network passphrase matches STELLAR_NETWORK.",
18
+ tx_bad_seq: "Transaction failed: tx_bad_seq — sequence number is stale. Reload the source account and rebuild the transaction.",
19
+ tx_no_source_account: "Transaction failed: tx_no_source_account — source account does not exist on this network. Create/fund the account first.",
20
+ tx_failed: "Transaction failed: tx_failed — one or more operations were rejected. Inspect operation result codes for actionable remediation.",
21
+ tx_insufficient_fee: "Transaction failed: tx_insufficient_fee — offered fee is too low. Retry using stellar_get_fee_stats recommendation.",
22
+ tx_internal_error: "Transaction failed: tx_internal_error — temporary Stellar internal issue. Retry the request.",
23
+ tx_too_early: "Transaction failed: tx_too_early — transaction time bounds not yet valid. Rebuild with current time bounds.",
24
+ tx_too_late: "Transaction failed: tx_too_late — transaction expired. Rebuild and submit again.",
25
+ tx_missing_operation: "Transaction failed: tx_missing_operation — no operations found. Build transaction with at least one operation.",
26
+ tx_bad_auth_extra: "Transaction failed: tx_bad_auth_extra — unexpected signatures present. Remove extra signatures and retry."
27
+ };
28
+ const OP_CODE_MESSAGES = {
29
+ op_malformed: "Operation failed: op_malformed — invalid operation structure/parameters. Validate fields and rebuild transaction.",
30
+ op_bad_auth: "Operation failed: op_bad_auth — source account authorization failed. Verify signer/threshold configuration.",
31
+ op_no_source_account: "Operation failed: op_no_source_account — source account does not exist on this network.",
32
+ op_not_supported: "Operation failed: op_not_supported — operation not supported on current network/protocol version.",
33
+ op_too_many_subentries: "Operation failed: op_too_many_subentries — account reached subentry limits. Clean up trustlines/offers/signers.",
34
+ op_exceeded_work_limit: "Operation failed: op_exceeded_work_limit — operation exceeded work limit. Retry with smaller transaction scope.",
35
+ op_underfunded: "Operation failed: op_underfunded — source account does not have enough balance after reserve constraints.",
36
+ op_no_destination: "Operation failed: op_no_destination — destination account does not exist. Create and fund account first.",
37
+ op_low_reserve: "Operation failed: op_low_reserve — balance would drop below minimum reserve. Add XLM headroom and retry.",
38
+ op_no_trust: "Operation failed: op_no_trust — destination account has no trustline for this asset. Call stellar_create_trustline first.",
39
+ op_not_authorized: "Operation failed: op_not_authorized — trustline is not authorized by issuer. Request issuer authorization first.",
40
+ op_line_full: "Operation failed: op_line_full — destination trustline limit reached. Increase trustline limit.",
41
+ op_offer_not_found: "Operation failed: op_offer_not_found — target offer does not exist.",
42
+ op_cross_self: "Operation failed: op_cross_self — operation would cross your own offer. Adjust order parameters.",
43
+ op_sell_no_trust: "Operation failed: op_sell_no_trust — source account lacks trustline for selling asset.",
44
+ op_buy_no_trust: "Operation failed: op_buy_no_trust — source account lacks trustline for buying asset.",
45
+ op_sell_not_authorized: "Operation failed: op_sell_not_authorized — source account is not authorized to sell this asset.",
46
+ op_buy_not_authorized: "Operation failed: op_buy_not_authorized — source account is not authorized to buy this asset.",
47
+ op_no_issuer: "Operation failed: op_no_issuer — referenced asset issuer account does not exist.",
48
+ op_self_not_allowed: "Operation failed: op_self_not_allowed — source and destination cannot be the same for this operation.",
49
+ op_too_few_offers: "Operation failed: op_too_few_offers — no valid path/offers found. Retry with different assets/amount/slippage."
50
+ };
51
+ const SOROBAN_MESSAGES = {
52
+ auth_not_authorized: "Soroban invocation failed: auth_not_authorized — required signer authorization missing. Ensure require_auth signer is present.",
53
+ wasm_vm_error: "Soroban invocation failed: wasm_vm_error — contract execution trapped or exceeded budget. Inspect contract logic and simulation output.",
54
+ storage_not_live: "Soroban invocation failed: storage_not_live — contract storage entry expired. Extend TTL and retry.",
55
+ invoke_error: "Soroban invocation failed: invoke_error — contract returned an execution error. Inspect returned events and result XDR.",
56
+ tx_resource_limit_exceeded: "Soroban invocation failed: tx_resource_limit_exceeded — CPU/memory/resource footprint exceeded. Re-simulate and reduce invocation size."
57
+ };
58
+ function messageFor(code, fallbackPrefix) {
59
+ return (OP_CODE_MESSAGES[code] ??
60
+ TX_CODE_MESSAGES[code] ??
61
+ SOROBAN_MESSAGES[code] ??
62
+ `${fallbackPrefix}: ${code} — no mapped remediation yet.`);
63
+ }
64
+ export function mapStellarResultCodes(transactionCode, operationCode) {
65
+ if (operationCode) {
66
+ return new StellarProtocolError(messageFor(operationCode, "Operation failed"), operationCode);
67
+ }
68
+ if (transactionCode) {
69
+ return new StellarProtocolError(messageFor(transactionCode, "Transaction failed"), transactionCode);
70
+ }
71
+ return new StellarProtocolError("Stellar protocol failure: unknown result code. Inspect Horizon/RPC result payload for details.");
72
+ }
73
+ function isNetworkLikeMessage(message) {
74
+ const lower = message.toLowerCase();
75
+ return (lower.includes("timeout") ||
76
+ lower.includes("timed out") ||
77
+ lower.includes("econnreset") ||
78
+ lower.includes("econnrefused") ||
79
+ lower.includes("enotfound") ||
80
+ lower.includes("network"));
81
+ }
82
+ function extractResultCodes(error) {
83
+ const maybe = error;
84
+ const resultCodes = maybe.response?.data?.extras?.result_codes;
85
+ return {
86
+ transaction: resultCodes?.transaction,
87
+ operation: resultCodes?.operations?.[0]
88
+ };
89
+ }
90
+ export function normalizeStellarError(error) {
91
+ if (error instanceof NetworkError || error instanceof StellarProtocolError) {
92
+ return error;
93
+ }
94
+ const { transaction, operation } = extractResultCodes(error);
95
+ if (transaction || operation) {
96
+ return mapStellarResultCodes(transaction, operation);
97
+ }
98
+ if (error instanceof Error && isNetworkLikeMessage(error.message)) {
99
+ return new NetworkError(`Network request failed: ${error.message}. Verify endpoint availability and retry.`);
100
+ }
101
+ if (typeof error === "object" &&
102
+ error !== null &&
103
+ "code" in error &&
104
+ typeof error.code === "string") {
105
+ const code = error.code;
106
+ if (["ECONNREFUSED", "ECONNRESET", "ENOTFOUND", "ETIMEDOUT"].includes(code)) {
107
+ return new NetworkError(`Network request failed: ${code}. Verify endpoint connectivity and retry.`);
108
+ }
109
+ }
110
+ return mapUnknownError(error);
111
+ }
112
+ export function mapUnknownError(error) {
113
+ if (error instanceof Error) {
114
+ return error;
115
+ }
116
+ return new Error("Unexpected non-error exception thrown.");
117
+ }
118
+ /**
119
+ * Detect Horizon HTTP 404 (resource missing) for RPC fallback paths.
120
+ * Walks Error.cause when present (SDK / fetch wrappers).
121
+ */
122
+ export function isHorizonAxiosNotFound(error) {
123
+ if (error instanceof StellarNotFoundError) {
124
+ return true;
125
+ }
126
+ if (!error || typeof error !== "object") {
127
+ return false;
128
+ }
129
+ const any = error;
130
+ if (any.response?.status === 404) {
131
+ return true;
132
+ }
133
+ if (any.cause) {
134
+ return isHorizonAxiosNotFound(any.cause);
135
+ }
136
+ return false;
137
+ }
@@ -0,0 +1,5 @@
1
+ import type { AppConfig } from "../config.js";
2
+ /**
3
+ * Mirrors StellarMCP signing policy: unsigned / expert paths for generated Soroban tools.
4
+ */
5
+ export declare function isUnsignedSigningMode(config: AppConfig): boolean;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Mirrors StellarMCP signing policy: unsigned / expert paths for generated Soroban tools.
3
+ */
4
+ export function isUnsignedSigningMode(config) {
5
+ return (config.autoSignPolicy === "safe" ||
6
+ (config.autoSignPolicy === "guarded" && config.autoSignLimit === 0) ||
7
+ (!config.autoSignPolicy && !config.autoSign));
8
+ }
@@ -0,0 +1,2 @@
1
+ export declare function redactSensitiveText(value: string): string;
2
+ export declare function sanitizeDebugPayload<T>(payload: T): T;
@@ -0,0 +1,42 @@
1
+ const SECRET_KEY_PATTERN = /\bS[A-Z2-7]{20,}\b/g;
2
+ const BEARER_PATTERN = /\bBearer\s+[A-Za-z0-9\-._~+/]+=*\b/gi;
3
+ const BLOCKED_KEYS = new Set([
4
+ "secret",
5
+ "secretkey",
6
+ "secret_key",
7
+ "seed",
8
+ "token",
9
+ "authorization",
10
+ "apiKey",
11
+ "apikey",
12
+ "privatekey",
13
+ "private_key"
14
+ ].map((entry) => entry.toLowerCase()));
15
+ function shouldDropKey(key) {
16
+ const normalized = key.toLowerCase();
17
+ return BLOCKED_KEYS.has(normalized);
18
+ }
19
+ export function redactSensitiveText(value) {
20
+ return value
21
+ .replace(SECRET_KEY_PATTERN, "[REDACTED_SECRET]")
22
+ .replace(BEARER_PATTERN, "[REDACTED_BEARER]");
23
+ }
24
+ export function sanitizeDebugPayload(payload) {
25
+ if (Array.isArray(payload)) {
26
+ return payload.map((entry) => sanitizeDebugPayload(entry));
27
+ }
28
+ if (payload && typeof payload === "object") {
29
+ const result = {};
30
+ for (const [key, value] of Object.entries(payload)) {
31
+ if (shouldDropKey(key)) {
32
+ continue;
33
+ }
34
+ result[key] = sanitizeDebugPayload(value);
35
+ }
36
+ return result;
37
+ }
38
+ if (typeof payload === "string") {
39
+ return redactSensitiveText(payload);
40
+ }
41
+ return payload;
42
+ }