@stellar-agent-services/provider-kit 0.0.0-stage → 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 (220) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +506 -2
  3. package/dist/approve/assets/index-BazIJAI2.css +1 -0
  4. package/dist/approve/assets/index-CL28cSJy.js +420 -0
  5. package/dist/approve/favicon.svg +1 -0
  6. package/dist/approve/index.html +18 -0
  7. package/dist/cli/approval-view.d.ts +80 -0
  8. package/dist/cli/approval-view.d.ts.map +1 -0
  9. package/dist/cli/approval-view.js +5 -0
  10. package/dist/cli/approval-view.js.map +1 -0
  11. package/dist/cli/approval.d.ts +132 -0
  12. package/dist/cli/approval.d.ts.map +1 -0
  13. package/dist/cli/approval.js +542 -0
  14. package/dist/cli/approval.js.map +1 -0
  15. package/dist/cli/check.d.ts +3 -0
  16. package/dist/cli/check.d.ts.map +1 -0
  17. package/dist/cli/check.js +137 -0
  18. package/dist/cli/check.js.map +1 -0
  19. package/dist/cli/dev-account.d.ts +28 -0
  20. package/dist/cli/dev-account.d.ts.map +1 -0
  21. package/dist/cli/dev-account.js +62 -0
  22. package/dist/cli/dev-account.js.map +1 -0
  23. package/dist/cli/dev.d.ts +27 -0
  24. package/dist/cli/dev.d.ts.map +1 -0
  25. package/dist/cli/dev.js +226 -0
  26. package/dist/cli/dev.js.map +1 -0
  27. package/dist/cli/discovery.d.ts +20 -0
  28. package/dist/cli/discovery.d.ts.map +1 -0
  29. package/dist/cli/discovery.js +202 -0
  30. package/dist/cli/discovery.js.map +1 -0
  31. package/dist/cli/env-file.d.ts +16 -0
  32. package/dist/cli/env-file.d.ts.map +1 -0
  33. package/dist/cli/env-file.js +77 -0
  34. package/dist/cli/env-file.js.map +1 -0
  35. package/dist/cli/fly.d.ts +28 -0
  36. package/dist/cli/fly.d.ts.map +1 -0
  37. package/dist/cli/fly.js +92 -0
  38. package/dist/cli/fly.js.map +1 -0
  39. package/dist/cli/index.d.ts +3 -0
  40. package/dist/cli/index.d.ts.map +1 -0
  41. package/dist/cli/index.js +11 -0
  42. package/dist/cli/index.js.map +1 -0
  43. package/dist/cli/init.d.ts +3 -0
  44. package/dist/cli/init.d.ts.map +1 -0
  45. package/dist/cli/init.js +170 -0
  46. package/dist/cli/init.js.map +1 -0
  47. package/dist/cli/launch.d.ts +21 -0
  48. package/dist/cli/launch.d.ts.map +1 -0
  49. package/dist/cli/launch.js +627 -0
  50. package/dist/cli/launch.js.map +1 -0
  51. package/dist/cli/main.d.ts +2 -0
  52. package/dist/cli/main.d.ts.map +1 -0
  53. package/dist/cli/main.js +158 -0
  54. package/dist/cli/main.js.map +1 -0
  55. package/dist/cli/owner-chain.d.ts +88 -0
  56. package/dist/cli/owner-chain.d.ts.map +1 -0
  57. package/dist/cli/owner-chain.js +284 -0
  58. package/dist/cli/owner-chain.js.map +1 -0
  59. package/dist/cli/owner-steps.d.ts +33 -0
  60. package/dist/cli/owner-steps.d.ts.map +1 -0
  61. package/dist/cli/owner-steps.js +121 -0
  62. package/dist/cli/owner-steps.js.map +1 -0
  63. package/dist/cli/processes.d.ts +47 -0
  64. package/dist/cli/processes.d.ts.map +1 -0
  65. package/dist/cli/processes.js +129 -0
  66. package/dist/cli/processes.js.map +1 -0
  67. package/dist/cli/reconcile.d.ts +3 -0
  68. package/dist/cli/reconcile.d.ts.map +1 -0
  69. package/dist/cli/reconcile.js +76 -0
  70. package/dist/cli/reconcile.js.map +1 -0
  71. package/dist/cli/register.d.ts +9 -0
  72. package/dist/cli/register.d.ts.map +1 -0
  73. package/dist/cli/register.js +209 -0
  74. package/dist/cli/register.js.map +1 -0
  75. package/dist/cli/request-validation.d.ts +5 -0
  76. package/dist/cli/request-validation.d.ts.map +1 -0
  77. package/dist/cli/request-validation.js +144 -0
  78. package/dist/cli/request-validation.js.map +1 -0
  79. package/dist/cli/serve.d.ts +25 -0
  80. package/dist/cli/serve.d.ts.map +1 -0
  81. package/dist/cli/serve.js +73 -0
  82. package/dist/cli/serve.js.map +1 -0
  83. package/dist/cli/shared.d.ts +142 -0
  84. package/dist/cli/shared.d.ts.map +1 -0
  85. package/dist/cli/shared.js +110 -0
  86. package/dist/cli/shared.js.map +1 -0
  87. package/dist/cli/status.d.ts +32 -0
  88. package/dist/cli/status.d.ts.map +1 -0
  89. package/dist/cli/status.js +248 -0
  90. package/dist/cli/status.js.map +1 -0
  91. package/dist/cli/target.d.ts +14 -0
  92. package/dist/cli/target.d.ts.map +1 -0
  93. package/dist/cli/target.js +43 -0
  94. package/dist/cli/target.js.map +1 -0
  95. package/dist/cli/trustline.d.ts +3 -0
  96. package/dist/cli/trustline.d.ts.map +1 -0
  97. package/dist/cli/trustline.js +114 -0
  98. package/dist/cli/trustline.js.map +1 -0
  99. package/dist/cli/try.d.ts +54 -0
  100. package/dist/cli/try.d.ts.map +1 -0
  101. package/dist/cli/try.js +448 -0
  102. package/dist/cli/try.js.map +1 -0
  103. package/dist/cli/tunnel.d.ts +13 -0
  104. package/dist/cli/tunnel.d.ts.map +1 -0
  105. package/dist/cli/tunnel.js +43 -0
  106. package/dist/cli/tunnel.js.map +1 -0
  107. package/dist/cli/validators.d.ts +6 -0
  108. package/dist/cli/validators.d.ts.map +1 -0
  109. package/dist/cli/validators.js +14 -0
  110. package/dist/cli/validators.js.map +1 -0
  111. package/dist/define-service.d.ts +71 -0
  112. package/dist/define-service.d.ts.map +1 -0
  113. package/dist/define-service.js +86 -0
  114. package/dist/define-service.js.map +1 -0
  115. package/dist/gateway/config.d.ts +88 -0
  116. package/dist/gateway/config.d.ts.map +1 -0
  117. package/dist/gateway/config.js +201 -0
  118. package/dist/gateway/config.js.map +1 -0
  119. package/dist/gateway/openapi.d.ts +69 -0
  120. package/dist/gateway/openapi.d.ts.map +1 -0
  121. package/dist/gateway/openapi.js +677 -0
  122. package/dist/gateway/openapi.js.map +1 -0
  123. package/dist/gateway/upstream.d.ts +15 -0
  124. package/dist/gateway/upstream.d.ts.map +1 -0
  125. package/dist/gateway/upstream.js +95 -0
  126. package/dist/gateway/upstream.js.map +1 -0
  127. package/dist/http/bounded.d.ts +3 -0
  128. package/dist/http/bounded.d.ts.map +1 -0
  129. package/dist/http/bounded.js +23 -0
  130. package/dist/http/bounded.js.map +1 -0
  131. package/dist/http/node-server.d.ts +15 -0
  132. package/dist/http/node-server.d.ts.map +1 -0
  133. package/dist/http/node-server.js +120 -0
  134. package/dist/http/node-server.js.map +1 -0
  135. package/dist/http/rate-limit.d.ts +11 -0
  136. package/dist/http/rate-limit.d.ts.map +1 -0
  137. package/dist/http/rate-limit.js +35 -0
  138. package/dist/http/rate-limit.js.map +1 -0
  139. package/dist/http/router.d.ts +29 -0
  140. package/dist/http/router.d.ts.map +1 -0
  141. package/dist/http/router.js +329 -0
  142. package/dist/http/router.js.map +1 -0
  143. package/dist/index.d.ts +20 -0
  144. package/dist/index.d.ts.map +1 -0
  145. package/dist/index.js +31 -0
  146. package/dist/index.js.map +1 -0
  147. package/dist/jobs/memory-store.d.ts +3 -0
  148. package/dist/jobs/memory-store.d.ts.map +1 -0
  149. package/dist/jobs/memory-store.js +121 -0
  150. package/dist/jobs/memory-store.js.map +1 -0
  151. package/dist/jobs/reconcile.d.ts +22 -0
  152. package/dist/jobs/reconcile.d.ts.map +1 -0
  153. package/dist/jobs/reconcile.js +82 -0
  154. package/dist/jobs/reconcile.js.map +1 -0
  155. package/dist/jobs/recovery.d.ts +19 -0
  156. package/dist/jobs/recovery.d.ts.map +1 -0
  157. package/dist/jobs/recovery.js +65 -0
  158. package/dist/jobs/recovery.js.map +1 -0
  159. package/dist/jobs/runner.d.ts +38 -0
  160. package/dist/jobs/runner.d.ts.map +1 -0
  161. package/dist/jobs/runner.js +194 -0
  162. package/dist/jobs/runner.js.map +1 -0
  163. package/dist/jobs/scheduler.d.ts +66 -0
  164. package/dist/jobs/scheduler.d.ts.map +1 -0
  165. package/dist/jobs/scheduler.js +197 -0
  166. package/dist/jobs/scheduler.js.map +1 -0
  167. package/dist/jobs/sqlite-store.d.ts +8 -0
  168. package/dist/jobs/sqlite-store.d.ts.map +1 -0
  169. package/dist/jobs/sqlite-store.js +231 -0
  170. package/dist/jobs/sqlite-store.js.map +1 -0
  171. package/dist/jobs/store.d.ts +118 -0
  172. package/dist/jobs/store.d.ts.map +1 -0
  173. package/dist/jobs/store.js +36 -0
  174. package/dist/jobs/store.js.map +1 -0
  175. package/dist/manifest.d.ts +11 -0
  176. package/dist/manifest.d.ts.map +1 -0
  177. package/dist/manifest.js +99 -0
  178. package/dist/manifest.js.map +1 -0
  179. package/dist/payments/chain.d.ts +23 -0
  180. package/dist/payments/chain.d.ts.map +1 -0
  181. package/dist/payments/chain.js +108 -0
  182. package/dist/payments/chain.js.map +1 -0
  183. package/dist/payments/facilitator.d.ts +44 -0
  184. package/dist/payments/facilitator.d.ts.map +1 -0
  185. package/dist/payments/facilitator.js +125 -0
  186. package/dist/payments/facilitator.js.map +1 -0
  187. package/dist/payments/onchain.d.ts +36 -0
  188. package/dist/payments/onchain.d.ts.map +1 -0
  189. package/dist/payments/onchain.js +191 -0
  190. package/dist/payments/onchain.js.map +1 -0
  191. package/dist/payments/payload-checks.d.ts +22 -0
  192. package/dist/payments/payload-checks.d.ts.map +1 -0
  193. package/dist/payments/payload-checks.js +113 -0
  194. package/dist/payments/payload-checks.js.map +1 -0
  195. package/dist/payments/settlement.d.ts +22 -0
  196. package/dist/payments/settlement.d.ts.map +1 -0
  197. package/dist/payments/settlement.js +65 -0
  198. package/dist/payments/settlement.js.map +1 -0
  199. package/dist/payments/x402-server.d.ts +8 -0
  200. package/dist/payments/x402-server.d.ts.map +1 -0
  201. package/dist/payments/x402-server.js +74 -0
  202. package/dist/payments/x402-server.js.map +1 -0
  203. package/dist/provider.d.ts +63 -0
  204. package/dist/provider.d.ts.map +1 -0
  205. package/dist/provider.js +177 -0
  206. package/dist/provider.js.map +1 -0
  207. package/dist/registration.d.ts +86 -0
  208. package/dist/registration.d.ts.map +1 -0
  209. package/dist/registration.js +162 -0
  210. package/dist/registration.js.map +1 -0
  211. package/dist/testing.d.ts +13 -0
  212. package/dist/testing.d.ts.map +1 -0
  213. package/dist/testing.js +48 -0
  214. package/dist/testing.js.map +1 -0
  215. package/dist/validation-request.d.ts +36 -0
  216. package/dist/validation-request.d.ts.map +1 -0
  217. package/dist/validation-request.js +101 -0
  218. package/dist/validation-request.js.map +1 -0
  219. package/package.json +55 -4
  220. package/schemas/gateway-config.schema.json +140 -0
@@ -0,0 +1,101 @@
1
+ // Asking a verifier for validation (docs/verification.md): the provider's owner names a verifier in the
2
+ // Stellar 8004 Validation Registry with validation_request, and the verifier answers with a verification
3
+ // receipt, validation_response. `provider-kit request-validation` is the command.
4
+ //
5
+ // prepareValidationRequest() checks everything the request depends on before anything is signed:
6
+ // - a verifier can validate the provider: it is served over HTTPS, and its registration passes [I1]–[I3],
7
+ // as the verifier's C2 will check;
8
+ // - the signer may ask: the registry takes a request only from the agent's owner, the address approved for
9
+ // the agent, or an operator of the owner's;
10
+ // - the validator is someone else: not the agent's owner, its wallet or the signer. The registry would let a
11
+ // provider name itself, but such an answer would prove nothing.
12
+ // The request document is RFC 8785 canonical JSON. request_hash is its SHA-256, and request_uri a data: URI
13
+ // holding exactly those bytes, so the request lives on chain and needs no hosting. Nothing here signs: the
14
+ // CLI has the owner's wallet sign the invocation, or hands it to the Stellar CLI keychain (--source).
15
+ import { PROVIDER_STANDARD, stellarAddressKind, VALIDATION_REQUEST_TYPE, validationRequestDataUri, validationRequestHash, } from "@stellar-agent-services/protocol";
16
+ import { checkRegistration, mayActFor } from "./registration.js";
17
+ export class ValidationRequestError extends Error {
18
+ problems;
19
+ name = "ValidationRequestError";
20
+ constructor(problems) {
21
+ super(`no validation is requested:\n${problems.map((problem) => ` - ${problem}`).join("\n")}`);
22
+ this.problems = problems;
23
+ }
24
+ }
25
+ /** Checks everything a validation_request depends on, then builds it. Throws a ValidationRequestError listing every problem. */
26
+ export async function prepareValidationRequest(manifest, manifestUrl, options) {
27
+ const { registry, validator, signer } = options;
28
+ const { network, payTo } = manifest.payment.accepts[0];
29
+ const agentId = manifest.provider.agentId;
30
+ const problems = [];
31
+ if (!manifestUrl.startsWith("https://"))
32
+ problems.push("a dev-mode provider (http://localhost) can't be validated: deploy it on HTTPS first");
33
+ if (agentId === undefined)
34
+ problems.push("provider.agentId is not set [I2]: provider-kit launch registers the provider and saves its agent id");
35
+ if (stellarAddressKind(validator) !== "account")
36
+ problems.push("the validator must be a G... account address");
37
+ if (registry.network !== network)
38
+ problems.push(`the provider is on ${network}, but the registry is on ${registry.network}`);
39
+ if (problems.length > 0 || agentId === undefined)
40
+ throw new ValidationRequestError(problems);
41
+ try {
42
+ // Without what C2 checks, the verifier's answer could never earn "8004 validated".
43
+ const findings = await checkRegistration(manifest, manifestUrl, { registry, ...(options.fetch === undefined ? {} : { fetch: options.fetch }) });
44
+ for (const finding of findings)
45
+ if (!finding.ok)
46
+ problems.push(`[${finding.rule}] ${finding.message}`);
47
+ const owner = await registry.agentOwner(agentId);
48
+ if ([owner, payTo, signer].includes(validator)) {
49
+ problems.push("the validator is the provider itself (its owner, its wallet or the signing key): name an independent verifier's account");
50
+ }
51
+ if (owner !== undefined && signer !== undefined && !(await mayActFor(registry, agentId, owner, signer))) {
52
+ problems.push(`${signer} may not ask for agent ${agentId}'s validation: only its owner ${owner}, the address approved for the agent, or an operator of the owner's may`);
53
+ }
54
+ }
55
+ catch (error) {
56
+ problems.push(`the Stellar 8004 registries can't be read: ${error.message}`);
57
+ }
58
+ if (problems.length > 0)
59
+ throw new ValidationRequestError(problems);
60
+ const request = {
61
+ standard: PROVIDER_STANDARD,
62
+ type: VALIDATION_REQUEST_TYPE,
63
+ agentId,
64
+ network,
65
+ manifest: { url: manifestUrl },
66
+ validator,
67
+ requestedAt: (options.now?.() ?? new Date()).toISOString(),
68
+ };
69
+ return {
70
+ request,
71
+ requestHash: await validationRequestHash(request),
72
+ requestUri: validationRequestDataUri(request),
73
+ contractId: registry.contracts.validation,
74
+ };
75
+ }
76
+ /** The arguments of `stellar` that send the request: a contract invocation of validation_request. `caller` is the --source key's address. */
77
+ export function validationRequestArguments(prepared, options) {
78
+ return [
79
+ "contract",
80
+ "invoke",
81
+ "--id",
82
+ prepared.contractId,
83
+ "--source-account",
84
+ options.source,
85
+ "--network",
86
+ options.network,
87
+ "--",
88
+ "validation_request",
89
+ "--caller",
90
+ options.caller,
91
+ "--validator_address",
92
+ prepared.request.validator,
93
+ "--agent_id",
94
+ String(prepared.request.agentId),
95
+ "--request_uri",
96
+ prepared.requestUri,
97
+ "--request_hash",
98
+ prepared.requestHash,
99
+ ];
100
+ }
101
+ //# sourceMappingURL=validation-request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-request.js","sourceRoot":"","sources":["../src/validation-request.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,57 @@
1
1
  {
2
2
  "name": "@stellar-agent-services/provider-kit",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.1.0",
4
+ "description": "Turn a function, or an existing HTTP API in any language, into a paid Stellar service: Provider Standard v1 manifest, x402 USDC payments, job recovery, capacity.",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/AlgoriaLabs/stellar-agent-services.git",
10
+ "directory": "packages/provider-kit"
11
+ },
12
+ "engines": {
13
+ "node": ">=22.13"
14
+ },
15
+ "exports": {
16
+ ".": {
17
+ "types": "./dist/index.d.ts",
18
+ "default": "./dist/index.js"
19
+ },
20
+ "./testing": {
21
+ "types": "./dist/testing.d.ts",
22
+ "default": "./dist/testing.js"
23
+ }
24
+ },
25
+ "files": [
26
+ "dist",
27
+ "schemas",
28
+ "!dist/.tsbuildinfo"
29
+ ],
30
+ "scripts": {
31
+ "build": "tsc -b && npm run build:approve",
32
+ "build:approve": "vite build --config approve/vite.config.ts",
33
+ "dev:approve": "vite --config approve/vite.config.ts",
34
+ "check": "svelte-check --workspace ./approve --tsconfig ./tsconfig.json --fail-on-warnings"
35
+ },
36
+ "dependencies": {
37
+ "@stellar-agent-services/payment-client": "0.1.0",
38
+ "@stellar-agent-services/protocol": "0.1.0",
39
+ "@stellar/stellar-sdk": "16.4.1",
40
+ "@trionlabs/stellar8004": "0.0.11",
41
+ "@x402/core": "2.28.0",
42
+ "@x402/stellar": "2.28.0",
43
+ "ajv": "8.20.0",
44
+ "yaml": "2.9.1"
45
+ },
46
+ "bin": {
47
+ "provider-kit": "./dist/cli/index.js"
48
+ },
49
+ "devDependencies": {
50
+ "@creit.tech/stellar-wallets-kit": "2.7.1",
51
+ "@sveltejs/vite-plugin-svelte": "7.3.1",
52
+ "buffer": "6.0.3",
53
+ "svelte": "5.57.2",
54
+ "svelte-check": "4.7.6",
55
+ "vite": "8.3.4"
56
+ }
57
+ }
@@ -0,0 +1,140 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://algorialabs.github.io/stellar-agent-services/schemas/provider-kit/gateway-config.schema.json",
4
+ "title": "Provider Kit gateway config",
5
+ "description": "Puts an existing HTTP API, in any language, behind Provider Standard v1: manifest, x402 payment, job recovery and capacity. Run it with `provider-kit serve --config <file>`. Values written \"env:NAME\" are read from the environment variable NAME, in the fields that say so. The gateway holds no Stellar secret key.",
6
+ "type": "object",
7
+ "required": ["baseUrl", "network", "payTo", "facilitator", "provider", "services"],
8
+ "additionalProperties": false,
9
+ "properties": {
10
+ "$schema": { "type": "string" },
11
+ "baseUrl": {
12
+ "description": "The public HTTPS URL job paths are under, such as https://api.example.com/agent. http://localhost only with dev. May be \"env:NAME\".",
13
+ "type": "string"
14
+ },
15
+ "network": { "enum": ["stellar:testnet", "stellar:pubnet"] },
16
+ "payTo": {
17
+ "description": "The G... or C... address that receives payments: public, never a secret key. Use the agent wallet of your 8004 registration [I3]. May be \"env:NAME\".",
18
+ "type": "string"
19
+ },
20
+ "facilitator": {
21
+ "description": "The x402 facilitator URL, such as https://x402.org/facilitator on testnet. May be \"env:NAME\".",
22
+ "type": "string"
23
+ },
24
+ "facilitatorHeaders": {
25
+ "description": "Headers sent to the facilitator, for one that wants an API key. Values may be \"env:NAME\".",
26
+ "type": "object",
27
+ "additionalProperties": { "type": "string" }
28
+ },
29
+ "provider": {
30
+ "description": "Who you are, as the manifest shows it (§2.3).",
31
+ "type": "object",
32
+ "required": ["name"],
33
+ "additionalProperties": false,
34
+ "properties": {
35
+ "name": { "type": "string", "minLength": 1, "maxLength": 120 },
36
+ "description": { "type": "string", "maxLength": 500 },
37
+ "homepage": { "type": "string" },
38
+ "agentId": { "description": "Your Stellar 8004 agent id, after `provider-kit launch` or `register`. May be \"env:NAME\": an unset or empty variable leaves it out, as before registering.", "type": ["integer", "string"] },
39
+ "termsUrl": { "type": "string" },
40
+ "dataUse": {
41
+ "type": "object",
42
+ "additionalProperties": false,
43
+ "properties": { "storesInputs": { "type": "boolean" }, "trainsOnInputs": { "type": "boolean" } }
44
+ }
45
+ }
46
+ },
47
+ "rpcUrl": {
48
+ "description": "The Soroban RPC the gateway reads the chain with, to decide payment_uncertain jobs and time on-success jobs by ledger. Default: the public RPC on testnet; pubnet has none, so set yours. May be \"env:NAME\".",
49
+ "type": "string"
50
+ },
51
+ "store": {
52
+ "description": "Where jobs are kept: a SQLite file path, relative to this config file (default ./jobs.sqlite), or \"memory\" for tests only. May be \"env:NAME\".",
53
+ "type": "string"
54
+ },
55
+ "listen": {
56
+ "description": "Where `serve` listens. Default port 8787 on 0.0.0.0. The PORT environment variable overrides the port.",
57
+ "type": "object",
58
+ "additionalProperties": false,
59
+ "properties": { "host": { "type": "string" }, "port": { "type": "integer", "minimum": 0, "maximum": 65535 } }
60
+ },
61
+ "maxTimeoutSeconds": { "description": "How long a signed payment is valid. Default 60.", "type": "integer", "minimum": 30, "maximum": 300 },
62
+ "settleTimeoutSeconds": { "description": "How long a settlement may take before the job is payment_uncertain. Default maxTimeoutSeconds + 30.", "type": "integer", "minimum": 1 },
63
+ "retentionSeconds": { "description": "How long finished jobs stay retrievable. Default 86400.", "type": "integer", "minimum": 3600 },
64
+ "manifestPath": { "description": "Default /.well-known/stellar-agent-services.json.", "type": "string", "pattern": "^/" },
65
+ "holdSeconds": { "description": "How long create-job waits before answering 202. Default 30.", "type": "integer", "minimum": 0, "maximum": 30 },
66
+ "runQueuedJobs": { "description": "Whether this process runs queued upfront jobs. Default true.", "type": "boolean" },
67
+ "leaseSeconds": { "type": "integer", "minimum": 3 },
68
+ "rateLimit": {
69
+ "description": "Per-caller limit on create-job (429). keyHeader names the header a trusted proxy sets to the caller's address.",
70
+ "type": "object",
71
+ "required": ["requests", "windowSeconds", "keyHeader"],
72
+ "additionalProperties": false,
73
+ "properties": {
74
+ "requests": { "type": "integer", "minimum": 1 },
75
+ "windowSeconds": { "type": "integer", "minimum": 1 },
76
+ "keyHeader": { "type": "string", "minLength": 1 }
77
+ }
78
+ },
79
+ "dev": { "description": "Allows http://localhost for baseUrl and the facilitator. Never in production.", "type": "boolean" },
80
+ "services": {
81
+ "type": "array",
82
+ "minItems": 1,
83
+ "maxItems": 25,
84
+ "items": { "$ref": "#/$defs/service" }
85
+ }
86
+ },
87
+ "$defs": {
88
+ "service": {
89
+ "type": "object",
90
+ "required": ["name", "description", "price", "inputSchema", "outputSchema", "upstream"],
91
+ "additionalProperties": false,
92
+ "properties": {
93
+ "name": { "type": "string", "pattern": "^[a-z0-9][a-z0-9_-]{0,63}$" },
94
+ "title": { "type": "string" },
95
+ "description": { "description": "What it does, when to use it, and its limits (§3.4).", "type": "string", "minLength": 1, "maxLength": 1000 },
96
+ "price": { "description": "USDC, as a decimal string such as \"0.05\".", "type": "string", "pattern": "^\\d+(\\.\\d{1,7})?$" },
97
+ "charge": { "enum": ["on-success", "upfront"] },
98
+ "expectedDurationSeconds": { "type": "integer", "minimum": 1 },
99
+ "timeoutSeconds": { "description": "Longest the upstream call may take. Default: twice expectedDurationSeconds, or 600.", "type": "integer", "minimum": 1 },
100
+ "inputSchema": { "description": "A JSON Schema object, or the path of a JSON file holding one, relative to this config file.", "type": ["object", "string"] },
101
+ "outputSchema": { "description": "A JSON Schema object, or the path of a JSON file holding one.", "type": ["object", "string"] },
102
+ "examples": {
103
+ "type": "array",
104
+ "maxItems": 5,
105
+ "items": {
106
+ "type": "object",
107
+ "required": ["input", "output"],
108
+ "additionalProperties": false,
109
+ "properties": { "input": { "type": "object" }, "output": { "type": "object" } }
110
+ }
111
+ },
112
+ "tags": { "type": "array", "maxItems": 10, "items": { "type": "string", "pattern": "^[a-z0-9-]{1,32}$" } },
113
+ "maxInputBytes": { "type": "integer", "minimum": 1, "maximum": 10485760 },
114
+ "capacity": {
115
+ "description": "What the upstream can take: calls at once, and how long a new job may wait (§5.8).",
116
+ "type": "object",
117
+ "additionalProperties": false,
118
+ "properties": {
119
+ "concurrency": { "type": "integer", "minimum": 1 },
120
+ "maxQueued": { "type": "integer", "minimum": 0 },
121
+ "maxQueueWaitSeconds": { "type": "integer", "minimum": 0 }
122
+ }
123
+ },
124
+ "upstream": {
125
+ "type": "object",
126
+ "required": ["url"],
127
+ "additionalProperties": false,
128
+ "properties": {
129
+ "url": { "description": "Where the input is POSTed as JSON. May be \"env:NAME\".", "type": "string" },
130
+ "headers": {
131
+ "description": "Sent with every call, such as the upstream's own API key. Values may be \"env:NAME\".",
132
+ "type": "object",
133
+ "additionalProperties": { "type": "string" }
134
+ }
135
+ }
136
+ }
137
+ }
138
+ }
139
+ }
140
+ }