@stellar-agent-services/provider-kit 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +508 -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 +450 -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,202 @@
1
+ // How agents see you: the provider as agents meet it, printed by `provider-kit check`, with hints that never fail it.
2
+ //
3
+ // search stellar-agent-search's find_agent (and 8004 explorers) matches a query against the registration: its name
4
+ // and description, which `provider-kit launch` (or `register`) publishes from provider.name and
5
+ // provider.description, and its services' names and endpoints. On testnet, stellar-agent-search 0.2.0
6
+ // reads agents straight from the registry, and also matches a bound manifest's services [I1]–[I3]: their
7
+ // names, titles, descriptions and tags. On mainnet the explorer's list has no services, so only the name
8
+ // and description count there.
9
+ // ranking in stellar-agent-search, reviews from distinct paying clients only. Declarations add nothing.
10
+ // services an agent picks a service by its description, and an example shows it what to send [§3.4].
11
+ //
12
+ // Words are matched as stellar-agent-search 0.2.0 matches them (src/lib/text-match.ts and src/lib/nlparse.ts): accents
13
+ // and case folded, words of two or more characters that aren't its stopwords, a crude suffix stem, then a substring
14
+ // test on each field.
15
+ import { DEFAULT_MANIFEST_PATH } from "@stellar-agent-services/protocol";
16
+ import { DESCRIPTION_TO_WRITE, PROVIDER_DESCRIPTION_TO_WRITE } from "../gateway/openapi.js";
17
+ import { plain } from "./shared.js";
18
+ /** The stellar-agent-search release whose matching this follows, and whose CLI shows the live profile. */
19
+ export const SEARCH_PACKAGE = "stellar-agent-search@0.2.0";
20
+ /** stellar-agent-search's stopwords: query framing and filter triggers, which it never searches for. */
21
+ const STOPWORDS = new Set([
22
+ "a", "an", "the", "and", "or", "of", "to", "for", "with", "without", "in", "on", "at", "by", "from", "as", "that",
23
+ "this", "these", "those", "is", "are", "be", "which", "who", "whose", "whom", "it", "its",
24
+ "find", "search", "get", "give", "show", "list", "me", "my", "i", "want", "need", "needs", "looking", "look",
25
+ "please", "some", "any", "agent", "agents", "service", "services", "provider", "providers", "one", "ones",
26
+ "using", "use", "uses", "used", "via", "through", "can", "should", "must", "supports", "support", "supporting",
27
+ "has", "have", "having", "offers", "offer", "offering", "provides", "provide", "providing", "does", "do",
28
+ "x402", "paid", "pay", "payment", "payments", "usdc", "monetized", "monetize", "cheap", "cheapest", "affordable",
29
+ "micropayment", "micropayments", "microtransaction", "microtransactions", "mpp", "streaming", "invoke",
30
+ "invocable", "invokable", "callable", "endpoint", "endpoints", "api", "apis",
31
+ "reputation", "reputation-based", "validation", "validated", "tee", "enclave", "attested", "attestation", "trust",
32
+ "trusted",
33
+ "score", "scored", "rated", "rating", "reputable", "highly", "well", "reviewed", "review", "reviews", "high", "top",
34
+ "best", "excellent", "great", "good", "quality", "above", "over", "least", "minimum", "min", "than", "more",
35
+ "bir", "bu", "ve", "veya", "icin", "ile", "olan", "bana", "bul", "goster", "listele", "istiyorum", "lazim", "ajan",
36
+ "ajanlar", "servis", "servisi", "hizmet", "hizmeti", "ucretli", "odemeli", "odeme", "odemeler", "ucuz",
37
+ "cagrilabilir", "itibar", "puan", "puanli", "yuksek", "iyi", "itibarli", "dogrulama", "dogrulanmis",
38
+ ]);
39
+ const SUFFIXES = ["ping", "ning", "ging", "ing", "pers", "per", "ers", "er", "es", "ed", "s"];
40
+ /** Fewer words than this can't say what a service does, when to use it and its limits [§3.4]. */
41
+ const MIN_DESCRIPTION_WORDS = 12;
42
+ const WORDS_SHOWN = 6;
43
+ const SERVICES_SHOWN = 8;
44
+ const WIDTH = 110;
45
+ const PRICE = /\$\s?\d|\b\d+(?:[.,]\d+)?\s?(?:usdc|usd|xlm|dollars?|cents?)\b/i;
46
+ const URL_TEXT = /\bhttps?:\/\/|\bwww\./i;
47
+ /**
48
+ * The "How agents see you" section of `provider-kit check`. `registered` is the 8004 registration file read from the
49
+ * registry, when the provider has an agentId and the file could be read: search shows its name and description.
50
+ */
51
+ export function howAgentsSeeYou(manifest, registered) {
52
+ const { provider, services } = manifest;
53
+ const agentId = provider.agentId;
54
+ const description = provider.description ?? "";
55
+ const testnet = manifest.payment.accepts[0].network === "stellar:testnet";
56
+ const shown = registered === undefined ? { name: provider.name, description } : { name: text(registered["name"]), description: text(registered["description"]) };
57
+ const lines = [
58
+ "How agents see you",
59
+ ` Search matches ${testnet ? "" : "only "}this name and description${registered === undefined ? ", which provider-kit launch publishes" : ", as registered"}:`,
60
+ ` ${plain(shown.name, 100) || "(no name)"}`,
61
+ ` ${plain(shown.description, 100) || "(no description)"}`,
62
+ ];
63
+ if (testnet) {
64
+ lines.push(...wrap("· On testnet it also matches your services' names, titles, descriptions and tags, once the manifest is live and names the agent [I1]–[I3].", " ", " "));
65
+ }
66
+ const hints = [];
67
+ if (registered !== undefined && (shown.name !== provider.name || shown.description !== description)) {
68
+ hints.push("The registry still has an older name or description: provider-kit launch updates it.");
69
+ }
70
+ if (description.trim() === "")
71
+ hints.push("provider.description is empty, so search matches only your name.");
72
+ else if (description === PROVIDER_DESCRIPTION_TO_WRITE)
73
+ hints.push("provider.description is still init's placeholder: say what you offer, in the words buyers type.");
74
+ // The registration lists the manifest and baseUrl as its services, whose names and endpoints search matches too.
75
+ const listed = `stellar-agent-services ${new URL(DEFAULT_MANIFEST_PATH, manifest.baseUrl).toString()} web ${manifest.baseUrl}`;
76
+ const missing = missingWords(`${provider.name} ${description} ${listed}`, services);
77
+ const notes = [];
78
+ if (missing.length > 0 && testnet) {
79
+ notes.push(`On mainnet, search reads no service names, titles or tags: agents searching there for ${wordList(missing)} wouldn't find you. provider-kit check --fix puts those words in provider.description.`);
80
+ }
81
+ else if (missing.length > 0) {
82
+ hints.push(`Search reads no service names, titles or tags on mainnet, so agents searching for ${wordList(missing)} won't find you. Put those words in provider.description: provider-kit check --fix does.`);
83
+ }
84
+ const thin = services.flatMap((service) => {
85
+ const issues = serviceIssues(service);
86
+ return issues.length === 0 ? [] : [`${plain(service.name, 64)}: ${issues.join(", ")}`];
87
+ });
88
+ hints.push(...thin.slice(0, SERVICES_SHOWN));
89
+ if (thin.length > SERVICES_SHOWN)
90
+ hints.push(`… and ${thin.length - SERVICES_SHOWN} more services`);
91
+ for (const hint of hints)
92
+ lines.push(...wrap(`! ${hint}`, " ", " "));
93
+ if (thin.length > 0) {
94
+ lines.push(...wrap("An agent picks a service by its description: what it does, when to use it, its limits, with no price or URL [§3.4]. An example shows it what to send, and provider-kit try pays with it.", " ", " "));
95
+ }
96
+ for (const note of notes)
97
+ lines.push(...wrap(`· ${note}`, " ", " "));
98
+ lines.push(...wrap("· Ranking counts reviews from distinct paying clients only. Until the first, search lists you as new and unrated.", " ", " "));
99
+ if (agentId === undefined) {
100
+ lines.push(" · Not registered yet: provider-kit launch publishes this name and description.");
101
+ }
102
+ else {
103
+ lines.push(` · Live: ${testnet ? "STELLAR_NETWORK=testnet " : ""}npx -y ${SEARCH_PACKAGE} profile ${agentId}`);
104
+ }
105
+ return lines;
106
+ }
107
+ /** The most provider.description may hold (the gateway config's schema, and the manifest's). */
108
+ const DESCRIPTION_MAX = 500;
109
+ /**
110
+ * provider.description with the words search would miss written in, for `provider-kit check --fix`: a sentence naming
111
+ * the services, then any tag words still missing. Undefined when search already finds every word.
112
+ */
113
+ export function describedWithServices(manifest) {
114
+ const { provider, services } = manifest;
115
+ const description = (provider.description ?? "").trim();
116
+ if (missingWords(`${provider.name} ${description}`, services).length === 0)
117
+ return undefined;
118
+ const base = description === "" || description === PROVIDER_DESCRIPTION_TO_WRITE ? "" : `${description.replace(/([^.!?])$/, "$1.")} `;
119
+ const titles = services.map((service) => plain(service.title ?? service.name.replace(/[-_]+/g, " "), 60));
120
+ let text = `${base}Services: ${titles.join(", ")}.`;
121
+ const still = missingWords(`${provider.name} ${text}`, services);
122
+ if (still.length > 0)
123
+ text += ` Keywords: ${still.join(", ")}.`;
124
+ if (text.length <= DESCRIPTION_MAX)
125
+ return text;
126
+ // Too long: as many service titles as fit.
127
+ const kept = [];
128
+ for (const title of titles) {
129
+ if (`${base}Services: ${[...kept, title].join(", ")}, and more.`.length > DESCRIPTION_MAX)
130
+ break;
131
+ kept.push(title);
132
+ }
133
+ return kept.length === 0 ? undefined : `${base}Services: ${kept.join(", ")}${kept.length < titles.length ? ", and more" : ""}.`;
134
+ }
135
+ /** Words from the services' names, titles and tags that a search for them wouldn't match in `text`. */
136
+ export function missingWords(text, services) {
137
+ const haystack = fold(text);
138
+ const missing = new Set();
139
+ for (const service of services) {
140
+ for (const word of searchWords([service.name, service.title ?? "", ...(service.tags ?? [])].join(" "))) {
141
+ if (!haystack.includes(stem(word)))
142
+ missing.add(word);
143
+ }
144
+ }
145
+ return [...missing];
146
+ }
147
+ /** The words of `text` a search uses: folded, at least two characters, not a number, not a stopword. */
148
+ export function searchWords(text) {
149
+ return (fold(text).match(/[\p{L}\p{N}]+/gu) ?? []).filter((word) => word.length >= 2 && !/^\d+$/.test(word) && !STOPWORDS.has(word));
150
+ }
151
+ /** stellar-agent-search's stem: one common suffix off, leaving at least three characters. */
152
+ export function stem(word) {
153
+ const suffix = SUFFIXES.find((candidate) => word.endsWith(candidate) && word.length - candidate.length >= 3);
154
+ return suffix === undefined ? word : word.slice(0, word.length - suffix.length);
155
+ }
156
+ function serviceIssues(service) {
157
+ const issues = [];
158
+ const words = service.description.split(/\s+/).filter(Boolean).length;
159
+ if (service.description === DESCRIPTION_TO_WRITE)
160
+ issues.push("the description is still init's placeholder");
161
+ else if (words < MIN_DESCRIPTION_WORDS)
162
+ issues.push(`a ${words}-word description`);
163
+ if (PRICE.test(service.description))
164
+ issues.push("a price in the description");
165
+ if (URL_TEXT.test(service.description))
166
+ issues.push("a URL in the description");
167
+ if (service.examples === undefined || service.examples.length === 0)
168
+ issues.push("no example");
169
+ return issues;
170
+ }
171
+ /** Accents and case folded, as search folds both the query and the text. */
172
+ function fold(value) {
173
+ return value.normalize("NFKD").replace(/\p{M}+/gu, "").replace(/ı/g, "i").toLowerCase();
174
+ }
175
+ function text(value) {
176
+ return typeof value === "string" ? value : "";
177
+ }
178
+ /** "a", "b" or "c", and how many more. */
179
+ function wordList(words) {
180
+ const quoted = words.slice(0, WORDS_SHOWN).map((word) => `"${plain(word, 32)}"`);
181
+ if (words.length > WORDS_SHOWN)
182
+ return `${quoted.join(", ")} and ${words.length - WORDS_SHOWN} more`;
183
+ return quoted.length === 1 ? quoted[0] : `${quoted.slice(0, -1).join(", ")} or ${quoted.at(-1)}`;
184
+ }
185
+ /** Breaks `value` into lines of at most WIDTH characters: the first starts with `first`, the rest with `rest`. */
186
+ function wrap(value, first, rest) {
187
+ const lines = [];
188
+ let line = first;
189
+ for (const word of value.split(" ")) {
190
+ const prefix = lines.length === 0 ? first : rest;
191
+ if (line.length > prefix.length && line.length + 1 + word.length > WIDTH) {
192
+ lines.push(line);
193
+ line = rest + word;
194
+ }
195
+ else {
196
+ line += line.length > prefix.length ? ` ${word}` : word;
197
+ }
198
+ }
199
+ lines.push(line);
200
+ return lines;
201
+ }
202
+ //# sourceMappingURL=discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/cli/discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /** The env file the commands read and write when --env-file doesn't name another. */
2
+ export declare const ENV_FILE = ".env";
3
+ /** The values in an env file. {} when there is none. */
4
+ export declare function readEnvFile(path: string): Promise<Record<string, string>>;
5
+ /** Loads an env file into `env`, leaving every variable that is already set as it is. Returns whether the file exists. */
6
+ export declare function loadEnvFile(path: string, env?: NodeJS.ProcessEnv): Promise<boolean>;
7
+ /**
8
+ * Sets values in an env file, keeping everything else as it was. `undefined` removes a value's line. A new value goes at
9
+ * the end, after its comment from `comments` when there is one. Without the file, nothing is written and it returns
10
+ * false, unless `create` is set.
11
+ */
12
+ export declare function updateEnvFile(path: string, values: Record<string, string | undefined>, options?: {
13
+ comments?: Record<string, string>;
14
+ create?: boolean;
15
+ }): Promise<boolean>;
16
+ //# sourceMappingURL=env-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-file.d.ts","sourceRoot":"","sources":["../../src/cli/env-file.ts"],"names":[],"mappings":"AAWA,qFAAqF;AACrF,eAAO,MAAM,QAAQ,SAAS,CAAC;AAE/B,wDAAwD;AACxD,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAG/E;AAED,0HAA0H;AAC1H,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAAC,OAAO,CAAC,CAMtG;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAC1C,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GACpE,OAAO,CAAC,OAAO,CAAC,CA6BlB"}
@@ -0,0 +1,77 @@
1
+ // .env files: the settings a project keeps out of git (docs/provider-setup-guide.md §1).
2
+ //
3
+ // `provider-kit dev`, `launch` and `status` read the project's .env, as `node --env-file` would: a variable already set
4
+ // in the environment wins. `dev` and `launch` write back the values they settle (PAY_TO, DEV_PAY_TO, AGENT_ID), keeping
5
+ // the file as it was: a value replaces its own line, or a commented-out "# NAME=" line, and a new one goes at the end.
6
+ // Only public values are ever written here. No secret key goes in a .env file, and none comes from one.
7
+ import { existsSync } from "node:fs";
8
+ import { readFile, rename, writeFile } from "node:fs/promises";
9
+ import { parseEnv } from "node:util";
10
+ /** The env file the commands read and write when --env-file doesn't name another. */
11
+ export const ENV_FILE = ".env";
12
+ /** The values in an env file. {} when there is none. */
13
+ export async function readEnvFile(path) {
14
+ if (!existsSync(path))
15
+ return {};
16
+ return parseEnv(await readFile(path, "utf8"));
17
+ }
18
+ /** Loads an env file into `env`, leaving every variable that is already set as it is. Returns whether the file exists. */
19
+ export async function loadEnvFile(path, env = process.env) {
20
+ if (!existsSync(path))
21
+ return false;
22
+ for (const [name, value] of Object.entries(await readEnvFile(path))) {
23
+ if (env[name] === undefined)
24
+ env[name] = value;
25
+ }
26
+ return true;
27
+ }
28
+ /**
29
+ * Sets values in an env file, keeping everything else as it was. `undefined` removes a value's line. A new value goes at
30
+ * the end, after its comment from `comments` when there is one. Without the file, nothing is written and it returns
31
+ * false, unless `create` is set.
32
+ */
33
+ export async function updateEnvFile(path, values, options = {}) {
34
+ const exists = existsSync(path);
35
+ if (!exists && options.create !== true)
36
+ return false;
37
+ const lines = exists ? (await readFile(path, "utf8")).replace(/\n$/, "").split("\n") : [];
38
+ for (const [name, value] of Object.entries(values)) {
39
+ if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(name))
40
+ throw new Error(`${name} is not an environment variable name`);
41
+ const set = new RegExp(`^\\s*(?:export\\s+)?${name}\\s*=`);
42
+ const commented = new RegExp(`^\\s*#\\s*${name}\\s*=`);
43
+ let index = lines.findIndex((line) => set.test(line));
44
+ if (value === undefined) {
45
+ if (index !== -1)
46
+ lines.splice(index, 1);
47
+ continue;
48
+ }
49
+ if (index === -1)
50
+ index = lines.findIndex((line) => commented.test(line));
51
+ const line = `${name}=${envValue(value)}`;
52
+ if (index !== -1) {
53
+ lines[index] = line;
54
+ continue;
55
+ }
56
+ const comment = options.comments?.[name];
57
+ if (lines.length > 0 && lines.at(-1) !== "" && comment !== undefined)
58
+ lines.push("");
59
+ if (comment !== undefined)
60
+ lines.push(...comment.split("\n").map((text) => `# ${text}`));
61
+ lines.push(line);
62
+ }
63
+ // Written beside the file, then renamed over it, so an interrupted write never leaves half a file.
64
+ const temporary = `${path}.${process.pid}.tmp`;
65
+ await writeFile(temporary, `${lines.join("\n")}\n`);
66
+ await rename(temporary, path);
67
+ return true;
68
+ }
69
+ /** A value as an env file holds it: bare when it can be, else in double quotes. The values written here are public and plain. */
70
+ function envValue(value) {
71
+ if (/^[\w@%+=:,./-]*$/.test(value))
72
+ return value;
73
+ if (/["\\\n\r]/.test(value))
74
+ throw new Error(`can't write ${JSON.stringify(value)} to an env file`);
75
+ return `"${value}"`;
76
+ }
77
+ //# sourceMappingURL=env-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-file.js","sourceRoot":"","sources":["../../src/cli/env-file.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export declare const FLY_TOML = "fly.toml";
2
+ export interface FlyApp {
3
+ /** fly.toml's path. */
4
+ path: string;
5
+ app: string;
6
+ /** https://<app>.fly.dev */
7
+ origin: string;
8
+ }
9
+ /** Runs flyctl. `inherit` shows it in this terminal, so it can ask the developer things; `input` goes to its standard input. */
10
+ export type FlyRunner = (args: string[], options?: {
11
+ inherit?: boolean;
12
+ input?: string;
13
+ }) => Promise<{
14
+ code: number;
15
+ output: string;
16
+ }>;
17
+ /** The app fly.toml names, or undefined when there is no fly.toml or it names none. */
18
+ export declare function flyApp(path?: string): Promise<FlyApp | undefined>;
19
+ /** Sets values in fly.toml's [env] table, keeping the rest of the file as it was. The table is added when missing. */
20
+ export declare function setFlyEnv(path: string, values: Record<string, string>): Promise<void>;
21
+ /** Stages secrets for the app's next deploy, read by flyctl from its standard input so they never show in a process list. */
22
+ export declare function flySecrets(fly: FlyRunner, app: string, secrets: Record<string, string>): Promise<boolean>;
23
+ /**
24
+ * Deploys the app: flyctl must be installed and logged in. The app is created the first time. Returns why it couldn't,
25
+ * or undefined once `fly deploy` succeeded.
26
+ */
27
+ export declare function flyDeploy(fly: FlyRunner, app: FlyApp, log: (line: string) => void): Promise<string | undefined>;
28
+ //# sourceMappingURL=fly.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fly.d.ts","sourceRoot":"","sources":["../../src/cli/fly.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,QAAQ,aAAa,CAAC;AAEnC,MAAM,WAAW,MAAM;IACrB,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,gIAAgI;AAChI,MAAM,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,KAAK,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEvI,uFAAuF;AACvF,wBAAsB,MAAM,CAAC,IAAI,GAAE,MAAiB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAIjF;AAED,sHAAsH;AACtH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAyB3F;AAQD,6HAA6H;AAC7H,wBAAsB,UAAU,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAI/G;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAiBrH"}
@@ -0,0 +1,92 @@
1
+ // Fly.io, where `npm create stellar-service` sets a project up to run. fly.toml names the app, so the service's public
2
+ // address is known before its first deploy (https://<app>.fly.dev). That lets `provider-kit launch` register first and
3
+ // deploy once, with the agent id in place.
4
+ //
5
+ // - flyApp(): the app and its public origin, from fly.toml.
6
+ // - setFlyEnv(): writes public settings (PUBLIC_ORIGIN, PAY_TO, AGENT_ID) into fly.toml's [env], so every deploy has
7
+ // them. Only public values: an API's key goes in Fly's secrets (flySecrets()), never in fly.toml.
8
+ // - flyDeploy(): creates the app the first time, then `fly deploy` with a single machine. The job database is SQLite on
9
+ // a volume, which one machine holds; fly.toml's [[mounts]] has Fly make that volume on the first deploy.
10
+ import { existsSync } from "node:fs";
11
+ import { readFile, rename, writeFile } from "node:fs/promises";
12
+ export const FLY_TOML = "fly.toml";
13
+ /** The app fly.toml names, or undefined when there is no fly.toml or it names none. */
14
+ export async function flyApp(path = FLY_TOML) {
15
+ if (!existsSync(path))
16
+ return undefined;
17
+ const app = /^\s*app\s*=\s*["']([a-z0-9][a-z0-9-]*)["']\s*(?:#.*)?$/m.exec(await readFile(path, "utf8"))?.[1];
18
+ return app === undefined ? undefined : { path, app, origin: `https://${app}.fly.dev` };
19
+ }
20
+ /** Sets values in fly.toml's [env] table, keeping the rest of the file as it was. The table is added when missing. */
21
+ export async function setFlyEnv(path, values) {
22
+ const lines = (await readFile(path, "utf8")).replace(/\n$/, "").split("\n");
23
+ let header = lines.findIndex((line) => /^\s*\[env\]\s*(?:#.*)?$/.test(line));
24
+ if (header === -1) {
25
+ lines.push("", "[env]");
26
+ header = lines.length - 1;
27
+ }
28
+ let end = lines.findIndex((line, index) => index > header && /^\s*\[/.test(line));
29
+ if (end === -1)
30
+ end = lines.length;
31
+ for (const [name, setting] of Object.entries(named(values))) {
32
+ const entry = ` ${name} = ${JSON.stringify(setting)}`;
33
+ const index = lines.findIndex((line, at) => at > header && at < end && new RegExp(`^\\s*${name}\\s*=`).test(line));
34
+ if (index !== -1) {
35
+ lines[index] = entry;
36
+ continue;
37
+ }
38
+ // After the table's last entry, before the blank lines that end it.
39
+ let at = end;
40
+ while (at - 1 > header && lines[at - 1].trim() === "")
41
+ at -= 1;
42
+ lines.splice(at, 0, entry);
43
+ end += 1;
44
+ }
45
+ const temporary = `${path}.${process.pid}.tmp`;
46
+ await writeFile(temporary, `${lines.join("\n")}\n`);
47
+ await rename(temporary, path);
48
+ }
49
+ /** The values, once each name is checked to be an environment variable's. */
50
+ function named(values) {
51
+ for (const name of Object.keys(values))
52
+ if (!/^[A-Z_][A-Z0-9_]*$/.test(name))
53
+ throw new Error(`${name} is not an environment variable name`);
54
+ return values;
55
+ }
56
+ /** Stages secrets for the app's next deploy, read by flyctl from its standard input so they never show in a process list. */
57
+ export async function flySecrets(fly, app, secrets) {
58
+ if (Object.keys(secrets).length === 0)
59
+ return true;
60
+ const input = Object.entries(named(secrets)).map(([name, secret]) => `${name}=${secret}`).join("\n");
61
+ return (await fly(["secrets", "import", "--stage", "--app", app], { input })).code === 0;
62
+ }
63
+ /**
64
+ * Deploys the app: flyctl must be installed and logged in. The app is created the first time. Returns why it couldn't,
65
+ * or undefined once `fly deploy` succeeded.
66
+ */
67
+ export async function flyDeploy(fly, app, log) {
68
+ if ((await fly(["version"])).code !== 0)
69
+ return "flyctl isn't installed: https://fly.io/docs/flyctl/install/";
70
+ if ((await fly(["auth", "whoami"])).code !== 0) {
71
+ log(" … Log in to Fly.io (flyctl opens your browser)");
72
+ if ((await fly(["auth", "login"], { inherit: true })).code !== 0)
73
+ return "flyctl isn't logged in: run fly auth login";
74
+ }
75
+ const status = await fly(["status", "--app", app.app]);
76
+ if (status.code !== 0) {
77
+ if (!/could not find app|not found/i.test(status.output))
78
+ return `fly status failed: ${lastLine(status.output)}`;
79
+ log(` … Creating the Fly.io app ${app.app}`);
80
+ if ((await fly(["apps", "create", app.app], { inherit: true })).code !== 0) {
81
+ return `the app ${app.app} couldn't be created (its name may be taken: change "app" in fly.toml, then launch again)`;
82
+ }
83
+ }
84
+ log(` … Deploying ${app.app} (fly deploy)`);
85
+ if ((await fly(["deploy", "--config", app.path, "--app", app.app, "--ha=false"], { inherit: true })).code !== 0)
86
+ return "fly deploy failed: see its output above";
87
+ return undefined;
88
+ }
89
+ function lastLine(output) {
90
+ return output.trim().split("\n").at(-1) ?? "no output";
91
+ }
92
+ //# sourceMappingURL=fly.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fly.js","sourceRoot":"","sources":["../../src/cli/fly.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ // The provider-kit command. It only silences Node's notice that node:sqlite is experimental (the job
3
+ // store uses it, deliberately) and then loads the CLI, which is in main.ts.
4
+ process.removeAllListeners("warning").on("warning", (warning) => {
5
+ if (warning.name === "ExperimentalWarning" && warning.message.includes("SQLite"))
6
+ return;
7
+ console.warn(`${warning.name}: ${warning.message}`);
8
+ });
9
+ await import("./main.js");
10
+ export {};
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA,qGAAqG;AACrG,4EAA4E;AAE5E,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE;IAC9D,IAAI,OAAO,CAAC,IAAI,KAAK,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO;IACzF,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;AACtD,CAAC,CAAC,CAAC;AAEH,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type CliFlags } from "./shared.js";
2
+ export declare function init(flags: CliFlags): Promise<number>;
3
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAS,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAMnD,wBAAsB,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAiC3D"}