@proxygate/cli 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 +17 -0
- package/README.md +311 -0
- package/dist/commands/apis.d.ts +3 -0
- package/dist/commands/apis.d.ts.map +1 -0
- package/dist/commands/apis.js +68 -0
- package/dist/commands/apis.js.map +1 -0
- package/dist/commands/apis.test.d.ts +2 -0
- package/dist/commands/apis.test.d.ts.map +1 -0
- package/dist/commands/apis.test.js +103 -0
- package/dist/commands/apis.test.js.map +1 -0
- package/dist/commands/balance.d.ts +9 -0
- package/dist/commands/balance.d.ts.map +1 -0
- package/dist/commands/balance.js +50 -0
- package/dist/commands/balance.js.map +1 -0
- package/dist/commands/balance.test.d.ts +2 -0
- package/dist/commands/balance.test.d.ts.map +1 -0
- package/dist/commands/balance.test.js +106 -0
- package/dist/commands/balance.test.js.map +1 -0
- package/dist/commands/categories.d.ts +3 -0
- package/dist/commands/categories.d.ts.map +1 -0
- package/dist/commands/categories.js +45 -0
- package/dist/commands/categories.js.map +1 -0
- package/dist/commands/categories.test.d.ts +2 -0
- package/dist/commands/categories.test.d.ts.map +1 -0
- package/dist/commands/categories.test.js +84 -0
- package/dist/commands/categories.test.js.map +1 -0
- package/dist/commands/create.d.ts +3 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +136 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/create.test.d.ts +2 -0
- package/dist/commands/create.test.d.ts.map +1 -0
- package/dist/commands/create.test.js +95 -0
- package/dist/commands/create.test.js.map +1 -0
- package/dist/commands/deposit.d.ts +9 -0
- package/dist/commands/deposit.d.ts.map +1 -0
- package/dist/commands/deposit.js +78 -0
- package/dist/commands/deposit.js.map +1 -0
- package/dist/commands/deposit.test.d.ts +2 -0
- package/dist/commands/deposit.test.d.ts.map +1 -0
- package/dist/commands/deposit.test.js +93 -0
- package/dist/commands/deposit.test.js.map +1 -0
- package/dist/commands/dev.d.ts +3 -0
- package/dist/commands/dev.d.ts.map +1 -0
- package/dist/commands/dev.js +188 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/dev.test.d.ts +2 -0
- package/dist/commands/dev.test.d.ts.map +1 -0
- package/dist/commands/dev.test.js +89 -0
- package/dist/commands/dev.test.js.map +1 -0
- package/dist/commands/getting-started-steps.d.ts +12 -0
- package/dist/commands/getting-started-steps.d.ts.map +1 -0
- package/dist/commands/getting-started-steps.js +163 -0
- package/dist/commands/getting-started-steps.js.map +1 -0
- package/dist/commands/getting-started.d.ts +9 -0
- package/dist/commands/getting-started.d.ts.map +1 -0
- package/dist/commands/getting-started.js +44 -0
- package/dist/commands/getting-started.js.map +1 -0
- package/dist/commands/init.d.ts +9 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +74 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/init.test.d.ts +2 -0
- package/dist/commands/init.test.d.ts.map +1 -0
- package/dist/commands/init.test.js +115 -0
- package/dist/commands/init.test.js.map +1 -0
- package/dist/commands/jobs.d.ts +11 -0
- package/dist/commands/jobs.d.ts.map +1 -0
- package/dist/commands/jobs.js +370 -0
- package/dist/commands/jobs.js.map +1 -0
- package/dist/commands/listings/create.d.ts +4 -0
- package/dist/commands/listings/create.d.ts.map +1 -0
- package/dist/commands/listings/create.js +133 -0
- package/dist/commands/listings/create.js.map +1 -0
- package/dist/commands/listings/delete.d.ts +4 -0
- package/dist/commands/listings/delete.d.ts.map +1 -0
- package/dist/commands/listings/delete.js +32 -0
- package/dist/commands/listings/delete.js.map +1 -0
- package/dist/commands/listings/docs.d.ts +4 -0
- package/dist/commands/listings/docs.d.ts.map +1 -0
- package/dist/commands/listings/docs.js +48 -0
- package/dist/commands/listings/docs.js.map +1 -0
- package/dist/commands/listings/headers.d.ts +4 -0
- package/dist/commands/listings/headers.d.ts.map +1 -0
- package/dist/commands/listings/headers.js +78 -0
- package/dist/commands/listings/headers.js.map +1 -0
- package/dist/commands/listings/helpers.d.ts +10 -0
- package/dist/commands/listings/helpers.d.ts.map +1 -0
- package/dist/commands/listings/helpers.js +64 -0
- package/dist/commands/listings/helpers.js.map +1 -0
- package/dist/commands/listings/index.d.ts +11 -0
- package/dist/commands/listings/index.d.ts.map +1 -0
- package/dist/commands/listings/index.js +46 -0
- package/dist/commands/listings/index.js.map +1 -0
- package/dist/commands/listings/list.d.ts +4 -0
- package/dist/commands/listings/list.d.ts.map +1 -0
- package/dist/commands/listings/list.js +42 -0
- package/dist/commands/listings/list.js.map +1 -0
- package/dist/commands/listings/pause-unpause.d.ts +6 -0
- package/dist/commands/listings/pause-unpause.d.ts.map +1 -0
- package/dist/commands/listings/pause-unpause.js +37 -0
- package/dist/commands/listings/pause-unpause.js.map +1 -0
- package/dist/commands/listings/rotate-key.d.ts +4 -0
- package/dist/commands/listings/rotate-key.d.ts.map +1 -0
- package/dist/commands/listings/rotate-key.js +62 -0
- package/dist/commands/listings/rotate-key.js.map +1 -0
- package/dist/commands/listings/update.d.ts +4 -0
- package/dist/commands/listings/update.d.ts.map +1 -0
- package/dist/commands/listings/update.js +57 -0
- package/dist/commands/listings/update.js.map +1 -0
- package/dist/commands/listings.d.ts +2 -0
- package/dist/commands/listings.d.ts.map +1 -0
- package/dist/commands/listings.js +3 -0
- package/dist/commands/listings.js.map +1 -0
- package/dist/commands/listings.test.d.ts +2 -0
- package/dist/commands/listings.test.d.ts.map +1 -0
- package/dist/commands/listings.test.js +166 -0
- package/dist/commands/listings.test.js.map +1 -0
- package/dist/commands/pricing.d.ts +9 -0
- package/dist/commands/pricing.d.ts.map +1 -0
- package/dist/commands/pricing.js +67 -0
- package/dist/commands/pricing.js.map +1 -0
- package/dist/commands/pricing.test.d.ts +2 -0
- package/dist/commands/pricing.test.d.ts.map +1 -0
- package/dist/commands/pricing.test.js +87 -0
- package/dist/commands/pricing.test.js.map +1 -0
- package/dist/commands/proxy.d.ts +14 -0
- package/dist/commands/proxy.d.ts.map +1 -0
- package/dist/commands/proxy.js +138 -0
- package/dist/commands/proxy.js.map +1 -0
- package/dist/commands/proxy.test.d.ts +2 -0
- package/dist/commands/proxy.test.d.ts.map +1 -0
- package/dist/commands/proxy.test.js +235 -0
- package/dist/commands/proxy.test.js.map +1 -0
- package/dist/commands/rate.d.ts +3 -0
- package/dist/commands/rate.d.ts.map +1 -0
- package/dist/commands/rate.js +46 -0
- package/dist/commands/rate.js.map +1 -0
- package/dist/commands/rate.test.d.ts +2 -0
- package/dist/commands/rate.test.d.ts.map +1 -0
- package/dist/commands/rate.test.js +74 -0
- package/dist/commands/rate.test.js.map +1 -0
- package/dist/commands/services.d.ts +3 -0
- package/dist/commands/services.d.ts.map +1 -0
- package/dist/commands/services.js +48 -0
- package/dist/commands/services.js.map +1 -0
- package/dist/commands/services.test.d.ts +2 -0
- package/dist/commands/services.test.d.ts.map +1 -0
- package/dist/commands/services.test.js +87 -0
- package/dist/commands/services.test.js.map +1 -0
- package/dist/commands/settlements.d.ts +3 -0
- package/dist/commands/settlements.d.ts.map +1 -0
- package/dist/commands/settlements.js +79 -0
- package/dist/commands/settlements.js.map +1 -0
- package/dist/commands/settlements.test.d.ts +2 -0
- package/dist/commands/settlements.test.d.ts.map +1 -0
- package/dist/commands/settlements.test.js +98 -0
- package/dist/commands/settlements.test.js.map +1 -0
- package/dist/commands/skills.d.ts +3 -0
- package/dist/commands/skills.d.ts.map +1 -0
- package/dist/commands/skills.js +96 -0
- package/dist/commands/skills.js.map +1 -0
- package/dist/commands/skills.test.d.ts +2 -0
- package/dist/commands/skills.test.d.ts.map +1 -0
- package/dist/commands/skills.test.js +89 -0
- package/dist/commands/skills.test.js.map +1 -0
- package/dist/commands/test-service.d.ts +3 -0
- package/dist/commands/test-service.d.ts.map +1 -0
- package/dist/commands/test-service.js +200 -0
- package/dist/commands/test-service.js.map +1 -0
- package/dist/commands/test-service.test.d.ts +2 -0
- package/dist/commands/test-service.test.d.ts.map +1 -0
- package/dist/commands/test-service.test.js +119 -0
- package/dist/commands/test-service.test.js.map +1 -0
- package/dist/commands/tunnel-handlers.d.ts +19 -0
- package/dist/commands/tunnel-handlers.d.ts.map +1 -0
- package/dist/commands/tunnel-handlers.js +103 -0
- package/dist/commands/tunnel-handlers.js.map +1 -0
- package/dist/commands/tunnel.d.ts +7 -0
- package/dist/commands/tunnel.d.ts.map +1 -0
- package/dist/commands/tunnel.js +184 -0
- package/dist/commands/tunnel.js.map +1 -0
- package/dist/commands/usage.d.ts +9 -0
- package/dist/commands/usage.d.ts.map +1 -0
- package/dist/commands/usage.js +78 -0
- package/dist/commands/usage.js.map +1 -0
- package/dist/commands/usage.test.d.ts +2 -0
- package/dist/commands/usage.test.d.ts.map +1 -0
- package/dist/commands/usage.test.js +102 -0
- package/dist/commands/usage.test.js.map +1 -0
- package/dist/commands/withdraw-confirm.d.ts +10 -0
- package/dist/commands/withdraw-confirm.d.ts.map +1 -0
- package/dist/commands/withdraw-confirm.js +51 -0
- package/dist/commands/withdraw-confirm.js.map +1 -0
- package/dist/commands/withdraw-confirm.test.d.ts +2 -0
- package/dist/commands/withdraw-confirm.test.d.ts.map +1 -0
- package/dist/commands/withdraw-confirm.test.js +75 -0
- package/dist/commands/withdraw-confirm.test.js.map +1 -0
- package/dist/commands/withdraw.d.ts +9 -0
- package/dist/commands/withdraw.d.ts.map +1 -0
- package/dist/commands/withdraw.js +78 -0
- package/dist/commands/withdraw.js.map +1 -0
- package/dist/commands/withdraw.test.d.ts +2 -0
- package/dist/commands/withdraw.test.d.ts.map +1 -0
- package/dist/commands/withdraw.test.js +96 -0
- package/dist/commands/withdraw.test.js.map +1 -0
- package/dist/config.d.ts +20 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +38 -0
- package/dist/config.js.map +1 -0
- package/dist/config.test.d.ts +2 -0
- package/dist/config.test.d.ts.map +1 -0
- package/dist/config.test.js +54 -0
- package/dist/config.test.js.map +1 -0
- package/dist/format.d.ts +46 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +101 -0
- package/dist/format.js.map +1 -0
- package/dist/format.test.d.ts +2 -0
- package/dist/format.test.d.ts.map +1 -0
- package/dist/format.test.js +85 -0
- package/dist/format.test.js.map +1 -0
- package/dist/generated/skills.d.ts +2 -0
- package/dist/generated/skills.d.ts.map +1 -0
- package/dist/generated/skills.js +23 -0
- package/dist/generated/skills.js.map +1 -0
- package/dist/helpers.d.ts +12 -0
- package/dist/helpers.d.ts.map +1 -0
- package/dist/helpers.js +21 -0
- package/dist/helpers.js.map +1 -0
- package/dist/helpers.test.d.ts +2 -0
- package/dist/helpers.test.d.ts.map +1 -0
- package/dist/helpers.test.js +59 -0
- package/dist/helpers.test.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +70 -0
- package/dist/index.js.map +1 -0
- package/package.json +61 -0
- package/templates/http-api/README.md +20 -0
- package/templates/http-api/package.json +21 -0
- package/templates/http-api/proxygate.tunnel.yaml +9 -0
- package/templates/http-api/src/index.ts +77 -0
- package/templates/http-api/tsconfig.json +14 -0
- package/templates/llm-agent/README.md +23 -0
- package/templates/llm-agent/package.json +22 -0
- package/templates/llm-agent/proxygate.tunnel.yaml +13 -0
- package/templates/llm-agent/src/index.ts +142 -0
- package/templates/llm-agent/tsconfig.json +14 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { getClient } from '../../helpers.js';
|
|
2
|
+
import { bold, dim, formatTable } from '../../format.js';
|
|
3
|
+
import { truncate, handleError } from './helpers.js';
|
|
4
|
+
/** Register the `listings docs` subcommand. */
|
|
5
|
+
export function registerDocsSubcommand(listings, program) {
|
|
6
|
+
listings
|
|
7
|
+
.command('docs <id>')
|
|
8
|
+
.description('View API documentation for a listing')
|
|
9
|
+
.option('--raw', 'Output raw content (OpenAPI spec or markdown)')
|
|
10
|
+
.action(async (id, opts) => {
|
|
11
|
+
const parentOpts = program.opts();
|
|
12
|
+
try {
|
|
13
|
+
const client = await getClient(parentOpts);
|
|
14
|
+
const docs = await client.docs(id);
|
|
15
|
+
if (!docs) {
|
|
16
|
+
console.log(dim('No documentation found for this listing.'));
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
if (opts.raw) {
|
|
20
|
+
console.log(docs.content);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
// Structured output
|
|
24
|
+
console.log(bold(`Documentation (${docs.doc_type})`));
|
|
25
|
+
console.log(dim(`Listing: ${docs.listing_id}`));
|
|
26
|
+
console.log(dim(`Updated: ${docs.updated_at}`));
|
|
27
|
+
console.log();
|
|
28
|
+
if (docs.doc_type === 'openapi' && docs.parsed_endpoints) {
|
|
29
|
+
console.log(bold('Endpoints:'));
|
|
30
|
+
console.log();
|
|
31
|
+
const headers = ['Method', 'Path', 'Summary'];
|
|
32
|
+
const rows = docs.parsed_endpoints.map((ep) => [
|
|
33
|
+
ep.method ?? '',
|
|
34
|
+
ep.path ?? '',
|
|
35
|
+
truncate(ep.summary ?? '', 50),
|
|
36
|
+
]);
|
|
37
|
+
console.log(formatTable(headers, rows));
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
console.log(docs.content);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
handleError(err);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=docs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs.js","sourceRoot":"","sources":["../../../src/commands/listings/docs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAErD,+CAA+C;AAC/C,MAAM,UAAU,sBAAsB,CAAC,QAAiB,EAAE,OAAgB;IACxE,QAAQ;SACL,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,sCAAsC,CAAC;SACnD,MAAM,CAAC,OAAO,EAAE,+CAA+C,CAAC;SAChE,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,IAAuB,EAAE,EAAE;QACpD,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAA0D,CAAC;QAE1F,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,CAAC;YAC3C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEnC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC,CAAC;gBAC7D,OAAO;YACT,CAAC;YAED,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC1B,OAAO;YACT,CAAC;YAED,oBAAoB;YACpB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,EAAE,CAAC;YAEd,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACzD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;gBAChC,OAAO,CAAC,GAAG,EAAE,CAAC;gBACd,MAAM,OAAO,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;gBAC9C,MAAM,IAAI,GAAI,IAAI,CAAC,gBAAgF,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;oBAC9G,EAAE,CAAC,MAAM,IAAI,EAAE;oBACf,EAAE,CAAC,IAAI,IAAI,EAAE;oBACb,QAAQ,CAAC,EAAE,CAAC,OAAO,IAAI,EAAE,EAAE,EAAE,CAAC;iBAC/B,CAAC,CAAC;gBACH,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;YAC1C,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headers.d.ts","sourceRoot":"","sources":["../../../src/commands/listings/headers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,wDAAwD;AACxD,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAyEnF"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { getClient } from '../../helpers.js';
|
|
2
|
+
import { bold, dim, red } from '../../format.js';
|
|
3
|
+
import { handleError } from './helpers.js';
|
|
4
|
+
/** Register the `listings headers` subcommand group. */
|
|
5
|
+
export function registerHeadersSubcommand(listings, program) {
|
|
6
|
+
const headers = listings
|
|
7
|
+
.command('headers <listing-id>')
|
|
8
|
+
.description('Manage upstream headers for a listing');
|
|
9
|
+
headers
|
|
10
|
+
.command('list')
|
|
11
|
+
.description('List upstream headers')
|
|
12
|
+
.action(async () => {
|
|
13
|
+
const listingId = headers.args[0];
|
|
14
|
+
const parentOpts = program.opts();
|
|
15
|
+
try {
|
|
16
|
+
const client = await getClient(parentOpts);
|
|
17
|
+
const listing = await client.listings.get(listingId);
|
|
18
|
+
const entries = Object.entries(listing.upstream_headers ?? {});
|
|
19
|
+
if (parentOpts.json) {
|
|
20
|
+
console.log(JSON.stringify({ upstream_headers: Object.fromEntries(entries) }, null, 2));
|
|
21
|
+
}
|
|
22
|
+
else if (entries.length === 0) {
|
|
23
|
+
console.log(dim('No upstream headers configured.'));
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
console.log(bold('Upstream Headers:'));
|
|
27
|
+
for (const [name, value] of entries) {
|
|
28
|
+
console.log(` ${bold(name)}: ${value}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
handleError(err);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
headers
|
|
37
|
+
.command('set <name> <value>')
|
|
38
|
+
.description('Set an upstream header (template vars: {{wallet}}, {{listing_id}}, {{request_id}}, {{service}})')
|
|
39
|
+
.action(async (name, value) => {
|
|
40
|
+
const listingId = headers.args[0];
|
|
41
|
+
const parentOpts = program.opts();
|
|
42
|
+
try {
|
|
43
|
+
const client = await getClient(parentOpts);
|
|
44
|
+
const listing = await client.listings.get(listingId);
|
|
45
|
+
const current = listing.upstream_headers ?? {};
|
|
46
|
+
const updated = { ...current, [name]: value };
|
|
47
|
+
await client.listings.update(listingId, { upstream_headers: updated });
|
|
48
|
+
console.log(`${bold('Set')} ${name}: ${value}`);
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
handleError(err);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
headers
|
|
55
|
+
.command('unset <name>')
|
|
56
|
+
.description('Remove an upstream header')
|
|
57
|
+
.action(async (name) => {
|
|
58
|
+
const listingId = headers.args[0];
|
|
59
|
+
const parentOpts = program.opts();
|
|
60
|
+
try {
|
|
61
|
+
const client = await getClient(parentOpts);
|
|
62
|
+
const listing = await client.listings.get(listingId);
|
|
63
|
+
const current = listing.upstream_headers ?? {};
|
|
64
|
+
if (!(name in current)) {
|
|
65
|
+
console.error(red(`Header "${name}" not found`));
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
68
|
+
const updated = { ...current };
|
|
69
|
+
delete updated[name];
|
|
70
|
+
await client.listings.update(listingId, { upstream_headers: updated });
|
|
71
|
+
console.log(`${bold('Removed')} ${name}`);
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
handleError(err);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=headers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headers.js","sourceRoot":"","sources":["../../../src/commands/listings/headers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,wDAAwD;AACxD,MAAM,UAAU,yBAAyB,CAAC,QAAiB,EAAE,OAAgB;IAC3E,MAAM,OAAO,GAAG,QAAQ;SACrB,OAAO,CAAC,sBAAsB,CAAC;SAC/B,WAAW,CAAC,uCAAuC,CAAC,CAAC;IAExD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,uBAAuB,CAAC;SACpC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAA0D,CAAC;QAE1F,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,CAAC;YAC3C,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACrD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;YAC/D,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,gBAAgB,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1F,CAAC;iBAAM,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,CAAC;YACtD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;gBACvC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;oBACpC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,oBAAoB,CAAC;SAC7B,WAAW,CAAC,iGAAiG,CAAC;SAC9G,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,KAAa,EAAE,EAAE;QAC5C,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAA0D,CAAC;QAE1F,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,CAAC;YAC3C,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACrD,MAAM,OAAO,GAAG,OAAO,CAAC,gBAAgB,IAAI,EAAE,CAAC;YAC/C,MAAM,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC;YAC9C,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC7B,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAA0D,CAAC;QAE1F,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,CAAC;YAC3C,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACrD,MAAM,OAAO,GAAG,OAAO,CAAC,gBAAgB,IAAI,EAAE,CAAC;YAC/C,IAAI,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,EAAE,CAAC;gBACvB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,IAAI,aAAa,CAAC,CAAC,CAAC;gBACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;YAC/B,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;YACrB,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { CreateListingOptions, ListingAuthPattern } from '@proxygate/sdk';
|
|
2
|
+
/** Truncate a string to N chars, adding "..." if truncated. */
|
|
3
|
+
export declare function truncate(str: string, n: number): string;
|
|
4
|
+
/** Standard error handler matching existing CLI pattern. */
|
|
5
|
+
export declare function handleError(err: unknown): never;
|
|
6
|
+
/** Lazy-load @inquirer/prompts to avoid import overhead for non-interactive use. */
|
|
7
|
+
export declare function loadPrompts(): Promise<typeof import('@inquirer/prompts')>;
|
|
8
|
+
/** Prompt for auth credentials based on auth pattern. */
|
|
9
|
+
export declare function promptCredentials(authPattern: ListingAuthPattern): Promise<Partial<Pick<CreateListingOptions, 'api_key' | 'header_name' | 'query_param' | 'basic_user' | 'oauth2_flow_type' | 'oauth2_token_url' | 'oauth2_scopes' | 'oauth2_client_id' | 'oauth2_client_secret' | 'oauth2_service_account_json'>>>;
|
|
10
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/commands/listings/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAI/E,+DAA+D;AAC/D,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,4DAA4D;AAC5D,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,KAAK,CAW/C;AAED,oFAAoF;AACpF,wBAAsB,WAAW,IAAI,OAAO,CAAC,cAAc,mBAAmB,CAAC,CAAC,CAE/E;AAED,yDAAyD;AACzD,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,kBAAkB,GAAG,OAAO,CAC/E,OAAO,CACL,IAAI,CACF,oBAAoB,EAClB,SAAS,GACT,aAAa,GACb,aAAa,GACb,YAAY,GACZ,kBAAkB,GAClB,kBAAkB,GAClB,eAAe,GACf,kBAAkB,GAClB,sBAAsB,GACtB,6BAA6B,CAChC,CACF,CACF,CA2CA"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { ProxyGateError } from '@proxygate/sdk';
|
|
2
|
+
import { red, dim } from '../../format.js';
|
|
3
|
+
/** Truncate a string to N chars, adding "..." if truncated. */
|
|
4
|
+
export function truncate(str, n) {
|
|
5
|
+
return str.length > n ? str.slice(0, n - 3) + '...' : str;
|
|
6
|
+
}
|
|
7
|
+
/** Standard error handler matching existing CLI pattern. */
|
|
8
|
+
export function handleError(err) {
|
|
9
|
+
if (err instanceof ProxyGateError) {
|
|
10
|
+
console.error(red(`Error [${err.code}]: ${err.message}`));
|
|
11
|
+
if (err.action)
|
|
12
|
+
console.error(dim(`Suggestion: ${err.action}`));
|
|
13
|
+
process.exit(1);
|
|
14
|
+
}
|
|
15
|
+
if (err instanceof Error) {
|
|
16
|
+
console.error(red(`Error: ${err.message}`));
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
throw err;
|
|
20
|
+
}
|
|
21
|
+
/** Lazy-load @inquirer/prompts to avoid import overhead for non-interactive use. */
|
|
22
|
+
export async function loadPrompts() {
|
|
23
|
+
return import('@inquirer/prompts');
|
|
24
|
+
}
|
|
25
|
+
/** Prompt for auth credentials based on auth pattern. */
|
|
26
|
+
export async function promptCredentials(authPattern) {
|
|
27
|
+
const { input, password, select } = await loadPrompts();
|
|
28
|
+
if (authPattern === 'bearer' || authPattern === 'header' || authPattern === 'query' || authPattern === 'basic') {
|
|
29
|
+
const result = {};
|
|
30
|
+
if (authPattern === 'header') {
|
|
31
|
+
result.header_name = await input({ message: 'Header name (e.g. X-Api-Key):' });
|
|
32
|
+
}
|
|
33
|
+
if (authPattern === 'query') {
|
|
34
|
+
result.query_param = await input({ message: 'Query parameter name (e.g. api_key):' });
|
|
35
|
+
}
|
|
36
|
+
if (authPattern === 'basic') {
|
|
37
|
+
result.basic_user = await input({ message: 'Basic auth username:' });
|
|
38
|
+
}
|
|
39
|
+
result.api_key = await password({ message: 'API key:' });
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
// oauth2_cc
|
|
43
|
+
const flowType = await select({
|
|
44
|
+
message: 'OAuth2 flow type:',
|
|
45
|
+
choices: [
|
|
46
|
+
{ value: 'standard', name: 'Standard (client_credentials)' },
|
|
47
|
+
{ value: 'google_jwt', name: 'Google JWT (service account)' },
|
|
48
|
+
],
|
|
49
|
+
});
|
|
50
|
+
const result = { oauth2_flow_type: flowType };
|
|
51
|
+
if (flowType === 'standard') {
|
|
52
|
+
result.oauth2_token_url = await input({ message: 'Token URL:' });
|
|
53
|
+
result.oauth2_scopes = await input({ message: 'Scopes (space-separated):' });
|
|
54
|
+
result.oauth2_client_id = await password({ message: 'Client ID:' });
|
|
55
|
+
result.oauth2_client_secret = await password({ message: 'Client secret:' });
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
result.oauth2_service_account_json = await input({
|
|
59
|
+
message: 'Path to service account JSON:',
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
return result;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/commands/listings/helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Register the `proxygate listings` command group.
|
|
4
|
+
*
|
|
5
|
+
* Provides 8 subcommands for seller listing management:
|
|
6
|
+
* list, create, update, pause, unpause, delete, rotate-key, docs.
|
|
7
|
+
*
|
|
8
|
+
* JSON output by default; use --table for human-readable output.
|
|
9
|
+
*/
|
|
10
|
+
export declare function registerListingsCommand(program: Command): void;
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/listings/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgC9D"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { registerListSubcommand } from './list.js';
|
|
2
|
+
import { registerCreateSubcommand } from './create.js';
|
|
3
|
+
import { registerUpdateSubcommand } from './update.js';
|
|
4
|
+
import { registerPauseSubcommand, registerUnpauseSubcommand } from './pause-unpause.js';
|
|
5
|
+
import { registerDeleteSubcommand } from './delete.js';
|
|
6
|
+
import { registerRotateKeySubcommand } from './rotate-key.js';
|
|
7
|
+
import { registerDocsSubcommand } from './docs.js';
|
|
8
|
+
import { registerHeadersSubcommand } from './headers.js';
|
|
9
|
+
/**
|
|
10
|
+
* Register the `proxygate listings` command group.
|
|
11
|
+
*
|
|
12
|
+
* Provides 8 subcommands for seller listing management:
|
|
13
|
+
* list, create, update, pause, unpause, delete, rotate-key, docs.
|
|
14
|
+
*
|
|
15
|
+
* JSON output by default; use --table for human-readable output.
|
|
16
|
+
*/
|
|
17
|
+
export function registerListingsCommand(program) {
|
|
18
|
+
const listings = program
|
|
19
|
+
.command('listings')
|
|
20
|
+
.description('Manage your seller listings (create, update, pause, delete, rotate keys)')
|
|
21
|
+
.addHelpText('after', '\nSubcommands:\n' +
|
|
22
|
+
' list List your seller listings\n' +
|
|
23
|
+
' create Create a new listing (interactive)\n' +
|
|
24
|
+
' update <id> Update a listing\n' +
|
|
25
|
+
' pause <id> Pause a listing\n' +
|
|
26
|
+
' unpause <id> Unpause a listing\n' +
|
|
27
|
+
' delete <id> Delete a listing\n' +
|
|
28
|
+
' rotate-key <id> Rotate API key or OAuth2 credentials\n' +
|
|
29
|
+
' docs <id> View API documentation for a listing\n' +
|
|
30
|
+
' headers <id> Manage upstream headers\n\n' +
|
|
31
|
+
'Examples:\n' +
|
|
32
|
+
' $ proxygate listings list JSON output (default)\n' +
|
|
33
|
+
' $ proxygate listings list --table Table format\n' +
|
|
34
|
+
' $ proxygate listings create Interactive mode\n' +
|
|
35
|
+
' $ proxygate listings create --non-interactive --service-name my-api ...\n');
|
|
36
|
+
registerListSubcommand(listings, program);
|
|
37
|
+
registerCreateSubcommand(listings, program);
|
|
38
|
+
registerUpdateSubcommand(listings, program);
|
|
39
|
+
registerPauseSubcommand(listings, program);
|
|
40
|
+
registerUnpauseSubcommand(listings, program);
|
|
41
|
+
registerDeleteSubcommand(listings, program);
|
|
42
|
+
registerRotateKeySubcommand(listings, program);
|
|
43
|
+
registerDocsSubcommand(listings, program);
|
|
44
|
+
registerHeadersSubcommand(listings, program);
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/listings/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AACxF,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAEzD;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,MAAM,QAAQ,GAAG,OAAO;SACrB,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,0EAA0E,CAAC;SACvF,WAAW,CACV,OAAO,EACP,kBAAkB;QAChB,4DAA4D;QAC5D,qEAAqE;QACrE,mDAAmD;QACnD,kDAAkD;QAClD,oDAAoD;QACpD,mDAAmD;QACnD,uEAAuE;QACvE,uEAAuE;QACvE,4DAA4D;QAC5D,aAAa;QACb,sEAAsE;QACtE,6DAA6D;QAC7D,iEAAiE;QACjE,6EAA6E,CAChF,CAAC;IAEJ,sBAAsB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC1C,wBAAwB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC5C,wBAAwB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC5C,uBAAuB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC3C,yBAAyB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC7C,wBAAwB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC5C,2BAA2B,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC/C,sBAAsB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC1C,yBAAyB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/listings/list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,+CAA+C;AAC/C,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAwChF"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { getClient } from '../../helpers.js';
|
|
2
|
+
import { bold, green, yellow, dim, formatTable } from '../../format.js';
|
|
3
|
+
import { handleError } from './helpers.js';
|
|
4
|
+
/** Register the `listings list` subcommand. */
|
|
5
|
+
export function registerListSubcommand(listings, program) {
|
|
6
|
+
listings
|
|
7
|
+
.command('list')
|
|
8
|
+
.description('List all your seller listings')
|
|
9
|
+
.option('--table', 'Display in human-readable table format')
|
|
10
|
+
.action(async (opts) => {
|
|
11
|
+
const parentOpts = program.opts();
|
|
12
|
+
try {
|
|
13
|
+
const client = await getClient(parentOpts);
|
|
14
|
+
const result = await client.listings.list();
|
|
15
|
+
if (opts.table) {
|
|
16
|
+
if (result.listings.length === 0) {
|
|
17
|
+
console.log(dim('No listings found. Create one with: proxygate listings create'));
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
console.log(bold(`Seller Listings (${result.listings.length})`));
|
|
21
|
+
console.log();
|
|
22
|
+
const headers = ['ID', 'Service', 'Status', 'RPM', 'Price', 'Shield'];
|
|
23
|
+
const rows = result.listings.map((l) => [
|
|
24
|
+
l.id.slice(0, 8),
|
|
25
|
+
l.service_catalog?.name ?? 'unknown',
|
|
26
|
+
l.is_active ? green('active') : yellow('paused'),
|
|
27
|
+
`${l.total_rpm - (l.reserved_rpm ?? 0)}/${l.total_rpm}`,
|
|
28
|
+
String(l.price_per_request),
|
|
29
|
+
l.shield_enabled ? green('on') : dim('off'),
|
|
30
|
+
]);
|
|
31
|
+
console.log(formatTable(headers, rows));
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
// JSON output (default)
|
|
35
|
+
console.log(JSON.stringify(result, null, 2));
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
handleError(err);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/listings/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,+CAA+C;AAC/C,MAAM,UAAU,sBAAsB,CAAC,QAAiB,EAAE,OAAgB;IACxE,QAAQ;SACL,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,+BAA+B,CAAC;SAC5C,MAAM,CAAC,SAAS,EAAE,wCAAwC,CAAC;SAC3D,MAAM,CAAC,KAAK,EAAE,IAAyB,EAAE,EAAE;QAC1C,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAA0D,CAAC;QAE1F,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAE5C,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACjC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC,CAAC;oBAClF,OAAO;gBACT,CAAC;gBAED,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACjE,OAAO,CAAC,GAAG,EAAE,CAAC;gBAEd,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;gBACtE,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;oBACtC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;oBAChB,CAAC,CAAC,eAAe,EAAE,IAAI,IAAI,SAAS;oBACpC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;oBAChD,GAAG,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE;oBACvD,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC;oBAC3B,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;iBAC5C,CAAC,CAAC;gBACH,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;gBACxC,OAAO;YACT,CAAC;YAED,wBAAwB;YACxB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Command } from 'commander';
|
|
2
|
+
/** Register the `listings pause` subcommand. */
|
|
3
|
+
export declare function registerPauseSubcommand(listings: Command, program: Command): void;
|
|
4
|
+
/** Register the `listings unpause` subcommand. */
|
|
5
|
+
export declare function registerUnpauseSubcommand(listings: Command, program: Command): void;
|
|
6
|
+
//# sourceMappingURL=pause-unpause.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pause-unpause.d.ts","sourceRoot":"","sources":["../../../src/commands/listings/pause-unpause.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,gDAAgD;AAChD,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAejF;AAED,kDAAkD;AAClD,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAenF"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { getClient } from '../../helpers.js';
|
|
2
|
+
import { handleError } from './helpers.js';
|
|
3
|
+
/** Register the `listings pause` subcommand. */
|
|
4
|
+
export function registerPauseSubcommand(listings, program) {
|
|
5
|
+
listings
|
|
6
|
+
.command('pause <id>')
|
|
7
|
+
.description('Pause a listing (removes from marketplace routing)')
|
|
8
|
+
.action(async (id) => {
|
|
9
|
+
const parentOpts = program.opts();
|
|
10
|
+
try {
|
|
11
|
+
const client = await getClient(parentOpts);
|
|
12
|
+
const result = await client.listings.pause(id);
|
|
13
|
+
console.log(JSON.stringify(result, null, 2));
|
|
14
|
+
}
|
|
15
|
+
catch (err) {
|
|
16
|
+
handleError(err);
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
/** Register the `listings unpause` subcommand. */
|
|
21
|
+
export function registerUnpauseSubcommand(listings, program) {
|
|
22
|
+
listings
|
|
23
|
+
.command('unpause <id>')
|
|
24
|
+
.description('Unpause a listing (re-enables marketplace routing)')
|
|
25
|
+
.action(async (id) => {
|
|
26
|
+
const parentOpts = program.opts();
|
|
27
|
+
try {
|
|
28
|
+
const client = await getClient(parentOpts);
|
|
29
|
+
const result = await client.listings.unpause(id);
|
|
30
|
+
console.log(JSON.stringify(result, null, 2));
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
handleError(err);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=pause-unpause.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pause-unpause.js","sourceRoot":"","sources":["../../../src/commands/listings/pause-unpause.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,gDAAgD;AAChD,MAAM,UAAU,uBAAuB,CAAC,QAAiB,EAAE,OAAgB;IACzE,QAAQ;SACL,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CAAC,oDAAoD,CAAC;SACjE,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,EAAE;QAC3B,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAA0D,CAAC;QAE1F,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC/C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,yBAAyB,CAAC,QAAiB,EAAE,OAAgB;IAC3E,QAAQ;SACL,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,oDAAoD,CAAC;SACjE,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,EAAE;QAC3B,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAA0D,CAAC;QAE1F,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rotate-key.d.ts","sourceRoot":"","sources":["../../../src/commands/listings/rotate-key.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,qDAAqD;AACrD,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAmErF"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { getClient } from '../../helpers.js';
|
|
2
|
+
import { handleError, loadPrompts, promptCredentials } from './helpers.js';
|
|
3
|
+
/** Register the `listings rotate-key` subcommand. */
|
|
4
|
+
export function registerRotateKeySubcommand(listings, program) {
|
|
5
|
+
listings
|
|
6
|
+
.command('rotate-key <id>')
|
|
7
|
+
.description('Rotate API key or OAuth2 credentials for a listing')
|
|
8
|
+
.option('--non-interactive', 'Use CLI flags instead of interactive prompts')
|
|
9
|
+
.option('--api-key <key>', 'New API key')
|
|
10
|
+
.option('--oauth2-flow-type <type>', 'OAuth2 flow: standard, google_jwt')
|
|
11
|
+
.option('--oauth2-client-id <id>', 'OAuth2 client ID')
|
|
12
|
+
.option('--oauth2-client-secret <secret>', 'OAuth2 client secret')
|
|
13
|
+
.option('--oauth2-service-account-json <path>', 'Google service account JSON path')
|
|
14
|
+
.option('--validation-endpoint <path>', 'Validation endpoint path')
|
|
15
|
+
.action(async (id, opts) => {
|
|
16
|
+
const parentOpts = program.opts();
|
|
17
|
+
try {
|
|
18
|
+
const client = await getClient(parentOpts);
|
|
19
|
+
let rotateOpts;
|
|
20
|
+
if (opts.nonInteractive) {
|
|
21
|
+
rotateOpts = {
|
|
22
|
+
...(opts.apiKey ? { api_key: opts.apiKey } : {}),
|
|
23
|
+
...(opts.oauth2FlowType ? { oauth2_flow_type: opts.oauth2FlowType } : {}),
|
|
24
|
+
...(opts.oauth2ClientId ? { oauth2_client_id: opts.oauth2ClientId } : {}),
|
|
25
|
+
...(opts.oauth2ClientSecret ? { oauth2_client_secret: opts.oauth2ClientSecret } : {}),
|
|
26
|
+
...(opts.oauth2ServiceAccountJson ? { oauth2_service_account_json: opts.oauth2ServiceAccountJson } : {}),
|
|
27
|
+
...(opts.validationEndpoint ? { validation_endpoint: opts.validationEndpoint } : {}),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
const listing = await client.listings.get(id);
|
|
32
|
+
const { select, password } = await loadPrompts();
|
|
33
|
+
const credType = await select({
|
|
34
|
+
message: `Current auth: ${listing.auth_pattern}. Rotate:`,
|
|
35
|
+
choices: [
|
|
36
|
+
{ value: 'api_key', name: 'API key' },
|
|
37
|
+
{ value: 'oauth2', name: 'OAuth2 credentials' },
|
|
38
|
+
],
|
|
39
|
+
});
|
|
40
|
+
if (credType === 'api_key') {
|
|
41
|
+
const apiKey = await password({ message: 'New API key:' });
|
|
42
|
+
rotateOpts = { api_key: apiKey };
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
const creds = await promptCredentials('oauth2_cc');
|
|
46
|
+
rotateOpts = {
|
|
47
|
+
...(creds.oauth2_flow_type ? { oauth2_flow_type: creds.oauth2_flow_type } : {}),
|
|
48
|
+
...(creds.oauth2_client_id ? { oauth2_client_id: creds.oauth2_client_id } : {}),
|
|
49
|
+
...(creds.oauth2_client_secret ? { oauth2_client_secret: creds.oauth2_client_secret } : {}),
|
|
50
|
+
...(creds.oauth2_service_account_json ? { oauth2_service_account_json: creds.oauth2_service_account_json } : {}),
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const result = await client.listings.rotateKey(id, rotateOpts);
|
|
55
|
+
console.log(JSON.stringify(result, null, 2));
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
handleError(err);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=rotate-key.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rotate-key.js","sourceRoot":"","sources":["../../../src/commands/listings/rotate-key.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/listings/update.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,iDAAiD;AACjD,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAsDlF"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { getClient } from '../../helpers.js';
|
|
3
|
+
import { red, dim } from '../../format.js';
|
|
4
|
+
import { handleError } from './helpers.js';
|
|
5
|
+
/** Register the `listings update` subcommand. */
|
|
6
|
+
export function registerUpdateSubcommand(listings, program) {
|
|
7
|
+
listings
|
|
8
|
+
.command('update <id>')
|
|
9
|
+
.description('Update a listing (capacity, pricing, categories, description, paths)')
|
|
10
|
+
.option('--total-rpm <n>', 'Total RPM capacity')
|
|
11
|
+
.option('--reserved-rpm <n>', 'Reserved RPM')
|
|
12
|
+
.option('--price <n>', 'Price per request in micro-cents')
|
|
13
|
+
.option('--categories <slugs>', 'Category slugs (comma-separated)')
|
|
14
|
+
.option('--description <text>', 'Listing description')
|
|
15
|
+
.option('--allowed-paths <paths>', 'Allowed paths (comma-separated)')
|
|
16
|
+
.option('--endpoints <file>', 'Path to JSON file containing EndpointSpec[]')
|
|
17
|
+
.option('--shield <on|off>', 'Enable or disable Shield request scanning (protects your API from malicious input)')
|
|
18
|
+
.action(async (id, opts) => {
|
|
19
|
+
const parentOpts = program.opts();
|
|
20
|
+
try {
|
|
21
|
+
const updates = {};
|
|
22
|
+
if (opts.totalRpm !== undefined)
|
|
23
|
+
updates.total_rpm = parseInt(opts.totalRpm, 10);
|
|
24
|
+
if (opts.reservedRpm !== undefined)
|
|
25
|
+
updates.reserved_rpm = parseInt(opts.reservedRpm, 10);
|
|
26
|
+
if (opts.price !== undefined)
|
|
27
|
+
updates.price_per_request = parseInt(opts.price, 10);
|
|
28
|
+
if (opts.categories !== undefined)
|
|
29
|
+
updates.category_slugs = opts.categories.split(',').map((s) => s.trim());
|
|
30
|
+
if (opts.description !== undefined)
|
|
31
|
+
updates.description = opts.description;
|
|
32
|
+
if (opts.allowedPaths !== undefined)
|
|
33
|
+
updates.allowed_paths = opts.allowedPaths.split(',').map((s) => s.trim());
|
|
34
|
+
if (opts.endpoints !== undefined)
|
|
35
|
+
updates.endpoints = JSON.parse(await readFile(opts.endpoints, 'utf-8'));
|
|
36
|
+
if (opts.shield !== undefined) {
|
|
37
|
+
if (opts.shield !== 'on' && opts.shield !== 'off') {
|
|
38
|
+
console.error(red('Error: --shield must be "on" or "off"'));
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
updates.shield_enabled = opts.shield === 'on';
|
|
42
|
+
}
|
|
43
|
+
if (Object.keys(updates).length === 0) {
|
|
44
|
+
console.error(red('Error: at least one update flag is required'));
|
|
45
|
+
console.error(dim('Available: --total-rpm, --reserved-rpm, --price, --categories, --description, --allowed-paths, --shield'));
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
const client = await getClient(parentOpts);
|
|
49
|
+
const result = await client.listings.update(id, updates);
|
|
50
|
+
console.log(JSON.stringify(result, null, 2));
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
handleError(err);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/listings/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listings.d.ts","sourceRoot":"","sources":["../../src/commands/listings.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listings.js","sourceRoot":"","sources":["../../src/commands/listings.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listings.test.d.ts","sourceRoot":"","sources":["../../src/commands/listings.test.ts"],"names":[],"mappings":""}
|