@heyamiko/amiko-cli 0.6.2 → 0.6.4
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/index.js +154 -6
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -75932,7 +75932,7 @@ function registerSearchCommand(program2) {
|
|
|
75932
75932
|
// src/commands/image.ts
|
|
75933
75933
|
var TREASURY2 = "FPiZAf3jEnNfCwfvbv46jdPfHbmSepD4Q6iHiLJDQXvb";
|
|
75934
75934
|
function registerImageCommand(program2) {
|
|
75935
|
-
program2.command("image <prompt>").alias("img").description("Generate an image with DALL-E — costs
|
|
75935
|
+
program2.command("image <prompt>").alias("img").description("Generate an image with DALL-E — costs 5 AMIKO").option("--size <size>", "Image size: 1024x1024, 1024x1792, 1792x1024", "1024x1024").option("--quality <q>", "Quality: standard or hd", "standard").option("--model <model>", "Model: dall-e-3 or dall-e-2", "dall-e-3").option("--raw", "Output raw JSON").action(async (prompt2, opts) => {
|
|
75936
75936
|
const spinner = ora("Generating image...").start();
|
|
75937
75937
|
try {
|
|
75938
75938
|
const config2 = loadConfig();
|
|
@@ -75952,7 +75952,7 @@ function registerImageCommand(program2) {
|
|
|
75952
75952
|
console.error(error("No Solana wallet for AMIKO payment."));
|
|
75953
75953
|
process.exit(1);
|
|
75954
75954
|
}
|
|
75955
|
-
spinner.text = "Paying
|
|
75955
|
+
spinner.text = "Paying 5 AMIKO...";
|
|
75956
75956
|
const transferRes = await fetch(`${billingBase2}/api/crossmint/wallets/${encodeURIComponent(solanaWallet)}/transfer`, {
|
|
75957
75957
|
method: "POST",
|
|
75958
75958
|
headers: {
|
|
@@ -75961,7 +75961,7 @@ function registerImageCommand(program2) {
|
|
|
75961
75961
|
},
|
|
75962
75962
|
body: JSON.stringify({
|
|
75963
75963
|
to: TREASURY2,
|
|
75964
|
-
amount: "
|
|
75964
|
+
amount: "5",
|
|
75965
75965
|
token: "AMIKO",
|
|
75966
75966
|
chain: "solana"
|
|
75967
75967
|
})
|
|
@@ -76021,7 +76021,7 @@ function registerImageCommand(program2) {
|
|
|
76021
76021
|
}
|
|
76022
76022
|
}
|
|
76023
76023
|
console.log("");
|
|
76024
|
-
console.log(success("Paid
|
|
76024
|
+
console.log(success("Paid 5 AMIKO") + dim(` tx: ${txHash.slice(0, 16)}...`));
|
|
76025
76025
|
} catch (err) {
|
|
76026
76026
|
spinner.stop();
|
|
76027
76027
|
console.error(error(err instanceof Error ? err.message : "Image generation failed"));
|
|
@@ -76030,8 +76030,155 @@ function registerImageCommand(program2) {
|
|
|
76030
76030
|
});
|
|
76031
76031
|
}
|
|
76032
76032
|
|
|
76033
|
-
// src/commands/
|
|
76033
|
+
// src/commands/amazon.ts
|
|
76034
76034
|
var TREASURY3 = "FPiZAf3jEnNfCwfvbv46jdPfHbmSepD4Q6iHiLJDQXvb";
|
|
76035
|
+
async function payAmiko(billingBase2, billingToken, solanaWallet, amount2) {
|
|
76036
|
+
const res = await fetch(`${billingBase2}/api/crossmint/wallets/${encodeURIComponent(solanaWallet)}/transfer`, {
|
|
76037
|
+
method: "POST",
|
|
76038
|
+
headers: {
|
|
76039
|
+
"Content-Type": "application/json",
|
|
76040
|
+
Authorization: `Bearer ${billingToken}`
|
|
76041
|
+
},
|
|
76042
|
+
body: JSON.stringify({ to: TREASURY3, amount: amount2, token: "AMIKO", chain: "solana" })
|
|
76043
|
+
});
|
|
76044
|
+
if (!res.ok) {
|
|
76045
|
+
const err = await res.json().catch(() => ({ error: "Transfer failed" }));
|
|
76046
|
+
throw new Error(err.error || `Payment failed: ${res.status}`);
|
|
76047
|
+
}
|
|
76048
|
+
const data = await res.json();
|
|
76049
|
+
if (!data.txHash)
|
|
76050
|
+
throw new Error("No tx hash returned.");
|
|
76051
|
+
return data.txHash;
|
|
76052
|
+
}
|
|
76053
|
+
function registerAmazonCommand(program2) {
|
|
76054
|
+
const cmd = program2.command("amazon").description("Search and buy products on Amazon — paid with AMIKO");
|
|
76055
|
+
cmd.command("search <query>").description("Search Amazon products — 1 AMIKO").option("--limit <n>", "Number of results", "5").option("--raw", "Output raw JSON").action(async (query, opts) => {
|
|
76056
|
+
const spinner = ora("Searching Amazon...").start();
|
|
76057
|
+
try {
|
|
76058
|
+
const config2 = loadConfig();
|
|
76059
|
+
const auth = resolveAuth(config2);
|
|
76060
|
+
const mppBase2 = (config2.apiBase || "https://mpp.amikomarkets.com").replace(/\/$/, "");
|
|
76061
|
+
const billingBase2 = auth.billingBase || "https://billing.heyamiko.com";
|
|
76062
|
+
const billingToken = auth.platformKey || auth.twinToken || auth.privyToken;
|
|
76063
|
+
if (!billingToken) {
|
|
76064
|
+
spinner.stop();
|
|
76065
|
+
console.error(error("Not connected."));
|
|
76066
|
+
process.exit(1);
|
|
76067
|
+
}
|
|
76068
|
+
const allWallets = auth.agentWallets || config2.agentWallets || [];
|
|
76069
|
+
const solanaWallet = allWallets.find((w5) => w5.chain === "solana")?.address;
|
|
76070
|
+
if (!solanaWallet) {
|
|
76071
|
+
spinner.stop();
|
|
76072
|
+
console.error(error("No Solana wallet."));
|
|
76073
|
+
process.exit(1);
|
|
76074
|
+
}
|
|
76075
|
+
spinner.text = "Paying 1 AMIKO...";
|
|
76076
|
+
const txHash = await payAmiko(billingBase2, billingToken, solanaWallet, "1");
|
|
76077
|
+
spinner.text = "Searching Amazon...";
|
|
76078
|
+
const params = new URLSearchParams({
|
|
76079
|
+
q: `site:amazon.com ${query}`
|
|
76080
|
+
});
|
|
76081
|
+
const res = await fetch(`${mppBase2}/v1/search/google_shopping?${params}`, {
|
|
76082
|
+
headers: { "X-Payment-Tx": txHash }
|
|
76083
|
+
});
|
|
76084
|
+
spinner.stop();
|
|
76085
|
+
if (!res.ok) {
|
|
76086
|
+
const text = await res.text().catch(() => "");
|
|
76087
|
+
console.error(error(`Search failed: ${res.status} ${text.slice(0, 200)}`));
|
|
76088
|
+
process.exit(1);
|
|
76089
|
+
}
|
|
76090
|
+
const data = await res.json();
|
|
76091
|
+
if (opts.raw) {
|
|
76092
|
+
console.log(JSON.stringify(data, null, 2));
|
|
76093
|
+
return;
|
|
76094
|
+
}
|
|
76095
|
+
console.log(heading(`Amazon: "${query}"
|
|
76096
|
+
`));
|
|
76097
|
+
const results = data.shopping_results || data.organic_results || [];
|
|
76098
|
+
const limit = parseInt(opts.limit) || 5;
|
|
76099
|
+
for (const item of results.slice(0, limit)) {
|
|
76100
|
+
const title = item.title || "Unknown";
|
|
76101
|
+
const price = item.price || item.extracted_price || "";
|
|
76102
|
+
const link = item.link || item.product_link || "";
|
|
76103
|
+
const asin = link.match(/\/dp\/([A-Z0-9]{10})/)?.[1] || "";
|
|
76104
|
+
console.log(` ${source_default.cyan(title)}`);
|
|
76105
|
+
if (price)
|
|
76106
|
+
console.log(` ${source_default.yellow(typeof price === "string" ? price : `$${price}`)}`);
|
|
76107
|
+
if (asin)
|
|
76108
|
+
console.log(dim(` ASIN: ${asin}`));
|
|
76109
|
+
if (link)
|
|
76110
|
+
console.log(dim(` ${link.slice(0, 80)}`));
|
|
76111
|
+
console.log("");
|
|
76112
|
+
}
|
|
76113
|
+
if (results.length === 0) {
|
|
76114
|
+
console.log(dim(" No results found."));
|
|
76115
|
+
}
|
|
76116
|
+
console.log(success("Paid 1 AMIKO") + dim(` tx: ${txHash.slice(0, 16)}...`));
|
|
76117
|
+
} catch (err) {
|
|
76118
|
+
spinner.stop();
|
|
76119
|
+
console.error(error(err instanceof Error ? err.message : "Search failed"));
|
|
76120
|
+
process.exit(1);
|
|
76121
|
+
}
|
|
76122
|
+
});
|
|
76123
|
+
cmd.command("quote <product>").description("Get price quote for an Amazon product (ASIN or URL) — free").option("--raw", "Output raw JSON").action(async (product, opts) => {
|
|
76124
|
+
const spinner = ora("Getting quote...").start();
|
|
76125
|
+
try {
|
|
76126
|
+
const config2 = loadConfig();
|
|
76127
|
+
const auth = resolveAuth(config2);
|
|
76128
|
+
const mppBase2 = (config2.apiBase || "https://mpp.amikomarkets.com").replace(/\/$/, "");
|
|
76129
|
+
const res = await fetch(`${mppBase2}/v1/amazon/quote`, {
|
|
76130
|
+
method: "POST",
|
|
76131
|
+
headers: { "Content-Type": "application/json" },
|
|
76132
|
+
body: JSON.stringify({
|
|
76133
|
+
items: [{ product, quantity: 1 }],
|
|
76134
|
+
recipient: {
|
|
76135
|
+
email: "quote@heyamiko.com",
|
|
76136
|
+
address: {
|
|
76137
|
+
name: "Quote",
|
|
76138
|
+
line1: "123 Main St",
|
|
76139
|
+
city: "New York",
|
|
76140
|
+
state: "NY",
|
|
76141
|
+
postalCode: "10001",
|
|
76142
|
+
country: "US"
|
|
76143
|
+
}
|
|
76144
|
+
}
|
|
76145
|
+
})
|
|
76146
|
+
});
|
|
76147
|
+
spinner.stop();
|
|
76148
|
+
if (!res.ok) {
|
|
76149
|
+
const text = await res.text().catch(() => "");
|
|
76150
|
+
console.error(error(`Quote failed: ${res.status} ${text.slice(0, 300)}`));
|
|
76151
|
+
process.exit(1);
|
|
76152
|
+
}
|
|
76153
|
+
const data = await res.json();
|
|
76154
|
+
if (opts.raw) {
|
|
76155
|
+
console.log(JSON.stringify(data, null, 2));
|
|
76156
|
+
return;
|
|
76157
|
+
}
|
|
76158
|
+
console.log(heading(`Amazon Quote
|
|
76159
|
+
`));
|
|
76160
|
+
if (data.total)
|
|
76161
|
+
console.log(label("Total", `$${data.total}`));
|
|
76162
|
+
if (data.product)
|
|
76163
|
+
console.log(label("Product", `$${data.product}`));
|
|
76164
|
+
if (data.margin)
|
|
76165
|
+
console.log(label("Fee (5%)", `$${data.margin}`));
|
|
76166
|
+
if (data.orderId)
|
|
76167
|
+
console.log(label("Order ID", dim(data.orderId)));
|
|
76168
|
+
const items = data.items || [];
|
|
76169
|
+
for (const item of items) {
|
|
76170
|
+
console.log(label("Item", `${item.product} x${item.quantity} — $${item.unitPrice || "?"}`));
|
|
76171
|
+
}
|
|
76172
|
+
} catch (err) {
|
|
76173
|
+
spinner.stop();
|
|
76174
|
+
console.error(error(err instanceof Error ? err.message : "Quote failed"));
|
|
76175
|
+
process.exit(1);
|
|
76176
|
+
}
|
|
76177
|
+
});
|
|
76178
|
+
}
|
|
76179
|
+
|
|
76180
|
+
// src/commands/services.ts
|
|
76181
|
+
var TREASURY4 = "FPiZAf3jEnNfCwfvbv46jdPfHbmSepD4Q6iHiLJDQXvb";
|
|
76035
76182
|
var AMIKO_MINT = "AY1Ww6MxwC3cCiyrandHqLrp4FXvzgcwQTZpJ2FEpump";
|
|
76036
76183
|
var USDC_MINT = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v";
|
|
76037
76184
|
async function getAmikoPrice() {
|
|
@@ -76080,7 +76227,7 @@ async function payAndCall(mppBase2, method, path, billingBase2, billingToken, so
|
|
|
76080
76227
|
Authorization: `Bearer ${billingToken}`
|
|
76081
76228
|
},
|
|
76082
76229
|
body: JSON.stringify({
|
|
76083
|
-
to:
|
|
76230
|
+
to: TREASURY4,
|
|
76084
76231
|
amount: amount2,
|
|
76085
76232
|
token,
|
|
76086
76233
|
chain: "solana"
|
|
@@ -76266,6 +76413,7 @@ registerConnectCommand(program2);
|
|
|
76266
76413
|
registerCreditsCommand(program2);
|
|
76267
76414
|
registerSearchCommand(program2);
|
|
76268
76415
|
registerImageCommand(program2);
|
|
76416
|
+
registerAmazonCommand(program2);
|
|
76269
76417
|
registerSwapCommand(program2);
|
|
76270
76418
|
registerBridgeCommand(program2);
|
|
76271
76419
|
registerBrowseCommand(program2);
|