@hyperline/cli 0.1.0-build.1.d6f41d9 → 0.1.0-build.1.d788525
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/bin/hyperline-main.js +1109 -494
- package/package.json +1 -1
|
@@ -34985,10 +34985,10 @@ var require_shared = __commonJS({
|
|
|
34985
34985
|
ZodId: () => ZodId,
|
|
34986
34986
|
ZodTranslationsSchemaFn: () => ZodTranslationsSchemaFn
|
|
34987
34987
|
});
|
|
34988
|
-
var
|
|
34988
|
+
var import_zod23 = require_lib();
|
|
34989
34989
|
var countryIds2 = ["all", ...countries.map(({ id }) => id)];
|
|
34990
|
-
var ZodId =
|
|
34991
|
-
var ZodTranslationsSchemaFn = (schema) =>
|
|
34990
|
+
var ZodId = import_zod23.z.enum(countryIds2);
|
|
34991
|
+
var ZodTranslationsSchemaFn = (schema) => import_zod23.z.record(import_zod23.z.string(), schema.optional());
|
|
34992
34992
|
var UsStates = [
|
|
34993
34993
|
{ id: "AA", name: "Armed Forces Americas" },
|
|
34994
34994
|
{ id: "AE", name: "Armed Forces Europe" },
|
|
@@ -36287,14 +36287,14 @@ var require_shared = __commonJS({
|
|
|
36287
36287
|
ZodNumberCurrencyPositiveValue: () => ZodNumberCurrencyPositiveValue,
|
|
36288
36288
|
ZodNumberCurrencyPositiveValueExcludingZero: () => ZodNumberCurrencyPositiveValueExcludingZero
|
|
36289
36289
|
});
|
|
36290
|
-
var
|
|
36291
|
-
var ZodCurrencyId =
|
|
36290
|
+
var import_zod24 = require_lib();
|
|
36291
|
+
var ZodCurrencyId = import_zod24.z.enum(
|
|
36292
36292
|
all_default.map(({ id }) => id)
|
|
36293
36293
|
);
|
|
36294
|
-
var ZodNumberCurrency =
|
|
36295
|
-
var ZodNumberCurrencyPositiveValue =
|
|
36296
|
-
var ZodNumberCurrencyPositiveValueExcludingZero =
|
|
36297
|
-
var ZodCurrencyMap =
|
|
36294
|
+
var ZodNumberCurrency = import_zod24.z.string().or(import_zod24.z.number().transform((number4) => number4)).transform((number4) => number4);
|
|
36295
|
+
var ZodNumberCurrencyPositiveValue = import_zod24.z.number().min(0).transform((number4) => number4).transform((number4) => number4);
|
|
36296
|
+
var ZodNumberCurrencyPositiveValueExcludingZero = import_zod24.z.number().gt(0).transform((number4) => number4).transform((number4) => number4);
|
|
36297
|
+
var ZodCurrencyMap = import_zod24.z.record(ZodNumberCurrency).refine(
|
|
36298
36298
|
(data) => Object.keys(data).every((key) => ZodCurrencyId.safeParse(key).success),
|
|
36299
36299
|
{
|
|
36300
36300
|
message: "Invalid currency key.",
|
|
@@ -37739,10 +37739,9 @@ Examples:
|
|
|
37739
37739
|
baseUrlOverride: resolveIngestBaseUrl(ctx.baseUrl)
|
|
37740
37740
|
});
|
|
37741
37741
|
});
|
|
37742
|
-
resource.command("send").description(`Send a single billable event.`).requiredOption("--customer-id <value>", `Customer ID or external ID`).requiredOption("--event-type <value>", `Event type`).requiredOption("--timestamp <value>", `ISO8601 timestamp`).requiredOption("--record <value>", `Event record as JSON (must include "id" key)`).
|
|
37742
|
+
resource.command("send").description(`Send a single billable event.`).requiredOption("--customer-id <value>", `Customer ID or external ID`).requiredOption("--event-type <value>", `Event type`).requiredOption("--timestamp <value>", `ISO8601 timestamp`).requiredOption("--record <value>", `Event record as JSON (must include "id" key)`).addHelpText("after", `
|
|
37743
37743
|
Examples:
|
|
37744
|
-
hyperline events send --customer-id cus_xyz --event-type api_call --timestamp 2024-01-15T10:00:00Z --record '{"id":"evt_1","duration":32}'
|
|
37745
|
-
hyperline events send --customer-id cus_xyz --event-type api_call --timestamp 2024-01-15T10:00:00Z --record '{"id":"evt_1"}' --with-price-calculation`).action(async (opts) => {
|
|
37744
|
+
hyperline events send --customer-id cus_xyz --event-type api_call --timestamp 2024-01-15T10:00:00Z --record '{"id":"evt_1","duration":32}'`).action(async (opts) => {
|
|
37746
37745
|
const ctx = resource.parent?.opts()._ctx;
|
|
37747
37746
|
if (!ctx) {
|
|
37748
37747
|
process.stderr.write("Error: Not authenticated\n");
|
|
@@ -37762,14 +37761,10 @@ Examples:
|
|
|
37762
37761
|
timestamp: opts.timestamp,
|
|
37763
37762
|
record: record2
|
|
37764
37763
|
};
|
|
37765
|
-
const args = {};
|
|
37766
|
-
if (opts.withPriceCalculation !== void 0)
|
|
37767
|
-
args.with_price_calculation = true;
|
|
37768
37764
|
await ctx.execute({
|
|
37769
37765
|
method: "POST",
|
|
37770
37766
|
path: "/v1/events",
|
|
37771
|
-
args,
|
|
37772
|
-
queryParamKeys: ["with_price_calculation"],
|
|
37767
|
+
args: {},
|
|
37773
37768
|
body,
|
|
37774
37769
|
baseUrlOverride: resolveIngestBaseUrl(ctx.baseUrl)
|
|
37775
37770
|
});
|
|
@@ -38285,7 +38280,7 @@ Examples:
|
|
|
38285
38280
|
queryParamKeys: []
|
|
38286
38281
|
});
|
|
38287
38282
|
});
|
|
38288
|
-
resource.command("preview-manual-journal-entry-recognition").description(`Preview revenue-recognition slices for a manual journal entry without writing data.`).requiredOption("--ledger-id <value>", `Ledger identifier.`).requiredOption("--amount <
|
|
38283
|
+
resource.command("preview-manual-journal-entry-recognition").description(`Preview revenue-recognition slices for a manual journal entry without writing data.`).requiredOption("--ledger-id <value>", `Ledger identifier.`).requiredOption("--amount <number>", `Deferred amount in minor ledger-currency units.`).requiredOption("--method <value>", `Recognition method to preview.`).option("--recognition-date <value>", `Recognition date for point-in-time recognition.`).option("--window <json>", `Service window for over-time recognition.`).option("--granularity <value>", `Slice granularity for over-time recognition.`).addHelpText("after", `
|
|
38289
38284
|
Examples:
|
|
38290
38285
|
hyperline accounting-journal-entries preview-manual-journal-entry-recognition --ledger-id <ledger_id> --amount <amount> --method <method>
|
|
38291
38286
|
hyperline accounting-journal-entries preview-manual-journal-entry-recognition --ledger-id <ledger_id> --amount <amount> --method <method> --recognition-date <recognition_date> --window <window>
|
|
@@ -38298,14 +38293,14 @@ Examples:
|
|
|
38298
38293
|
const args = {};
|
|
38299
38294
|
if (opts.ledgerId !== void 0)
|
|
38300
38295
|
args.ledger_id = opts.ledgerId;
|
|
38301
|
-
if (opts.amount !== void 0)
|
|
38302
|
-
args.amount = opts.amount;
|
|
38303
38296
|
if (opts.method !== void 0)
|
|
38304
38297
|
args.method = opts.method;
|
|
38305
38298
|
if (opts.recognitionDate !== void 0)
|
|
38306
38299
|
args.recognition_date = opts.recognitionDate;
|
|
38307
38300
|
if (opts.granularity !== void 0)
|
|
38308
38301
|
args.granularity = opts.granularity;
|
|
38302
|
+
if (opts.amount !== void 0)
|
|
38303
|
+
args.amount = Number(opts.amount);
|
|
38309
38304
|
if (opts.window !== void 0)
|
|
38310
38305
|
args.window = JSON.parse(opts.window);
|
|
38311
38306
|
await ctx.execute({
|
|
@@ -38483,7 +38478,7 @@ Examples:
|
|
|
38483
38478
|
queryParamKeys: []
|
|
38484
38479
|
});
|
|
38485
38480
|
});
|
|
38486
|
-
resource.command("delete-ledger").description(`
|
|
38481
|
+
resource.command("delete-ledger").description(`Permanently delete a ledger with its accounts, rules, journal entries and revenue recognition schedules, and unlink the suppliers, supplier contracts and accounting settings that reference it.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
|
|
38487
38482
|
Examples:
|
|
38488
38483
|
hyperline accounting-ledgers delete-ledger --id <id>
|
|
38489
38484
|
hyperline accounting-ledgers delete-ledger --id <id> --output json`).action(async (opts) => {
|
|
@@ -38583,7 +38578,7 @@ Examples:
|
|
|
38583
38578
|
// build/commands/generated/accounting-revenue-recognition.js
|
|
38584
38579
|
function registerAccounting_Revenue_RecognitionCommands(parent) {
|
|
38585
38580
|
const resource = parent.command("accounting-revenue-recognition").description("Manage accounting > revenue recognition");
|
|
38586
|
-
resource.command("get-rev-rec-waterfall").description(`Aggregate revenue-recognition schedules into a booked-by-recognition month matrix.`).option("--ledger-id <value>", `Ledger identifier.`).option("--year <number>", `Booked calendar year.`).option("--customer-id.in <value>", `Comma-separated customer identifiers.`).option("--product-id.in <value>", `Comma-separated product identifiers.`).option("--search <value>", `Search
|
|
38581
|
+
resource.command("get-rev-rec-waterfall").description(`Aggregate revenue-recognition schedules into a booked-by-recognition month matrix.`).option("--ledger-id <value>", `Ledger identifier.`).option("--year <number>", `Booked calendar year.`).option("--customer-id.in <value>", `Comma-separated customer identifiers.`).option("--product-id.in <value>", `Comma-separated product identifiers.`).option("--search <value>", `Search by invoice ID or number, customer name or ID, or subscription ID.`).addHelpText("after", `
|
|
38587
38582
|
Examples:
|
|
38588
38583
|
hyperline accounting-revenue-recognition get-rev-rec-waterfall
|
|
38589
38584
|
hyperline accounting-revenue-recognition get-rev-rec-waterfall --ledger-id <ledger_id> --year <year>`).action(async (opts) => {
|
|
@@ -38616,7 +38611,7 @@ Examples:
|
|
|
38616
38611
|
]
|
|
38617
38612
|
});
|
|
38618
38613
|
});
|
|
38619
|
-
resource.command("get-rev-rec-waterfall-cell").description(`List the schedules and slices contributing to a waterfall cell.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--ledger-id <value>", `Ledger identifier.`).option("--booked-month <value>", `Booked month formatted YYYY-MM; required if year is absent.`).option("--year <number>", `Booked year; required if booked_month is absent.`).option("--recognition-month <value>", `Recognition month formatted YYYY-MM.`).option("--cell-type <value>", `Waterfall cell category.`).option("--status <value>", `Recognition status filter.`).option("--customer-id.in <value>", `Comma-separated customer identifiers.`).option("--product-id.in <value>", `Comma-separated product identifiers.`).option("--search <value>", `Search
|
|
38614
|
+
resource.command("get-rev-rec-waterfall-cell").description(`List the schedules and slices contributing to a waterfall cell.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--ledger-id <value>", `Ledger identifier.`).option("--booked-month <value>", `Booked month formatted YYYY-MM; required if year is absent.`).option("--year <number>", `Booked year; required if booked_month is absent.`).option("--recognition-month <value>", `Recognition month formatted YYYY-MM.`).option("--cell-type <value>", `Waterfall cell category.`).option("--status <value>", `Recognition status filter.`).option("--customer-id.in <value>", `Comma-separated customer identifiers.`).option("--product-id.in <value>", `Comma-separated product identifiers.`).option("--search <value>", `Search by invoice ID or number, customer name or ID, or subscription ID.`).addHelpText("after", `
|
|
38620
38615
|
Examples:
|
|
38621
38616
|
hyperline accounting-revenue-recognition get-rev-rec-waterfall-cell
|
|
38622
38617
|
hyperline accounting-revenue-recognition get-rev-rec-waterfall-cell --take <take> --ledger-id <ledger_id>`).action(async (opts) => {
|
|
@@ -38794,7 +38789,7 @@ Examples:
|
|
|
38794
38789
|
queryParamKeys: []
|
|
38795
38790
|
});
|
|
38796
38791
|
});
|
|
38797
|
-
resource.command("reshape-rev-rec-schedule").description(`Recognize an amount now and optionally spread the remainder over a new window.`).requiredOption("--schedule-id <value>", `schedule_id parameter`).requiredOption("--recognize-now-amount <
|
|
38792
|
+
resource.command("reshape-rev-rec-schedule").description(`Recognize an amount now and optionally spread the remainder over a new window.`).requiredOption("--schedule-id <value>", `schedule_id parameter`).requiredOption("--recognize-now-amount <number>", `Amount to recognize immediately in ledger currency. Expressed in currency's smallest unit.`).option("--window <json>", `Window over which to spread the remaining amount.`).requiredOption("--reason-code <value>", `Stable reason code for the adjustment.`).option("--reason-detail <value>", `Required explanation when reason_code is \`other\`.`).addHelpText("after", `
|
|
38798
38793
|
Examples:
|
|
38799
38794
|
hyperline accounting-revenue-recognition reshape-rev-rec-schedule --schedule-id <schedule_id> --recognize-now-amount <recognize_now_amount> --reason-code <reason_code>
|
|
38800
38795
|
hyperline accounting-revenue-recognition reshape-rev-rec-schedule --schedule-id <schedule_id> --recognize-now-amount <recognize_now_amount> --reason-code <reason_code> --window <window> --reason-detail <reason_detail>
|
|
@@ -38807,12 +38802,12 @@ Examples:
|
|
|
38807
38802
|
const args = {};
|
|
38808
38803
|
if (opts.scheduleId !== void 0)
|
|
38809
38804
|
args.schedule_id = opts.scheduleId;
|
|
38810
|
-
if (opts.recognizeNowAmount !== void 0)
|
|
38811
|
-
args.recognize_now_amount = opts.recognizeNowAmount;
|
|
38812
38805
|
if (opts.reasonCode !== void 0)
|
|
38813
38806
|
args.reason_code = opts.reasonCode;
|
|
38814
38807
|
if (opts.reasonDetail !== void 0)
|
|
38815
38808
|
args.reason_detail = opts.reasonDetail;
|
|
38809
|
+
if (opts.recognizeNowAmount !== void 0)
|
|
38810
|
+
args.recognize_now_amount = Number(opts.recognizeNowAmount);
|
|
38816
38811
|
if (opts.window !== void 0)
|
|
38817
38812
|
args.window = JSON.parse(opts.window);
|
|
38818
38813
|
await ctx.execute({
|
|
@@ -38822,7 +38817,7 @@ Examples:
|
|
|
38822
38817
|
queryParamKeys: []
|
|
38823
38818
|
});
|
|
38824
38819
|
});
|
|
38825
|
-
resource.command("preview-reshape-rev-rec-schedule").description(`Preview the exact reshape plan without writing data.`).requiredOption("--schedule-id <value>", `schedule_id parameter`).requiredOption("--recognize-now-amount <
|
|
38820
|
+
resource.command("preview-reshape-rev-rec-schedule").description(`Preview the exact reshape plan without writing data.`).requiredOption("--schedule-id <value>", `schedule_id parameter`).requiredOption("--recognize-now-amount <number>", `Amount to recognize immediately in ledger currency. Expressed in currency's smallest unit.`).option("--window <json>", `Window over which to spread the remaining amount.`).addHelpText("after", `
|
|
38826
38821
|
Examples:
|
|
38827
38822
|
hyperline accounting-revenue-recognition preview-reshape-rev-rec-schedule --schedule-id <schedule_id> --recognize-now-amount <recognize_now_amount>
|
|
38828
38823
|
hyperline accounting-revenue-recognition preview-reshape-rev-rec-schedule --schedule-id <schedule_id> --recognize-now-amount <recognize_now_amount> --window <window>
|
|
@@ -38836,7 +38831,7 @@ Examples:
|
|
|
38836
38831
|
if (opts.scheduleId !== void 0)
|
|
38837
38832
|
args.schedule_id = opts.scheduleId;
|
|
38838
38833
|
if (opts.recognizeNowAmount !== void 0)
|
|
38839
|
-
args.recognize_now_amount = opts.recognizeNowAmount;
|
|
38834
|
+
args.recognize_now_amount = Number(opts.recognizeNowAmount);
|
|
38840
38835
|
if (opts.window !== void 0)
|
|
38841
38836
|
args.window = JSON.parse(opts.window);
|
|
38842
38837
|
await ctx.execute({
|
|
@@ -39013,7 +39008,7 @@ Examples:
|
|
|
39013
39008
|
queryParamKeys: []
|
|
39014
39009
|
});
|
|
39015
39010
|
});
|
|
39016
|
-
resource.command("create").description(`Create a new accounting rule for account code routing or journal posting.`).option("--ledger-id <value>", `Identifier of the ledger this rule belongs to.`).option("--name <value>", `Optional user-defined name for the rule.`).requiredOption("--category <value>", `Rule category (e.g. accounting_software, invoice_posted).`).requiredOption("--priority <number>", `Override order. Higher priority wins when multiple rules match.`).option("--product-ids <json>", `Product IDs to match. Empty means match all.`).option("--product-types <json>", `Product types to match. Allowed values: flat_fee, dynamic, seat, credit. Empty means match all.`).option("--customer-ids <json>", `Customer IDs for customer-specific overrides.`).option("--currencies <json>", `Currency codes to match (e.g. EUR, USD).`).option("--countries <json>", `Country codes for jurisdiction-based overrides.`).option("--coupon-ids <json>", `Coupon IDs to match. Empty means match all.`).option("--client-provider-ids <json>", `Client provider IDs to match. Empty means match all.`).option("--payment-method-types <json>", `Payment method types to match. Empty means match all.`).option("--interval-period <value>", `Billing interval period filter (
|
|
39011
|
+
resource.command("create").description(`Create a new accounting rule for account code routing or journal posting, with the filters, accounts and required fields the rule editor applies to its category.`).option("--ledger-id <value>", `Identifier of the ledger this rule belongs to.`).option("--name <value>", `Optional user-defined name for the rule.`).requiredOption("--category <value>", `Rule category (e.g. accounting_software, invoice_posted).`).requiredOption("--priority <number>", `Override order. Higher priority wins when multiple rules match.`).option("--product-ids <json>", `Product IDs to match. Empty means match all.`).option("--product-types <json>", `Product types to match. Allowed values: flat_fee, dynamic, seat, credit. Empty means match all.`).option("--customer-ids <json>", `Customer IDs for customer-specific overrides.`).option("--currencies <json>", `Currency codes to match (e.g. EUR, USD).`).option("--countries <json>", `Country codes for jurisdiction-based overrides.`).option("--tax-schemes <json>", `Tax schemes to match. A context without a tax scheme never matches a rule that sets this filter. Empty means match all.`).option("--tax-territories <json>", `Tax territory country codes to match. A context without a tax territory never matches a rule that sets this filter. Empty means match all.`).option("--tax-rate-classes <json>", `Tax rate classes to match. A context without a tax rate class never matches a rule that sets this filter. Empty means match all.`).option("--coupon-ids <json>", `Coupon IDs to match. Empty means match all.`).option("--client-provider-ids <json>", `Client provider IDs to match. Empty means match all.`).option("--payment-method-types <json>", `Payment method types to match. Empty means match all.`).option("--bank-account-ids <json>", `Bank account IDs to match. Empty means match all.`).option("--invoice-types <json>", `Invoice kinds to match: \`invoice\` or \`document\`. Refunds and other standard invoices match as \`invoice\`. A context without an invoice, such as a PSP payout, never matches a rule that sets this filter. Empty means match all.`).option("--interval-period <value>", `Billing interval period filter (months, years, etc.).`).option("--interval-count <number>", `Billing interval count filter.`).option("--custom-property-filters <json>", `Invoice custom property filters. A rule matches only when every entry matches (AND across entries), and an entry matches when the invoice value is one of its \`values\` (any-of). Matching is strict: an invoice without a value for the property never matches. Each entry adds 10 to the \`suggested_priority\` returned by the rule defaults endpoint. Allowed on invoice_posted, invoice_settled, revenue_recognition, credit_note_created and accounting_software (invoice side) rules. An invoice_settled rule with filters cannot set \`payments_clearing_ledger_account_id\`, as PSP payouts are booked without the invoice. Empty means match all.`).option("--revenue-ledger-account-id <value>", `Revenue ledger account ID used for invoice line revenue routing. Must be a \`revenue\` account. On accounting_software rules, a \`revenue\` or \`contra_revenue\` account with entity_type invoice, an \`asset\` or \`contra_asset\` account with entity_type payment.`).option("--deferred-revenue-ledger-account-id <value>", `Deferred revenue ledger account ID used before revenue is recognized. Must be a \`liability\` account.`).option("--deferred-discount-ledger-account-id <value>", `Deferred discount ledger account ID used before discounts are recognized. Must be an \`asset\` or \`contra_liability\` account.`).option("--contra-revenue-ledger-account-id <value>", `Contra revenue ledger account ID used for amounts that reduce revenue. Must be a \`contra_revenue\` account.`).option("--discount-ledger-account-id <value>", `Discount ledger account ID used for recognized discounts. Must be a \`contra_revenue\` account.`).option("--ar-ledger-account-id <value>", `Accounts receivable ledger account ID used for invoice posting. Must be an \`asset\` account.`).option("--cash-ledger-account-id <value>", `Cash ledger account ID used for payment settlement. Must be an \`asset\` account.`).option("--payments-clearing-ledger-account-id <value>", `Payments clearing ledger account ID used while payments settle. Must be an \`asset\` account.`).option("--output-tax-ledger-account-id <value>", `Output tax ledger account ID used for tax liability. Must be a \`liability\` account.`).option("--uncollectible-debit-ledger-account-id <value>", `Ledger account ID debited when an invoice becomes uncollectible. Must be an \`asset\` account, for doubtful-receivable reclassification, or an \`expense\` account, for direct write-off.`).option("--allowance-for-doubtful-accounts-id <value>", `Allowance for doubtful accounts ledger account ID, set on credit_note_created rules. Must be a \`contra_asset\` account.`).option("--provider-fees-expense-ledger-account-id <value>", `Expense ledger account ID debited for payment provider fees when a payment settles. Must be an \`expense\` account.`).option("--payment-processing-fees-expense-ledger-account-id <value>", `Expense ledger account ID debited for payment processing fees when a payment settles. Takes precedence over \`provider_fees_expense_ledger_account_id\` when set by the same or a higher priority rule. Must be an \`expense\` account.`).option("--payment-processing-fees-revenue-ledger-account-id <value>", `Payment processing fees revenue ledger account ID, set on invoice_settled rules. Must be a \`revenue\` account.`).option("--customer-credits-ledger-account-id <value>", `Customer credits ledger account ID used for credit balances. Must be a \`liability\` account.`).option("--rev-rec-method <value>", `Revenue recognition method.`).option("--rev-rec-granularity <value>", `Recognition period granularity. Used when \`rev_rec_method\` is \`over_time\`.`).option("--rev-rec-point-in-time-basis <value>", `Date revenue is recognized on. Used when \`rev_rec_method\` is \`point_in_time\`.`).option("--discount-recognition-method <value>", `Method used to recognize discounts.`).option("--journal-id <value>", `Journal ID used to route entries in the accounting provider.`).option("--entity-type <value>", `Entity type the rule applies to.`).addHelpText("after", `
|
|
39017
39012
|
Examples:
|
|
39018
39013
|
hyperline accounting-rules create --category <category> --priority <priority>
|
|
39019
39014
|
hyperline accounting-rules create --category <category> --priority <priority> --ledger-id <ledger_id> --name <name>
|
|
@@ -39052,8 +39047,24 @@ Examples:
|
|
|
39052
39047
|
args.output_tax_ledger_account_id = opts.outputTaxLedgerAccountId;
|
|
39053
39048
|
if (opts.uncollectibleDebitLedgerAccountId !== void 0)
|
|
39054
39049
|
args.uncollectible_debit_ledger_account_id = opts.uncollectibleDebitLedgerAccountId;
|
|
39050
|
+
if (opts.allowanceForDoubtfulAccountsId !== void 0)
|
|
39051
|
+
args.allowance_for_doubtful_accounts_id = opts.allowanceForDoubtfulAccountsId;
|
|
39052
|
+
if (opts.providerFeesExpenseLedgerAccountId !== void 0)
|
|
39053
|
+
args.provider_fees_expense_ledger_account_id = opts.providerFeesExpenseLedgerAccountId;
|
|
39054
|
+
if (opts.paymentProcessingFeesExpenseLedgerAccountId !== void 0)
|
|
39055
|
+
args.payment_processing_fees_expense_ledger_account_id = opts.paymentProcessingFeesExpenseLedgerAccountId;
|
|
39056
|
+
if (opts.paymentProcessingFeesRevenueLedgerAccountId !== void 0)
|
|
39057
|
+
args.payment_processing_fees_revenue_ledger_account_id = opts.paymentProcessingFeesRevenueLedgerAccountId;
|
|
39055
39058
|
if (opts.customerCreditsLedgerAccountId !== void 0)
|
|
39056
39059
|
args.customer_credits_ledger_account_id = opts.customerCreditsLedgerAccountId;
|
|
39060
|
+
if (opts.revRecMethod !== void 0)
|
|
39061
|
+
args.rev_rec_method = opts.revRecMethod;
|
|
39062
|
+
if (opts.revRecGranularity !== void 0)
|
|
39063
|
+
args.rev_rec_granularity = opts.revRecGranularity;
|
|
39064
|
+
if (opts.revRecPointInTimeBasis !== void 0)
|
|
39065
|
+
args.rev_rec_point_in_time_basis = opts.revRecPointInTimeBasis;
|
|
39066
|
+
if (opts.discountRecognitionMethod !== void 0)
|
|
39067
|
+
args.discount_recognition_method = opts.discountRecognitionMethod;
|
|
39057
39068
|
if (opts.journalId !== void 0)
|
|
39058
39069
|
args.journal_id = opts.journalId;
|
|
39059
39070
|
if (opts.entityType !== void 0)
|
|
@@ -39072,12 +39083,22 @@ Examples:
|
|
|
39072
39083
|
args.currencies = JSON.parse(opts.currencies);
|
|
39073
39084
|
if (opts.countries !== void 0)
|
|
39074
39085
|
args.countries = JSON.parse(opts.countries);
|
|
39086
|
+
if (opts.taxSchemes !== void 0)
|
|
39087
|
+
args.tax_schemes = JSON.parse(opts.taxSchemes);
|
|
39088
|
+
if (opts.taxTerritories !== void 0)
|
|
39089
|
+
args.tax_territories = JSON.parse(opts.taxTerritories);
|
|
39090
|
+
if (opts.taxRateClasses !== void 0)
|
|
39091
|
+
args.tax_rate_classes = JSON.parse(opts.taxRateClasses);
|
|
39075
39092
|
if (opts.couponIds !== void 0)
|
|
39076
39093
|
args.coupon_ids = JSON.parse(opts.couponIds);
|
|
39077
39094
|
if (opts.clientProviderIds !== void 0)
|
|
39078
39095
|
args.client_provider_ids = JSON.parse(opts.clientProviderIds);
|
|
39079
39096
|
if (opts.paymentMethodTypes !== void 0)
|
|
39080
39097
|
args.payment_method_types = JSON.parse(opts.paymentMethodTypes);
|
|
39098
|
+
if (opts.bankAccountIds !== void 0)
|
|
39099
|
+
args.bank_account_ids = JSON.parse(opts.bankAccountIds);
|
|
39100
|
+
if (opts.invoiceTypes !== void 0)
|
|
39101
|
+
args.invoice_types = JSON.parse(opts.invoiceTypes);
|
|
39081
39102
|
if (opts.customPropertyFilters !== void 0)
|
|
39082
39103
|
args.custom_property_filters = JSON.parse(opts.customPropertyFilters);
|
|
39083
39104
|
await ctx.execute({
|
|
@@ -39087,7 +39108,7 @@ Examples:
|
|
|
39087
39108
|
queryParamKeys: []
|
|
39088
39109
|
});
|
|
39089
39110
|
});
|
|
39090
|
-
resource.command("update").description(`Update an existing accounting rule.`).requiredOption("--id <value>", `id parameter`).option("--name <value>", `Optional user-defined name for the rule.`).option("--category <value>", `Rule category. Cannot be changed after creation, must match the current category when sent.`).option("--priority <number>", `Override order. Higher priority wins when multiple rules match.`).option("--product-ids <json>", `Product IDs to match. Empty means match all.`).option("--product-types <json>", `Product types to match. Allowed values: flat_fee, dynamic, seat, credit. Empty means match all.`).option("--customer-ids <json>", `Customer IDs for customer-specific overrides.`).option("--currencies <json>", `Currency codes to match (e.g. EUR, USD).`).option("--countries <json>", `Country codes for jurisdiction-based overrides.`).option("--coupon-ids <json>", `Coupon IDs to match. Empty means match all.`).option("--client-provider-ids <json>", `Client provider IDs to match. Empty means match all.`).option("--payment-method-types <json>", `Payment method types to match. Empty means match all.`).option("--interval-period <value>", `Billing interval period filter (
|
|
39111
|
+
resource.command("update").description(`Update an existing accounting rule, with the filters, accounts and required fields the rule editor applies to its category.`).requiredOption("--id <value>", `id parameter`).option("--name <value>", `Optional user-defined name for the rule.`).option("--category <value>", `Rule category. Cannot be changed after creation, must match the current category when sent.`).option("--priority <number>", `Override order. Higher priority wins when multiple rules match.`).option("--product-ids <json>", `Product IDs to match. Empty means match all.`).option("--product-types <json>", `Product types to match. Allowed values: flat_fee, dynamic, seat, credit. Empty means match all.`).option("--customer-ids <json>", `Customer IDs for customer-specific overrides.`).option("--currencies <json>", `Currency codes to match (e.g. EUR, USD).`).option("--countries <json>", `Country codes for jurisdiction-based overrides.`).option("--tax-schemes <json>", `Tax schemes to match. A context without a tax scheme never matches a rule that sets this filter. Empty means match all.`).option("--tax-territories <json>", `Tax territory country codes to match. A context without a tax territory never matches a rule that sets this filter. Empty means match all.`).option("--tax-rate-classes <json>", `Tax rate classes to match. A context without a tax rate class never matches a rule that sets this filter. Empty means match all.`).option("--coupon-ids <json>", `Coupon IDs to match. Empty means match all.`).option("--client-provider-ids <json>", `Client provider IDs to match. Empty means match all.`).option("--payment-method-types <json>", `Payment method types to match. Empty means match all.`).option("--bank-account-ids <json>", `Bank account IDs to match. Empty means match all.`).option("--invoice-types <json>", `Invoice kinds to match: \`invoice\` or \`document\`. Refunds and other standard invoices match as \`invoice\`. A context without an invoice, such as a PSP payout, never matches a rule that sets this filter. Empty means match all.`).option("--interval-period <value>", `Billing interval period filter (months, years, etc.).`).option("--interval-count <number>", `Billing interval count filter.`).option("--custom-property-filters <json>", `Invoice custom property filters. A rule matches only when every entry matches (AND across entries), and an entry matches when the invoice value is one of its \`values\` (any-of). Matching is strict: an invoice without a value for the property never matches. Each entry adds 10 to the \`suggested_priority\` returned by the rule defaults endpoint. Allowed on invoice_posted, invoice_settled, revenue_recognition, credit_note_created and accounting_software (invoice side) rules. An invoice_settled rule with filters cannot set \`payments_clearing_ledger_account_id\`, as PSP payouts are booked without the invoice. Empty means match all.`).option("--revenue-ledger-account-id <value>", `Revenue ledger account ID used for invoice line revenue routing. Must be a \`revenue\` account. On accounting_software rules, a \`revenue\` or \`contra_revenue\` account with entity_type invoice, an \`asset\` or \`contra_asset\` account with entity_type payment.`).option("--deferred-revenue-ledger-account-id <value>", `Deferred revenue ledger account ID used before revenue is recognized. Must be a \`liability\` account.`).option("--deferred-discount-ledger-account-id <value>", `Deferred discount ledger account ID used before discounts are recognized. Must be an \`asset\` or \`contra_liability\` account.`).option("--contra-revenue-ledger-account-id <value>", `Contra revenue ledger account ID used for amounts that reduce revenue. Must be a \`contra_revenue\` account.`).option("--discount-ledger-account-id <value>", `Discount ledger account ID used for recognized discounts. Must be a \`contra_revenue\` account.`).option("--ar-ledger-account-id <value>", `Accounts receivable ledger account ID used for invoice posting. Must be an \`asset\` account.`).option("--cash-ledger-account-id <value>", `Cash ledger account ID used for payment settlement. Must be an \`asset\` account.`).option("--payments-clearing-ledger-account-id <value>", `Payments clearing ledger account ID used while payments settle. Must be an \`asset\` account.`).option("--output-tax-ledger-account-id <value>", `Output tax ledger account ID used for tax liability. Must be a \`liability\` account.`).option("--uncollectible-debit-ledger-account-id <value>", `Ledger account ID debited when an invoice becomes uncollectible. Must be an \`asset\` account, for doubtful-receivable reclassification, or an \`expense\` account, for direct write-off.`).option("--allowance-for-doubtful-accounts-id <value>", `Allowance for doubtful accounts ledger account ID, set on credit_note_created rules. Must be a \`contra_asset\` account.`).option("--provider-fees-expense-ledger-account-id <value>", `Expense ledger account ID debited for payment provider fees when a payment settles. Must be an \`expense\` account.`).option("--payment-processing-fees-expense-ledger-account-id <value>", `Expense ledger account ID debited for payment processing fees when a payment settles. Takes precedence over \`provider_fees_expense_ledger_account_id\` when set by the same or a higher priority rule. Must be an \`expense\` account.`).option("--payment-processing-fees-revenue-ledger-account-id <value>", `Payment processing fees revenue ledger account ID, set on invoice_settled rules. Must be a \`revenue\` account.`).option("--customer-credits-ledger-account-id <value>", `Customer credits ledger account ID used for credit balances. Must be a \`liability\` account.`).option("--rev-rec-method <value>", `Revenue recognition method.`).option("--rev-rec-granularity <value>", `Recognition period granularity. Used when \`rev_rec_method\` is \`over_time\`.`).option("--rev-rec-point-in-time-basis <value>", `Date revenue is recognized on. Used when \`rev_rec_method\` is \`point_in_time\`.`).option("--discount-recognition-method <value>", `Method used to recognize discounts.`).option("--journal-id <value>", `Journal ID used to route entries in the accounting provider.`).option("--entity-type <value>", `Entity type the rule applies to.`).addHelpText("after", `
|
|
39091
39112
|
Examples:
|
|
39092
39113
|
hyperline accounting-rules update --id <id>
|
|
39093
39114
|
hyperline accounting-rules update --id <id> --name <name> --category <category>
|
|
@@ -39126,8 +39147,24 @@ Examples:
|
|
|
39126
39147
|
args.output_tax_ledger_account_id = opts.outputTaxLedgerAccountId;
|
|
39127
39148
|
if (opts.uncollectibleDebitLedgerAccountId !== void 0)
|
|
39128
39149
|
args.uncollectible_debit_ledger_account_id = opts.uncollectibleDebitLedgerAccountId;
|
|
39150
|
+
if (opts.allowanceForDoubtfulAccountsId !== void 0)
|
|
39151
|
+
args.allowance_for_doubtful_accounts_id = opts.allowanceForDoubtfulAccountsId;
|
|
39152
|
+
if (opts.providerFeesExpenseLedgerAccountId !== void 0)
|
|
39153
|
+
args.provider_fees_expense_ledger_account_id = opts.providerFeesExpenseLedgerAccountId;
|
|
39154
|
+
if (opts.paymentProcessingFeesExpenseLedgerAccountId !== void 0)
|
|
39155
|
+
args.payment_processing_fees_expense_ledger_account_id = opts.paymentProcessingFeesExpenseLedgerAccountId;
|
|
39156
|
+
if (opts.paymentProcessingFeesRevenueLedgerAccountId !== void 0)
|
|
39157
|
+
args.payment_processing_fees_revenue_ledger_account_id = opts.paymentProcessingFeesRevenueLedgerAccountId;
|
|
39129
39158
|
if (opts.customerCreditsLedgerAccountId !== void 0)
|
|
39130
39159
|
args.customer_credits_ledger_account_id = opts.customerCreditsLedgerAccountId;
|
|
39160
|
+
if (opts.revRecMethod !== void 0)
|
|
39161
|
+
args.rev_rec_method = opts.revRecMethod;
|
|
39162
|
+
if (opts.revRecGranularity !== void 0)
|
|
39163
|
+
args.rev_rec_granularity = opts.revRecGranularity;
|
|
39164
|
+
if (opts.revRecPointInTimeBasis !== void 0)
|
|
39165
|
+
args.rev_rec_point_in_time_basis = opts.revRecPointInTimeBasis;
|
|
39166
|
+
if (opts.discountRecognitionMethod !== void 0)
|
|
39167
|
+
args.discount_recognition_method = opts.discountRecognitionMethod;
|
|
39131
39168
|
if (opts.journalId !== void 0)
|
|
39132
39169
|
args.journal_id = opts.journalId;
|
|
39133
39170
|
if (opts.entityType !== void 0)
|
|
@@ -39146,12 +39183,22 @@ Examples:
|
|
|
39146
39183
|
args.currencies = JSON.parse(opts.currencies);
|
|
39147
39184
|
if (opts.countries !== void 0)
|
|
39148
39185
|
args.countries = JSON.parse(opts.countries);
|
|
39186
|
+
if (opts.taxSchemes !== void 0)
|
|
39187
|
+
args.tax_schemes = JSON.parse(opts.taxSchemes);
|
|
39188
|
+
if (opts.taxTerritories !== void 0)
|
|
39189
|
+
args.tax_territories = JSON.parse(opts.taxTerritories);
|
|
39190
|
+
if (opts.taxRateClasses !== void 0)
|
|
39191
|
+
args.tax_rate_classes = JSON.parse(opts.taxRateClasses);
|
|
39149
39192
|
if (opts.couponIds !== void 0)
|
|
39150
39193
|
args.coupon_ids = JSON.parse(opts.couponIds);
|
|
39151
39194
|
if (opts.clientProviderIds !== void 0)
|
|
39152
39195
|
args.client_provider_ids = JSON.parse(opts.clientProviderIds);
|
|
39153
39196
|
if (opts.paymentMethodTypes !== void 0)
|
|
39154
39197
|
args.payment_method_types = JSON.parse(opts.paymentMethodTypes);
|
|
39198
|
+
if (opts.bankAccountIds !== void 0)
|
|
39199
|
+
args.bank_account_ids = JSON.parse(opts.bankAccountIds);
|
|
39200
|
+
if (opts.invoiceTypes !== void 0)
|
|
39201
|
+
args.invoice_types = JSON.parse(opts.invoiceTypes);
|
|
39155
39202
|
if (opts.customPropertyFilters !== void 0)
|
|
39156
39203
|
args.custom_property_filters = JSON.parse(opts.customPropertyFilters);
|
|
39157
39204
|
await ctx.execute({
|
|
@@ -39187,7 +39234,7 @@ Examples:
|
|
|
39187
39234
|
queryParamKeys: []
|
|
39188
39235
|
});
|
|
39189
39236
|
});
|
|
39190
|
-
resource.command("resolve").description(`Preview which account codes would be resolved for a given context.`).requiredOption("--ledger-id <value>", `Identifier of the ledger this rule belongs to.`).requiredOption("--category <value>", `Rule category (e.g. accounting_software, invoice_posted).`).option("--product-id <value>", `Product ID to resolve against.`).option("--product-type <value>", `Product type to resolve against.`).option("--currency <value>", `Currency code to resolve against.`).option("--country <value>", `Country code to resolve against.`).option("--customer-id <value>", `Customer ID to resolve against.`).option("--invoice-type <value>", `Invoice kind to resolve against. Accepts \`invoice\` or \`document\`; any other invoice kind is matched as \`invoice\`.`).option("--interval-period <value>", `Billing interval period filter (
|
|
39237
|
+
resource.command("resolve").description(`Preview which account codes would be resolved for a given context.`).requiredOption("--ledger-id <value>", `Identifier of the ledger this rule belongs to.`).requiredOption("--category <value>", `Rule category (e.g. accounting_software, invoice_posted).`).option("--product-id <value>", `Product ID to resolve against.`).option("--product-type <value>", `Product type to resolve against.`).option("--currency <value>", `Currency code to resolve against.`).option("--country <value>", `Country code to resolve against.`).option("--tax-scheme <value>", `Tax scheme to resolve against.`).option("--tax-territory <value>", `Tax territory country code to resolve against.`).option("--tax-rate-class <value>", `Tax rate class to resolve against.`).option("--customer-id <value>", `Customer ID to resolve against.`).option("--coupon-id <value>", `Coupon ID to resolve against.`).option("--client-provider-id <value>", `Client provider ID to resolve against.`).option("--payment-method-type <value>", `Payment method type to resolve against.`).option("--bank-account-id <value>", `Bank account ID to resolve against.`).option("--invoice-type <value>", `Invoice kind to resolve against. Accepts \`invoice\` or \`document\`; any other invoice kind is matched as \`invoice\`.`).option("--interval-period <value>", `Billing interval period filter (months, years, etc.).`).option("--interval-count <number>", `Billing interval count filter.`).option("--custom-properties <json>", `Invoice custom property values to resolve against, keyed by custom property slug. Unknown slugs and null values are ignored. Rules with custom property filters never match without them.`).addHelpText("after", `
|
|
39191
39238
|
Examples:
|
|
39192
39239
|
hyperline accounting-rules resolve --ledger-id <ledger_id> --category <category>
|
|
39193
39240
|
hyperline accounting-rules resolve --ledger-id <ledger_id> --category <category> --product-id <product_id> --product-type <product_type>
|
|
@@ -39210,8 +39257,22 @@ Examples:
|
|
|
39210
39257
|
args.currency = opts.currency;
|
|
39211
39258
|
if (opts.country !== void 0)
|
|
39212
39259
|
args.country = opts.country;
|
|
39260
|
+
if (opts.taxScheme !== void 0)
|
|
39261
|
+
args.tax_scheme = opts.taxScheme;
|
|
39262
|
+
if (opts.taxTerritory !== void 0)
|
|
39263
|
+
args.tax_territory = opts.taxTerritory;
|
|
39264
|
+
if (opts.taxRateClass !== void 0)
|
|
39265
|
+
args.tax_rate_class = opts.taxRateClass;
|
|
39213
39266
|
if (opts.customerId !== void 0)
|
|
39214
39267
|
args.customer_id = opts.customerId;
|
|
39268
|
+
if (opts.couponId !== void 0)
|
|
39269
|
+
args.coupon_id = opts.couponId;
|
|
39270
|
+
if (opts.clientProviderId !== void 0)
|
|
39271
|
+
args.client_provider_id = opts.clientProviderId;
|
|
39272
|
+
if (opts.paymentMethodType !== void 0)
|
|
39273
|
+
args.payment_method_type = opts.paymentMethodType;
|
|
39274
|
+
if (opts.bankAccountId !== void 0)
|
|
39275
|
+
args.bank_account_id = opts.bankAccountId;
|
|
39215
39276
|
if (opts.invoiceType !== void 0)
|
|
39216
39277
|
args.invoice_type = opts.invoiceType;
|
|
39217
39278
|
if (opts.intervalPeriod !== void 0)
|
|
@@ -39524,7 +39585,7 @@ Examples:
|
|
|
39524
39585
|
|
|
39525
39586
|
// build/commands/generated/ai-billing.js
|
|
39526
39587
|
function registerAi_BillingCommands(parent) {
|
|
39527
|
-
const resource = parent.command("ai-billing").description("Manage ai billing");
|
|
39588
|
+
const resource = parent.command("ai-billing").description("Manage ai > billing");
|
|
39528
39589
|
resource.command("list-agent-plans").description(`List AI agent billing plans: workspace-level offers carrying a billing mode (wallet/credits/windows), rate card, allowance windows, markups and per-seat credit grants. Filter by mode; paginated with take/skip.`).option("--mode <value>", `Billing mode.
|
|
39529
39590
|
|
|
39530
39591
|
- wallet: Charges a monetary wallet.
|
|
@@ -39547,7 +39608,7 @@ Examples:
|
|
|
39547
39608
|
args.skip = Number(opts.skip);
|
|
39548
39609
|
await ctx.execute({
|
|
39549
39610
|
method: "GET",
|
|
39550
|
-
path: "/v1/ai
|
|
39611
|
+
path: "/v1/ai/billing/plans",
|
|
39551
39612
|
args,
|
|
39552
39613
|
queryParamKeys: ["mode", "take", "skip"]
|
|
39553
39614
|
});
|
|
@@ -39598,39 +39659,32 @@ Examples:
|
|
|
39598
39659
|
args.windows = JSON.parse(opts.windows);
|
|
39599
39660
|
await ctx.execute({
|
|
39600
39661
|
method: "POST",
|
|
39601
|
-
path: "/v1/ai
|
|
39662
|
+
path: "/v1/ai/billing/plans",
|
|
39602
39663
|
args,
|
|
39603
39664
|
queryParamKeys: []
|
|
39604
39665
|
});
|
|
39605
39666
|
});
|
|
39606
|
-
resource.command("get-agent-plan").description(`Get
|
|
39667
|
+
resource.command("get-agent-default-plan").description(`Get the workspace's default AI agent billing plan marker (plan id and auto_apply flag). 404 when none is set.`).addHelpText("after", `
|
|
39607
39668
|
Examples:
|
|
39608
|
-
hyperline ai-billing get-agent-plan
|
|
39669
|
+
hyperline ai-billing get-agent-default-plan`).action(async (_opts) => {
|
|
39609
39670
|
const ctx = resource.parent?.opts()._ctx;
|
|
39610
39671
|
if (!ctx) {
|
|
39611
39672
|
process.stderr.write("Error: Not authenticated\n");
|
|
39612
39673
|
process.exit(1);
|
|
39613
39674
|
}
|
|
39614
39675
|
const args = {};
|
|
39615
|
-
if (opts.planId !== void 0)
|
|
39616
|
-
args.plan_id = opts.planId;
|
|
39617
39676
|
await ctx.execute({
|
|
39618
39677
|
method: "GET",
|
|
39619
|
-
path: "/v1/ai
|
|
39678
|
+
path: "/v1/ai/billing/plans/default",
|
|
39620
39679
|
args,
|
|
39621
39680
|
queryParamKeys: []
|
|
39622
39681
|
});
|
|
39623
39682
|
});
|
|
39624
|
-
resource.command("
|
|
39625
|
-
|
|
39626
|
-
- refuse: Rejects the call that crosses the boundary without deducting usage.
|
|
39627
|
-
- metered: Prices the whole call as monetary overage, using the overage card or USD provider cost plus markup.`).option("--markup-percent <value>", `Percentage added to resolved cost. Null on writes means no override; an attached plan may supply the value.`).option("--overage-markup-percent <value>", `Percentage added to provider cost for overage. Mutually exclusive with overage_rate_card_id.`).option("--overage-rate-card-id <value>", `Currency rate card used to price overage directly. Null means provider cost plus the resolved overage markup.`).option("--windows <json>", `Rolling allowances. Required for windows plans; each window meters every call. A plan replacement replaces the entire array.`).option("--per-seat-credits <value>", `Credits granted per seat per billing period. Null grants no credits.`).option("--grant-rollover-enabled", `Whether granted credits survive renewal. Purchased credits always roll over.`).option("--settlement-interval-minutes <number>", `Settlement interval in minutes. Null means no interval override. Mutually exclusive with settlement_schedule.`).option("--settlement-schedule <value>", `Calendar settlement schedule. Null clears the override; mutually exclusive with settlement_interval_minutes.
|
|
39628
|
-
|
|
39629
|
-
- calendar_month: Settles at the end of each UTC calendar month.`).addHelpText("after", `
|
|
39683
|
+
resource.command("set-agent-default-plan").description(`Mark one plan as the workspace's default AI agent billing plan (body: plan_id, optional auto_apply). Replaces the previous marker; 404 when the plan is not this workspace's.`).requiredOption("--plan-id <value>", `Billing plan reference. On policy writes, omission preserves the current plan and null detaches it.`).option("--auto-apply", `Whether eligible newly ingested customers receive the default plan automatically.`).addHelpText("after", `
|
|
39630
39684
|
Examples:
|
|
39631
|
-
hyperline ai-billing
|
|
39632
|
-
hyperline ai-billing
|
|
39633
|
-
hyperline ai-billing
|
|
39685
|
+
hyperline ai-billing set-agent-default-plan --plan-id <plan_id>
|
|
39686
|
+
hyperline ai-billing set-agent-default-plan --plan-id <plan_id> --auto-apply
|
|
39687
|
+
hyperline ai-billing set-agent-default-plan --plan-id <plan_id> --output json`).action(async (opts) => {
|
|
39634
39688
|
const ctx = resource.parent?.opts()._ctx;
|
|
39635
39689
|
if (!ctx) {
|
|
39636
39690
|
process.stderr.write("Error: Not authenticated\n");
|
|
@@ -39639,47 +39693,25 @@ Examples:
|
|
|
39639
39693
|
const args = {};
|
|
39640
39694
|
if (opts.planId !== void 0)
|
|
39641
39695
|
args.plan_id = opts.planId;
|
|
39642
|
-
if (opts.
|
|
39643
|
-
args.
|
|
39644
|
-
if (opts.rateCardId !== void 0)
|
|
39645
|
-
args.rate_card_id = opts.rateCardId;
|
|
39646
|
-
if (opts.overageMode !== void 0)
|
|
39647
|
-
args.overage_mode = opts.overageMode;
|
|
39648
|
-
if (opts.markupPercent !== void 0)
|
|
39649
|
-
args.markup_percent = opts.markupPercent;
|
|
39650
|
-
if (opts.overageMarkupPercent !== void 0)
|
|
39651
|
-
args.overage_markup_percent = opts.overageMarkupPercent;
|
|
39652
|
-
if (opts.overageRateCardId !== void 0)
|
|
39653
|
-
args.overage_rate_card_id = opts.overageRateCardId;
|
|
39654
|
-
if (opts.perSeatCredits !== void 0)
|
|
39655
|
-
args.per_seat_credits = opts.perSeatCredits;
|
|
39656
|
-
if (opts.settlementSchedule !== void 0)
|
|
39657
|
-
args.settlement_schedule = opts.settlementSchedule;
|
|
39658
|
-
if (opts.settlementIntervalMinutes !== void 0)
|
|
39659
|
-
args.settlement_interval_minutes = Number(opts.settlementIntervalMinutes);
|
|
39660
|
-
if (opts.grantRolloverEnabled !== void 0)
|
|
39661
|
-
args.grant_rollover_enabled = true;
|
|
39662
|
-
if (opts.windows !== void 0)
|
|
39663
|
-
args.windows = JSON.parse(opts.windows);
|
|
39696
|
+
if (opts.autoApply !== void 0)
|
|
39697
|
+
args.auto_apply = true;
|
|
39664
39698
|
await ctx.execute({
|
|
39665
39699
|
method: "PUT",
|
|
39666
|
-
path: "/v1/ai
|
|
39700
|
+
path: "/v1/ai/billing/plans/default",
|
|
39667
39701
|
args,
|
|
39668
39702
|
queryParamKeys: []
|
|
39669
39703
|
});
|
|
39670
39704
|
});
|
|
39671
|
-
resource.command("
|
|
39705
|
+
resource.command("clear-agent-default-plan").description(`Clear the workspace's default AI agent billing plan marker. The plan itself is untouched. 404 when none is set.`).option("--yes", "Skip confirmation").addHelpText("after", `
|
|
39672
39706
|
Examples:
|
|
39673
|
-
hyperline ai-billing
|
|
39674
|
-
hyperline ai-billing
|
|
39707
|
+
hyperline ai-billing clear-agent-default-plan
|
|
39708
|
+
hyperline ai-billing clear-agent-default-plan --output json`).action(async (opts) => {
|
|
39675
39709
|
const ctx = resource.parent?.opts()._ctx;
|
|
39676
39710
|
if (!ctx) {
|
|
39677
39711
|
process.stderr.write("Error: Not authenticated\n");
|
|
39678
39712
|
process.exit(1);
|
|
39679
39713
|
}
|
|
39680
39714
|
const args = {};
|
|
39681
|
-
if (opts.planId !== void 0)
|
|
39682
|
-
args.plan_id = opts.planId;
|
|
39683
39715
|
if (!opts.yes) {
|
|
39684
39716
|
const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
|
|
39685
39717
|
if (!confirmed) {
|
|
@@ -39689,59 +39721,88 @@ Examples:
|
|
|
39689
39721
|
}
|
|
39690
39722
|
await ctx.execute({
|
|
39691
39723
|
method: "DELETE",
|
|
39692
|
-
path: "/v1/ai
|
|
39724
|
+
path: "/v1/ai/billing/plans/default",
|
|
39693
39725
|
args,
|
|
39694
39726
|
queryParamKeys: []
|
|
39695
39727
|
});
|
|
39696
39728
|
});
|
|
39697
|
-
resource.command("get-agent-
|
|
39729
|
+
resource.command("get-agent-plan").description(`Get one AI agent billing plan by id, with its embedded rate card, window definitions, markups, per-seat grants and minted catalog object ids.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
|
|
39698
39730
|
Examples:
|
|
39699
|
-
hyperline ai-billing get-agent-
|
|
39731
|
+
hyperline ai-billing get-agent-plan --id <id>`).action(async (opts) => {
|
|
39700
39732
|
const ctx = resource.parent?.opts()._ctx;
|
|
39701
39733
|
if (!ctx) {
|
|
39702
39734
|
process.stderr.write("Error: Not authenticated\n");
|
|
39703
39735
|
process.exit(1);
|
|
39704
39736
|
}
|
|
39705
39737
|
const args = {};
|
|
39738
|
+
if (opts.id !== void 0)
|
|
39739
|
+
args.id = opts.id;
|
|
39706
39740
|
await ctx.execute({
|
|
39707
39741
|
method: "GET",
|
|
39708
|
-
path: "/v1/ai
|
|
39742
|
+
path: "/v1/ai/billing/plans/{id}",
|
|
39709
39743
|
args,
|
|
39710
39744
|
queryParamKeys: []
|
|
39711
39745
|
});
|
|
39712
39746
|
});
|
|
39713
|
-
resource.command("
|
|
39747
|
+
resource.command("replace-agent-plan").description(`Replace an AI agent billing plan (whole-row semantics). Changes take effect on the next call for every customer on the plan; mode is immutable. Overage is priced by overage_markup_percent or by overage_rate_card_id, never both.`).requiredOption("--id <value>", `id parameter`).requiredOption("--name <value>", `Human-readable resource name.`).option("--rate-card-id <value>", `Rate card reference. On policy writes, omission preserves the current reference and null detaches it; on plan replacement omission clears it.`).option("--overage-mode <value>", `Behavior when credits or an allowance are exhausted. Policy values may inherit the attached plan.
|
|
39748
|
+
|
|
39749
|
+
- refuse: Rejects the call that crosses the boundary without deducting usage.
|
|
39750
|
+
- metered: Prices the whole call as monetary overage, using the overage card or USD provider cost plus markup.`).option("--markup-percent <value>", `Percentage added to resolved cost. Null on writes means no override; an attached plan may supply the value.`).option("--overage-markup-percent <value>", `Percentage added to provider cost for overage. Mutually exclusive with overage_rate_card_id.`).option("--overage-rate-card-id <value>", `Currency rate card used to price overage directly. Null means provider cost plus the resolved overage markup.`).option("--windows <json>", `Rolling allowances. Required for windows plans; each window meters every call. A plan replacement replaces the entire array.`).option("--per-seat-credits <value>", `Credits granted per seat per billing period. Null grants no credits.`).option("--grant-rollover-enabled", `Whether granted credits survive renewal. Purchased credits always roll over.`).option("--settlement-interval-minutes <number>", `Settlement interval in minutes. Null means no interval override. Mutually exclusive with settlement_schedule.`).option("--settlement-schedule <value>", `Calendar settlement schedule. Null clears the override; mutually exclusive with settlement_interval_minutes.
|
|
39751
|
+
|
|
39752
|
+
- calendar_month: Settles at the end of each UTC calendar month.`).addHelpText("after", `
|
|
39714
39753
|
Examples:
|
|
39715
|
-
hyperline ai-billing
|
|
39716
|
-
hyperline ai-billing
|
|
39717
|
-
hyperline ai-billing
|
|
39754
|
+
hyperline ai-billing replace-agent-plan --id <id> --name <name>
|
|
39755
|
+
hyperline ai-billing replace-agent-plan --id <id> --name <name> --rate-card-id <rate_card_id> --overage-mode <overage_mode>
|
|
39756
|
+
hyperline ai-billing replace-agent-plan --id <id> --name <name> --output json`).action(async (opts) => {
|
|
39718
39757
|
const ctx = resource.parent?.opts()._ctx;
|
|
39719
39758
|
if (!ctx) {
|
|
39720
39759
|
process.stderr.write("Error: Not authenticated\n");
|
|
39721
39760
|
process.exit(1);
|
|
39722
39761
|
}
|
|
39723
39762
|
const args = {};
|
|
39724
|
-
if (opts.
|
|
39725
|
-
args.
|
|
39726
|
-
if (opts.
|
|
39727
|
-
args.
|
|
39763
|
+
if (opts.id !== void 0)
|
|
39764
|
+
args.id = opts.id;
|
|
39765
|
+
if (opts.name !== void 0)
|
|
39766
|
+
args.name = opts.name;
|
|
39767
|
+
if (opts.rateCardId !== void 0)
|
|
39768
|
+
args.rate_card_id = opts.rateCardId;
|
|
39769
|
+
if (opts.overageMode !== void 0)
|
|
39770
|
+
args.overage_mode = opts.overageMode;
|
|
39771
|
+
if (opts.markupPercent !== void 0)
|
|
39772
|
+
args.markup_percent = opts.markupPercent;
|
|
39773
|
+
if (opts.overageMarkupPercent !== void 0)
|
|
39774
|
+
args.overage_markup_percent = opts.overageMarkupPercent;
|
|
39775
|
+
if (opts.overageRateCardId !== void 0)
|
|
39776
|
+
args.overage_rate_card_id = opts.overageRateCardId;
|
|
39777
|
+
if (opts.perSeatCredits !== void 0)
|
|
39778
|
+
args.per_seat_credits = opts.perSeatCredits;
|
|
39779
|
+
if (opts.settlementSchedule !== void 0)
|
|
39780
|
+
args.settlement_schedule = opts.settlementSchedule;
|
|
39781
|
+
if (opts.settlementIntervalMinutes !== void 0)
|
|
39782
|
+
args.settlement_interval_minutes = Number(opts.settlementIntervalMinutes);
|
|
39783
|
+
if (opts.grantRolloverEnabled !== void 0)
|
|
39784
|
+
args.grant_rollover_enabled = true;
|
|
39785
|
+
if (opts.windows !== void 0)
|
|
39786
|
+
args.windows = JSON.parse(opts.windows);
|
|
39728
39787
|
await ctx.execute({
|
|
39729
39788
|
method: "PUT",
|
|
39730
|
-
path: "/v1/ai
|
|
39789
|
+
path: "/v1/ai/billing/plans/{id}",
|
|
39731
39790
|
args,
|
|
39732
39791
|
queryParamKeys: []
|
|
39733
39792
|
});
|
|
39734
39793
|
});
|
|
39735
|
-
resource.command("
|
|
39794
|
+
resource.command("delete-agent-plan").description(`Delete an AI agent billing plan. Refused (409, plan_in_use) while any customer is still attached to it.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
|
|
39736
39795
|
Examples:
|
|
39737
|
-
hyperline ai-billing
|
|
39738
|
-
hyperline ai-billing
|
|
39796
|
+
hyperline ai-billing delete-agent-plan --id <id>
|
|
39797
|
+
hyperline ai-billing delete-agent-plan --id <id> --output json`).action(async (opts) => {
|
|
39739
39798
|
const ctx = resource.parent?.opts()._ctx;
|
|
39740
39799
|
if (!ctx) {
|
|
39741
39800
|
process.stderr.write("Error: Not authenticated\n");
|
|
39742
39801
|
process.exit(1);
|
|
39743
39802
|
}
|
|
39744
39803
|
const args = {};
|
|
39804
|
+
if (opts.id !== void 0)
|
|
39805
|
+
args.id = opts.id;
|
|
39745
39806
|
if (!opts.yes) {
|
|
39746
39807
|
const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
|
|
39747
39808
|
if (!confirmed) {
|
|
@@ -39751,7 +39812,7 @@ Examples:
|
|
|
39751
39812
|
}
|
|
39752
39813
|
await ctx.execute({
|
|
39753
39814
|
method: "DELETE",
|
|
39754
|
-
path: "/v1/ai
|
|
39815
|
+
path: "/v1/ai/billing/plans/{id}",
|
|
39755
39816
|
args,
|
|
39756
39817
|
queryParamKeys: []
|
|
39757
39818
|
});
|
|
@@ -39782,7 +39843,7 @@ Examples:
|
|
|
39782
39843
|
args.skip = Number(opts.skip);
|
|
39783
39844
|
await ctx.execute({
|
|
39784
39845
|
method: "GET",
|
|
39785
|
-
path: "/v1/ai
|
|
39846
|
+
path: "/v1/ai/billing/rate-cards",
|
|
39786
39847
|
args,
|
|
39787
39848
|
queryParamKeys: ["denomination", "currency", "search", "take", "skip"]
|
|
39788
39849
|
});
|
|
@@ -39814,42 +39875,42 @@ Examples:
|
|
|
39814
39875
|
args.rows = JSON.parse(opts.rows);
|
|
39815
39876
|
await ctx.execute({
|
|
39816
39877
|
method: "POST",
|
|
39817
|
-
path: "/v1/ai
|
|
39878
|
+
path: "/v1/ai/billing/rate-cards",
|
|
39818
39879
|
args,
|
|
39819
39880
|
queryParamKeys: []
|
|
39820
39881
|
});
|
|
39821
39882
|
});
|
|
39822
|
-
resource.command("get-agent-rate-card").description(`Get one AI rate card by id with all its pricing rows and usage counts (plans, policies, credit product).`).requiredOption("--
|
|
39883
|
+
resource.command("get-agent-rate-card").description(`Get one AI rate card by id with all its pricing rows and usage counts (plans, policies, credit product).`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
|
|
39823
39884
|
Examples:
|
|
39824
|
-
hyperline ai-billing get-agent-rate-card --
|
|
39885
|
+
hyperline ai-billing get-agent-rate-card --id <id>`).action(async (opts) => {
|
|
39825
39886
|
const ctx = resource.parent?.opts()._ctx;
|
|
39826
39887
|
if (!ctx) {
|
|
39827
39888
|
process.stderr.write("Error: Not authenticated\n");
|
|
39828
39889
|
process.exit(1);
|
|
39829
39890
|
}
|
|
39830
39891
|
const args = {};
|
|
39831
|
-
if (opts.
|
|
39832
|
-
args.
|
|
39892
|
+
if (opts.id !== void 0)
|
|
39893
|
+
args.id = opts.id;
|
|
39833
39894
|
await ctx.execute({
|
|
39834
39895
|
method: "GET",
|
|
39835
|
-
path: "/v1/ai
|
|
39896
|
+
path: "/v1/ai/billing/rate-cards/{id}",
|
|
39836
39897
|
args,
|
|
39837
39898
|
queryParamKeys: []
|
|
39838
39899
|
});
|
|
39839
39900
|
});
|
|
39840
|
-
resource.command("replace-agent-rate-card").description(`Replace an AI rate card's rows, name
|
|
39901
|
+
resource.command("replace-agent-rate-card").description(`Replace an AI rate card's rows, name and USD fallback (whole-card semantics). Denomination and currency are immutable.`).requiredOption("--id <value>", `id parameter`).requiredOption("--name <value>", `Human-readable resource name.`).option("--fallback-per-usd <value>", `Credits, allowance units, or major currency units per USD of provider cost. Null leaves unmatched usage unpriced.`).requiredOption("--rows <json>", `All pricing rows on the card; replacement replaces the complete list.`).addHelpText("after", `
|
|
39841
39902
|
Examples:
|
|
39842
|
-
hyperline ai-billing replace-agent-rate-card --
|
|
39843
|
-
hyperline ai-billing replace-agent-rate-card --
|
|
39844
|
-
hyperline ai-billing replace-agent-rate-card --
|
|
39903
|
+
hyperline ai-billing replace-agent-rate-card --id <id> --name <name> --rows <rows>
|
|
39904
|
+
hyperline ai-billing replace-agent-rate-card --id <id> --name <name> --rows <rows> --fallback-per-usd <fallback_per_usd>
|
|
39905
|
+
hyperline ai-billing replace-agent-rate-card --id <id> --name <name> --rows <rows> --output json`).action(async (opts) => {
|
|
39845
39906
|
const ctx = resource.parent?.opts()._ctx;
|
|
39846
39907
|
if (!ctx) {
|
|
39847
39908
|
process.stderr.write("Error: Not authenticated\n");
|
|
39848
39909
|
process.exit(1);
|
|
39849
39910
|
}
|
|
39850
39911
|
const args = {};
|
|
39851
|
-
if (opts.
|
|
39852
|
-
args.
|
|
39912
|
+
if (opts.id !== void 0)
|
|
39913
|
+
args.id = opts.id;
|
|
39853
39914
|
if (opts.name !== void 0)
|
|
39854
39915
|
args.name = opts.name;
|
|
39855
39916
|
if (opts.fallbackPerUsd !== void 0)
|
|
@@ -39858,23 +39919,23 @@ Examples:
|
|
|
39858
39919
|
args.rows = JSON.parse(opts.rows);
|
|
39859
39920
|
await ctx.execute({
|
|
39860
39921
|
method: "PUT",
|
|
39861
|
-
path: "/v1/ai
|
|
39922
|
+
path: "/v1/ai/billing/rate-cards/{id}",
|
|
39862
39923
|
args,
|
|
39863
39924
|
queryParamKeys: []
|
|
39864
39925
|
});
|
|
39865
39926
|
});
|
|
39866
|
-
resource.command("delete-agent-rate-card").description(`Delete an AI rate card. Refused (409, rate_card_in_use) while any plan, credit product or customer policy still uses it.`).requiredOption("--
|
|
39927
|
+
resource.command("delete-agent-rate-card").description(`Delete an AI rate card. Refused (409, rate_card_in_use) while any plan, credit product or customer policy still uses it.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
|
|
39867
39928
|
Examples:
|
|
39868
|
-
hyperline ai-billing delete-agent-rate-card --
|
|
39869
|
-
hyperline ai-billing delete-agent-rate-card --
|
|
39929
|
+
hyperline ai-billing delete-agent-rate-card --id <id>
|
|
39930
|
+
hyperline ai-billing delete-agent-rate-card --id <id> --output json`).action(async (opts) => {
|
|
39870
39931
|
const ctx = resource.parent?.opts()._ctx;
|
|
39871
39932
|
if (!ctx) {
|
|
39872
39933
|
process.stderr.write("Error: Not authenticated\n");
|
|
39873
39934
|
process.exit(1);
|
|
39874
39935
|
}
|
|
39875
39936
|
const args = {};
|
|
39876
|
-
if (opts.
|
|
39877
|
-
args.
|
|
39937
|
+
if (opts.id !== void 0)
|
|
39938
|
+
args.id = opts.id;
|
|
39878
39939
|
if (!opts.yes) {
|
|
39879
39940
|
const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
|
|
39880
39941
|
if (!confirmed) {
|
|
@@ -39884,139 +39945,123 @@ Examples:
|
|
|
39884
39945
|
}
|
|
39885
39946
|
await ctx.execute({
|
|
39886
39947
|
method: "DELETE",
|
|
39887
|
-
path: "/v1/ai
|
|
39948
|
+
path: "/v1/ai/billing/rate-cards/{id}",
|
|
39888
39949
|
args,
|
|
39889
39950
|
queryParamKeys: []
|
|
39890
39951
|
});
|
|
39891
39952
|
});
|
|
39892
|
-
resource.command("list-agent-
|
|
39953
|
+
resource.command("list-agent-customer-policies").description(`List all AI billing policies (scopes) for one customer: the default shared pool plus per-agent overrides. Accepts Hyperline or external customer ids.`).requiredOption("--id <value>", `id parameter`).option("--take <number>", `take`).option("--skip <number>", `skip`).addHelpText("after", `
|
|
39893
39954
|
Examples:
|
|
39894
|
-
hyperline ai-billing list-agent-
|
|
39955
|
+
hyperline ai-billing list-agent-customer-policies --id <id>
|
|
39956
|
+
hyperline ai-billing list-agent-customer-policies --id <id> --take <take>`).action(async (opts) => {
|
|
39895
39957
|
const ctx = resource.parent?.opts()._ctx;
|
|
39896
39958
|
if (!ctx) {
|
|
39897
39959
|
process.stderr.write("Error: Not authenticated\n");
|
|
39898
39960
|
process.exit(1);
|
|
39899
39961
|
}
|
|
39900
39962
|
const args = {};
|
|
39963
|
+
if (opts.id !== void 0)
|
|
39964
|
+
args.id = opts.id;
|
|
39965
|
+
if (opts.take !== void 0)
|
|
39966
|
+
args.take = Number(opts.take);
|
|
39967
|
+
if (opts.skip !== void 0)
|
|
39968
|
+
args.skip = Number(opts.skip);
|
|
39901
39969
|
await ctx.execute({
|
|
39902
39970
|
method: "GET",
|
|
39903
|
-
path: "/v1/ai
|
|
39971
|
+
path: "/v1/ai/billing/customers/{id}/policies",
|
|
39904
39972
|
args,
|
|
39905
|
-
queryParamKeys: []
|
|
39973
|
+
queryParamKeys: ["take", "skip"]
|
|
39906
39974
|
});
|
|
39907
39975
|
});
|
|
39908
|
-
resource.command("
|
|
39976
|
+
resource.command("get-default-customer-billing-policy").description(`Get the exact customer billing policy addressed by this resource; agent policies never fall back to the shared pool.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
|
|
39909
39977
|
Examples:
|
|
39910
|
-
hyperline ai-billing
|
|
39911
|
-
hyperline ai-billing list-agent-cost-catalog --enabled-only <enabled_only>`).action(async (opts) => {
|
|
39978
|
+
hyperline ai-billing get-default-customer-billing-policy --id <id>`).action(async (opts) => {
|
|
39912
39979
|
const ctx = resource.parent?.opts()._ctx;
|
|
39913
39980
|
if (!ctx) {
|
|
39914
39981
|
process.stderr.write("Error: Not authenticated\n");
|
|
39915
39982
|
process.exit(1);
|
|
39916
39983
|
}
|
|
39917
39984
|
const args = {};
|
|
39918
|
-
if (opts.
|
|
39919
|
-
args.
|
|
39985
|
+
if (opts.id !== void 0)
|
|
39986
|
+
args.id = opts.id;
|
|
39920
39987
|
await ctx.execute({
|
|
39921
39988
|
method: "GET",
|
|
39922
|
-
path: "/v1/ai
|
|
39923
|
-
args,
|
|
39924
|
-
queryParamKeys: ["enabled_only"]
|
|
39925
|
-
});
|
|
39926
|
-
});
|
|
39927
|
-
resource.command("create-agent-cost-catalog-item").description(`Create a custom AI cost item so a non-LLM vendor call is priced instead of landing unpriced at $0. provider/item must match hyperline.cost({ vendor, item }) verbatim and each dimensions[].key must match the unit the SDK sends. Re-creating an existing open item returns it unchanged (200); a pair the global registry already prices is refused \u2014 use the overrides endpoint for that.`).requiredOption("--provider <value>", `AI model provider, or the vendor of a custom cost item. This is not an integration connection.`).requiredOption("--item <value>", `Custom item name matching the usage payload.`).requiredOption("--dimensions <json>", `Additional billable dimensions; each key matches a usage_extra key and rates use the owning card's units or USD for cost-catalog dimensions.`).addHelpText("after", `
|
|
39928
|
-
Examples:
|
|
39929
|
-
hyperline ai-billing create-agent-cost-catalog-item --provider <provider> --item <item> --dimensions <dimensions>
|
|
39930
|
-
hyperline ai-billing create-agent-cost-catalog-item --provider <provider> --item <item> --dimensions <dimensions> --output json`).action(async (opts) => {
|
|
39931
|
-
const ctx = resource.parent?.opts()._ctx;
|
|
39932
|
-
if (!ctx) {
|
|
39933
|
-
process.stderr.write("Error: Not authenticated\n");
|
|
39934
|
-
process.exit(1);
|
|
39935
|
-
}
|
|
39936
|
-
const args = {};
|
|
39937
|
-
if (opts.provider !== void 0)
|
|
39938
|
-
args.provider = opts.provider;
|
|
39939
|
-
if (opts.item !== void 0)
|
|
39940
|
-
args.item = opts.item;
|
|
39941
|
-
if (opts.dimensions !== void 0)
|
|
39942
|
-
args.dimensions = JSON.parse(opts.dimensions);
|
|
39943
|
-
await ctx.execute({
|
|
39944
|
-
method: "POST",
|
|
39945
|
-
path: "/v1/ai-billing/cost-catalog/items",
|
|
39946
|
-
args,
|
|
39947
|
-
queryParamKeys: []
|
|
39948
|
-
});
|
|
39949
|
-
});
|
|
39950
|
-
resource.command("delete-agent-cost-catalog-item").description(`Close a custom AI cost item by its custom_item_id. History is kept; new calls on that pair go back to unpriced. An override id passed here is a 404.`).requiredOption("--item-id <value>", `item_id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
|
|
39951
|
-
Examples:
|
|
39952
|
-
hyperline ai-billing delete-agent-cost-catalog-item --item-id <item_id>
|
|
39953
|
-
hyperline ai-billing delete-agent-cost-catalog-item --item-id <item_id> --output json`).action(async (opts) => {
|
|
39954
|
-
const ctx = resource.parent?.opts()._ctx;
|
|
39955
|
-
if (!ctx) {
|
|
39956
|
-
process.stderr.write("Error: Not authenticated\n");
|
|
39957
|
-
process.exit(1);
|
|
39958
|
-
}
|
|
39959
|
-
const args = {};
|
|
39960
|
-
if (opts.itemId !== void 0)
|
|
39961
|
-
args.item_id = opts.itemId;
|
|
39962
|
-
if (!opts.yes) {
|
|
39963
|
-
const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
|
|
39964
|
-
if (!confirmed) {
|
|
39965
|
-
process.stdout.write("Aborted.\n");
|
|
39966
|
-
return;
|
|
39967
|
-
}
|
|
39968
|
-
}
|
|
39969
|
-
await ctx.execute({
|
|
39970
|
-
method: "DELETE",
|
|
39971
|
-
path: "/v1/ai-billing/cost-catalog/items/{item_id}",
|
|
39989
|
+
path: "/v1/ai/billing/customers/{id}/policies/default",
|
|
39972
39990
|
args,
|
|
39973
39991
|
queryParamKeys: []
|
|
39974
39992
|
});
|
|
39975
39993
|
});
|
|
39976
|
-
resource.command("upsert-
|
|
39994
|
+
resource.command("upsert-default-customer-billing-policy").description(`Replace customer billing settings while preserving omitted plan_id and rate_card_id references; null detaches them, and a shared policy enables automatic telemetry billing.`).requiredOption("--id <value>", `id parameter`).requiredOption("--mode <value>", `Billing mode.
|
|
39995
|
+
|
|
39996
|
+
- wallet: Charges a monetary wallet.
|
|
39997
|
+
- credits: Consumes a credit balance.
|
|
39998
|
+
- windows: Meters weighted units against rolling allowances.`).option("--wallet-id <value>", `Customer wallet identifier. Omit on wallet policy writes to provision or reuse the customer's wallet.`).option("--credit-product-id <value>", `Public credit product identifier whose balance this policy consumes.`).option("--markup-percent <value>", `Percentage added to resolved cost. Null on writes means no override; an attached plan may supply the value.`).option("--overage-mode <value>", `Behavior when credits or an allowance are exhausted. Policy values may inherit the attached plan.
|
|
39999
|
+
|
|
40000
|
+
- refuse: Rejects the call that crosses the boundary without deducting usage.
|
|
40001
|
+
- metered: Prices the whole call as monetary overage, using the overage card or USD provider cost plus markup.`).option("--overage-markup-percent <value>", `Percentage added to provider cost for overage. Mutually exclusive with overage_rate_card_id.`).option("--overage-rate-card-id <value>", `Currency rate card used to price overage directly. Null means provider cost plus the resolved overage markup.`).option("--overage-wallet-id <value>", `Wallet charged for overage. Null bills overage in arrears.`).option("--floor <value>", `Minimum available balance a spend check requires, in the policy's denomination.`).option("--settlement-interval-minutes <number>", `Settlement interval in minutes. Null means no interval override. Mutually exclusive with settlement_schedule.`).option("--settlement-schedule <value>", `Calendar settlement schedule. Null clears the override; mutually exclusive with settlement_interval_minutes.
|
|
40002
|
+
|
|
40003
|
+
- calendar_month: Settles at the end of each UTC calendar month.`).option("--windows <json>", `Rolling allowances. Required for windows plans; each window meters every call. A plan replacement replaces the entire array.`).option("--rate-card-id <value>", `Rate card reference. On policy writes, omission preserves the current reference and null detaches it; on plan replacement omission clears it.`).option("--plan-id <value>", `Billing plan reference. On policy writes, omission preserves the current plan and null detaches it.`).requiredOption("--blocked", `Whether spending is disabled for this billing scope.`).addHelpText("after", `
|
|
39977
40004
|
Examples:
|
|
39978
|
-
hyperline ai-billing upsert-
|
|
39979
|
-
hyperline ai-billing upsert-
|
|
39980
|
-
hyperline ai-billing upsert-
|
|
40005
|
+
hyperline ai-billing upsert-default-customer-billing-policy --id <id> --mode <mode> --blocked
|
|
40006
|
+
hyperline ai-billing upsert-default-customer-billing-policy --id <id> --mode <mode> --blocked --wallet-id <wallet_id> --credit-product-id <credit_product_id>
|
|
40007
|
+
hyperline ai-billing upsert-default-customer-billing-policy --id <id> --mode <mode> --blocked --output json`).action(async (opts) => {
|
|
39981
40008
|
const ctx = resource.parent?.opts()._ctx;
|
|
39982
40009
|
if (!ctx) {
|
|
39983
40010
|
process.stderr.write("Error: Not authenticated\n");
|
|
39984
40011
|
process.exit(1);
|
|
39985
40012
|
}
|
|
39986
40013
|
const args = {};
|
|
39987
|
-
if (opts.
|
|
39988
|
-
args.
|
|
39989
|
-
if (opts.
|
|
39990
|
-
args.
|
|
39991
|
-
if (opts.
|
|
39992
|
-
args.
|
|
39993
|
-
if (opts.
|
|
39994
|
-
args.
|
|
39995
|
-
if (opts.
|
|
39996
|
-
args.
|
|
39997
|
-
if (opts.
|
|
39998
|
-
args.
|
|
39999
|
-
if (opts.
|
|
40000
|
-
args.
|
|
40014
|
+
if (opts.id !== void 0)
|
|
40015
|
+
args.id = opts.id;
|
|
40016
|
+
if (opts.mode !== void 0)
|
|
40017
|
+
args.mode = opts.mode;
|
|
40018
|
+
if (opts.walletId !== void 0)
|
|
40019
|
+
args.wallet_id = opts.walletId;
|
|
40020
|
+
if (opts.creditProductId !== void 0)
|
|
40021
|
+
args.credit_product_id = opts.creditProductId;
|
|
40022
|
+
if (opts.markupPercent !== void 0)
|
|
40023
|
+
args.markup_percent = opts.markupPercent;
|
|
40024
|
+
if (opts.overageMode !== void 0)
|
|
40025
|
+
args.overage_mode = opts.overageMode;
|
|
40026
|
+
if (opts.overageMarkupPercent !== void 0)
|
|
40027
|
+
args.overage_markup_percent = opts.overageMarkupPercent;
|
|
40028
|
+
if (opts.overageRateCardId !== void 0)
|
|
40029
|
+
args.overage_rate_card_id = opts.overageRateCardId;
|
|
40030
|
+
if (opts.overageWalletId !== void 0)
|
|
40031
|
+
args.overage_wallet_id = opts.overageWalletId;
|
|
40032
|
+
if (opts.floor !== void 0)
|
|
40033
|
+
args.floor = opts.floor;
|
|
40034
|
+
if (opts.settlementSchedule !== void 0)
|
|
40035
|
+
args.settlement_schedule = opts.settlementSchedule;
|
|
40036
|
+
if (opts.rateCardId !== void 0)
|
|
40037
|
+
args.rate_card_id = opts.rateCardId;
|
|
40038
|
+
if (opts.planId !== void 0)
|
|
40039
|
+
args.plan_id = opts.planId;
|
|
40040
|
+
if (opts.settlementIntervalMinutes !== void 0)
|
|
40041
|
+
args.settlement_interval_minutes = Number(opts.settlementIntervalMinutes);
|
|
40042
|
+
if (opts.blocked !== void 0)
|
|
40043
|
+
args.blocked = true;
|
|
40044
|
+
if (opts.windows !== void 0)
|
|
40045
|
+
args.windows = JSON.parse(opts.windows);
|
|
40001
40046
|
await ctx.execute({
|
|
40002
40047
|
method: "PUT",
|
|
40003
|
-
path: "/v1/ai
|
|
40048
|
+
path: "/v1/ai/billing/customers/{id}/policies/default",
|
|
40004
40049
|
args,
|
|
40005
40050
|
queryParamKeys: []
|
|
40006
40051
|
});
|
|
40007
40052
|
});
|
|
40008
|
-
resource.command("delete-
|
|
40053
|
+
resource.command("delete-default-customer-billing-policy").description(`Delete one customer's AI billing policy scope. Refused (409) while it owes unsettled consumption or while agent overrides still depend on it.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
|
|
40009
40054
|
Examples:
|
|
40010
|
-
hyperline ai-billing delete-
|
|
40011
|
-
hyperline ai-billing delete-
|
|
40055
|
+
hyperline ai-billing delete-default-customer-billing-policy --id <id>
|
|
40056
|
+
hyperline ai-billing delete-default-customer-billing-policy --id <id> --output json`).action(async (opts) => {
|
|
40012
40057
|
const ctx = resource.parent?.opts()._ctx;
|
|
40013
40058
|
if (!ctx) {
|
|
40014
40059
|
process.stderr.write("Error: Not authenticated\n");
|
|
40015
40060
|
process.exit(1);
|
|
40016
40061
|
}
|
|
40017
40062
|
const args = {};
|
|
40018
|
-
if (opts.
|
|
40019
|
-
args.
|
|
40063
|
+
if (opts.id !== void 0)
|
|
40064
|
+
args.id = opts.id;
|
|
40020
40065
|
if (!opts.yes) {
|
|
40021
40066
|
const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
|
|
40022
40067
|
if (!confirmed) {
|
|
@@ -40026,51 +40071,32 @@ Examples:
|
|
|
40026
40071
|
}
|
|
40027
40072
|
await ctx.execute({
|
|
40028
40073
|
method: "DELETE",
|
|
40029
|
-
path: "/v1/ai
|
|
40074
|
+
path: "/v1/ai/billing/customers/{id}/policies/default",
|
|
40030
40075
|
args,
|
|
40031
40076
|
queryParamKeys: []
|
|
40032
40077
|
});
|
|
40033
40078
|
});
|
|
40034
|
-
resource.command("
|
|
40079
|
+
resource.command("get-agent-customer-billing-policy").description(`Get the exact customer billing policy addressed by this resource; agent policies never fall back to the shared pool.`).requiredOption("--id <value>", `id parameter`).requiredOption("--agent-slug <value>", `agent_slug parameter`).addHelpText("after", `
|
|
40035
40080
|
Examples:
|
|
40036
|
-
hyperline ai-billing
|
|
40081
|
+
hyperline ai-billing get-agent-customer-billing-policy --id <id> --agent-slug <agent_slug>`).action(async (opts) => {
|
|
40037
40082
|
const ctx = resource.parent?.opts()._ctx;
|
|
40038
40083
|
if (!ctx) {
|
|
40039
40084
|
process.stderr.write("Error: Not authenticated\n");
|
|
40040
40085
|
process.exit(1);
|
|
40041
40086
|
}
|
|
40042
40087
|
const args = {};
|
|
40043
|
-
if (opts.
|
|
40044
|
-
args.
|
|
40088
|
+
if (opts.id !== void 0)
|
|
40089
|
+
args.id = opts.id;
|
|
40090
|
+
if (opts.agentSlug !== void 0)
|
|
40091
|
+
args.agent_slug = opts.agentSlug;
|
|
40045
40092
|
await ctx.execute({
|
|
40046
40093
|
method: "GET",
|
|
40047
|
-
path: "/v1/ai
|
|
40094
|
+
path: "/v1/ai/billing/customers/{id}/policies/agents/{agent_slug}",
|
|
40048
40095
|
args,
|
|
40049
40096
|
queryParamKeys: []
|
|
40050
40097
|
});
|
|
40051
40098
|
});
|
|
40052
|
-
resource.command("
|
|
40053
|
-
Examples:
|
|
40054
|
-
hyperline ai-billing get-agent-customer-policy --customer-id <customer_id>
|
|
40055
|
-
hyperline ai-billing get-agent-customer-policy --customer-id <customer_id> --agent <agent>`).action(async (opts) => {
|
|
40056
|
-
const ctx = resource.parent?.opts()._ctx;
|
|
40057
|
-
if (!ctx) {
|
|
40058
|
-
process.stderr.write("Error: Not authenticated\n");
|
|
40059
|
-
process.exit(1);
|
|
40060
|
-
}
|
|
40061
|
-
const args = {};
|
|
40062
|
-
if (opts.customerId !== void 0)
|
|
40063
|
-
args.customer_id = opts.customerId;
|
|
40064
|
-
if (opts.agent !== void 0)
|
|
40065
|
-
args.agent = opts.agent;
|
|
40066
|
-
await ctx.execute({
|
|
40067
|
-
method: "GET",
|
|
40068
|
-
path: "/v1/ai-billing/customers/{customer_id}/policy",
|
|
40069
|
-
args,
|
|
40070
|
-
queryParamKeys: ["agent"]
|
|
40071
|
-
});
|
|
40072
|
-
});
|
|
40073
|
-
resource.command("upsert-agent-customer-policy").description(`Create or replace one customer's AI billing policy (whole-row). Pass plan_id to attach the customer to a billing plan \u2014 this also attaches the plan's overage invoice container to their subscription. Past-limit usage is priced by overage_markup_percent over the base rates, or by overage_rate_card_id (a currency rate card whose rates ARE the overage price) \u2014 never both. Wallet/credit pots are auto-opened empty.`).requiredOption("--customer-id <value>", `customer_id parameter`).option("--agent <value>", `Agent scope identifier. Null on scoped results denotes the customer's shared pool.`).requiredOption("--mode <value>", `Billing mode.
|
|
40099
|
+
resource.command("upsert-agent-customer-billing-policy").description(`Replace customer billing settings while preserving omitted plan_id and rate_card_id references; null detaches them, and a shared policy enables automatic telemetry billing.`).requiredOption("--id <value>", `id parameter`).requiredOption("--agent-slug <value>", `agent_slug parameter`).requiredOption("--mode <value>", `Billing mode.
|
|
40074
40100
|
|
|
40075
40101
|
- wallet: Charges a monetary wallet.
|
|
40076
40102
|
- credits: Consumes a credit balance.
|
|
@@ -40079,21 +40105,21 @@ Examples:
|
|
|
40079
40105
|
- refuse: Rejects the call that crosses the boundary without deducting usage.
|
|
40080
40106
|
- metered: Prices the whole call as monetary overage, using the overage card or USD provider cost plus markup.`).option("--overage-markup-percent <value>", `Percentage added to provider cost for overage. Mutually exclusive with overage_rate_card_id.`).option("--overage-rate-card-id <value>", `Currency rate card used to price overage directly. Null means provider cost plus the resolved overage markup.`).option("--overage-wallet-id <value>", `Wallet charged for overage. Null bills overage in arrears.`).option("--floor <value>", `Minimum available balance a spend check requires, in the policy's denomination.`).option("--settlement-interval-minutes <number>", `Settlement interval in minutes. Null means no interval override. Mutually exclusive with settlement_schedule.`).option("--settlement-schedule <value>", `Calendar settlement schedule. Null clears the override; mutually exclusive with settlement_interval_minutes.
|
|
40081
40107
|
|
|
40082
|
-
- calendar_month: Settles at the end of each UTC calendar month.`).option("--
|
|
40108
|
+
- calendar_month: Settles at the end of each UTC calendar month.`).option("--windows <json>", `Rolling allowances. Required for windows plans; each window meters every call. A plan replacement replaces the entire array.`).option("--rate-card-id <value>", `Rate card reference. On policy writes, omission preserves the current reference and null detaches it; on plan replacement omission clears it.`).option("--plan-id <value>", `Billing plan reference. On policy writes, omission preserves the current plan and null detaches it.`).requiredOption("--blocked", `Whether spending is disabled for this billing scope.`).addHelpText("after", `
|
|
40083
40109
|
Examples:
|
|
40084
|
-
hyperline ai-billing upsert-agent-customer-policy --
|
|
40085
|
-
hyperline ai-billing upsert-agent-customer-policy --
|
|
40086
|
-
hyperline ai-billing upsert-agent-customer-policy --
|
|
40110
|
+
hyperline ai-billing upsert-agent-customer-billing-policy --id <id> --agent-slug <agent_slug> --mode <mode> --blocked
|
|
40111
|
+
hyperline ai-billing upsert-agent-customer-billing-policy --id <id> --agent-slug <agent_slug> --mode <mode> --blocked --wallet-id <wallet_id> --credit-product-id <credit_product_id>
|
|
40112
|
+
hyperline ai-billing upsert-agent-customer-billing-policy --id <id> --agent-slug <agent_slug> --mode <mode> --blocked --output json`).action(async (opts) => {
|
|
40087
40113
|
const ctx = resource.parent?.opts()._ctx;
|
|
40088
40114
|
if (!ctx) {
|
|
40089
40115
|
process.stderr.write("Error: Not authenticated\n");
|
|
40090
40116
|
process.exit(1);
|
|
40091
40117
|
}
|
|
40092
40118
|
const args = {};
|
|
40093
|
-
if (opts.
|
|
40094
|
-
args.
|
|
40095
|
-
if (opts.
|
|
40096
|
-
args.
|
|
40119
|
+
if (opts.id !== void 0)
|
|
40120
|
+
args.id = opts.id;
|
|
40121
|
+
if (opts.agentSlug !== void 0)
|
|
40122
|
+
args.agent_slug = opts.agentSlug;
|
|
40097
40123
|
if (opts.mode !== void 0)
|
|
40098
40124
|
args.mode = opts.mode;
|
|
40099
40125
|
if (opts.walletId !== void 0)
|
|
@@ -40122,32 +40148,29 @@ Examples:
|
|
|
40122
40148
|
args.settlement_interval_minutes = Number(opts.settlementIntervalMinutes);
|
|
40123
40149
|
if (opts.blocked !== void 0)
|
|
40124
40150
|
args.blocked = true;
|
|
40125
|
-
if (opts.
|
|
40126
|
-
args.
|
|
40127
|
-
if (opts.windowRates !== void 0)
|
|
40128
|
-
args.window_rates = JSON.parse(opts.windowRates);
|
|
40151
|
+
if (opts.windows !== void 0)
|
|
40152
|
+
args.windows = JSON.parse(opts.windows);
|
|
40129
40153
|
await ctx.execute({
|
|
40130
40154
|
method: "PUT",
|
|
40131
|
-
path: "/v1/ai
|
|
40155
|
+
path: "/v1/ai/billing/customers/{id}/policies/agents/{agent_slug}",
|
|
40132
40156
|
args,
|
|
40133
|
-
queryParamKeys: [
|
|
40157
|
+
queryParamKeys: []
|
|
40134
40158
|
});
|
|
40135
40159
|
});
|
|
40136
|
-
resource.command("delete-agent-customer-policy").description(`Delete one customer's AI billing policy scope. Refused (409) while it owes unsettled consumption or while agent overrides still depend on it.`).requiredOption("--
|
|
40160
|
+
resource.command("delete-agent-customer-billing-policy").description(`Delete one customer's AI billing policy scope. Refused (409) while it owes unsettled consumption or while agent overrides still depend on it.`).requiredOption("--id <value>", `id parameter`).requiredOption("--agent-slug <value>", `agent_slug parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
|
|
40137
40161
|
Examples:
|
|
40138
|
-
hyperline ai-billing delete-agent-customer-policy --
|
|
40139
|
-
hyperline ai-billing delete-agent-customer-policy --
|
|
40140
|
-
hyperline ai-billing delete-agent-customer-policy --customer-id <customer_id> --output json`).action(async (opts) => {
|
|
40162
|
+
hyperline ai-billing delete-agent-customer-billing-policy --id <id> --agent-slug <agent_slug>
|
|
40163
|
+
hyperline ai-billing delete-agent-customer-billing-policy --id <id> --agent-slug <agent_slug> --output json`).action(async (opts) => {
|
|
40141
40164
|
const ctx = resource.parent?.opts()._ctx;
|
|
40142
40165
|
if (!ctx) {
|
|
40143
40166
|
process.stderr.write("Error: Not authenticated\n");
|
|
40144
40167
|
process.exit(1);
|
|
40145
40168
|
}
|
|
40146
40169
|
const args = {};
|
|
40147
|
-
if (opts.
|
|
40148
|
-
args.
|
|
40149
|
-
if (opts.
|
|
40150
|
-
args.
|
|
40170
|
+
if (opts.id !== void 0)
|
|
40171
|
+
args.id = opts.id;
|
|
40172
|
+
if (opts.agentSlug !== void 0)
|
|
40173
|
+
args.agent_slug = opts.agentSlug;
|
|
40151
40174
|
if (!opts.yes) {
|
|
40152
40175
|
const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
|
|
40153
40176
|
if (!confirmed) {
|
|
@@ -40157,87 +40180,87 @@ Examples:
|
|
|
40157
40180
|
}
|
|
40158
40181
|
await ctx.execute({
|
|
40159
40182
|
method: "DELETE",
|
|
40160
|
-
path: "/v1/ai
|
|
40183
|
+
path: "/v1/ai/billing/customers/{id}/policies/agents/{agent_slug}",
|
|
40161
40184
|
args,
|
|
40162
|
-
queryParamKeys: [
|
|
40185
|
+
queryParamKeys: []
|
|
40163
40186
|
});
|
|
40164
40187
|
});
|
|
40165
|
-
resource.command("apply-agent-default-plan").description(`Apply the workspace's default AI agent billing plan to one customer (by id or external id). Idempotent; refuses (409) if the customer already has a different billing policy, 404 when no default plan is set.`).requiredOption("--
|
|
40188
|
+
resource.command("apply-agent-default-plan").description(`Apply the workspace's default AI agent billing plan to one customer (by id or external id). Idempotent; refuses (409) if the customer already has a different billing policy, 404 when no default plan is set.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
|
|
40166
40189
|
Examples:
|
|
40167
|
-
hyperline ai-billing apply-agent-default-plan --
|
|
40168
|
-
hyperline ai-billing apply-agent-default-plan --
|
|
40190
|
+
hyperline ai-billing apply-agent-default-plan --id <id>
|
|
40191
|
+
hyperline ai-billing apply-agent-default-plan --id <id> --output json`).action(async (opts) => {
|
|
40169
40192
|
const ctx = resource.parent?.opts()._ctx;
|
|
40170
40193
|
if (!ctx) {
|
|
40171
40194
|
process.stderr.write("Error: Not authenticated\n");
|
|
40172
40195
|
process.exit(1);
|
|
40173
40196
|
}
|
|
40174
40197
|
const args = {};
|
|
40175
|
-
if (opts.
|
|
40176
|
-
args.
|
|
40198
|
+
if (opts.id !== void 0)
|
|
40199
|
+
args.id = opts.id;
|
|
40177
40200
|
await ctx.execute({
|
|
40178
40201
|
method: "POST",
|
|
40179
|
-
path: "/v1/ai
|
|
40202
|
+
path: "/v1/ai/billing/customers/{id}/apply-default-plan",
|
|
40180
40203
|
args,
|
|
40181
40204
|
queryParamKeys: []
|
|
40182
40205
|
});
|
|
40183
40206
|
});
|
|
40184
|
-
resource.command("get-agent-customer-balance").description(`Get one customer's live AI balance, shaped by their billing mode: wallet shadow balance, credit pot, or rolling window meters with reset times. Includes per-agent scopes and overage state.`).requiredOption("--
|
|
40207
|
+
resource.command("get-agent-customer-balance").description(`Get one customer's live AI balance, shaped by their billing mode: wallet shadow balance, credit pot, or rolling window meters with reset times. Includes per-agent scopes and overage state.`).requiredOption("--id <value>", `id parameter`).option("--agent-slug <value>", `Agent scope identifier. Null is the customer's shared pool.`).addHelpText("after", `
|
|
40185
40208
|
Examples:
|
|
40186
|
-
hyperline ai-billing get-agent-customer-balance --
|
|
40187
|
-
hyperline ai-billing get-agent-customer-balance --
|
|
40209
|
+
hyperline ai-billing get-agent-customer-balance --id <id>
|
|
40210
|
+
hyperline ai-billing get-agent-customer-balance --id <id> --agent-slug <agent_slug>`).action(async (opts) => {
|
|
40188
40211
|
const ctx = resource.parent?.opts()._ctx;
|
|
40189
40212
|
if (!ctx) {
|
|
40190
40213
|
process.stderr.write("Error: Not authenticated\n");
|
|
40191
40214
|
process.exit(1);
|
|
40192
40215
|
}
|
|
40193
40216
|
const args = {};
|
|
40194
|
-
if (opts.
|
|
40195
|
-
args.
|
|
40196
|
-
if (opts.
|
|
40197
|
-
args.
|
|
40217
|
+
if (opts.id !== void 0)
|
|
40218
|
+
args.id = opts.id;
|
|
40219
|
+
if (opts.agentSlug !== void 0)
|
|
40220
|
+
args.agent_slug = opts.agentSlug;
|
|
40198
40221
|
await ctx.execute({
|
|
40199
40222
|
method: "GET",
|
|
40200
|
-
path: "/v1/ai
|
|
40223
|
+
path: "/v1/ai/billing/customers/{id}/balance",
|
|
40201
40224
|
args,
|
|
40202
|
-
queryParamKeys: ["
|
|
40225
|
+
queryParamKeys: ["agent_slug"]
|
|
40203
40226
|
});
|
|
40204
40227
|
});
|
|
40205
|
-
resource.command("reset-agent-customer-windows").description(`Reset one customer's open AI allowance windows so their next call starts a fresh full allowance. Windows-mode scopes only.`).requiredOption("--
|
|
40228
|
+
resource.command("reset-agent-customer-windows").description(`Reset one customer's open AI allowance windows so their next call starts a fresh full allowance. Windows-mode scopes only.`).requiredOption("--id <value>", `id parameter`).option("--agent-slug <value>", `Agent scope identifier. Null is the customer's shared pool.`).addHelpText("after", `
|
|
40206
40229
|
Examples:
|
|
40207
|
-
hyperline ai-billing reset-agent-customer-windows --
|
|
40208
|
-
hyperline ai-billing reset-agent-customer-windows --
|
|
40209
|
-
hyperline ai-billing reset-agent-customer-windows --
|
|
40230
|
+
hyperline ai-billing reset-agent-customer-windows --id <id>
|
|
40231
|
+
hyperline ai-billing reset-agent-customer-windows --id <id> --agent-slug <agent_slug>
|
|
40232
|
+
hyperline ai-billing reset-agent-customer-windows --id <id> --output json`).action(async (opts) => {
|
|
40210
40233
|
const ctx = resource.parent?.opts()._ctx;
|
|
40211
40234
|
if (!ctx) {
|
|
40212
40235
|
process.stderr.write("Error: Not authenticated\n");
|
|
40213
40236
|
process.exit(1);
|
|
40214
40237
|
}
|
|
40215
40238
|
const args = {};
|
|
40216
|
-
if (opts.
|
|
40217
|
-
args.
|
|
40218
|
-
if (opts.
|
|
40219
|
-
args.
|
|
40239
|
+
if (opts.id !== void 0)
|
|
40240
|
+
args.id = opts.id;
|
|
40241
|
+
if (opts.agentSlug !== void 0)
|
|
40242
|
+
args.agent_slug = opts.agentSlug;
|
|
40220
40243
|
await ctx.execute({
|
|
40221
40244
|
method: "POST",
|
|
40222
|
-
path: "/v1/ai
|
|
40245
|
+
path: "/v1/ai/billing/customers/{id}/windows/reset",
|
|
40223
40246
|
args,
|
|
40224
|
-
queryParamKeys: ["
|
|
40247
|
+
queryParamKeys: ["agent_slug"]
|
|
40225
40248
|
});
|
|
40226
40249
|
});
|
|
40227
|
-
resource.command("list-agent-customer-consumption").description(`List one customer's AI consumption ledger entries, newest first, with amounts, denominations and overage flags. Filter by agent scope, overage, and from/to time range; paginated with take/skip.`).requiredOption("--
|
|
40250
|
+
resource.command("list-agent-customer-consumption").description(`List one customer's AI consumption ledger entries, newest first, with amounts, denominations and overage flags. Filter by agent scope, overage, and from/to time range; paginated with take/skip.`).requiredOption("--id <value>", `id parameter`).option("--agent-slug <value>", `Billing scope: an empty string selects the shared pool; omission includes all scopes.`).option("--overage <value>", `Filter by overage status; omission includes both ordinary and overage entries.`).option("--from <value>", `UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.`).option("--to <value>", `UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.`).option("--take <number>", `take`).option("--skip <number>", `skip`).addHelpText("after", `
|
|
40228
40251
|
Examples:
|
|
40229
|
-
hyperline ai-billing list-agent-customer-consumption --
|
|
40230
|
-
hyperline ai-billing list-agent-customer-consumption --
|
|
40252
|
+
hyperline ai-billing list-agent-customer-consumption --id <id>
|
|
40253
|
+
hyperline ai-billing list-agent-customer-consumption --id <id> --agent-slug <agent_slug> --overage <overage>`).action(async (opts) => {
|
|
40231
40254
|
const ctx = resource.parent?.opts()._ctx;
|
|
40232
40255
|
if (!ctx) {
|
|
40233
40256
|
process.stderr.write("Error: Not authenticated\n");
|
|
40234
40257
|
process.exit(1);
|
|
40235
40258
|
}
|
|
40236
40259
|
const args = {};
|
|
40237
|
-
if (opts.
|
|
40238
|
-
args.
|
|
40239
|
-
if (opts.
|
|
40240
|
-
args.
|
|
40260
|
+
if (opts.id !== void 0)
|
|
40261
|
+
args.id = opts.id;
|
|
40262
|
+
if (opts.agentSlug !== void 0)
|
|
40263
|
+
args.agent_slug = opts.agentSlug;
|
|
40241
40264
|
if (opts.overage !== void 0)
|
|
40242
40265
|
args.overage = opts.overage;
|
|
40243
40266
|
if (opts.from !== void 0)
|
|
@@ -40250,25 +40273,297 @@ Examples:
|
|
|
40250
40273
|
args.skip = Number(opts.skip);
|
|
40251
40274
|
await ctx.execute({
|
|
40252
40275
|
method: "GET",
|
|
40253
|
-
path: "/v1/ai
|
|
40276
|
+
path: "/v1/ai/billing/customers/{id}/consumption",
|
|
40277
|
+
args,
|
|
40278
|
+
queryParamKeys: ["agent_slug", "overage", "from", "to", "take", "skip"]
|
|
40279
|
+
});
|
|
40280
|
+
});
|
|
40281
|
+
resource.command("get-product-ai-rate-card").description(`Get the default AI rate-card reference for a credit product, or 404 when none is attached.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
|
|
40282
|
+
Examples:
|
|
40283
|
+
hyperline ai-billing get-product-ai-rate-card --id <id>`).action(async (opts) => {
|
|
40284
|
+
const ctx = resource.parent?.opts()._ctx;
|
|
40285
|
+
if (!ctx) {
|
|
40286
|
+
process.stderr.write("Error: Not authenticated\n");
|
|
40287
|
+
process.exit(1);
|
|
40288
|
+
}
|
|
40289
|
+
const args = {};
|
|
40290
|
+
if (opts.id !== void 0)
|
|
40291
|
+
args.id = opts.id;
|
|
40292
|
+
await ctx.execute({
|
|
40293
|
+
method: "GET",
|
|
40294
|
+
path: "/v1/ai/billing/products/{id}/rate-card",
|
|
40295
|
+
args,
|
|
40296
|
+
queryParamKeys: []
|
|
40297
|
+
});
|
|
40298
|
+
});
|
|
40299
|
+
resource.command("set-product-ai-rate-card").description(`Attach a credits-denominated AI rate card with complete fallback pricing as the credit product's default.`).requiredOption("--id <value>", `id parameter`).requiredOption("--rate-card-id <value>", `Rate card reference. On policy writes, omission preserves the current reference and null detaches it; on plan replacement omission clears it.`).addHelpText("after", `
|
|
40300
|
+
Examples:
|
|
40301
|
+
hyperline ai-billing set-product-ai-rate-card --id <id> --rate-card-id <rate_card_id>
|
|
40302
|
+
hyperline ai-billing set-product-ai-rate-card --id <id> --rate-card-id <rate_card_id> --output json`).action(async (opts) => {
|
|
40303
|
+
const ctx = resource.parent?.opts()._ctx;
|
|
40304
|
+
if (!ctx) {
|
|
40305
|
+
process.stderr.write("Error: Not authenticated\n");
|
|
40306
|
+
process.exit(1);
|
|
40307
|
+
}
|
|
40308
|
+
const args = {};
|
|
40309
|
+
if (opts.id !== void 0)
|
|
40310
|
+
args.id = opts.id;
|
|
40311
|
+
if (opts.rateCardId !== void 0)
|
|
40312
|
+
args.rate_card_id = opts.rateCardId;
|
|
40313
|
+
await ctx.execute({
|
|
40314
|
+
method: "PUT",
|
|
40315
|
+
path: "/v1/ai/billing/products/{id}/rate-card",
|
|
40316
|
+
args,
|
|
40317
|
+
queryParamKeys: []
|
|
40318
|
+
});
|
|
40319
|
+
});
|
|
40320
|
+
resource.command("clear-product-ai-rate-card").description(`Detach a credit product's default AI rate card without deleting the card, or return 404 when none is attached.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
|
|
40321
|
+
Examples:
|
|
40322
|
+
hyperline ai-billing clear-product-ai-rate-card --id <id>
|
|
40323
|
+
hyperline ai-billing clear-product-ai-rate-card --id <id> --output json`).action(async (opts) => {
|
|
40324
|
+
const ctx = resource.parent?.opts()._ctx;
|
|
40325
|
+
if (!ctx) {
|
|
40326
|
+
process.stderr.write("Error: Not authenticated\n");
|
|
40327
|
+
process.exit(1);
|
|
40328
|
+
}
|
|
40329
|
+
const args = {};
|
|
40330
|
+
if (opts.id !== void 0)
|
|
40331
|
+
args.id = opts.id;
|
|
40332
|
+
if (!opts.yes) {
|
|
40333
|
+
const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
|
|
40334
|
+
if (!confirmed) {
|
|
40335
|
+
process.stdout.write("Aborted.\n");
|
|
40336
|
+
return;
|
|
40337
|
+
}
|
|
40338
|
+
}
|
|
40339
|
+
await ctx.execute({
|
|
40340
|
+
method: "DELETE",
|
|
40341
|
+
path: "/v1/ai/billing/products/{id}/rate-card",
|
|
40342
|
+
args,
|
|
40343
|
+
queryParamKeys: []
|
|
40344
|
+
});
|
|
40345
|
+
});
|
|
40346
|
+
}
|
|
40347
|
+
|
|
40348
|
+
// build/commands/generated/ai-costs.js
|
|
40349
|
+
function registerAi_CostsCommands(parent) {
|
|
40350
|
+
const resource = parent.command("ai-costs").description("Manage ai > costs");
|
|
40351
|
+
resource.command("list-agent-cost-catalog").description(`List the AI cost catalog: registry model prices merged with this workspace's negotiated overrides, its own custom cost items (source custom), and the unpriced pairs its telemetry has carried (source unlisted). Rates are USD decimal strings. Pass enabled_only=true for just the enabled catalog.`).option("--take <number>", `Maximum catalog entries to return.`).option("--skip <number>", `skip`).option("--enabled-only <value>", `enabled_only`).addHelpText("after", `
|
|
40352
|
+
Examples:
|
|
40353
|
+
hyperline ai-costs list-agent-cost-catalog
|
|
40354
|
+
hyperline ai-costs list-agent-cost-catalog --take <take> --enabled-only <enabled_only>`).action(async (opts) => {
|
|
40355
|
+
const ctx = resource.parent?.opts()._ctx;
|
|
40356
|
+
if (!ctx) {
|
|
40357
|
+
process.stderr.write("Error: Not authenticated\n");
|
|
40358
|
+
process.exit(1);
|
|
40359
|
+
}
|
|
40360
|
+
const args = {};
|
|
40361
|
+
if (opts.enabledOnly !== void 0)
|
|
40362
|
+
args.enabled_only = opts.enabledOnly;
|
|
40363
|
+
if (opts.take !== void 0)
|
|
40364
|
+
args.take = Number(opts.take);
|
|
40365
|
+
if (opts.skip !== void 0)
|
|
40366
|
+
args.skip = Number(opts.skip);
|
|
40367
|
+
await ctx.execute({
|
|
40368
|
+
method: "GET",
|
|
40369
|
+
path: "/v1/ai/billing/costs",
|
|
40370
|
+
args,
|
|
40371
|
+
queryParamKeys: ["take", "skip", "enabled_only"]
|
|
40372
|
+
});
|
|
40373
|
+
});
|
|
40374
|
+
resource.command("create-agent-cost-catalog-item").description(`Create a custom provider/item cost; an existing pair returns 200 with its unchanged rates, so use PUT /v1/ai/billing/costs/items/:id to edit it.`).requiredOption("--provider <value>", `AI model provider, or the vendor of a custom cost item. This is not an integration connection.`).requiredOption("--item <value>", `Custom item name matching the usage payload.`).requiredOption("--dimensions <json>", `Additional billable dimensions; each key matches a usage_extra key and rates use the owning card's units or USD for cost-catalog dimensions.`).addHelpText("after", `
|
|
40375
|
+
Examples:
|
|
40376
|
+
hyperline ai-costs create-agent-cost-catalog-item --provider <provider> --item <item> --dimensions <dimensions>
|
|
40377
|
+
hyperline ai-costs create-agent-cost-catalog-item --provider <provider> --item <item> --dimensions <dimensions> --output json`).action(async (opts) => {
|
|
40378
|
+
const ctx = resource.parent?.opts()._ctx;
|
|
40379
|
+
if (!ctx) {
|
|
40380
|
+
process.stderr.write("Error: Not authenticated\n");
|
|
40381
|
+
process.exit(1);
|
|
40382
|
+
}
|
|
40383
|
+
const args = {};
|
|
40384
|
+
if (opts.provider !== void 0)
|
|
40385
|
+
args.provider = opts.provider;
|
|
40386
|
+
if (opts.item !== void 0)
|
|
40387
|
+
args.item = opts.item;
|
|
40388
|
+
if (opts.dimensions !== void 0)
|
|
40389
|
+
args.dimensions = JSON.parse(opts.dimensions);
|
|
40390
|
+
await ctx.execute({
|
|
40391
|
+
method: "POST",
|
|
40392
|
+
path: "/v1/ai/billing/costs/items",
|
|
40393
|
+
args,
|
|
40394
|
+
queryParamKeys: []
|
|
40395
|
+
});
|
|
40396
|
+
});
|
|
40397
|
+
resource.command("delete-agent-cost-catalog-item").description(`Close a custom AI cost item by its custom_item_id. History is kept; new calls on that pair go back to unpriced. An override id passed here is a 404.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
|
|
40398
|
+
Examples:
|
|
40399
|
+
hyperline ai-costs delete-agent-cost-catalog-item --id <id>
|
|
40400
|
+
hyperline ai-costs delete-agent-cost-catalog-item --id <id> --output json`).action(async (opts) => {
|
|
40401
|
+
const ctx = resource.parent?.opts()._ctx;
|
|
40402
|
+
if (!ctx) {
|
|
40403
|
+
process.stderr.write("Error: Not authenticated\n");
|
|
40404
|
+
process.exit(1);
|
|
40405
|
+
}
|
|
40406
|
+
const args = {};
|
|
40407
|
+
if (opts.id !== void 0)
|
|
40408
|
+
args.id = opts.id;
|
|
40409
|
+
if (!opts.yes) {
|
|
40410
|
+
const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
|
|
40411
|
+
if (!confirmed) {
|
|
40412
|
+
process.stdout.write("Aborted.\n");
|
|
40413
|
+
return;
|
|
40414
|
+
}
|
|
40415
|
+
}
|
|
40416
|
+
await ctx.execute({
|
|
40417
|
+
method: "DELETE",
|
|
40418
|
+
path: "/v1/ai/billing/costs/items/{id}",
|
|
40419
|
+
args,
|
|
40420
|
+
queryParamKeys: []
|
|
40421
|
+
});
|
|
40422
|
+
});
|
|
40423
|
+
resource.command("upsert-agent-cost-catalog-override").description(`Set this workspace's negotiated price for a registry AI model (input/output/cached/cache-write USD per 1M tokens, plus optional dimensions). Replaces any open override immediately; historical calls keep their original rate. A pair the registry does not know is refused \u2014 create a custom cost item instead.`).requiredOption("--provider <value>", `AI model provider, or the vendor of a custom cost item. This is not an integration connection.`).requiredOption("--model <value>", `Model identifier, or custom item identifier. Null on wildcard pricing rows.`).requiredOption("--input-per-m-tokens <value>", `Provider cost in USD per million input tokens, as an exact decimal string.`).requiredOption("--output-per-m-tokens <value>", `Provider cost in USD per million output tokens, as an exact decimal string.`).option("--cached-input-per-m-tokens <value>", `Provider cost in USD per million cached input tokens, as an exact decimal string.`).option("--cache-write-per-m-tokens <value>", `Provider cost in USD per million cache write tokens, as an exact decimal string.`).option("--dimensions <json>", `Additional billable dimensions; each key matches a usage_extra key and rates use the owning card's units or USD for cost-catalog dimensions.`).addHelpText("after", `
|
|
40424
|
+
Examples:
|
|
40425
|
+
hyperline ai-costs upsert-agent-cost-catalog-override --provider <provider> --model <model> --input-per-m-tokens <input_per_m_tokens> --output-per-m-tokens <output_per_m_tokens>
|
|
40426
|
+
hyperline ai-costs upsert-agent-cost-catalog-override --provider <provider> --model <model> --input-per-m-tokens <input_per_m_tokens> --output-per-m-tokens <output_per_m_tokens> --cached-input-per-m-tokens <cached_input_per_m_tokens> --cache-write-per-m-tokens <cache_write_per_m_tokens>
|
|
40427
|
+
hyperline ai-costs upsert-agent-cost-catalog-override --provider <provider> --model <model> --input-per-m-tokens <input_per_m_tokens> --output-per-m-tokens <output_per_m_tokens> --output json`).action(async (opts) => {
|
|
40428
|
+
const ctx = resource.parent?.opts()._ctx;
|
|
40429
|
+
if (!ctx) {
|
|
40430
|
+
process.stderr.write("Error: Not authenticated\n");
|
|
40431
|
+
process.exit(1);
|
|
40432
|
+
}
|
|
40433
|
+
const args = {};
|
|
40434
|
+
if (opts.provider !== void 0)
|
|
40435
|
+
args.provider = opts.provider;
|
|
40436
|
+
if (opts.model !== void 0)
|
|
40437
|
+
args.model = opts.model;
|
|
40438
|
+
if (opts.inputPerMTokens !== void 0)
|
|
40439
|
+
args.input_per_m_tokens = opts.inputPerMTokens;
|
|
40440
|
+
if (opts.outputPerMTokens !== void 0)
|
|
40441
|
+
args.output_per_m_tokens = opts.outputPerMTokens;
|
|
40442
|
+
if (opts.cachedInputPerMTokens !== void 0)
|
|
40443
|
+
args.cached_input_per_m_tokens = opts.cachedInputPerMTokens;
|
|
40444
|
+
if (opts.cacheWritePerMTokens !== void 0)
|
|
40445
|
+
args.cache_write_per_m_tokens = opts.cacheWritePerMTokens;
|
|
40446
|
+
if (opts.dimensions !== void 0)
|
|
40447
|
+
args.dimensions = JSON.parse(opts.dimensions);
|
|
40448
|
+
await ctx.execute({
|
|
40449
|
+
method: "PUT",
|
|
40450
|
+
path: "/v1/ai/billing/costs/overrides",
|
|
40451
|
+
args,
|
|
40452
|
+
queryParamKeys: []
|
|
40453
|
+
});
|
|
40454
|
+
});
|
|
40455
|
+
resource.command("delete-agent-cost-catalog-override").description(`Close this workspace's negotiated price override by its override.id; pricing falls back to the global registry rate. A custom cost item id passed here is a 404.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
|
|
40456
|
+
Examples:
|
|
40457
|
+
hyperline ai-costs delete-agent-cost-catalog-override --id <id>
|
|
40458
|
+
hyperline ai-costs delete-agent-cost-catalog-override --id <id> --output json`).action(async (opts) => {
|
|
40459
|
+
const ctx = resource.parent?.opts()._ctx;
|
|
40460
|
+
if (!ctx) {
|
|
40461
|
+
process.stderr.write("Error: Not authenticated\n");
|
|
40462
|
+
process.exit(1);
|
|
40463
|
+
}
|
|
40464
|
+
const args = {};
|
|
40465
|
+
if (opts.id !== void 0)
|
|
40466
|
+
args.id = opts.id;
|
|
40467
|
+
if (!opts.yes) {
|
|
40468
|
+
const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
|
|
40469
|
+
if (!confirmed) {
|
|
40470
|
+
process.stdout.write("Aborted.\n");
|
|
40471
|
+
return;
|
|
40472
|
+
}
|
|
40473
|
+
}
|
|
40474
|
+
await ctx.execute({
|
|
40475
|
+
method: "DELETE",
|
|
40476
|
+
path: "/v1/ai/billing/costs/overrides/{id}",
|
|
40477
|
+
args,
|
|
40478
|
+
queryParamKeys: []
|
|
40479
|
+
});
|
|
40480
|
+
});
|
|
40481
|
+
resource.command("replace-agent-cost-catalog-item").description(`Replace a custom item's provider, item and dimensions, preserving historical prices and returning the new active custom_item_id.`).requiredOption("--id <value>", `id parameter`).requiredOption("--provider <value>", `AI model provider, or the vendor of a custom cost item. This is not an integration connection.`).requiredOption("--item <value>", `Custom item name matching the usage payload.`).requiredOption("--dimensions <json>", `Additional billable dimensions; each key matches a usage_extra key and rates use the owning card's units or USD for cost-catalog dimensions.`).addHelpText("after", `
|
|
40482
|
+
Examples:
|
|
40483
|
+
hyperline ai-costs replace-agent-cost-catalog-item --id <id> --provider <provider> --item <item> --dimensions <dimensions>
|
|
40484
|
+
hyperline ai-costs replace-agent-cost-catalog-item --id <id> --provider <provider> --item <item> --dimensions <dimensions> --output json`).action(async (opts) => {
|
|
40485
|
+
const ctx = resource.parent?.opts()._ctx;
|
|
40486
|
+
if (!ctx) {
|
|
40487
|
+
process.stderr.write("Error: Not authenticated\n");
|
|
40488
|
+
process.exit(1);
|
|
40489
|
+
}
|
|
40490
|
+
const args = {};
|
|
40491
|
+
if (opts.id !== void 0)
|
|
40492
|
+
args.id = opts.id;
|
|
40493
|
+
if (opts.provider !== void 0)
|
|
40494
|
+
args.provider = opts.provider;
|
|
40495
|
+
if (opts.item !== void 0)
|
|
40496
|
+
args.item = opts.item;
|
|
40497
|
+
if (opts.dimensions !== void 0)
|
|
40498
|
+
args.dimensions = JSON.parse(opts.dimensions);
|
|
40499
|
+
await ctx.execute({
|
|
40500
|
+
method: "PUT",
|
|
40501
|
+
path: "/v1/ai/billing/costs/items/{id}",
|
|
40254
40502
|
args,
|
|
40255
|
-
queryParamKeys: [
|
|
40503
|
+
queryParamKeys: []
|
|
40256
40504
|
});
|
|
40257
40505
|
});
|
|
40258
|
-
|
|
40506
|
+
}
|
|
40507
|
+
|
|
40508
|
+
// build/commands/generated/ai-monitoring.js
|
|
40509
|
+
function registerAi_MonitoringCommands(parent) {
|
|
40510
|
+
const resource = parent.command("ai-monitoring").description("Manage ai > monitoring");
|
|
40511
|
+
resource.command("list-monitoring-analyses").description(`List customer health analyses from the monitoring agent, newest first: health score (0-100), tier, summary, per-dimension scores, risk factors and positive signals. Filter by customer (Hyperline or external ID) with limit=1 to get a customer's current health score, or by customer_id__in (up to 100 Hyperline IDs) for several customers; the first analysis per customer is its latest. Only completed analyses unless status is set.`).option("--limit <number>", `Maximum number of items to return (1-100).`).option("--cursor <value>", `Opaque cursor returned in the previous response's \`next_cursor\`. Omit to fetch the first page.`).option("--include-total <value>", `Set to \`true\` to include \`total\` in the response.`).option("--customer-id <value>", `Return only analyses of this customer. Accepts the Hyperline ID or your own external ID.`).option("--customer-id.in <value>", `Comma-separated list of up to 100 Hyperline customer IDs. Return only analyses of these customers. Cannot be combined with \`customer_id\`.`).option("--status <value>", `Return only analyses with this status. Defaults to \`completed\`, the analyses that carry a score.`).option("--created-at.gte <value>", `Return only analyses created at or after this date.`).option("--created-at.lte <value>", `Return only analyses created at or before this date.`).addHelpText("after", `
|
|
40259
40512
|
Examples:
|
|
40260
|
-
hyperline ai-
|
|
40513
|
+
hyperline ai-monitoring list-monitoring-analyses
|
|
40514
|
+
hyperline ai-monitoring list-monitoring-analyses --limit <limit> --cursor <cursor>`).action(async (opts) => {
|
|
40261
40515
|
const ctx = resource.parent?.opts()._ctx;
|
|
40262
40516
|
if (!ctx) {
|
|
40263
40517
|
process.stderr.write("Error: Not authenticated\n");
|
|
40264
40518
|
process.exit(1);
|
|
40265
40519
|
}
|
|
40266
40520
|
const args = {};
|
|
40521
|
+
if (opts.cursor !== void 0)
|
|
40522
|
+
args.cursor = opts.cursor;
|
|
40523
|
+
if (opts.includeTotal !== void 0)
|
|
40524
|
+
args.include_total = opts.includeTotal;
|
|
40267
40525
|
if (opts.customerId !== void 0)
|
|
40268
40526
|
args.customer_id = opts.customerId;
|
|
40527
|
+
if (opts["customerId.in"] !== void 0)
|
|
40528
|
+
args.customer_id__in = opts["customerId.in"];
|
|
40529
|
+
if (opts.status !== void 0)
|
|
40530
|
+
args.status = opts.status;
|
|
40531
|
+
if (opts["createdAt.gte"] !== void 0)
|
|
40532
|
+
args.created_at__gte = opts["createdAt.gte"];
|
|
40533
|
+
if (opts["createdAt.lte"] !== void 0)
|
|
40534
|
+
args.created_at__lte = opts["createdAt.lte"];
|
|
40535
|
+
if (opts.limit !== void 0)
|
|
40536
|
+
args.limit = Number(opts.limit);
|
|
40537
|
+
await ctx.execute({
|
|
40538
|
+
method: "GET",
|
|
40539
|
+
path: "/v1/agents/monitoring/analyses",
|
|
40540
|
+
args,
|
|
40541
|
+
queryParamKeys: [
|
|
40542
|
+
"limit",
|
|
40543
|
+
"cursor",
|
|
40544
|
+
"include_total",
|
|
40545
|
+
"customer_id",
|
|
40546
|
+
"customer_id__in",
|
|
40547
|
+
"status",
|
|
40548
|
+
"created_at__gte",
|
|
40549
|
+
"created_at__lte"
|
|
40550
|
+
]
|
|
40551
|
+
});
|
|
40552
|
+
});
|
|
40553
|
+
resource.command("get-monitoring-analysis").description(`Get one customer health analysis by ID: health score (0-100), tier, summary, per-dimension scores, risk factors and positive signals.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
|
|
40554
|
+
Examples:
|
|
40555
|
+
hyperline ai-monitoring get-monitoring-analysis --id <id>`).action(async (opts) => {
|
|
40556
|
+
const ctx = resource.parent?.opts()._ctx;
|
|
40557
|
+
if (!ctx) {
|
|
40558
|
+
process.stderr.write("Error: Not authenticated\n");
|
|
40559
|
+
process.exit(1);
|
|
40560
|
+
}
|
|
40561
|
+
const args = {};
|
|
40562
|
+
if (opts.id !== void 0)
|
|
40563
|
+
args.id = opts.id;
|
|
40269
40564
|
await ctx.execute({
|
|
40270
40565
|
method: "GET",
|
|
40271
|
-
path: "/v1/
|
|
40566
|
+
path: "/v1/agents/monitoring/analyses/{id}",
|
|
40272
40567
|
args,
|
|
40273
40568
|
queryParamKeys: []
|
|
40274
40569
|
});
|
|
@@ -40434,7 +40729,7 @@ Examples:
|
|
|
40434
40729
|
queryParamKeys: ["take", "skip"]
|
|
40435
40730
|
});
|
|
40436
40731
|
});
|
|
40437
|
-
resource.command("create").description(`Create a new coupon with discount rules. Supports percentage or fixed amount discounts, duration limits, and redemption restrictions.`).requiredOption("--name <value>", `Coupon name.`).option("--description <value>", `Coupon description.`).option("--expiration-date <value>", `Date corresponding to the expiration of the coupon.`).option("--redemption-limit <number>", `Maximum number of subscriptions to which a single coupon can be applied.`).option("--product-ids <json>", `
|
|
40732
|
+
resource.command("create").description(`Create a new coupon with discount rules. Supports percentage or fixed amount discounts, duration limits, and redemption restrictions.`).requiredOption("--name <value>", `Coupon name.`).option("--description <value>", `Coupon description.`).option("--expiration-date <value>", `Date corresponding to the expiration of the coupon.`).option("--redemption-limit <number>", `Maximum number of subscriptions to which a single coupon can be applied.`).option("--product-ids <json>", `Products the coupon is scoped to, read together with \`product_scope\`: the only discounted products when \`include\`, the products never discounted when \`exclude\`, empty when \`all\`.`).option("--product-scope <value>", `Which products the coupon discounts. \`all\`: every product (\`product_ids\` must be empty). \`include\`: only the products in \`product_ids\`. \`exclude\`: every product except those in \`product_ids\` (lines without a product stay discounted). \`include\` and \`exclude\` require a non-empty \`product_ids\`. When omitted on create/update, it is inferred: \`include\` if \`product_ids\` is non-empty, \`all\` otherwise. Integrations that read \`product_ids\` without \`product_scope\` will misread an \`exclude\` list as the products the coupon applies to.`).option("--repeat <value>", `Default repeat behaviour applied when the coupon is attached to a subscription. Valid values: \`once\`, \`forever\`, \`duration\`. Can be overridden at attach time.`).option("--duration <json>", `Default duration applied when \`repeat\` is \`duration\`. Required when \`repeat\` is \`duration\`, must be null otherwise.`).option("--properties <json>", `Key/value pairs to store any metadata useful in your context.`).requiredOption("--type <value>", `type`).option("--discount-amount <number>", `Amount to apply as a discount on the total amount (excluding taxes) of a subscription. Expressed in the currency's smallest unit.`).option("--currency <value>", `Currency code. See [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217#List_of_ISO_4217_currency_codes).`).option("--discount-percent <number>", `Percentage to apply as a discount on the amount (excluding taxes) of a product.`).addHelpText("after", `
|
|
40438
40733
|
Examples:
|
|
40439
40734
|
hyperline coupons create --name <name> --type <type>
|
|
40440
40735
|
hyperline coupons create --name <name> --type <type> --description <description> --expiration-date <expiration_date>
|
|
@@ -40451,6 +40746,8 @@ Examples:
|
|
|
40451
40746
|
args.description = opts.description;
|
|
40452
40747
|
if (opts.expirationDate !== void 0)
|
|
40453
40748
|
args.expiration_date = opts.expirationDate;
|
|
40749
|
+
if (opts.productScope !== void 0)
|
|
40750
|
+
args.product_scope = opts.productScope;
|
|
40454
40751
|
if (opts.repeat !== void 0)
|
|
40455
40752
|
args.repeat = opts.repeat;
|
|
40456
40753
|
if (opts.type !== void 0)
|
|
@@ -40494,7 +40791,7 @@ Examples:
|
|
|
40494
40791
|
queryParamKeys: []
|
|
40495
40792
|
});
|
|
40496
40793
|
});
|
|
40497
|
-
resource.command("update").description(`Update an existing coupon's name, discount rules, or restrictions.`).requiredOption("--id <value>", `id parameter`).requiredOption("--name <value>", `Coupon name.`).option("--description <value>", `Coupon description.`).option("--expiration-date <value>", `Date corresponding to the expiration of the coupon.`).option("--redemption-limit <number>", `Maximum number of subscriptions to which a single coupon can be applied.`).option("--product-ids <json>", `
|
|
40794
|
+
resource.command("update").description(`Update an existing coupon's name, discount rules, or restrictions.`).requiredOption("--id <value>", `id parameter`).requiredOption("--name <value>", `Coupon name.`).option("--description <value>", `Coupon description.`).option("--expiration-date <value>", `Date corresponding to the expiration of the coupon.`).option("--redemption-limit <number>", `Maximum number of subscriptions to which a single coupon can be applied.`).option("--product-ids <json>", `Products the coupon is scoped to, read together with \`product_scope\`: the only discounted products when \`include\`, the products never discounted when \`exclude\`, empty when \`all\`.`).option("--product-scope <value>", `Which products the coupon discounts. \`all\`: every product (\`product_ids\` must be empty). \`include\`: only the products in \`product_ids\`. \`exclude\`: every product except those in \`product_ids\` (lines without a product stay discounted). \`include\` and \`exclude\` require a non-empty \`product_ids\`. When omitted on create/update, it is inferred: \`include\` if \`product_ids\` is non-empty, \`all\` otherwise. Integrations that read \`product_ids\` without \`product_scope\` will misread an \`exclude\` list as the products the coupon applies to.`).option("--repeat <value>", `Default repeat behaviour applied when the coupon is attached to a subscription. Valid values: \`once\`, \`forever\`, \`duration\`. Can be overridden at attach time.`).option("--duration <json>", `Default duration applied when \`repeat\` is \`duration\`. Required when \`repeat\` is \`duration\`, must be null otherwise.`).option("--properties <json>", `Key/value pairs to store any metadata useful in your context.`).requiredOption("--type <value>", `type`).option("--discount-amount <number>", `Amount to apply as a discount on the total amount (excluding taxes) of a subscription. Expressed in the currency's smallest unit.`).option("--currency <value>", `Currency code. See [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217#List_of_ISO_4217_currency_codes).`).option("--discount-percent <number>", `Percentage to apply as a discount on the amount (excluding taxes) of a product.`).addHelpText("after", `
|
|
40498
40795
|
Examples:
|
|
40499
40796
|
hyperline coupons update --id <id> --name <name> --type <type>
|
|
40500
40797
|
hyperline coupons update --id <id> --name <name> --type <type> --description <description> --expiration-date <expiration_date>
|
|
@@ -40513,6 +40810,8 @@ Examples:
|
|
|
40513
40810
|
args.description = opts.description;
|
|
40514
40811
|
if (opts.expirationDate !== void 0)
|
|
40515
40812
|
args.expiration_date = opts.expirationDate;
|
|
40813
|
+
if (opts.productScope !== void 0)
|
|
40814
|
+
args.product_scope = opts.productScope;
|
|
40516
40815
|
if (opts.repeat !== void 0)
|
|
40517
40816
|
args.repeat = opts.repeat;
|
|
40518
40817
|
if (opts.type !== void 0)
|
|
@@ -40863,7 +41162,15 @@ Examples:
|
|
|
40863
41162
|
// build/commands/generated/customers.js
|
|
40864
41163
|
function registerCustomersCommands(parent) {
|
|
40865
41164
|
const resource = parent.command("customers").description("Manage customers");
|
|
40866
|
-
resource.command("list").description(`List customers with optional filters for name, type, status, currency, country, external_id, billing_email, search, tax_id, subscription_status, invoicing_entity_id, segment_id, custom_properties, payment_method_type, integration_entity_id, created_at, and updated_at. Sortable by created_at or updated_at. Paginated with limit/cursor.`).option("--limit <number>", `Maximum number of items to return (1-100).`).option("--cursor <value>", `Opaque cursor returned in the previous response's \`next_cursor\`. Omit to fetch the first page.`).option("--include-total <value>", `Set to \`true\` to include \`total\` in the response.`).option("--order <value>", `Sort direction.`).option("--sort <value>", `Field used to sort the results.`).option("--
|
|
41165
|
+
resource.command("list").description(`List customers with optional filters for name, type, status, currency, country, external_id, billing_email, search, tax_id, tax_id_status, subscription_status, invoicing_entity_id, segment_id, custom_properties, payment_method_type, integration_entity_id, created_at, and updated_at. Sortable by created_at or updated_at. Paginated with limit/cursor.`).option("--limit <number>", `Maximum number of items to return (1-100).`).option("--cursor <value>", `Opaque cursor returned in the previous response's \`next_cursor\`. Omit to fetch the first page.`).option("--include-total <value>", `Set to \`true\` to include \`total\` in the response.`).option("--order <value>", `Sort direction.`).option("--sort <value>", `Field used to sort the results.`).option("--tax-id-status <value>", `
|
|
41166
|
+
Verification status of the customer tax ID.
|
|
41167
|
+
|
|
41168
|
+
- \`valid\`: Tax ID has been verified and is valid.
|
|
41169
|
+
- \`invalid\`: Tax ID has been verified and is invalid.
|
|
41170
|
+
- \`mismatch\`: Tax ID is valid but is for a different country than the customer's country.
|
|
41171
|
+
- \`unverified\`: Tax ID has not been verified yet.
|
|
41172
|
+
- \`unsupported\`: Tax ID verification for this type not supported yet.
|
|
41173
|
+
`).option("--name <value>", `name`).option("--name.not <value>", `name__not`).option("--name.is-null <value>", `name__isNull`).option("--name.is-not-null <value>", `name__isNotNull`).option("--name.equals <value>", `name__equals`).option("--name.contains <value>", `name__contains`).option("--name.starts-with <value>", `name__startsWith`).option("--name.end-with <value>", `name__endWith`).option("--type <value>", `type`).option("--type.in <value>", `type__in`).option("--status <value>", `status`).option("--status.in <value>", `status__in`).option("--currency <value>", `currency`).option("--currency.not <value>", `currency__not`).option("--currency.is-null <value>", `currency__isNull`).option("--currency.is-not-null <value>", `currency__isNotNull`).option("--currency.equals <value>", `currency__equals`).option("--currency.contains <value>", `currency__contains`).option("--currency.starts-with <value>", `currency__startsWith`).option("--currency.end-with <value>", `currency__endWith`).option("--country <value>", `country`).option("--country.not <value>", `country__not`).option("--country.is-null <value>", `country__isNull`).option("--country.is-not-null <value>", `country__isNotNull`).option("--country.equals <value>", `country__equals`).option("--country.contains <value>", `country__contains`).option("--country.starts-with <value>", `country__startsWith`).option("--country.end-with <value>", `country__endWith`).option("--external-id <value>", `external_id`).option("--external-id.not <value>", `external_id__not`).option("--external-id.is-null <value>", `external_id__isNull`).option("--external-id.is-not-null <value>", `external_id__isNotNull`).option("--external-id.equals <value>", `external_id__equals`).option("--external-id.contains <value>", `external_id__contains`).option("--external-id.starts-with <value>", `external_id__startsWith`).option("--external-id.end-with <value>", `external_id__endWith`).option("--billing-email <value>", `billing_email`).option("--billing-email.not <value>", `billing_email__not`).option("--billing-email.is-null <value>", `billing_email__isNull`).option("--billing-email.is-not-null <value>", `billing_email__isNotNull`).option("--billing-email.equals <value>", `billing_email__equals`).option("--billing-email.contains <value>", `billing_email__contains`).option("--billing-email.starts-with <value>", `billing_email__startsWith`).option("--billing-email.end-with <value>", `billing_email__endWith`).option("--search <value>", `search`).option("--tax-id <value>", `tax_id`).option("--tax-id.not <value>", `tax_id__not`).option("--tax-id.is-null <value>", `tax_id__isNull`).option("--tax-id.is-not-null <value>", `tax_id__isNotNull`).option("--tax-id.equals <value>", `tax_id__equals`).option("--tax-id.contains <value>", `tax_id__contains`).option("--tax-id.starts-with <value>", `tax_id__startsWith`).option("--tax-id.end-with <value>", `tax_id__endWith`).option("--subscription-status <value>", `subscription_status`).option("--subscription-status.in <value>", `subscription_status__in`).option("--invoicing-entity-id <value>", `invoicing_entity_id`).option("--invoicing-entity-id.not <value>", `invoicing_entity_id__not`).option("--invoicing-entity-id.is-null <value>", `invoicing_entity_id__isNull`).option("--invoicing-entity-id.is-not-null <value>", `invoicing_entity_id__isNotNull`).option("--invoicing-entity-id.equals <value>", `invoicing_entity_id__equals`).option("--invoicing-entity-id.contains <value>", `invoicing_entity_id__contains`).option("--invoicing-entity-id.starts-with <value>", `invoicing_entity_id__startsWith`).option("--invoicing-entity-id.end-with <value>", `invoicing_entity_id__endWith`).option("--segment-id <value>", `segment_id`).option("--custom-properties <value>", `custom_properties`).option("--payment-method-type <value>", `payment_method_type`).option("--payment-method-type.in <value>", `payment_method_type__in`).option("--integration-entity-id <value>", `integration_entity_id`).option("--created-at <value>", `created_at`).option("--created-at.not <value>", `created_at__not`).option("--created-at.is-null <value>", `created_at__isNull`).option("--created-at.is-not-null <value>", `created_at__isNotNull`).option("--created-at.equals <value>", `created_at__equals`).option("--created-at.lt <value>", `created_at__lt`).option("--created-at.lte <value>", `created_at__lte`).option("--created-at.gt <value>", `created_at__gt`).option("--created-at.gte <value>", `created_at__gte`).option("--updated-at <value>", `updated_at`).option("--updated-at.not <value>", `updated_at__not`).option("--updated-at.is-null <value>", `updated_at__isNull`).option("--updated-at.is-not-null <value>", `updated_at__isNotNull`).option("--updated-at.equals <value>", `updated_at__equals`).option("--updated-at.lt <value>", `updated_at__lt`).option("--updated-at.lte <value>", `updated_at__lte`).option("--updated-at.gt <value>", `updated_at__gt`).option("--updated-at.gte <value>", `updated_at__gte`).addHelpText("after", `
|
|
40867
41174
|
Examples:
|
|
40868
41175
|
hyperline customers list
|
|
40869
41176
|
hyperline customers list --limit <limit> --cursor <cursor>`).action(async (opts) => {
|
|
@@ -40881,6 +41188,8 @@ Examples:
|
|
|
40881
41188
|
args.order = opts.order;
|
|
40882
41189
|
if (opts.sort !== void 0)
|
|
40883
41190
|
args.sort = opts.sort;
|
|
41191
|
+
if (opts.taxIdStatus !== void 0)
|
|
41192
|
+
args.tax_id_status = opts.taxIdStatus;
|
|
40884
41193
|
if (opts.name !== void 0)
|
|
40885
41194
|
args.name = opts.name;
|
|
40886
41195
|
if (opts["name.not"] !== void 0)
|
|
@@ -41065,6 +41374,7 @@ Examples:
|
|
|
41065
41374
|
"include_total",
|
|
41066
41375
|
"order",
|
|
41067
41376
|
"sort",
|
|
41377
|
+
"tax_id_status",
|
|
41068
41378
|
"name",
|
|
41069
41379
|
"name__not",
|
|
41070
41380
|
"name__isNull",
|
|
@@ -41945,7 +42255,7 @@ Examples:
|
|
|
41945
42255
|
queryParamKeys: []
|
|
41946
42256
|
});
|
|
41947
42257
|
});
|
|
41948
|
-
resource.command("purchase-customer-credits").description(`Purchase credits for a customer. This generates an invoice and charges the customer. Returns the invoice ID and new balance.`).requiredOption("--id <value>", `id parameter`).requiredOption("--product-id <value>", `productId parameter`).requiredOption("--credit-count <number>", `Value indicating a number of credits to add. If \`price_id\` is defined, this value must correspond to a full credit pack for the price.`).option("--amount-excluding-tax <number>", `Custom amount for the added credits. Either \`amount_excluding_tax\` or \`price_id\` must be defined. Expressed in currency's smallest unit.`).option("--price-id <value>", `Price ID used to add credits. The price must be of type \`bundle\`. Either \`amount_excluding_tax\` or \`price_id\` must be defined.`).option("--expires-at <value>", `Expiration date for credits linked to this transaction. UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.`).addHelpText("after", `
|
|
42258
|
+
resource.command("purchase-customer-credits").description(`Purchase credits for a customer. This generates an invoice and charges the customer's card immediately, granting the credits only once paid. Requires a card payment method (otherwise fails with reason \`payment_method_not_supported\`). Returns the invoice ID and new balance.`).requiredOption("--id <value>", `id parameter`).requiredOption("--product-id <value>", `productId parameter`).requiredOption("--credit-count <number>", `Value indicating a number of credits to add. If \`price_id\` is defined, this value must correspond to a full credit pack for the price.`).option("--amount-excluding-tax <number>", `Custom amount for the added credits. Either \`amount_excluding_tax\` or \`price_id\` must be defined. Expressed in currency's smallest unit.`).option("--price-id <value>", `Price ID used to add credits. The price must be of type \`bundle\`. Either \`amount_excluding_tax\` or \`price_id\` must be defined.`).option("--expires-at <value>", `Expiration date for credits linked to this transaction. UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.`).addHelpText("after", `
|
|
41949
42259
|
Examples:
|
|
41950
42260
|
hyperline customers-credits purchase-customer-credits --id <id> --product-id <productId> --credit-count <credit_count>
|
|
41951
42261
|
hyperline customers-credits purchase-customer-credits --id <id> --product-id <productId> --credit-count <credit_count> --amount-excluding-tax <amount_excluding_tax> --price-id <price_id>
|
|
@@ -42047,7 +42357,7 @@ Examples:
|
|
|
42047
42357
|
queryParamKeys: []
|
|
42048
42358
|
});
|
|
42049
42359
|
});
|
|
42050
|
-
resource.command("update-customer-credit-portal-settings").description(`Enable or disable customer portal credit top-ups for a customer and credit product, with the price configuration (or a custom price) the customer pays.`).requiredOption("--id <value>", `id parameter`).requiredOption("--product-id <value>", `productId parameter`).requiredOption("--enabled", `Whether the customer can buy this credit product from the customer portal. Enabling requires a price: \`price_configuration_id\`, \`custom_price_configuration\`, or the price already set. Disabling clears the price and removes the customer's own price.`).option("--price-configuration-id <value>", `ID of one of the credit product's price configurations, in the customer's price book and currency, of type \`bundle\`, \`volume\` or \`bulk\`. Mutually exclusive with \`custom_price_configuration\`.`).option("--custom-price-configuration <json>", `A price of the customer's own, in the customer's currency, replacing any previous one. Same shape as a credit product price configuration. Mutually exclusive with \`price_configuration_id\`.`).addHelpText("after", `
|
|
42360
|
+
resource.command("update-customer-credit-portal-settings").description(`Enable or disable customer portal credit top-ups for a customer and credit product, with the price configuration (or a custom price) the customer pays. Enabling requires the customer's credit balance for the product: create it first (createCustomerCredit, a 0 balance is fine).`).requiredOption("--id <value>", `id parameter`).requiredOption("--product-id <value>", `productId parameter`).requiredOption("--enabled", `Whether the customer can buy this credit product from the customer portal. Enabling requires a price: \`price_configuration_id\`, \`custom_price_configuration\`, or the price already set. Disabling clears the price and removes the customer's own price.`).option("--price-configuration-id <value>", `ID of one of the credit product's price configurations, in the customer's price book and currency, of type \`bundle\`, \`volume\` or \`bulk\`. Mutually exclusive with \`custom_price_configuration\`.`).option("--custom-price-configuration <json>", `A price of the customer's own, in the customer's currency, replacing any previous one. Same shape as a credit product price configuration. Mutually exclusive with \`price_configuration_id\`. It needs at least one price; \`unit_count\` is a whole number of at least 1; \`amount\` is never negative, a \`bundle\` pack is never free, and the price is not free altogether; volume tiers start at 0 and each starts where the previous one ends; bulk tiers are in increasing \`to\` order; only the last tier has \`to: null\`. Otherwise the request fails with reason \`invalid_custom_price\`.`).addHelpText("after", `
|
|
42051
42361
|
Examples:
|
|
42052
42362
|
hyperline customers-credits update-customer-credit-portal-settings --id <id> --product-id <productId> --enabled
|
|
42053
42363
|
hyperline customers-credits update-customer-credit-portal-settings --id <id> --product-id <productId> --enabled --price-configuration-id <price_configuration_id> --custom-price-configuration <custom_price_configuration>
|
|
@@ -43204,7 +43514,7 @@ Examples:
|
|
|
43204
43514
|
queryParamKeys: []
|
|
43205
43515
|
});
|
|
43206
43516
|
});
|
|
43207
|
-
resource.command("void").description(`Void an invoice in to_pay status. Automatically generates a corresponding credit note. Optionally send an email notification.`).requiredOption("--id <value>", `id parameter`).option("--send-email", `Indicates if an email for the generated credit note should be sent to the customer.`).addHelpText("after", `
|
|
43517
|
+
resource.command("void").description(`Void an invoice in to_pay status. Automatically generates a corresponding credit note. A zero-priced paid invoice can also be voided, without a credit note. Optionally send an email notification.`).requiredOption("--id <value>", `id parameter`).option("--send-email", `Indicates if an email for the generated credit note should be sent to the customer.`).addHelpText("after", `
|
|
43208
43518
|
Examples:
|
|
43209
43519
|
hyperline invoices void --id <id>
|
|
43210
43520
|
hyperline invoices void --id <id> --send-email
|
|
@@ -43513,7 +43823,7 @@ Examples:
|
|
|
43513
43823
|
queryParamKeys: []
|
|
43514
43824
|
});
|
|
43515
43825
|
});
|
|
43516
|
-
resource.command("create-invoicing-entity").description(`Create a new invoicing entity with company details, address, and tax configuration. Used as the sender on invoices.`).option("--is-default", `Flag to indicate if this is the default invoicing entity. If true, it will switch the other existing invoicing entities to non-default.`).requiredOption("--name <value>", `The name of the invoicing entity.`).option("--trade-name <value>", `The trade name of the invoicing entity.`).option("--timezone <value>", `The timezone the invoicing entity operates in.`).option("--language <value>", `The default language of the invoicing entity.`).option("--registration-number <value>", `The registration number of the invoicing entity.`).option("--tax-id <value>", `The tax identification number of the invoicing entity.`).option("--billing-email <value>", `The billing email address for the invoicing entity.`).option("--address-line1 <value>", `The first line of the address for the invoicing entity.`).option("--address-line2 <value>", `The second line of the address for the invoicing entity.`).option("--zip-code <value>", `The postal code for the invoicing entity's address.`).option("--state <value>", `The state or province of the invoicing entity.`).option("--city <value>", `The city of the invoicing entity.`).requiredOption("--country <value>", `The country in which the invoicing entity is registered. It cannot be changed after creation.`).requiredOption("--currency <value>", `The currency code that the invoicing entity operates in.`).requiredOption("--accounting-currency <value>", `The currency used for accounting purposes.`).option("--invoice-number-pattern <value>", `The pattern used for generating invoice numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--credit-note-number-pattern <value>", `The pattern used for generating credit note numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--document-number-pattern <value>", `The pattern used for generating document numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--next-invoice-number <number>", `The next invoice number to be used.`).option("--next-credit-note-number <number>", `The next credit note number to be used.`).option("--next-document-number <number>", `The next document number to be used.`).option("--default-payment-delay <number>", `The default payment term in days.`).option("--invoice-grace-period-duration <number>", `The grace period duration in days.`).option("--invoice-payment-initiation-delay <number>", `The payment initiation delay in days for the invoices.`).option("--document-payment-initiation-delay <number>", `The payment initiation delay in days for the custom documents.`).option("--invoice-late-fees <value>", `The late fees applicable to the invoices.`).option("--invoice-footer <value>", `The footer text to be used in invoices.`).option("--document-footer <value>", `The footer text to be used in documents. If not specified, the invoice footer will be used.`).option("--quote-footer <value>", `The footer text to be used in quotes.`).option("--logo-url <value>", `URL of the logo to be used in invoices.`).option("--favicon-url <value>", `URL of the logo to be used as favicon.`).option("--brand-color <value>", `Brand color to be used in invoices (hexadecimal color code).`).option("--forced-customer-type <value>", `Forces all customers created under this invoicing entity to have this type. Set to null to allow users to choose.`).option("--credit-note-wallet-refund-enabled", `When enabled and no \`refund_method\` is specified, credit note refunds default to the customer's wallet, including credit notes generated by subscription updates, cancellations, and transitions. An explicit \`refund_method\` always wins. Requires wallets to be enabled at the workspace level.`).option("--standalone-credit-note-creation-enabled", `Whether credit notes without an original invoice can be created under this invoicing entity
|
|
43826
|
+
resource.command("create-invoicing-entity").description(`Create a new invoicing entity with company details, address, and tax configuration. Used as the sender on invoices.`).option("--is-default", `Flag to indicate if this is the default invoicing entity. If true, it will switch the other existing invoicing entities to non-default.`).requiredOption("--name <value>", `The name of the invoicing entity.`).option("--trade-name <value>", `The trade name of the invoicing entity.`).option("--timezone <value>", `The timezone the invoicing entity operates in.`).option("--language <value>", `The default language of the invoicing entity.`).option("--registration-number <value>", `The registration number of the invoicing entity.`).option("--tax-id <value>", `The tax identification number of the invoicing entity.`).option("--billing-email <value>", `The billing email address for the invoicing entity.`).option("--address-line1 <value>", `The first line of the address for the invoicing entity.`).option("--address-line2 <value>", `The second line of the address for the invoicing entity.`).option("--zip-code <value>", `The postal code for the invoicing entity's address.`).option("--state <value>", `The state or province of the invoicing entity.`).option("--city <value>", `The city of the invoicing entity.`).requiredOption("--country <value>", `The country in which the invoicing entity is registered. It cannot be changed after creation.`).requiredOption("--currency <value>", `The currency code that the invoicing entity operates in.`).requiredOption("--accounting-currency <value>", `The currency used for accounting purposes.`).option("--invoice-number-pattern <value>", `The pattern used for generating invoice numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--credit-note-number-pattern <value>", `The pattern used for generating credit note numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--document-number-pattern <value>", `The pattern used for generating document numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--next-invoice-number <number>", `The next invoice number to be used.`).option("--next-credit-note-number <number>", `The next credit note number to be used.`).option("--next-document-number <number>", `The next document number to be used.`).option("--default-payment-delay <number>", `The default payment term in days.`).option("--invoice-grace-period-duration <number>", `The grace period duration in days.`).option("--invoice-payment-initiation-delay <number>", `The payment initiation delay in days for the invoices.`).option("--document-payment-initiation-delay <number>", `The payment initiation delay in days for the custom documents.`).option("--invoice-late-fees <value>", `The late fees applicable to the invoices.`).option("--invoice-footer <value>", `The footer text to be used in invoices.`).option("--document-footer <value>", `The footer text to be used in documents. If not specified, the invoice footer will be used.`).option("--quote-footer <value>", `The footer text to be used in quotes.`).option("--logo-url <value>", `URL of the logo to be used in invoices.`).option("--favicon-url <value>", `URL of the logo to be used as favicon.`).option("--brand-color <value>", `Brand color to be used in invoices (hexadecimal color code).`).option("--forced-customer-type <value>", `Forces all customers created under this invoicing entity to have this type. Set to null to allow users to choose.`).option("--credit-note-wallet-refund-enabled", `When enabled and no \`refund_method\` is specified, credit note refunds default to the customer's wallet, including credit notes generated by subscription updates, cancellations, and transitions. An explicit \`refund_method\` always wins. Requires wallets to be enabled at the workspace level.`).option("--standalone-credit-note-creation-enabled", `Whether credit notes without an original invoice can be created under this invoicing entity. Defaults to \`true\`.`).option("--fx-conversion-display-enabled", `Whether the exchange rate and converted amount in the accounting currency are displayed on the invoice PDF when the invoice currency differs from the accounting currency. The conversion data is still stored and returned by the API when disabled. Defaults to \`true\`.`).addHelpText("after", `
|
|
43517
43827
|
Examples:
|
|
43518
43828
|
hyperline invoicing-entities create-invoicing-entity --name <name> --country <country> --currency <currency> --accounting-currency <accounting_currency>
|
|
43519
43829
|
hyperline invoicing-entities create-invoicing-entity --name <name> --country <country> --currency <currency> --accounting-currency <accounting_currency> --is-default --trade-name <trade_name>
|
|
@@ -43596,6 +43906,8 @@ Examples:
|
|
|
43596
43906
|
args.credit_note_wallet_refund_enabled = true;
|
|
43597
43907
|
if (opts.standaloneCreditNoteCreationEnabled !== void 0)
|
|
43598
43908
|
args.standalone_credit_note_creation_enabled = true;
|
|
43909
|
+
if (opts.fxConversionDisplayEnabled !== void 0)
|
|
43910
|
+
args.fx_conversion_display_enabled = true;
|
|
43599
43911
|
await ctx.execute({
|
|
43600
43912
|
method: "POST",
|
|
43601
43913
|
path: "/v1/invoicing-entities",
|
|
@@ -43603,7 +43915,7 @@ Examples:
|
|
|
43603
43915
|
queryParamKeys: []
|
|
43604
43916
|
});
|
|
43605
43917
|
});
|
|
43606
|
-
resource.command("update-invoicing-entity").description(`Update an existing invoicing entity's details (address, tax ID, branding, etc.).`).requiredOption("--id <value>", `id parameter`).option("--name <value>", `The name of the invoicing entity.`).option("--registration-number <value>", `The registration number of the invoicing entity.`).option("--tax-id <value>", `The tax identification number of the invoicing entity.`).option("--billing-email <value>", `The billing email address for the invoicing entity.`).option("--timezone <value>", `The timezone the invoicing entity operates in.`).option("--language <value>", `The default language of the invoicing entity.`).option("--is-default", `Flag to indicate if this is the default invoicing entity. If true, it will switch the other existing invoicing entities to non-default.`).option("--address-line1 <value>", `The first line of the address for the invoicing entity.`).option("--address-line2 <value>", `The second line of the address for the invoicing entity.`).option("--zip-code <value>", `The postal code for the invoicing entity's address.`).option("--state <value>", `The state or province of the invoicing entity.`).option("--city <value>", `The city of the invoicing entity.`).option("--country <value>", `The country in which the invoicing entity is registered. It cannot be changed after creation.`).option("--currency <value>", `The currency code that the invoicing entity operates in.`).option("--accounting-currency <value>", `The currency used for accounting purposes.`).option("--invoice-number-pattern <value>", `The pattern used for generating invoice numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--credit-note-number-pattern <value>", `The pattern used for generating credit note numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--document-number-pattern <value>", `The pattern used for generating document numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--default-payment-delay <number>", `The default payment term in days.`).option("--invoice-grace-period-duration <number>", `The grace period duration in days.`).option("--invoice-payment-initiation-delay <number>", `The payment initiation delay in days for the invoices.`).option("--document-payment-initiation-delay <number>", `The payment initiation delay in days for the custom documents.`).option("--invoice-late-fees <value>", `The late fees applicable to the invoices.`).option("--invoice-footer <value>", `The footer text to be used in invoices.`).option("--document-footer <value>", `The footer text to be used in documents. If not specified, the invoice footer will be used.`).option("--logo-url <value>", `URL of the logo to be used in invoices.`).option("--favicon-url <value>", `URL of the logo to be used as favicon.`).option("--brand-color <value>", `Brand color to be used in invoices (hexadecimal color code).`).option("--forced-customer-type <value>", `Forces all customers created under this invoicing entity to have this type. Set to null to allow users to choose.`).option("--credit-note-wallet-refund-enabled", `When enabled and no \`refund_method\` is specified, credit note refunds default to the customer's wallet, including credit notes generated by subscription updates, cancellations, and transitions. An explicit \`refund_method\` always wins. Requires wallets to be enabled at the workspace level.`).option("--standalone-credit-note-creation-enabled", `Whether credit notes without an original invoice can be created under this invoicing entity
|
|
43918
|
+
resource.command("update-invoicing-entity").description(`Update an existing invoicing entity's details (address, tax ID, branding, etc.).`).requiredOption("--id <value>", `id parameter`).option("--name <value>", `The name of the invoicing entity.`).option("--registration-number <value>", `The registration number of the invoicing entity.`).option("--tax-id <value>", `The tax identification number of the invoicing entity.`).option("--billing-email <value>", `The billing email address for the invoicing entity.`).option("--timezone <value>", `The timezone the invoicing entity operates in.`).option("--language <value>", `The default language of the invoicing entity.`).option("--is-default", `Flag to indicate if this is the default invoicing entity. If true, it will switch the other existing invoicing entities to non-default.`).option("--address-line1 <value>", `The first line of the address for the invoicing entity.`).option("--address-line2 <value>", `The second line of the address for the invoicing entity.`).option("--zip-code <value>", `The postal code for the invoicing entity's address.`).option("--state <value>", `The state or province of the invoicing entity.`).option("--city <value>", `The city of the invoicing entity.`).option("--country <value>", `The country in which the invoicing entity is registered. It cannot be changed after creation.`).option("--currency <value>", `The currency code that the invoicing entity operates in.`).option("--accounting-currency <value>", `The currency used for accounting purposes.`).option("--invoice-number-pattern <value>", `The pattern used for generating invoice numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--credit-note-number-pattern <value>", `The pattern used for generating credit note numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--document-number-pattern <value>", `The pattern used for generating document numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--default-payment-delay <number>", `The default payment term in days.`).option("--invoice-grace-period-duration <number>", `The grace period duration in days.`).option("--invoice-payment-initiation-delay <number>", `The payment initiation delay in days for the invoices.`).option("--document-payment-initiation-delay <number>", `The payment initiation delay in days for the custom documents.`).option("--invoice-late-fees <value>", `The late fees applicable to the invoices.`).option("--invoice-footer <value>", `The footer text to be used in invoices.`).option("--document-footer <value>", `The footer text to be used in documents. If not specified, the invoice footer will be used.`).option("--logo-url <value>", `URL of the logo to be used in invoices.`).option("--favicon-url <value>", `URL of the logo to be used as favicon.`).option("--brand-color <value>", `Brand color to be used in invoices (hexadecimal color code).`).option("--forced-customer-type <value>", `Forces all customers created under this invoicing entity to have this type. Set to null to allow users to choose.`).option("--credit-note-wallet-refund-enabled", `When enabled and no \`refund_method\` is specified, credit note refunds default to the customer's wallet, including credit notes generated by subscription updates, cancellations, and transitions. An explicit \`refund_method\` always wins. Requires wallets to be enabled at the workspace level.`).option("--standalone-credit-note-creation-enabled", `Whether credit notes without an original invoice can be created under this invoicing entity. Defaults to \`true\`.`).option("--fx-conversion-display-enabled", `Whether the exchange rate and converted amount in the accounting currency are displayed on the invoice PDF when the invoice currency differs from the accounting currency. The conversion data is still stored and returned by the API when disabled. Defaults to \`true\`.`).addHelpText("after", `
|
|
43607
43919
|
Examples:
|
|
43608
43920
|
hyperline invoicing-entities update-invoicing-entity --id <id>
|
|
43609
43921
|
hyperline invoicing-entities update-invoicing-entity --id <id> --name <name> --registration-number <registration_number>
|
|
@@ -43678,6 +43990,8 @@ Examples:
|
|
|
43678
43990
|
args.credit_note_wallet_refund_enabled = true;
|
|
43679
43991
|
if (opts.standaloneCreditNoteCreationEnabled !== void 0)
|
|
43680
43992
|
args.standalone_credit_note_creation_enabled = true;
|
|
43993
|
+
if (opts.fxConversionDisplayEnabled !== void 0)
|
|
43994
|
+
args.fx_conversion_display_enabled = true;
|
|
43681
43995
|
await ctx.execute({
|
|
43682
43996
|
method: "PUT",
|
|
43683
43997
|
path: "/v1/invoicing-entities/{id}",
|
|
@@ -43998,7 +44312,7 @@ Examples:
|
|
|
43998
44312
|
queryParamKeys: []
|
|
43999
44313
|
});
|
|
44000
44314
|
});
|
|
44001
|
-
resource.command("create").description(`Create a new price configuration on an existing product. Specify the product_id, pricing type (fee, volume, bulk, packaged, bps, bundle), currency, billing interval, and price tiers. Supports metering_filter for dynamic products.`).requiredOption("--currency <value>", `Currency code. See [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217#List_of_ISO_4217_currency_codes).`).option("--countries <json>", `Countries this price configuration is eligible in. Omit or send \`null\` to make it eligible in every country. An empty array restricts it to customers that have no country set.`).option("--price-book-id <value>", `ID of the price book to which this price configuration belongs to. If null, the price configuration belongs to the default price book.`).requiredOption("--billing-interval <json>", `Billing interval on which the price configuration is eligible.`).option("--commitment-interval <json>", `Commitment interval on which the price configuration is eligible.`).requiredOption("--type <value>", `type`).requiredOption("--prices <json>", `Price tiers of the price configuration. If fixed amount, only one price is available.`).requiredOption("--product-id <value>", `ID of the product to add the price configuration to.`).option("--metering-filter <json>", `Filter to scope which billable events are eligible for this price configuration.`).option("--allow-on-portal", `allow_on_portal`).addHelpText("after", `
|
|
44315
|
+
resource.command("create").description(`Create a new price configuration on an existing product. Specify the product_id, pricing type (fee, volume, bulk, packaged, bps, bundle), currency, billing interval, and price tiers. Supports metering_filter for dynamic products.`).requiredOption("--currency <value>", `Currency code. See [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217#List_of_ISO_4217_currency_codes).`).option("--countries <json>", `Countries this price configuration is eligible in. Omit or send \`null\` to make it eligible in every country. An empty array restricts it to customers that have no country set.`).option("--price-book-id <value>", `ID of the price book to which this price configuration belongs to. If null, the price configuration belongs to the default price book.`).requiredOption("--billing-interval <json>", `Billing interval on which the price configuration is eligible.`).option("--commitment-interval <json>", `Commitment interval on which the price configuration is eligible.`).requiredOption("--type <value>", `type`).requiredOption("--prices <json>", `Price tiers of the price configuration. If fixed amount, only one price is available.`).requiredOption("--product-id <value>", `ID of the product to add the price configuration to.`).option("--metering-filter <json>", `Filter to scope which billable events are eligible for this price configuration.`).option("--aggregator-filter-id <value>", `ID of an existing metering filter of the product's aggregator to attach to this price configuration, instead of creating a new one with \`metering_filter\`.`).option("--allow-on-portal", `allow_on_portal`).addHelpText("after", `
|
|
44002
44316
|
Examples:
|
|
44003
44317
|
hyperline price-configurations create --currency <currency> --billing-interval <billing_interval> --type <type> --prices <prices> --product-id <product_id>
|
|
44004
44318
|
hyperline price-configurations create --currency <currency> --billing-interval <billing_interval> --type <type> --prices <prices> --product-id <product_id> --countries <countries> --price-book-id <price_book_id>
|
|
@@ -44017,6 +44331,8 @@ Examples:
|
|
|
44017
44331
|
args.type = opts.type;
|
|
44018
44332
|
if (opts.productId !== void 0)
|
|
44019
44333
|
args.product_id = opts.productId;
|
|
44334
|
+
if (opts.aggregatorFilterId !== void 0)
|
|
44335
|
+
args.aggregator_filter_id = opts.aggregatorFilterId;
|
|
44020
44336
|
if (opts.allowOnPortal !== void 0)
|
|
44021
44337
|
args.allow_on_portal = true;
|
|
44022
44338
|
if (opts.countries !== void 0)
|
|
@@ -44430,12 +44746,12 @@ Quote status.
|
|
|
44430
44746
|
- \`draft\`: The quote is a draft.
|
|
44431
44747
|
- \`approved\`: The quote is approved and ready to be sent to the customer.
|
|
44432
44748
|
- \`pending_signature\`: The quote is awaiting the customer's signature.
|
|
44433
|
-
`).option("--owner-email <value>", `Email address of the Hyperline user acting as the quote owner. If not specified, the Hyperline account owner will be assigned.`).requiredOption("--customer-id <value>", `ID of the customer.`).option("--invoicing-entity-id <value>", `ID of the invoicing entity attached to the quote.`).option("--catalog-version-id <value>", `ID of a published catalog version to price every product of the quote from, instead of the live products catalog. A product's own \`catalog_version_id\` takes precedence, and explicit \`prices\` always win over both.`).option("--comments <value>", `Custom comments displayed on the quote.`).option("--terms <value>", `Custom quotation terms.`).option("--amount <number>", `Estimated contract value. For subscription quotes, defaults to the computed subscription value if not specified. For one-off quotes, this field is ignored \u2014 the amount is always derived from the linked invoice's \`amount_excluding_tax\`.`).option("--collect-payment-details <value>", `Collect customer payment method mandate during signature flow or not.`).option("--collect-custom-property-ids <json>", `IDs of the customer custom properties required to be filled during the signature flow.`).option("--contract-clause-ids <json>", `IDs of the contract clauses used in the quote terms.`).option("--require-tax-id <value>", `Require the customer to provide a tax ID during the signature flow.`).option("--display-quote-value <value>", `Display the total quote value on the quote.`).option("--display-quote-value-with-tax <value>", `Display the total quote value including tax on the quote. Only applies to \`one_off\` quotes.`).option("--display-taxes <value>", `Display tax breakdown on the quote.`).option("--display-price-tiers <value>", `Controls which price tiers are displayed on the quote.
|
|
44749
|
+
`).option("--owner-email <value>", `Email address of the Hyperline user acting as the quote owner. The owner requests approval when the quote is finalized using an API key or finalized during creation. If not specified, the Hyperline account owner will be assigned.`).requiredOption("--customer-id <value>", `ID of the customer.`).option("--invoicing-entity-id <value>", `ID of the invoicing entity attached to the quote.`).option("--catalog-version-id <value>", `ID of a published catalog version to price every product of the quote from, instead of the live products catalog. A product's own \`catalog_version_id\` takes precedence, and explicit \`prices\` always win over both.`).option("--comments <value>", `Custom comments displayed on the quote.`).option("--terms <value>", `Custom quotation terms.`).option("--amount <number>", `Estimated contract value. For subscription quotes, defaults to the computed subscription value if not specified. For one-off quotes, this field is ignored \u2014 the amount is always derived from the linked invoice's \`amount_excluding_tax\`.`).option("--contract-value <number>", `What the customer pays over the contract, each coupon counted on the invoices it applies to. Computed from the subscription for \`subscription\` and \`subscription_update\` quotes, unless set manually. Not set on \`one_off\` quotes. When specified, overrides the computed value.`).option("--collect-payment-details <value>", `Collect customer payment method mandate during signature flow or not.`).option("--collect-custom-property-ids <json>", `IDs of the customer custom properties required to be filled during the signature flow.`).option("--contract-clause-ids <json>", `IDs of the contract clauses used in the quote terms.`).option("--require-tax-id <value>", `Require the customer to provide a tax ID during the signature flow.`).option("--display-quote-value <value>", `Display the total quote value on the quote.`).option("--display-quote-value-with-tax <value>", `Display the total quote value including tax on the quote. Only applies to \`one_off\` quotes.`).option("--display-taxes <value>", `Display tax breakdown on the quote.`).option("--display-price-tiers <value>", `Controls which price tiers are displayed on the quote.
|
|
44434
44750
|
|
|
44435
44751
|
- \`all\`: Display all pricing tiers.
|
|
44436
44752
|
- \`matching\`: Only display the tiers used to compute the price based on quantity.
|
|
44437
44753
|
- \`none\`: Hide all pricing tiers.
|
|
44438
|
-
`).option("--display-phase-value <value>", `Display per-phase value breakdown on the quote.`).option("--display-first-invoice-amount <value>", `Display the first invoice amount on the quote.`).option("--display-documents-in-preview <value>", `Display attached documents in the quote preview.`).option("--subscription-update-display <value>", `Sections displayed on subscription update quotes: quote_update_details, subscription_details, or both. Takes precedence over display_subscription_on_update.`).option("--generate-draft-invoices <value>", `When \`true\`, the invoice issued after signature stays in \`draft\` status instead of being emitted for payment. Use this when you want to review the final invoice manually before sending it. Defaults to \`false\`.`).option("--template-id <value>", `ID of the quote template. If not specified, a subscription configuration or an \`invoice\` payload must be defined.`).option("--expires-at <value>", `Quote expiration date. UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.`).option("--subscription <json>", `Subscription configuration constituting the quote.`).option("--invoice <json>", `Invoice configuration constituting the one-off quote. When provided, a draft invoice is created and linked to the quote. Cannot be combined with \`subscription\` or \`template_id\`.`).addHelpText("after", `
|
|
44754
|
+
`).option("--display-phase-value <value>", `Display per-phase value breakdown on the quote.`).option("--display-discounts-on-total <value>", `Display discounts on the totals, with product prices before discount. Totals then follow the contract value, so discounts with a limited duration are included.`).option("--display-first-invoice-amount <value>", `Display the first invoice amount on the quote.`).option("--display-documents-in-preview <value>", `Display attached documents in the quote preview.`).option("--subscription-update-display <value>", `Sections displayed on subscription update quotes: quote_update_details, subscription_details, or both. Takes precedence over display_subscription_on_update.`).option("--generate-draft-invoices <value>", `When \`true\`, the invoice issued after signature stays in \`draft\` status instead of being emitted for payment. Use this when you want to review the final invoice manually before sending it. Defaults to \`false\`.`).option("--template-id <value>", `ID of the quote template. If not specified, a subscription configuration or an \`invoice\` payload must be defined.`).option("--expires-at <value>", `Quote expiration date. UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.`).option("--subscription <json>", `Subscription configuration constituting the quote.`).option("--invoice <json>", `Invoice configuration constituting the one-off quote. When provided, a draft invoice is created and linked to the quote. Cannot be combined with \`subscription\` or \`template_id\`.`).addHelpText("after", `
|
|
44439
44755
|
Examples:
|
|
44440
44756
|
hyperline quotes create --customer-id <customer_id>
|
|
44441
44757
|
hyperline quotes create --customer-id <customer_id> --status <status> --owner-email <owner_email>
|
|
@@ -44474,6 +44790,8 @@ Examples:
|
|
|
44474
44790
|
args.display_price_tiers = opts.displayPriceTiers;
|
|
44475
44791
|
if (opts.displayPhaseValue !== void 0)
|
|
44476
44792
|
args.display_phase_value = opts.displayPhaseValue;
|
|
44793
|
+
if (opts.displayDiscountsOnTotal !== void 0)
|
|
44794
|
+
args.display_discounts_on_total = opts.displayDiscountsOnTotal;
|
|
44477
44795
|
if (opts.displayFirstInvoiceAmount !== void 0)
|
|
44478
44796
|
args.display_first_invoice_amount = opts.displayFirstInvoiceAmount;
|
|
44479
44797
|
if (opts.displayDocumentsInPreview !== void 0)
|
|
@@ -44488,6 +44806,8 @@ Examples:
|
|
|
44488
44806
|
args.expires_at = opts.expiresAt;
|
|
44489
44807
|
if (opts.amount !== void 0)
|
|
44490
44808
|
args.amount = Number(opts.amount);
|
|
44809
|
+
if (opts.contractValue !== void 0)
|
|
44810
|
+
args.contract_value = Number(opts.contractValue);
|
|
44491
44811
|
if (opts.collectCustomPropertyIds !== void 0)
|
|
44492
44812
|
args.collect_custom_property_ids = JSON.parse(opts.collectCustomPropertyIds);
|
|
44493
44813
|
if (opts.contractClauseIds !== void 0)
|
|
@@ -44503,7 +44823,7 @@ Examples:
|
|
|
44503
44823
|
queryParamKeys: []
|
|
44504
44824
|
});
|
|
44505
44825
|
});
|
|
44506
|
-
resource.command("list").description(`List quotes with optional filters for id, number, status, customer_id, template_id, crm_opportunity_id, type, and updated_at. Paginated with take/skip.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--id <value>", `id`).option("--id.not <value>", `id__not`).option("--id.is-null <value>", `id__isNull`).option("--id.is-not-null <value>", `id__isNotNull`).option("--id.equals <value>", `id__equals`).option("--id.contains <value>", `id__contains`).option("--id.starts-with <value>", `id__startsWith`).option("--id.end-with <value>", `id__endWith`).option("--number <value>", `number`).option("--number.not <value>", `number__not`).option("--number.is-null <value>", `number__isNull`).option("--number.is-not-null <value>", `number__isNotNull`).option("--number.equals <value>", `number__equals`).option("--number.contains <value>", `number__contains`).option("--number.starts-with <value>", `number__startsWith`).option("--number.end-with <value>", `number__endWith`).option("--status <value>", `status`).option("--status.in <value>", `status__in`).option("--customer-id <value>", `customer_id`).option("--customer-id.not <value>", `customer_id__not`).option("--customer-id.is-null <value>", `customer_id__isNull`).option("--customer-id.is-not-null <value>", `customer_id__isNotNull`).option("--customer-id.equals <value>", `customer_id__equals`).option("--customer-id.contains <value>", `customer_id__contains`).option("--customer-id.starts-with <value>", `customer_id__startsWith`).option("--customer-id.end-with <value>", `customer_id__endWith`).option("--template-id <value>", `template_id`).option("--template-id.not <value>", `template_id__not`).option("--template-id.is-null <value>", `template_id__isNull`).option("--template-id.is-not-null <value>", `template_id__isNotNull`).option("--template-id.equals <value>", `template_id__equals`).option("--template-id.contains <value>", `template_id__contains`).option("--template-id.starts-with <value>", `template_id__startsWith`).option("--template-id.end-with <value>", `template_id__endWith`).option("--crm-opportunity-id <value>", `crm_opportunity_id`).option("--crm-opportunity-id.not <value>", `crm_opportunity_id__not`).option("--crm-opportunity-id.is-null <value>", `crm_opportunity_id__isNull`).option("--crm-opportunity-id.is-not-null <value>", `crm_opportunity_id__isNotNull`).option("--crm-opportunity-id.equals <value>", `crm_opportunity_id__equals`).option("--crm-opportunity-id.contains <value>", `crm_opportunity_id__contains`).option("--crm-opportunity-id.starts-with <value>", `crm_opportunity_id__startsWith`).option("--crm-opportunity-id.end-with <value>", `crm_opportunity_id__endWith`).option("--type <value>", `type`).option("--
|
|
44826
|
+
resource.command("list").description(`List quotes with optional filters for id, number, status, customer_id, template_id, crm_opportunity_id, type, and updated_at. Paginated with take/skip.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--id <value>", `id`).option("--id.not <value>", `id__not`).option("--id.is-null <value>", `id__isNull`).option("--id.is-not-null <value>", `id__isNotNull`).option("--id.equals <value>", `id__equals`).option("--id.contains <value>", `id__contains`).option("--id.starts-with <value>", `id__startsWith`).option("--id.end-with <value>", `id__endWith`).option("--number <value>", `number`).option("--number.not <value>", `number__not`).option("--number.is-null <value>", `number__isNull`).option("--number.is-not-null <value>", `number__isNotNull`).option("--number.equals <value>", `number__equals`).option("--number.contains <value>", `number__contains`).option("--number.starts-with <value>", `number__startsWith`).option("--number.end-with <value>", `number__endWith`).option("--status <value>", `status`).option("--status.in <value>", `status__in`).option("--customer-id <value>", `customer_id`).option("--customer-id.not <value>", `customer_id__not`).option("--customer-id.is-null <value>", `customer_id__isNull`).option("--customer-id.is-not-null <value>", `customer_id__isNotNull`).option("--customer-id.equals <value>", `customer_id__equals`).option("--customer-id.contains <value>", `customer_id__contains`).option("--customer-id.starts-with <value>", `customer_id__startsWith`).option("--customer-id.end-with <value>", `customer_id__endWith`).option("--template-id <value>", `template_id`).option("--template-id.not <value>", `template_id__not`).option("--template-id.is-null <value>", `template_id__isNull`).option("--template-id.is-not-null <value>", `template_id__isNotNull`).option("--template-id.equals <value>", `template_id__equals`).option("--template-id.contains <value>", `template_id__contains`).option("--template-id.starts-with <value>", `template_id__startsWith`).option("--template-id.end-with <value>", `template_id__endWith`).option("--crm-opportunity-id <value>", `crm_opportunity_id`).option("--crm-opportunity-id.not <value>", `crm_opportunity_id__not`).option("--crm-opportunity-id.is-null <value>", `crm_opportunity_id__isNull`).option("--crm-opportunity-id.is-not-null <value>", `crm_opportunity_id__isNotNull`).option("--crm-opportunity-id.equals <value>", `crm_opportunity_id__equals`).option("--crm-opportunity-id.contains <value>", `crm_opportunity_id__contains`).option("--crm-opportunity-id.starts-with <value>", `crm_opportunity_id__startsWith`).option("--crm-opportunity-id.end-with <value>", `crm_opportunity_id__endWith`).option("--type <value>", `type`).option("--updated-at <value>", `updated_at`).option("--updated-at.not <value>", `updated_at__not`).option("--updated-at.is-null <value>", `updated_at__isNull`).option("--updated-at.is-not-null <value>", `updated_at__isNotNull`).option("--updated-at.equals <value>", `updated_at__equals`).option("--updated-at.lt <value>", `updated_at__lt`).option("--updated-at.lte <value>", `updated_at__lte`).option("--updated-at.gt <value>", `updated_at__gt`).option("--updated-at.gte <value>", `updated_at__gte`).addHelpText("after", `
|
|
44507
44827
|
Examples:
|
|
44508
44828
|
hyperline quotes list
|
|
44509
44829
|
hyperline quotes list --take <take> --id <id>`).action(async (opts) => {
|
|
@@ -44599,20 +44919,6 @@ Examples:
|
|
|
44599
44919
|
args.crm_opportunity_id__endWith = opts["crmOpportunityId.endWith"];
|
|
44600
44920
|
if (opts.type !== void 0)
|
|
44601
44921
|
args.type = opts.type;
|
|
44602
|
-
if (opts["type.not"] !== void 0)
|
|
44603
|
-
args.type__not = opts["type.not"];
|
|
44604
|
-
if (opts["type.isNull"] !== void 0)
|
|
44605
|
-
args.type__isNull = opts["type.isNull"];
|
|
44606
|
-
if (opts["type.isNotNull"] !== void 0)
|
|
44607
|
-
args.type__isNotNull = opts["type.isNotNull"];
|
|
44608
|
-
if (opts["type.equals"] !== void 0)
|
|
44609
|
-
args.type__equals = opts["type.equals"];
|
|
44610
|
-
if (opts["type.contains"] !== void 0)
|
|
44611
|
-
args.type__contains = opts["type.contains"];
|
|
44612
|
-
if (opts["type.startsWith"] !== void 0)
|
|
44613
|
-
args.type__startsWith = opts["type.startsWith"];
|
|
44614
|
-
if (opts["type.endWith"] !== void 0)
|
|
44615
|
-
args.type__endWith = opts["type.endWith"];
|
|
44616
44922
|
if (opts.updatedAt !== void 0)
|
|
44617
44923
|
args.updated_at = opts.updatedAt;
|
|
44618
44924
|
if (opts["updatedAt.not"] !== void 0)
|
|
@@ -44685,13 +44991,6 @@ Examples:
|
|
|
44685
44991
|
"crm_opportunity_id__startsWith",
|
|
44686
44992
|
"crm_opportunity_id__endWith",
|
|
44687
44993
|
"type",
|
|
44688
|
-
"type__not",
|
|
44689
|
-
"type__isNull",
|
|
44690
|
-
"type__isNotNull",
|
|
44691
|
-
"type__equals",
|
|
44692
|
-
"type__contains",
|
|
44693
|
-
"type__startsWith",
|
|
44694
|
-
"type__endWith",
|
|
44695
44994
|
"updated_at",
|
|
44696
44995
|
"updated_at__not",
|
|
44697
44996
|
"updated_at__isNull",
|
|
@@ -44722,12 +45021,12 @@ Examples:
|
|
|
44722
45021
|
queryParamKeys: []
|
|
44723
45022
|
});
|
|
44724
45023
|
});
|
|
44725
|
-
resource.command("update").description(`Update quote-level fields before a quote is finalized. On draft quotes, pass \`subscription\` inline \u2014 the full configuration, not a reference to an existing subscription \u2014 to create or replace the draft subscription configuration, or pass \`invoice\` on a one-off quote to replace the linked draft invoice. For quotes created from \`template_id\`, use this tool for subscription overrides such as dates, contract terms, products, phases, coupons, discounts, prices, seats, and subscription custom properties. Omit \`terms\`, \`comments\`, and \`contract_clause_ids\` unless deliberately overriding template content. Discover product and price configuration IDs with \`get_catalog_context\`.`).requiredOption("--id <value>", `id parameter`).option("--owner-email <value>", `Email address of the Hyperline user acting as the quote owner.`).option("--catalog-version-id <value>", `ID of a published catalog version to price every product of the quote from, instead of the live products catalog. A product's own \`catalog_version_id\` takes precedence, and explicit \`prices\` always win over both.`).option("--comments <value>", `Custom comments displayed on the quote.`).option("--terms <value>", `Custom quotation terms.`).option("--amount <number>", `Estimated contract value. Set to \`null\` to clear the manually set value.`).option("--collect-payment-details <value>", `Collect customer payment method mandate during signature flow or not.`).option("--collect-custom-property-ids <json>", `IDs of the customer custom properties required to be filled during the signature flow.`).option("--contract-clause-ids <json>", `IDs of the contract clauses used in the quote terms.`).option("--require-tax-id <value>", `Require the customer to provide a tax ID during the signature flow.`).option("--display-quote-value <value>", `Display the total quote value on the quote.`).option("--display-quote-value-with-tax <value>", `Display the total quote value including tax on the quote. Only applies to \`one_off\` quotes.`).option("--display-taxes <value>", `Display tax breakdown on the quote.`).option("--display-price-tiers <value>", `Controls which price tiers are displayed on the quote.
|
|
45024
|
+
resource.command("update").description(`Update quote-level fields before a quote is finalized. On draft quotes, pass \`subscription\` inline \u2014 the full configuration, not a reference to an existing subscription \u2014 to create or replace the draft subscription configuration, or pass \`invoice\` on a one-off quote to replace the linked draft invoice. For quotes created from \`template_id\`, use this tool for subscription overrides such as dates, contract terms, products, phases, coupons, discounts, prices, seats, and subscription custom properties. Omit \`terms\`, \`comments\`, and \`contract_clause_ids\` unless deliberately overriding template content. Discover product and price configuration IDs with \`get_catalog_context\`.`).requiredOption("--id <value>", `id parameter`).option("--owner-email <value>", `Email address of the Hyperline user acting as the quote owner. The owner requests approval when the quote is finalized using an API key or finalized during creation.`).option("--catalog-version-id <value>", `ID of a published catalog version to price every product of the quote from, instead of the live products catalog. A product's own \`catalog_version_id\` takes precedence, and explicit \`prices\` always win over both.`).option("--comments <value>", `Custom comments displayed on the quote.`).option("--terms <value>", `Custom quotation terms.`).option("--amount <number>", `Estimated contract value. Set to \`null\` to clear the manually set value.`).option("--contract-value <number>", `What the customer pays over the contract, each coupon counted on the invoices it applies to. Computed from the subscription for \`subscription\` and \`subscription_update\` quotes, unless set manually. Not set on \`one_off\` quotes. When specified, overrides the computed value. Set to \`null\` to go back to the computed value.`).option("--collect-payment-details <value>", `Collect customer payment method mandate during signature flow or not.`).option("--collect-custom-property-ids <json>", `IDs of the customer custom properties required to be filled during the signature flow.`).option("--contract-clause-ids <json>", `IDs of the contract clauses used in the quote terms.`).option("--require-tax-id <value>", `Require the customer to provide a tax ID during the signature flow.`).option("--display-quote-value <value>", `Display the total quote value on the quote.`).option("--display-quote-value-with-tax <value>", `Display the total quote value including tax on the quote. Only applies to \`one_off\` quotes.`).option("--display-taxes <value>", `Display tax breakdown on the quote.`).option("--display-price-tiers <value>", `Controls which price tiers are displayed on the quote.
|
|
44726
45025
|
|
|
44727
45026
|
- \`all\`: Display all pricing tiers.
|
|
44728
45027
|
- \`matching\`: Only display the tiers used to compute the price based on quantity.
|
|
44729
45028
|
- \`none\`: Hide all pricing tiers.
|
|
44730
|
-
`).option("--display-phase-value <value>", `Display per-phase value breakdown on the quote.`).option("--display-first-invoice-amount <value>", `Display the first invoice amount on the quote.`).option("--display-documents-in-preview <value>", `Display attached documents in the quote preview.`).option("--subscription-update-display <value>", `Sections displayed on subscription update quotes: quote_update_details, subscription_details, or both. Takes precedence over display_subscription_on_update.`).option("--generate-draft-invoices <value>", `When \`true\`, the invoice issued after signature stays in \`draft\` status instead of being emitted for payment. Use this when you want to review the final invoice manually before sending it. Defaults to \`false\`.`).option("--crm-opportunity-id <value>", `ID of the related opportunity/deal in the connected CRM.`).option("--expires-at <value>", `Quote expiration date. UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format. Set to \`null\` to clear the expiration.`).option("--subscription <json>", `Subscription configuration constituting the quote. When provided on a draft quote, it creates or replaces the draft subscription attached to the quote.`).option("--invoice <json>", `Invoice configuration constituting the one-off quote. When provided on a draft one-off quote, it deletes the previous draft invoice and creates a fresh one linked to the quote. \`invoice.invoicing_entity_id\` is ignored on update \u2014 the quote's existing invoicing entity is reused.`).addHelpText("after", `
|
|
45029
|
+
`).option("--display-phase-value <value>", `Display per-phase value breakdown on the quote.`).option("--display-discounts-on-total <value>", `Display discounts on the totals, with product prices before discount. Totals then follow the contract value, so discounts with a limited duration are included.`).option("--display-first-invoice-amount <value>", `Display the first invoice amount on the quote.`).option("--display-documents-in-preview <value>", `Display attached documents in the quote preview.`).option("--subscription-update-display <value>", `Sections displayed on subscription update quotes: quote_update_details, subscription_details, or both. Takes precedence over display_subscription_on_update.`).option("--generate-draft-invoices <value>", `When \`true\`, the invoice issued after signature stays in \`draft\` status instead of being emitted for payment. Use this when you want to review the final invoice manually before sending it. Defaults to \`false\`.`).option("--crm-opportunity-id <value>", `ID of the related opportunity/deal in the connected CRM.`).option("--expires-at <value>", `Quote expiration date. UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format. Set to \`null\` to clear the expiration.`).option("--subscription <json>", `Subscription configuration constituting the quote. When provided on a draft quote, it creates or replaces the draft subscription attached to the quote.`).option("--invoice <json>", `Invoice configuration constituting the one-off quote. When provided on a draft one-off quote, it deletes the previous draft invoice and creates a fresh one linked to the quote. \`invoice.invoicing_entity_id\` is ignored on update \u2014 the quote's existing invoicing entity is reused.`).addHelpText("after", `
|
|
44731
45030
|
Examples:
|
|
44732
45031
|
hyperline quotes update --id <id>
|
|
44733
45032
|
hyperline quotes update --id <id> --owner-email <owner_email> --catalog-version-id <catalog_version_id>
|
|
@@ -44762,6 +45061,8 @@ Examples:
|
|
|
44762
45061
|
args.display_price_tiers = opts.displayPriceTiers;
|
|
44763
45062
|
if (opts.displayPhaseValue !== void 0)
|
|
44764
45063
|
args.display_phase_value = opts.displayPhaseValue;
|
|
45064
|
+
if (opts.displayDiscountsOnTotal !== void 0)
|
|
45065
|
+
args.display_discounts_on_total = opts.displayDiscountsOnTotal;
|
|
44765
45066
|
if (opts.displayFirstInvoiceAmount !== void 0)
|
|
44766
45067
|
args.display_first_invoice_amount = opts.displayFirstInvoiceAmount;
|
|
44767
45068
|
if (opts.displayDocumentsInPreview !== void 0)
|
|
@@ -44776,6 +45077,8 @@ Examples:
|
|
|
44776
45077
|
args.expires_at = opts.expiresAt;
|
|
44777
45078
|
if (opts.amount !== void 0)
|
|
44778
45079
|
args.amount = Number(opts.amount);
|
|
45080
|
+
if (opts.contractValue !== void 0)
|
|
45081
|
+
args.contract_value = Number(opts.contractValue);
|
|
44779
45082
|
if (opts.collectCustomPropertyIds !== void 0)
|
|
44780
45083
|
args.collect_custom_property_ids = JSON.parse(opts.collectCustomPropertyIds);
|
|
44781
45084
|
if (opts.contractClauseIds !== void 0)
|
|
@@ -44831,10 +45134,11 @@ Examples:
|
|
|
44831
45134
|
queryParamKeys: ["locale"]
|
|
44832
45135
|
});
|
|
44833
45136
|
});
|
|
44834
|
-
resource.command("
|
|
45137
|
+
resource.command("finalize").description(`Finalize a draft quote. The quote is submitted for approval when approval is required, otherwise it becomes approved and ready to be sent for signature.`).requiredOption("--id <value>", `id parameter`).option("--requester-comment <value>", `Internal comment supplied by the requester for approvers; not displayed on the customer-facing quote.`).addHelpText("after", `
|
|
44835
45138
|
Examples:
|
|
44836
|
-
hyperline quotes
|
|
44837
|
-
hyperline quotes
|
|
45139
|
+
hyperline quotes finalize --id <id>
|
|
45140
|
+
hyperline quotes finalize --id <id> --requester-comment <requester_comment>
|
|
45141
|
+
hyperline quotes finalize --id <id> --output json`).action(async (opts) => {
|
|
44838
45142
|
const ctx = resource.parent?.opts()._ctx;
|
|
44839
45143
|
if (!ctx) {
|
|
44840
45144
|
process.stderr.write("Error: Not authenticated\n");
|
|
@@ -44843,17 +45147,19 @@ Examples:
|
|
|
44843
45147
|
const args = {};
|
|
44844
45148
|
if (opts.id !== void 0)
|
|
44845
45149
|
args.id = opts.id;
|
|
45150
|
+
if (opts.requesterComment !== void 0)
|
|
45151
|
+
args.requester_comment = opts.requesterComment;
|
|
44846
45152
|
await ctx.execute({
|
|
44847
45153
|
method: "POST",
|
|
44848
|
-
path: "/v1/quotes/{id}/
|
|
45154
|
+
path: "/v1/quotes/{id}/finalize",
|
|
44849
45155
|
args,
|
|
44850
45156
|
queryParamKeys: []
|
|
44851
45157
|
});
|
|
44852
45158
|
});
|
|
44853
|
-
resource.command("
|
|
45159
|
+
resource.command("redraft").description(`Switch a quote back to draft so its subscription or invoice configuration can be updated. Works on quotes pending approval, with changes requested, approved, or awaiting signature. Cancels pending approval requests and the signature request; the quote must then be finalized again.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
|
|
44854
45160
|
Examples:
|
|
44855
|
-
hyperline quotes
|
|
44856
|
-
hyperline quotes
|
|
45161
|
+
hyperline quotes redraft --id <id>
|
|
45162
|
+
hyperline quotes redraft --id <id> --output json`).action(async (opts) => {
|
|
44857
45163
|
const ctx = resource.parent?.opts()._ctx;
|
|
44858
45164
|
if (!ctx) {
|
|
44859
45165
|
process.stderr.write("Error: Not authenticated\n");
|
|
@@ -44864,16 +45170,16 @@ Examples:
|
|
|
44864
45170
|
args.id = opts.id;
|
|
44865
45171
|
await ctx.execute({
|
|
44866
45172
|
method: "POST",
|
|
44867
|
-
path: "/v1/quotes/{id}/
|
|
45173
|
+
path: "/v1/quotes/{id}/redraft",
|
|
44868
45174
|
args,
|
|
44869
45175
|
queryParamKeys: []
|
|
44870
45176
|
});
|
|
44871
45177
|
});
|
|
44872
|
-
resource.command("send").description(`Send a quote by email for customer signature. Requires the quote to be approved first.`).requiredOption("--id <value>", `id parameter`).
|
|
45178
|
+
resource.command("send").description(`Send a quote by email for customer signature. Requires the quote to be approved first.`).requiredOption("--id <value>", `id parameter`).option("--email <value>", `Email address to which the quote will be sent for signature. Required unless the quote has signers, in which case the email goes to the signers of the current step and this field is ignored.`).option("--message <value>", `Custom message used in the email content.`).addHelpText("after", `
|
|
44873
45179
|
Examples:
|
|
44874
|
-
hyperline quotes send --id <id>
|
|
45180
|
+
hyperline quotes send --id <id>
|
|
44875
45181
|
hyperline quotes send --id <id> --email <email> --message <message>
|
|
44876
|
-
hyperline quotes send --id <id> --
|
|
45182
|
+
hyperline quotes send --id <id> --output json`).action(async (opts) => {
|
|
44877
45183
|
const ctx = resource.parent?.opts()._ctx;
|
|
44878
45184
|
if (!ctx) {
|
|
44879
45185
|
process.stderr.write("Error: Not authenticated\n");
|
|
@@ -44893,6 +45199,51 @@ Examples:
|
|
|
44893
45199
|
queryParamKeys: []
|
|
44894
45200
|
});
|
|
44895
45201
|
});
|
|
45202
|
+
resource.command("list-quote-signers").description(`List the signers of a quote in signing order, with each signer's status (pending, notified, viewed, signed, declined). An empty list means the quote uses the single-signer flow of \`send_quote\`.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
|
|
45203
|
+
Examples:
|
|
45204
|
+
hyperline quotes list-quote-signers --id <id>`).action(async (opts) => {
|
|
45205
|
+
const ctx = resource.parent?.opts()._ctx;
|
|
45206
|
+
if (!ctx) {
|
|
45207
|
+
process.stderr.write("Error: Not authenticated\n");
|
|
45208
|
+
process.exit(1);
|
|
45209
|
+
}
|
|
45210
|
+
const args = {};
|
|
45211
|
+
if (opts.id !== void 0)
|
|
45212
|
+
args.id = opts.id;
|
|
45213
|
+
await ctx.execute({
|
|
45214
|
+
method: "GET",
|
|
45215
|
+
path: "/v1/quotes/{id}/signers",
|
|
45216
|
+
args,
|
|
45217
|
+
queryParamKeys: []
|
|
45218
|
+
});
|
|
45219
|
+
});
|
|
45220
|
+
resource.command("set-quote-signers").description(`Replace the full list of signers of a quote. Signers with the same \`step_order\` sign in parallel; steps sign in ascending order. Requires at least one \`external\` signer, and a \`countersigner\` must sign after an external step. Set signers before calling \`send_quote\`, which then emails the signers of the first step and no longer needs \`email\`. Pass an empty list to go back to the single-signer flow.`).requiredOption("--id <value>", `id parameter`).requiredOption("--signers <json>", `
|
|
45221
|
+
Signature workflow of the quote, replaced as a whole.
|
|
45222
|
+
|
|
45223
|
+
Signers sign step by step, in ascending \`step_order\`. Signers sharing a step sign in parallel, and the next step opens once all of them have signed. The workflow needs at least one \`external\` signer, and a \`countersigner\` must sign after the first external step.
|
|
45224
|
+
|
|
45225
|
+
Signers who already signed cannot be removed or moved. Once the quote is out for signature at an electronic signature provider, the workflow can no longer be changed.
|
|
45226
|
+
`).addHelpText("after", `
|
|
45227
|
+
Examples:
|
|
45228
|
+
hyperline quotes set-quote-signers --id <id> --signers <signers>
|
|
45229
|
+
hyperline quotes set-quote-signers --id <id> --signers <signers> --output json`).action(async (opts) => {
|
|
45230
|
+
const ctx = resource.parent?.opts()._ctx;
|
|
45231
|
+
if (!ctx) {
|
|
45232
|
+
process.stderr.write("Error: Not authenticated\n");
|
|
45233
|
+
process.exit(1);
|
|
45234
|
+
}
|
|
45235
|
+
const args = {};
|
|
45236
|
+
if (opts.id !== void 0)
|
|
45237
|
+
args.id = opts.id;
|
|
45238
|
+
if (opts.signers !== void 0)
|
|
45239
|
+
args.signers = JSON.parse(opts.signers);
|
|
45240
|
+
await ctx.execute({
|
|
45241
|
+
method: "PUT",
|
|
45242
|
+
path: "/v1/quotes/{id}/signers",
|
|
45243
|
+
args,
|
|
45244
|
+
queryParamKeys: []
|
|
45245
|
+
});
|
|
45246
|
+
});
|
|
44896
45247
|
resource.command("sign").description(`Manually mark a quote as signed externally. Optionally upload a signed PDF. Bypasses the built-in Hyperline signature flow.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
|
|
44897
45248
|
Examples:
|
|
44898
45249
|
hyperline quotes sign --id <id>
|
|
@@ -44976,6 +45327,48 @@ Examples:
|
|
|
44976
45327
|
});
|
|
44977
45328
|
}
|
|
44978
45329
|
|
|
45330
|
+
// build/commands/generated/quotes-approvals.js
|
|
45331
|
+
function registerQuotes_ApprovalsCommands(parent) {
|
|
45332
|
+
const resource = parent.command("quotes-approvals").description("Manage quotes > approvals");
|
|
45333
|
+
resource.command("approve-quote").description(`Approve a quote as the account owner. This is a prerequisite before sending the quote for customer signature.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
|
|
45334
|
+
Examples:
|
|
45335
|
+
hyperline quotes-approvals approve-quote --id <id>
|
|
45336
|
+
hyperline quotes-approvals approve-quote --id <id> --output json`).action(async (opts) => {
|
|
45337
|
+
const ctx = resource.parent?.opts()._ctx;
|
|
45338
|
+
if (!ctx) {
|
|
45339
|
+
process.stderr.write("Error: Not authenticated\n");
|
|
45340
|
+
process.exit(1);
|
|
45341
|
+
}
|
|
45342
|
+
const args = {};
|
|
45343
|
+
if (opts.id !== void 0)
|
|
45344
|
+
args.id = opts.id;
|
|
45345
|
+
await ctx.execute({
|
|
45346
|
+
method: "POST",
|
|
45347
|
+
path: "/v1/quotes/{id}/approve",
|
|
45348
|
+
args,
|
|
45349
|
+
queryParamKeys: []
|
|
45350
|
+
});
|
|
45351
|
+
});
|
|
45352
|
+
resource.command("get-quote-approvals").description(`Read quote approvals without submitting the quote. Returns a newest-first array, currently containing one element. Draft and changes-requested quotes return current approval routing in preview mode; other statuses return the recorded request, ordered steps and decisions in execution mode. A null request means no workflow execution was recorded, including automatic and legacy approval.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
|
|
45353
|
+
Examples:
|
|
45354
|
+
hyperline quotes-approvals get-quote-approvals --id <id>`).action(async (opts) => {
|
|
45355
|
+
const ctx = resource.parent?.opts()._ctx;
|
|
45356
|
+
if (!ctx) {
|
|
45357
|
+
process.stderr.write("Error: Not authenticated\n");
|
|
45358
|
+
process.exit(1);
|
|
45359
|
+
}
|
|
45360
|
+
const args = {};
|
|
45361
|
+
if (opts.id !== void 0)
|
|
45362
|
+
args.id = opts.id;
|
|
45363
|
+
await ctx.execute({
|
|
45364
|
+
method: "GET",
|
|
45365
|
+
path: "/v1/quotes/{id}/approvals",
|
|
45366
|
+
args,
|
|
45367
|
+
queryParamKeys: []
|
|
45368
|
+
});
|
|
45369
|
+
});
|
|
45370
|
+
}
|
|
45371
|
+
|
|
44979
45372
|
// build/commands/generated/quotes-templates.js
|
|
44980
45373
|
function registerQuotes_TemplatesCommands(parent) {
|
|
44981
45374
|
const resource = parent.command("quotes-templates").description("Manage quotes > templates");
|
|
@@ -45175,7 +45568,7 @@ Examples:
|
|
|
45175
45568
|
queryParamKeys: []
|
|
45176
45569
|
});
|
|
45177
45570
|
});
|
|
45178
|
-
resource.command("cancel").description(`Cancel a subscription. Supports immediate or end-of-period cancellation. Optionally specify a cancellation reason.`).requiredOption("--id <value>", `id parameter`).option("--cancel-at <value>", `Subscription cancel date. UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.`).option("--reason <value>", `Reason for the cancellation.`).option("--pro-rata", `Indicates if the cancel should refund the customer using a pro rata strategy.`).option("--refund-method <value>", `Override the refund destination for the resulting credit note. When omitted, falls back to the invoicing entity's \`creditNoteWalletRefundEnabled\` setting.`).addHelpText("after", `
|
|
45571
|
+
resource.command("cancel").description(`Cancel a subscription. Supports immediate or end-of-period cancellation. Optionally specify a cancellation reason. On a cancelled subscription with a scheduled reinstatement, call it with an empty body to remove that reinstatement; the subscription stays cancelled.`).requiredOption("--id <value>", `id parameter`).option("--cancel-at <value>", `Subscription cancel date. UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.`).option("--reason <value>", `Reason for the cancellation.`).option("--pro-rata", `Indicates if the cancel should refund the customer using a pro rata strategy.`).option("--refund-method <value>", `Override the refund destination for the resulting credit note. When omitted, falls back to the invoicing entity's \`creditNoteWalletRefundEnabled\` setting.`).addHelpText("after", `
|
|
45179
45572
|
Examples:
|
|
45180
45573
|
hyperline subscriptions cancel --id <id>
|
|
45181
45574
|
hyperline subscriptions cancel --id <id> --cancel-at <cancel_at> --reason <reason>
|
|
@@ -45203,7 +45596,7 @@ Examples:
|
|
|
45203
45596
|
queryParamKeys: []
|
|
45204
45597
|
});
|
|
45205
45598
|
});
|
|
45206
|
-
resource.command("reinstate").description(`Reinstate a subscription, reverting it to active status. Works for a subscription scheduled for cancellation and for a fully-cancelled one. For a fully-cancelled subscription, optionally pass reactivate_at and invoicing_mode (or charge_line_items for a custom charge) to control how the cancelled gap is invoiced.`).requiredOption("--id <value>", `id parameter`).option("--reactivate-at <value>", `Date a fully-cancelled subscription resumes from. Defaults to now. Ignored for scheduled-cancellation reinstatement.`).option("--invoicing-mode <value>", `How the paused/cancelled gap is invoiced when the subscription resumes. \`charge_full_period\`: bill the frozen periods as if never paused. \`prorate_remaining_period\`: skip the gap and bill the prorated remainder from the resume date. \`resume_at_next_cycle\` (default): skip the gap with no catch-up invoice.`).option("--charge-line-items <json>", `Custom charge: bill exactly these lines on an immediate resume instead of applying \`invoicing_mode\`. The lines cover the stopped period (pause or cancellation date to resume date). Requires the \`invoices_create\` permission. Fully-cancelled subscriptions only
|
|
45599
|
+
resource.command("reinstate").description(`Reinstate a subscription, reverting it to active status. Works for a subscription scheduled for cancellation and for a fully-cancelled one. For a fully-cancelled subscription, optionally pass reactivate_at (may be in the past, after the cancellation date; a future date schedules it) and invoicing_mode (or charge_line_items for a custom charge) to control how the cancelled gap is invoiced.`).requiredOption("--id <value>", `id parameter`).option("--reactivate-at <value>", `Date a fully-cancelled subscription resumes from. May be in the past (after the cancellation date). Defaults to now. A future date schedules the reinstatement; calling again with another date reschedules it, and cancelling the subscription removes it. Ignored for scheduled-cancellation reinstatement.`).option("--invoicing-mode <value>", `How the paused/cancelled gap is invoiced when the subscription resumes. \`charge_full_period\`: bill the frozen periods as if never paused. \`prorate_remaining_period\`: skip the gap and bill the prorated remainder from the resume date. \`resume_at_next_cycle\` (default): skip the gap with no catch-up invoice.`).option("--charge-line-items <json>", `Custom charge: bill exactly these lines on an immediate resume instead of applying \`invoicing_mode\`. The lines cover the stopped period (pause or cancellation date to resume date). Requires the \`invoices_create\` permission. Fully-cancelled subscriptions only. Not allowed with a future \`reactivate_at\`.`).addHelpText("after", `
|
|
45207
45600
|
Examples:
|
|
45208
45601
|
hyperline subscriptions reinstate --id <id>
|
|
45209
45602
|
hyperline subscriptions reinstate --id <id> --reactivate-at <reactivate_at> --invoicing-mode <invoicing_mode>
|
|
@@ -46876,6 +47269,7 @@ function registerAllCommands(program2) {
|
|
|
46876
47269
|
registerAggregatorsCommands(program2);
|
|
46877
47270
|
registerAggregators_UsageCommands(program2);
|
|
46878
47271
|
registerAi_BillingCommands(program2);
|
|
47272
|
+
registerAi_CostsCommands(program2);
|
|
46879
47273
|
registerAnalyticsCommands(program2);
|
|
46880
47274
|
registerBank_AccountsCommands(program2);
|
|
46881
47275
|
registerCompaniesCommands(program2);
|
|
@@ -46894,11 +47288,13 @@ function registerAllCommands(program2) {
|
|
|
46894
47288
|
registerInvoicesCommands(program2);
|
|
46895
47289
|
registerInvoices_TransactionsCommands(program2);
|
|
46896
47290
|
registerInvoicing_EntitiesCommands(program2);
|
|
47291
|
+
registerAi_MonitoringCommands(program2);
|
|
46897
47292
|
registerPaymentsCommands(program2);
|
|
46898
47293
|
registerProductsCommands(program2);
|
|
46899
47294
|
registerPrice_ConfigurationsCommands(program2);
|
|
46900
47295
|
registerQuotesCommands(program2);
|
|
46901
47296
|
registerQuotes_TemplatesCommands(program2);
|
|
47297
|
+
registerQuotes_ApprovalsCommands(program2);
|
|
46902
47298
|
registerSubscriptions_TemplatesCommands(program2);
|
|
46903
47299
|
registerSubscriptionsCommands(program2);
|
|
46904
47300
|
registerSubscriptions_TransitionsCommands(program2);
|
|
@@ -62918,6 +63314,7 @@ var de = {
|
|
|
62918
63314
|
"accounting.revrec.discountDebitLineDescription": "Abgegrenzten Rabatt reduzieren \u2013 Zeitplan {{scheduleId}}, Zeitraum {{periodDate}}",
|
|
62919
63315
|
"accounting.revrec.entryDescription": "Umsatzrealisierung f\xFCr Zeitplan {{scheduleId}}, Zeitraum {{periodStart}} - {{periodEnd}}",
|
|
62920
63316
|
"accounting.standaloneCreditNotePosted.entryDescription": "Gutschrift {{creditNoteId}}",
|
|
63317
|
+
"accounting.transactionChargedBack.entryDescription": "R\xFCckbuchung f\xFCr Rechnung {{invoiceId}}",
|
|
62921
63318
|
"accounting.transactionRefunded.entryDescription": "R\xFCckerstattung f\xFCr Rechnung {{invoiceId}}",
|
|
62922
63319
|
"accounting.transactionSettled.entryDescription": "Zahlungsabwicklung f\xFCr Rechnung {{invoiceId}}",
|
|
62923
63320
|
"creditNotes.refundChargeName": "R\xFCckerstattung f\xFCr die Rechnung",
|
|
@@ -62926,6 +63323,8 @@ var de = {
|
|
|
62926
63323
|
"einvoicing.paymentFromWallet": "Zahlung aus Guthaben",
|
|
62927
63324
|
"einvoicing.paymentProcessed": "Zahlung verarbeitet",
|
|
62928
63325
|
"einvoicing.paymentReceived": "Zahlung erhalten",
|
|
63326
|
+
"invoices.minimumFee.adjustmentName": "Anpassung der Mindestgeb\xFChr",
|
|
63327
|
+
"invoices.minimumFee.name": "Mindestgeb\xFChr",
|
|
62929
63328
|
"invoices.outstandingProduct.description": "Unbezahlter Betrag der Rechnung{{invoiceNumber}} vom {{date}}",
|
|
62930
63329
|
"invoices.outstandingProduct.descriptionPeriod": "Unbezahlter Betrag der Rechnung{{invoiceNumber}} vom {{periodStart}} bis {{periodEnd}}",
|
|
62931
63330
|
"invoices.outstandingProduct.name": "Offener Saldo",
|
|
@@ -62959,6 +63358,8 @@ var en = {
|
|
|
62959
63358
|
"creditNotes.refundChargeName": "Refund for invoice",
|
|
62960
63359
|
"credits.bundleOf": "{{productName}} - Pack of {{creditCount}} credits",
|
|
62961
63360
|
"credits.unitsOf": "{{productName}} - {{creditCount}} credits",
|
|
63361
|
+
"invoices.minimumFee.adjustmentName": "Minimum fee adjustment",
|
|
63362
|
+
"invoices.minimumFee.name": "Minimum fee",
|
|
62962
63363
|
"invoices.outstandingProduct.description": "Unpaid amount from the invoice{{invoiceNumber}} emitted on {{date}}",
|
|
62963
63364
|
"invoices.outstandingProduct.descriptionPeriod": "Unpaid amount from the invoice{{invoiceNumber}} from {{periodStart}} to {{periodEnd}}",
|
|
62964
63365
|
"invoices.outstandingProduct.name": "Outstanding balance",
|
|
@@ -62988,6 +63389,7 @@ var en = {
|
|
|
62988
63389
|
"accounting.invoicePosted.entryDescription": "Posting entry for Invoice {{invoiceId}} issued",
|
|
62989
63390
|
"accounting.transactionSettled.entryDescription": "Payment settlement for Invoice {{invoiceId}}",
|
|
62990
63391
|
"accounting.transactionRefunded.entryDescription": "Refund for Invoice {{invoiceId}}",
|
|
63392
|
+
"accounting.transactionChargedBack.entryDescription": "Chargeback for Invoice {{invoiceId}}",
|
|
62991
63393
|
"accounting.creditNotePosted.entryDescription": "Credit note {{creditNoteId}} for Invoice {{invoiceId}}",
|
|
62992
63394
|
"accounting.standaloneCreditNotePosted.entryDescription": "Credit note {{creditNoteId}}",
|
|
62993
63395
|
"accounting.revrec.entryDescription": "Revenue recognition for schedule {{scheduleId}}, period {{periodStart}} - {{periodEnd}}",
|
|
@@ -63012,6 +63414,7 @@ var es = {
|
|
|
63012
63414
|
"accounting.revrec.discountDebitLineDescription": "Disminuci\xF3n de descuento diferido \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
|
|
63013
63415
|
"accounting.revrec.entryDescription": "Reconocimiento de ingresos para el cronograma {{scheduleId}}, per\xEDodo {{periodStart}} - {{periodEnd}}",
|
|
63014
63416
|
"accounting.standaloneCreditNotePosted.entryDescription": "Nota de cr\xE9dito {{creditNoteId}}",
|
|
63417
|
+
"accounting.transactionChargedBack.entryDescription": "Contracargo de la factura {{invoiceId}}",
|
|
63015
63418
|
"accounting.transactionRefunded.entryDescription": "Reembolso de la factura {{invoiceId}}",
|
|
63016
63419
|
"accounting.transactionSettled.entryDescription": "Liquidaci\xF3n de pago para la factura {{invoiceId}}",
|
|
63017
63420
|
"creditNotes.refundChargeName": "Reembolso por factura",
|
|
@@ -63020,6 +63423,8 @@ var es = {
|
|
|
63020
63423
|
"einvoicing.paymentFromWallet": "Pago desde el monedero",
|
|
63021
63424
|
"einvoicing.paymentProcessed": "Pago procesado",
|
|
63022
63425
|
"einvoicing.paymentReceived": "Pago recibido",
|
|
63426
|
+
"invoices.minimumFee.adjustmentName": "Ajuste del cargo m\xEDnimo",
|
|
63427
|
+
"invoices.minimumFee.name": "Cargo m\xEDnimo",
|
|
63023
63428
|
"invoices.outstandingProduct.description": "Monto pendiente de la factura{{invoiceNumber}} emitida el {{date}}",
|
|
63024
63429
|
"invoices.outstandingProduct.descriptionPeriod": "Monto pendiente de la factura{{invoiceNumber}} del {{periodStart}} al {{periodEnd}}",
|
|
63025
63430
|
"invoices.outstandingProduct.name": "Saldo pendiente",
|
|
@@ -63059,6 +63464,7 @@ var fr = {
|
|
|
63059
63464
|
"accounting.revrec.discountDebitLineDescription": "Diminution des remises diff\xE9r\xE9es \u2013 \xE9ch\xE9ancier {{scheduleId}}, p\xE9riode {{periodDate}}",
|
|
63060
63465
|
"accounting.revrec.entryDescription": "Reconnaissance du chiffre d'affaires pour l'\xE9ch\xE9ancier {{scheduleId}}, p\xE9riode {{periodStart}} - {{periodEnd}}",
|
|
63061
63466
|
"accounting.standaloneCreditNotePosted.entryDescription": "Avoir {{creditNoteId}}",
|
|
63467
|
+
"accounting.transactionChargedBack.entryDescription": "R\xE9trofacturation de la facture {{invoiceId}}",
|
|
63062
63468
|
"accounting.transactionRefunded.entryDescription": "Remboursement de la facture {{invoiceId}}",
|
|
63063
63469
|
"accounting.transactionSettled.entryDescription": "R\xE8glement de la facture {{invoiceId}}",
|
|
63064
63470
|
"creditNotes.refundChargeName": "Remboursement pour facture",
|
|
@@ -63067,6 +63473,8 @@ var fr = {
|
|
|
63067
63473
|
"einvoicing.paymentFromWallet": "Paiement depuis le portefeuille",
|
|
63068
63474
|
"einvoicing.paymentProcessed": "Paiement effectu\xE9",
|
|
63069
63475
|
"einvoicing.paymentReceived": "Paiement re\xE7u",
|
|
63476
|
+
"invoices.minimumFee.adjustmentName": "Ajustement des frais minimums",
|
|
63477
|
+
"invoices.minimumFee.name": "Frais minimums",
|
|
63070
63478
|
"invoices.outstandingProduct.description": "Montant impay\xE9 de la facture{{invoiceNumber}} \xE9mise le {{date}}",
|
|
63071
63479
|
"invoices.outstandingProduct.descriptionPeriod": "Montant impay\xE9 de la facture{{invoiceNumber}} du {{periodStart}} au {{periodEnd}}",
|
|
63072
63480
|
"invoices.outstandingProduct.name": "Solde impay\xE9",
|
|
@@ -63106,6 +63514,7 @@ var it = {
|
|
|
63106
63514
|
"accounting.revrec.discountDebitLineDescription": "Diminuzione dello sconto differito \u2013 programma {{scheduleId}}, periodo {{periodDate}}",
|
|
63107
63515
|
"accounting.revrec.entryDescription": "Riconoscimento dei ricavi per il programma {{scheduleId}}, periodo {{periodStart}} - {{periodEnd}}",
|
|
63108
63516
|
"accounting.standaloneCreditNotePosted.entryDescription": "Nota di credito {{creditNoteId}}",
|
|
63517
|
+
"accounting.transactionChargedBack.entryDescription": "Riaddebito per la fattura {{invoiceId}}",
|
|
63109
63518
|
"accounting.transactionRefunded.entryDescription": "Rimborso per la fattura {{invoiceId}}",
|
|
63110
63519
|
"accounting.transactionSettled.entryDescription": "Regolamento pagamento per la fattura {{invoiceId}}",
|
|
63111
63520
|
"creditNotes.refundChargeName": "Rimborso per fattura",
|
|
@@ -63114,6 +63523,8 @@ var it = {
|
|
|
63114
63523
|
"einvoicing.paymentFromWallet": "Pagamento dal portafoglio",
|
|
63115
63524
|
"einvoicing.paymentProcessed": "Pagamento elaborato",
|
|
63116
63525
|
"einvoicing.paymentReceived": "Pagamento ricevuto",
|
|
63526
|
+
"invoices.minimumFee.adjustmentName": "Adeguamento all\u2019importo minimo",
|
|
63527
|
+
"invoices.minimumFee.name": "Importo minimo",
|
|
63117
63528
|
"invoices.outstandingProduct.description": "Importo insoluto della fattura{{invoiceNumber}} emessa il {{date}}",
|
|
63118
63529
|
"invoices.outstandingProduct.descriptionPeriod": "Importo insoluto della fattura{{invoiceNumber}} dal {{periodStart}} al {{periodEnd}}",
|
|
63119
63530
|
"invoices.outstandingProduct.name": "Saldo insoluto",
|
|
@@ -63153,6 +63564,7 @@ var lt = {
|
|
|
63153
63564
|
"accounting.revrec.discountDebitLineDescription": "Atid\u0117tosios nuolaidos suma\u017Einimas \u2013 grafikas {{scheduleId}}, laikotarpis {{periodDate}}",
|
|
63154
63565
|
"accounting.revrec.entryDescription": "Pajam\u0173 pripa\u017Einimas pagal grafik\u0105 {{scheduleId}}, laikotarpis {{periodStart}}\u2013{{periodEnd}}",
|
|
63155
63566
|
"accounting.standaloneCreditNotePosted.entryDescription": "Kreditin\u0117 s\u0105skaita {{creditNoteId}}",
|
|
63567
|
+
"accounting.transactionChargedBack.entryDescription": "S\u0105skaitos fakt\u016Bros {{invoiceId}} u\u017Egin\u010Dyto mok\u0117jimo gr\u0105\u017Einimas",
|
|
63156
63568
|
"accounting.transactionRefunded.entryDescription": "S\u0105skaitos fakt\u016Bros {{invoiceId}} gr\u0105\u017Einimas",
|
|
63157
63569
|
"accounting.transactionSettled.entryDescription": "S\u0105skaitos fakt\u016Bros {{invoiceId}} mok\u0117jimo sudengimas",
|
|
63158
63570
|
"creditNotes.refundChargeName": "S\u0105skaitos fakt\u016Bros gr\u0105\u017Einimas",
|
|
@@ -63161,6 +63573,8 @@ var lt = {
|
|
|
63161
63573
|
"einvoicing.paymentFromWallet": "Mok\u0117jimas i\u0161 pinigin\u0117s",
|
|
63162
63574
|
"einvoicing.paymentProcessed": "Mok\u0117jimas apdorotas",
|
|
63163
63575
|
"einvoicing.paymentReceived": "Mok\u0117jimas gautas",
|
|
63576
|
+
"invoices.minimumFee.adjustmentName": "Minimalaus mokes\u010Dio koregavimas",
|
|
63577
|
+
"invoices.minimumFee.name": "Minimalus mokestis",
|
|
63164
63578
|
"invoices.outstandingProduct.description": "Neapmok\u0117ta {{date}} i\u0161ra\u0161ytos s\u0105skaitos fakt\u016Bros{{invoiceNumber}} suma",
|
|
63165
63579
|
"invoices.outstandingProduct.descriptionPeriod": "Neapmok\u0117ta s\u0105skaitos fakt\u016Bros{{invoiceNumber}} suma u\u017E laikotarp\u012F nuo {{periodStart}} iki {{periodEnd}}",
|
|
63166
63580
|
"invoices.outstandingProduct.name": "Neapmok\u0117tas likutis",
|
|
@@ -63200,6 +63614,7 @@ var nl = {
|
|
|
63200
63614
|
"accounting.revrec.discountDebitLineDescription": "Uitgestelde korting verlagen \u2013 schema {{scheduleId}}, periode {{periodDate}}",
|
|
63201
63615
|
"accounting.revrec.entryDescription": "Omzeterkenning voor schema {{scheduleId}}, periode {{periodStart}} - {{periodEnd}}",
|
|
63202
63616
|
"accounting.standaloneCreditNotePosted.entryDescription": "Creditnota {{creditNoteId}}",
|
|
63617
|
+
"accounting.transactionChargedBack.entryDescription": "Terugboeking voor factuur {{invoiceId}}",
|
|
63203
63618
|
"accounting.transactionRefunded.entryDescription": "Terugbetaling voor factuur {{invoiceId}}",
|
|
63204
63619
|
"accounting.transactionSettled.entryDescription": "Betalingsafwikkeling voor factuur {{invoiceId}}",
|
|
63205
63620
|
"creditNotes.refundChargeName": "Terugbetaling voor factuur",
|
|
@@ -63208,6 +63623,8 @@ var nl = {
|
|
|
63208
63623
|
"einvoicing.paymentFromWallet": "Betaling uit tegoed",
|
|
63209
63624
|
"einvoicing.paymentProcessed": "Betaling verwerkt",
|
|
63210
63625
|
"einvoicing.paymentReceived": "Betaling ontvangen",
|
|
63626
|
+
"invoices.minimumFee.adjustmentName": "Aanpassing minimumbedrag",
|
|
63627
|
+
"invoices.minimumFee.name": "Minimumbedrag",
|
|
63211
63628
|
"invoices.outstandingProduct.description": "Onbetaald bedrag van de factuur{{invoiceNumber}} uitgegeven op {{date}}",
|
|
63212
63629
|
"invoices.outstandingProduct.descriptionPeriod": "Onbetaald bedrag van de factuur{{invoiceNumber}} van {{periodStart}} tot {{periodEnd}}",
|
|
63213
63630
|
"invoices.outstandingProduct.name": "Openstaand saldo",
|
|
@@ -63247,6 +63664,7 @@ var pl = {
|
|
|
63247
63664
|
"accounting.revrec.discountDebitLineDescription": "Zmniejszenie odroczonego rabatu \u2013 harmonogram {{scheduleId}}, okres {{periodDate}}",
|
|
63248
63665
|
"accounting.revrec.entryDescription": "Rozpoznanie przychodu dla harmonogramu {{scheduleId}}, okres {{periodStart}} - {{periodEnd}}",
|
|
63249
63666
|
"accounting.standaloneCreditNotePosted.entryDescription": "Nota kredytowa {{creditNoteId}}",
|
|
63667
|
+
"accounting.transactionChargedBack.entryDescription": "Obci\u0105\u017Cenie zwrotne za faktur\u0119 {{invoiceId}}",
|
|
63250
63668
|
"accounting.transactionRefunded.entryDescription": "Zwrot za faktur\u0119 {{invoiceId}}",
|
|
63251
63669
|
"accounting.transactionSettled.entryDescription": "Rozliczenie p\u0142atno\u015Bci dla faktury {{invoiceId}}",
|
|
63252
63670
|
"creditNotes.refundChargeName": "Zwrot za faktur\u0119",
|
|
@@ -63255,6 +63673,8 @@ var pl = {
|
|
|
63255
63673
|
"einvoicing.paymentFromWallet": "P\u0142atno\u015B\u0107 z portfela",
|
|
63256
63674
|
"einvoicing.paymentProcessed": "P\u0142atno\u015B\u0107 przetworzona",
|
|
63257
63675
|
"einvoicing.paymentReceived": "P\u0142atno\u015B\u0107 otrzymana",
|
|
63676
|
+
"invoices.minimumFee.adjustmentName": "Wyr\xF3wnanie do op\u0142aty minimalnej",
|
|
63677
|
+
"invoices.minimumFee.name": "Op\u0142ata minimalna",
|
|
63258
63678
|
"invoices.outstandingProduct.description": "Nieop\u0142acona kwota z faktury{{invoiceNumber}} wystawionej {{date}}",
|
|
63259
63679
|
"invoices.outstandingProduct.descriptionPeriod": "Nieop\u0142acona kwota z faktury{{invoiceNumber}} od {{periodStart}} do {{periodEnd}}",
|
|
63260
63680
|
"invoices.outstandingProduct.name": "Niezap\u0142acone saldo",
|
|
@@ -63294,6 +63714,7 @@ var pt = {
|
|
|
63294
63714
|
"accounting.revrec.discountDebitLineDescription": "Diminui\xE7\xE3o do desconto diferido \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
|
|
63295
63715
|
"accounting.revrec.entryDescription": "Reconhecimento de receita para o cronograma {{scheduleId}}, per\xEDodo {{periodStart}} - {{periodEnd}}",
|
|
63296
63716
|
"accounting.standaloneCreditNotePosted.entryDescription": "Nota de cr\xE9dito {{creditNoteId}}",
|
|
63717
|
+
"accounting.transactionChargedBack.entryDescription": "Estorno da fatura {{invoiceId}}",
|
|
63297
63718
|
"accounting.transactionRefunded.entryDescription": "Reembolso da fatura {{invoiceId}}",
|
|
63298
63719
|
"accounting.transactionSettled.entryDescription": "Liquida\xE7\xE3o de pagamento para a fatura {{invoiceId}}",
|
|
63299
63720
|
"creditNotes.refundChargeName": "Reembolso pela fatura",
|
|
@@ -63302,6 +63723,8 @@ var pt = {
|
|
|
63302
63723
|
"einvoicing.paymentFromWallet": "Pagamento da carteira",
|
|
63303
63724
|
"einvoicing.paymentProcessed": "Pagamento processado",
|
|
63304
63725
|
"einvoicing.paymentReceived": "Pagamento recebido",
|
|
63726
|
+
"invoices.minimumFee.adjustmentName": "Ajuste do valor m\xEDnimo",
|
|
63727
|
+
"invoices.minimumFee.name": "Valor m\xEDnimo",
|
|
63305
63728
|
"invoices.outstandingProduct.description": "Valor em aberto da fatura{{invoiceNumber}} emitida em {{date}}",
|
|
63306
63729
|
"invoices.outstandingProduct.descriptionPeriod": "Valor em aberto da fatura{{invoiceNumber}} de {{periodStart}} a {{periodEnd}}",
|
|
63307
63730
|
"invoices.outstandingProduct.name": "Saldo em aberto",
|
|
@@ -63490,6 +63913,223 @@ import * as winston from "winston";
|
|
|
63490
63913
|
|
|
63491
63914
|
// ../hyperline-monitoring/build/logger/formatting/format.js
|
|
63492
63915
|
import prune from "json-prune";
|
|
63916
|
+
|
|
63917
|
+
// ../hyperline-monitoring/build/logger/formatting/logRedaction.js
|
|
63918
|
+
var REDACTED_KEY_NAMES = /* @__PURE__ */ new Set([
|
|
63919
|
+
"accesstoken",
|
|
63920
|
+
"apitoken",
|
|
63921
|
+
"assertion",
|
|
63922
|
+
"authorization",
|
|
63923
|
+
"authtoken",
|
|
63924
|
+
"cardnumber",
|
|
63925
|
+
"clientassertion",
|
|
63926
|
+
"codeverifier",
|
|
63927
|
+
"connectionurl",
|
|
63928
|
+
"consumerkey",
|
|
63929
|
+
"cookie",
|
|
63930
|
+
"credential",
|
|
63931
|
+
"credentials",
|
|
63932
|
+
"iban",
|
|
63933
|
+
"idtoken",
|
|
63934
|
+
"privatekey",
|
|
63935
|
+
"publictoken",
|
|
63936
|
+
"refreshtoken",
|
|
63937
|
+
"sessiontoken",
|
|
63938
|
+
"token",
|
|
63939
|
+
"tokenid",
|
|
63940
|
+
"verificationcode"
|
|
63941
|
+
]);
|
|
63942
|
+
var REDACTED_KEY_SUFFIX_PATTERN = /(secret|password|passphrase|apikey)$/;
|
|
63943
|
+
var REDACTED_KEY_CANDIDATE_PATTERN = /token|key|secret|pass|assertion|verifier|credential|authorization|cookie|iban|cardnumber|code|connectionurl/i;
|
|
63944
|
+
var URL_ONLY_REDACTED_KEYS = /* @__PURE__ */ new Set(["key"]);
|
|
63945
|
+
var OAUTH_CODE_KEY = "code";
|
|
63946
|
+
var OAUTH_CODE_CONTEXT_KEYS = ["state", "grant_type"];
|
|
63947
|
+
var REDACTED_VALUE = "<redacted>";
|
|
63948
|
+
var TRUNCATED_VALUE = "[TRUNCATED: not redacted]";
|
|
63949
|
+
var TRUNCATED_KEY = "[TRUNCATED]";
|
|
63950
|
+
var MAX_REDACTION_DEPTH = 6;
|
|
63951
|
+
var MAX_ARRAY_ENTRIES = 50;
|
|
63952
|
+
var MAX_PARSED_STRING_LENGTH = 16384;
|
|
63953
|
+
var MAX_VISITED_NODES = 5e3;
|
|
63954
|
+
var MAX_CONTAINER_ENTRIES = 1e3;
|
|
63955
|
+
var MAX_STRING_CHARACTERS = 256e3;
|
|
63956
|
+
function redactLogBody({ body }) {
|
|
63957
|
+
return redactValue({
|
|
63958
|
+
value: body,
|
|
63959
|
+
depth: MAX_REDACTION_DEPTH,
|
|
63960
|
+
budget: {
|
|
63961
|
+
remainingNodes: MAX_VISITED_NODES,
|
|
63962
|
+
remainingChars: MAX_STRING_CHARACTERS
|
|
63963
|
+
}
|
|
63964
|
+
});
|
|
63965
|
+
}
|
|
63966
|
+
function redactLogUrl({ url: url2 }) {
|
|
63967
|
+
const queryIndex = url2.indexOf("?");
|
|
63968
|
+
if (queryIndex === -1) {
|
|
63969
|
+
return url2;
|
|
63970
|
+
}
|
|
63971
|
+
if (url2.length > MAX_PARSED_STRING_LENGTH) {
|
|
63972
|
+
return `${url2.slice(0, queryIndex)}?${TRUNCATED_VALUE}`;
|
|
63973
|
+
}
|
|
63974
|
+
const redactedQuery = redactFormEncoded({
|
|
63975
|
+
text: url2.slice(queryIndex + 1),
|
|
63976
|
+
extraRedactedKeys: URL_ONLY_REDACTED_KEYS
|
|
63977
|
+
});
|
|
63978
|
+
return redactedQuery === void 0 ? url2 : `${url2.slice(0, queryIndex)}?${redactedQuery}`;
|
|
63979
|
+
}
|
|
63980
|
+
function redactValue({ value, depth, budget }) {
|
|
63981
|
+
if (isOpaqueObject({ value })) {
|
|
63982
|
+
return replaceOpaqueObject({ value });
|
|
63983
|
+
}
|
|
63984
|
+
if (typeof value === "string") {
|
|
63985
|
+
if (value.length > budget.remainingChars) {
|
|
63986
|
+
return TRUNCATED_VALUE;
|
|
63987
|
+
}
|
|
63988
|
+
budget.remainingChars -= value.length;
|
|
63989
|
+
}
|
|
63990
|
+
if (depth <= 0 || budget.remainingNodes <= 0) {
|
|
63991
|
+
return isInspectable({ value }) ? TRUNCATED_VALUE : value;
|
|
63992
|
+
}
|
|
63993
|
+
budget.remainingNodes -= 1;
|
|
63994
|
+
if (typeof value === "string") {
|
|
63995
|
+
return redactString({ text: value, budget });
|
|
63996
|
+
}
|
|
63997
|
+
if (value instanceof URLSearchParams) {
|
|
63998
|
+
return redactValue({ value: value.toString(), depth, budget });
|
|
63999
|
+
}
|
|
64000
|
+
if (Array.isArray(value)) {
|
|
64001
|
+
return redactArray({ items: value, depth, budget });
|
|
64002
|
+
}
|
|
64003
|
+
if (isPlainObject2(value)) {
|
|
64004
|
+
return redactObject({ record: value, depth, budget });
|
|
64005
|
+
}
|
|
64006
|
+
return value;
|
|
64007
|
+
}
|
|
64008
|
+
function isOpaqueObject({ value }) {
|
|
64009
|
+
return typeof value === "object" && value !== null && !Array.isArray(value) && !isPlainObject2(value) && !(value instanceof URLSearchParams);
|
|
64010
|
+
}
|
|
64011
|
+
function replaceOpaqueObject({ value }) {
|
|
64012
|
+
if (typeof value !== "object" || value === null || value instanceof Date) {
|
|
64013
|
+
return value;
|
|
64014
|
+
}
|
|
64015
|
+
if (value instanceof ArrayBuffer || ArrayBuffer.isView(value)) {
|
|
64016
|
+
return `[BINARY ${value.byteLength} bytes]`;
|
|
64017
|
+
}
|
|
64018
|
+
if (value instanceof Blob) {
|
|
64019
|
+
return `[BINARY ${value.size} bytes]`;
|
|
64020
|
+
}
|
|
64021
|
+
if (value instanceof FormData || typeof Reflect.get(value, "pipe") === "function") {
|
|
64022
|
+
return "[BINARY stream]";
|
|
64023
|
+
}
|
|
64024
|
+
return TRUNCATED_VALUE;
|
|
64025
|
+
}
|
|
64026
|
+
function redactArray({ items, depth, budget }) {
|
|
64027
|
+
const isTruncated = items.length > MAX_ARRAY_ENTRIES;
|
|
64028
|
+
const keptItems = isTruncated ? items.slice(0, MAX_ARRAY_ENTRIES) : items;
|
|
64029
|
+
let redactedItems;
|
|
64030
|
+
for (const [index, item] of keptItems.entries()) {
|
|
64031
|
+
const redactedItem = redactValue({ value: item, depth: depth - 1, budget });
|
|
64032
|
+
if (redactedItem !== item) {
|
|
64033
|
+
redactedItems ??= [...keptItems];
|
|
64034
|
+
redactedItems[index] = redactedItem;
|
|
64035
|
+
}
|
|
64036
|
+
}
|
|
64037
|
+
const result = redactedItems ?? keptItems;
|
|
64038
|
+
return isTruncated ? [...result, TRUNCATED_VALUE] : result;
|
|
64039
|
+
}
|
|
64040
|
+
function redactObject({ record: record2, depth, budget }) {
|
|
64041
|
+
const redactedEntries = /* @__PURE__ */ new Map();
|
|
64042
|
+
const carriesOAuthCode = OAUTH_CODE_CONTEXT_KEYS.some((contextKey) => Object.hasOwn(record2, contextKey));
|
|
64043
|
+
const keptKeys = [];
|
|
64044
|
+
let isTruncated = false;
|
|
64045
|
+
for (const key in record2) {
|
|
64046
|
+
if (!Object.hasOwn(record2, key)) {
|
|
64047
|
+
continue;
|
|
64048
|
+
}
|
|
64049
|
+
if (keptKeys.length >= MAX_CONTAINER_ENTRIES || key.length > budget.remainingChars) {
|
|
64050
|
+
isTruncated = true;
|
|
64051
|
+
break;
|
|
64052
|
+
}
|
|
64053
|
+
budget.remainingChars -= key.length;
|
|
64054
|
+
keptKeys.push(key);
|
|
64055
|
+
const nestedValue = record2[key];
|
|
64056
|
+
const isSensitiveKey = isRedactedKey({ key }) || carriesOAuthCode && key === OAUTH_CODE_KEY;
|
|
64057
|
+
const shouldRedact = isSensitiveKey && nestedValue != null && typeof nestedValue !== "boolean";
|
|
64058
|
+
if (shouldRedact) {
|
|
64059
|
+
budget.remainingNodes -= 1;
|
|
64060
|
+
}
|
|
64061
|
+
const redactedNestedValue = shouldRedact ? REDACTED_VALUE : redactValue({ value: nestedValue, depth: depth - 1, budget });
|
|
64062
|
+
if (redactedNestedValue !== nestedValue) {
|
|
64063
|
+
redactedEntries.set(key, redactedNestedValue);
|
|
64064
|
+
}
|
|
64065
|
+
}
|
|
64066
|
+
if (isTruncated) {
|
|
64067
|
+
const keptRecord = {};
|
|
64068
|
+
for (const key of keptKeys) {
|
|
64069
|
+
keptRecord[key] = redactedEntries.has(key) ? redactedEntries.get(key) : record2[key];
|
|
64070
|
+
}
|
|
64071
|
+
keptRecord[TRUNCATED_KEY] = TRUNCATED_VALUE;
|
|
64072
|
+
return keptRecord;
|
|
64073
|
+
}
|
|
64074
|
+
return redactedEntries.size === 0 ? record2 : { ...record2, ...Object.fromEntries(redactedEntries) };
|
|
64075
|
+
}
|
|
64076
|
+
function redactString({ text, budget }) {
|
|
64077
|
+
if (text.length > MAX_PARSED_STRING_LENGTH) {
|
|
64078
|
+
return TRUNCATED_VALUE;
|
|
64079
|
+
}
|
|
64080
|
+
if (!isInspectable({ value: text })) {
|
|
64081
|
+
return text;
|
|
64082
|
+
}
|
|
64083
|
+
const trimmedText = text.trim();
|
|
64084
|
+
if (trimmedText.startsWith("{") || trimmedText.startsWith("[")) {
|
|
64085
|
+
try {
|
|
64086
|
+
const parsedValue = JSON.parse(trimmedText);
|
|
64087
|
+
const redactedValue = redactValue({
|
|
64088
|
+
value: parsedValue,
|
|
64089
|
+
depth: MAX_REDACTION_DEPTH,
|
|
64090
|
+
budget
|
|
64091
|
+
});
|
|
64092
|
+
return redactedValue === parsedValue ? text : JSON.stringify(redactedValue);
|
|
64093
|
+
} catch {
|
|
64094
|
+
return REDACTED_KEY_CANDIDATE_PATTERN.test(text) ? TRUNCATED_VALUE : redactFormEncoded({ text }) ?? text;
|
|
64095
|
+
}
|
|
64096
|
+
}
|
|
64097
|
+
return redactFormEncoded({ text }) ?? text;
|
|
64098
|
+
}
|
|
64099
|
+
function redactFormEncoded({ text, extraRedactedKeys }) {
|
|
64100
|
+
if (!text.includes("=") || !REDACTED_KEY_CANDIDATE_PATTERN.test(text)) {
|
|
64101
|
+
return void 0;
|
|
64102
|
+
}
|
|
64103
|
+
const params = new URLSearchParams(text);
|
|
64104
|
+
const carriesOAuthCode = OAUTH_CODE_CONTEXT_KEYS.some((contextKey) => params.has(contextKey));
|
|
64105
|
+
let hasRedactedParam = false;
|
|
64106
|
+
for (const key of new Set(params.keys())) {
|
|
64107
|
+
if (isRedactedKey({ key }) || extraRedactedKeys?.has(key.toLowerCase()) || carriesOAuthCode && key === OAUTH_CODE_KEY) {
|
|
64108
|
+
params.set(key, REDACTED_VALUE);
|
|
64109
|
+
hasRedactedParam = true;
|
|
64110
|
+
}
|
|
64111
|
+
}
|
|
64112
|
+
return hasRedactedParam ? params.toString() : void 0;
|
|
64113
|
+
}
|
|
64114
|
+
function isRedactedKey({ key }) {
|
|
64115
|
+
const normalizedKey = key.toLowerCase().replace(/[_-]/g, "");
|
|
64116
|
+
return REDACTED_KEY_NAMES.has(normalizedKey) || REDACTED_KEY_SUFFIX_PATTERN.test(normalizedKey);
|
|
64117
|
+
}
|
|
64118
|
+
function isInspectable({ value }) {
|
|
64119
|
+
if (typeof value === "string") {
|
|
64120
|
+
return value.length > MAX_PARSED_STRING_LENGTH || /^\s*[{[]/.test(value) || value.includes("=") && REDACTED_KEY_CANDIDATE_PATTERN.test(value);
|
|
64121
|
+
}
|
|
64122
|
+
return value instanceof URLSearchParams || Array.isArray(value) || isPlainObject2(value);
|
|
64123
|
+
}
|
|
64124
|
+
function isPlainObject2(value) {
|
|
64125
|
+
if (typeof value !== "object" || value === null) {
|
|
64126
|
+
return false;
|
|
64127
|
+
}
|
|
64128
|
+
const prototype = Object.getPrototypeOf(value);
|
|
64129
|
+
return prototype === Object.prototype || prototype === null;
|
|
64130
|
+
}
|
|
64131
|
+
|
|
64132
|
+
// ../hyperline-monitoring/build/logger/formatting/format.js
|
|
63493
64133
|
var REDACTED_HEADER_KEY_PATTERN = /authorization|authenticate|cookie|secret|token|credential|signature|jwt|api[_-]?key|access[_-]?token|refresh[_-]?token|private[_-]?key/i;
|
|
63494
64134
|
function jsonFormat(info) {
|
|
63495
64135
|
const prunedInfo = JSON.parse(prune(info));
|
|
@@ -63550,14 +64190,106 @@ function transformPrune(info) {
|
|
|
63550
64190
|
});
|
|
63551
64191
|
return info;
|
|
63552
64192
|
}
|
|
64193
|
+
var MAX_AXIOS_ERROR_DEPTH = 5;
|
|
64194
|
+
var MAX_AXIOS_ERROR_CONTAINER_ENTRIES = 1e3;
|
|
64195
|
+
var MAX_AXIOS_ERROR_VISITED_NODES = 5e3;
|
|
64196
|
+
var REDACTED_BODY_KEYS = /* @__PURE__ */ new Set(["requestBody", "responseBody"]);
|
|
63553
64197
|
function transformAxiosError(info) {
|
|
63554
|
-
|
|
63555
|
-
|
|
63556
|
-
|
|
64198
|
+
let walk;
|
|
64199
|
+
for (const [key, value] of Object.entries(info)) {
|
|
64200
|
+
if (typeof value !== "object" || value === null || REDACTED_BODY_KEYS.has(key)) {
|
|
64201
|
+
continue;
|
|
63557
64202
|
}
|
|
63558
|
-
|
|
64203
|
+
walk ??= {
|
|
64204
|
+
formatted: /* @__PURE__ */ new Map(),
|
|
64205
|
+
remainingNodes: MAX_AXIOS_ERROR_VISITED_NODES
|
|
64206
|
+
};
|
|
64207
|
+
const formattedValue = formatNestedAxiosErrors({
|
|
64208
|
+
value,
|
|
64209
|
+
depth: MAX_AXIOS_ERROR_DEPTH,
|
|
64210
|
+
walk
|
|
64211
|
+
});
|
|
64212
|
+
if (formattedValue !== value) {
|
|
64213
|
+
info[key] = formattedValue;
|
|
64214
|
+
}
|
|
64215
|
+
}
|
|
63559
64216
|
return info;
|
|
63560
64217
|
}
|
|
64218
|
+
function formatNestedAxiosErrors({ value, depth, walk }) {
|
|
64219
|
+
if (typeof value !== "object" || value === null) {
|
|
64220
|
+
return value;
|
|
64221
|
+
}
|
|
64222
|
+
if (walk.formatted.has(value)) {
|
|
64223
|
+
return walk.formatted.get(value);
|
|
64224
|
+
}
|
|
64225
|
+
if (Reflect.get(value, "name") === "AxiosError") {
|
|
64226
|
+
const formattedError = walk.remainingNodes > 0 ? formatAxiosError(value) : summarizeAxiosError({ error: value });
|
|
64227
|
+
walk.remainingNodes -= 1;
|
|
64228
|
+
walk.formatted.set(value, formattedError);
|
|
64229
|
+
return formattedError;
|
|
64230
|
+
}
|
|
64231
|
+
const isWalkable = Array.isArray(value) || value instanceof Error || isPlainRecord(value);
|
|
64232
|
+
if (!isWalkable || depth <= 0 || walk.remainingNodes <= 0) {
|
|
64233
|
+
return value;
|
|
64234
|
+
}
|
|
64235
|
+
walk.formatted.set(value, "[Circular]");
|
|
64236
|
+
walk.remainingNodes -= 1;
|
|
64237
|
+
const formattedValue = formatWalkableValue({ value, depth, walk });
|
|
64238
|
+
walk.formatted.set(value, formattedValue);
|
|
64239
|
+
return formattedValue;
|
|
64240
|
+
}
|
|
64241
|
+
function summarizeAxiosError({ error: error48 }) {
|
|
64242
|
+
return {
|
|
64243
|
+
name: Reflect.get(error48, "name"),
|
|
64244
|
+
message: Reflect.get(error48, "message"),
|
|
64245
|
+
code: Reflect.get(error48, "code")
|
|
64246
|
+
};
|
|
64247
|
+
}
|
|
64248
|
+
function formatWalkableValue({ value, depth, walk }) {
|
|
64249
|
+
if (Array.isArray(value)) {
|
|
64250
|
+
if (value.length > MAX_AXIOS_ERROR_CONTAINER_ENTRIES) {
|
|
64251
|
+
return value;
|
|
64252
|
+
}
|
|
64253
|
+
let formattedItems;
|
|
64254
|
+
for (const [index, item] of value.entries()) {
|
|
64255
|
+
const formattedItem = formatNestedAxiosErrors({
|
|
64256
|
+
value: item,
|
|
64257
|
+
depth: depth - 1,
|
|
64258
|
+
walk
|
|
64259
|
+
});
|
|
64260
|
+
if (formattedItem !== item) {
|
|
64261
|
+
formattedItems ??= [...value];
|
|
64262
|
+
formattedItems[index] = formattedItem;
|
|
64263
|
+
}
|
|
64264
|
+
}
|
|
64265
|
+
return formattedItems ?? value;
|
|
64266
|
+
}
|
|
64267
|
+
const keys = Object.keys(value);
|
|
64268
|
+
if (keys.length > MAX_AXIOS_ERROR_CONTAINER_ENTRIES) {
|
|
64269
|
+
return value;
|
|
64270
|
+
}
|
|
64271
|
+
const formattedEntries = /* @__PURE__ */ new Map();
|
|
64272
|
+
for (const key of keys) {
|
|
64273
|
+
const nestedValue = Reflect.get(value, key);
|
|
64274
|
+
const formattedNestedValue = formatNestedAxiosErrors({
|
|
64275
|
+
value: nestedValue,
|
|
64276
|
+
depth: depth - 1,
|
|
64277
|
+
walk
|
|
64278
|
+
});
|
|
64279
|
+
if (formattedNestedValue !== nestedValue) {
|
|
64280
|
+
formattedEntries.set(key, formattedNestedValue);
|
|
64281
|
+
}
|
|
64282
|
+
}
|
|
64283
|
+
if (formattedEntries.size === 0) {
|
|
64284
|
+
return value;
|
|
64285
|
+
}
|
|
64286
|
+
return {
|
|
64287
|
+
...value,
|
|
64288
|
+
// Error properties are not enumerable, so the spread would drop them.
|
|
64289
|
+
...value instanceof Error ? { name: value.name, message: value.message, stack: value.stack } : {},
|
|
64290
|
+
...Object.fromEntries(formattedEntries)
|
|
64291
|
+
};
|
|
64292
|
+
}
|
|
63561
64293
|
function formatAxiosError(error48) {
|
|
63562
64294
|
if (!isRecord(error48) || error48.name !== "AxiosError") {
|
|
63563
64295
|
return error48;
|
|
@@ -63570,9 +64302,9 @@ function formatAxiosError(error48) {
|
|
|
63570
64302
|
code: error48.code,
|
|
63571
64303
|
request: {
|
|
63572
64304
|
method: request?.method,
|
|
63573
|
-
url: request?.url,
|
|
64305
|
+
url: typeof request?.url === "string" ? redactLogUrl({ url: request.url }) : request?.url,
|
|
63574
64306
|
baseURL: request?.baseURL,
|
|
63575
|
-
params: request?.params,
|
|
64307
|
+
params: redactLogBody({ body: request?.params }),
|
|
63576
64308
|
headers: redactHeaders({ headers: request?.headers }),
|
|
63577
64309
|
"axios-retry": request?.["axios-retry"]
|
|
63578
64310
|
},
|
|
@@ -63580,7 +64312,7 @@ function formatAxiosError(error48) {
|
|
|
63580
64312
|
status: response?.status,
|
|
63581
64313
|
statusText: response?.statusText,
|
|
63582
64314
|
headers: redactHeaders({ headers: response?.headers }),
|
|
63583
|
-
data: response?.data
|
|
64315
|
+
data: redactLogBody({ body: response?.data })
|
|
63584
64316
|
}
|
|
63585
64317
|
};
|
|
63586
64318
|
}
|
|
@@ -63593,6 +64325,10 @@ function redactHeaders({ headers }) {
|
|
|
63593
64325
|
REDACTED_HEADER_KEY_PATTERN.test(headerKey) ? "<redacted>" : headerValue
|
|
63594
64326
|
]));
|
|
63595
64327
|
}
|
|
64328
|
+
function isPlainRecord(value) {
|
|
64329
|
+
const prototype = Object.getPrototypeOf(value);
|
|
64330
|
+
return prototype === Object.prototype || prototype === null;
|
|
64331
|
+
}
|
|
63596
64332
|
function isRecord(value) {
|
|
63597
64333
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
63598
64334
|
}
|
|
@@ -63622,7 +64358,7 @@ function logHttpResponse(logger2, response, responseTime, extra) {
|
|
|
63622
64358
|
const responseMetadata = {
|
|
63623
64359
|
statusCode,
|
|
63624
64360
|
responseTime,
|
|
63625
|
-
responseBody,
|
|
64361
|
+
responseBody: redactLogBody({ body: responseBody }),
|
|
63626
64362
|
// Redacted so secrets (authorization/cookie/token/…) never reach the logs
|
|
63627
64363
|
// while diagnostic headers (e.g. rate-limit headers on a 429) stay visible.
|
|
63628
64364
|
responseHeaders: responseHeaders === void 0 ? void 0 : redactHeaders({ headers: responseHeaders })
|
|
@@ -63635,14 +64371,15 @@ function logHttpResponse(logger2, response, responseTime, extra) {
|
|
|
63635
64371
|
}
|
|
63636
64372
|
function transform2(request) {
|
|
63637
64373
|
const method = request.method.toUpperCase();
|
|
63638
|
-
const
|
|
64374
|
+
const originalUrl = redactLogUrl({ url: request.originalUrl });
|
|
64375
|
+
const message = `${method} ${originalUrl}`;
|
|
63639
64376
|
const metadata = {};
|
|
63640
64377
|
metadata.method = method;
|
|
63641
|
-
metadata.url = request.url;
|
|
63642
|
-
metadata.path = request.path;
|
|
64378
|
+
metadata.url = redactLogUrl({ url: request.url });
|
|
64379
|
+
metadata.path = redactLogUrl({ url: request.path });
|
|
63643
64380
|
metadata.hostname = request.hostname;
|
|
63644
|
-
metadata.originalUrl =
|
|
63645
|
-
metadata.requestBody =
|
|
64381
|
+
metadata.originalUrl = originalUrl;
|
|
64382
|
+
metadata.requestBody = redactLogBody({ body: request.body });
|
|
63646
64383
|
metadata.routePath = transformUrlIntoRoutePath(request);
|
|
63647
64384
|
metadata.apiKeyEnd = request.headers["authorization"]?.slice(-6);
|
|
63648
64385
|
return { message, metadata };
|
|
@@ -63689,7 +64426,16 @@ function buildLoggerFactory({ config: config4, context }) {
|
|
|
63689
64426
|
const internalLogger = winston.createLogger({
|
|
63690
64427
|
transports: transports2,
|
|
63691
64428
|
defaultMeta,
|
|
63692
|
-
format: winston.format.combine(
|
|
64429
|
+
format: winston.format.combine(
|
|
64430
|
+
winston.format.splat(),
|
|
64431
|
+
winston.format(addMetadata({ getCorrelationId, getExecutionContext }))(),
|
|
64432
|
+
// Before pruning: json-prune would otherwise serialize a binary
|
|
64433
|
+
// `response.data` byte by byte before it is summarised (#6006).
|
|
64434
|
+
winston.format(transformAxiosError)(),
|
|
64435
|
+
winston.format(transformErrorEnrich)({ depth: 5 }),
|
|
64436
|
+
winston.format(transformPrune)(),
|
|
64437
|
+
winston.format.timestamp()
|
|
64438
|
+
),
|
|
63693
64439
|
exitOnError: false
|
|
63694
64440
|
});
|
|
63695
64441
|
function createLogger3({ serviceName }) {
|
|
@@ -66036,8 +66782,21 @@ import { deepEqual } from "fast-equals";
|
|
|
66036
66782
|
|
|
66037
66783
|
// ../hyperline-lib/build/utils/realignDatesToTimezone.js
|
|
66038
66784
|
var import_shared4 = __toESM(require_shared(), 1);
|
|
66039
|
-
var
|
|
66785
|
+
var MILLISECONDS_PER_HOUR = 60 * 60 * 1e3;
|
|
66786
|
+
var MILLISECONDS_PER_DAY = 24 * MILLISECONDS_PER_HOUR;
|
|
66040
66787
|
var LAST_MILLISECOND_OF_DAY = MILLISECONDS_PER_DAY - 1;
|
|
66788
|
+
var dateRealignmentModeSchema = external_exports.enum([
|
|
66789
|
+
"utc_midnight_import",
|
|
66790
|
+
"dst_hour_drift",
|
|
66791
|
+
"month_start_drift",
|
|
66792
|
+
"manual_phase_end_midnight"
|
|
66793
|
+
]).default("utc_midnight_import");
|
|
66794
|
+
var DST_HOUR_SHIFT_BY_LOCAL_MILLISECOND_OF_DAY = /* @__PURE__ */ new Map([
|
|
66795
|
+
[23 * MILLISECONDS_PER_HOUR, MILLISECONDS_PER_HOUR],
|
|
66796
|
+
[LAST_MILLISECOND_OF_DAY - MILLISECONDS_PER_HOUR, MILLISECONDS_PER_HOUR],
|
|
66797
|
+
[MILLISECONDS_PER_HOUR, -MILLISECONDS_PER_HOUR],
|
|
66798
|
+
[MILLISECONDS_PER_HOUR - 1, -MILLISECONDS_PER_HOUR]
|
|
66799
|
+
]);
|
|
66041
66800
|
|
|
66042
66801
|
// ../hyperline-lib/build/utils/api/filterBuilder.js
|
|
66043
66802
|
var baseAuthorizedOperators = ["not", "isNull", "isNotNull"];
|
|
@@ -66106,150 +66865,6 @@ var isAxiosError = axios.isAxiosError;
|
|
|
66106
66865
|
// ../hyperline-lib/build/httpClient/httpClient.js
|
|
66107
66866
|
import axios2 from "axios";
|
|
66108
66867
|
import axiosRetry, { isNetworkOrIdempotentRequestError, retryAfter } from "axios-retry";
|
|
66109
|
-
|
|
66110
|
-
// ../hyperline-lib/build/httpClient/logRedaction.js
|
|
66111
|
-
var REDACTED_KEY_NAMES = /* @__PURE__ */ new Set([
|
|
66112
|
-
"accesstoken",
|
|
66113
|
-
"apikey",
|
|
66114
|
-
"apitoken",
|
|
66115
|
-
"assertion",
|
|
66116
|
-
"authtoken",
|
|
66117
|
-
"clientassertion",
|
|
66118
|
-
"codeverifier",
|
|
66119
|
-
"credentials",
|
|
66120
|
-
"idtoken",
|
|
66121
|
-
"privatekey",
|
|
66122
|
-
"refreshtoken",
|
|
66123
|
-
"sessiontoken",
|
|
66124
|
-
"token"
|
|
66125
|
-
]);
|
|
66126
|
-
var REDACTED_KEY_SUFFIX_PATTERN = /(secret|password)$/;
|
|
66127
|
-
var REDACTED_KEY_CANDIDATE_PATTERN = /token|key|secret|password|assertion|verifier|credentials/i;
|
|
66128
|
-
var REDACTED_VALUE = "<redacted>";
|
|
66129
|
-
var MAX_REDACTION_DEPTH = 10;
|
|
66130
|
-
var MAX_PARSED_STRING_LENGTH = 16384;
|
|
66131
|
-
var MAX_VISITED_NODES = 1e3;
|
|
66132
|
-
var MAX_CONTAINER_ENTRIES = MAX_VISITED_NODES;
|
|
66133
|
-
function redactLogBody({ body }) {
|
|
66134
|
-
return redactValue({
|
|
66135
|
-
value: body,
|
|
66136
|
-
depth: MAX_REDACTION_DEPTH,
|
|
66137
|
-
budget: { remainingNodes: MAX_VISITED_NODES }
|
|
66138
|
-
});
|
|
66139
|
-
}
|
|
66140
|
-
function redactLogUrl({ url: url2 }) {
|
|
66141
|
-
const queryIndex = url2.indexOf("?");
|
|
66142
|
-
if (queryIndex === -1 || url2.length > MAX_PARSED_STRING_LENGTH) {
|
|
66143
|
-
return url2;
|
|
66144
|
-
}
|
|
66145
|
-
const redactedQuery = redactFormEncoded({ text: url2.slice(queryIndex + 1) });
|
|
66146
|
-
return redactedQuery === void 0 ? url2 : `${url2.slice(0, queryIndex)}?${redactedQuery}`;
|
|
66147
|
-
}
|
|
66148
|
-
function redactValue({ value, depth, budget }) {
|
|
66149
|
-
if (depth <= 0 || budget.remainingNodes <= 0) {
|
|
66150
|
-
return value;
|
|
66151
|
-
}
|
|
66152
|
-
budget.remainingNodes -= 1;
|
|
66153
|
-
if (typeof value === "string") {
|
|
66154
|
-
return redactString({ text: value, budget });
|
|
66155
|
-
}
|
|
66156
|
-
if (value instanceof URLSearchParams) {
|
|
66157
|
-
return redactFormEncoded({ text: value.toString() }) ?? value;
|
|
66158
|
-
}
|
|
66159
|
-
if (Array.isArray(value)) {
|
|
66160
|
-
return redactArray({ items: value, depth, budget });
|
|
66161
|
-
}
|
|
66162
|
-
if (isPlainObject2(value)) {
|
|
66163
|
-
return redactObject({ record: value, depth, budget });
|
|
66164
|
-
}
|
|
66165
|
-
return value;
|
|
66166
|
-
}
|
|
66167
|
-
function redactArray({ items, depth, budget }) {
|
|
66168
|
-
if (items.length > MAX_CONTAINER_ENTRIES) {
|
|
66169
|
-
return items;
|
|
66170
|
-
}
|
|
66171
|
-
let redactedItems;
|
|
66172
|
-
for (const [index, item] of items.entries()) {
|
|
66173
|
-
if (budget.remainingNodes <= 0) {
|
|
66174
|
-
break;
|
|
66175
|
-
}
|
|
66176
|
-
const redactedItem = redactValue({ value: item, depth: depth - 1, budget });
|
|
66177
|
-
if (redactedItem !== item) {
|
|
66178
|
-
redactedItems ??= [...items];
|
|
66179
|
-
redactedItems[index] = redactedItem;
|
|
66180
|
-
}
|
|
66181
|
-
}
|
|
66182
|
-
return redactedItems ?? items;
|
|
66183
|
-
}
|
|
66184
|
-
function redactObject({ record: record2, depth, budget }) {
|
|
66185
|
-
const redactedEntries = /* @__PURE__ */ new Map();
|
|
66186
|
-
let entryCount = 0;
|
|
66187
|
-
for (const key in record2) {
|
|
66188
|
-
if (!Object.hasOwn(record2, key)) {
|
|
66189
|
-
continue;
|
|
66190
|
-
}
|
|
66191
|
-
entryCount += 1;
|
|
66192
|
-
if (entryCount > MAX_CONTAINER_ENTRIES) {
|
|
66193
|
-
return record2;
|
|
66194
|
-
}
|
|
66195
|
-
if (budget.remainingNodes <= 0) {
|
|
66196
|
-
break;
|
|
66197
|
-
}
|
|
66198
|
-
const nestedValue = record2[key];
|
|
66199
|
-
const redactedNestedValue = isRedactedKey({ key }) && nestedValue != null ? REDACTED_VALUE : redactValue({ value: nestedValue, depth: depth - 1, budget });
|
|
66200
|
-
if (redactedNestedValue !== nestedValue) {
|
|
66201
|
-
redactedEntries.set(key, redactedNestedValue);
|
|
66202
|
-
}
|
|
66203
|
-
}
|
|
66204
|
-
return redactedEntries.size === 0 ? record2 : { ...record2, ...Object.fromEntries(redactedEntries) };
|
|
66205
|
-
}
|
|
66206
|
-
function redactString({ text, budget }) {
|
|
66207
|
-
if (text.length > MAX_PARSED_STRING_LENGTH) {
|
|
66208
|
-
return text;
|
|
66209
|
-
}
|
|
66210
|
-
const trimmedText = text.trim();
|
|
66211
|
-
if (trimmedText.startsWith("{") || trimmedText.startsWith("[")) {
|
|
66212
|
-
try {
|
|
66213
|
-
const parsedValue = JSON.parse(trimmedText);
|
|
66214
|
-
const redactedValue = redactValue({
|
|
66215
|
-
value: parsedValue,
|
|
66216
|
-
depth: MAX_REDACTION_DEPTH,
|
|
66217
|
-
budget
|
|
66218
|
-
});
|
|
66219
|
-
return redactedValue === parsedValue ? text : JSON.stringify(redactedValue);
|
|
66220
|
-
} catch {
|
|
66221
|
-
return text;
|
|
66222
|
-
}
|
|
66223
|
-
}
|
|
66224
|
-
return redactFormEncoded({ text }) ?? text;
|
|
66225
|
-
}
|
|
66226
|
-
function redactFormEncoded({ text }) {
|
|
66227
|
-
if (!text.includes("=") || !REDACTED_KEY_CANDIDATE_PATTERN.test(text)) {
|
|
66228
|
-
return void 0;
|
|
66229
|
-
}
|
|
66230
|
-
const params = new URLSearchParams(text);
|
|
66231
|
-
let hasRedactedParam = false;
|
|
66232
|
-
for (const key of new Set(params.keys())) {
|
|
66233
|
-
if (isRedactedKey({ key })) {
|
|
66234
|
-
params.set(key, REDACTED_VALUE);
|
|
66235
|
-
hasRedactedParam = true;
|
|
66236
|
-
}
|
|
66237
|
-
}
|
|
66238
|
-
return hasRedactedParam ? params.toString() : void 0;
|
|
66239
|
-
}
|
|
66240
|
-
function isRedactedKey({ key }) {
|
|
66241
|
-
const normalizedKey = key.toLowerCase().replace(/[_-]/g, "");
|
|
66242
|
-
return REDACTED_KEY_NAMES.has(normalizedKey) || REDACTED_KEY_SUFFIX_PATTERN.test(normalizedKey);
|
|
66243
|
-
}
|
|
66244
|
-
function isPlainObject2(value) {
|
|
66245
|
-
if (typeof value !== "object" || value === null) {
|
|
66246
|
-
return false;
|
|
66247
|
-
}
|
|
66248
|
-
const prototype = Object.getPrototypeOf(value);
|
|
66249
|
-
return prototype === Object.prototype || prototype === null;
|
|
66250
|
-
}
|
|
66251
|
-
|
|
66252
|
-
// ../hyperline-lib/build/httpClient/httpClient.js
|
|
66253
66868
|
import { AxiosError } from "axios";
|
|
66254
66869
|
var recommendedRetryConfig = {
|
|
66255
66870
|
retries: 3,
|
|
@@ -66317,14 +66932,14 @@ function isTooManyRequestsError(error48) {
|
|
|
66317
66932
|
return error48.response?.status === 429;
|
|
66318
66933
|
}
|
|
66319
66934
|
var toLogRequest = (config4) => {
|
|
66320
|
-
const url2 =
|
|
66935
|
+
const url2 = config4.url ?? "";
|
|
66321
66936
|
return {
|
|
66322
66937
|
method: config4.method ?? "",
|
|
66323
66938
|
url: url2,
|
|
66324
66939
|
path: url2,
|
|
66325
66940
|
hostname: config4.baseURL ?? "",
|
|
66326
66941
|
originalUrl: `${config4.baseURL ?? ""}${url2}`,
|
|
66327
|
-
body:
|
|
66942
|
+
body: config4.data,
|
|
66328
66943
|
headers: {}
|
|
66329
66944
|
};
|
|
66330
66945
|
};
|