agentcash 0.6.5 → 0.6.6
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/dist/cjs/run-server.cjs +25 -25
- package/dist/esm/{check-endpoint-Df0YnKdr.d.ts → check-endpoint-UD2Ycr-4.d.ts} +1 -0
- package/dist/esm/chunk-33JE5MUU.js +7 -0
- package/dist/esm/{chunk-EYF7JMMC.js → chunk-6OZUZZIH.js} +3 -3
- package/dist/esm/{chunk-PLBNJ647.js → chunk-NQ5BLLN7.js} +16 -5
- package/dist/esm/chunk-NQ5BLLN7.js.map +1 -0
- package/dist/esm/{chunk-VUTE3VTW.js → chunk-P666EAQ2.js} +3 -3
- package/dist/esm/{chunk-WBLOSD2E.js → chunk-RFFZRGKI.js} +2 -3
- package/dist/esm/chunk-RFFZRGKI.js.map +1 -0
- package/dist/esm/{chunk-KPHAAIVC.js → chunk-SDQV56RE.js} +10 -2
- package/dist/esm/chunk-SDQV56RE.js.map +1 -0
- package/dist/esm/{chunk-5MGZ3UGG.js → chunk-TIP56JAT.js} +6 -2
- package/dist/esm/{chunk-5MGZ3UGG.js.map → chunk-TIP56JAT.js.map} +1 -1
- package/dist/esm/{chunk-W3V4VWAR.js → chunk-Z453AIOR.js} +2 -2
- package/dist/esm/{commands-5GTG7HKC.js → commands-JV2Z4T2M.js} +349 -11
- package/dist/esm/commands-JV2Z4T2M.js.map +1 -0
- package/dist/esm/{fund-WZGVUR2S.js → fund-RGWDV2M5.js} +3 -3
- package/dist/esm/index.js +26 -14
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/{install-A6TREGKW.js → install-IZ2IITSQ.js} +4 -5
- package/dist/esm/install-IZ2IITSQ.js.map +1 -0
- package/dist/esm/lib.d.ts +1 -1
- package/dist/esm/lib.js +5 -12
- package/dist/esm/lib.js.map +1 -1
- package/dist/esm/{server-4CN2V4WJ.js → server-SMGMX4NA.js} +11 -27
- package/dist/esm/server-SMGMX4NA.js.map +1 -0
- package/dist/esm/shared/operations/index.d.ts +1 -1
- package/dist/esm/shared/operations/index.js +4 -4
- package/package.json +3 -3
- package/dist/esm/chunk-F5ZDNWEA.js +0 -7
- package/dist/esm/chunk-KPHAAIVC.js.map +0 -1
- package/dist/esm/chunk-PLBNJ647.js.map +0 -1
- package/dist/esm/chunk-WBLOSD2E.js.map +0 -1
- package/dist/esm/commands-5GTG7HKC.js.map +0 -1
- package/dist/esm/install-A6TREGKW.js.map +0 -1
- package/dist/esm/server-4CN2V4WJ.js.map +0 -1
- /package/dist/esm/{chunk-F5ZDNWEA.js.map → chunk-33JE5MUU.js.map} +0 -0
- /package/dist/esm/{chunk-EYF7JMMC.js.map → chunk-6OZUZZIH.js.map} +0 -0
- /package/dist/esm/{chunk-VUTE3VTW.js.map → chunk-P666EAQ2.js.map} +0 -0
- /package/dist/esm/{chunk-W3V4VWAR.js.map → chunk-Z453AIOR.js.map} +0 -0
- /package/dist/esm/{fund-WZGVUR2S.js.map → fund-RGWDV2M5.js.map} +0 -0
package/dist/cjs/run-server.cjs
CHANGED
|
@@ -34,10 +34,10 @@ var __toESM = (mod2, isNodeMode, target) => (target = mod2 != null ? __create(__
|
|
|
34
34
|
));
|
|
35
35
|
var __toCommonJS = (mod2) => __copyProps(__defProp({}, "__esModule", { value: true }), mod2);
|
|
36
36
|
|
|
37
|
-
// ../../../node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.6_tsx@4.21.0_typescript@5.9.
|
|
37
|
+
// ../../../node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.6_tsx@4.21.0_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js
|
|
38
38
|
var getImportMetaUrl, importMetaUrl;
|
|
39
39
|
var init_cjs_shims = __esm({
|
|
40
|
-
"../../../node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.6_tsx@4.21.0_typescript@5.9.
|
|
40
|
+
"../../../node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.6_tsx@4.21.0_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js"() {
|
|
41
41
|
"use strict";
|
|
42
42
|
getImportMetaUrl = () => typeof document === "undefined" ? new URL(`file:${__filename}`).href : document.currentScript && document.currentScript.tagName.toUpperCase() === "SCRIPT" ? document.currentScript.src : new URL("main.js", document.baseURI).href;
|
|
43
43
|
importMetaUrl = /* @__PURE__ */ getImportMetaUrl();
|
|
@@ -104303,7 +104303,7 @@ var import_path2 = require("path");
|
|
|
104303
104303
|
var import_url = require("url");
|
|
104304
104304
|
function getVersion2() {
|
|
104305
104305
|
if (true) {
|
|
104306
|
-
return "0.6.
|
|
104306
|
+
return "0.6.6";
|
|
104307
104307
|
}
|
|
104308
104308
|
const __dirname3 = (0, import_path2.dirname)((0, import_url.fileURLToPath)(importMetaUrl));
|
|
104309
104309
|
const pkg = JSON.parse(
|
|
@@ -104466,7 +104466,7 @@ var TEMPO_TOKEN_ADDRESS = "0x20c0000000000000000000000000000000000000";
|
|
|
104466
104466
|
|
|
104467
104467
|
// src/shared/mpp-enabled.ts
|
|
104468
104468
|
init_cjs_shims();
|
|
104469
|
-
var isMppEnabled = () => "0.6.
|
|
104469
|
+
var isMppEnabled = () => "0.6.6".includes("-mpp");
|
|
104470
104470
|
|
|
104471
104471
|
// src/shared/operations/fetch-with-payment.ts
|
|
104472
104472
|
init_cjs_shims();
|
|
@@ -110991,6 +110991,19 @@ init_cjs_shims();
|
|
|
110991
110991
|
// src/shared/redeem-invite.ts
|
|
110992
110992
|
init_cjs_shims();
|
|
110993
110993
|
|
|
110994
|
+
// src/shared/origins.ts
|
|
110995
|
+
init_cjs_shims();
|
|
110996
|
+
var ORIGINS = [
|
|
110997
|
+
"https://stableenrich.dev" /* StableEnrich */,
|
|
110998
|
+
"https://stablesocial.dev" /* StableSocial */,
|
|
110999
|
+
"https://stablestudio.dev" /* StableStudio */,
|
|
111000
|
+
"https://stableupload.dev" /* StableUpload */,
|
|
111001
|
+
"https://stableemail.dev" /* StableEmail */,
|
|
111002
|
+
"https://x402scan.com" /* X402Scan */,
|
|
111003
|
+
"https://shirt.sh" /* Shirt */,
|
|
111004
|
+
"https://x402puppet.com" /* X402Puppet */
|
|
111005
|
+
];
|
|
111006
|
+
|
|
110994
111007
|
// src/shared/state.ts
|
|
110995
111008
|
init_cjs_shims();
|
|
110996
111009
|
var import_fs4 = __toESM(require("fs"), 1);
|
|
@@ -111020,7 +111033,6 @@ var setState = (state) => {
|
|
|
111020
111033
|
// src/shared/redeem-invite.ts
|
|
111021
111034
|
var redeemInviteCode = async ({
|
|
111022
111035
|
code,
|
|
111023
|
-
dev,
|
|
111024
111036
|
address,
|
|
111025
111037
|
surface: surface2
|
|
111026
111038
|
}) => {
|
|
@@ -111033,7 +111045,7 @@ var redeemInviteCode = async ({
|
|
|
111033
111045
|
}
|
|
111034
111046
|
const result = await safeFetchJson(
|
|
111035
111047
|
surface2,
|
|
111036
|
-
new Request(`${
|
|
111048
|
+
new Request(`${"https://x402scan.com" /* X402Scan */}/api/invite/redeem`, {
|
|
111037
111049
|
method: "POST",
|
|
111038
111050
|
headers: {
|
|
111039
111051
|
"Content-Type": "application/json"
|
|
@@ -111060,8 +111072,7 @@ var redeemInviteCode = async ({
|
|
|
111060
111072
|
// src/server/tools/redeem-invite.ts
|
|
111061
111073
|
var registerRedeemInviteTool = ({
|
|
111062
111074
|
server,
|
|
111063
|
-
account: { address }
|
|
111064
|
-
flags
|
|
111075
|
+
account: { address }
|
|
111065
111076
|
}) => {
|
|
111066
111077
|
server.registerTool(
|
|
111067
111078
|
"redeem_invite",
|
|
@@ -111089,7 +111100,6 @@ var registerRedeemInviteTool = ({
|
|
|
111089
111100
|
async ({ code }) => {
|
|
111090
111101
|
const result = await redeemInviteCode({
|
|
111091
111102
|
code,
|
|
111092
|
-
dev: flags.dev,
|
|
111093
111103
|
address,
|
|
111094
111104
|
surface: "redeem_invite"
|
|
111095
111105
|
});
|
|
@@ -111216,19 +111226,6 @@ var registerTelemetryTools = ({
|
|
|
111216
111226
|
// src/server/tools/discover-resources.ts
|
|
111217
111227
|
init_cjs_shims();
|
|
111218
111228
|
|
|
111219
|
-
// src/shared/origins.ts
|
|
111220
|
-
init_cjs_shims();
|
|
111221
|
-
var ORIGINS = [
|
|
111222
|
-
"https://stableenrich.dev" /* StableEnrich */,
|
|
111223
|
-
"https://stablesocial.dev" /* StableSocial */,
|
|
111224
|
-
"https://stablestudio.dev" /* StableStudio */,
|
|
111225
|
-
"https://stableupload.dev" /* StableUpload */,
|
|
111226
|
-
"https://stableemail.dev" /* StableEmail */,
|
|
111227
|
-
"https://x402scan.com" /* X402Scan */,
|
|
111228
|
-
"https://shirt.sh" /* Shirt */,
|
|
111229
|
-
"https://x402puppet.com" /* X402Puppet */
|
|
111230
|
-
];
|
|
111231
|
-
|
|
111232
111229
|
// src/shared/operations/discover.ts
|
|
111233
111230
|
init_cjs_shims();
|
|
111234
111231
|
async function fetchLlmsTxt(surface2, origin) {
|
|
@@ -111246,6 +111243,9 @@ async function fetchLlmsTxt(surface2, origin) {
|
|
|
111246
111243
|
return parseResult.value.data;
|
|
111247
111244
|
}
|
|
111248
111245
|
async function discoverResources(surface2, url3) {
|
|
111246
|
+
if (!/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(url3)) {
|
|
111247
|
+
url3 = `https://${url3}`;
|
|
111248
|
+
}
|
|
111249
111249
|
const origin = URL.canParse(url3) ? new URL(url3).origin : url3;
|
|
111250
111250
|
log.info(`Discovering resources for origin: ${origin}`);
|
|
111251
111251
|
const [specResult, instructions] = await Promise.all([
|
|
@@ -111274,6 +111274,7 @@ async function discoverResources(surface2, url3) {
|
|
|
111274
111274
|
...typeof rawInfo.description === "string" ? { description: rawInfo.description } : {}
|
|
111275
111275
|
} : void 0;
|
|
111276
111276
|
return {
|
|
111277
|
+
found: true,
|
|
111277
111278
|
origin,
|
|
111278
111279
|
source: "openapi",
|
|
111279
111280
|
...info ? { info } : {},
|
|
@@ -111861,7 +111862,7 @@ var import_path3 = require("path");
|
|
|
111861
111862
|
var import_url2 = require("url");
|
|
111862
111863
|
function getVersion3() {
|
|
111863
111864
|
if (true) {
|
|
111864
|
-
return "0.6.
|
|
111865
|
+
return "0.6.6";
|
|
111865
111866
|
}
|
|
111866
111867
|
const __dirname3 = (0, import_path3.dirname)((0, import_url2.fileURLToPath)(importMetaUrl));
|
|
111867
111868
|
const pkg = JSON.parse(
|
|
@@ -112048,7 +112049,7 @@ async function getWallet() {
|
|
|
112048
112049
|
// src/server/index.ts
|
|
112049
112050
|
var startServer = async (flags) => {
|
|
112050
112051
|
log.info("Starting agentcash...");
|
|
112051
|
-
const {
|
|
112052
|
+
const { invite } = flags;
|
|
112052
112053
|
let { sessionId } = flags;
|
|
112053
112054
|
sessionId ??= (0, import_crypto2.randomBytes)(16).toString("hex");
|
|
112054
112055
|
const walletResult = await getWallet();
|
|
@@ -112062,7 +112063,6 @@ var startServer = async (flags) => {
|
|
|
112062
112063
|
if (code) {
|
|
112063
112064
|
await redeemInviteCode({
|
|
112064
112065
|
code,
|
|
112065
|
-
dev,
|
|
112066
112066
|
address: account.address,
|
|
112067
112067
|
surface: "startServer"
|
|
112068
112068
|
});
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
isMppEnabled
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-33JE5MUU.js";
|
|
4
4
|
import {
|
|
5
5
|
MCP_VERSION
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-Z453AIOR.js";
|
|
7
7
|
import {
|
|
8
8
|
getBalance,
|
|
9
9
|
getBaseUrl,
|
|
@@ -119,4 +119,4 @@ export {
|
|
|
119
119
|
getWalletInfo,
|
|
120
120
|
submitErrorReport
|
|
121
121
|
};
|
|
122
|
-
//# sourceMappingURL=chunk-
|
|
122
|
+
//# sourceMappingURL=chunk-6OZUZZIH.js.map
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
-
getBalance
|
|
3
|
-
getBaseUrl
|
|
2
|
+
getBalance
|
|
4
3
|
} from "./chunk-YUCA2PQT.js";
|
|
5
4
|
import {
|
|
6
5
|
LEGACY_DIRECTORY,
|
|
@@ -211,6 +210,18 @@ async function getWallet() {
|
|
|
211
210
|
// src/shared/redeem-invite.ts
|
|
212
211
|
import z3 from "zod";
|
|
213
212
|
|
|
213
|
+
// src/shared/origins.ts
|
|
214
|
+
var ORIGINS = [
|
|
215
|
+
"https://stableenrich.dev" /* StableEnrich */,
|
|
216
|
+
"https://stablesocial.dev" /* StableSocial */,
|
|
217
|
+
"https://stablestudio.dev" /* StableStudio */,
|
|
218
|
+
"https://stableupload.dev" /* StableUpload */,
|
|
219
|
+
"https://stableemail.dev" /* StableEmail */,
|
|
220
|
+
"https://x402scan.com" /* X402Scan */,
|
|
221
|
+
"https://shirt.sh" /* Shirt */,
|
|
222
|
+
"https://x402puppet.com" /* X402Puppet */
|
|
223
|
+
];
|
|
224
|
+
|
|
214
225
|
// src/shared/state.ts
|
|
215
226
|
import z2 from "zod";
|
|
216
227
|
import fs from "fs";
|
|
@@ -240,7 +251,6 @@ var setState = (state) => {
|
|
|
240
251
|
// src/shared/redeem-invite.ts
|
|
241
252
|
var redeemInviteCode = async ({
|
|
242
253
|
code,
|
|
243
|
-
dev,
|
|
244
254
|
address,
|
|
245
255
|
surface
|
|
246
256
|
}) => {
|
|
@@ -253,7 +263,7 @@ var redeemInviteCode = async ({
|
|
|
253
263
|
}
|
|
254
264
|
const result = await safeFetchJson(
|
|
255
265
|
surface,
|
|
256
|
-
new Request(`${
|
|
266
|
+
new Request(`${"https://x402scan.com" /* X402Scan */}/api/invite/redeem`, {
|
|
257
267
|
method: "POST",
|
|
258
268
|
headers: {
|
|
259
269
|
"Content-Type": "application/json"
|
|
@@ -359,6 +369,7 @@ export {
|
|
|
359
369
|
toJsonObject,
|
|
360
370
|
safeParseJson,
|
|
361
371
|
getWallet,
|
|
372
|
+
ORIGINS,
|
|
362
373
|
redeemInviteCode
|
|
363
374
|
};
|
|
364
|
-
//# sourceMappingURL=chunk-
|
|
375
|
+
//# sourceMappingURL=chunk-NQ5BLLN7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/shared/wallet.ts","../../src/shared/neverthrow/json/index.ts","../../src/shared/redeem-invite.ts","../../src/shared/origins.ts","../../src/shared/state.ts","../../src/shared/networks.ts"],"sourcesContent":["import { existsSync, readFileSync } from 'fs';\nimport { join } from 'path';\n\nimport { getAddress } from 'viem';\nimport { generatePrivateKey, privateKeyToAccount } from 'viem/accounts';\n\nimport z from 'zod';\n\nimport {\n ok,\n resultFromThrowable,\n resultFromPromise,\n} from '@agentcash/neverthrow';\n\nimport {\n fsErr,\n safeChmod,\n safeReadFile,\n safeWriteFile,\n} from '@/shared/neverthrow/fs';\nimport { jsonErr, safeParseJson } from '@/shared/neverthrow/json';\nimport { safeParse } from '@/shared/neverthrow/parse';\nimport { getBalance } from '@/shared/balance';\n\nimport { log } from './log';\nimport { configFile, LEGACY_DIRECTORY } from './fs';\n\nimport type { Hex } from 'viem';\nimport type { PrivateKeyAccount } from 'viem/accounts';\n\nconst WALLET_FILE = configFile('wallet.json');\n\nconst storedWalletSchema = z.object({\n privateKey: z\n .string()\n .regex(/^0x[a-fA-F0-9]{64}$/, 'Invalid Ethereum private key')\n .transform(privateKey => privateKey as Hex),\n address: z\n .string()\n .regex(/^0x[a-fA-F0-9]{40}$/, 'Invalid Ethereum address')\n .transform(address => getAddress(address)),\n createdAt: z.string(),\n});\n\nconst walletSurface = 'wallet';\n\nconst LEGACY_WALLET = join(LEGACY_DIRECTORY, 'wallet.json');\n\nconst reconcileSurface = 'wallet-reconcile';\n\nasync function reconcileLegacyWallet(\n current: PrivateKeyAccount,\n isNew: boolean\n): Promise<{ account: PrivateKeyAccount; isNew: boolean }> {\n const noChange = { account: current, isNew };\n\n // 1. No legacy wallet → nothing to reconcile\n if (!existsSync(LEGACY_WALLET)) {\n return noChange;\n }\n\n // 2. Read & parse legacy wallet\n const legacyResult = resultFromThrowable(\n 'wallet',\n reconcileSurface,\n () => {\n const raw = readFileSync(LEGACY_WALLET, 'utf-8');\n return storedWalletSchema.parse(JSON.parse(raw));\n },\n () => ({\n cause: 'file_not_readable' as const,\n message: 'Legacy wallet exists but is invalid',\n })\n );\n\n if (legacyResult.isErr()) {\n log.info('Legacy wallet exists but is invalid, skipping reconciliation');\n return noChange;\n }\n\n const legacyKey = legacyResult.value.privateKey;\n\n // 3. Same key → already reconciled\n const legacyAccount = privateKeyToAccount(legacyKey);\n if (legacyAccount.address === current.address) {\n return noChange;\n }\n\n // 4. Keys differ → check balances\n const balancesResult = await resultFromPromise(\n 'wallet',\n reconcileSurface,\n Promise.all([\n getBalance({\n address: legacyAccount.address,\n surface: reconcileSurface,\n }),\n getBalance({\n address: current.address,\n surface: reconcileSurface,\n }),\n ]),\n () => ({\n cause: 'balance_check' as const,\n message: 'Network error during wallet reconciliation',\n })\n );\n\n if (balancesResult.isErr()) {\n log.info('Network error during wallet reconciliation, skipping');\n return noChange;\n }\n\n const [legacyBalanceResult, currentBalanceResult] = balancesResult.value;\n\n if (legacyBalanceResult.isErr() || currentBalanceResult.isErr()) {\n log.info('Could not check balances for wallet reconciliation, skipping');\n return noChange;\n }\n\n const legacyBalance = legacyBalanceResult.value.balance;\n const currentBalance = currentBalanceResult.value.balance;\n\n // 4a. Legacy has balance, current is empty → recover legacy\n if (legacyBalance > 0 && currentBalance === 0) {\n log.info(\n `Recovering funded legacy wallet ${legacyAccount.address} (balance: ${legacyBalance})`\n );\n const stored = {\n privateKey: legacyKey,\n address: legacyAccount.address,\n createdAt: new Date().toISOString(),\n };\n const writeResult = await safeWriteFile(\n reconcileSurface,\n WALLET_FILE,\n JSON.stringify(stored, null, 2)\n ).andThen(() => safeChmod(reconcileSurface, WALLET_FILE, 0o600));\n\n if (writeResult.isErr()) {\n log.error(\n `Failed to write recovered wallet: ${writeResult.error.message}`\n );\n return noChange;\n }\n\n return { account: legacyAccount, isNew: false };\n }\n\n // 4b. Both have balance → manual intervention needed\n if (legacyBalance > 0 && currentBalance > 0) {\n log.info(\n `Both wallets have funds. Current: ${current.address} (${currentBalance}), Legacy: ${legacyAccount.address} (${legacyBalance}). ` +\n `Manually copy ${LEGACY_WALLET} to ${WALLET_FILE} if you want to use the legacy wallet.`\n );\n return noChange;\n }\n\n // 4c. Legacy has no balance → nothing to recover\n return noChange;\n}\n\nexport async function getWallet() {\n if (process.env.X402_PRIVATE_KEY) {\n const account = privateKeyToAccount(process.env.X402_PRIVATE_KEY as Hex);\n log.info(`Using wallet from env: ${account.address}`);\n return ok({ account, isNew: false });\n }\n\n const readFileResult = await safeReadFile(walletSurface, WALLET_FILE);\n\n if (!readFileResult.isOk()) {\n const fileExistsResult = existsSync(WALLET_FILE);\n // file exists but is not readable\n if (fileExistsResult) {\n return fsErr(walletSurface, {\n cause: 'file_not_readable',\n message: `The file exists but is not readable. Fix corrupted state file: ${WALLET_FILE}`,\n });\n }\n }\n\n if (readFileResult.isOk()) {\n const data = readFileResult.value;\n const jsonParseResult = safeParseJson(walletSurface, data);\n\n // file exists but is not valid JSON\n if (jsonParseResult.isErr()) {\n return jsonErr(walletSurface, {\n cause: 'parse',\n message: `The data in ${WALLET_FILE} is not valid JSON`,\n });\n }\n\n const parseResult = safeParse(\n walletSurface,\n storedWalletSchema,\n jsonParseResult.value\n );\n\n // file has valid JSON but is not a valid wallet configuration\n if (parseResult.isErr()) {\n return parseResult;\n }\n\n const account = privateKeyToAccount(parseResult.value.privateKey);\n log.info(`Loaded wallet: ${account.address}`);\n const reconciled = await reconcileLegacyWallet(account, false);\n return ok(reconciled);\n }\n\n // Generate new\n const privateKey = generatePrivateKey();\n const account = privateKeyToAccount(privateKey);\n const stored = {\n privateKey,\n address: account.address,\n createdAt: new Date().toISOString(),\n };\n\n const saveResult = await safeWriteFile(\n walletSurface,\n WALLET_FILE,\n JSON.stringify(stored, null, 2)\n ).andThen(() => safeChmod(walletSurface, WALLET_FILE, 0o600));\n\n if (saveResult.isErr()) {\n return saveResult;\n }\n\n log.info(`Created wallet: ${account.address}`);\n log.info(`Saved to: ${WALLET_FILE}`);\n\n const reconciled = await reconcileLegacyWallet(account, true);\n return ok(reconciled);\n}\n","import { err, resultFromThrowable } from '@agentcash/neverthrow';\n\nimport type { BaseJsonError, JsonObject } from './types';\n\nconst type = 'json';\n\nexport const jsonErr = (surface: string, error: BaseJsonError) => {\n return err(type, surface, error);\n};\n\nexport const safeStringifyJson = (surface: string, value: JsonObject) => {\n return resultFromThrowable(\n type,\n surface,\n () => JSON.stringify(value, null, 2),\n () => ({\n cause: 'stringify' as const,\n message: 'Could not stringify JSON',\n })\n );\n};\n\n/**\n * Convert a value with optional properties into a clean JsonObject\n * by round-tripping through JSON serialization (strips `undefined` keys).\n */\nexport const toJsonObject = <T>(value: T): JsonObject =>\n JSON.parse(JSON.stringify(value)) as JsonObject;\n\nexport const safeParseJson = (surface: string, value: string) => {\n return resultFromThrowable(\n type,\n surface,\n () => JSON.parse(value) as JsonObject,\n e => ({\n cause: 'parse' as const,\n message: e instanceof Error ? e.message : 'Could not parse JSON',\n })\n );\n};\n","import z from 'zod';\n\nimport { safeFetchJson } from '@/shared/neverthrow/fetch';\nimport { err } from '@agentcash/neverthrow';\n\nimport { Origin } from './origins';\nimport { getState, setState } from './state';\n\nimport type { Address } from 'viem';\n\nexport interface RedeemInviteProps {\n code: string;\n address: Address;\n surface: string;\n}\n\nexport const redeemInviteCode = async ({\n code,\n address,\n surface,\n}: RedeemInviteProps) => {\n const state = getState();\n\n if (state.redeemedCodes?.includes(code)) {\n return err('user', surface, {\n cause: 'conflict',\n message: 'This invite code has already been redeemed',\n });\n }\n\n const result = await safeFetchJson(\n surface,\n new Request(`${Origin.X402Scan}/api/invite/redeem`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n code,\n recipientAddr: address,\n }),\n }),\n z.object({\n redemptionId: z.string(),\n txHash: z.string(),\n amount: z.coerce.number(),\n })\n );\n\n if (result.isOk()) {\n setState({\n redeemedCodes: [...(state.redeemedCodes ?? []), code],\n });\n }\n\n return result;\n};\n","/**\n * Known x402-protected API origins.\n * Using const enum so values are inlined at build time.\n */\nexport const enum Origin {\n StableEnrich = 'https://stableenrich.dev',\n StableSocial = 'https://stablesocial.dev',\n StableStudio = 'https://stablestudio.dev',\n StableUpload = 'https://stableupload.dev',\n StableEmail = 'https://stableemail.dev',\n X402Scan = 'https://x402scan.com',\n Shirt = 'https://shirt.sh',\n X402Puppet = 'https://x402puppet.com',\n X402Facilitator = 'https://x402facilitator.com',\n}\n\n/**\n * Array of all known origins for iteration.\n * Const enums are erased at compile time, so we need a regular array for runtime iteration.\n */\nexport const ORIGINS = [\n Origin.StableEnrich,\n Origin.StableSocial,\n Origin.StableStudio,\n Origin.StableUpload,\n Origin.StableEmail,\n Origin.X402Scan,\n Origin.Shirt,\n Origin.X402Puppet,\n] as const;\n","import z from 'zod';\nimport fs from 'fs';\n\nimport { configFile } from './fs';\n\nconst STATE_FILE = configFile('state.json');\n\nconst stateSchema = z\n .looseObject({\n redeemedCodes: z.array(z.string()),\n })\n .partial();\n\nexport const getState = () => {\n const stateFileExists = fs.existsSync(STATE_FILE);\n if (!stateFileExists) {\n fs.writeFileSync(STATE_FILE, '{}');\n return {};\n }\n\n const stateFileContent = fs.readFileSync(STATE_FILE, 'utf-8');\n const result = stateSchema.safeParse(JSON.parse(stateFileContent));\n if (!result.success) {\n return {};\n }\n return result.data;\n};\n\nexport const setState = (state: z.infer<typeof stateSchema>) => {\n const existing = getState();\n const newState = stateSchema.parse({ ...existing, ...state });\n fs.writeFileSync(STATE_FILE, JSON.stringify(newState, null, 2));\n};\n","import {\n base,\n baseSepolia,\n mainnet,\n sepolia,\n optimism,\n arbitrum,\n polygon,\n} from 'viem/chains';\n\nimport type { Chain } from 'viem';\n\nexport interface ChainConfig {\n chain: Chain;\n caip2: string;\n v1Name: string;\n usdcAddress: `0x${string}`;\n}\n\nconst CHAIN_CONFIGS: Record<string, ChainConfig> = {\n 'eip155:8453': {\n chain: base,\n caip2: 'eip155:8453',\n v1Name: 'base',\n usdcAddress: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',\n },\n 'eip155:84532': {\n chain: baseSepolia,\n caip2: 'eip155:84532',\n v1Name: 'base-sepolia',\n usdcAddress: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',\n },\n 'eip155:1': {\n chain: mainnet,\n caip2: 'eip155:1',\n v1Name: 'ethereum',\n usdcAddress: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n },\n 'eip155:11155111': {\n chain: sepolia,\n caip2: 'eip155:11155111',\n v1Name: 'ethereum-sepolia',\n usdcAddress: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238',\n },\n 'eip155:10': {\n chain: optimism,\n caip2: 'eip155:10',\n v1Name: 'optimism',\n usdcAddress: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85',\n },\n 'eip155:42161': {\n chain: arbitrum,\n caip2: 'eip155:42161',\n v1Name: 'arbitrum',\n usdcAddress: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',\n },\n 'eip155:137': {\n chain: polygon,\n caip2: 'eip155:137',\n v1Name: 'polygon',\n usdcAddress: '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359',\n },\n};\n\nconst V1_TO_CAIP2: Record<string, string> = {\n base: 'eip155:8453',\n 'base-sepolia': 'eip155:84532',\n ethereum: 'eip155:1',\n 'ethereum-sepolia': 'eip155:11155111',\n optimism: 'eip155:10',\n arbitrum: 'eip155:42161',\n polygon: 'eip155:137',\n};\n\nexport const DEFAULT_NETWORK = 'eip155:8453';\n\n/** Convert any network identifier to CAIP-2 format */\nexport function toCaip2(network: string): string {\n if (network.startsWith('eip155:')) return network;\n return V1_TO_CAIP2[network.toLowerCase()] ?? network;\n}\n\n/** Get chain config from network identifier */\nexport function getChainConfig(network: string): ChainConfig | undefined {\n return CHAIN_CONFIGS[toCaip2(network)];\n}\n\n/** Get USDC address for a network */\nexport function getUSDCAddress(network: string): `0x${string}` | undefined {\n return getChainConfig(network)?.usdcAddress;\n}\n\n/** Extract chain ID from CAIP-2 identifier */\nexport function getChainId(network: string): number | undefined {\n const caip2 = toCaip2(network);\n const match = /^eip155:(\\d+)$/.exec(caip2);\n return match ? parseInt(match[1]!, 10) : undefined;\n}\n\n/** Get human-readable chain name */\nexport function getChainName(network: string): string {\n return getChainConfig(network)?.chain.name ?? network;\n}\n\n/** Check if network is a testnet */\nexport function isTestnet(network: string): boolean {\n return getChainConfig(network)?.chain.testnet === true;\n}\n"],"mappings":"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","names":["account","reconciled","z","z","z","z"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getTempoBalance
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-6OZUZZIH.js";
|
|
4
4
|
import {
|
|
5
5
|
detectPaymentProtocols,
|
|
6
6
|
getSiwxExtension,
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
tokenStringToNumber,
|
|
12
12
|
x402Err,
|
|
13
13
|
x402Ok
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-TIP56JAT.js";
|
|
15
15
|
import {
|
|
16
16
|
getBalance
|
|
17
17
|
} from "./chunk-YUCA2PQT.js";
|
|
@@ -412,4 +412,4 @@ export {
|
|
|
412
412
|
createFetchWithPayment,
|
|
413
413
|
createFetchWithAuth
|
|
414
414
|
};
|
|
415
|
-
//# sourceMappingURL=chunk-
|
|
415
|
+
//# sourceMappingURL=chunk-P666EAQ2.js.map
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
DEFAULT_NETWORK,
|
|
3
3
|
getChainName,
|
|
4
4
|
redeemInviteCode
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-NQ5BLLN7.js";
|
|
6
6
|
import {
|
|
7
7
|
getDepositLink
|
|
8
8
|
} from "./chunk-YUCA2PQT.js";
|
|
@@ -81,7 +81,6 @@ var promptDeposit = async (props) => {
|
|
|
81
81
|
s.start("Redeeming invite code...");
|
|
82
82
|
const redeemResult = await redeemInviteCode({
|
|
83
83
|
code,
|
|
84
|
-
dev: flags.dev,
|
|
85
84
|
address,
|
|
86
85
|
surface: "redeemInvite"
|
|
87
86
|
});
|
|
@@ -111,4 +110,4 @@ export {
|
|
|
111
110
|
wait,
|
|
112
111
|
promptDeposit
|
|
113
112
|
};
|
|
114
|
-
//# sourceMappingURL=chunk-
|
|
113
|
+
//# sourceMappingURL=chunk-RFFZRGKI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cli/lib/deposit.ts","../../src/cli/lib/wait.ts"],"sourcesContent":["import chalk from 'chalk';\nimport { select, text, log, spinner } from '@clack/prompts';\nimport open from 'open';\n\nimport { DEFAULT_NETWORK, getChainName } from '../../shared/networks';\nimport { wait } from './wait';\nimport { getDepositLink } from '../../shared/utils';\nimport { redeemInviteCode } from '../../shared/redeem-invite';\n\nimport type { GlobalFlags } from '@/types';\nimport type { Address } from 'viem';\n\ninterface PromptDepositProps {\n address: Address;\n flags: GlobalFlags;\n surface: string;\n}\n\nexport const promptDeposit = async (\n props: PromptDepositProps\n): Promise<void> => {\n const { address, flags, surface } = props;\n\n const depositLink = getDepositLink(address, flags);\n\n const depositChoice =\n flags.yes || surface === 'guided'\n ? 'manual'\n : await select({\n message: chalk.bold('How would you like to deposit?'),\n initialValue: 'guided' as string | undefined,\n options: [\n {\n label: 'Guided - Recommended',\n value: 'guided',\n hint: 'Online portal in agentcash',\n },\n {\n label: 'Manual',\n value: 'manual',\n hint: 'Print deposit instructions',\n },\n {\n label: 'Redeem Invite Code',\n value: 'invite',\n hint: 'Enter an invite code for starter money',\n },\n {\n label: 'Skip',\n value: undefined,\n hint: 'Skip deposit process - functionality limited',\n },\n ],\n });\n\n if (depositChoice === 'guided') {\n await wait({\n startText: 'Opening deposit page...',\n stopText: `Opening ${chalk.underline.hex('#2563eb')(depositLink)}`,\n ms: 1000,\n });\n\n await open(depositLink);\n } else if (depositChoice === 'manual') {\n log.step(chalk.bold('Account Information'));\n\n log.message(`Address: ${address}`);\n log.message(`Network: ${getChainName(DEFAULT_NETWORK)}`);\n\n log.step(chalk.bold('Online Portal'));\n log.message(`${chalk.underline(depositLink)}`);\n } else if (depositChoice === 'invite') {\n const code = await text({\n message: 'Enter your invite code',\n placeholder: 'MRT-XXXXX',\n validate: value => {\n if (!value || value.trim().length === 0) {\n return 'Please enter an invite code';\n }\n },\n });\n\n if (typeof code !== 'string') {\n return promptDeposit({ address, flags, surface });\n }\n\n const s = spinner();\n s.start('Redeeming invite code...');\n\n const redeemResult = await redeemInviteCode({\n code,\n address,\n surface: 'redeemInvite',\n });\n\n if (redeemResult.isErr()) {\n s.stop('Invite code redemption failed');\n log.error('Failed to redeem invite code');\n return promptDeposit({ address, flags, surface });\n }\n\n s.stop('Invite code redeemed successfully!');\n\n const { amount, txHash } = redeemResult.value;\n\n await wait({\n startText: 'Processing...',\n stopText: chalk.green(\n `${chalk.bold(amount)} USDC has been sent to your wallet!`\n ),\n ms: 1500,\n });\n\n log.success(chalk.bold(`Your wallet has been funded with ${amount} USDC`));\n\n if (txHash) {\n log.info(chalk.dim(`Transaction: https://basescan.org/tx/${txHash}`));\n }\n\n return;\n }\n};\n","import { spinner } from '@clack/prompts';\n\ninterface WaitProps {\n startText: string;\n stopText: string;\n ms: number;\n}\n\nexport const wait = async ({ startText, stopText, ms }: WaitProps) => {\n const { start: startSpinner, stop: stopSpinner } = spinner();\n startSpinner(startText);\n await new Promise(resolve => setTimeout(resolve, ms));\n stopSpinner(stopText);\n};\n"],"mappings":";;;;;;;;;;AAAA,OAAO,WAAW;AAClB,SAAS,QAAQ,MAAM,KAAK,WAAAA,gBAAe;AAC3C,OAAO,UAAU;;;ACFjB,SAAS,eAAe;AAQjB,IAAM,OAAO,OAAO,EAAE,WAAW,UAAU,GAAG,MAAiB;AACpE,QAAM,EAAE,OAAO,cAAc,MAAM,YAAY,IAAI,QAAQ;AAC3D,eAAa,SAAS;AACtB,QAAM,IAAI,QAAQ,aAAW,WAAW,SAAS,EAAE,CAAC;AACpD,cAAY,QAAQ;AACtB;;;ADKO,IAAM,gBAAgB,OAC3B,UACkB;AAClB,QAAM,EAAE,SAAS,OAAO,QAAQ,IAAI;AAEpC,QAAM,cAAc,eAAe,SAAS,KAAK;AAEjD,QAAM,gBACJ,MAAM,OAAO,YAAY,WACrB,WACA,MAAM,OAAO;AAAA,IACX,SAAS,MAAM,KAAK,gCAAgC;AAAA,IACpD,cAAc;AAAA,IACd,SAAS;AAAA,MACP;AAAA,QACE,OAAO;AAAA,QACP,OAAO;AAAA,QACP,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,OAAO;AAAA,QACP,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,OAAO;AAAA,QACP,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,OAAO;AAAA,QACP,MAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF,CAAC;AAEP,MAAI,kBAAkB,UAAU;AAC9B,UAAM,KAAK;AAAA,MACT,WAAW;AAAA,MACX,UAAU,WAAW,MAAM,UAAU,IAAI,SAAS,EAAE,WAAW,CAAC;AAAA,MAChE,IAAI;AAAA,IACN,CAAC;AAED,UAAM,KAAK,WAAW;AAAA,EACxB,WAAW,kBAAkB,UAAU;AACrC,QAAI,KAAK,MAAM,KAAK,qBAAqB,CAAC;AAE1C,QAAI,QAAQ,YAAY,OAAO,EAAE;AACjC,QAAI,QAAQ,YAAY,aAAa,eAAe,CAAC,EAAE;AAEvD,QAAI,KAAK,MAAM,KAAK,eAAe,CAAC;AACpC,QAAI,QAAQ,GAAG,MAAM,UAAU,WAAW,CAAC,EAAE;AAAA,EAC/C,WAAW,kBAAkB,UAAU;AACrC,UAAM,OAAO,MAAM,KAAK;AAAA,MACtB,SAAS;AAAA,MACT,aAAa;AAAA,MACb,UAAU,WAAS;AACjB,YAAI,CAAC,SAAS,MAAM,KAAK,EAAE,WAAW,GAAG;AACvC,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF,CAAC;AAED,QAAI,OAAO,SAAS,UAAU;AAC5B,aAAO,cAAc,EAAE,SAAS,OAAO,QAAQ,CAAC;AAAA,IAClD;AAEA,UAAM,IAAIC,SAAQ;AAClB,MAAE,MAAM,0BAA0B;AAElC,UAAM,eAAe,MAAM,iBAAiB;AAAA,MAC1C;AAAA,MACA;AAAA,MACA,SAAS;AAAA,IACX,CAAC;AAED,QAAI,aAAa,MAAM,GAAG;AACxB,QAAE,KAAK,+BAA+B;AACtC,UAAI,MAAM,8BAA8B;AACxC,aAAO,cAAc,EAAE,SAAS,OAAO,QAAQ,CAAC;AAAA,IAClD;AAEA,MAAE,KAAK,oCAAoC;AAE3C,UAAM,EAAE,QAAQ,OAAO,IAAI,aAAa;AAExC,UAAM,KAAK;AAAA,MACT,WAAW;AAAA,MACX,UAAU,MAAM;AAAA,QACd,GAAG,MAAM,KAAK,MAAM,CAAC;AAAA,MACvB;AAAA,MACA,IAAI;AAAA,IACN,CAAC;AAED,QAAI,QAAQ,MAAM,KAAK,oCAAoC,MAAM,OAAO,CAAC;AAEzE,QAAI,QAAQ;AACV,UAAI,KAAK,MAAM,IAAI,wCAAwC,MAAM,EAAE,CAAC;AAAA,IACtE;AAEA;AAAA,EACF;AACF;","names":["spinner","spinner"]}
|
|
@@ -32,7 +32,15 @@ async function registerOrigin(surface, input, dev) {
|
|
|
32
32
|
return ok(result.value);
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
+
// src/lib.ts
|
|
36
|
+
async function registerOrigin2(surface, input, dev) {
|
|
37
|
+
const result = await registerOrigin(surface, input, dev);
|
|
38
|
+
if (result.isErr()) throw new Error(result.error.message);
|
|
39
|
+
return result.value;
|
|
40
|
+
}
|
|
41
|
+
|
|
35
42
|
export {
|
|
36
|
-
registerOrigin
|
|
43
|
+
registerOrigin,
|
|
44
|
+
registerOrigin2
|
|
37
45
|
};
|
|
38
|
-
//# sourceMappingURL=chunk-
|
|
46
|
+
//# sourceMappingURL=chunk-SDQV56RE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/shared/operations/register.ts","../../src/lib.ts"],"sourcesContent":["import { z } from 'zod';\nimport { ok } from '@agentcash/neverthrow';\n\nimport { safeFetchJson } from '@/shared/neverthrow/fetch';\n\nconst AGENTCASH_BASE_URL = 'https://agentcash.dev';\nconst AGENTCASH_DEV_URL = 'http://localhost:3000';\n\nconst getRegisterUrl = (dev: boolean) =>\n `${dev ? AGENTCASH_DEV_URL : AGENTCASH_BASE_URL}/api/register`;\n\n/**\n * Input for registering an origin with agentcash.\n */\nexport interface RegisterInput {\n url: string;\n}\n\n/**\n * Result returned from a successful registration.\n */\nexport interface RegisterResult {\n origin: {\n id: string;\n origin: string;\n name: string;\n };\n resourceCount: number;\n}\n\nconst registerResponseSchema = z.object({\n origin: z.object({\n id: z.string(),\n origin: z.string(),\n name: z.string(),\n }),\n resourceCount: z.number(),\n});\n\n/**\n * Register an origin with agentcash by POSTing to agentcash.dev/api/register.\n */\nexport async function registerOrigin(\n surface: string,\n input: RegisterInput,\n dev: boolean\n) {\n const result = await safeFetchJson(\n surface,\n new Request(getRegisterUrl(dev), {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ url: input.url }),\n }),\n registerResponseSchema\n );\n\n if (result.isErr()) {\n return result;\n }\n\n return ok<RegisterResult>(result.value);\n}\n","/**\n * Library entry point for programmatic use (e.g. importing into a Next.js app).\n * The CLI entry point is src/index.ts (used by the `bin` field).\n *\n * All exports return plain types (no Result<> from neverthrow) to avoid\n * leaking internal @agentcash/neverthrow/types into published .d.ts files.\n *\n * IMPORTANT: Import directly from the individual operation modules — NOT\n * the operations barrel — so that CLI-only modules (wallet-info, report-error)\n * and their transitive filesystem dependencies are never pulled into the\n * bundle for Next.js / serverless consumers.\n */\nexport {\n discoverResources,\n type DiscoveryResult,\n type DiscoverFailure,\n type OpenApiInfo,\n} from '@/shared/operations/discover';\n\nexport {\n checkEndpoint,\n type CheckEndpointOptions,\n type CheckEndpointResult,\n type ProbeMethodResult,\n type PaymentOption,\n type MppPaymentOption,\n type X402PaymentOption,\n type SupportedMethod,\n SUPPORTED_METHODS,\n} from '@/shared/operations/check-endpoint';\n\nimport { registerOrigin as _registerOrigin } from '@/shared/operations/register';\nexport type {\n RegisterInput,\n RegisterResult,\n} from '@/shared/operations/register';\n\nexport async function registerOrigin(\n surface: string,\n input: { url: string },\n dev: boolean\n) {\n const result = await _registerOrigin(surface, input, dev);\n if (result.isErr()) throw new Error(result.error.message);\n return result.value;\n}\n"],"mappings":";;;;;;AAAA,SAAS,SAAS;AAKlB,IAAM,qBAAqB;AAC3B,IAAM,oBAAoB;AAE1B,IAAM,iBAAiB,CAAC,QACtB,GAAG,MAAM,oBAAoB,kBAAkB;AAqBjD,IAAM,yBAAyB,EAAE,OAAO;AAAA,EACtC,QAAQ,EAAE,OAAO;AAAA,IACf,IAAI,EAAE,OAAO;AAAA,IACb,QAAQ,EAAE,OAAO;AAAA,IACjB,MAAM,EAAE,OAAO;AAAA,EACjB,CAAC;AAAA,EACD,eAAe,EAAE,OAAO;AAC1B,CAAC;AAKD,eAAsB,eACpB,SACA,OACA,KACA;AACA,QAAM,SAAS,MAAM;AAAA,IACnB;AAAA,IACA,IAAI,QAAQ,eAAe,GAAG,GAAG;AAAA,MAC/B,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM,KAAK,UAAU,EAAE,KAAK,MAAM,IAAI,CAAC;AAAA,IACzC,CAAC;AAAA,IACD;AAAA,EACF;AAEA,MAAI,OAAO,MAAM,GAAG;AAClB,WAAO;AAAA,EACT;AAEA,SAAO,GAAmB,OAAO,KAAK;AACxC;;;ACzBA,eAAsBA,gBACpB,SACA,OACA,KACA;AACA,QAAM,SAAS,MAAM,eAAgB,SAAS,OAAO,GAAG;AACxD,MAAI,OAAO,MAAM,EAAG,OAAM,IAAI,MAAM,OAAO,MAAM,OAAO;AACxD,SAAO,OAAO;AAChB;","names":["registerOrigin"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
isMppEnabled
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-33JE5MUU.js";
|
|
4
4
|
import {
|
|
5
5
|
DEFAULT_FETCH_TIMEOUT,
|
|
6
6
|
err,
|
|
@@ -633,6 +633,9 @@ async function fetchLlmsTxt(surface, origin) {
|
|
|
633
633
|
return parseResult.value.data;
|
|
634
634
|
}
|
|
635
635
|
async function discoverResources(surface, url) {
|
|
636
|
+
if (!/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(url)) {
|
|
637
|
+
url = `https://${url}`;
|
|
638
|
+
}
|
|
636
639
|
const origin = URL.canParse(url) ? new URL(url).origin : url;
|
|
637
640
|
log.info(`Discovering resources for origin: ${origin}`);
|
|
638
641
|
const [specResult, instructions] = await Promise.all([
|
|
@@ -661,6 +664,7 @@ async function discoverResources(surface, url) {
|
|
|
661
664
|
...typeof rawInfo.description === "string" ? { description: rawInfo.description } : {}
|
|
662
665
|
} : void 0;
|
|
663
666
|
return {
|
|
667
|
+
found: true,
|
|
664
668
|
origin,
|
|
665
669
|
source: "openapi",
|
|
666
670
|
...info ? { info } : {},
|
|
@@ -691,4 +695,4 @@ export {
|
|
|
691
695
|
checkEndpoint,
|
|
692
696
|
discoverResources
|
|
693
697
|
};
|
|
694
|
-
//# sourceMappingURL=chunk-
|
|
698
|
+
//# sourceMappingURL=chunk-TIP56JAT.js.map
|