@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.
- package/LICENSE +21 -0
- package/README.md +506 -2
- package/dist/approve/assets/index-BazIJAI2.css +1 -0
- package/dist/approve/assets/index-CL28cSJy.js +420 -0
- package/dist/approve/favicon.svg +1 -0
- package/dist/approve/index.html +18 -0
- package/dist/cli/approval-view.d.ts +80 -0
- package/dist/cli/approval-view.d.ts.map +1 -0
- package/dist/cli/approval-view.js +5 -0
- package/dist/cli/approval-view.js.map +1 -0
- package/dist/cli/approval.d.ts +132 -0
- package/dist/cli/approval.d.ts.map +1 -0
- package/dist/cli/approval.js +542 -0
- package/dist/cli/approval.js.map +1 -0
- package/dist/cli/check.d.ts +3 -0
- package/dist/cli/check.d.ts.map +1 -0
- package/dist/cli/check.js +137 -0
- package/dist/cli/check.js.map +1 -0
- package/dist/cli/dev-account.d.ts +28 -0
- package/dist/cli/dev-account.d.ts.map +1 -0
- package/dist/cli/dev-account.js +62 -0
- package/dist/cli/dev-account.js.map +1 -0
- package/dist/cli/dev.d.ts +27 -0
- package/dist/cli/dev.d.ts.map +1 -0
- package/dist/cli/dev.js +226 -0
- package/dist/cli/dev.js.map +1 -0
- package/dist/cli/discovery.d.ts +20 -0
- package/dist/cli/discovery.d.ts.map +1 -0
- package/dist/cli/discovery.js +202 -0
- package/dist/cli/discovery.js.map +1 -0
- package/dist/cli/env-file.d.ts +16 -0
- package/dist/cli/env-file.d.ts.map +1 -0
- package/dist/cli/env-file.js +77 -0
- package/dist/cli/env-file.js.map +1 -0
- package/dist/cli/fly.d.ts +28 -0
- package/dist/cli/fly.d.ts.map +1 -0
- package/dist/cli/fly.js +92 -0
- package/dist/cli/fly.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +11 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.d.ts +3 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +170 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/launch.d.ts +21 -0
- package/dist/cli/launch.d.ts.map +1 -0
- package/dist/cli/launch.js +627 -0
- package/dist/cli/launch.js.map +1 -0
- package/dist/cli/main.d.ts +2 -0
- package/dist/cli/main.d.ts.map +1 -0
- package/dist/cli/main.js +158 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/owner-chain.d.ts +88 -0
- package/dist/cli/owner-chain.d.ts.map +1 -0
- package/dist/cli/owner-chain.js +284 -0
- package/dist/cli/owner-chain.js.map +1 -0
- package/dist/cli/owner-steps.d.ts +33 -0
- package/dist/cli/owner-steps.d.ts.map +1 -0
- package/dist/cli/owner-steps.js +121 -0
- package/dist/cli/owner-steps.js.map +1 -0
- package/dist/cli/processes.d.ts +47 -0
- package/dist/cli/processes.d.ts.map +1 -0
- package/dist/cli/processes.js +129 -0
- package/dist/cli/processes.js.map +1 -0
- package/dist/cli/reconcile.d.ts +3 -0
- package/dist/cli/reconcile.d.ts.map +1 -0
- package/dist/cli/reconcile.js +76 -0
- package/dist/cli/reconcile.js.map +1 -0
- package/dist/cli/register.d.ts +9 -0
- package/dist/cli/register.d.ts.map +1 -0
- package/dist/cli/register.js +209 -0
- package/dist/cli/register.js.map +1 -0
- package/dist/cli/request-validation.d.ts +5 -0
- package/dist/cli/request-validation.d.ts.map +1 -0
- package/dist/cli/request-validation.js +144 -0
- package/dist/cli/request-validation.js.map +1 -0
- package/dist/cli/serve.d.ts +25 -0
- package/dist/cli/serve.d.ts.map +1 -0
- package/dist/cli/serve.js +73 -0
- package/dist/cli/serve.js.map +1 -0
- package/dist/cli/shared.d.ts +142 -0
- package/dist/cli/shared.d.ts.map +1 -0
- package/dist/cli/shared.js +110 -0
- package/dist/cli/shared.js.map +1 -0
- package/dist/cli/status.d.ts +32 -0
- package/dist/cli/status.d.ts.map +1 -0
- package/dist/cli/status.js +248 -0
- package/dist/cli/status.js.map +1 -0
- package/dist/cli/target.d.ts +14 -0
- package/dist/cli/target.d.ts.map +1 -0
- package/dist/cli/target.js +43 -0
- package/dist/cli/target.js.map +1 -0
- package/dist/cli/trustline.d.ts +3 -0
- package/dist/cli/trustline.d.ts.map +1 -0
- package/dist/cli/trustline.js +114 -0
- package/dist/cli/trustline.js.map +1 -0
- package/dist/cli/try.d.ts +54 -0
- package/dist/cli/try.d.ts.map +1 -0
- package/dist/cli/try.js +448 -0
- package/dist/cli/try.js.map +1 -0
- package/dist/cli/tunnel.d.ts +13 -0
- package/dist/cli/tunnel.d.ts.map +1 -0
- package/dist/cli/tunnel.js +43 -0
- package/dist/cli/tunnel.js.map +1 -0
- package/dist/cli/validators.d.ts +6 -0
- package/dist/cli/validators.d.ts.map +1 -0
- package/dist/cli/validators.js +14 -0
- package/dist/cli/validators.js.map +1 -0
- package/dist/define-service.d.ts +71 -0
- package/dist/define-service.d.ts.map +1 -0
- package/dist/define-service.js +86 -0
- package/dist/define-service.js.map +1 -0
- package/dist/gateway/config.d.ts +88 -0
- package/dist/gateway/config.d.ts.map +1 -0
- package/dist/gateway/config.js +201 -0
- package/dist/gateway/config.js.map +1 -0
- package/dist/gateway/openapi.d.ts +69 -0
- package/dist/gateway/openapi.d.ts.map +1 -0
- package/dist/gateway/openapi.js +677 -0
- package/dist/gateway/openapi.js.map +1 -0
- package/dist/gateway/upstream.d.ts +15 -0
- package/dist/gateway/upstream.d.ts.map +1 -0
- package/dist/gateway/upstream.js +95 -0
- package/dist/gateway/upstream.js.map +1 -0
- package/dist/http/bounded.d.ts +3 -0
- package/dist/http/bounded.d.ts.map +1 -0
- package/dist/http/bounded.js +23 -0
- package/dist/http/bounded.js.map +1 -0
- package/dist/http/node-server.d.ts +15 -0
- package/dist/http/node-server.d.ts.map +1 -0
- package/dist/http/node-server.js +120 -0
- package/dist/http/node-server.js.map +1 -0
- package/dist/http/rate-limit.d.ts +11 -0
- package/dist/http/rate-limit.d.ts.map +1 -0
- package/dist/http/rate-limit.js +35 -0
- package/dist/http/rate-limit.js.map +1 -0
- package/dist/http/router.d.ts +29 -0
- package/dist/http/router.d.ts.map +1 -0
- package/dist/http/router.js +329 -0
- package/dist/http/router.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/jobs/memory-store.d.ts +3 -0
- package/dist/jobs/memory-store.d.ts.map +1 -0
- package/dist/jobs/memory-store.js +121 -0
- package/dist/jobs/memory-store.js.map +1 -0
- package/dist/jobs/reconcile.d.ts +22 -0
- package/dist/jobs/reconcile.d.ts.map +1 -0
- package/dist/jobs/reconcile.js +82 -0
- package/dist/jobs/reconcile.js.map +1 -0
- package/dist/jobs/recovery.d.ts +19 -0
- package/dist/jobs/recovery.d.ts.map +1 -0
- package/dist/jobs/recovery.js +65 -0
- package/dist/jobs/recovery.js.map +1 -0
- package/dist/jobs/runner.d.ts +38 -0
- package/dist/jobs/runner.d.ts.map +1 -0
- package/dist/jobs/runner.js +194 -0
- package/dist/jobs/runner.js.map +1 -0
- package/dist/jobs/scheduler.d.ts +66 -0
- package/dist/jobs/scheduler.d.ts.map +1 -0
- package/dist/jobs/scheduler.js +197 -0
- package/dist/jobs/scheduler.js.map +1 -0
- package/dist/jobs/sqlite-store.d.ts +8 -0
- package/dist/jobs/sqlite-store.d.ts.map +1 -0
- package/dist/jobs/sqlite-store.js +231 -0
- package/dist/jobs/sqlite-store.js.map +1 -0
- package/dist/jobs/store.d.ts +118 -0
- package/dist/jobs/store.d.ts.map +1 -0
- package/dist/jobs/store.js +36 -0
- package/dist/jobs/store.js.map +1 -0
- package/dist/manifest.d.ts +11 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +99 -0
- package/dist/manifest.js.map +1 -0
- package/dist/payments/chain.d.ts +23 -0
- package/dist/payments/chain.d.ts.map +1 -0
- package/dist/payments/chain.js +108 -0
- package/dist/payments/chain.js.map +1 -0
- package/dist/payments/facilitator.d.ts +44 -0
- package/dist/payments/facilitator.d.ts.map +1 -0
- package/dist/payments/facilitator.js +125 -0
- package/dist/payments/facilitator.js.map +1 -0
- package/dist/payments/onchain.d.ts +36 -0
- package/dist/payments/onchain.d.ts.map +1 -0
- package/dist/payments/onchain.js +191 -0
- package/dist/payments/onchain.js.map +1 -0
- package/dist/payments/payload-checks.d.ts +22 -0
- package/dist/payments/payload-checks.d.ts.map +1 -0
- package/dist/payments/payload-checks.js +113 -0
- package/dist/payments/payload-checks.js.map +1 -0
- package/dist/payments/settlement.d.ts +22 -0
- package/dist/payments/settlement.d.ts.map +1 -0
- package/dist/payments/settlement.js +65 -0
- package/dist/payments/settlement.js.map +1 -0
- package/dist/payments/x402-server.d.ts +8 -0
- package/dist/payments/x402-server.d.ts.map +1 -0
- package/dist/payments/x402-server.js +74 -0
- package/dist/payments/x402-server.js.map +1 -0
- package/dist/provider.d.ts +63 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.js +177 -0
- package/dist/provider.js.map +1 -0
- package/dist/registration.d.ts +86 -0
- package/dist/registration.d.ts.map +1 -0
- package/dist/registration.js +162 -0
- package/dist/registration.js.map +1 -0
- package/dist/testing.d.ts +13 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +48 -0
- package/dist/testing.js.map +1 -0
- package/dist/validation-request.d.ts +36 -0
- package/dist/validation-request.d.ts.map +1 -0
- package/dist/validation-request.js +101 -0
- package/dist/validation-request.js.map +1 -0
- package/package.json +55 -4
- package/schemas/gateway-config.schema.json +140 -0
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
// provider-kit check: a provider's self-check against Provider Standard v1, with no payment and no key.
|
|
2
|
+
//
|
|
3
|
+
// manifest the JSON Schema and the rules of §2.4 (what clients and verifiers reject)
|
|
4
|
+
// facilitator settles x402 `exact` on the network, with sponsored fees (gateway configs)
|
|
5
|
+
// payTo the account exists and has a USDC trustline [P2]
|
|
6
|
+
// 8004 the registration names the manifest, the agent and payTo match [I1]–[I3]
|
|
7
|
+
// Then how agents see the provider (discovery.ts): what search matches, and hints that never fail the check.
|
|
8
|
+
// --fix writes the words search would miss into a gateway config's provider.description. --json prints the result
|
|
9
|
+
// as JSON, for scripts and coding agents. `verifier check` goes further, calling create-job without paying (C3, C6, C7).
|
|
10
|
+
import { readFile, rename, writeFile } from "node:fs/promises";
|
|
11
|
+
import { HORIZON_URL, USDC_ISSUER } from "@stellar-agent-services/protocol";
|
|
12
|
+
import { checkFacilitator } from "../payments/facilitator.js";
|
|
13
|
+
import { inspectRegistration } from "../registration.js";
|
|
14
|
+
import { describedWithServices, howAgentsSeeYou } from "./discovery.js";
|
|
15
|
+
import { nextCommand, UsageError } from "./shared.js";
|
|
16
|
+
import { loadTarget } from "./target.js";
|
|
17
|
+
const MARK = { ok: "✓", fail: "✗", warn: "!" };
|
|
18
|
+
export async function check(flags) {
|
|
19
|
+
if (flags.fix && flags.config === undefined)
|
|
20
|
+
throw new UsageError("--fix edits a gateway config: pass --config <file>");
|
|
21
|
+
const target = await loadTarget(flags);
|
|
22
|
+
const say = flags.json ? () => { } : (line) => console.log(line);
|
|
23
|
+
say(`Provider Standard v1 self-check: ${target.source}`);
|
|
24
|
+
if ("problems" in target) {
|
|
25
|
+
const lines = target.problems.map((problem) => ({ status: "fail", text: problem }));
|
|
26
|
+
if (flags.json)
|
|
27
|
+
console.log(JSON.stringify({ ok: false, source: target.source, checks: lines }, null, 2));
|
|
28
|
+
else
|
|
29
|
+
lines.forEach(print);
|
|
30
|
+
return 1;
|
|
31
|
+
}
|
|
32
|
+
const { manifest, manifestUrl } = target;
|
|
33
|
+
const network = manifest.payment.accepts[0].network;
|
|
34
|
+
const lines = [
|
|
35
|
+
{ status: "ok", text: `manifest: ${manifest.services.length} service(s) on ${network}, served at ${manifestUrl}` },
|
|
36
|
+
];
|
|
37
|
+
if (manifest.baseUrl.startsWith("http://"))
|
|
38
|
+
lines.push({ status: "warn", text: "dev mode: clients accept http:// only in development [M6]" });
|
|
39
|
+
if (target.facilitator !== undefined) {
|
|
40
|
+
lines.push(await attempt("facilitator", async () => {
|
|
41
|
+
await checkFacilitator(target.facilitator, network);
|
|
42
|
+
return `settles x402 exact on ${network} with sponsored fees`;
|
|
43
|
+
}));
|
|
44
|
+
}
|
|
45
|
+
lines.push(await attempt("payTo", () => checkPayTo(manifest)));
|
|
46
|
+
let registered;
|
|
47
|
+
if (manifest.provider.agentId === undefined && manifest.baseUrl.startsWith("http://")) {
|
|
48
|
+
// A provider on this computer isn't registered yet: launch registers it with its public address.
|
|
49
|
+
lines.push({ status: "warn", text: `8004: not registered yet: ${nextCommand("launch")} registers it, with your public address` });
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
try {
|
|
53
|
+
const registration = await inspectRegistration(manifest, manifestUrl);
|
|
54
|
+
registered = registration.file;
|
|
55
|
+
for (const finding of registration.findings) {
|
|
56
|
+
lines.push({ status: finding.ok ? "ok" : "fail", text: `8004 [${finding.rule}]: ${finding.message}` });
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
lines.push({ status: "fail", text: `8004: the identity registry can't be read: ${error.message}` });
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
const agents = howAgentsSeeYou(manifest, registered);
|
|
64
|
+
const suggested = describedWithServices(manifest);
|
|
65
|
+
let fixed;
|
|
66
|
+
if (flags.fix && suggested !== undefined) {
|
|
67
|
+
await writeDescription(flags.config, suggested);
|
|
68
|
+
fixed = suggested;
|
|
69
|
+
}
|
|
70
|
+
const failed = lines.filter((line) => line.status === "fail").length;
|
|
71
|
+
if (flags.json) {
|
|
72
|
+
console.log(JSON.stringify({
|
|
73
|
+
ok: failed === 0,
|
|
74
|
+
source: target.source,
|
|
75
|
+
manifestUrl,
|
|
76
|
+
checks: lines,
|
|
77
|
+
howAgentsSeeYou: agents,
|
|
78
|
+
...(suggested === undefined ? {} : { suggestedDescription: suggested }),
|
|
79
|
+
...(fixed === undefined ? {} : { fixed: { file: flags.config, description: fixed } }),
|
|
80
|
+
}, null, 2));
|
|
81
|
+
return failed === 0 ? 0 : 1;
|
|
82
|
+
}
|
|
83
|
+
lines.forEach(print);
|
|
84
|
+
console.log(`\n${agents.join("\n")}\n`);
|
|
85
|
+
if (fixed !== undefined) {
|
|
86
|
+
console.log(`✓ Wrote provider.description in ${flags.config}, so search finds your services' words:\n ${fixed}`);
|
|
87
|
+
console.log(` Restart the provider to serve it${registered === undefined ? "" : `, and run ${nextCommand("launch")} to update the registration search reads`}.\n`);
|
|
88
|
+
}
|
|
89
|
+
else if (suggested !== undefined) {
|
|
90
|
+
console.log(flags.config === undefined
|
|
91
|
+
? `Put this in provider.description, so search finds your services' words:\n ${suggested}\n`
|
|
92
|
+
: `Run check again with --fix to write the missing words into provider.description${nextCommand("check") === "npm run check" ? " (npm run check -- --fix)" : ""}.\n`);
|
|
93
|
+
}
|
|
94
|
+
console.log(failed === 0 ? "All checks passed." : `${failed} check(s) failed.`);
|
|
95
|
+
return failed === 0 ? 0 : 1;
|
|
96
|
+
}
|
|
97
|
+
/** Sets provider.description in a gateway config, keeping the rest of the file as it was. */
|
|
98
|
+
async function writeDescription(path, description) {
|
|
99
|
+
const text = await readFile(path, "utf8");
|
|
100
|
+
const config = JSON.parse(text);
|
|
101
|
+
if (typeof config.provider !== "object" || config.provider === null)
|
|
102
|
+
throw new Error(`${path} has no "provider" object`);
|
|
103
|
+
config.provider["description"] = description;
|
|
104
|
+
const indent = /^[ \t]+(?=")/m.exec(text)?.[0] ?? 2;
|
|
105
|
+
const temporary = `${path}.${process.pid}.tmp`;
|
|
106
|
+
await writeFile(temporary, `${JSON.stringify(config, null, indent)}\n`);
|
|
107
|
+
await rename(temporary, path);
|
|
108
|
+
}
|
|
109
|
+
async function checkPayTo(manifest) {
|
|
110
|
+
const { network, payTo } = manifest.payment.accepts[0];
|
|
111
|
+
// A contract holds SAC balances without a trustline.
|
|
112
|
+
if (payTo.startsWith("C"))
|
|
113
|
+
return `${payTo} is a contract: no trustline needed`;
|
|
114
|
+
const response = await fetch(`${HORIZON_URL[network]}/accounts/${payTo}`, { signal: AbortSignal.timeout(15_000) });
|
|
115
|
+
if (response.status === 404) {
|
|
116
|
+
throw new Error(`${payTo} does not exist on ${network}: ${network === "stellar:testnet" ? "provider-kit dev makes a throwaway testnet account, and launch sets up your own" : "send it some XLM first"}`);
|
|
117
|
+
}
|
|
118
|
+
if (!response.ok)
|
|
119
|
+
throw new Error(`Horizon answered ${response.status}`);
|
|
120
|
+
const account = (await response.json());
|
|
121
|
+
const trusted = account.balances.some((balance) => balance.asset_code === "USDC" && balance.asset_issuer === USDC_ISSUER[network]);
|
|
122
|
+
if (!trusted)
|
|
123
|
+
throw new Error(`${payTo} has no USDC trustline, so it can't be paid [P2]: add one with provider-kit trustline`);
|
|
124
|
+
return `${payTo} exists and has a USDC trustline`;
|
|
125
|
+
}
|
|
126
|
+
async function attempt(label, run) {
|
|
127
|
+
try {
|
|
128
|
+
return { status: "ok", text: `${label}: ${await run()}` };
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
return { status: "fail", text: `${label}: ${error.message}` };
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
function print(line) {
|
|
135
|
+
console.log(` ${MARK[line.status]} ${line.text}`);
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/cli/check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type StellarNetwork } from "@stellar-agent-services/protocol";
|
|
2
|
+
import { Keypair } from "@stellar/stellar-sdk";
|
|
3
|
+
import { type OwnerChain } from "./owner-chain.js";
|
|
4
|
+
/** The .env variable that holds the throwaway account's address, so `launch` knows PAY_TO isn't the developer's own. */
|
|
5
|
+
export declare const DEV_PAY_TO = "DEV_PAY_TO";
|
|
6
|
+
/** What PAY_TO is: unset, a throwaway account made by `provider-kit dev`, or an account the developer holds. */
|
|
7
|
+
export type PayToKind = "unset" | "throwaway" | "yours";
|
|
8
|
+
export declare function payToKind(env: NodeJS.ProcessEnv): PayToKind;
|
|
9
|
+
/** Makes a throwaway testnet account that can receive USDC, and returns its address. The key is gone when this returns. */
|
|
10
|
+
export declare function throwawayPayTo(chain: OwnerChain, keypair?: Keypair): Promise<string>;
|
|
11
|
+
export interface DevPayTo {
|
|
12
|
+
payTo: string;
|
|
13
|
+
kind: Exclude<PayToKind, "unset">;
|
|
14
|
+
/** Whether it was made just now. */
|
|
15
|
+
made: boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* PAY_TO for a provider in development: the one set, else a throwaway testnet account made now. A new one goes in
|
|
19
|
+
* `env` and in the env file at `envFile`, when that exists, so the next run uses it again.
|
|
20
|
+
*/
|
|
21
|
+
export declare function devPayTo(options: {
|
|
22
|
+
env: NodeJS.ProcessEnv;
|
|
23
|
+
network: StellarNetwork;
|
|
24
|
+
chain: () => OwnerChain;
|
|
25
|
+
envFile?: string;
|
|
26
|
+
log?: (line: string) => void;
|
|
27
|
+
}): Promise<DevPayTo>;
|
|
28
|
+
//# sourceMappingURL=dev-account.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-account.d.ts","sourceRoot":"","sources":["../../src/cli/dev-account.ts"],"names":[],"mappings":"AASA,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAC3F,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEhE,wHAAwH;AACxH,eAAO,MAAM,UAAU,eAAe,CAAC;AAEvC,gHAAgH;AAChH,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,WAAW,GAAG,OAAO,CAAC;AAExD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,CAI3D;AAED,2HAA2H;AAC3H,wBAAsB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,GAAE,OAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,CAU5G;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAClC,oCAAoC;IACpC,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE;IACtC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,OAAO,EAAE,cAAc,CAAC;IACxB,KAAK,EAAE,MAAM,UAAU,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B,GAAG,OAAO,CAAC,QAAQ,CAAC,CAyBpB"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
// The payout account during development. `provider-kit dev` (and `try`, when it starts the provider itself) make a
|
|
2
|
+
// throwaway one when PAY_TO is empty, so the first paid call needs no wallet (docs/provider-setup-guide.md §2).
|
|
3
|
+
//
|
|
4
|
+
// A new key, in memory only, gets test XLM from Friendbot and signs one transaction: the USDC trustline [P2]. Then the
|
|
5
|
+
// key is dropped. It is never written to a file or the environment, and the provider never sees it: the provider
|
|
6
|
+
// knows only the public address, as for any payTo (AGENTS.md §4, rule 1). What the account receives is test money
|
|
7
|
+
// that nobody can spend. Testnet only. `provider-kit launch` replaces it with an account in the developer's own wallet,
|
|
8
|
+
// which is how DEV_PAY_TO, the throwaway's public address kept next to PAY_TO in .env, tells the two apart.
|
|
9
|
+
import { stellarAddressKind } from "@stellar-agent-services/protocol";
|
|
10
|
+
import { Keypair } from "@stellar/stellar-sdk";
|
|
11
|
+
import { updateEnvFile } from "./env-file.js";
|
|
12
|
+
import { networkName } from "./owner-chain.js";
|
|
13
|
+
/** The .env variable that holds the throwaway account's address, so `launch` knows PAY_TO isn't the developer's own. */
|
|
14
|
+
export const DEV_PAY_TO = "DEV_PAY_TO";
|
|
15
|
+
export function payToKind(env) {
|
|
16
|
+
const payTo = env["PAY_TO"];
|
|
17
|
+
if (payTo === undefined || payTo === "")
|
|
18
|
+
return "unset";
|
|
19
|
+
return payTo === env[DEV_PAY_TO] ? "throwaway" : "yours";
|
|
20
|
+
}
|
|
21
|
+
/** Makes a throwaway testnet account that can receive USDC, and returns its address. The key is gone when this returns. */
|
|
22
|
+
export async function throwawayPayTo(chain, keypair = Keypair.random()) {
|
|
23
|
+
if (chain.network !== "stellar:testnet")
|
|
24
|
+
throw new Error(`a throwaway payout account is for testnet only, not ${networkName(chain.network)}`);
|
|
25
|
+
const address = keypair.publicKey();
|
|
26
|
+
await chain.fund(address);
|
|
27
|
+
const transaction = await chain.trustline(address);
|
|
28
|
+
transaction.sign(keypair);
|
|
29
|
+
const sent = await chain.send(transaction);
|
|
30
|
+
if (sent.status === "failed")
|
|
31
|
+
throw new Error(`the throwaway account's USDC trustline failed: ${sent.reason}`);
|
|
32
|
+
if (sent.status === "unknown")
|
|
33
|
+
throw new Error(`the throwaway account's USDC trustline may not have gone through: ${sent.reason}`);
|
|
34
|
+
return address;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* PAY_TO for a provider in development: the one set, else a throwaway testnet account made now. A new one goes in
|
|
38
|
+
* `env` and in the env file at `envFile`, when that exists, so the next run uses it again.
|
|
39
|
+
*/
|
|
40
|
+
export async function devPayTo(options) {
|
|
41
|
+
const { env, network } = options;
|
|
42
|
+
const log = options.log ?? (() => { });
|
|
43
|
+
const kind = payToKind(env);
|
|
44
|
+
if (kind !== "unset") {
|
|
45
|
+
const payTo = env["PAY_TO"];
|
|
46
|
+
if (stellarAddressKind(payTo) === undefined)
|
|
47
|
+
throw new Error(`PAY_TO is not a Stellar address: ${payTo}`);
|
|
48
|
+
return { payTo, kind, made: false };
|
|
49
|
+
}
|
|
50
|
+
if (network !== "stellar:testnet") {
|
|
51
|
+
throw new Error(`PAY_TO is empty. On ${networkName(network)} it must be an account in your own wallet: provider-kit launch sets it up`);
|
|
52
|
+
}
|
|
53
|
+
log(" … PAY_TO is empty: making a throwaway testnet account to receive test payments");
|
|
54
|
+
const payTo = await throwawayPayTo(options.chain());
|
|
55
|
+
env["PAY_TO"] = payTo;
|
|
56
|
+
env[DEV_PAY_TO] = payTo;
|
|
57
|
+
const saved = options.envFile !== undefined &&
|
|
58
|
+
(await updateEnvFile(options.envFile, { PAY_TO: payTo, [DEV_PAY_TO]: payTo }, { comments: { [DEV_PAY_TO]: "A throwaway testnet account provider-kit dev made, so test payments work before you connect a wallet.\nNobody holds its key, so nobody can spend what it receives. provider-kit launch replaces it with your own." } }));
|
|
59
|
+
log(` ✓ PAY_TO=${payTo}, a throwaway testnet account${saved ? ` (saved in ${options.envFile})` : ""}`);
|
|
60
|
+
return { payTo, kind: "throwaway", made: true };
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=dev-account.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-account.js","sourceRoot":"","sources":["../../src/cli/dev-account.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { StellarNetwork } from "@stellar-agent-services/protocol";
|
|
2
|
+
import { type OwnerChain } from "./owner-chain.js";
|
|
3
|
+
import { type Started } from "./processes.js";
|
|
4
|
+
import { serveGateway } from "./serve.js";
|
|
5
|
+
import { type CliFlags } from "./shared.js";
|
|
6
|
+
import { type Tunnel } from "./tunnel.js";
|
|
7
|
+
/** Where `dev` reaches the outside world. Tests replace it. */
|
|
8
|
+
export interface DevIo {
|
|
9
|
+
log(line: string): void;
|
|
10
|
+
chain(network: StellarNetwork): OwnerChain;
|
|
11
|
+
tunnel(port: number): Promise<Tunnel>;
|
|
12
|
+
serve: typeof serveGateway;
|
|
13
|
+
/** Runs the provider's own command, or the --with command, in this terminal. */
|
|
14
|
+
start(command: string, args: string[], options: {
|
|
15
|
+
env: NodeJS.ProcessEnv;
|
|
16
|
+
shell: boolean;
|
|
17
|
+
}): Started;
|
|
18
|
+
/** Keeps running until a signal, then runs `stop`: the gateway's way to end. */
|
|
19
|
+
untilStopped(stop: () => Promise<void>): void;
|
|
20
|
+
/** Resolves once something takes connections at host:port. Rejects when `exited` resolves first, or after `timeoutMs`. */
|
|
21
|
+
waitForPort(host: string, port: number, exited: Promise<number>, timeoutMs: number): Promise<void>;
|
|
22
|
+
env: NodeJS.ProcessEnv;
|
|
23
|
+
}
|
|
24
|
+
export declare function devIo(): DevIo;
|
|
25
|
+
/** provider-kit dev [-- <command> ...]: -1 while a gateway runs, else the command's exit code. */
|
|
26
|
+
export declare function dev(flags: CliFlags, command: string[], io?: DevIo): Promise<number>;
|
|
27
|
+
//# sourceMappingURL=dev.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/cli/dev.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAIvE,OAAO,EAA4C,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC7F,OAAO,EAAiC,KAAK,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAiB,MAAM,YAAY,CAAC;AACzD,OAAO,EAA2C,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AACrF,OAAO,EAAe,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAEvD,+DAA+D;AAC/D,MAAM,WAAW,KAAK;IACpB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG,UAAU,CAAC;IAC3C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,KAAK,EAAE,OAAO,YAAY,CAAC;IAC3B,gFAAgF;IAChF,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC;IACrG,gFAAgF;IAChF,YAAY,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC9C,0HAA0H;IAC1H,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnG,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;CACxB;AAED,wBAAgB,KAAK,IAAI,KAAK,CAY7B;AA2BD,kGAAkG;AAClG,wBAAsB,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,GAAE,KAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CA4BlG"}
|
package/dist/cli/dev.js
ADDED
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
// provider-kit dev: runs a provider on this computer, on testnet with nothing to set up first
|
|
2
|
+
// (docs/provider-setup-guide.md §2). On mainnet it runs too, paid to the PAY_TO set: there is no throwaway account there.
|
|
3
|
+
//
|
|
4
|
+
// provider-kit dev [--config <file>] [--port <n>] [--with '<command>'] [--tunnel] a gateway, in this process
|
|
5
|
+
// provider-kit dev [--port <n>] [--tunnel] -- <command> [args...] any other provider, by its command
|
|
6
|
+
//
|
|
7
|
+
// 1. Reads .env (or --env-file), as `node --env-file` does: a variable already set wins.
|
|
8
|
+
// 2. PAY_TO: the one set, else a throwaway testnet account made now (dev-account.ts), so test payments work before any
|
|
9
|
+
// wallet is connected. The provider only ever sees the public address.
|
|
10
|
+
// 3. Runs the provider: the gateway from --config (default ./provider.config.json) in dev mode, or the command after
|
|
11
|
+
// `--` with PAY_TO in its environment. --with runs the API the gateway calls next to it, such as
|
|
12
|
+
// `uvicorn app:app`, waits until it takes connections, and stops both when either one stops.
|
|
13
|
+
// 4. --tunnel also serves it at a public HTTPS address (tunnel.ts), to try it from anywhere.
|
|
14
|
+
// `provider-kit try` then pays it once; `provider-kit launch` takes it live.
|
|
15
|
+
import { existsSync } from "node:fs";
|
|
16
|
+
import { readFile } from "node:fs/promises";
|
|
17
|
+
import { connect } from "node:net";
|
|
18
|
+
import { DEFAULT_PORT } from "../gateway/config.js";
|
|
19
|
+
import { devPayTo } from "./dev-account.js";
|
|
20
|
+
import { ENV_FILE, loadEnvFile } from "./env-file.js";
|
|
21
|
+
import { networkName, rpcOwnerChain, shortAddress } from "./owner-chain.js";
|
|
22
|
+
import { startCommand, startForeground } from "./processes.js";
|
|
23
|
+
import { serveGateway, stopOnSignals } from "./serve.js";
|
|
24
|
+
import { DEFAULT_CONFIG, nextCommand, UsageError } from "./shared.js";
|
|
25
|
+
import { quickTunnel } from "./tunnel.js";
|
|
26
|
+
export function devIo() {
|
|
27
|
+
const log = (line) => console.log(line);
|
|
28
|
+
return {
|
|
29
|
+
log,
|
|
30
|
+
chain: (network) => rpcOwnerChain(network),
|
|
31
|
+
tunnel: (port) => quickTunnel(port),
|
|
32
|
+
serve: serveGateway,
|
|
33
|
+
start: (command, args, { env, shell }) => (shell ? startCommand(command, { env, show: true }) : startForeground(command, args, { env })),
|
|
34
|
+
untilStopped: (stop) => stopOnSignals(stop, log),
|
|
35
|
+
waitForPort,
|
|
36
|
+
env: process.env,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/** How long --with's API may take to start: uv may be installing its packages the first time. */
|
|
40
|
+
const API_START_MS = 180_000;
|
|
41
|
+
async function waitForPort(host, port, exited, timeoutMs) {
|
|
42
|
+
let stopped;
|
|
43
|
+
void exited.then((code) => (stopped = code));
|
|
44
|
+
const deadline = Date.now() + timeoutMs;
|
|
45
|
+
while (Date.now() < deadline) {
|
|
46
|
+
if (stopped !== undefined)
|
|
47
|
+
throw new Error(`it stopped (exit code ${stopped})`);
|
|
48
|
+
const open = await new Promise((resolve) => {
|
|
49
|
+
const socket = connect({ host, port });
|
|
50
|
+
const done = (result) => {
|
|
51
|
+
socket.destroy();
|
|
52
|
+
resolve(result);
|
|
53
|
+
};
|
|
54
|
+
socket.once("connect", () => done(true));
|
|
55
|
+
socket.once("error", () => done(false));
|
|
56
|
+
socket.setTimeout(1000, () => done(false));
|
|
57
|
+
});
|
|
58
|
+
if (open)
|
|
59
|
+
return;
|
|
60
|
+
await new Promise((resolve) => setTimeout(resolve, 300));
|
|
61
|
+
}
|
|
62
|
+
throw new Error(`nothing took connections at ${host}:${port} in ${Math.round(timeoutMs / 1000)} s`);
|
|
63
|
+
}
|
|
64
|
+
/** provider-kit dev [-- <command> ...]: -1 while a gateway runs, else the command's exit code. */
|
|
65
|
+
export async function dev(flags, command, io = devIo()) {
|
|
66
|
+
if (command.length > 0 && (flags.config !== undefined || flags.with !== undefined)) {
|
|
67
|
+
throw new UsageError("dev runs a gateway (--config, --with) or your provider's own command (after --), not both");
|
|
68
|
+
}
|
|
69
|
+
const envFile = flags["env-file"] ?? ENV_FILE;
|
|
70
|
+
if (flags["env-file"] !== undefined && !existsSync(envFile))
|
|
71
|
+
throw new UsageError(`${envFile} doesn't exist`);
|
|
72
|
+
await loadEnvFile(envFile, io.env);
|
|
73
|
+
const config = command.length > 0 ? undefined : (flags.config ?? (existsSync(DEFAULT_CONFIG) ? DEFAULT_CONFIG : undefined));
|
|
74
|
+
if (command.length === 0 && config === undefined) {
|
|
75
|
+
throw new UsageError(`dev needs a gateway config (--config, or ./${DEFAULT_CONFIG}), or your provider's command after --, such as: provider-kit dev -- node dist/server.js`);
|
|
76
|
+
}
|
|
77
|
+
const network = config === undefined ? commandNetwork(io.env) : await configNetwork(config);
|
|
78
|
+
const port = flags.port === undefined ? (io.env["PORT"] === undefined ? (config === undefined ? DEFAULT_PORT : undefined) : Number(io.env["PORT"])) : Number(flags.port);
|
|
79
|
+
if (port !== undefined && !(Number.isInteger(port) && port > 0 && port < 65536))
|
|
80
|
+
throw new UsageError("--port must be a port number");
|
|
81
|
+
const payTo = await devPayTo({ env: io.env, network, chain: () => io.chain(network), envFile, log: io.log });
|
|
82
|
+
let tunnel;
|
|
83
|
+
if (flags.tunnel) {
|
|
84
|
+
const tunnelPort = port ?? (config === undefined ? DEFAULT_PORT : await configPort(config));
|
|
85
|
+
io.log(` … Opening a public HTTPS address for port ${tunnelPort} (cloudflared)`);
|
|
86
|
+
tunnel = await io.tunnel(tunnelPort);
|
|
87
|
+
io.log(` ✓ Public address ${tunnel.url}: it changes every run, so it is for trying things out, not for registering`);
|
|
88
|
+
}
|
|
89
|
+
if (config === undefined)
|
|
90
|
+
return runCommand(command, { io, network, payTo, tunnel, port: port ?? DEFAULT_PORT });
|
|
91
|
+
return runGateway(config, { io, network, payTo, tunnel, port, with: flags.with });
|
|
92
|
+
}
|
|
93
|
+
/** The gateway, in this process, with the --with command next to it. Keeps running: -1. */
|
|
94
|
+
async function runGateway(config, options) {
|
|
95
|
+
const { io, tunnel } = options;
|
|
96
|
+
let companion;
|
|
97
|
+
if (options.with !== undefined) {
|
|
98
|
+
io.log(` … Starting ${options.with}`);
|
|
99
|
+
companion = io.start(options.with, [], { env: io.env, shell: true });
|
|
100
|
+
// The gateway serves once the API takes connections, so the first paid call doesn't arrive before it.
|
|
101
|
+
const api = await upstreamAddress(config, io.env);
|
|
102
|
+
if (api !== undefined) {
|
|
103
|
+
try {
|
|
104
|
+
await io.waitForPort(api.host, api.port, companion.exited, API_START_MS);
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
await companion.stop();
|
|
108
|
+
await tunnel?.stop();
|
|
109
|
+
throw new Error(`${options.with} didn't start: ${error.message}`);
|
|
110
|
+
}
|
|
111
|
+
io.log(` ✓ ${options.with} takes connections at ${api.host}:${api.port}`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
let served;
|
|
115
|
+
try {
|
|
116
|
+
served = await io.serve(config, {
|
|
117
|
+
dev: tunnel === undefined,
|
|
118
|
+
env: io.env,
|
|
119
|
+
...(options.port === undefined ? {} : { port: options.port }),
|
|
120
|
+
...(tunnel === undefined ? {} : { baseUrl: tunnel.url }),
|
|
121
|
+
log: io.log,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
await companion?.stop();
|
|
126
|
+
await tunnel?.stop();
|
|
127
|
+
throw error;
|
|
128
|
+
}
|
|
129
|
+
const { server } = served;
|
|
130
|
+
printNext(io, options.payTo, options.network);
|
|
131
|
+
let stopped = false;
|
|
132
|
+
const stop = async () => {
|
|
133
|
+
if (stopped)
|
|
134
|
+
return;
|
|
135
|
+
stopped = true;
|
|
136
|
+
await companion?.stop();
|
|
137
|
+
await tunnel?.stop();
|
|
138
|
+
await server.close();
|
|
139
|
+
};
|
|
140
|
+
void companion?.exited.then(async (code) => {
|
|
141
|
+
// A stop signal reaches this process too: give its handler the first word.
|
|
142
|
+
await new Promise((resolve) => setTimeout(resolve, 300));
|
|
143
|
+
if (stopped)
|
|
144
|
+
return;
|
|
145
|
+
io.log(`provider-kit: ${options.with} stopped (exit code ${code}), so the gateway stops too`);
|
|
146
|
+
await stop();
|
|
147
|
+
process.exit(code === 0 ? 1 : code);
|
|
148
|
+
});
|
|
149
|
+
io.untilStopped(stop);
|
|
150
|
+
return -1;
|
|
151
|
+
}
|
|
152
|
+
/** The provider's own command, with PAY_TO (and the tunnel's PUBLIC_ORIGIN) in its environment. Its exit code. */
|
|
153
|
+
async function runCommand(command, options) {
|
|
154
|
+
const { io, payTo, tunnel } = options;
|
|
155
|
+
const env = { ...io.env, PAY_TO: payTo.payTo, PORT: String(options.port), ...(tunnel === undefined ? {} : { PUBLIC_ORIGIN: tunnel.url }) };
|
|
156
|
+
printNext(io, payTo, options.network);
|
|
157
|
+
const child = io.start(command[0], command.slice(1), { env, shell: false });
|
|
158
|
+
// Ctrl+C reaches the command too: it stops, and so does this, with its exit code.
|
|
159
|
+
const ignore = () => { };
|
|
160
|
+
const forward = () => void child.stop();
|
|
161
|
+
process.on("SIGINT", ignore);
|
|
162
|
+
process.on("SIGTERM", forward);
|
|
163
|
+
try {
|
|
164
|
+
return await child.exited;
|
|
165
|
+
}
|
|
166
|
+
finally {
|
|
167
|
+
process.off("SIGINT", ignore);
|
|
168
|
+
process.off("SIGTERM", forward);
|
|
169
|
+
await tunnel?.stop();
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
function printNext(io, payTo, network) {
|
|
173
|
+
if (payTo.kind === "throwaway") {
|
|
174
|
+
io.log(` payTo ${shortAddress(payTo.payTo)} is a throwaway testnet account: test payments land there, and nobody can spend them.`);
|
|
175
|
+
io.log(` ${nextCommand("launch")} connects your own wallet and takes the service live.`);
|
|
176
|
+
}
|
|
177
|
+
// try pays with test money, which only testnet has.
|
|
178
|
+
if (network === "stellar:testnet")
|
|
179
|
+
io.log(`\nNext, from another terminal: ${nextCommand("try")} pays for one call with test money.\n`);
|
|
180
|
+
else
|
|
181
|
+
io.log(`\nThis is ${networkName(network)}: clients pay real USDC, to ${shortAddress(payTo.payTo)}. ${nextCommand("check")} checks the service against the standard.\n`);
|
|
182
|
+
}
|
|
183
|
+
/** The network of a gateway config, as written in it. */
|
|
184
|
+
async function configNetwork(path) {
|
|
185
|
+
let network;
|
|
186
|
+
try {
|
|
187
|
+
network = JSON.parse(await readFile(path, "utf8")).network;
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
throw new Error(`${path} can't be read: ${error.message}`);
|
|
191
|
+
}
|
|
192
|
+
if (network !== "stellar:testnet" && network !== "stellar:pubnet")
|
|
193
|
+
throw new Error(`${path} has no network: stellar:testnet or stellar:pubnet`);
|
|
194
|
+
return network;
|
|
195
|
+
}
|
|
196
|
+
/** Where a gateway config's first service calls its API, when that is on this computer: what --with starts. */
|
|
197
|
+
async function upstreamAddress(path, env) {
|
|
198
|
+
const services = JSON.parse(await readFile(path, "utf8")).services;
|
|
199
|
+
let url = services?.[0]?.upstream?.url;
|
|
200
|
+
if (typeof url === "string" && url.startsWith("env:"))
|
|
201
|
+
url = env[url.slice("env:".length)];
|
|
202
|
+
if (typeof url !== "string")
|
|
203
|
+
return undefined;
|
|
204
|
+
try {
|
|
205
|
+
const { hostname, port, protocol } = new URL(url);
|
|
206
|
+
if (!["localhost", "127.0.0.1", "[::1]"].includes(hostname))
|
|
207
|
+
return undefined;
|
|
208
|
+
return { host: hostname === "[::1]" ? "::1" : hostname, port: Number(port || (protocol === "https:" ? 443 : 80)) };
|
|
209
|
+
}
|
|
210
|
+
catch {
|
|
211
|
+
return undefined;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/** The port a gateway config listens on, for the tunnel. */
|
|
215
|
+
async function configPort(path) {
|
|
216
|
+
const listen = JSON.parse(await readFile(path, "utf8")).listen;
|
|
217
|
+
return typeof listen?.port === "number" ? listen.port : DEFAULT_PORT;
|
|
218
|
+
}
|
|
219
|
+
/** A provider run by its own command reads STELLAR_NETWORK, as the TypeScript template does. Testnet by default. */
|
|
220
|
+
function commandNetwork(env) {
|
|
221
|
+
const network = env["STELLAR_NETWORK"] ?? "stellar:testnet";
|
|
222
|
+
if (network !== "stellar:testnet" && network !== "stellar:pubnet")
|
|
223
|
+
throw new UsageError(`STELLAR_NETWORK must be stellar:testnet or stellar:pubnet, not "${network}"`);
|
|
224
|
+
return network;
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=dev.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/cli/dev.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,0HAA0H;AAC1H,EAAE;AACF,iHAAiH;AACjH,yHAAyH;AACzH,EAAE;AACF,yFAAyF;AACzF,uHAAuH;AACvH,0EAA0E;AAC1E,qHAAqH;AACrH,oGAAoG;AACpG,gGAAgG;AAChG,6FAA6F;AAC7F,6EAA6E;AAE7E,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAiB,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAmB,MAAM,kBAAkB,CAAC;AAC7F,OAAO,EAAE,YAAY,EAAE,eAAe,EAAgB,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAiB,MAAM,aAAa,CAAC;AACrF,OAAO,EAAE,WAAW,EAAe,MAAM,aAAa,CAAC;AAiBvD,MAAM,UAAU,KAAK;IACnB,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChD,OAAO;QACL,GAAG;QACH,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC;QAC1C,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC;QACnC,KAAK,EAAE,YAAY;QACnB,KAAK,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QACxI,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC;QAChD,WAAW;QACX,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC;AACJ,CAAC;AAED,iGAAiG;AACjG,MAAM,YAAY,GAAG,OAAO,CAAC;AAE7B,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,IAAY,EAAE,MAAuB,EAAE,SAAiB;IAC/F,IAAI,OAA2B,CAAC;IAChC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,IAAI,OAAO,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,OAAO,GAAG,CAAC,CAAC;QAChF,MAAM,IAAI,GAAG,MAAM,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;YAClD,MAAM,MAAM,GAAG,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACvC,MAAM,IAAI,GAAG,CAAC,MAAe,EAAE,EAAE;gBAC/B,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAO,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACzC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QACH,IAAI,IAAI;YAAE,OAAO;QACjB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3D,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,+BAA+B,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;AACtG,CAAC;AAED,kGAAkG;AAClG,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,KAAe,EAAE,OAAiB,EAAE,KAAY,KAAK,EAAE;IAC/E,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,EAAE,CAAC;QACnF,MAAM,IAAI,UAAU,CAAC,2FAA2F,CAAC,CAAC;IACpH,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,QAAQ,CAAC;IAC9C,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,SAAS,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,GAAG,OAAO,gBAAgB,CAAC,CAAC;IAC9G,MAAM,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IAEnC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5H,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACjD,MAAM,IAAI,UAAU,CAAC,8CAA8C,cAAc,0FAA0F,CAAC,CAAC;IAC/K,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5F,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzK,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,8BAA8B,CAAC,CAAC;IAEtI,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IAE7G,IAAI,MAA0B,CAAC;IAC/B,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5F,EAAE,CAAC,GAAG,CAAC,+CAA+C,UAAU,gBAAgB,CAAC,CAAC;QAClF,MAAM,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACrC,EAAE,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,GAAG,6EAA6E,CAAC,CAAC;IACxH,CAAC;IAED,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,UAAU,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,IAAI,YAAY,EAAE,CAAC,CAAC;IACjH,OAAO,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AACpF,CAAC;AAED,2FAA2F;AAC3F,KAAK,UAAU,UAAU,CACvB,MAAc,EACd,OAAgJ;IAEhJ,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAC/B,IAAI,SAA8B,CAAC;IACnC,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,EAAE,CAAC,GAAG,CAAC,gBAAgB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACvC,SAAS,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACrE,sGAAsG;QACtG,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;QAClD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YAC3E,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;gBACvB,MAAM,MAAM,EAAE,IAAI,EAAE,CAAC;gBACrB,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,kBAAmB,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;YAC/E,CAAC;YACD,EAAE,CAAC,GAAG,CAAC,OAAO,OAAO,CAAC,IAAI,yBAAyB,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE;YAC9B,GAAG,EAAE,MAAM,KAAK,SAAS;YACzB,GAAG,EAAE,EAAE,CAAC,GAAG;YACX,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;YAC7D,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;YACxD,GAAG,EAAE,EAAE,CAAC,GAAG;SACZ,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,SAAS,EAAE,IAAI,EAAE,CAAC;QACxB,MAAM,MAAM,EAAE,IAAI,EAAE,CAAC;QACrB,MAAM,KAAK,CAAC;IACd,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAE9C,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;QACtB,IAAI,OAAO;YAAE,OAAO;QACpB,OAAO,GAAG,IAAI,CAAC;QACf,MAAM,SAAS,EAAE,IAAI,EAAE,CAAC;QACxB,MAAM,MAAM,EAAE,IAAI,EAAE,CAAC;QACrB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC,CAAC;IACF,KAAK,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACzC,2EAA2E;QAC3E,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QACzD,IAAI,OAAO;YAAE,OAAO;QACpB,EAAE,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,IAAI,uBAAuB,IAAI,6BAA6B,CAAC,CAAC;QAC9F,MAAM,IAAI,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACtB,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC;AAED,kHAAkH;AAClH,KAAK,UAAU,UAAU,CAAC,OAAiB,EAAE,OAA0G;IACrJ,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACtC,MAAM,GAAG,GAAsB,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;IAC9J,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7E,kFAAkF;IAClF,MAAM,MAAM,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;IACxB,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;IACxC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC/B,IAAI,CAAC;QACH,OAAO,MAAM,KAAK,CAAC,MAAM,CAAC;IAC5B,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAChC,MAAM,MAAM,EAAE,IAAI,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,EAAS,EAAE,KAAe,EAAE,OAAuB;IACpE,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC/B,EAAE,CAAC,GAAG,CAAC,gBAAgB,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,uFAAuF,CAAC,CAAC;QACzI,EAAE,CAAC,GAAG,CAAC,gBAAgB,WAAW,CAAC,QAAQ,CAAC,uDAAuD,CAAC,CAAC;IACvG,CAAC;IACD,oDAAoD;IACpD,IAAI,OAAO,KAAK,iBAAiB;QAAE,EAAE,CAAC,GAAG,CAAC,kCAAkC,WAAW,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;;QAClI,EAAE,CAAC,GAAG,CAAC,aAAa,WAAW,CAAC,OAAO,CAAC,+BAA+B,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAC;AAC/K,CAAC;AAED,yDAAyD;AACzD,KAAK,UAAU,aAAa,CAAC,IAAY;IACvC,IAAI,OAAgB,CAAC;IACrB,IAAI,CAAC;QACH,OAAO,GAAI,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAA2B,CAAC,OAAO,CAAC;IACxF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,mBAAoB,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,OAAO,KAAK,iBAAiB,IAAI,OAAO,KAAK,gBAAgB;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,oDAAoD,CAAC,CAAC;IAChJ,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,+GAA+G;AAC/G,KAAK,UAAU,eAAe,CAAC,IAAY,EAAE,GAAsB;IACjE,MAAM,QAAQ,GAAI,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAuD,CAAC,QAAQ,CAAC;IAC1H,IAAI,GAAG,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC;IACvC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3F,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC9C,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAClD,IAAI,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,OAAO,SAAS,CAAC;QAC9E,OAAO,EAAE,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IACrH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,4DAA4D;AAC5D,KAAK,UAAU,UAAU,CAAC,IAAY;IACpC,MAAM,MAAM,GAAI,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAqC,CAAC,MAAM,CAAC;IACpG,OAAO,OAAO,MAAM,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC;AACvE,CAAC;AAED,oHAAoH;AACpH,SAAS,cAAc,CAAC,GAAsB;IAC5C,MAAM,OAAO,GAAG,GAAG,CAAC,iBAAiB,CAAC,IAAI,iBAAiB,CAAC;IAC5D,IAAI,OAAO,KAAK,iBAAiB,IAAI,OAAO,KAAK,gBAAgB;QAAE,MAAM,IAAI,UAAU,CAAC,mEAAmE,OAAO,GAAG,CAAC,CAAC;IACvK,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type ProviderManifest, type ServiceDescriptor } from "@stellar-agent-services/protocol";
|
|
2
|
+
/** The stellar-agent-search release whose matching this follows, and whose CLI shows the live profile. */
|
|
3
|
+
export declare const SEARCH_PACKAGE = "stellar-agent-search@0.2.0";
|
|
4
|
+
/**
|
|
5
|
+
* The "How agents see you" section of `provider-kit check`. `registered` is the 8004 registration file read from the
|
|
6
|
+
* registry, when the provider has an agentId and the file could be read: search shows its name and description.
|
|
7
|
+
*/
|
|
8
|
+
export declare function howAgentsSeeYou(manifest: ProviderManifest, registered?: Record<string, unknown>): string[];
|
|
9
|
+
/**
|
|
10
|
+
* provider.description with the words search would miss written in, for `provider-kit check --fix`: a sentence naming
|
|
11
|
+
* the services, then any tag words still missing. Undefined when search already finds every word.
|
|
12
|
+
*/
|
|
13
|
+
export declare function describedWithServices(manifest: ProviderManifest): string | undefined;
|
|
14
|
+
/** Words from the services' names, titles and tags that a search for them wouldn't match in `text`. */
|
|
15
|
+
export declare function missingWords(text: string, services: readonly ServiceDescriptor[]): string[];
|
|
16
|
+
/** The words of `text` a search uses: folded, at least two characters, not a number, not a stopword. */
|
|
17
|
+
export declare function searchWords(text: string): string[];
|
|
18
|
+
/** stellar-agent-search's stem: one common suffix off, leaving at least three characters. */
|
|
19
|
+
export declare function stem(word: string): string;
|
|
20
|
+
//# sourceMappingURL=discovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/cli/discovery.ts"],"names":[],"mappings":"AAeA,OAAO,EAAyB,KAAK,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAIxH,0GAA0G;AAC1G,eAAO,MAAM,cAAc,+BAA+B,CAAC;AA+B3D;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,gBAAgB,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAmD1G;AAKD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,GAAG,SAAS,CAiBpF;AAED,uGAAuG;AACvG,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,iBAAiB,EAAE,GAAG,MAAM,EAAE,CAS3F;AAED,wGAAwG;AACxG,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAElD;AAED,6FAA6F;AAC7F,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGzC"}
|