@hyperline/cli 0.1.0-build.1.cd9bca4 → 0.1.0-build.1.cdcc4ce

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.
@@ -33833,7 +33833,7 @@ var require_shared = __commonJS({
33833
33833
  getNameForCurrency: () => getNameForCurrency,
33834
33834
  getNaturalNumber: () => getNaturalNumber,
33835
33835
  getSymbolForCurrency: () => getSymbolForCurrency,
33836
- getTimezoneByName: () => getTimezoneByName,
33836
+ getTimezoneByName: () => getTimezoneByName2,
33837
33837
  getTimezoneOffsetName: () => getTimezoneOffsetName,
33838
33838
  getTimezones: () => getTimezones2,
33839
33839
  getValidTimezonesNames: () => getValidTimezonesNames,
@@ -33850,7 +33850,7 @@ var require_shared = __commonJS({
33850
33850
  subtract: () => subtract,
33851
33851
  sum: () => sum2,
33852
33852
  toLocalTime: () => toLocalTime3,
33853
- toUtc: () => toUtc2,
33853
+ toUtc: () => toUtc3,
33854
33854
  useDebounce: () => useDebounce
33855
33855
  });
33856
33856
  module.exports = __toCommonJS(shared_exports);
@@ -34985,10 +34985,10 @@ var require_shared = __commonJS({
34985
34985
  ZodId: () => ZodId,
34986
34986
  ZodTranslationsSchemaFn: () => ZodTranslationsSchemaFn
34987
34987
  });
34988
- var import_zod20 = require_lib();
34988
+ var import_zod22 = require_lib();
34989
34989
  var countryIds2 = ["all", ...countries.map(({ id }) => id)];
34990
- var ZodId = import_zod20.z.enum(countryIds2);
34991
- var ZodTranslationsSchemaFn = (schema) => import_zod20.z.record(import_zod20.z.string(), schema.optional());
34990
+ var ZodId = import_zod22.z.enum(countryIds2);
34991
+ var ZodTranslationsSchemaFn = (schema) => import_zod22.z.record(import_zod22.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 import_zod22 = require_lib();
36291
- var ZodCurrencyId = import_zod22.z.enum(
36290
+ var import_zod23 = require_lib();
36291
+ var ZodCurrencyId = import_zod23.z.enum(
36292
36292
  all_default.map(({ id }) => id)
36293
36293
  );
36294
- var ZodNumberCurrency = import_zod22.z.string().or(import_zod22.z.number().transform((number4) => number4)).transform((number4) => number4);
36295
- var ZodNumberCurrencyPositiveValue = import_zod22.z.number().min(0).transform((number4) => number4).transform((number4) => number4);
36296
- var ZodNumberCurrencyPositiveValueExcludingZero = import_zod22.z.number().gt(0).transform((number4) => number4).transform((number4) => number4);
36297
- var ZodCurrencyMap = import_zod22.z.record(ZodNumberCurrency).refine(
36294
+ var ZodNumberCurrency = import_zod23.z.string().or(import_zod23.z.number().transform((number4) => number4)).transform((number4) => number4);
36295
+ var ZodNumberCurrencyPositiveValue = import_zod23.z.number().min(0).transform((number4) => number4).transform((number4) => number4);
36296
+ var ZodNumberCurrencyPositiveValueExcludingZero = import_zod23.z.number().gt(0).transform((number4) => number4).transform((number4) => number4);
36297
+ var ZodCurrencyMap = import_zod23.z.record(ZodNumberCurrency).refine(
36298
36298
  (data) => Object.keys(data).every((key) => ZodCurrencyId.safeParse(key).success),
36299
36299
  {
36300
36300
  message: "Invalid currency key.",
@@ -36557,14 +36557,14 @@ var require_shared = __commonJS({
36557
36557
  function getTimezones2() {
36558
36558
  return timezones;
36559
36559
  }
36560
- function getTimezoneByName(tz) {
36560
+ function getTimezoneByName2(tz) {
36561
36561
  var _a2;
36562
36562
  if (tz === "UTC") {
36563
36563
  return timezones.find(({ name }) => name === "Etc/UTC");
36564
36564
  }
36565
36565
  return (_a2 = timezones.find(({ name }) => name === tz)) != null ? _a2 : timezones.find(({ group }) => group.includes(tz));
36566
36566
  }
36567
- function toUtc2(date5, timezone) {
36567
+ function toUtc3(date5, timezone) {
36568
36568
  return (0, import_date_fns_tz.fromZonedTime)(date5, timezone);
36569
36569
  }
36570
36570
  function toLocalTime3(date5, localTimezone) {
@@ -36575,7 +36575,7 @@ var require_shared = __commonJS({
36575
36575
  );
36576
36576
  var constructDateFromTimezoneToLocal = (date5, timezone) => {
36577
36577
  if (!timezone) return date5;
36578
- const timezoneObj = getTimezoneByName(timezone);
36578
+ const timezoneObj = getTimezoneByName2(timezone);
36579
36579
  if (!timezoneObj) return date5;
36580
36580
  const dateAtTimezone = new Date(
36581
36581
  date5.getFullYear(),
@@ -38483,7 +38483,7 @@ Examples:
38483
38483
  queryParamKeys: []
38484
38484
  });
38485
38485
  });
38486
- resource.command("delete-ledger").description(`Delete an unused accounting ledger.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
38486
+ 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
38487
  Examples:
38488
38488
  hyperline accounting-ledgers delete-ledger --id <id>
38489
38489
  hyperline accounting-ledgers delete-ledger --id <id> --output json`).action(async (opts) => {
@@ -38941,7 +38941,7 @@ Examples:
38941
38941
  ]
38942
38942
  });
38943
38943
  });
38944
- resource.command("get-accounting-rule-tree").description(`Retrieve accounting rules organized as a filter tree.`).option("--ledger-id <value>", `Ledger identifier.`).option("--invoicing-entity-id <value>", `Optional invoicing entity identifier.`).option("--max-depth <number>", `Maximum tree depth to return.`).option("--search <value>", `Search by rule identifier or category.`).addHelpText("after", `
38944
+ resource.command("get-accounting-rule-tree").description(`Retrieve accounting rules organized as a filter tree. Accounting software sync rules are excluded.`).option("--ledger-id <value>", `Ledger identifier.`).option("--invoicing-entity-id <value>", `Optional invoicing entity identifier.`).option("--max-depth <number>", `Maximum tree depth to return.`).option("--search <value>", `Search by rule identifier or category.`).addHelpText("after", `
38945
38945
  Examples:
38946
38946
  hyperline accounting-rules get-accounting-rule-tree
38947
38947
  hyperline accounting-rules get-accounting-rule-tree --ledger-id <ledger_id> --invoicing-entity-id <invoicing_entity_id>`).action(async (opts) => {
@@ -39013,7 +39013,7 @@ Examples:
39013
39013
  queryParamKeys: []
39014
39014
  });
39015
39015
  });
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 (month, year, etc.).`).option("--interval-count <number>", `Billing interval count filter.`).option("--revenue-ledger-account-id <value>", `Revenue ledger account ID used for invoice line revenue routing.`).option("--deferred-revenue-ledger-account-id <value>", `Deferred revenue ledger account ID used before revenue is recognized.`).option("--deferred-discount-ledger-account-id <value>", `Deferred discount ledger account ID used before discounts are recognized.`).option("--contra-revenue-ledger-account-id <value>", `Contra revenue ledger account ID used for amounts that reduce revenue.`).option("--discount-ledger-account-id <value>", `Discount ledger account ID used for recognized discounts.`).option("--ar-ledger-account-id <value>", `Accounts receivable ledger account ID used for invoice posting.`).option("--cash-ledger-account-id <value>", `Cash ledger account ID used for payment settlement.`).option("--payments-clearing-ledger-account-id <value>", `Payments clearing ledger account ID used while payments settle.`).option("--output-tax-ledger-account-id <value>", `Output tax ledger account ID used for tax liability.`).option("--uncollectible-debit-ledger-account-id <value>", `Ledger account ID debited when an invoice becomes uncollectible. Use an asset account for doubtful-receivable reclassification or an expense account for direct write-off.`).option("--customer-credits-ledger-account-id <value>", `Customer credits ledger account ID used for credit balances.`).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", `
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 (month, year, 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.`).option("--deferred-revenue-ledger-account-id <value>", `Deferred revenue ledger account ID used before revenue is recognized.`).option("--deferred-discount-ledger-account-id <value>", `Deferred discount ledger account ID used before discounts are recognized.`).option("--contra-revenue-ledger-account-id <value>", `Contra revenue ledger account ID used for amounts that reduce revenue.`).option("--discount-ledger-account-id <value>", `Discount ledger account ID used for recognized discounts.`).option("--ar-ledger-account-id <value>", `Accounts receivable ledger account ID used for invoice posting.`).option("--cash-ledger-account-id <value>", `Cash ledger account ID used for payment settlement.`).option("--payments-clearing-ledger-account-id <value>", `Payments clearing ledger account ID used while payments settle.`).option("--output-tax-ledger-account-id <value>", `Output tax ledger account ID used for tax liability.`).option("--uncollectible-debit-ledger-account-id <value>", `Ledger account ID debited when an invoice becomes uncollectible. Use an asset account for doubtful-receivable reclassification or an expense account for direct write-off.`).option("--customer-credits-ledger-account-id <value>", `Customer credits ledger account ID used for credit balances.`).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
39017
  Examples:
39018
39018
  hyperline accounting-rules create --category <category> --priority <priority>
39019
39019
  hyperline accounting-rules create --category <category> --priority <priority> --ledger-id <ledger_id> --name <name>
@@ -39078,6 +39078,8 @@ Examples:
39078
39078
  args.client_provider_ids = JSON.parse(opts.clientProviderIds);
39079
39079
  if (opts.paymentMethodTypes !== void 0)
39080
39080
  args.payment_method_types = JSON.parse(opts.paymentMethodTypes);
39081
+ if (opts.customPropertyFilters !== void 0)
39082
+ args.custom_property_filters = JSON.parse(opts.customPropertyFilters);
39081
39083
  await ctx.execute({
39082
39084
  method: "POST",
39083
39085
  path: "/v1/accounting/rules",
@@ -39085,7 +39087,7 @@ Examples:
39085
39087
  queryParamKeys: []
39086
39088
  });
39087
39089
  });
39088
- 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 (e.g. accounting_software, invoice_posted).`).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 (month, year, etc.).`).option("--interval-count <number>", `Billing interval count filter.`).option("--revenue-ledger-account-id <value>", `Revenue ledger account ID used for invoice line revenue routing.`).option("--deferred-revenue-ledger-account-id <value>", `Deferred revenue ledger account ID used before revenue is recognized.`).option("--deferred-discount-ledger-account-id <value>", `Deferred discount ledger account ID used before discounts are recognized.`).option("--contra-revenue-ledger-account-id <value>", `Contra revenue ledger account ID used for amounts that reduce revenue.`).option("--discount-ledger-account-id <value>", `Discount ledger account ID used for recognized discounts.`).option("--ar-ledger-account-id <value>", `Accounts receivable ledger account ID used for invoice posting.`).option("--cash-ledger-account-id <value>", `Cash ledger account ID used for payment settlement.`).option("--payments-clearing-ledger-account-id <value>", `Payments clearing ledger account ID used while payments settle.`).option("--output-tax-ledger-account-id <value>", `Output tax ledger account ID used for tax liability.`).option("--uncollectible-debit-ledger-account-id <value>", `Ledger account ID debited when an invoice becomes uncollectible. Use an asset account for doubtful-receivable reclassification or an expense account for direct write-off.`).option("--customer-credits-ledger-account-id <value>", `Customer credits ledger account ID used for credit balances.`).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", `
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 (month, year, 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.`).option("--deferred-revenue-ledger-account-id <value>", `Deferred revenue ledger account ID used before revenue is recognized.`).option("--deferred-discount-ledger-account-id <value>", `Deferred discount ledger account ID used before discounts are recognized.`).option("--contra-revenue-ledger-account-id <value>", `Contra revenue ledger account ID used for amounts that reduce revenue.`).option("--discount-ledger-account-id <value>", `Discount ledger account ID used for recognized discounts.`).option("--ar-ledger-account-id <value>", `Accounts receivable ledger account ID used for invoice posting.`).option("--cash-ledger-account-id <value>", `Cash ledger account ID used for payment settlement.`).option("--payments-clearing-ledger-account-id <value>", `Payments clearing ledger account ID used while payments settle.`).option("--output-tax-ledger-account-id <value>", `Output tax ledger account ID used for tax liability.`).option("--uncollectible-debit-ledger-account-id <value>", `Ledger account ID debited when an invoice becomes uncollectible. Use an asset account for doubtful-receivable reclassification or an expense account for direct write-off.`).option("--customer-credits-ledger-account-id <value>", `Customer credits ledger account ID used for credit balances.`).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", `
39089
39091
  Examples:
39090
39092
  hyperline accounting-rules update --id <id>
39091
39093
  hyperline accounting-rules update --id <id> --name <name> --category <category>
@@ -39150,6 +39152,8 @@ Examples:
39150
39152
  args.client_provider_ids = JSON.parse(opts.clientProviderIds);
39151
39153
  if (opts.paymentMethodTypes !== void 0)
39152
39154
  args.payment_method_types = JSON.parse(opts.paymentMethodTypes);
39155
+ if (opts.customPropertyFilters !== void 0)
39156
+ args.custom_property_filters = JSON.parse(opts.customPropertyFilters);
39153
39157
  await ctx.execute({
39154
39158
  method: "PUT",
39155
39159
  path: "/v1/accounting/rules/{id}",
@@ -39183,7 +39187,7 @@ Examples:
39183
39187
  queryParamKeys: []
39184
39188
  });
39185
39189
  });
39186
- 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 (month, year, etc.).`).option("--interval-count <number>", `Billing interval count filter.`).addHelpText("after", `
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 (month, year, 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", `
39187
39191
  Examples:
39188
39192
  hyperline accounting-rules resolve --ledger-id <ledger_id> --category <category>
39189
39193
  hyperline accounting-rules resolve --ledger-id <ledger_id> --category <category> --product-id <product_id> --product-type <product_type>
@@ -39214,6 +39218,8 @@ Examples:
39214
39218
  args.interval_period = opts.intervalPeriod;
39215
39219
  if (opts.intervalCount !== void 0)
39216
39220
  args.interval_count = Number(opts.intervalCount);
39221
+ if (opts.customProperties !== void 0)
39222
+ args.custom_properties = JSON.parse(opts.customProperties);
39217
39223
  await ctx.execute({
39218
39224
  method: "POST",
39219
39225
  path: "/v1/accounting/rules/resolve",
@@ -39223,57 +39229,81 @@ Examples:
39223
39229
  });
39224
39230
  }
39225
39231
 
39226
- // build/commands/generated/analytics.js
39227
- function registerAnalyticsCommands(parent) {
39228
- const resource = parent.command("analytics").description("Manage analytics");
39229
- resource.command("get").description(`Retrieve pre-computed account analytics including ARR, MRR, revenues, churn rate, and other key billing metrics. Optionally filter by invoicing_entity_id. Use this to get a high-level financial overview.`).option("--invoicing-entity-id <value>", `Invoicing Entity ID to filter analytics`).addHelpText("after", `
39232
+ // build/commands/generated/aggregators.js
39233
+ function registerAggregatorsCommands(parent) {
39234
+ const resource = parent.command("aggregators").description("Manage aggregators");
39235
+ resource.command("list").description(`List all aggregators with pagination. Aggregators define how billable events are counted or summed to compute usage.`).option("--take <number>", `take`).option("--skip <number>", `skip`).addHelpText("after", `
39230
39236
  Examples:
39231
- hyperline analytics get
39232
- hyperline analytics get --invoicing-entity-id <invoicing_entity_id>`).action(async (opts) => {
39237
+ hyperline aggregators list
39238
+ hyperline aggregators list --take <take>`).action(async (opts) => {
39233
39239
  const ctx = resource.parent?.opts()._ctx;
39234
39240
  if (!ctx) {
39235
39241
  process.stderr.write("Error: Not authenticated\n");
39236
39242
  process.exit(1);
39237
39243
  }
39238
39244
  const args = {};
39239
- if (opts.invoicingEntityId !== void 0)
39240
- args.invoicing_entity_id = opts.invoicingEntityId;
39245
+ if (opts.take !== void 0)
39246
+ args.take = Number(opts.take);
39247
+ if (opts.skip !== void 0)
39248
+ args.skip = Number(opts.skip);
39241
39249
  await ctx.execute({
39242
39250
  method: "GET",
39243
- path: "/v1/analytics",
39251
+ path: "/v1/aggregators",
39244
39252
  args,
39245
- queryParamKeys: ["invoicing_entity_id"]
39253
+ queryParamKeys: ["take", "skip"]
39246
39254
  });
39247
39255
  });
39248
- }
39249
-
39250
- // build/commands/generated/bank-accounts.js
39251
- function registerBank_AccountsCommands(parent) {
39252
- const resource = parent.command("bank-accounts").description("Manage bank accounts");
39253
- resource.command("list").description(`List all bank accounts configured on the account. Returns paginated results with take/skip.`).option("--take <number>", `take`).option("--skip <number>", `skip`).addHelpText("after", `
39256
+ resource.command("create").description(`Create a new aggregator that counts or sums billable events. Aggregators can then be linked to products via aggregator_id.`).requiredOption("--entity <value>", `The billable event entity to aggregate.`).option("--type <value>", `The type of aggregator.`).option("--where <json>", `Filter conditions for the aggregation.`).option("--name <value>", `Name of the aggregator.`).option("--description <value>", `Description of the aggregator.`).option("--allow-negative-values", `Whether the aggregator can produce negative values.`).option("--aggregate-on-customers-enabled", `Whether the aggregator should aggregate on customers.`).option("--custom-event-name <value>", `Custom event name for the aggregator.`).option("--exposed-event-keys <json>", `Event keys exposed by the aggregator.`).option("--unit-name <value>", `Display name of the unit being measured (e.g. 'user', 'request'). Used as fallback for products attached to this aggregator.`).option("--default-interval-count <number>", `Default interval count for usage periods.`).option("--default-interval-period <value>", `Default interval period for usage periods.`).option("--thresholds <json>", `Thresholds for the aggregator.`).requiredOption("--operation <value>", `The aggregation operation to perform.`).option("--property <value>", `The property to sum.`).addHelpText("after", `
39254
39257
  Examples:
39255
- hyperline bank-accounts list
39256
- hyperline bank-accounts list --take <take>`).action(async (opts) => {
39258
+ hyperline aggregators create --entity <entity> --operation <operation>
39259
+ hyperline aggregators create --entity <entity> --operation <operation> --type <type> --where <where>
39260
+ hyperline aggregators create --entity <entity> --operation <operation> --output json`).action(async (opts) => {
39257
39261
  const ctx = resource.parent?.opts()._ctx;
39258
39262
  if (!ctx) {
39259
39263
  process.stderr.write("Error: Not authenticated\n");
39260
39264
  process.exit(1);
39261
39265
  }
39262
39266
  const args = {};
39263
- if (opts.take !== void 0)
39264
- args.take = Number(opts.take);
39265
- if (opts.skip !== void 0)
39266
- args.skip = Number(opts.skip);
39267
+ if (opts.entity !== void 0)
39268
+ args.entity = opts.entity;
39269
+ if (opts.type !== void 0)
39270
+ args.type = opts.type;
39271
+ if (opts.name !== void 0)
39272
+ args.name = opts.name;
39273
+ if (opts.description !== void 0)
39274
+ args.description = opts.description;
39275
+ if (opts.customEventName !== void 0)
39276
+ args.custom_event_name = opts.customEventName;
39277
+ if (opts.unitName !== void 0)
39278
+ args.unit_name = opts.unitName;
39279
+ if (opts.defaultIntervalPeriod !== void 0)
39280
+ args.default_interval_period = opts.defaultIntervalPeriod;
39281
+ if (opts.operation !== void 0)
39282
+ args.operation = opts.operation;
39283
+ if (opts.property !== void 0)
39284
+ args.property = opts.property;
39285
+ if (opts.defaultIntervalCount !== void 0)
39286
+ args.default_interval_count = Number(opts.defaultIntervalCount);
39287
+ if (opts.allowNegativeValues !== void 0)
39288
+ args.allow_negative_values = true;
39289
+ if (opts.aggregateOnCustomersEnabled !== void 0)
39290
+ args.aggregate_on_customers_enabled = true;
39291
+ if (opts.where !== void 0)
39292
+ args.where = JSON.parse(opts.where);
39293
+ if (opts.exposedEventKeys !== void 0)
39294
+ args.exposed_event_keys = JSON.parse(opts.exposedEventKeys);
39295
+ if (opts.thresholds !== void 0)
39296
+ args.thresholds = JSON.parse(opts.thresholds);
39267
39297
  await ctx.execute({
39268
- method: "GET",
39269
- path: "/v1/bank-accounts",
39298
+ method: "POST",
39299
+ path: "/v1/aggregators",
39270
39300
  args,
39271
- queryParamKeys: ["take", "skip"]
39301
+ queryParamKeys: []
39272
39302
  });
39273
39303
  });
39274
- resource.command("get").description(`Retrieve a specific bank account by its ID. Returns masked bank account details, account type, balance, and currency.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
39304
+ resource.command("get").description(`Retrieve a specific aggregator by ID.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
39275
39305
  Examples:
39276
- hyperline bank-accounts get --id <id>`).action(async (opts) => {
39306
+ hyperline aggregators get --id <id>`).action(async (opts) => {
39277
39307
  const ctx = resource.parent?.opts()._ctx;
39278
39308
  if (!ctx) {
39279
39309
  process.stderr.write("Error: Not authenticated\n");
@@ -39284,15 +39314,16 @@ Examples:
39284
39314
  args.id = opts.id;
39285
39315
  await ctx.execute({
39286
39316
  method: "GET",
39287
- path: "/v1/bank-accounts/{id}",
39317
+ path: "/v1/aggregators/{id}",
39288
39318
  args,
39289
39319
  queryParamKeys: []
39290
39320
  });
39291
39321
  });
39292
- resource.command("list-bank-account-transactions").description(`List open banking transactions for a specific bank account. Paginated with limit/cursor.`).requiredOption("--id <value>", `id parameter`).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.`).addHelpText("after", `
39322
+ resource.command("update").description(`Update an existing aggregator's configuration.`).requiredOption("--id <value>", `id parameter`).option("--entity <value>", `The billable event entity to aggregate.`).option("--type <value>", `The type of aggregator.`).option("--where <json>", `Filter conditions for the aggregation.`).option("--name <value>", `Name of the aggregator.`).option("--description <value>", `Description of the aggregator.`).option("--allow-negative-values", `Whether the aggregator can produce negative values.`).option("--aggregate-on-customers-enabled", `Whether the aggregator should aggregate on customers.`).option("--custom-event-name <value>", `Custom event name for the aggregator.`).option("--exposed-event-keys <json>", `Event keys exposed by the aggregator.`).option("--unit-name <value>", `Display name of the unit being measured (e.g. 'user', 'request'). Used as fallback for products attached to this aggregator.`).option("--default-interval-count <number>", `Default interval count for usage periods.`).option("--default-interval-period <value>", `Default interval period for usage periods.`).option("--thresholds <json>", `Thresholds for the aggregator. Replaces existing thresholds.`).option("--operation <value>", `The aggregation operation to perform.`).option("--property <value>", `The property to sum. Required when operation is 'sum'.`).addHelpText("after", `
39293
39323
  Examples:
39294
- hyperline bank-accounts list-bank-account-transactions --id <id>
39295
- hyperline bank-accounts list-bank-account-transactions --id <id> --limit <limit> --cursor <cursor>`).action(async (opts) => {
39324
+ hyperline aggregators update --id <id>
39325
+ hyperline aggregators update --id <id> --entity <entity> --type <type>
39326
+ hyperline aggregators update --id <id> --output json`).action(async (opts) => {
39296
39327
  const ctx = resource.parent?.opts()._ctx;
39297
39328
  if (!ctx) {
39298
39329
  process.stderr.write("Error: Not authenticated\n");
@@ -39301,92 +39332,240 @@ Examples:
39301
39332
  const args = {};
39302
39333
  if (opts.id !== void 0)
39303
39334
  args.id = opts.id;
39304
- if (opts.cursor !== void 0)
39305
- args.cursor = opts.cursor;
39306
- if (opts.includeTotal !== void 0)
39307
- args.include_total = opts.includeTotal;
39308
- if (opts.limit !== void 0)
39309
- args.limit = Number(opts.limit);
39335
+ if (opts.entity !== void 0)
39336
+ args.entity = opts.entity;
39337
+ if (opts.type !== void 0)
39338
+ args.type = opts.type;
39339
+ if (opts.name !== void 0)
39340
+ args.name = opts.name;
39341
+ if (opts.description !== void 0)
39342
+ args.description = opts.description;
39343
+ if (opts.customEventName !== void 0)
39344
+ args.custom_event_name = opts.customEventName;
39345
+ if (opts.unitName !== void 0)
39346
+ args.unit_name = opts.unitName;
39347
+ if (opts.defaultIntervalPeriod !== void 0)
39348
+ args.default_interval_period = opts.defaultIntervalPeriod;
39349
+ if (opts.operation !== void 0)
39350
+ args.operation = opts.operation;
39351
+ if (opts.property !== void 0)
39352
+ args.property = opts.property;
39353
+ if (opts.defaultIntervalCount !== void 0)
39354
+ args.default_interval_count = Number(opts.defaultIntervalCount);
39355
+ if (opts.allowNegativeValues !== void 0)
39356
+ args.allow_negative_values = true;
39357
+ if (opts.aggregateOnCustomersEnabled !== void 0)
39358
+ args.aggregate_on_customers_enabled = true;
39359
+ if (opts.where !== void 0)
39360
+ args.where = JSON.parse(opts.where);
39361
+ if (opts.exposedEventKeys !== void 0)
39362
+ args.exposed_event_keys = JSON.parse(opts.exposedEventKeys);
39363
+ if (opts.thresholds !== void 0)
39364
+ args.thresholds = JSON.parse(opts.thresholds);
39310
39365
  await ctx.execute({
39311
- method: "GET",
39312
- path: "/v1/bank-accounts/{id}/transactions",
39366
+ method: "PUT",
39367
+ path: "/v1/aggregators/{id}",
39313
39368
  args,
39314
- queryParamKeys: ["limit", "cursor", "include_total"]
39369
+ queryParamKeys: []
39370
+ });
39371
+ });
39372
+ resource.command("delete").description(`Delete an aggregator by ID. Will fail if the aggregator is linked to a product.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
39373
+ Examples:
39374
+ hyperline aggregators delete --id <id>
39375
+ hyperline aggregators delete --id <id> --output json`).action(async (opts) => {
39376
+ const ctx = resource.parent?.opts()._ctx;
39377
+ if (!ctx) {
39378
+ process.stderr.write("Error: Not authenticated\n");
39379
+ process.exit(1);
39380
+ }
39381
+ const args = {};
39382
+ if (opts.id !== void 0)
39383
+ args.id = opts.id;
39384
+ if (!opts.yes) {
39385
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
39386
+ if (!confirmed) {
39387
+ process.stdout.write("Aborted.\n");
39388
+ return;
39389
+ }
39390
+ }
39391
+ await ctx.execute({
39392
+ method: "DELETE",
39393
+ path: "/v1/aggregators/{id}",
39394
+ args,
39395
+ queryParamKeys: []
39315
39396
  });
39316
39397
  });
39317
39398
  }
39318
39399
 
39319
- // build/commands/generated/companies.js
39320
- function registerCompaniesCommands(parent) {
39321
- const resource = parent.command("companies").description("Manage companies");
39322
- resource.command("list").description(`List all companies accessible to the current authentication token. A company represents an organizational unit.`).addHelpText("after", `
39400
+ // build/commands/generated/aggregators-usage.js
39401
+ function registerAggregators_UsageCommands(parent) {
39402
+ const resource = parent.command("aggregators-usage").description("Manage aggregators > usage");
39403
+ resource.command("get-aggregator-usage").description(`Retrieve a usage row for an aggregator. Use the timeseries, group-by-customer or events endpoints to query metering data.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
39323
39404
  Examples:
39324
- hyperline companies list`).action(async (_opts) => {
39405
+ hyperline aggregators-usage get-aggregator-usage --id <id>`).action(async (opts) => {
39325
39406
  const ctx = resource.parent?.opts()._ctx;
39326
39407
  if (!ctx) {
39327
39408
  process.stderr.write("Error: Not authenticated\n");
39328
39409
  process.exit(1);
39329
39410
  }
39330
39411
  const args = {};
39412
+ if (opts.id !== void 0)
39413
+ args.id = opts.id;
39331
39414
  await ctx.execute({
39332
39415
  method: "GET",
39333
- path: "/v1/companies",
39416
+ path: "/v1/aggregators/{id}/usage",
39334
39417
  args,
39335
39418
  queryParamKeys: []
39336
39419
  });
39337
39420
  });
39338
- resource.command("create-company").description(`Create a company with an approved account owner. Company creation must be enabled.`).requiredOption("--name <value>", `Company name.`).requiredOption("--address <json>", `Address of the default invoicing entity`).addHelpText("after", `
39421
+ resource.command("get-aggregator-usage-timeseries").description(`Get client-wide usage for an aggregator bucketed by month/day/hour over a period.`).requiredOption("--id <value>", `id parameter`).option("--start-date <value>", `ISO-8601 date string.`).option("--end-date <value>", `ISO-8601 date string.`).option("--aggregator-filter-id <value>", `Optional aggregator filter ID. When set, restricts the result to events matching that filter's config. Must belong to the aggregator in the path.`).option("--group-by <value>", `Bucket size for the timeseries.`).addHelpText("after", `
39339
39422
  Examples:
39340
- hyperline companies create-company --name <name> --address <address>
39341
- hyperline companies create-company --name <name> --address <address> --output json`).action(async (opts) => {
39423
+ hyperline aggregators-usage get-aggregator-usage-timeseries --id <id>
39424
+ hyperline aggregators-usage get-aggregator-usage-timeseries --id <id> --start-date <start_date> --end-date <end_date>`).action(async (opts) => {
39342
39425
  const ctx = resource.parent?.opts()._ctx;
39343
39426
  if (!ctx) {
39344
39427
  process.stderr.write("Error: Not authenticated\n");
39345
39428
  process.exit(1);
39346
39429
  }
39347
39430
  const args = {};
39348
- if (opts.name !== void 0)
39349
- args.name = opts.name;
39350
- if (opts.address !== void 0)
39351
- args.address = JSON.parse(opts.address);
39431
+ if (opts.id !== void 0)
39432
+ args.id = opts.id;
39433
+ if (opts.startDate !== void 0)
39434
+ args.start_date = opts.startDate;
39435
+ if (opts.endDate !== void 0)
39436
+ args.end_date = opts.endDate;
39437
+ if (opts.aggregatorFilterId !== void 0)
39438
+ args.aggregator_filter_id = opts.aggregatorFilterId;
39439
+ if (opts.groupBy !== void 0)
39440
+ args.group_by = opts.groupBy;
39352
39441
  await ctx.execute({
39353
- method: "POST",
39354
- path: "/v1/companies",
39442
+ method: "GET",
39443
+ path: "/v1/aggregators/{id}/usage/timeseries",
39355
39444
  args,
39356
- queryParamKeys: []
39445
+ queryParamKeys: [
39446
+ "start_date",
39447
+ "end_date",
39448
+ "aggregator_filter_id",
39449
+ "group_by"
39450
+ ]
39451
+ });
39452
+ });
39453
+ resource.command("get-aggregator-usage-group-by-customer").description(`Per-customer total usage for an aggregator over a period, ranked by total. Paginated with take/skip.`).requiredOption("--id <value>", `id parameter`).option("--start-date <value>", `ISO-8601 date string.`).option("--end-date <value>", `ISO-8601 date string.`).option("--aggregator-filter-id <value>", `Optional aggregator filter ID. When set, restricts the result to events matching that filter's config. Must belong to the aggregator in the path.`).option("--take <number>", `take`).option("--skip <number>", `skip`).addHelpText("after", `
39454
+ Examples:
39455
+ hyperline aggregators-usage get-aggregator-usage-group-by-customer --id <id>
39456
+ hyperline aggregators-usage get-aggregator-usage-group-by-customer --id <id> --start-date <start_date> --end-date <end_date>`).action(async (opts) => {
39457
+ const ctx = resource.parent?.opts()._ctx;
39458
+ if (!ctx) {
39459
+ process.stderr.write("Error: Not authenticated\n");
39460
+ process.exit(1);
39461
+ }
39462
+ const args = {};
39463
+ if (opts.id !== void 0)
39464
+ args.id = opts.id;
39465
+ if (opts.startDate !== void 0)
39466
+ args.start_date = opts.startDate;
39467
+ if (opts.endDate !== void 0)
39468
+ args.end_date = opts.endDate;
39469
+ if (opts.aggregatorFilterId !== void 0)
39470
+ args.aggregator_filter_id = opts.aggregatorFilterId;
39471
+ if (opts.take !== void 0)
39472
+ args.take = Number(opts.take);
39473
+ if (opts.skip !== void 0)
39474
+ args.skip = Number(opts.skip);
39475
+ await ctx.execute({
39476
+ method: "GET",
39477
+ path: "/v1/aggregators/{id}/usage/group-by-customer",
39478
+ args,
39479
+ queryParamKeys: [
39480
+ "start_date",
39481
+ "end_date",
39482
+ "aggregator_filter_id",
39483
+ "take",
39484
+ "skip"
39485
+ ]
39486
+ });
39487
+ });
39488
+ resource.command("get-aggregator-usage-events").description(`List raw billable events for an aggregator across every customer of the client. Paginated with take/skip.`).requiredOption("--id <value>", `id parameter`).option("--start-date <value>", `ISO-8601 date string.`).option("--end-date <value>", `ISO-8601 date string.`).option("--aggregator-filter-id <value>", `Optional aggregator filter ID. When set, restricts the result to events matching that filter's config. Must belong to the aggregator in the path.`).option("--take <number>", `take`).option("--skip <number>", `skip`).addHelpText("after", `
39489
+ Examples:
39490
+ hyperline aggregators-usage get-aggregator-usage-events --id <id>
39491
+ hyperline aggregators-usage get-aggregator-usage-events --id <id> --start-date <start_date> --end-date <end_date>`).action(async (opts) => {
39492
+ const ctx = resource.parent?.opts()._ctx;
39493
+ if (!ctx) {
39494
+ process.stderr.write("Error: Not authenticated\n");
39495
+ process.exit(1);
39496
+ }
39497
+ const args = {};
39498
+ if (opts.id !== void 0)
39499
+ args.id = opts.id;
39500
+ if (opts.startDate !== void 0)
39501
+ args.start_date = opts.startDate;
39502
+ if (opts.endDate !== void 0)
39503
+ args.end_date = opts.endDate;
39504
+ if (opts.aggregatorFilterId !== void 0)
39505
+ args.aggregator_filter_id = opts.aggregatorFilterId;
39506
+ if (opts.take !== void 0)
39507
+ args.take = Number(opts.take);
39508
+ if (opts.skip !== void 0)
39509
+ args.skip = Number(opts.skip);
39510
+ await ctx.execute({
39511
+ method: "GET",
39512
+ path: "/v1/aggregators/{id}/usage/events",
39513
+ args,
39514
+ queryParamKeys: [
39515
+ "start_date",
39516
+ "end_date",
39517
+ "aggregator_filter_id",
39518
+ "take",
39519
+ "skip"
39520
+ ]
39357
39521
  });
39358
39522
  });
39359
39523
  }
39360
39524
 
39361
- // build/commands/generated/coupons.js
39362
- function registerCouponsCommands(parent) {
39363
- const resource = parent.command("coupons").description("Manage coupons");
39364
- resource.command("list").description(`List all coupons with pagination (take/skip). Coupons define discount rules (percentage or fixed amount) that can be applied to subscriptions or invoices.`).option("--take <number>", `take`).option("--skip <number>", `skip`).addHelpText("after", `
39525
+ // build/commands/generated/ai-billing.js
39526
+ function registerAi_BillingCommands(parent) {
39527
+ const resource = parent.command("ai-billing").description("Manage ai > billing");
39528
+ 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
+
39530
+ - wallet: Charges a monetary wallet.
39531
+ - credits: Consumes a credit balance.
39532
+ - windows: Meters weighted units against rolling allowances.`).option("--take <number>", `take`).option("--skip <number>", `skip`).addHelpText("after", `
39365
39533
  Examples:
39366
- hyperline coupons list
39367
- hyperline coupons list --take <take>`).action(async (opts) => {
39534
+ hyperline ai-billing list-agent-plans
39535
+ hyperline ai-billing list-agent-plans --mode <mode> --take <take>`).action(async (opts) => {
39368
39536
  const ctx = resource.parent?.opts()._ctx;
39369
39537
  if (!ctx) {
39370
39538
  process.stderr.write("Error: Not authenticated\n");
39371
39539
  process.exit(1);
39372
39540
  }
39373
39541
  const args = {};
39542
+ if (opts.mode !== void 0)
39543
+ args.mode = opts.mode;
39374
39544
  if (opts.take !== void 0)
39375
39545
  args.take = Number(opts.take);
39376
39546
  if (opts.skip !== void 0)
39377
39547
  args.skip = Number(opts.skip);
39378
39548
  await ctx.execute({
39379
39549
  method: "GET",
39380
- path: "/v1/coupons",
39550
+ path: "/v1/ai/billing/plans",
39381
39551
  args,
39382
- queryParamKeys: ["take", "skip"]
39552
+ queryParamKeys: ["mode", "take", "skip"]
39383
39553
  });
39384
39554
  });
39385
- 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>", `List of product IDs the coupon can be applied to. If empty, the coupon can be applied to any product.`).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.`).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", `
39555
+ resource.command("create-agent-plan").description(`Create an AI agent billing plan: name, billing mode (wallet/credits/windows), rate card reference, allowance windows, markups, per-seat credit grants and overage stance. Past-limit usage is priced EITHER by overage_markup_percent over the base rates OR by overage_rate_card_id, a currency rate card whose own rates are the overage price \u2014 never both. Metered overage mints the plan's invoice container.`).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.
39556
+
39557
+ - refuse: Rejects the call that crosses the boundary without deducting usage.
39558
+ - 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.
39559
+
39560
+ - calendar_month: Settles at the end of each UTC calendar month.`).requiredOption("--mode <value>", `Billing mode.
39561
+
39562
+ - wallet: Charges a monetary wallet.
39563
+ - credits: Consumes a credit balance.
39564
+ - windows: Meters weighted units against rolling allowances.`).addHelpText("after", `
39386
39565
  Examples:
39387
- hyperline coupons create --name <name> --type <type>
39388
- hyperline coupons create --name <name> --type <type> --description <description> --expiration-date <expiration_date>
39389
- hyperline coupons create --name <name> --type <type> --output json`).action(async (opts) => {
39566
+ hyperline ai-billing create-agent-plan --name <name> --mode <mode>
39567
+ hyperline ai-billing create-agent-plan --name <name> --mode <mode> --rate-card-id <rate_card_id> --overage-mode <overage_mode>
39568
+ hyperline ai-billing create-agent-plan --name <name> --mode <mode> --output json`).action(async (opts) => {
39390
39569
  const ctx = resource.parent?.opts()._ctx;
39391
39570
  if (!ctx) {
39392
39571
  process.stderr.write("Error: Not authenticated\n");
@@ -39395,105 +39574,83 @@ Examples:
39395
39574
  const args = {};
39396
39575
  if (opts.name !== void 0)
39397
39576
  args.name = opts.name;
39398
- if (opts.description !== void 0)
39399
- args.description = opts.description;
39400
- if (opts.expirationDate !== void 0)
39401
- args.expiration_date = opts.expirationDate;
39402
- if (opts.repeat !== void 0)
39403
- args.repeat = opts.repeat;
39404
- if (opts.type !== void 0)
39405
- args.type = opts.type;
39406
- if (opts.currency !== void 0)
39407
- args.currency = opts.currency;
39408
- if (opts.redemptionLimit !== void 0)
39409
- args.redemption_limit = Number(opts.redemptionLimit);
39410
- if (opts.discountAmount !== void 0)
39411
- args.discount_amount = Number(opts.discountAmount);
39412
- if (opts.discountPercent !== void 0)
39413
- args.discount_percent = Number(opts.discountPercent);
39414
- if (opts.productIds !== void 0)
39415
- args.product_ids = JSON.parse(opts.productIds);
39416
- if (opts.duration !== void 0)
39417
- args.duration = JSON.parse(opts.duration);
39577
+ if (opts.rateCardId !== void 0)
39578
+ args.rate_card_id = opts.rateCardId;
39579
+ if (opts.overageMode !== void 0)
39580
+ args.overage_mode = opts.overageMode;
39581
+ if (opts.markupPercent !== void 0)
39582
+ args.markup_percent = opts.markupPercent;
39583
+ if (opts.overageMarkupPercent !== void 0)
39584
+ args.overage_markup_percent = opts.overageMarkupPercent;
39585
+ if (opts.overageRateCardId !== void 0)
39586
+ args.overage_rate_card_id = opts.overageRateCardId;
39587
+ if (opts.perSeatCredits !== void 0)
39588
+ args.per_seat_credits = opts.perSeatCredits;
39589
+ if (opts.settlementSchedule !== void 0)
39590
+ args.settlement_schedule = opts.settlementSchedule;
39591
+ if (opts.mode !== void 0)
39592
+ args.mode = opts.mode;
39593
+ if (opts.settlementIntervalMinutes !== void 0)
39594
+ args.settlement_interval_minutes = Number(opts.settlementIntervalMinutes);
39595
+ if (opts.grantRolloverEnabled !== void 0)
39596
+ args.grant_rollover_enabled = true;
39597
+ if (opts.windows !== void 0)
39598
+ args.windows = JSON.parse(opts.windows);
39418
39599
  await ctx.execute({
39419
39600
  method: "POST",
39420
- path: "/v1/coupons",
39601
+ path: "/v1/ai/billing/plans",
39421
39602
  args,
39422
39603
  queryParamKeys: []
39423
39604
  });
39424
39605
  });
39425
- resource.command("get").description(`Retrieve a specific coupon by ID including its discount configuration, redemption count, and deletion status.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
39606
+ 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", `
39426
39607
  Examples:
39427
- hyperline coupons get --id <id>`).action(async (opts) => {
39608
+ hyperline ai-billing get-agent-default-plan`).action(async (_opts) => {
39428
39609
  const ctx = resource.parent?.opts()._ctx;
39429
39610
  if (!ctx) {
39430
39611
  process.stderr.write("Error: Not authenticated\n");
39431
39612
  process.exit(1);
39432
39613
  }
39433
39614
  const args = {};
39434
- if (opts.id !== void 0)
39435
- args.id = opts.id;
39436
39615
  await ctx.execute({
39437
39616
  method: "GET",
39438
- path: "/v1/coupons/{id}",
39617
+ path: "/v1/ai/billing/plans/default",
39439
39618
  args,
39440
39619
  queryParamKeys: []
39441
39620
  });
39442
39621
  });
39443
- 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>", `List of product IDs the coupon can be applied to. If empty, the coupon can be applied to any product.`).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.`).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", `
39622
+ 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", `
39444
39623
  Examples:
39445
- hyperline coupons update --id <id> --name <name> --type <type>
39446
- hyperline coupons update --id <id> --name <name> --type <type> --description <description> --expiration-date <expiration_date>
39447
- hyperline coupons update --id <id> --name <name> --type <type> --output json`).action(async (opts) => {
39624
+ hyperline ai-billing set-agent-default-plan --plan-id <plan_id>
39625
+ hyperline ai-billing set-agent-default-plan --plan-id <plan_id> --auto-apply
39626
+ hyperline ai-billing set-agent-default-plan --plan-id <plan_id> --output json`).action(async (opts) => {
39448
39627
  const ctx = resource.parent?.opts()._ctx;
39449
39628
  if (!ctx) {
39450
39629
  process.stderr.write("Error: Not authenticated\n");
39451
39630
  process.exit(1);
39452
39631
  }
39453
39632
  const args = {};
39454
- if (opts.id !== void 0)
39455
- args.id = opts.id;
39456
- if (opts.name !== void 0)
39457
- args.name = opts.name;
39458
- if (opts.description !== void 0)
39459
- args.description = opts.description;
39460
- if (opts.expirationDate !== void 0)
39461
- args.expiration_date = opts.expirationDate;
39462
- if (opts.repeat !== void 0)
39463
- args.repeat = opts.repeat;
39464
- if (opts.type !== void 0)
39465
- args.type = opts.type;
39466
- if (opts.currency !== void 0)
39467
- args.currency = opts.currency;
39468
- if (opts.redemptionLimit !== void 0)
39469
- args.redemption_limit = Number(opts.redemptionLimit);
39470
- if (opts.discountAmount !== void 0)
39471
- args.discount_amount = Number(opts.discountAmount);
39472
- if (opts.discountPercent !== void 0)
39473
- args.discount_percent = Number(opts.discountPercent);
39474
- if (opts.productIds !== void 0)
39475
- args.product_ids = JSON.parse(opts.productIds);
39476
- if (opts.duration !== void 0)
39477
- args.duration = JSON.parse(opts.duration);
39633
+ if (opts.planId !== void 0)
39634
+ args.plan_id = opts.planId;
39635
+ if (opts.autoApply !== void 0)
39636
+ args.auto_apply = true;
39478
39637
  await ctx.execute({
39479
39638
  method: "PUT",
39480
- path: "/v1/coupons/{id}",
39639
+ path: "/v1/ai/billing/plans/default",
39481
39640
  args,
39482
39641
  queryParamKeys: []
39483
39642
  });
39484
39643
  });
39485
- resource.command("delete").description(`Permanently delete a coupon by ID. This cannot be undone.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
39644
+ 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", `
39486
39645
  Examples:
39487
- hyperline coupons delete --id <id>
39488
- hyperline coupons delete --id <id> --output json`).action(async (opts) => {
39646
+ hyperline ai-billing clear-agent-default-plan
39647
+ hyperline ai-billing clear-agent-default-plan --output json`).action(async (opts) => {
39489
39648
  const ctx = resource.parent?.opts()._ctx;
39490
39649
  if (!ctx) {
39491
39650
  process.stderr.write("Error: Not authenticated\n");
39492
39651
  process.exit(1);
39493
39652
  }
39494
39653
  const args = {};
39495
- if (opts.id !== void 0)
39496
- args.id = opts.id;
39497
39654
  if (!opts.yes) {
39498
39655
  const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
39499
39656
  if (!confirmed) {
@@ -39503,39 +39660,1107 @@ Examples:
39503
39660
  }
39504
39661
  await ctx.execute({
39505
39662
  method: "DELETE",
39506
- path: "/v1/coupons/{id}",
39663
+ path: "/v1/ai/billing/plans/default",
39507
39664
  args,
39508
39665
  queryParamKeys: []
39509
39666
  });
39510
39667
  });
39511
- }
39512
-
39513
- // build/commands/generated/coupons-promotion-codes.js
39514
- function registerCoupons_Promotion_CodesCommands(parent) {
39515
- const resource = parent.command("coupons-promotion-codes").description("Manage coupons > promotion codes");
39516
- resource.command("list-promotion-codes").description(`List promotion codes with optional filter by coupon_id. Promotion codes are shareable codes that reference a coupon. Paginated with take/skip.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--coupon-id <value>", `coupon_id`).option("--coupon-id.not <value>", `coupon_id__not`).option("--coupon-id.is-null <value>", `coupon_id__isNull`).option("--coupon-id.is-not-null <value>", `coupon_id__isNotNull`).option("--coupon-id.equals <value>", `coupon_id__equals`).option("--coupon-id.contains <value>", `coupon_id__contains`).option("--coupon-id.starts-with <value>", `coupon_id__startsWith`).option("--coupon-id.end-with <value>", `coupon_id__endWith`).addHelpText("after", `
39668
+ 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", `
39517
39669
  Examples:
39518
- hyperline coupons-promotion-codes list-promotion-codes
39519
- hyperline coupons-promotion-codes list-promotion-codes --take <take> --coupon-id <coupon_id>`).action(async (opts) => {
39670
+ hyperline ai-billing get-agent-plan --id <id>`).action(async (opts) => {
39520
39671
  const ctx = resource.parent?.opts()._ctx;
39521
39672
  if (!ctx) {
39522
39673
  process.stderr.write("Error: Not authenticated\n");
39523
39674
  process.exit(1);
39524
39675
  }
39525
39676
  const args = {};
39526
- if (opts.couponId !== void 0)
39527
- args.coupon_id = opts.couponId;
39528
- if (opts["couponId.not"] !== void 0)
39529
- args.coupon_id__not = opts["couponId.not"];
39530
- if (opts["couponId.isNull"] !== void 0)
39531
- args.coupon_id__isNull = opts["couponId.isNull"];
39532
- if (opts["couponId.isNotNull"] !== void 0)
39533
- args.coupon_id__isNotNull = opts["couponId.isNotNull"];
39534
- if (opts["couponId.equals"] !== void 0)
39535
- args.coupon_id__equals = opts["couponId.equals"];
39536
- if (opts["couponId.contains"] !== void 0)
39537
- args.coupon_id__contains = opts["couponId.contains"];
39538
- if (opts["couponId.startsWith"] !== void 0)
39677
+ if (opts.id !== void 0)
39678
+ args.id = opts.id;
39679
+ await ctx.execute({
39680
+ method: "GET",
39681
+ path: "/v1/ai/billing/plans/{id}",
39682
+ args,
39683
+ queryParamKeys: []
39684
+ });
39685
+ });
39686
+ 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.
39687
+
39688
+ - refuse: Rejects the call that crosses the boundary without deducting usage.
39689
+ - 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.
39690
+
39691
+ - calendar_month: Settles at the end of each UTC calendar month.`).addHelpText("after", `
39692
+ Examples:
39693
+ hyperline ai-billing replace-agent-plan --id <id> --name <name>
39694
+ hyperline ai-billing replace-agent-plan --id <id> --name <name> --rate-card-id <rate_card_id> --overage-mode <overage_mode>
39695
+ hyperline ai-billing replace-agent-plan --id <id> --name <name> --output json`).action(async (opts) => {
39696
+ const ctx = resource.parent?.opts()._ctx;
39697
+ if (!ctx) {
39698
+ process.stderr.write("Error: Not authenticated\n");
39699
+ process.exit(1);
39700
+ }
39701
+ const args = {};
39702
+ if (opts.id !== void 0)
39703
+ args.id = opts.id;
39704
+ if (opts.name !== void 0)
39705
+ args.name = opts.name;
39706
+ if (opts.rateCardId !== void 0)
39707
+ args.rate_card_id = opts.rateCardId;
39708
+ if (opts.overageMode !== void 0)
39709
+ args.overage_mode = opts.overageMode;
39710
+ if (opts.markupPercent !== void 0)
39711
+ args.markup_percent = opts.markupPercent;
39712
+ if (opts.overageMarkupPercent !== void 0)
39713
+ args.overage_markup_percent = opts.overageMarkupPercent;
39714
+ if (opts.overageRateCardId !== void 0)
39715
+ args.overage_rate_card_id = opts.overageRateCardId;
39716
+ if (opts.perSeatCredits !== void 0)
39717
+ args.per_seat_credits = opts.perSeatCredits;
39718
+ if (opts.settlementSchedule !== void 0)
39719
+ args.settlement_schedule = opts.settlementSchedule;
39720
+ if (opts.settlementIntervalMinutes !== void 0)
39721
+ args.settlement_interval_minutes = Number(opts.settlementIntervalMinutes);
39722
+ if (opts.grantRolloverEnabled !== void 0)
39723
+ args.grant_rollover_enabled = true;
39724
+ if (opts.windows !== void 0)
39725
+ args.windows = JSON.parse(opts.windows);
39726
+ await ctx.execute({
39727
+ method: "PUT",
39728
+ path: "/v1/ai/billing/plans/{id}",
39729
+ args,
39730
+ queryParamKeys: []
39731
+ });
39732
+ });
39733
+ 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", `
39734
+ Examples:
39735
+ hyperline ai-billing delete-agent-plan --id <id>
39736
+ hyperline ai-billing delete-agent-plan --id <id> --output json`).action(async (opts) => {
39737
+ const ctx = resource.parent?.opts()._ctx;
39738
+ if (!ctx) {
39739
+ process.stderr.write("Error: Not authenticated\n");
39740
+ process.exit(1);
39741
+ }
39742
+ const args = {};
39743
+ if (opts.id !== void 0)
39744
+ args.id = opts.id;
39745
+ if (!opts.yes) {
39746
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
39747
+ if (!confirmed) {
39748
+ process.stdout.write("Aborted.\n");
39749
+ return;
39750
+ }
39751
+ }
39752
+ await ctx.execute({
39753
+ method: "DELETE",
39754
+ path: "/v1/ai/billing/plans/{id}",
39755
+ args,
39756
+ queryParamKeys: []
39757
+ });
39758
+ });
39759
+ resource.command("list-agent-rate-cards").description(`List AI rate cards: named pricing row sets in credits, window units or currency. Shows what plans/policies/products depend on each. Filter by denomination, currency or name search; paginated with take/skip.`).option("--denomination <value>", `Unit in which rate-card prices are expressed.
39760
+
39761
+ - credits: Credit counts.
39762
+ - units: Weighted rolling-allowance units.
39763
+ - currency: Major units of the specified currency.`).option("--currency <value>", `Currency code. See [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217#List_of_ISO_4217_currency_codes).`).option("--search <value>", `search`).option("--take <number>", `take`).option("--skip <number>", `skip`).addHelpText("after", `
39764
+ Examples:
39765
+ hyperline ai-billing list-agent-rate-cards
39766
+ hyperline ai-billing list-agent-rate-cards --denomination <denomination> --currency <currency>`).action(async (opts) => {
39767
+ const ctx = resource.parent?.opts()._ctx;
39768
+ if (!ctx) {
39769
+ process.stderr.write("Error: Not authenticated\n");
39770
+ process.exit(1);
39771
+ }
39772
+ const args = {};
39773
+ if (opts.denomination !== void 0)
39774
+ args.denomination = opts.denomination;
39775
+ if (opts.currency !== void 0)
39776
+ args.currency = opts.currency;
39777
+ if (opts.search !== void 0)
39778
+ args.search = opts.search;
39779
+ if (opts.take !== void 0)
39780
+ args.take = Number(opts.take);
39781
+ if (opts.skip !== void 0)
39782
+ args.skip = Number(opts.skip);
39783
+ await ctx.execute({
39784
+ method: "GET",
39785
+ path: "/v1/ai/billing/rate-cards",
39786
+ args,
39787
+ queryParamKeys: ["denomination", "currency", "search", "take", "skip"]
39788
+ });
39789
+ });
39790
+ resource.command("create-agent-rate-card").description(`Create an AI rate card with llm rows (per-1M input/output token rates) and item rows (per-unit rates), a denomination (credits/units/currency) and an optional USD fallback conversion.`).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.`).requiredOption("--denomination <value>", `Unit in which rate-card prices are expressed.
39791
+
39792
+ - credits: Credit counts.
39793
+ - units: Weighted rolling-allowance units.
39794
+ - currency: Major units of the specified currency.`).option("--currency <value>", `ISO 4217 currency code for monetary values. Null for counts or historical amounts without recorded currency.`).addHelpText("after", `
39795
+ Examples:
39796
+ hyperline ai-billing create-agent-rate-card --name <name> --rows <rows> --denomination <denomination>
39797
+ hyperline ai-billing create-agent-rate-card --name <name> --rows <rows> --denomination <denomination> --fallback-per-usd <fallback_per_usd> --currency <currency>
39798
+ hyperline ai-billing create-agent-rate-card --name <name> --rows <rows> --denomination <denomination> --output json`).action(async (opts) => {
39799
+ const ctx = resource.parent?.opts()._ctx;
39800
+ if (!ctx) {
39801
+ process.stderr.write("Error: Not authenticated\n");
39802
+ process.exit(1);
39803
+ }
39804
+ const args = {};
39805
+ if (opts.name !== void 0)
39806
+ args.name = opts.name;
39807
+ if (opts.fallbackPerUsd !== void 0)
39808
+ args.fallback_per_usd = opts.fallbackPerUsd;
39809
+ if (opts.denomination !== void 0)
39810
+ args.denomination = opts.denomination;
39811
+ if (opts.currency !== void 0)
39812
+ args.currency = opts.currency;
39813
+ if (opts.rows !== void 0)
39814
+ args.rows = JSON.parse(opts.rows);
39815
+ await ctx.execute({
39816
+ method: "POST",
39817
+ path: "/v1/ai/billing/rate-cards",
39818
+ args,
39819
+ queryParamKeys: []
39820
+ });
39821
+ });
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("--id <value>", `id parameter`).addHelpText("after", `
39823
+ Examples:
39824
+ hyperline ai-billing get-agent-rate-card --id <id>`).action(async (opts) => {
39825
+ const ctx = resource.parent?.opts()._ctx;
39826
+ if (!ctx) {
39827
+ process.stderr.write("Error: Not authenticated\n");
39828
+ process.exit(1);
39829
+ }
39830
+ const args = {};
39831
+ if (opts.id !== void 0)
39832
+ args.id = opts.id;
39833
+ await ctx.execute({
39834
+ method: "GET",
39835
+ path: "/v1/ai/billing/rate-cards/{id}",
39836
+ args,
39837
+ queryParamKeys: []
39838
+ });
39839
+ });
39840
+ 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
+ Examples:
39842
+ hyperline ai-billing replace-agent-rate-card --id <id> --name <name> --rows <rows>
39843
+ hyperline ai-billing replace-agent-rate-card --id <id> --name <name> --rows <rows> --fallback-per-usd <fallback_per_usd>
39844
+ hyperline ai-billing replace-agent-rate-card --id <id> --name <name> --rows <rows> --output json`).action(async (opts) => {
39845
+ const ctx = resource.parent?.opts()._ctx;
39846
+ if (!ctx) {
39847
+ process.stderr.write("Error: Not authenticated\n");
39848
+ process.exit(1);
39849
+ }
39850
+ const args = {};
39851
+ if (opts.id !== void 0)
39852
+ args.id = opts.id;
39853
+ if (opts.name !== void 0)
39854
+ args.name = opts.name;
39855
+ if (opts.fallbackPerUsd !== void 0)
39856
+ args.fallback_per_usd = opts.fallbackPerUsd;
39857
+ if (opts.rows !== void 0)
39858
+ args.rows = JSON.parse(opts.rows);
39859
+ await ctx.execute({
39860
+ method: "PUT",
39861
+ path: "/v1/ai/billing/rate-cards/{id}",
39862
+ args,
39863
+ queryParamKeys: []
39864
+ });
39865
+ });
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("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
39867
+ Examples:
39868
+ hyperline ai-billing delete-agent-rate-card --id <id>
39869
+ hyperline ai-billing delete-agent-rate-card --id <id> --output json`).action(async (opts) => {
39870
+ const ctx = resource.parent?.opts()._ctx;
39871
+ if (!ctx) {
39872
+ process.stderr.write("Error: Not authenticated\n");
39873
+ process.exit(1);
39874
+ }
39875
+ const args = {};
39876
+ if (opts.id !== void 0)
39877
+ args.id = opts.id;
39878
+ if (!opts.yes) {
39879
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
39880
+ if (!confirmed) {
39881
+ process.stdout.write("Aborted.\n");
39882
+ return;
39883
+ }
39884
+ }
39885
+ await ctx.execute({
39886
+ method: "DELETE",
39887
+ path: "/v1/ai/billing/rate-cards/{id}",
39888
+ args,
39889
+ queryParamKeys: []
39890
+ });
39891
+ });
39892
+ 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>", `Maximum records to return; omit for the legacy collection (up to 1000 records).`).option("--skip <number>", `Number of records to skip.`).addHelpText("after", `
39893
+ Examples:
39894
+ hyperline ai-billing list-agent-customer-policies --id <id>
39895
+ hyperline ai-billing list-agent-customer-policies --id <id> --take <take>`).action(async (opts) => {
39896
+ const ctx = resource.parent?.opts()._ctx;
39897
+ if (!ctx) {
39898
+ process.stderr.write("Error: Not authenticated\n");
39899
+ process.exit(1);
39900
+ }
39901
+ const args = {};
39902
+ if (opts.id !== void 0)
39903
+ args.id = opts.id;
39904
+ if (opts.take !== void 0)
39905
+ args.take = Number(opts.take);
39906
+ if (opts.skip !== void 0)
39907
+ args.skip = Number(opts.skip);
39908
+ await ctx.execute({
39909
+ method: "GET",
39910
+ path: "/v1/ai/billing/customers/{id}/policies",
39911
+ args,
39912
+ queryParamKeys: ["take", "skip"]
39913
+ });
39914
+ });
39915
+ 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", `
39916
+ Examples:
39917
+ hyperline ai-billing get-default-customer-billing-policy --id <id>`).action(async (opts) => {
39918
+ const ctx = resource.parent?.opts()._ctx;
39919
+ if (!ctx) {
39920
+ process.stderr.write("Error: Not authenticated\n");
39921
+ process.exit(1);
39922
+ }
39923
+ const args = {};
39924
+ if (opts.id !== void 0)
39925
+ args.id = opts.id;
39926
+ await ctx.execute({
39927
+ method: "GET",
39928
+ path: "/v1/ai/billing/customers/{id}/policies/default",
39929
+ args,
39930
+ queryParamKeys: []
39931
+ });
39932
+ });
39933
+ 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.
39934
+
39935
+ - wallet: Charges a monetary wallet.
39936
+ - credits: Consumes a credit balance.
39937
+ - 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.
39938
+
39939
+ - refuse: Rejects the call that crosses the boundary without deducting usage.
39940
+ - 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.
39941
+
39942
+ - 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", `
39943
+ Examples:
39944
+ hyperline ai-billing upsert-default-customer-billing-policy --id <id> --mode <mode> --blocked
39945
+ hyperline ai-billing upsert-default-customer-billing-policy --id <id> --mode <mode> --blocked --wallet-id <wallet_id> --credit-product-id <credit_product_id>
39946
+ hyperline ai-billing upsert-default-customer-billing-policy --id <id> --mode <mode> --blocked --output json`).action(async (opts) => {
39947
+ const ctx = resource.parent?.opts()._ctx;
39948
+ if (!ctx) {
39949
+ process.stderr.write("Error: Not authenticated\n");
39950
+ process.exit(1);
39951
+ }
39952
+ const args = {};
39953
+ if (opts.id !== void 0)
39954
+ args.id = opts.id;
39955
+ if (opts.mode !== void 0)
39956
+ args.mode = opts.mode;
39957
+ if (opts.walletId !== void 0)
39958
+ args.wallet_id = opts.walletId;
39959
+ if (opts.creditProductId !== void 0)
39960
+ args.credit_product_id = opts.creditProductId;
39961
+ if (opts.markupPercent !== void 0)
39962
+ args.markup_percent = opts.markupPercent;
39963
+ if (opts.overageMode !== void 0)
39964
+ args.overage_mode = opts.overageMode;
39965
+ if (opts.overageMarkupPercent !== void 0)
39966
+ args.overage_markup_percent = opts.overageMarkupPercent;
39967
+ if (opts.overageRateCardId !== void 0)
39968
+ args.overage_rate_card_id = opts.overageRateCardId;
39969
+ if (opts.overageWalletId !== void 0)
39970
+ args.overage_wallet_id = opts.overageWalletId;
39971
+ if (opts.floor !== void 0)
39972
+ args.floor = opts.floor;
39973
+ if (opts.settlementSchedule !== void 0)
39974
+ args.settlement_schedule = opts.settlementSchedule;
39975
+ if (opts.rateCardId !== void 0)
39976
+ args.rate_card_id = opts.rateCardId;
39977
+ if (opts.planId !== void 0)
39978
+ args.plan_id = opts.planId;
39979
+ if (opts.settlementIntervalMinutes !== void 0)
39980
+ args.settlement_interval_minutes = Number(opts.settlementIntervalMinutes);
39981
+ if (opts.blocked !== void 0)
39982
+ args.blocked = true;
39983
+ if (opts.windows !== void 0)
39984
+ args.windows = JSON.parse(opts.windows);
39985
+ await ctx.execute({
39986
+ method: "PUT",
39987
+ path: "/v1/ai/billing/customers/{id}/policies/default",
39988
+ args,
39989
+ queryParamKeys: []
39990
+ });
39991
+ });
39992
+ 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", `
39993
+ Examples:
39994
+ hyperline ai-billing delete-default-customer-billing-policy --id <id>
39995
+ hyperline ai-billing delete-default-customer-billing-policy --id <id> --output json`).action(async (opts) => {
39996
+ const ctx = resource.parent?.opts()._ctx;
39997
+ if (!ctx) {
39998
+ process.stderr.write("Error: Not authenticated\n");
39999
+ process.exit(1);
40000
+ }
40001
+ const args = {};
40002
+ if (opts.id !== void 0)
40003
+ args.id = opts.id;
40004
+ if (!opts.yes) {
40005
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
40006
+ if (!confirmed) {
40007
+ process.stdout.write("Aborted.\n");
40008
+ return;
40009
+ }
40010
+ }
40011
+ await ctx.execute({
40012
+ method: "DELETE",
40013
+ path: "/v1/ai/billing/customers/{id}/policies/default",
40014
+ args,
40015
+ queryParamKeys: []
40016
+ });
40017
+ });
40018
+ 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", `
40019
+ Examples:
40020
+ hyperline ai-billing get-agent-customer-billing-policy --id <id> --agent-slug <agent_slug>`).action(async (opts) => {
40021
+ const ctx = resource.parent?.opts()._ctx;
40022
+ if (!ctx) {
40023
+ process.stderr.write("Error: Not authenticated\n");
40024
+ process.exit(1);
40025
+ }
40026
+ const args = {};
40027
+ if (opts.id !== void 0)
40028
+ args.id = opts.id;
40029
+ if (opts.agentSlug !== void 0)
40030
+ args.agent_slug = opts.agentSlug;
40031
+ await ctx.execute({
40032
+ method: "GET",
40033
+ path: "/v1/ai/billing/customers/{id}/policies/agents/{agent_slug}",
40034
+ args,
40035
+ queryParamKeys: []
40036
+ });
40037
+ });
40038
+ 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.
40039
+
40040
+ - wallet: Charges a monetary wallet.
40041
+ - credits: Consumes a credit balance.
40042
+ - 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.
40043
+
40044
+ - refuse: Rejects the call that crosses the boundary without deducting usage.
40045
+ - 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.
40046
+
40047
+ - 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", `
40048
+ Examples:
40049
+ hyperline ai-billing upsert-agent-customer-billing-policy --id <id> --agent-slug <agent_slug> --mode <mode> --blocked
40050
+ 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>
40051
+ hyperline ai-billing upsert-agent-customer-billing-policy --id <id> --agent-slug <agent_slug> --mode <mode> --blocked --output json`).action(async (opts) => {
40052
+ const ctx = resource.parent?.opts()._ctx;
40053
+ if (!ctx) {
40054
+ process.stderr.write("Error: Not authenticated\n");
40055
+ process.exit(1);
40056
+ }
40057
+ const args = {};
40058
+ if (opts.id !== void 0)
40059
+ args.id = opts.id;
40060
+ if (opts.agentSlug !== void 0)
40061
+ args.agent_slug = opts.agentSlug;
40062
+ if (opts.mode !== void 0)
40063
+ args.mode = opts.mode;
40064
+ if (opts.walletId !== void 0)
40065
+ args.wallet_id = opts.walletId;
40066
+ if (opts.creditProductId !== void 0)
40067
+ args.credit_product_id = opts.creditProductId;
40068
+ if (opts.markupPercent !== void 0)
40069
+ args.markup_percent = opts.markupPercent;
40070
+ if (opts.overageMode !== void 0)
40071
+ args.overage_mode = opts.overageMode;
40072
+ if (opts.overageMarkupPercent !== void 0)
40073
+ args.overage_markup_percent = opts.overageMarkupPercent;
40074
+ if (opts.overageRateCardId !== void 0)
40075
+ args.overage_rate_card_id = opts.overageRateCardId;
40076
+ if (opts.overageWalletId !== void 0)
40077
+ args.overage_wallet_id = opts.overageWalletId;
40078
+ if (opts.floor !== void 0)
40079
+ args.floor = opts.floor;
40080
+ if (opts.settlementSchedule !== void 0)
40081
+ args.settlement_schedule = opts.settlementSchedule;
40082
+ if (opts.rateCardId !== void 0)
40083
+ args.rate_card_id = opts.rateCardId;
40084
+ if (opts.planId !== void 0)
40085
+ args.plan_id = opts.planId;
40086
+ if (opts.settlementIntervalMinutes !== void 0)
40087
+ args.settlement_interval_minutes = Number(opts.settlementIntervalMinutes);
40088
+ if (opts.blocked !== void 0)
40089
+ args.blocked = true;
40090
+ if (opts.windows !== void 0)
40091
+ args.windows = JSON.parse(opts.windows);
40092
+ await ctx.execute({
40093
+ method: "PUT",
40094
+ path: "/v1/ai/billing/customers/{id}/policies/agents/{agent_slug}",
40095
+ args,
40096
+ queryParamKeys: []
40097
+ });
40098
+ });
40099
+ 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", `
40100
+ Examples:
40101
+ hyperline ai-billing delete-agent-customer-billing-policy --id <id> --agent-slug <agent_slug>
40102
+ hyperline ai-billing delete-agent-customer-billing-policy --id <id> --agent-slug <agent_slug> --output json`).action(async (opts) => {
40103
+ const ctx = resource.parent?.opts()._ctx;
40104
+ if (!ctx) {
40105
+ process.stderr.write("Error: Not authenticated\n");
40106
+ process.exit(1);
40107
+ }
40108
+ const args = {};
40109
+ if (opts.id !== void 0)
40110
+ args.id = opts.id;
40111
+ if (opts.agentSlug !== void 0)
40112
+ args.agent_slug = opts.agentSlug;
40113
+ if (!opts.yes) {
40114
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
40115
+ if (!confirmed) {
40116
+ process.stdout.write("Aborted.\n");
40117
+ return;
40118
+ }
40119
+ }
40120
+ await ctx.execute({
40121
+ method: "DELETE",
40122
+ path: "/v1/ai/billing/customers/{id}/policies/agents/{agent_slug}",
40123
+ args,
40124
+ queryParamKeys: []
40125
+ });
40126
+ });
40127
+ 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", `
40128
+ Examples:
40129
+ hyperline ai-billing apply-agent-default-plan --id <id>
40130
+ hyperline ai-billing apply-agent-default-plan --id <id> --output json`).action(async (opts) => {
40131
+ const ctx = resource.parent?.opts()._ctx;
40132
+ if (!ctx) {
40133
+ process.stderr.write("Error: Not authenticated\n");
40134
+ process.exit(1);
40135
+ }
40136
+ const args = {};
40137
+ if (opts.id !== void 0)
40138
+ args.id = opts.id;
40139
+ await ctx.execute({
40140
+ method: "POST",
40141
+ path: "/v1/ai/billing/customers/{id}/apply-default-plan",
40142
+ args,
40143
+ queryParamKeys: []
40144
+ });
40145
+ });
40146
+ 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", `
40147
+ Examples:
40148
+ hyperline ai-billing get-agent-customer-balance --id <id>
40149
+ hyperline ai-billing get-agent-customer-balance --id <id> --agent-slug <agent_slug>`).action(async (opts) => {
40150
+ const ctx = resource.parent?.opts()._ctx;
40151
+ if (!ctx) {
40152
+ process.stderr.write("Error: Not authenticated\n");
40153
+ process.exit(1);
40154
+ }
40155
+ const args = {};
40156
+ if (opts.id !== void 0)
40157
+ args.id = opts.id;
40158
+ if (opts.agentSlug !== void 0)
40159
+ args.agent_slug = opts.agentSlug;
40160
+ await ctx.execute({
40161
+ method: "GET",
40162
+ path: "/v1/ai/billing/customers/{id}/balance",
40163
+ args,
40164
+ queryParamKeys: ["agent_slug"]
40165
+ });
40166
+ });
40167
+ 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", `
40168
+ Examples:
40169
+ hyperline ai-billing reset-agent-customer-windows --id <id>
40170
+ hyperline ai-billing reset-agent-customer-windows --id <id> --agent-slug <agent_slug>
40171
+ hyperline ai-billing reset-agent-customer-windows --id <id> --output json`).action(async (opts) => {
40172
+ const ctx = resource.parent?.opts()._ctx;
40173
+ if (!ctx) {
40174
+ process.stderr.write("Error: Not authenticated\n");
40175
+ process.exit(1);
40176
+ }
40177
+ const args = {};
40178
+ if (opts.id !== void 0)
40179
+ args.id = opts.id;
40180
+ if (opts.agentSlug !== void 0)
40181
+ args.agent_slug = opts.agentSlug;
40182
+ await ctx.execute({
40183
+ method: "POST",
40184
+ path: "/v1/ai/billing/customers/{id}/windows/reset",
40185
+ args,
40186
+ queryParamKeys: ["agent_slug"]
40187
+ });
40188
+ });
40189
+ 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", `
40190
+ Examples:
40191
+ hyperline ai-billing list-agent-customer-consumption --id <id>
40192
+ hyperline ai-billing list-agent-customer-consumption --id <id> --agent-slug <agent_slug> --overage <overage>`).action(async (opts) => {
40193
+ const ctx = resource.parent?.opts()._ctx;
40194
+ if (!ctx) {
40195
+ process.stderr.write("Error: Not authenticated\n");
40196
+ process.exit(1);
40197
+ }
40198
+ const args = {};
40199
+ if (opts.id !== void 0)
40200
+ args.id = opts.id;
40201
+ if (opts.agentSlug !== void 0)
40202
+ args.agent_slug = opts.agentSlug;
40203
+ if (opts.overage !== void 0)
40204
+ args.overage = opts.overage;
40205
+ if (opts.from !== void 0)
40206
+ args.from = opts.from;
40207
+ if (opts.to !== void 0)
40208
+ args.to = opts.to;
40209
+ if (opts.take !== void 0)
40210
+ args.take = Number(opts.take);
40211
+ if (opts.skip !== void 0)
40212
+ args.skip = Number(opts.skip);
40213
+ await ctx.execute({
40214
+ method: "GET",
40215
+ path: "/v1/ai/billing/customers/{id}/consumption",
40216
+ args,
40217
+ queryParamKeys: ["agent_slug", "overage", "from", "to", "take", "skip"]
40218
+ });
40219
+ });
40220
+ 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", `
40221
+ Examples:
40222
+ hyperline ai-billing get-product-ai-rate-card --id <id>`).action(async (opts) => {
40223
+ const ctx = resource.parent?.opts()._ctx;
40224
+ if (!ctx) {
40225
+ process.stderr.write("Error: Not authenticated\n");
40226
+ process.exit(1);
40227
+ }
40228
+ const args = {};
40229
+ if (opts.id !== void 0)
40230
+ args.id = opts.id;
40231
+ await ctx.execute({
40232
+ method: "GET",
40233
+ path: "/v1/ai/billing/products/{id}/rate-card",
40234
+ args,
40235
+ queryParamKeys: []
40236
+ });
40237
+ });
40238
+ 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", `
40239
+ Examples:
40240
+ hyperline ai-billing set-product-ai-rate-card --id <id> --rate-card-id <rate_card_id>
40241
+ hyperline ai-billing set-product-ai-rate-card --id <id> --rate-card-id <rate_card_id> --output json`).action(async (opts) => {
40242
+ const ctx = resource.parent?.opts()._ctx;
40243
+ if (!ctx) {
40244
+ process.stderr.write("Error: Not authenticated\n");
40245
+ process.exit(1);
40246
+ }
40247
+ const args = {};
40248
+ if (opts.id !== void 0)
40249
+ args.id = opts.id;
40250
+ if (opts.rateCardId !== void 0)
40251
+ args.rate_card_id = opts.rateCardId;
40252
+ await ctx.execute({
40253
+ method: "PUT",
40254
+ path: "/v1/ai/billing/products/{id}/rate-card",
40255
+ args,
40256
+ queryParamKeys: []
40257
+ });
40258
+ });
40259
+ 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", `
40260
+ Examples:
40261
+ hyperline ai-billing clear-product-ai-rate-card --id <id>
40262
+ hyperline ai-billing clear-product-ai-rate-card --id <id> --output json`).action(async (opts) => {
40263
+ const ctx = resource.parent?.opts()._ctx;
40264
+ if (!ctx) {
40265
+ process.stderr.write("Error: Not authenticated\n");
40266
+ process.exit(1);
40267
+ }
40268
+ const args = {};
40269
+ if (opts.id !== void 0)
40270
+ args.id = opts.id;
40271
+ if (!opts.yes) {
40272
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
40273
+ if (!confirmed) {
40274
+ process.stdout.write("Aborted.\n");
40275
+ return;
40276
+ }
40277
+ }
40278
+ await ctx.execute({
40279
+ method: "DELETE",
40280
+ path: "/v1/ai/billing/products/{id}/rate-card",
40281
+ args,
40282
+ queryParamKeys: []
40283
+ });
40284
+ });
40285
+ }
40286
+
40287
+ // build/commands/generated/ai-costs.js
40288
+ function registerAi_CostsCommands(parent) {
40289
+ const resource = parent.command("ai-costs").description("Manage ai > costs");
40290
+ 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", `
40291
+ Examples:
40292
+ hyperline ai-costs list-agent-cost-catalog
40293
+ hyperline ai-costs list-agent-cost-catalog --take <take> --enabled-only <enabled_only>`).action(async (opts) => {
40294
+ const ctx = resource.parent?.opts()._ctx;
40295
+ if (!ctx) {
40296
+ process.stderr.write("Error: Not authenticated\n");
40297
+ process.exit(1);
40298
+ }
40299
+ const args = {};
40300
+ if (opts.enabledOnly !== void 0)
40301
+ args.enabled_only = opts.enabledOnly;
40302
+ if (opts.take !== void 0)
40303
+ args.take = Number(opts.take);
40304
+ if (opts.skip !== void 0)
40305
+ args.skip = Number(opts.skip);
40306
+ await ctx.execute({
40307
+ method: "GET",
40308
+ path: "/v1/ai/billing/costs",
40309
+ args,
40310
+ queryParamKeys: ["take", "skip", "enabled_only"]
40311
+ });
40312
+ });
40313
+ 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", `
40314
+ Examples:
40315
+ hyperline ai-costs create-agent-cost-catalog-item --provider <provider> --item <item> --dimensions <dimensions>
40316
+ hyperline ai-costs create-agent-cost-catalog-item --provider <provider> --item <item> --dimensions <dimensions> --output json`).action(async (opts) => {
40317
+ const ctx = resource.parent?.opts()._ctx;
40318
+ if (!ctx) {
40319
+ process.stderr.write("Error: Not authenticated\n");
40320
+ process.exit(1);
40321
+ }
40322
+ const args = {};
40323
+ if (opts.provider !== void 0)
40324
+ args.provider = opts.provider;
40325
+ if (opts.item !== void 0)
40326
+ args.item = opts.item;
40327
+ if (opts.dimensions !== void 0)
40328
+ args.dimensions = JSON.parse(opts.dimensions);
40329
+ await ctx.execute({
40330
+ method: "POST",
40331
+ path: "/v1/ai/billing/costs/items",
40332
+ args,
40333
+ queryParamKeys: []
40334
+ });
40335
+ });
40336
+ 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", `
40337
+ Examples:
40338
+ hyperline ai-costs delete-agent-cost-catalog-item --id <id>
40339
+ hyperline ai-costs delete-agent-cost-catalog-item --id <id> --output json`).action(async (opts) => {
40340
+ const ctx = resource.parent?.opts()._ctx;
40341
+ if (!ctx) {
40342
+ process.stderr.write("Error: Not authenticated\n");
40343
+ process.exit(1);
40344
+ }
40345
+ const args = {};
40346
+ if (opts.id !== void 0)
40347
+ args.id = opts.id;
40348
+ if (!opts.yes) {
40349
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
40350
+ if (!confirmed) {
40351
+ process.stdout.write("Aborted.\n");
40352
+ return;
40353
+ }
40354
+ }
40355
+ await ctx.execute({
40356
+ method: "DELETE",
40357
+ path: "/v1/ai/billing/costs/items/{id}",
40358
+ args,
40359
+ queryParamKeys: []
40360
+ });
40361
+ });
40362
+ 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", `
40363
+ Examples:
40364
+ 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>
40365
+ 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>
40366
+ 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) => {
40367
+ const ctx = resource.parent?.opts()._ctx;
40368
+ if (!ctx) {
40369
+ process.stderr.write("Error: Not authenticated\n");
40370
+ process.exit(1);
40371
+ }
40372
+ const args = {};
40373
+ if (opts.provider !== void 0)
40374
+ args.provider = opts.provider;
40375
+ if (opts.model !== void 0)
40376
+ args.model = opts.model;
40377
+ if (opts.inputPerMTokens !== void 0)
40378
+ args.input_per_m_tokens = opts.inputPerMTokens;
40379
+ if (opts.outputPerMTokens !== void 0)
40380
+ args.output_per_m_tokens = opts.outputPerMTokens;
40381
+ if (opts.cachedInputPerMTokens !== void 0)
40382
+ args.cached_input_per_m_tokens = opts.cachedInputPerMTokens;
40383
+ if (opts.cacheWritePerMTokens !== void 0)
40384
+ args.cache_write_per_m_tokens = opts.cacheWritePerMTokens;
40385
+ if (opts.dimensions !== void 0)
40386
+ args.dimensions = JSON.parse(opts.dimensions);
40387
+ await ctx.execute({
40388
+ method: "PUT",
40389
+ path: "/v1/ai/billing/costs/overrides",
40390
+ args,
40391
+ queryParamKeys: []
40392
+ });
40393
+ });
40394
+ 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", `
40395
+ Examples:
40396
+ hyperline ai-costs delete-agent-cost-catalog-override --id <id>
40397
+ hyperline ai-costs delete-agent-cost-catalog-override --id <id> --output json`).action(async (opts) => {
40398
+ const ctx = resource.parent?.opts()._ctx;
40399
+ if (!ctx) {
40400
+ process.stderr.write("Error: Not authenticated\n");
40401
+ process.exit(1);
40402
+ }
40403
+ const args = {};
40404
+ if (opts.id !== void 0)
40405
+ args.id = opts.id;
40406
+ if (!opts.yes) {
40407
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
40408
+ if (!confirmed) {
40409
+ process.stdout.write("Aborted.\n");
40410
+ return;
40411
+ }
40412
+ }
40413
+ await ctx.execute({
40414
+ method: "DELETE",
40415
+ path: "/v1/ai/billing/costs/overrides/{id}",
40416
+ args,
40417
+ queryParamKeys: []
40418
+ });
40419
+ });
40420
+ 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", `
40421
+ Examples:
40422
+ hyperline ai-costs replace-agent-cost-catalog-item --id <id> --provider <provider> --item <item> --dimensions <dimensions>
40423
+ hyperline ai-costs replace-agent-cost-catalog-item --id <id> --provider <provider> --item <item> --dimensions <dimensions> --output json`).action(async (opts) => {
40424
+ const ctx = resource.parent?.opts()._ctx;
40425
+ if (!ctx) {
40426
+ process.stderr.write("Error: Not authenticated\n");
40427
+ process.exit(1);
40428
+ }
40429
+ const args = {};
40430
+ if (opts.id !== void 0)
40431
+ args.id = opts.id;
40432
+ if (opts.provider !== void 0)
40433
+ args.provider = opts.provider;
40434
+ if (opts.item !== void 0)
40435
+ args.item = opts.item;
40436
+ if (opts.dimensions !== void 0)
40437
+ args.dimensions = JSON.parse(opts.dimensions);
40438
+ await ctx.execute({
40439
+ method: "PUT",
40440
+ path: "/v1/ai/billing/costs/items/{id}",
40441
+ args,
40442
+ queryParamKeys: []
40443
+ });
40444
+ });
40445
+ }
40446
+
40447
+ // build/commands/generated/analytics.js
40448
+ function registerAnalyticsCommands(parent) {
40449
+ const resource = parent.command("analytics").description("Manage analytics");
40450
+ resource.command("get").description(`Retrieve pre-computed account analytics including ARR, MRR, revenues, churn rate, and other key billing metrics. Optionally filter by invoicing_entity_id. Use this to get a high-level financial overview.`).option("--invoicing-entity-id <value>", `Invoicing Entity ID to filter analytics`).addHelpText("after", `
40451
+ Examples:
40452
+ hyperline analytics get
40453
+ hyperline analytics get --invoicing-entity-id <invoicing_entity_id>`).action(async (opts) => {
40454
+ const ctx = resource.parent?.opts()._ctx;
40455
+ if (!ctx) {
40456
+ process.stderr.write("Error: Not authenticated\n");
40457
+ process.exit(1);
40458
+ }
40459
+ const args = {};
40460
+ if (opts.invoicingEntityId !== void 0)
40461
+ args.invoicing_entity_id = opts.invoicingEntityId;
40462
+ await ctx.execute({
40463
+ method: "GET",
40464
+ path: "/v1/analytics",
40465
+ args,
40466
+ queryParamKeys: ["invoicing_entity_id"]
40467
+ });
40468
+ });
40469
+ }
40470
+
40471
+ // build/commands/generated/bank-accounts.js
40472
+ function registerBank_AccountsCommands(parent) {
40473
+ const resource = parent.command("bank-accounts").description("Manage bank accounts");
40474
+ resource.command("list").description(`List all bank accounts configured on the account. Returns paginated results with take/skip.`).option("--take <number>", `take`).option("--skip <number>", `skip`).addHelpText("after", `
40475
+ Examples:
40476
+ hyperline bank-accounts list
40477
+ hyperline bank-accounts list --take <take>`).action(async (opts) => {
40478
+ const ctx = resource.parent?.opts()._ctx;
40479
+ if (!ctx) {
40480
+ process.stderr.write("Error: Not authenticated\n");
40481
+ process.exit(1);
40482
+ }
40483
+ const args = {};
40484
+ if (opts.take !== void 0)
40485
+ args.take = Number(opts.take);
40486
+ if (opts.skip !== void 0)
40487
+ args.skip = Number(opts.skip);
40488
+ await ctx.execute({
40489
+ method: "GET",
40490
+ path: "/v1/bank-accounts",
40491
+ args,
40492
+ queryParamKeys: ["take", "skip"]
40493
+ });
40494
+ });
40495
+ resource.command("get").description(`Retrieve a specific bank account by its ID. Returns masked bank account details, account type, balance, and currency.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
40496
+ Examples:
40497
+ hyperline bank-accounts get --id <id>`).action(async (opts) => {
40498
+ const ctx = resource.parent?.opts()._ctx;
40499
+ if (!ctx) {
40500
+ process.stderr.write("Error: Not authenticated\n");
40501
+ process.exit(1);
40502
+ }
40503
+ const args = {};
40504
+ if (opts.id !== void 0)
40505
+ args.id = opts.id;
40506
+ await ctx.execute({
40507
+ method: "GET",
40508
+ path: "/v1/bank-accounts/{id}",
40509
+ args,
40510
+ queryParamKeys: []
40511
+ });
40512
+ });
40513
+ resource.command("list-bank-account-transactions").description(`List open banking transactions for a specific bank account. Paginated with limit/cursor.`).requiredOption("--id <value>", `id parameter`).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.`).addHelpText("after", `
40514
+ Examples:
40515
+ hyperline bank-accounts list-bank-account-transactions --id <id>
40516
+ hyperline bank-accounts list-bank-account-transactions --id <id> --limit <limit> --cursor <cursor>`).action(async (opts) => {
40517
+ const ctx = resource.parent?.opts()._ctx;
40518
+ if (!ctx) {
40519
+ process.stderr.write("Error: Not authenticated\n");
40520
+ process.exit(1);
40521
+ }
40522
+ const args = {};
40523
+ if (opts.id !== void 0)
40524
+ args.id = opts.id;
40525
+ if (opts.cursor !== void 0)
40526
+ args.cursor = opts.cursor;
40527
+ if (opts.includeTotal !== void 0)
40528
+ args.include_total = opts.includeTotal;
40529
+ if (opts.limit !== void 0)
40530
+ args.limit = Number(opts.limit);
40531
+ await ctx.execute({
40532
+ method: "GET",
40533
+ path: "/v1/bank-accounts/{id}/transactions",
40534
+ args,
40535
+ queryParamKeys: ["limit", "cursor", "include_total"]
40536
+ });
40537
+ });
40538
+ }
40539
+
40540
+ // build/commands/generated/companies.js
40541
+ function registerCompaniesCommands(parent) {
40542
+ const resource = parent.command("companies").description("Manage companies");
40543
+ resource.command("list").description(`List all companies accessible to the current authentication token. A company represents an organizational unit.`).addHelpText("after", `
40544
+ Examples:
40545
+ hyperline companies list`).action(async (_opts) => {
40546
+ const ctx = resource.parent?.opts()._ctx;
40547
+ if (!ctx) {
40548
+ process.stderr.write("Error: Not authenticated\n");
40549
+ process.exit(1);
40550
+ }
40551
+ const args = {};
40552
+ await ctx.execute({
40553
+ method: "GET",
40554
+ path: "/v1/companies",
40555
+ args,
40556
+ queryParamKeys: []
40557
+ });
40558
+ });
40559
+ resource.command("create-company").description(`Create a company with an approved account owner. Company creation must be enabled.`).requiredOption("--name <value>", `Company name.`).requiredOption("--address <json>", `Address of the default invoicing entity`).addHelpText("after", `
40560
+ Examples:
40561
+ hyperline companies create-company --name <name> --address <address>
40562
+ hyperline companies create-company --name <name> --address <address> --output json`).action(async (opts) => {
40563
+ const ctx = resource.parent?.opts()._ctx;
40564
+ if (!ctx) {
40565
+ process.stderr.write("Error: Not authenticated\n");
40566
+ process.exit(1);
40567
+ }
40568
+ const args = {};
40569
+ if (opts.name !== void 0)
40570
+ args.name = opts.name;
40571
+ if (opts.address !== void 0)
40572
+ args.address = JSON.parse(opts.address);
40573
+ await ctx.execute({
40574
+ method: "POST",
40575
+ path: "/v1/companies",
40576
+ args,
40577
+ queryParamKeys: []
40578
+ });
40579
+ });
40580
+ }
40581
+
40582
+ // build/commands/generated/coupons.js
40583
+ function registerCouponsCommands(parent) {
40584
+ const resource = parent.command("coupons").description("Manage coupons");
40585
+ resource.command("list").description(`List all coupons with pagination (take/skip). Coupons define discount rules (percentage or fixed amount) that can be applied to subscriptions or invoices.`).option("--take <number>", `take`).option("--skip <number>", `skip`).addHelpText("after", `
40586
+ Examples:
40587
+ hyperline coupons list
40588
+ hyperline coupons list --take <take>`).action(async (opts) => {
40589
+ const ctx = resource.parent?.opts()._ctx;
40590
+ if (!ctx) {
40591
+ process.stderr.write("Error: Not authenticated\n");
40592
+ process.exit(1);
40593
+ }
40594
+ const args = {};
40595
+ if (opts.take !== void 0)
40596
+ args.take = Number(opts.take);
40597
+ if (opts.skip !== void 0)
40598
+ args.skip = Number(opts.skip);
40599
+ await ctx.execute({
40600
+ method: "GET",
40601
+ path: "/v1/coupons",
40602
+ args,
40603
+ queryParamKeys: ["take", "skip"]
40604
+ });
40605
+ });
40606
+ 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>", `List of product IDs the coupon can be applied to. If empty, the coupon can be applied to any product.`).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", `
40607
+ Examples:
40608
+ hyperline coupons create --name <name> --type <type>
40609
+ hyperline coupons create --name <name> --type <type> --description <description> --expiration-date <expiration_date>
40610
+ hyperline coupons create --name <name> --type <type> --output json`).action(async (opts) => {
40611
+ const ctx = resource.parent?.opts()._ctx;
40612
+ if (!ctx) {
40613
+ process.stderr.write("Error: Not authenticated\n");
40614
+ process.exit(1);
40615
+ }
40616
+ const args = {};
40617
+ if (opts.name !== void 0)
40618
+ args.name = opts.name;
40619
+ if (opts.description !== void 0)
40620
+ args.description = opts.description;
40621
+ if (opts.expirationDate !== void 0)
40622
+ args.expiration_date = opts.expirationDate;
40623
+ if (opts.repeat !== void 0)
40624
+ args.repeat = opts.repeat;
40625
+ if (opts.type !== void 0)
40626
+ args.type = opts.type;
40627
+ if (opts.currency !== void 0)
40628
+ args.currency = opts.currency;
40629
+ if (opts.redemptionLimit !== void 0)
40630
+ args.redemption_limit = Number(opts.redemptionLimit);
40631
+ if (opts.discountAmount !== void 0)
40632
+ args.discount_amount = Number(opts.discountAmount);
40633
+ if (opts.discountPercent !== void 0)
40634
+ args.discount_percent = Number(opts.discountPercent);
40635
+ if (opts.productIds !== void 0)
40636
+ args.product_ids = JSON.parse(opts.productIds);
40637
+ if (opts.duration !== void 0)
40638
+ args.duration = JSON.parse(opts.duration);
40639
+ if (opts.properties !== void 0)
40640
+ args.properties = JSON.parse(opts.properties);
40641
+ await ctx.execute({
40642
+ method: "POST",
40643
+ path: "/v1/coupons",
40644
+ args,
40645
+ queryParamKeys: []
40646
+ });
40647
+ });
40648
+ resource.command("get").description(`Retrieve a specific coupon by ID including its discount configuration, redemption count, and deletion status.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
40649
+ Examples:
40650
+ hyperline coupons get --id <id>`).action(async (opts) => {
40651
+ const ctx = resource.parent?.opts()._ctx;
40652
+ if (!ctx) {
40653
+ process.stderr.write("Error: Not authenticated\n");
40654
+ process.exit(1);
40655
+ }
40656
+ const args = {};
40657
+ if (opts.id !== void 0)
40658
+ args.id = opts.id;
40659
+ await ctx.execute({
40660
+ method: "GET",
40661
+ path: "/v1/coupons/{id}",
40662
+ args,
40663
+ queryParamKeys: []
40664
+ });
40665
+ });
40666
+ 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>", `List of product IDs the coupon can be applied to. If empty, the coupon can be applied to any product.`).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", `
40667
+ Examples:
40668
+ hyperline coupons update --id <id> --name <name> --type <type>
40669
+ hyperline coupons update --id <id> --name <name> --type <type> --description <description> --expiration-date <expiration_date>
40670
+ hyperline coupons update --id <id> --name <name> --type <type> --output json`).action(async (opts) => {
40671
+ const ctx = resource.parent?.opts()._ctx;
40672
+ if (!ctx) {
40673
+ process.stderr.write("Error: Not authenticated\n");
40674
+ process.exit(1);
40675
+ }
40676
+ const args = {};
40677
+ if (opts.id !== void 0)
40678
+ args.id = opts.id;
40679
+ if (opts.name !== void 0)
40680
+ args.name = opts.name;
40681
+ if (opts.description !== void 0)
40682
+ args.description = opts.description;
40683
+ if (opts.expirationDate !== void 0)
40684
+ args.expiration_date = opts.expirationDate;
40685
+ if (opts.repeat !== void 0)
40686
+ args.repeat = opts.repeat;
40687
+ if (opts.type !== void 0)
40688
+ args.type = opts.type;
40689
+ if (opts.currency !== void 0)
40690
+ args.currency = opts.currency;
40691
+ if (opts.redemptionLimit !== void 0)
40692
+ args.redemption_limit = Number(opts.redemptionLimit);
40693
+ if (opts.discountAmount !== void 0)
40694
+ args.discount_amount = Number(opts.discountAmount);
40695
+ if (opts.discountPercent !== void 0)
40696
+ args.discount_percent = Number(opts.discountPercent);
40697
+ if (opts.productIds !== void 0)
40698
+ args.product_ids = JSON.parse(opts.productIds);
40699
+ if (opts.duration !== void 0)
40700
+ args.duration = JSON.parse(opts.duration);
40701
+ if (opts.properties !== void 0)
40702
+ args.properties = JSON.parse(opts.properties);
40703
+ await ctx.execute({
40704
+ method: "PUT",
40705
+ path: "/v1/coupons/{id}",
40706
+ args,
40707
+ queryParamKeys: []
40708
+ });
40709
+ });
40710
+ resource.command("delete").description(`Permanently delete a coupon by ID. This cannot be undone.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
40711
+ Examples:
40712
+ hyperline coupons delete --id <id>
40713
+ hyperline coupons delete --id <id> --output json`).action(async (opts) => {
40714
+ const ctx = resource.parent?.opts()._ctx;
40715
+ if (!ctx) {
40716
+ process.stderr.write("Error: Not authenticated\n");
40717
+ process.exit(1);
40718
+ }
40719
+ const args = {};
40720
+ if (opts.id !== void 0)
40721
+ args.id = opts.id;
40722
+ if (!opts.yes) {
40723
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
40724
+ if (!confirmed) {
40725
+ process.stdout.write("Aborted.\n");
40726
+ return;
40727
+ }
40728
+ }
40729
+ await ctx.execute({
40730
+ method: "DELETE",
40731
+ path: "/v1/coupons/{id}",
40732
+ args,
40733
+ queryParamKeys: []
40734
+ });
40735
+ });
40736
+ }
40737
+
40738
+ // build/commands/generated/coupons-promotion-codes.js
40739
+ function registerCoupons_Promotion_CodesCommands(parent) {
40740
+ const resource = parent.command("coupons-promotion-codes").description("Manage coupons > promotion codes");
40741
+ resource.command("list-promotion-codes").description(`List promotion codes with optional filter by coupon_id. Promotion codes are shareable codes that reference a coupon. Paginated with take/skip.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--coupon-id <value>", `coupon_id`).option("--coupon-id.not <value>", `coupon_id__not`).option("--coupon-id.is-null <value>", `coupon_id__isNull`).option("--coupon-id.is-not-null <value>", `coupon_id__isNotNull`).option("--coupon-id.equals <value>", `coupon_id__equals`).option("--coupon-id.contains <value>", `coupon_id__contains`).option("--coupon-id.starts-with <value>", `coupon_id__startsWith`).option("--coupon-id.end-with <value>", `coupon_id__endWith`).addHelpText("after", `
40742
+ Examples:
40743
+ hyperline coupons-promotion-codes list-promotion-codes
40744
+ hyperline coupons-promotion-codes list-promotion-codes --take <take> --coupon-id <coupon_id>`).action(async (opts) => {
40745
+ const ctx = resource.parent?.opts()._ctx;
40746
+ if (!ctx) {
40747
+ process.stderr.write("Error: Not authenticated\n");
40748
+ process.exit(1);
40749
+ }
40750
+ const args = {};
40751
+ if (opts.couponId !== void 0)
40752
+ args.coupon_id = opts.couponId;
40753
+ if (opts["couponId.not"] !== void 0)
40754
+ args.coupon_id__not = opts["couponId.not"];
40755
+ if (opts["couponId.isNull"] !== void 0)
40756
+ args.coupon_id__isNull = opts["couponId.isNull"];
40757
+ if (opts["couponId.isNotNull"] !== void 0)
40758
+ args.coupon_id__isNotNull = opts["couponId.isNotNull"];
40759
+ if (opts["couponId.equals"] !== void 0)
40760
+ args.coupon_id__equals = opts["couponId.equals"];
40761
+ if (opts["couponId.contains"] !== void 0)
40762
+ args.coupon_id__contains = opts["couponId.contains"];
40763
+ if (opts["couponId.startsWith"] !== void 0)
39539
40764
  args.coupon_id__startsWith = opts["couponId.startsWith"];
39540
40765
  if (opts["couponId.endWith"] !== void 0)
39541
40766
  args.coupon_id__endWith = opts["couponId.endWith"];
@@ -39706,7 +40931,7 @@ Examples:
39706
40931
  queryParamKeys: []
39707
40932
  });
39708
40933
  });
39709
- resource.command("create-custom-property").description(`Create a new custom property definition with a name, type (string, number, boolean, date, select), and optional default value.`).requiredOption("--name <value>", `name`).requiredOption("--type <value>", `type`).requiredOption("--slug <value>", `slug`).requiredOption("--entities <json>", `entities`).option("--api-only", `api_only`).option("--required", `required`).option("--authorized-values <json>", `authorized_values`).addHelpText("after", `
40934
+ resource.command("create-custom-property").description(`Create a new custom property definition with a name, type (text, email, number, boolean, date, select, multi_select), and optional default value.`).requiredOption("--name <value>", `name`).requiredOption("--type <value>", `type`).requiredOption("--slug <value>", `slug`).requiredOption("--entities <json>", `entities`).option("--api-only", `api_only`).option("--required", `required`).option("--authorized-values <json>", `authorized_values`).option("--default-value <json>", `Value set on entities created without an explicit value for this custom property. On existing entities without a value, it also satisfies \`required\`. Must match the custom property type, and one of \`authorized_values\` for \`select\` and \`multi_select\` types. Dates are ISO 8601 strings. Email defaults must be valid email addresses. Null means no default value.`).addHelpText("after", `
39710
40935
  Examples:
39711
40936
  hyperline custom-properties create-custom-property --name <name> --type <type> --slug <slug> --entities <entities>
39712
40937
  hyperline custom-properties create-custom-property --name <name> --type <type> --slug <slug> --entities <entities> --api-only --required
@@ -39731,6 +40956,8 @@ Examples:
39731
40956
  args.entities = JSON.parse(opts.entities);
39732
40957
  if (opts.authorizedValues !== void 0)
39733
40958
  args.authorized_values = JSON.parse(opts.authorizedValues);
40959
+ if (opts.defaultValue !== void 0)
40960
+ args.default_value = JSON.parse(opts.defaultValue);
39734
40961
  await ctx.execute({
39735
40962
  method: "POST",
39736
40963
  path: "/v1/custom-properties",
@@ -39738,7 +40965,7 @@ Examples:
39738
40965
  queryParamKeys: []
39739
40966
  });
39740
40967
  });
39741
- resource.command("update-custom-property").description(`Update an existing custom property definition by ID.`).requiredOption("--id <value>", `id parameter`).requiredOption("--name <value>", `name`).requiredOption("--type <value>", `type`).requiredOption("--slug <value>", `slug`).requiredOption("--entities <json>", `entities`).option("--api-only", `api_only`).option("--required", `required`).option("--authorized-values <json>", `authorized_values`).addHelpText("after", `
40968
+ resource.command("update-custom-property").description(`Update an existing custom property definition by ID.`).requiredOption("--id <value>", `id parameter`).requiredOption("--name <value>", `name`).requiredOption("--type <value>", `type`).requiredOption("--slug <value>", `slug`).requiredOption("--entities <json>", `entities`).option("--api-only", `api_only`).option("--required", `required`).option("--authorized-values <json>", `authorized_values`).option("--default-value <json>", `Value set on entities created without an explicit value for this custom property. On existing entities without a value, it also satisfies \`required\`. Must match the custom property type, and one of \`authorized_values\` for \`select\` and \`multi_select\` types. Dates are ISO 8601 strings. Email defaults must be valid email addresses. Null means no default value.`).addHelpText("after", `
39742
40969
  Examples:
39743
40970
  hyperline custom-properties update-custom-property --id <id> --name <name> --type <type> --slug <slug> --entities <entities>
39744
40971
  hyperline custom-properties update-custom-property --id <id> --name <name> --type <type> --slug <slug> --entities <entities> --api-only --required
@@ -39765,6 +40992,8 @@ Examples:
39765
40992
  args.entities = JSON.parse(opts.entities);
39766
40993
  if (opts.authorizedValues !== void 0)
39767
40994
  args.authorized_values = JSON.parse(opts.authorizedValues);
40995
+ if (opts.defaultValue !== void 0)
40996
+ args.default_value = JSON.parse(opts.defaultValue);
39768
40997
  await ctx.execute({
39769
40998
  method: "PUT",
39770
40999
  path: "/v1/custom-properties/{id}",
@@ -40122,7 +41351,7 @@ Customer type.
40122
41351
 
40123
41352
  - \`taxable\`: Taxes are automatically determined for the customer.
40124
41353
  - \`exempt\`: The customer is exempt from tax.
40125
- `).option("--registration-number <value>", `Customer registration number.`).option("--external-id <value>", `ID of the customer in your system. This helps matching your customer with the one on Hyperline.`).option("--domain <value>", `Customer domain. If not defined, it is inferred from the billing email.`).option("--invoicing-entity-id <value>", `ID of the invoicing entity this customer will be attached to.`).option("--billing-address <json>", `Customer billing address.`).option("--shipping-address <json>", `Customer shipping address.`).option("--billing-email <value>", `Email to which all communications will be sent.`).option("--invoice-emails <json>", `Emails to which invoices will be sent (e.g. payer, finance team, accounting firm). If not defined, invoices will be sent to the \`billing_email\`; otherwise, they won't be sent to the \`billing_email\`.`).option("--language <value>", `Language used for invoices, emails, and hosted pages.`).option("--timezone <value>", `Customer timezone.`).option("--available-payment-methods <json>", `List of payment methods you allow your customer to pay with. You customer will be able to select one of them in their portal page and those will be the default options when creating a checkout session.`).option("--payment-method-type <value>", `Default payment method type used to pay subscriptions and one-off invoices.`).option("--bank-account <json>", `Custom bank account for the customer. If not defined and customer paying by bank transfer, the bank accounts configured in your account settings will be used.`).option("--custom-payment-delay <number>", `Custom payment terms in days. If not defined, the default one defined on the related invoicing entity will be used.`).option("--custom-payment-initiation-delay <number>", `Custom initiation delay in days before triggering payment. If not defined, the default one defined on the related invoicing entity will be used.`).option("--organisation-id <value>", `Parent organization ID to which the client is attached.`).option("--organisation-invoicing <value>", `
41354
+ `).option("--registration-number <value>", `Customer registration number.`).option("--einvoicing-code <value>", `Customer electronic invoicing code, used to route their e-invoices to the relevant platform (e.g. Chorus Pro routing code or Peppol identifier).`).option("--external-id <value>", `ID of the customer in your system. This helps matching your customer with the one on Hyperline.`).option("--domain <value>", `Customer domain. If not defined, it is inferred from the billing email.`).option("--invoicing-entity-id <value>", `ID of the invoicing entity this customer will be attached to.`).option("--billing-address <json>", `Customer billing address.`).option("--shipping-address <json>", `Customer shipping address.`).option("--billing-email <value>", `Email to which all communications will be sent.`).option("--invoice-emails <json>", `Emails to which invoices will be sent (e.g. payer, finance team, accounting firm). If not defined, invoices will be sent to the \`billing_email\`; otherwise, they won't be sent to the \`billing_email\`.`).option("--language <value>", `Language used for invoices, emails, and hosted pages.`).option("--timezone <value>", `Customer timezone.`).option("--available-payment-methods <json>", `List of payment methods you allow your customer to pay with. You customer will be able to select one of them in their portal page and those will be the default options when creating a checkout session.`).option("--payment-method-type <value>", `Default payment method type used to pay subscriptions and one-off invoices.`).option("--bank-account <json>", `Custom bank account for the customer. If not defined and customer paying by bank transfer, the bank accounts configured in your account settings will be used.`).option("--custom-payment-delay <number>", `Custom payment terms in days. If not defined, the default one defined on the related invoicing entity will be used.`).option("--custom-payment-initiation-delay <number>", `Custom initiation delay in days before triggering payment. If not defined, the default one defined on the related invoicing entity will be used.`).option("--organisation-id <value>", `Parent organization ID to which the client is attached.`).option("--organisation-invoicing <value>", `
40126
41355
  How customer invoices are issued from the parent organisation.
40127
41356
 
40128
41357
  - \`none\`: Invoices will keep being issued from this customer.
@@ -40151,6 +41380,8 @@ Examples:
40151
41380
  args.taxability = opts.taxability;
40152
41381
  if (opts.registrationNumber !== void 0)
40153
41382
  args.registration_number = opts.registrationNumber;
41383
+ if (opts.einvoicingCode !== void 0)
41384
+ args.einvoicing_code = opts.einvoicingCode;
40154
41385
  if (opts.externalId !== void 0)
40155
41386
  args.external_id = opts.externalId;
40156
41387
  if (opts.domain !== void 0)
@@ -40257,7 +41488,7 @@ Customer type.
40257
41488
 
40258
41489
  - \`taxable\`: Taxes are automatically determined for the customer.
40259
41490
  - \`exempt\`: The customer is exempt from tax.
40260
- `).option("--registration-number <value>", `Customer registration number.`).option("--is-government-affiliated", `Indicates if the customer is affiliated with a government entity.`).option("--external-id <value>", `ID of the customer in your system. This helps matching your customer with the one on Hyperline.`).option("--domain <value>", `Customer domain. If not defined, it is inferred from the billing email.`).option("--invoicing-entity-id <value>", `ID of the invoicing entity this customer will be attached to.`).option("--billing-address <json>", `Customer billing address.`).option("--shipping-address <json>", `Customer shipping address.`).option("--billing-email <value>", `Email to which all communications will be sent.`).option("--invoice-emails <json>", `Emails to which invoices will be sent (e.g. payer, finance team, accounting firm). If not defined, invoices will be sent to the \`billing_email\`; otherwise, they won't be sent to the \`billing_email\`.`).option("--language <value>", `Language used for invoices, emails, and hosted pages.`).option("--timezone <value>", `Customer timezone.`).option("--available-payment-methods <json>", `List of payment methods you allow your customer to pay with. You customer will be able to select one of them in their portal page and those will be the default options when creating a checkout session.`).option("--payment-method-type <value>", `Default payment method type used to pay subscriptions and one-off invoices.`).option("--payment-method-id <value>", `ID of the default payment method of the customer. Only applies to card and direct debit.`).option("--bank-account <json>", `Custom bank account for the customer. If not defined and customer paying by bank transfer, the bank accounts configured in your account settings will be used.`).option("--custom-payment-delay <number>", `Custom payment terms in days. If not defined, the default one defined on the related invoicing entity will be used.`).option("--custom-payment-initiation-delay <number>", `Custom initiation delay in days before triggering payment. If not defined, the default one defined on the related invoicing entity will be used.`).option("--organisation-id <value>", `Parent organization ID to which the client is attached.`).option("--organisation-invoicing <value>", `
41491
+ `).option("--registration-number <value>", `Customer registration number.`).option("--is-government-affiliated", `Indicates if the customer is affiliated with a government entity.`).option("--einvoicing-code <value>", `Customer electronic invoicing code, used to route their e-invoices to the relevant platform (e.g. Chorus Pro routing code or Peppol identifier).`).option("--external-id <value>", `ID of the customer in your system. This helps matching your customer with the one on Hyperline.`).option("--domain <value>", `Customer domain. If not defined, it is inferred from the billing email.`).option("--invoicing-entity-id <value>", `ID of the invoicing entity this customer will be attached to.`).option("--billing-address <json>", `Customer billing address.`).option("--shipping-address <json>", `Customer shipping address.`).option("--billing-email <value>", `Email to which all communications will be sent.`).option("--invoice-emails <json>", `Emails to which invoices will be sent (e.g. payer, finance team, accounting firm). If not defined, invoices will be sent to the \`billing_email\`; otherwise, they won't be sent to the \`billing_email\`.`).option("--language <value>", `Language used for invoices, emails, and hosted pages.`).option("--timezone <value>", `Customer timezone.`).option("--available-payment-methods <json>", `List of payment methods you allow your customer to pay with. You customer will be able to select one of them in their portal page and those will be the default options when creating a checkout session.`).option("--payment-method-type <value>", `Default payment method type used to pay subscriptions and one-off invoices.`).option("--payment-method-id <value>", `ID of the default payment method of the customer. Only applies to card and direct debit.`).option("--bank-account <json>", `Custom bank account for the customer. If not defined and customer paying by bank transfer, the bank accounts configured in your account settings will be used.`).option("--custom-payment-delay <number>", `Custom payment terms in days. If not defined, the default one defined on the related invoicing entity will be used.`).option("--custom-payment-initiation-delay <number>", `Custom initiation delay in days before triggering payment. If not defined, the default one defined on the related invoicing entity will be used.`).option("--organisation-id <value>", `Parent organization ID to which the client is attached.`).option("--organisation-invoicing <value>", `
40261
41492
  How customer invoices are issued from the parent organisation.
40262
41493
 
40263
41494
  - \`none\`: Invoices will keep being issued from this customer.
@@ -40288,6 +41519,8 @@ Examples:
40288
41519
  args.taxability = opts.taxability;
40289
41520
  if (opts.registrationNumber !== void 0)
40290
41521
  args.registration_number = opts.registrationNumber;
41522
+ if (opts.einvoicingCode !== void 0)
41523
+ args.einvoicing_code = opts.einvoicingCode;
40291
41524
  if (opts.externalId !== void 0)
40292
41525
  args.external_id = opts.externalId;
40293
41526
  if (opts.domain !== void 0)
@@ -40541,7 +41774,7 @@ Examples:
40541
41774
  queryParamKeys: []
40542
41775
  });
40543
41776
  });
40544
- resource.command("create-customer-address").description(`Create a shipping address with type shipping; billing creation is rejected because a customer can have at most one billing address, managed through the customer endpoint.`).requiredOption("--customer-id <value>", `customerId parameter`).option("--name <value>", `Address name.`).option("--line1 <value>", `Address first line.`).option("--line2 <value>", `Address second line (optional).`).option("--city <value>", `Address city.`).option("--zip <value>", `Address ZIP code.`).option("--state <value>", `Only for US country. Second part of subdivision code in ISO format. See [ISO 3166-2:US](https://en.wikipedia.org/wiki/ISO_3166-2:US).`).option("--country <value>", `Two-letter country code in ISO format. See [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2).`).requiredOption("--type <value>", `Only shipping addresses can be created here. A customer has at most one active billing address, managed through the customer or by updating its address ID.`).addHelpText("after", `
41777
+ resource.command("create-customer-address").description(`Create a shipping address with type shipping; billing creation is rejected because a customer can have at most one billing address, managed through the customer endpoint.`).requiredOption("--customer-id <value>", `customerId parameter`).requiredOption("--type <value>", `Only shipping addresses can be created here. A customer has at most one active billing address, managed through the customer or by updating its address ID.`).option("--name <value>", `Address name.`).option("--line1 <value>", `Address first line.`).option("--line2 <value>", `Address second line (optional).`).option("--city <value>", `Address city.`).option("--zip <value>", `Address ZIP code.`).option("--state <value>", `Only for US country. Second part of subdivision code in ISO format. See [ISO 3166-2:US](https://en.wikipedia.org/wiki/ISO_3166-2:US).`).option("--country <value>", `Two-letter country code in ISO format. See [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2).`).option("--tax-id <value>", `Tax ID override for a shipping address. Null or blank inherits the customer's tax ID; omission on update preserves the override. Billing addresses cannot have an override.`).addHelpText("after", `
40545
41778
  Examples:
40546
41779
  hyperline customers-address create-customer-address --customer-id <customerId> --type <type>
40547
41780
  hyperline customers-address create-customer-address --customer-id <customerId> --type <type> --name <name> --line1 <line1>
@@ -40554,6 +41787,8 @@ Examples:
40554
41787
  const args = {};
40555
41788
  if (opts.customerId !== void 0)
40556
41789
  args.customerId = opts.customerId;
41790
+ if (opts.type !== void 0)
41791
+ args.type = opts.type;
40557
41792
  if (opts.name !== void 0)
40558
41793
  args.name = opts.name;
40559
41794
  if (opts.line1 !== void 0)
@@ -40568,8 +41803,8 @@ Examples:
40568
41803
  args.state = opts.state;
40569
41804
  if (opts.country !== void 0)
40570
41805
  args.country = opts.country;
40571
- if (opts.type !== void 0)
40572
- args.type = opts.type;
41806
+ if (opts.taxId !== void 0)
41807
+ args.tax_id = opts.taxId;
40573
41808
  await ctx.execute({
40574
41809
  method: "POST",
40575
41810
  path: "/v1/customers/{customerId}/addresses",
@@ -40577,7 +41812,7 @@ Examples:
40577
41812
  queryParamKeys: []
40578
41813
  });
40579
41814
  });
40580
- resource.command("update-customer-address").description(`Update a billing or shipping address by ID; billing changes also update the customer billing-address projection.`).requiredOption("--customer-id <value>", `customerId parameter`).requiredOption("--address-id <value>", `addressId parameter`).option("--name <value>", `Address name.`).option("--line1 <value>", `Address first line.`).option("--line2 <value>", `Address second line (optional).`).option("--city <value>", `Address city.`).option("--zip <value>", `Address ZIP code.`).option("--state <value>", `Only for US country. Second part of subdivision code in ISO format. See [ISO 3166-2:US](https://en.wikipedia.org/wiki/ISO_3166-2:US).`).option("--country <value>", `Two-letter country code in ISO format. See [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2).`).addHelpText("after", `
41815
+ resource.command("update-customer-address").description(`Update a billing or shipping address by ID; billing changes also update the customer billing-address projection.`).requiredOption("--customer-id <value>", `customerId parameter`).requiredOption("--address-id <value>", `addressId parameter`).option("--name <value>", `Address name.`).option("--line1 <value>", `Address first line.`).option("--line2 <value>", `Address second line (optional).`).option("--city <value>", `Address city.`).option("--zip <value>", `Address ZIP code.`).option("--state <value>", `Only for US country. Second part of subdivision code in ISO format. See [ISO 3166-2:US](https://en.wikipedia.org/wiki/ISO_3166-2:US).`).option("--country <value>", `Two-letter country code in ISO format. See [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2).`).option("--tax-id <value>", `Tax ID override for a shipping address. Null or blank inherits the customer's tax ID; omission on update preserves the override. Billing addresses cannot have an override.`).addHelpText("after", `
40581
41816
  Examples:
40582
41817
  hyperline customers-address update-customer-address --customer-id <customerId> --address-id <addressId>
40583
41818
  hyperline customers-address update-customer-address --customer-id <customerId> --address-id <addressId> --name <name> --line1 <line1>
@@ -40606,6 +41841,8 @@ Examples:
40606
41841
  args.state = opts.state;
40607
41842
  if (opts.country !== void 0)
40608
41843
  args.country = opts.country;
41844
+ if (opts.taxId !== void 0)
41845
+ args.tax_id = opts.taxId;
40609
41846
  await ctx.execute({
40610
41847
  method: "PATCH",
40611
41848
  path: "/v1/customers/{customerId}/addresses/{addressId}",
@@ -40788,7 +42025,7 @@ Examples:
40788
42025
  queryParamKeys: []
40789
42026
  });
40790
42027
  });
40791
- resource.command("list-customer-credit-transactions").description(`List all transactions (purchases, topups, usages) for a specific credit product. Paginated with take/skip and optional filters.`).requiredOption("--id <value>", `id parameter`).requiredOption("--product-id <value>", `productId parameter`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--type <value>", `type`).option("--invoice-id <value>", `invoice_id`).option("--created-at <value>", `created_at`).addHelpText("after", `
42028
+ resource.command("list-customer-credit-transactions").description(`List all transactions (topups, usages, expirations) for a specific credit product. Paginated with take/skip and optional filters.`).requiredOption("--id <value>", `id parameter`).requiredOption("--product-id <value>", `productId parameter`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--type <value>", `type`).option("--invoice-id <value>", `invoice_id`).option("--created-at <value>", `created_at`).addHelpText("after", `
40792
42029
  Examples:
40793
42030
  hyperline customers-credits list-customer-credit-transactions --id <id> --product-id <productId>
40794
42031
  hyperline customers-credits list-customer-credit-transactions --id <id> --product-id <productId> --take <take> --type <type>`).action(async (opts) => {
@@ -40959,6 +42196,54 @@ Examples:
40959
42196
  queryParamKeys: []
40960
42197
  });
40961
42198
  });
42199
+ resource.command("get-customer-credit-portal-settings").description(`Get whether a customer can top up a credit product from the customer portal, at which price, and which prices can be selected.`).requiredOption("--id <value>", `id parameter`).requiredOption("--product-id <value>", `productId parameter`).addHelpText("after", `
42200
+ Examples:
42201
+ hyperline customers-credits get-customer-credit-portal-settings --id <id> --product-id <productId>`).action(async (opts) => {
42202
+ const ctx = resource.parent?.opts()._ctx;
42203
+ if (!ctx) {
42204
+ process.stderr.write("Error: Not authenticated\n");
42205
+ process.exit(1);
42206
+ }
42207
+ const args = {};
42208
+ if (opts.id !== void 0)
42209
+ args.id = opts.id;
42210
+ if (opts.productId !== void 0)
42211
+ args.productId = opts.productId;
42212
+ await ctx.execute({
42213
+ method: "GET",
42214
+ path: "/v1/customers/{id}/credits/{productId}/portal-settings",
42215
+ args,
42216
+ queryParamKeys: []
42217
+ });
42218
+ });
42219
+ 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\`.`).addHelpText("after", `
42220
+ Examples:
42221
+ hyperline customers-credits update-customer-credit-portal-settings --id <id> --product-id <productId> --enabled
42222
+ 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>
42223
+ hyperline customers-credits update-customer-credit-portal-settings --id <id> --product-id <productId> --enabled --output json`).action(async (opts) => {
42224
+ const ctx = resource.parent?.opts()._ctx;
42225
+ if (!ctx) {
42226
+ process.stderr.write("Error: Not authenticated\n");
42227
+ process.exit(1);
42228
+ }
42229
+ const args = {};
42230
+ if (opts.id !== void 0)
42231
+ args.id = opts.id;
42232
+ if (opts.productId !== void 0)
42233
+ args.productId = opts.productId;
42234
+ if (opts.priceConfigurationId !== void 0)
42235
+ args.price_configuration_id = opts.priceConfigurationId;
42236
+ if (opts.enabled !== void 0)
42237
+ args.enabled = true;
42238
+ if (opts.customPriceConfiguration !== void 0)
42239
+ args.custom_price_configuration = JSON.parse(opts.customPriceConfiguration);
42240
+ await ctx.execute({
42241
+ method: "PUT",
42242
+ path: "/v1/customers/{id}/credits/{productId}/portal-settings",
42243
+ args,
42244
+ queryParamKeys: []
42245
+ });
42246
+ });
40962
42247
  }
40963
42248
 
40964
42249
  // build/commands/generated/customers-payment-methods.js
@@ -41181,6 +42466,130 @@ Examples:
41181
42466
  });
41182
42467
  }
41183
42468
 
42469
+ // build/commands/generated/customers-usage.js
42470
+ function registerCustomers_UsageCommands(parent) {
42471
+ const resource = parent.command("customers-usage").description("Manage customers > usage");
42472
+ resource.command("list-customer-usage").description(`List one usage row per aggregator for a single customer over a period (total + event count per aggregator).`).requiredOption("--id <value>", `id parameter`).option("--start-date <value>", `ISO-8601 date string.`).option("--end-date <value>", `ISO-8601 date string.`).addHelpText("after", `
42473
+ Examples:
42474
+ hyperline customers-usage list-customer-usage --id <id>
42475
+ hyperline customers-usage list-customer-usage --id <id> --start-date <start_date> --end-date <end_date>`).action(async (opts) => {
42476
+ const ctx = resource.parent?.opts()._ctx;
42477
+ if (!ctx) {
42478
+ process.stderr.write("Error: Not authenticated\n");
42479
+ process.exit(1);
42480
+ }
42481
+ const args = {};
42482
+ if (opts.id !== void 0)
42483
+ args.id = opts.id;
42484
+ if (opts.startDate !== void 0)
42485
+ args.start_date = opts.startDate;
42486
+ if (opts.endDate !== void 0)
42487
+ args.end_date = opts.endDate;
42488
+ await ctx.execute({
42489
+ method: "GET",
42490
+ path: "/v1/customers/{id}/usage",
42491
+ args,
42492
+ queryParamKeys: ["start_date", "end_date"]
42493
+ });
42494
+ });
42495
+ resource.command("get-customer-usage").description(`Get the usage of a customer for a specific aggregator over a period.`).requiredOption("--id <value>", `id parameter`).requiredOption("--aggregator-id <value>", `aggregator_id parameter`).option("--start-date <value>", `ISO-8601 date string.`).option("--end-date <value>", `ISO-8601 date string.`).addHelpText("after", `
42496
+ Examples:
42497
+ hyperline customers-usage get-customer-usage --id <id> --aggregator-id <aggregator_id>
42498
+ hyperline customers-usage get-customer-usage --id <id> --aggregator-id <aggregator_id> --start-date <start_date> --end-date <end_date>`).action(async (opts) => {
42499
+ const ctx = resource.parent?.opts()._ctx;
42500
+ if (!ctx) {
42501
+ process.stderr.write("Error: Not authenticated\n");
42502
+ process.exit(1);
42503
+ }
42504
+ const args = {};
42505
+ if (opts.id !== void 0)
42506
+ args.id = opts.id;
42507
+ if (opts.aggregatorId !== void 0)
42508
+ args.aggregator_id = opts.aggregatorId;
42509
+ if (opts.startDate !== void 0)
42510
+ args.start_date = opts.startDate;
42511
+ if (opts.endDate !== void 0)
42512
+ args.end_date = opts.endDate;
42513
+ await ctx.execute({
42514
+ method: "GET",
42515
+ path: "/v1/customers/{id}/usage/{aggregator_id}",
42516
+ args,
42517
+ queryParamKeys: ["start_date", "end_date"]
42518
+ });
42519
+ });
42520
+ resource.command("get-customer-usage-timeseries").description(`Get per-bucket usage for a customer + aggregator (month/day/hour).`).requiredOption("--id <value>", `id parameter`).requiredOption("--aggregator-id <value>", `aggregator_id parameter`).option("--start-date <value>", `ISO-8601 date string.`).option("--end-date <value>", `ISO-8601 date string.`).option("--aggregator-filter-id <value>", `Optional aggregator filter ID. When set, restricts the result to events matching that filter's config. Must belong to the aggregator in the path.`).option("--group-by <value>", `Bucket size for the timeseries.`).addHelpText("after", `
42521
+ Examples:
42522
+ hyperline customers-usage get-customer-usage-timeseries --id <id> --aggregator-id <aggregator_id>
42523
+ hyperline customers-usage get-customer-usage-timeseries --id <id> --aggregator-id <aggregator_id> --start-date <start_date> --end-date <end_date>`).action(async (opts) => {
42524
+ const ctx = resource.parent?.opts()._ctx;
42525
+ if (!ctx) {
42526
+ process.stderr.write("Error: Not authenticated\n");
42527
+ process.exit(1);
42528
+ }
42529
+ const args = {};
42530
+ if (opts.id !== void 0)
42531
+ args.id = opts.id;
42532
+ if (opts.aggregatorId !== void 0)
42533
+ args.aggregator_id = opts.aggregatorId;
42534
+ if (opts.startDate !== void 0)
42535
+ args.start_date = opts.startDate;
42536
+ if (opts.endDate !== void 0)
42537
+ args.end_date = opts.endDate;
42538
+ if (opts.aggregatorFilterId !== void 0)
42539
+ args.aggregator_filter_id = opts.aggregatorFilterId;
42540
+ if (opts.groupBy !== void 0)
42541
+ args.group_by = opts.groupBy;
42542
+ await ctx.execute({
42543
+ method: "GET",
42544
+ path: "/v1/customers/{id}/usage/{aggregator_id}/timeseries",
42545
+ args,
42546
+ queryParamKeys: [
42547
+ "start_date",
42548
+ "end_date",
42549
+ "aggregator_filter_id",
42550
+ "group_by"
42551
+ ]
42552
+ });
42553
+ });
42554
+ resource.command("get-customer-usage-events").description(`List raw billable events for a customer + aggregator over a period. Paginated with take/skip.`).requiredOption("--id <value>", `id parameter`).requiredOption("--aggregator-id <value>", `aggregator_id parameter`).option("--start-date <value>", `ISO-8601 date string.`).option("--end-date <value>", `ISO-8601 date string.`).option("--aggregator-filter-id <value>", `Optional aggregator filter ID. When set, restricts the result to events matching that filter's config. Must belong to the aggregator in the path.`).option("--take <number>", `take`).option("--skip <number>", `skip`).addHelpText("after", `
42555
+ Examples:
42556
+ hyperline customers-usage get-customer-usage-events --id <id> --aggregator-id <aggregator_id>
42557
+ hyperline customers-usage get-customer-usage-events --id <id> --aggregator-id <aggregator_id> --start-date <start_date> --end-date <end_date>`).action(async (opts) => {
42558
+ const ctx = resource.parent?.opts()._ctx;
42559
+ if (!ctx) {
42560
+ process.stderr.write("Error: Not authenticated\n");
42561
+ process.exit(1);
42562
+ }
42563
+ const args = {};
42564
+ if (opts.id !== void 0)
42565
+ args.id = opts.id;
42566
+ if (opts.aggregatorId !== void 0)
42567
+ args.aggregator_id = opts.aggregatorId;
42568
+ if (opts.startDate !== void 0)
42569
+ args.start_date = opts.startDate;
42570
+ if (opts.endDate !== void 0)
42571
+ args.end_date = opts.endDate;
42572
+ if (opts.aggregatorFilterId !== void 0)
42573
+ args.aggregator_filter_id = opts.aggregatorFilterId;
42574
+ if (opts.take !== void 0)
42575
+ args.take = Number(opts.take);
42576
+ if (opts.skip !== void 0)
42577
+ args.skip = Number(opts.skip);
42578
+ await ctx.execute({
42579
+ method: "GET",
42580
+ path: "/v1/customers/{id}/usage/{aggregator_id}/events",
42581
+ args,
42582
+ queryParamKeys: [
42583
+ "start_date",
42584
+ "end_date",
42585
+ "aggregator_filter_id",
42586
+ "take",
42587
+ "skip"
42588
+ ]
42589
+ });
42590
+ });
42591
+ }
42592
+
41184
42593
  // build/commands/generated/exports.js
41185
42594
  function registerExportsCommands(parent) {
41186
42595
  const resource = parent.command("exports").description("Manage exports");
@@ -41790,7 +43199,7 @@ Payment method strategy used to charge the invoice. Only applies to \`to_pay\` s
41790
43199
 
41791
43200
  - \`current\`: Use the current default payment method of the customer.
41792
43201
  - \`external\`: Manage the payment of the invoice outside of Hyperline.
41793
- `).option("--payment-method-id <value>", `ID of the default payment method used to pay the invoice. Transactions related to the invoice may use different payment methods.`).option("--bank-account-id <value>", `ID of the bank account displayed on the invoice. Transactions related to the invoice may use different bank accounts.`).option("--subscription-id <value>", `ID of the subscription related to the invoice.`).option("--emitted-at <value>", `Issue date of the invoice.`).option("--due-at <value>", `Due date of the invoice. Computed from the issue date and the payment delay configured in your settings.`).option("--settled-at <value>", `Date the invoice was fully paid.`).option("--properties <json>", `Key/value pairs to store any metadata useful in your context.`).option("--custom-properties <json>", `Values for custom properties defined for the \`invoice\` entity, keyed by slug.`).option("--additional-display-fields <json>", `Ordered additional fields displayed on the invoice PDF. Invoice and customer custom properties are referenced by slug.`).requiredOption("--line-items <json>", `line_items`).option("--transactions <json>", `transactions`).option("--coupons <json>", `coupons`).addHelpText("after", `
43202
+ `).option("--payment-method-id <value>", `ID of the default payment method used to pay the invoice. Transactions related to the invoice may use different payment methods.`).option("--bank-account-id <value>", `ID of the bank account displayed on the invoice. Transactions related to the invoice may use different bank accounts.`).option("--subscription-id <value>", `ID of the subscription related to the invoice.`).option("--emitted-at <value>", `Issue date of the invoice.`).option("--due-at <value>", `Due date of the invoice. Computed from the issue date and the payment delay configured in your settings.`).option("--settled-at <value>", `Date the invoice was fully paid.`).option("--issuing-method <value>", `Set to \`scheduled\` to finalize the draft invoice automatically on its issue date (\`emitted_at\`), resolved to the start of that day in the customer timezone. Requires \`status\` to be \`draft\` and an issue date after today. Default to \`manual\`.`).option("--properties <json>", `Key/value pairs to store any metadata useful in your context.`).option("--custom-properties <json>", `Values for custom properties defined for the \`invoice\` entity, keyed by slug.`).option("--additional-display-fields <json>", `Ordered additional fields displayed on the invoice PDF. Invoice and customer custom properties are referenced by slug.`).requiredOption("--line-items <json>", `line_items`).option("--transactions <json>", `transactions`).option("--coupons <json>", `coupons`).addHelpText("after", `
41794
43203
  Examples:
41795
43204
  hyperline invoices create-invoice --customer-id <customer_id> --line-items <line_items>
41796
43205
  hyperline invoices create-invoice --customer-id <customer_id> --line-items <line_items> --currency <currency> --status <status>
@@ -41841,6 +43250,8 @@ Examples:
41841
43250
  args.due_at = opts.dueAt;
41842
43251
  if (opts.settledAt !== void 0)
41843
43252
  args.settled_at = opts.settledAt;
43253
+ if (opts.issuingMethod !== void 0)
43254
+ args.issuing_method = opts.issuingMethod;
41844
43255
  if (opts.properties !== void 0)
41845
43256
  args.properties = JSON.parse(opts.properties);
41846
43257
  if (opts.customProperties !== void 0)
@@ -42030,7 +43441,7 @@ Examples:
42030
43441
 
42031
43442
  - \`auto\`: Tax is automatically computed and applied.
42032
43443
  - \`not_eligible\`: Tax collection is disabled for the invoice.
42033
- `).option("--line-items <json>", `line_items`).option("--coupons <json>", `coupons`).option("--payment-method-type <value>", `payment_method_type`).option("--payment-method-id <value>", `ID of the default payment method used to pay the invoice. Transactions related to the invoice may use different payment methods.`).option("--bank-account-id <value>", `ID of the bank account displayed on the invoice. Transactions related to the invoice may use different bank accounts.`).option("--subscription-id <value>", `ID of the subscription related to the invoice.`).option("--properties <json>", `Key/value pairs to store any metadata useful in your context.`).option("--custom-properties <json>", `Values for custom properties defined for the \`invoice\` entity, keyed by slug.`).option("--additional-display-fields <json>", `Ordered additional fields displayed on the invoice PDF. Invoice and customer custom properties are referenced by slug.`).option("--customer <json>", `Override customer details on the invoice. Only allowed for draft or grace period invoices.`).addHelpText("after", `
43444
+ `).option("--issuing-method <value>", `Set to \`scheduled\` to finalize the draft invoice automatically on its issue date (\`emitted_at\`), in the invoice timezone. The issue date must be after today. Set to \`manual\` to unschedule the invoice.`).option("--emitted-at <value>", `Issue date of the draft invoice. For a scheduled invoice, the day on which it is automatically finalized.`).option("--line-items <json>", `line_items`).option("--coupons <json>", `coupons`).option("--payment-method-type <value>", `payment_method_type`).option("--payment-method-id <value>", `ID of the default payment method used to pay the invoice. Transactions related to the invoice may use different payment methods.`).option("--bank-account-id <value>", `ID of the bank account displayed on the invoice. Transactions related to the invoice may use different bank accounts.`).option("--subscription-id <value>", `ID of the subscription related to the invoice.`).option("--properties <json>", `Key/value pairs to store any metadata useful in your context.`).option("--custom-properties <json>", `Values for custom properties defined for the \`invoice\` entity, keyed by slug.`).option("--additional-display-fields <json>", `Ordered additional fields displayed on the invoice PDF. Invoice and customer custom properties are referenced by slug.`).option("--customer <json>", `Override customer details on the invoice. Only allowed for draft or grace period invoices.`).addHelpText("after", `
42034
43445
  Examples:
42035
43446
  hyperline invoices update --id <id>
42036
43447
  hyperline invoices update --id <id> --type <type> --document-name <document_name>
@@ -42059,6 +43470,10 @@ Examples:
42059
43470
  args.footer = opts.footer;
42060
43471
  if (opts.taxScheme !== void 0)
42061
43472
  args.tax_scheme = opts.taxScheme;
43473
+ if (opts.issuingMethod !== void 0)
43474
+ args.issuing_method = opts.issuingMethod;
43475
+ if (opts.emittedAt !== void 0)
43476
+ args.emitted_at = opts.emittedAt;
42062
43477
  if (opts.paymentMethodType !== void 0)
42063
43478
  args.payment_method_type = opts.paymentMethodType;
42064
43479
  if (opts.paymentMethodId !== void 0)
@@ -42267,7 +43682,7 @@ Examples:
42267
43682
  queryParamKeys: []
42268
43683
  });
42269
43684
  });
42270
- 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.`).addHelpText("after", `
43685
+ 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", `
42271
43686
  Examples:
42272
43687
  hyperline invoicing-entities create-invoicing-entity --name <name> --country <country> --currency <currency> --accounting-currency <accounting_currency>
42273
43688
  hyperline invoicing-entities create-invoicing-entity --name <name> --country <country> --currency <currency> --accounting-currency <accounting_currency> --is-default --trade-name <trade_name>
@@ -42350,6 +43765,8 @@ Examples:
42350
43765
  args.credit_note_wallet_refund_enabled = true;
42351
43766
  if (opts.standaloneCreditNoteCreationEnabled !== void 0)
42352
43767
  args.standalone_credit_note_creation_enabled = true;
43768
+ if (opts.fxConversionDisplayEnabled !== void 0)
43769
+ args.fx_conversion_display_enabled = true;
42353
43770
  await ctx.execute({
42354
43771
  method: "POST",
42355
43772
  path: "/v1/invoicing-entities",
@@ -42357,7 +43774,7 @@ Examples:
42357
43774
  queryParamKeys: []
42358
43775
  });
42359
43776
  });
42360
- 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.`).addHelpText("after", `
43777
+ 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", `
42361
43778
  Examples:
42362
43779
  hyperline invoicing-entities update-invoicing-entity --id <id>
42363
43780
  hyperline invoicing-entities update-invoicing-entity --id <id> --name <name> --registration-number <registration_number>
@@ -42432,6 +43849,8 @@ Examples:
42432
43849
  args.credit_note_wallet_refund_enabled = true;
42433
43850
  if (opts.standaloneCreditNoteCreationEnabled !== void 0)
42434
43851
  args.standalone_credit_note_creation_enabled = true;
43852
+ if (opts.fxConversionDisplayEnabled !== void 0)
43853
+ args.fx_conversion_display_enabled = true;
42435
43854
  await ctx.execute({
42436
43855
  method: "PUT",
42437
43856
  path: "/v1/invoicing-entities/{id}",
@@ -42459,8 +43878,70 @@ Examples:
42459
43878
  }
42460
43879
  }
42461
43880
  await ctx.execute({
42462
- method: "DELETE",
42463
- path: "/v1/invoicing-entities/{id}",
43881
+ method: "DELETE",
43882
+ path: "/v1/invoicing-entities/{id}",
43883
+ args,
43884
+ queryParamKeys: []
43885
+ });
43886
+ });
43887
+ }
43888
+
43889
+ // build/commands/generated/monitoring.js
43890
+ function registerMonitoringCommands(parent) {
43891
+ const resource = parent.command("monitoring").description("Manage monitoring");
43892
+ 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. 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("--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", `
43893
+ Examples:
43894
+ hyperline monitoring list-monitoring-analyses
43895
+ hyperline monitoring list-monitoring-analyses --limit <limit> --cursor <cursor>`).action(async (opts) => {
43896
+ const ctx = resource.parent?.opts()._ctx;
43897
+ if (!ctx) {
43898
+ process.stderr.write("Error: Not authenticated\n");
43899
+ process.exit(1);
43900
+ }
43901
+ const args = {};
43902
+ if (opts.cursor !== void 0)
43903
+ args.cursor = opts.cursor;
43904
+ if (opts.includeTotal !== void 0)
43905
+ args.include_total = opts.includeTotal;
43906
+ if (opts.customerId !== void 0)
43907
+ args.customer_id = opts.customerId;
43908
+ if (opts.status !== void 0)
43909
+ args.status = opts.status;
43910
+ if (opts["createdAt.gte"] !== void 0)
43911
+ args.created_at__gte = opts["createdAt.gte"];
43912
+ if (opts["createdAt.lte"] !== void 0)
43913
+ args.created_at__lte = opts["createdAt.lte"];
43914
+ if (opts.limit !== void 0)
43915
+ args.limit = Number(opts.limit);
43916
+ await ctx.execute({
43917
+ method: "GET",
43918
+ path: "/v1/agents/monitoring/analyses",
43919
+ args,
43920
+ queryParamKeys: [
43921
+ "limit",
43922
+ "cursor",
43923
+ "include_total",
43924
+ "customer_id",
43925
+ "status",
43926
+ "created_at__gte",
43927
+ "created_at__lte"
43928
+ ]
43929
+ });
43930
+ });
43931
+ 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", `
43932
+ Examples:
43933
+ hyperline monitoring get-monitoring-analysis --id <id>`).action(async (opts) => {
43934
+ const ctx = resource.parent?.opts()._ctx;
43935
+ if (!ctx) {
43936
+ process.stderr.write("Error: Not authenticated\n");
43937
+ process.exit(1);
43938
+ }
43939
+ const args = {};
43940
+ if (opts.id !== void 0)
43941
+ args.id = opts.id;
43942
+ await ctx.execute({
43943
+ method: "GET",
43944
+ path: "/v1/agents/monitoring/analyses/{id}",
42464
43945
  args,
42465
43946
  queryParamKeys: []
42466
43947
  });
@@ -42752,6 +44233,44 @@ Examples:
42752
44233
  queryParamKeys: []
42753
44234
  });
42754
44235
  });
44236
+ 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", `
44237
+ Examples:
44238
+ hyperline price-configurations create --currency <currency> --billing-interval <billing_interval> --type <type> --prices <prices> --product-id <product_id>
44239
+ 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>
44240
+ hyperline price-configurations create --currency <currency> --billing-interval <billing_interval> --type <type> --prices <prices> --product-id <product_id> --output json`).action(async (opts) => {
44241
+ const ctx = resource.parent?.opts()._ctx;
44242
+ if (!ctx) {
44243
+ process.stderr.write("Error: Not authenticated\n");
44244
+ process.exit(1);
44245
+ }
44246
+ const args = {};
44247
+ if (opts.currency !== void 0)
44248
+ args.currency = opts.currency;
44249
+ if (opts.priceBookId !== void 0)
44250
+ args.price_book_id = opts.priceBookId;
44251
+ if (opts.type !== void 0)
44252
+ args.type = opts.type;
44253
+ if (opts.productId !== void 0)
44254
+ args.product_id = opts.productId;
44255
+ if (opts.allowOnPortal !== void 0)
44256
+ args.allow_on_portal = true;
44257
+ if (opts.countries !== void 0)
44258
+ args.countries = JSON.parse(opts.countries);
44259
+ if (opts.billingInterval !== void 0)
44260
+ args.billing_interval = JSON.parse(opts.billingInterval);
44261
+ if (opts.commitmentInterval !== void 0)
44262
+ args.commitment_interval = JSON.parse(opts.commitmentInterval);
44263
+ if (opts.prices !== void 0)
44264
+ args.prices = JSON.parse(opts.prices);
44265
+ if (opts.meteringFilter !== void 0)
44266
+ args.metering_filter = JSON.parse(opts.meteringFilter);
44267
+ await ctx.execute({
44268
+ method: "POST",
44269
+ path: "/v1/price-configurations",
44270
+ args,
44271
+ queryParamKeys: []
44272
+ });
44273
+ });
42755
44274
  resource.command("update-prices").description(`Update the prices of an existing price configuration by ID. Allows changing tier thresholds, unit prices, and flat fees.`).requiredOption("--id <value>", `id parameter`).option("--stdin", `Read JSON array input from stdin`).addHelpText("after", `
42756
44275
  Examples:
42757
44276
  hyperline price-configurations update-prices --id <id>
@@ -42950,7 +44469,7 @@ How the periodic credit allowance is granted for partial billing periods.
42950
44469
 
42951
44470
  - \`prorated\` (default): the granted credits are prorated to the elapsed period.
42952
44471
  - \`full_allowance\`: the full allowance is always granted (the invoice remains prorated).
42953
- `).option("--display-mode <value>", `How bundle items are displayed on invoices.`).option("--exclusive-items-enabled", `When true, only one item in the bundle can be active at a time.`).option("--bundle-items <json>", `Products included in this bundle. Percentages must sum to 100.`).addHelpText("after", `
44472
+ `).option("--credits-balance-auto-creation-enabled <value>", `Default for the \`credits_balance_auto_creation_enabled\` setting of subscription products using this credit product: whether the customer credit balance is created as soon as the product is added to a subscription. \`true\` when unset. A subscription product can override it.`).option("--display-mode <value>", `How bundle items are displayed on invoices.`).option("--exclusive-items-enabled", `When true, only one item in the bundle can be active at a time.`).option("--bundle-items <json>", `Products included in this bundle. Percentages must sum to 100.`).addHelpText("after", `
42954
44473
  Examples:
42955
44474
  hyperline products create --name <name> --type <type> --price-configurations <price_configurations>
42956
44475
  hyperline products create --name <name> --type <type> --price-configurations <price_configurations> --description <description> --description-display-interval-dates
@@ -42975,6 +44494,8 @@ Examples:
42975
44494
  args.unit_name = opts.unitName;
42976
44495
  if (opts.creditsGrantMode !== void 0)
42977
44496
  args.credits_grant_mode = opts.creditsGrantMode;
44497
+ if (opts.creditsBalanceAutoCreationEnabled !== void 0)
44498
+ args.credits_balance_auto_creation_enabled = opts.creditsBalanceAutoCreationEnabled;
42978
44499
  if (opts.displayMode !== void 0)
42979
44500
  args.display_mode = opts.displayMode;
42980
44501
  if (opts.lowCreditsThreshold !== void 0)
@@ -43144,12 +44665,12 @@ Quote status.
43144
44665
  - \`draft\`: The quote is a draft.
43145
44666
  - \`approved\`: The quote is approved and ready to be sent to the customer.
43146
44667
  - \`pending_signature\`: The quote is awaiting the customer's signature.
43147
- `).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.
44668
+ `).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("--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.
43148
44669
 
43149
44670
  - \`all\`: Display all pricing tiers.
43150
44671
  - \`matching\`: Only display the tiers used to compute the price based on quantity.
43151
44672
  - \`none\`: Hide all pricing tiers.
43152
- `).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("--display-subscription-on-update <value>", `Display subscription details on subscription update quotes.`).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", `
44673
+ `).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", `
43153
44674
  Examples:
43154
44675
  hyperline quotes create --customer-id <customer_id>
43155
44676
  hyperline quotes create --customer-id <customer_id> --status <status> --owner-email <owner_email>
@@ -43192,8 +44713,8 @@ Examples:
43192
44713
  args.display_first_invoice_amount = opts.displayFirstInvoiceAmount;
43193
44714
  if (opts.displayDocumentsInPreview !== void 0)
43194
44715
  args.display_documents_in_preview = opts.displayDocumentsInPreview;
43195
- if (opts.displaySubscriptionOnUpdate !== void 0)
43196
- args.display_subscription_on_update = opts.displaySubscriptionOnUpdate;
44716
+ if (opts.subscriptionUpdateDisplay !== void 0)
44717
+ args.subscription_update_display = opts.subscriptionUpdateDisplay;
43197
44718
  if (opts.generateDraftInvoices !== void 0)
43198
44719
  args.generate_draft_invoices = opts.generateDraftInvoices;
43199
44720
  if (opts.templateId !== void 0)
@@ -43436,12 +44957,12 @@ Examples:
43436
44957
  queryParamKeys: []
43437
44958
  });
43438
44959
  });
43439
- 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.
44960
+ 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("--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.
43440
44961
 
43441
44962
  - \`all\`: Display all pricing tiers.
43442
44963
  - \`matching\`: Only display the tiers used to compute the price based on quantity.
43443
44964
  - \`none\`: Hide all pricing tiers.
43444
- `).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("--display-subscription-on-update <value>", `Display subscription details on subscription update quotes.`).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", `
44965
+ `).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", `
43445
44966
  Examples:
43446
44967
  hyperline quotes update --id <id>
43447
44968
  hyperline quotes update --id <id> --owner-email <owner_email> --catalog-version-id <catalog_version_id>
@@ -43480,8 +45001,8 @@ Examples:
43480
45001
  args.display_first_invoice_amount = opts.displayFirstInvoiceAmount;
43481
45002
  if (opts.displayDocumentsInPreview !== void 0)
43482
45003
  args.display_documents_in_preview = opts.displayDocumentsInPreview;
43483
- if (opts.displaySubscriptionOnUpdate !== void 0)
43484
- args.display_subscription_on_update = opts.displaySubscriptionOnUpdate;
45004
+ if (opts.subscriptionUpdateDisplay !== void 0)
45005
+ args.subscription_update_display = opts.subscriptionUpdateDisplay;
43485
45006
  if (opts.generateDraftInvoices !== void 0)
43486
45007
  args.generate_draft_invoices = opts.generateDraftInvoices;
43487
45008
  if (opts.crmOpportunityId !== void 0)
@@ -43505,6 +45026,25 @@ Examples:
43505
45026
  queryParamKeys: []
43506
45027
  });
43507
45028
  });
45029
+ resource.command("duplicate").description(`Create a draft duplicate of an existing quote, including its linked invoice or subscription configuration.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
45030
+ Examples:
45031
+ hyperline quotes duplicate --id <id>
45032
+ hyperline quotes duplicate --id <id> --output json`).action(async (opts) => {
45033
+ const ctx = resource.parent?.opts()._ctx;
45034
+ if (!ctx) {
45035
+ process.stderr.write("Error: Not authenticated\n");
45036
+ process.exit(1);
45037
+ }
45038
+ const args = {};
45039
+ if (opts.id !== void 0)
45040
+ args.id = opts.id;
45041
+ await ctx.execute({
45042
+ method: "POST",
45043
+ path: "/v1/quotes/{id}/duplicate",
45044
+ args,
45045
+ queryParamKeys: []
45046
+ });
45047
+ });
43508
45048
  resource.command("download").description(`Download the PDF of a quote. Supports locale parameter for localization.`).requiredOption("--id <value>", `id parameter`).option("--locale <value>", `Locale as a supported language code and an uppercase ISO 3166-1 alpha-2 country code, separated by a hyphen.`).addHelpText("after", `
43509
45049
  Examples:
43510
45050
  hyperline quotes download --id <id>
@@ -43545,6 +45085,24 @@ Examples:
43545
45085
  queryParamKeys: []
43546
45086
  });
43547
45087
  });
45088
+ 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", `
45089
+ Examples:
45090
+ hyperline quotes get-quote-approvals --id <id>`).action(async (opts) => {
45091
+ const ctx = resource.parent?.opts()._ctx;
45092
+ if (!ctx) {
45093
+ process.stderr.write("Error: Not authenticated\n");
45094
+ process.exit(1);
45095
+ }
45096
+ const args = {};
45097
+ if (opts.id !== void 0)
45098
+ args.id = opts.id;
45099
+ await ctx.execute({
45100
+ method: "GET",
45101
+ path: "/v1/quotes/{id}/approvals",
45102
+ args,
45103
+ queryParamKeys: []
45104
+ });
45105
+ });
43548
45106
  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`).addHelpText("after", `
43549
45107
  Examples:
43550
45108
  hyperline quotes finalize --id <id>
@@ -43564,11 +45122,11 @@ Examples:
43564
45122
  queryParamKeys: []
43565
45123
  });
43566
45124
  });
43567
- resource.command("send").description(`Send a quote by email for customer signature. Requires the quote to be approved first.`).requiredOption("--id <value>", `id parameter`).requiredOption("--email <value>", `Email address to which the quote will be sent for signature.`).option("--message <value>", `Custom message used in the email content.`).addHelpText("after", `
45125
+ 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", `
43568
45126
  Examples:
43569
- hyperline quotes send --id <id> --email <email>
45127
+ hyperline quotes send --id <id>
43570
45128
  hyperline quotes send --id <id> --email <email> --message <message>
43571
- hyperline quotes send --id <id> --email <email> --output json`).action(async (opts) => {
45129
+ hyperline quotes send --id <id> --output json`).action(async (opts) => {
43572
45130
  const ctx = resource.parent?.opts()._ctx;
43573
45131
  if (!ctx) {
43574
45132
  process.stderr.write("Error: Not authenticated\n");
@@ -43588,6 +45146,51 @@ Examples:
43588
45146
  queryParamKeys: []
43589
45147
  });
43590
45148
  });
45149
+ 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", `
45150
+ Examples:
45151
+ hyperline quotes list-quote-signers --id <id>`).action(async (opts) => {
45152
+ const ctx = resource.parent?.opts()._ctx;
45153
+ if (!ctx) {
45154
+ process.stderr.write("Error: Not authenticated\n");
45155
+ process.exit(1);
45156
+ }
45157
+ const args = {};
45158
+ if (opts.id !== void 0)
45159
+ args.id = opts.id;
45160
+ await ctx.execute({
45161
+ method: "GET",
45162
+ path: "/v1/quotes/{id}/signers",
45163
+ args,
45164
+ queryParamKeys: []
45165
+ });
45166
+ });
45167
+ 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>", `
45168
+ Signature workflow of the quote, replaced as a whole.
45169
+
45170
+ 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.
45171
+
45172
+ 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.
45173
+ `).addHelpText("after", `
45174
+ Examples:
45175
+ hyperline quotes set-quote-signers --id <id> --signers <signers>
45176
+ hyperline quotes set-quote-signers --id <id> --signers <signers> --output json`).action(async (opts) => {
45177
+ const ctx = resource.parent?.opts()._ctx;
45178
+ if (!ctx) {
45179
+ process.stderr.write("Error: Not authenticated\n");
45180
+ process.exit(1);
45181
+ }
45182
+ const args = {};
45183
+ if (opts.id !== void 0)
45184
+ args.id = opts.id;
45185
+ if (opts.signers !== void 0)
45186
+ args.signers = JSON.parse(opts.signers);
45187
+ await ctx.execute({
45188
+ method: "PUT",
45189
+ path: "/v1/quotes/{id}/signers",
45190
+ args,
45191
+ queryParamKeys: []
45192
+ });
45193
+ });
43591
45194
  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", `
43592
45195
  Examples:
43593
45196
  hyperline quotes sign --id <id>
@@ -43870,7 +45473,7 @@ Examples:
43870
45473
  queryParamKeys: []
43871
45474
  });
43872
45475
  });
43873
- 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", `
45476
+ 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", `
43874
45477
  Examples:
43875
45478
  hyperline subscriptions cancel --id <id>
43876
45479
  hyperline subscriptions cancel --id <id> --cancel-at <cancel_at> --reason <reason>
@@ -43898,9 +45501,10 @@ Examples:
43898
45501
  queryParamKeys: []
43899
45502
  });
43900
45503
  });
43901
- resource.command("reinstate").description(`Reinstate a subscription that is scheduled for cancellation, reverting it to active status.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
45504
+ 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", `
43902
45505
  Examples:
43903
45506
  hyperline subscriptions reinstate --id <id>
45507
+ hyperline subscriptions reinstate --id <id> --reactivate-at <reactivate_at> --invoicing-mode <invoicing_mode>
43904
45508
  hyperline subscriptions reinstate --id <id> --output json`).action(async (opts) => {
43905
45509
  const ctx = resource.parent?.opts()._ctx;
43906
45510
  if (!ctx) {
@@ -43910,6 +45514,12 @@ Examples:
43910
45514
  const args = {};
43911
45515
  if (opts.id !== void 0)
43912
45516
  args.id = opts.id;
45517
+ if (opts.reactivateAt !== void 0)
45518
+ args.reactivate_at = opts.reactivateAt;
45519
+ if (opts.invoicingMode !== void 0)
45520
+ args.invoicing_mode = opts.invoicingMode;
45521
+ if (opts.chargeLineItems !== void 0)
45522
+ args.charge_line_items = JSON.parse(opts.chargeLineItems);
43913
45523
  await ctx.execute({
43914
45524
  method: "POST",
43915
45525
  path: "/v1/subscriptions/{id}/reinstate",
@@ -43917,7 +45527,7 @@ Examples:
43917
45527
  queryParamKeys: []
43918
45528
  });
43919
45529
  });
43920
- resource.command("pause").description(`Pause a subscription. Billing stops while paused. Optionally specify a reactivate_at date for automatic resumption. If the subscription is already paused, updates (or clears) its reactivation date.`).requiredOption("--id <value>", `id parameter`).option("--reactivate-at <value>", `Date when the subscription will be automatically reactivated. Must be a future date. UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.`).addHelpText("after", `
45530
+ resource.command("pause").description(`Pause a subscription. Billing stops while paused. Optionally specify a reactivate_at date for automatic resumption. If the subscription is already paused, updates (or clears) its reactivation date.`).requiredOption("--id <value>", `id parameter`).option("--reactivate-at <value>", `Date when the subscription will be automatically reactivated. UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format. A date on or before the pause date resumes it at the next scheduled run.`).addHelpText("after", `
43921
45531
  Examples:
43922
45532
  hyperline subscriptions pause --id <id>
43923
45533
  hyperline subscriptions pause --id <id> --reactivate-at <reactivate_at>
@@ -43958,9 +45568,10 @@ Examples:
43958
45568
  queryParamKeys: []
43959
45569
  });
43960
45570
  });
43961
- resource.command("reactivate").description(`Resume a paused subscription, restarting billing from the current date.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
45571
+ resource.command("reactivate").description(`Resume a paused subscription. Optionally pass reactivate_at (may be in the past, after the pause date; a future date schedules it) and invoicing_mode (or charge_line_items for a custom charge) to control how the paused gap is invoiced.`).requiredOption("--id <value>", `id parameter`).option("--reactivate-at <value>", `Date the subscription resumes from. May be in the past (after the pause date). Defaults to now. A future date schedules the reactivation.`).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. Not allowed with a future \`reactivate_at\`.`).addHelpText("after", `
43962
45572
  Examples:
43963
45573
  hyperline subscriptions reactivate --id <id>
45574
+ hyperline subscriptions reactivate --id <id> --reactivate-at <reactivate_at> --invoicing-mode <invoicing_mode>
43964
45575
  hyperline subscriptions reactivate --id <id> --output json`).action(async (opts) => {
43965
45576
  const ctx = resource.parent?.opts()._ctx;
43966
45577
  if (!ctx) {
@@ -43970,6 +45581,12 @@ Examples:
43970
45581
  const args = {};
43971
45582
  if (opts.id !== void 0)
43972
45583
  args.id = opts.id;
45584
+ if (opts.reactivateAt !== void 0)
45585
+ args.reactivate_at = opts.reactivateAt;
45586
+ if (opts.invoicingMode !== void 0)
45587
+ args.invoicing_mode = opts.invoicingMode;
45588
+ if (opts.chargeLineItems !== void 0)
45589
+ args.charge_line_items = JSON.parse(opts.chargeLineItems);
43973
45590
  await ctx.execute({
43974
45591
  method: "POST",
43975
45592
  path: "/v1/subscriptions/{id}/reactivate",
@@ -45554,6 +47171,10 @@ function registerAllCommands(program2) {
45554
47171
  registerAccounting_Revenue_RecognitionCommands(program2);
45555
47172
  registerAccounting_RulesCommands(program2);
45556
47173
  registerCustom_PropertiesCommands(program2);
47174
+ registerAggregatorsCommands(program2);
47175
+ registerAggregators_UsageCommands(program2);
47176
+ registerAi_BillingCommands(program2);
47177
+ registerAi_CostsCommands(program2);
45557
47178
  registerAnalyticsCommands(program2);
45558
47179
  registerBank_AccountsCommands(program2);
45559
47180
  registerCompaniesCommands(program2);
@@ -45564,6 +47185,7 @@ function registerAllCommands(program2) {
45564
47185
  registerCustomers_AddressCommands(program2);
45565
47186
  registerCustomers_ShippingCommands(program2);
45566
47187
  registerCustomersCommands(program2);
47188
+ registerCustomers_UsageCommands(program2);
45567
47189
  registerOrganisationsCommands(program2);
45568
47190
  registerCustomers_SegmentsCommands(program2);
45569
47191
  registerExportsCommands(program2);
@@ -45571,6 +47193,7 @@ function registerAllCommands(program2) {
45571
47193
  registerInvoicesCommands(program2);
45572
47194
  registerInvoices_TransactionsCommands(program2);
45573
47195
  registerInvoicing_EntitiesCommands(program2);
47196
+ registerMonitoringCommands(program2);
45574
47197
  registerPaymentsCommands(program2);
45575
47198
  registerProductsCommands(program2);
45576
47199
  registerPrice_ConfigurationsCommands(program2);
@@ -61523,12 +63146,41 @@ var DateTimeSchema = external_exports.iso.datetime({
61523
63146
  example: "2024-12-20T16:04:11Z"
61524
63147
  });
61525
63148
 
63149
+ // ../hyperline-lib/build/http/dto/decimal.js
63150
+ var DecimalStringSchema = external_exports.string().regex(/^-?\d+(\.\d+)?(e[+-]?\d+)?$/i).openapi({
63151
+ description: "Exact decimal string. Interpret the unit using the field description and denomination.",
63152
+ example: "0.0021"
63153
+ });
63154
+ var NonNegativeDecimalStringSchema = external_exports.string().regex(/^\d+(\.\d+)?$/).max(40).openapi({
63155
+ description: "Non-negative exact decimal string, at most 40 characters.",
63156
+ example: "0.0021"
63157
+ });
63158
+
61526
63159
  // ../hyperline-lib/build/http/dto/domain.js
61527
63160
  var DomainSchema = external_exports.string().trim().toLowerCase().regex(/^(?!:\/\/)(?=.{1,253}$)(?!-)([a-z0-9-]{1,63}\.)+[a-z]{2,63}$/, "Invalid domain").openapi({
61528
63161
  description: "Domain name.",
61529
63162
  example: "acme.com"
61530
63163
  });
61531
63164
 
63165
+ // ../hyperline-lib/build/http/dto/emailStatus.js
63166
+ var EmailStatusSchema = external_exports.enum([
63167
+ "sent",
63168
+ "delivered",
63169
+ "opened",
63170
+ "clicked",
63171
+ "spammed",
63172
+ "bounced",
63173
+ "queued",
63174
+ "drafted",
63175
+ "attempted",
63176
+ "failed",
63177
+ "undeliverable",
63178
+ "converted",
63179
+ "suppressed",
63180
+ "unsubscribed",
63181
+ "dropped"
63182
+ ]);
63183
+
61532
63184
  // ../hyperline-lib/build/http/dto/error.js
61533
63185
  var ErrorSchema = external_exports.object({
61534
63186
  message: external_exports.string()
@@ -61557,17 +63209,17 @@ var languages = [
61557
63209
 
61558
63210
  // ../hyperline-i18n/build/locales/de.js
61559
63211
  var de = {
61560
- "accounting.invoicePosted.entryDescription": "Buchungseintrag f\xFCr Rechnung {{invoiceId}}",
61561
- "accounting.transactionSettled.entryDescription": "Zahlungsabwicklung f\xFCr Rechnung {{invoiceId}}",
61562
- "accounting.transactionRefunded.entryDescription": "R\xFCckerstattung f\xFCr Rechnung {{invoiceId}}",
61563
63212
  "accounting.creditNotePosted.entryDescription": "Gutschrift {{creditNoteId}} f\xFCr Rechnung {{invoiceId}}",
61564
- "accounting.standaloneCreditNotePosted.entryDescription": "Gutschrift {{creditNoteId}}",
63213
+ "accounting.invoicePosted.entryDescription": "Buchungseintrag f\xFCr Rechnung {{invoiceId}}",
63214
+ "accounting.revrec.closedPeriodFallbackNote": " (in die n\xE4chste offene Periode gebucht \u2013 Zielperiode geschlossen; urspr\xFCngliches Datum {{originalDate}})",
61565
63215
  "accounting.revrec.creditLineDescription": "Umsatz realisieren \u2013 Zeitplan {{scheduleId}}, Zeitraum {{periodDate}}",
61566
63216
  "accounting.revrec.debitLineDescription": "Abgrenzungsposten reduzieren \u2013 Zeitplan {{scheduleId}}, Zeitraum {{periodDate}}",
61567
63217
  "accounting.revrec.discountCreditLineDescription": "Erl\xF6sminderung (Rabatt) erfassen \u2013 Zeitplan {{scheduleId}}, Zeitraum {{periodDate}}",
61568
- "accounting.revrec.closedPeriodFallbackNote": " (in die n\xE4chste offene Periode gebucht \u2013 Zielperiode geschlossen; urspr\xFCngliches Datum {{originalDate}})",
61569
63218
  "accounting.revrec.discountDebitLineDescription": "Abgegrenzten Rabatt reduzieren \u2013 Zeitplan {{scheduleId}}, Zeitraum {{periodDate}}",
61570
63219
  "accounting.revrec.entryDescription": "Umsatzrealisierung f\xFCr Zeitplan {{scheduleId}}, Zeitraum {{periodStart}} - {{periodEnd}}",
63220
+ "accounting.standaloneCreditNotePosted.entryDescription": "Gutschrift {{creditNoteId}}",
63221
+ "accounting.transactionRefunded.entryDescription": "R\xFCckerstattung f\xFCr Rechnung {{invoiceId}}",
63222
+ "accounting.transactionSettled.entryDescription": "Zahlungsabwicklung f\xFCr Rechnung {{invoiceId}}",
61571
63223
  "creditNotes.refundChargeName": "R\xFCckerstattung f\xFCr die Rechnung",
61572
63224
  "credits.bundleOf": "{{productName}} - Paket mit {{creditCount}} Guthaben",
61573
63225
  "credits.unitsOf": "{{productName}} - {{creditCount}} Guthaben",
@@ -61581,9 +63233,9 @@ var de = {
61581
63233
  "invoices.prorata.paymentForItemFullPeriod": "Zahlung f\xFCr",
61582
63234
  "invoices.prorata.refundForItem": "Anteilig erstatteter Betrag f\xFCr",
61583
63235
  "invoices.prorata.refundForItemFullPeriod": "Erstattung f\xFCr",
61584
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 abgelaufenes Guthaben",
61585
63236
  "subscriptions.closingChargeName": "Abschlussgeb\xFChr f\xFCr das Abonnement",
61586
63237
  "subscriptions.correction": "Vorperiodische Anpassung",
63238
+ "subscriptions.reinstatementRechargeName": "Wiederherstellungsgeb\xFChr f\xFCr den stornierten Zeitraum",
61587
63239
  "subscriptions.updates.addCoupon": "Gutschein hinzuf\xFCgen {{couponName}}",
61588
63240
  "subscriptions.updates.addProduct": "{{productName}} hinzuf\xFCgen",
61589
63241
  "subscriptions.updates.removeCoupon": "Gutschein entfernen {{couponName}}",
@@ -61598,7 +63250,8 @@ var de = {
61598
63250
  "subscriptions.updates.updateCount.description.prorata.committed.not_invoiced": "Betrag von {{amount}} (mit einer minimal zugesicherten Anzahl von {{committedCount}}) f\xFCr den anteiligen Zeitraum nicht in Rechnung gestellt",
61599
63251
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Diese Position wurde f\xFCr den anteiligen Zeitraum in Rechnung gestellt",
61600
63252
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Betrag von {{amount}} f\xFCr den anteiligen Zeitraum nicht in Rechnung gestellt",
61601
- "subscriptions.updates.updatePrices": "Preise f\xFCr {{productName}} aktualisieren"
63253
+ "subscriptions.updates.updatePrices": "Preise f\xFCr {{productName}} aktualisieren",
63254
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 abgelaufenes Guthaben"
61602
63255
  };
61603
63256
 
61604
63257
  // ../hyperline-i18n/build/locales/en.js
@@ -61615,6 +63268,7 @@ var en = {
61615
63268
  "invoices.prorata.refundForItemFullPeriod": "Refund for",
61616
63269
  "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 expired balance",
61617
63270
  "subscriptions.closingChargeName": "Closing fee for subscription",
63271
+ "subscriptions.reinstatementRechargeName": "Reinstatement recharge of canceled period",
61618
63272
  "subscriptions.correction": "Adjustment previous period",
61619
63273
  "subscriptions.updates.addCoupon": "Add coupon {{couponName}}",
61620
63274
  "subscriptions.updates.addProduct": "Add {{productName}}",
@@ -61649,17 +63303,17 @@ var en = {
61649
63303
 
61650
63304
  // ../hyperline-i18n/build/locales/es.js
61651
63305
  var es = {
61652
- "accounting.invoicePosted.entryDescription": "Asiento contable para la factura {{invoiceId}}",
61653
- "accounting.transactionSettled.entryDescription": "Liquidaci\xF3n de pago para la factura {{invoiceId}}",
61654
- "accounting.transactionRefunded.entryDescription": "Reembolso de la factura {{invoiceId}}",
61655
63306
  "accounting.creditNotePosted.entryDescription": "Nota de cr\xE9dito {{creditNoteId}} para la factura {{invoiceId}}",
61656
- "accounting.standaloneCreditNotePosted.entryDescription": "Nota de cr\xE9dito {{creditNoteId}}",
63307
+ "accounting.invoicePosted.entryDescription": "Asiento contable para la factura {{invoiceId}}",
63308
+ "accounting.revrec.closedPeriodFallbackNote": " (registrado en el pr\xF3ximo per\xEDodo abierto \u2014 per\xEDodo contable de destino cerrado; fecha original {{originalDate}})",
61657
63309
  "accounting.revrec.creditLineDescription": "Reconocer ingresos \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
61658
63310
  "accounting.revrec.debitLineDescription": "Disminuci\xF3n de ingresos diferidos \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
61659
63311
  "accounting.revrec.discountCreditLineDescription": "Reconocer contra-ingresos (descuento) \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
61660
- "accounting.revrec.closedPeriodFallbackNote": " (registrado en el pr\xF3ximo per\xEDodo abierto \u2014 per\xEDodo contable de destino cerrado; fecha original {{originalDate}})",
61661
63312
  "accounting.revrec.discountDebitLineDescription": "Disminuci\xF3n de descuento diferido \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
61662
63313
  "accounting.revrec.entryDescription": "Reconocimiento de ingresos para el cronograma {{scheduleId}}, per\xEDodo {{periodStart}} - {{periodEnd}}",
63314
+ "accounting.standaloneCreditNotePosted.entryDescription": "Nota de cr\xE9dito {{creditNoteId}}",
63315
+ "accounting.transactionRefunded.entryDescription": "Reembolso de la factura {{invoiceId}}",
63316
+ "accounting.transactionSettled.entryDescription": "Liquidaci\xF3n de pago para la factura {{invoiceId}}",
61663
63317
  "creditNotes.refundChargeName": "Reembolso por factura",
61664
63318
  "credits.bundleOf": "{{productName}} - Paquete de {{creditCount}} cr\xE9ditos",
61665
63319
  "credits.unitsOf": "{{productName}} - {{creditCount}} cr\xE9ditos",
@@ -61673,9 +63327,9 @@ var es = {
61673
63327
  "invoices.prorata.paymentForItemFullPeriod": "Pago por",
61674
63328
  "invoices.prorata.refundForItem": "Reembolso prorrateado por",
61675
63329
  "invoices.prorata.refundForItemFullPeriod": "Reembolso por",
61676
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo caducado",
61677
63330
  "subscriptions.closingChargeName": "Cargo por cierre de suscripci\xF3n",
61678
63331
  "subscriptions.correction": "Ajuste del periodo anterior",
63332
+ "subscriptions.reinstatementRechargeName": "Recarga de reinstalaci\xF3n del per\xEDodo cancelado",
61679
63333
  "subscriptions.updates.addCoupon": "A\xF1adir cup\xF3n {{couponName}}",
61680
63334
  "subscriptions.updates.addProduct": "A\xF1adir {{productName}}",
61681
63335
  "subscriptions.updates.removeCoupon": "Eliminar cup\xF3n {{couponName}}",
@@ -61690,22 +63344,23 @@ var es = {
61690
63344
  "subscriptions.updates.updateCount.description.prorata.committed.not_invoiced": "Importe de {{amount}} (con un m\xEDnimo comprometido de {{committedCount}}) no facturado para el per\xEDodo prorrateado",
61691
63345
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Esta l\xEDnea ha sido facturada para el per\xEDodo prorrateado",
61692
63346
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Importe de {{amount}} no facturado para el per\xEDodo prorrateado",
61693
- "subscriptions.updates.updatePrices": "Actualizar precios para {{productName}}"
63347
+ "subscriptions.updates.updatePrices": "Actualizar precios para {{productName}}",
63348
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo caducado"
61694
63349
  };
61695
63350
 
61696
63351
  // ../hyperline-i18n/build/locales/fr.js
61697
63352
  var fr = {
63353
+ "accounting.creditNotePosted.entryDescription": "Avoir {{creditNoteId}} pour la facture {{invoiceId}}",
63354
+ "accounting.invoicePosted.entryDescription": "\xC9criture de comptabilisation pour la facture {{invoiceId}}",
63355
+ "accounting.revrec.closedPeriodFallbackNote": " (comptabilis\xE9 sur la prochaine p\xE9riode ouverte \u2014 p\xE9riode comptable cible cl\xF4tur\xE9e ; date d'origine {{originalDate}})",
61698
63356
  "accounting.revrec.creditLineDescription": "Reconnaissance du chiffre d'affaires \u2013 \xE9ch\xE9ancier {{scheduleId}}, p\xE9riode {{periodDate}}",
61699
63357
  "accounting.revrec.debitLineDescription": "Diminution des produits constat\xE9s d'avance \u2013 \xE9ch\xE9ancier {{scheduleId}}, p\xE9riode {{periodDate}}",
61700
63358
  "accounting.revrec.discountCreditLineDescription": "Reconnaissance du contre-revenu (remise) \u2013 \xE9ch\xE9ancier {{scheduleId}}, p\xE9riode {{periodDate}}",
61701
- "accounting.revrec.closedPeriodFallbackNote": " (comptabilis\xE9 sur la prochaine p\xE9riode ouverte \u2014 p\xE9riode comptable cible cl\xF4tur\xE9e ; date d'origine {{originalDate}})",
61702
63359
  "accounting.revrec.discountDebitLineDescription": "Diminution des remises diff\xE9r\xE9es \u2013 \xE9ch\xE9ancier {{scheduleId}}, p\xE9riode {{periodDate}}",
61703
- "accounting.invoicePosted.entryDescription": "\xC9criture de comptabilisation pour la facture {{invoiceId}}",
61704
- "accounting.transactionSettled.entryDescription": "R\xE8glement de la facture {{invoiceId}}",
61705
- "accounting.transactionRefunded.entryDescription": "Remboursement de la facture {{invoiceId}}",
61706
- "accounting.creditNotePosted.entryDescription": "Avoir {{creditNoteId}} pour la facture {{invoiceId}}",
61707
- "accounting.standaloneCreditNotePosted.entryDescription": "Avoir {{creditNoteId}}",
61708
63360
  "accounting.revrec.entryDescription": "Reconnaissance du chiffre d'affaires pour l'\xE9ch\xE9ancier {{scheduleId}}, p\xE9riode {{periodStart}} - {{periodEnd}}",
63361
+ "accounting.standaloneCreditNotePosted.entryDescription": "Avoir {{creditNoteId}}",
63362
+ "accounting.transactionRefunded.entryDescription": "Remboursement de la facture {{invoiceId}}",
63363
+ "accounting.transactionSettled.entryDescription": "R\xE8glement de la facture {{invoiceId}}",
61709
63364
  "creditNotes.refundChargeName": "Remboursement pour facture",
61710
63365
  "credits.bundleOf": "{{productName}} - Pack de {{creditCount}} cr\xE9dits",
61711
63366
  "credits.unitsOf": "{{productName}} - {{creditCount}} cr\xE9dits",
@@ -61719,9 +63374,9 @@ var fr = {
61719
63374
  "invoices.prorata.paymentForItemFullPeriod": "Paiement pour",
61720
63375
  "invoices.prorata.refundForItem": "Remboursement au prorata pour",
61721
63376
  "invoices.prorata.refundForItemFullPeriod": "Remboursement pour",
61722
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 solde expir\xE9",
61723
63377
  "subscriptions.closingChargeName": "Frais de cl\xF4ture pour abonnement",
61724
63378
  "subscriptions.correction": "Ajustement p\xE9riode pr\xE9c\xE9dente",
63379
+ "subscriptions.reinstatementRechargeName": "Recharge de r\xE9tablissement de la p\xE9riode annul\xE9e",
61725
63380
  "subscriptions.updates.addCoupon": "Ajout du coupon {{couponName}}",
61726
63381
  "subscriptions.updates.addProduct": "Ajout {{productName}}",
61727
63382
  "subscriptions.updates.removeCoupon": "Retrait du coupon {{couponName}}",
@@ -61736,22 +63391,23 @@ var fr = {
61736
63391
  "subscriptions.updates.updateCount.description.prorata.committed.not_invoiced": "Montant de {{amount}} (avec un minimum engag\xE9 de {{committedCount}}) non factur\xE9 pour la p\xE9riode proratis\xE9e",
61737
63392
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Cette ligne a \xE9t\xE9 factur\xE9e pour la p\xE9riode proratis\xE9e",
61738
63393
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Montant de {{amount}} non factur\xE9 pour la p\xE9riode proratis\xE9e",
61739
- "subscriptions.updates.updatePrices": "Mise \xE0 jour des prix pour {{productName}}"
63394
+ "subscriptions.updates.updatePrices": "Mise \xE0 jour des prix pour {{productName}}",
63395
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 solde expir\xE9"
61740
63396
  };
61741
63397
 
61742
63398
  // ../hyperline-i18n/build/locales/it.js
61743
63399
  var it = {
61744
- "accounting.invoicePosted.entryDescription": "Registrazione contabile per la fattura {{invoiceId}}",
61745
- "accounting.transactionSettled.entryDescription": "Regolamento pagamento per la fattura {{invoiceId}}",
61746
- "accounting.transactionRefunded.entryDescription": "Rimborso per la fattura {{invoiceId}}",
61747
63400
  "accounting.creditNotePosted.entryDescription": "Nota di credito {{creditNoteId}} per la fattura {{invoiceId}}",
61748
- "accounting.standaloneCreditNotePosted.entryDescription": "Nota di credito {{creditNoteId}}",
63401
+ "accounting.invoicePosted.entryDescription": "Registrazione contabile per la fattura {{invoiceId}}",
63402
+ "accounting.revrec.closedPeriodFallbackNote": " (registrato nel prossimo periodo aperto \u2014 periodo contabile di destinazione chiuso; data originale {{originalDate}})",
61749
63403
  "accounting.revrec.creditLineDescription": "Riconoscere i ricavi \u2013 programma {{scheduleId}}, periodo {{periodDate}}",
61750
63404
  "accounting.revrec.debitLineDescription": "Diminuzione dei ricavi differiti \u2013 programma {{scheduleId}}, periodo {{periodDate}}",
61751
63405
  "accounting.revrec.discountCreditLineDescription": "Riconoscere il contra-ricavo (sconto) \u2013 programma {{scheduleId}}, periodo {{periodDate}}",
61752
- "accounting.revrec.closedPeriodFallbackNote": " (registrato nel prossimo periodo aperto \u2014 periodo contabile di destinazione chiuso; data originale {{originalDate}})",
61753
63406
  "accounting.revrec.discountDebitLineDescription": "Diminuzione dello sconto differito \u2013 programma {{scheduleId}}, periodo {{periodDate}}",
61754
63407
  "accounting.revrec.entryDescription": "Riconoscimento dei ricavi per il programma {{scheduleId}}, periodo {{periodStart}} - {{periodEnd}}",
63408
+ "accounting.standaloneCreditNotePosted.entryDescription": "Nota di credito {{creditNoteId}}",
63409
+ "accounting.transactionRefunded.entryDescription": "Rimborso per la fattura {{invoiceId}}",
63410
+ "accounting.transactionSettled.entryDescription": "Regolamento pagamento per la fattura {{invoiceId}}",
61755
63411
  "creditNotes.refundChargeName": "Rimborso per fattura",
61756
63412
  "credits.bundleOf": "{{productName}} - Pacchetto di {{creditCount}} crediti",
61757
63413
  "credits.unitsOf": "{{productName}} - {{creditCount}} crediti",
@@ -61765,9 +63421,9 @@ var it = {
61765
63421
  "invoices.prorata.paymentForItemFullPeriod": "Pagamento per",
61766
63422
  "invoices.prorata.refundForItem": "Rimborso proporzionale per",
61767
63423
  "invoices.prorata.refundForItemFullPeriod": "Rimborso per",
61768
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo scaduto",
61769
63424
  "subscriptions.closingChargeName": "Costo di chiusura per abbonamento",
61770
63425
  "subscriptions.correction": "Correzione periodo precedente",
63426
+ "subscriptions.reinstatementRechargeName": "Ricarica di reintegrazione del periodo annullato",
61771
63427
  "subscriptions.updates.addCoupon": "Aggiungi coupon {{couponName}}",
61772
63428
  "subscriptions.updates.addProduct": "Aggiungi {{productName}}",
61773
63429
  "subscriptions.updates.removeCoupon": "Rimuovi coupon {{couponName}}",
@@ -61782,14 +63438,29 @@ var it = {
61782
63438
  "subscriptions.updates.updateCount.description.prorata.committed.not_invoiced": "Importo di {{amount}} (con un minimo impegnato di {{committedCount}}) non fatturato per il periodo proporzionato",
61783
63439
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Questa voce \xE8 stata fatturata per il periodo proporzionato",
61784
63440
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Importo di {{amount}} non fatturato per il periodo proporzionato",
61785
- "subscriptions.updates.updatePrices": "Aggiorna prezzi per {{productName}}"
63441
+ "subscriptions.updates.updatePrices": "Aggiorna prezzi per {{productName}}",
63442
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo scaduto"
61786
63443
  };
61787
63444
 
61788
63445
  // ../hyperline-i18n/build/locales/lt.js
61789
63446
  var lt = {
63447
+ "accounting.creditNotePosted.entryDescription": "Kreditin\u0117 s\u0105skaita {{creditNoteId}} s\u0105skaitai fakt\u016Brai {{invoiceId}}",
63448
+ "accounting.invoicePosted.entryDescription": "I\u0161ra\u0161ytos s\u0105skaitos fakt\u016Bros {{invoiceId}} registravimo \u012Fra\u0161as",
63449
+ "accounting.revrec.closedPeriodFallbackNote": " (u\u017Eregistruota kitame atvirame laikotarpyje, nes tikslinis apskaitos laikotarpis u\u017Edarytas; pradin\u0117 data {{originalDate}})",
63450
+ "accounting.revrec.creditLineDescription": "Pajam\u0173 pripa\u017Einimas \u2013 grafikas {{scheduleId}}, laikotarpis {{periodDate}}",
63451
+ "accounting.revrec.debitLineDescription": "Atid\u0117t\u0173j\u0173 pajam\u0173 suma\u017Einimas \u2013 grafikas {{scheduleId}}, laikotarpis {{periodDate}}",
63452
+ "accounting.revrec.discountCreditLineDescription": "Pajamas ma\u017Einan\u010Dios sumos (nuolaidos) pripa\u017Einimas \u2013 grafikas {{scheduleId}}, laikotarpis {{periodDate}}",
63453
+ "accounting.revrec.discountDebitLineDescription": "Atid\u0117tosios nuolaidos suma\u017Einimas \u2013 grafikas {{scheduleId}}, laikotarpis {{periodDate}}",
63454
+ "accounting.revrec.entryDescription": "Pajam\u0173 pripa\u017Einimas pagal grafik\u0105 {{scheduleId}}, laikotarpis {{periodStart}}\u2013{{periodEnd}}",
63455
+ "accounting.standaloneCreditNotePosted.entryDescription": "Kreditin\u0117 s\u0105skaita {{creditNoteId}}",
63456
+ "accounting.transactionRefunded.entryDescription": "S\u0105skaitos fakt\u016Bros {{invoiceId}} gr\u0105\u017Einimas",
63457
+ "accounting.transactionSettled.entryDescription": "S\u0105skaitos fakt\u016Bros {{invoiceId}} mok\u0117jimo sudengimas",
61790
63458
  "creditNotes.refundChargeName": "S\u0105skaitos fakt\u016Bros gr\u0105\u017Einimas",
61791
63459
  "credits.bundleOf": "{{productName}} \u2013 {{creditCount}} kredit\u0173 paketas",
61792
63460
  "credits.unitsOf": "{{productName}} \u2013 {{creditCount}} kredit\u0173",
63461
+ "einvoicing.paymentFromWallet": "Mok\u0117jimas i\u0161 pinigin\u0117s",
63462
+ "einvoicing.paymentProcessed": "Mok\u0117jimas apdorotas",
63463
+ "einvoicing.paymentReceived": "Mok\u0117jimas gautas",
61793
63464
  "invoices.outstandingProduct.description": "Neapmok\u0117ta {{date}} i\u0161ra\u0161ytos s\u0105skaitos fakt\u016Bros{{invoiceNumber}} suma",
61794
63465
  "invoices.outstandingProduct.descriptionPeriod": "Neapmok\u0117ta s\u0105skaitos fakt\u016Bros{{invoiceNumber}} suma u\u017E laikotarp\u012F nuo {{periodStart}} iki {{periodEnd}}",
61795
63466
  "invoices.outstandingProduct.name": "Neapmok\u0117tas likutis",
@@ -61797,53 +63468,40 @@ var lt = {
61797
63468
  "invoices.prorata.paymentForItemFullPeriod": "Mok\u0117jimas u\u017E",
61798
63469
  "invoices.prorata.refundForItem": "Proporcingas gr\u0105\u017Einimas u\u017E",
61799
63470
  "invoices.prorata.refundForItemFullPeriod": "Gr\u0105\u017Einimas u\u017E",
61800
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 nebegaliojantis likutis",
61801
63471
  "subscriptions.closingChargeName": "Prenumeratos u\u017Ebaigimo mokestis",
61802
63472
  "subscriptions.correction": "Ankstesnio laikotarpio koregavimas",
63473
+ "subscriptions.reinstatementRechargeName": "Atnaujinimo \u012Fmokos u\u017E nutraukt\u0105 laikotarp\u012F",
61803
63474
  "subscriptions.updates.addCoupon": "Prid\u0117ti kupon\u0105 {{couponName}}",
61804
63475
  "subscriptions.updates.addProduct": "Prid\u0117ti {{productName}}",
61805
63476
  "subscriptions.updates.removeCoupon": "Pa\u0161alinti kupon\u0105 {{couponName}}",
61806
63477
  "subscriptions.updates.removeProduct": "Pa\u0161alinti {{productName}}",
61807
63478
  "subscriptions.updates.unit": "vnt.",
61808
- "subscriptions.updates.updatePrices": "Atnaujinti {{productName}} kainas",
61809
63479
  "subscriptions.updates.updateCount": "Atnaujinti {{productName}} kiek\u012F ({{previousCount}} \u2192 {{newCount}} {{unit}})",
61810
- "subscriptions.updates.updateCount.description.prorata.committed.invoiced": "Pritaikytas minimalus \u012Fsipareigotas {{committedCount}} kiekis.",
61811
- "subscriptions.updates.updateCount.description.prorata.committed.not_invoiced": "Proporcingam laikotarpiui nei\u0161ra\u0161yta {{amount}} suma (minimalus \u012Fsipareigotas kiekis \u2013 {{committedCount}})",
61812
- "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "U\u017E \u0161i\u0105 eilut\u0119 proporcingam laikotarpiui s\u0105skaita fakt\u016Bra i\u0161ra\u0161yta",
61813
- "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Proporcingam laikotarpiui nei\u0161ra\u0161yta {{amount}} suma",
61814
63480
  "subscriptions.updates.updateCount.description.full.committed.invoiced": "Visam laikotarpiui pritaikytas minimalus \u012Fsipareigotas {{committedCount}} kiekis.",
61815
63481
  "subscriptions.updates.updateCount.description.full.committed.not_invoiced": "Visam laikotarpiui nei\u0161ra\u0161yta {{amount}} suma (minimalus \u012Fsipareigotas kiekis \u2013 {{committedCount}})",
61816
63482
  "subscriptions.updates.updateCount.description.full.not_committed.invoiced": "U\u017E \u0161i\u0105 eilut\u0119 visam laikotarpiui s\u0105skaita fakt\u016Bra i\u0161ra\u0161yta",
61817
63483
  "subscriptions.updates.updateCount.description.full.not_committed.not_invoiced": "Visam laikotarpiui nei\u0161ra\u0161yta {{amount}} suma",
61818
- "accounting.invoicePosted.entryDescription": "I\u0161ra\u0161ytos s\u0105skaitos fakt\u016Bros {{invoiceId}} registravimo \u012Fra\u0161as",
61819
- "accounting.transactionSettled.entryDescription": "S\u0105skaitos fakt\u016Bros {{invoiceId}} mok\u0117jimo sudengimas",
61820
- "accounting.transactionRefunded.entryDescription": "S\u0105skaitos fakt\u016Bros {{invoiceId}} gr\u0105\u017Einimas",
61821
- "accounting.creditNotePosted.entryDescription": "Kreditin\u0117 s\u0105skaita {{creditNoteId}} s\u0105skaitai fakt\u016Brai {{invoiceId}}",
61822
- "accounting.standaloneCreditNotePosted.entryDescription": "Kreditin\u0117 s\u0105skaita {{creditNoteId}}",
61823
- "accounting.revrec.entryDescription": "Pajam\u0173 pripa\u017Einimas pagal grafik\u0105 {{scheduleId}}, laikotarpis {{periodStart}}\u2013{{periodEnd}}",
61824
- "accounting.revrec.debitLineDescription": "Atid\u0117t\u0173j\u0173 pajam\u0173 suma\u017Einimas \u2013 grafikas {{scheduleId}}, laikotarpis {{periodDate}}",
61825
- "accounting.revrec.creditLineDescription": "Pajam\u0173 pripa\u017Einimas \u2013 grafikas {{scheduleId}}, laikotarpis {{periodDate}}",
61826
- "accounting.revrec.discountDebitLineDescription": "Atid\u0117tosios nuolaidos suma\u017Einimas \u2013 grafikas {{scheduleId}}, laikotarpis {{periodDate}}",
61827
- "accounting.revrec.discountCreditLineDescription": "Pajamas ma\u017Einan\u010Dios sumos (nuolaidos) pripa\u017Einimas \u2013 grafikas {{scheduleId}}, laikotarpis {{periodDate}}",
61828
- "accounting.revrec.closedPeriodFallbackNote": " (u\u017Eregistruota kitame atvirame laikotarpyje, nes tikslinis apskaitos laikotarpis u\u017Edarytas; pradin\u0117 data {{originalDate}})",
61829
- "einvoicing.paymentProcessed": "Mok\u0117jimas apdorotas",
61830
- "einvoicing.paymentReceived": "Mok\u0117jimas gautas",
61831
- "einvoicing.paymentFromWallet": "Mok\u0117jimas i\u0161 pinigin\u0117s"
63484
+ "subscriptions.updates.updateCount.description.prorata.committed.invoiced": "Pritaikytas minimalus \u012Fsipareigotas {{committedCount}} kiekis.",
63485
+ "subscriptions.updates.updateCount.description.prorata.committed.not_invoiced": "Proporcingam laikotarpiui nei\u0161ra\u0161yta {{amount}} suma (minimalus \u012Fsipareigotas kiekis \u2013 {{committedCount}})",
63486
+ "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "U\u017E \u0161i\u0105 eilut\u0119 proporcingam laikotarpiui s\u0105skaita fakt\u016Bra i\u0161ra\u0161yta",
63487
+ "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Proporcingam laikotarpiui nei\u0161ra\u0161yta {{amount}} suma",
63488
+ "subscriptions.updates.updatePrices": "Atnaujinti {{productName}} kainas",
63489
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 nebegaliojantis likutis"
61832
63490
  };
61833
63491
 
61834
63492
  // ../hyperline-i18n/build/locales/nl.js
61835
63493
  var nl = {
61836
- "accounting.invoicePosted.entryDescription": "Boekingsregel voor factuur {{invoiceId}}",
61837
- "accounting.transactionSettled.entryDescription": "Betalingsafwikkeling voor factuur {{invoiceId}}",
61838
- "accounting.transactionRefunded.entryDescription": "Terugbetaling voor factuur {{invoiceId}}",
61839
63494
  "accounting.creditNotePosted.entryDescription": "Creditnota {{creditNoteId}} voor factuur {{invoiceId}}",
61840
- "accounting.standaloneCreditNotePosted.entryDescription": "Creditnota {{creditNoteId}}",
63495
+ "accounting.invoicePosted.entryDescription": "Boekingsregel voor factuur {{invoiceId}}",
63496
+ "accounting.revrec.closedPeriodFallbackNote": " (geboekt in de volgende open periode \u2014 doelboekingsperiode gesloten; oorspronkelijke datum {{originalDate}})",
61841
63497
  "accounting.revrec.creditLineDescription": "Omzet erkennen \u2013 schema {{scheduleId}}, periode {{periodDate}}",
61842
63498
  "accounting.revrec.debitLineDescription": "Uitgestelde omzet verlagen \u2013 schema {{scheduleId}}, periode {{periodDate}}",
61843
63499
  "accounting.revrec.discountCreditLineDescription": "Omzetvermindering (korting) erkennen \u2013 schema {{scheduleId}}, periode {{periodDate}}",
61844
- "accounting.revrec.closedPeriodFallbackNote": " (geboekt in de volgende open periode \u2014 doelboekingsperiode gesloten; oorspronkelijke datum {{originalDate}})",
61845
63500
  "accounting.revrec.discountDebitLineDescription": "Uitgestelde korting verlagen \u2013 schema {{scheduleId}}, periode {{periodDate}}",
61846
63501
  "accounting.revrec.entryDescription": "Omzeterkenning voor schema {{scheduleId}}, periode {{periodStart}} - {{periodEnd}}",
63502
+ "accounting.standaloneCreditNotePosted.entryDescription": "Creditnota {{creditNoteId}}",
63503
+ "accounting.transactionRefunded.entryDescription": "Terugbetaling voor factuur {{invoiceId}}",
63504
+ "accounting.transactionSettled.entryDescription": "Betalingsafwikkeling voor factuur {{invoiceId}}",
61847
63505
  "creditNotes.refundChargeName": "Terugbetaling voor factuur",
61848
63506
  "credits.bundleOf": "{{productName}} - Bundel van {{creditCount}} credits",
61849
63507
  "credits.unitsOf": "{{productName}} - {{creditCount}} credits",
@@ -61857,9 +63515,9 @@ var nl = {
61857
63515
  "invoices.prorata.paymentForItemFullPeriod": "Betaling voor",
61858
63516
  "invoices.prorata.refundForItem": "Gedeeltelijke terugbetaling voor",
61859
63517
  "invoices.prorata.refundForItemFullPeriod": "Terugbetaling voor",
61860
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 verlopen saldo",
61861
63518
  "subscriptions.closingChargeName": "Afsluitkosten voor abonnement",
61862
63519
  "subscriptions.correction": "Aanpassing vorige periode",
63520
+ "subscriptions.reinstatementRechargeName": "Herstelkosten van geannuleerde periode",
61863
63521
  "subscriptions.updates.addCoupon": "Coupon toevoegen {{couponName}}",
61864
63522
  "subscriptions.updates.addProduct": "{{productName}} toevoegen",
61865
63523
  "subscriptions.updates.removeCoupon": "Coupon verwijderen {{couponName}}",
@@ -61874,22 +63532,23 @@ var nl = {
61874
63532
  "subscriptions.updates.updateCount.description.prorata.committed.not_invoiced": "Bedrag van {{amount}} (met een minimaal toegezegd aantal van {{committedCount}}) niet gefactureerd voor de geproportioneerde periode",
61875
63533
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Deze regel is gefactureerd voor de geproportioneerde periode",
61876
63534
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Bedrag van {{amount}} niet gefactureerd voor de geproportioneerde periode",
61877
- "subscriptions.updates.updatePrices": "Prijzen bijwerken voor {{productName}}"
63535
+ "subscriptions.updates.updatePrices": "Prijzen bijwerken voor {{productName}}",
63536
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 verlopen saldo"
61878
63537
  };
61879
63538
 
61880
63539
  // ../hyperline-i18n/build/locales/pl.js
61881
63540
  var pl = {
61882
- "accounting.invoicePosted.entryDescription": "Zapis ksi\u0119gowy dla faktury {{invoiceId}}",
61883
- "accounting.transactionSettled.entryDescription": "Rozliczenie p\u0142atno\u015Bci dla faktury {{invoiceId}}",
61884
- "accounting.transactionRefunded.entryDescription": "Zwrot za faktur\u0119 {{invoiceId}}",
61885
63541
  "accounting.creditNotePosted.entryDescription": "Nota kredytowa {{creditNoteId}} dla faktury {{invoiceId}}",
61886
- "accounting.standaloneCreditNotePosted.entryDescription": "Nota kredytowa {{creditNoteId}}",
63542
+ "accounting.invoicePosted.entryDescription": "Zapis ksi\u0119gowy dla faktury {{invoiceId}}",
63543
+ "accounting.revrec.closedPeriodFallbackNote": " (zaksi\u0119gowano w nast\u0119pnym otwartym okresie \u2014 docelowy okres ksi\u0119gowy zamkni\u0119ty; pierwotna data {{originalDate}})",
61887
63544
  "accounting.revrec.creditLineDescription": "Rozpoznanie przychodu \u2013 harmonogram {{scheduleId}}, okres {{periodDate}}",
61888
63545
  "accounting.revrec.debitLineDescription": "Zmniejszenie przychod\xF3w przysz\u0142ych okres\xF3w \u2013 harmonogram {{scheduleId}}, okres {{periodDate}}",
61889
63546
  "accounting.revrec.discountCreditLineDescription": "Rozpoznanie kontra-przychodu (rabat) \u2013 harmonogram {{scheduleId}}, okres {{periodDate}}",
61890
- "accounting.revrec.closedPeriodFallbackNote": " (zaksi\u0119gowano w nast\u0119pnym otwartym okresie \u2014 docelowy okres ksi\u0119gowy zamkni\u0119ty; pierwotna data {{originalDate}})",
61891
63547
  "accounting.revrec.discountDebitLineDescription": "Zmniejszenie odroczonego rabatu \u2013 harmonogram {{scheduleId}}, okres {{periodDate}}",
61892
63548
  "accounting.revrec.entryDescription": "Rozpoznanie przychodu dla harmonogramu {{scheduleId}}, okres {{periodStart}} - {{periodEnd}}",
63549
+ "accounting.standaloneCreditNotePosted.entryDescription": "Nota kredytowa {{creditNoteId}}",
63550
+ "accounting.transactionRefunded.entryDescription": "Zwrot za faktur\u0119 {{invoiceId}}",
63551
+ "accounting.transactionSettled.entryDescription": "Rozliczenie p\u0142atno\u015Bci dla faktury {{invoiceId}}",
61893
63552
  "creditNotes.refundChargeName": "Zwrot za faktur\u0119",
61894
63553
  "credits.bundleOf": "{{productName}} - Pakiet {{creditCount}} kredyt\xF3w",
61895
63554
  "credits.unitsOf": "{{productName}} - {{creditCount}} kredyt\xF3w",
@@ -61903,9 +63562,9 @@ var pl = {
61903
63562
  "invoices.prorata.paymentForItemFullPeriod": "P\u0142atno\u015B\u0107 za",
61904
63563
  "invoices.prorata.refundForItem": "Zwrot proporcjonalny za",
61905
63564
  "invoices.prorata.refundForItemFullPeriod": "Zwrot za",
61906
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 wygas\u0142e saldo",
61907
63565
  "subscriptions.closingChargeName": "Op\u0142ata za zamkni\u0119cie subskrypcji",
61908
63566
  "subscriptions.correction": "Korekta poprzedniego okresu",
63567
+ "subscriptions.reinstatementRechargeName": "Op\u0142ata za przywr\xF3cenie anulowanego okresu",
61909
63568
  "subscriptions.updates.addCoupon": "Dodaj kupon {{couponName}}",
61910
63569
  "subscriptions.updates.addProduct": "Dodaj {{productName}}",
61911
63570
  "subscriptions.updates.removeCoupon": "Usu\u0144 kupon {{couponName}}",
@@ -61920,22 +63579,23 @@ var pl = {
61920
63579
  "subscriptions.updates.updateCount.description.prorata.committed.not_invoiced": "Kwota {{amount}} (z minimaln\u0105 zobowi\u0105zan\u0105 ilo\u015Bci\u0105 {{committedCount}}) niefakturowana za okres proporcjonalny",
61921
63580
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Ta pozycja zosta\u0142a zafakturowana za okres proporcjonalny",
61922
63581
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Kwota {{amount}} niefakturowana za okres proporcjonalny",
61923
- "subscriptions.updates.updatePrices": "Aktualizuj ceny dla {{productName}}"
63582
+ "subscriptions.updates.updatePrices": "Aktualizuj ceny dla {{productName}}",
63583
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 wygas\u0142e saldo"
61924
63584
  };
61925
63585
 
61926
63586
  // ../hyperline-i18n/build/locales/pt.js
61927
63587
  var pt = {
61928
- "accounting.invoicePosted.entryDescription": "Lan\xE7amento cont\xE1bil para a fatura {{invoiceId}}",
61929
- "accounting.transactionSettled.entryDescription": "Liquida\xE7\xE3o de pagamento para a fatura {{invoiceId}}",
61930
- "accounting.transactionRefunded.entryDescription": "Reembolso da fatura {{invoiceId}}",
61931
63588
  "accounting.creditNotePosted.entryDescription": "Nota de cr\xE9dito {{creditNoteId}} para a fatura {{invoiceId}}",
61932
- "accounting.standaloneCreditNotePosted.entryDescription": "Nota de cr\xE9dito {{creditNoteId}}",
63589
+ "accounting.invoicePosted.entryDescription": "Lan\xE7amento cont\xE1bil para a fatura {{invoiceId}}",
63590
+ "accounting.revrec.closedPeriodFallbackNote": " (lan\xE7ado no pr\xF3ximo per\xEDodo aberto \u2014 per\xEDodo cont\xE1bil de destino fechado; data original {{originalDate}})",
61933
63591
  "accounting.revrec.creditLineDescription": "Reconhecer receita \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
61934
63592
  "accounting.revrec.debitLineDescription": "Diminui\xE7\xE3o da receita diferida \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
61935
63593
  "accounting.revrec.discountCreditLineDescription": "Reconhecer contra-receita (desconto) \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
61936
- "accounting.revrec.closedPeriodFallbackNote": " (lan\xE7ado no pr\xF3ximo per\xEDodo aberto \u2014 per\xEDodo cont\xE1bil de destino fechado; data original {{originalDate}})",
61937
63594
  "accounting.revrec.discountDebitLineDescription": "Diminui\xE7\xE3o do desconto diferido \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
61938
63595
  "accounting.revrec.entryDescription": "Reconhecimento de receita para o cronograma {{scheduleId}}, per\xEDodo {{periodStart}} - {{periodEnd}}",
63596
+ "accounting.standaloneCreditNotePosted.entryDescription": "Nota de cr\xE9dito {{creditNoteId}}",
63597
+ "accounting.transactionRefunded.entryDescription": "Reembolso da fatura {{invoiceId}}",
63598
+ "accounting.transactionSettled.entryDescription": "Liquida\xE7\xE3o de pagamento para a fatura {{invoiceId}}",
61939
63599
  "creditNotes.refundChargeName": "Reembolso pela fatura",
61940
63600
  "credits.bundleOf": "{{productName}} - Pacote de {{creditCount}} cr\xE9ditos",
61941
63601
  "credits.unitsOf": "{{productName}} - {{creditCount}} cr\xE9ditos",
@@ -61949,9 +63609,9 @@ var pt = {
61949
63609
  "invoices.prorata.paymentForItemFullPeriod": "Pagamento por",
61950
63610
  "invoices.prorata.refundForItem": "Reembolso proporcional por",
61951
63611
  "invoices.prorata.refundForItemFullPeriod": "Reembolso por",
61952
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo expirado",
61953
63612
  "subscriptions.closingChargeName": "Taxa de encerramento da assinatura",
61954
63613
  "subscriptions.correction": "Ajuste do per\xEDodo anterior",
63614
+ "subscriptions.reinstatementRechargeName": "Recarga de reintegra\xE7\xE3o do per\xEDodo cancelado",
61955
63615
  "subscriptions.updates.addCoupon": "Adicionar cupom {{couponName}}",
61956
63616
  "subscriptions.updates.addProduct": "Adicionar {{productName}}",
61957
63617
  "subscriptions.updates.removeCoupon": "Remover cupom {{couponName}}",
@@ -61966,7 +63626,8 @@ var pt = {
61966
63626
  "subscriptions.updates.updateCount.description.prorata.committed.not_invoiced": "Valor de {{amount}} (com um m\xEDnimo comprometido de {{committedCount}}) n\xE3o faturado para o per\xEDodo proporcional",
61967
63627
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Esta linha foi faturada para o per\xEDodo proporcional",
61968
63628
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Valor de {{amount}} n\xE3o faturado para o per\xEDodo proporcional",
61969
- "subscriptions.updates.updatePrices": "Atualizar pre\xE7os para {{productName}}"
63629
+ "subscriptions.updates.updatePrices": "Atualizar pre\xE7os para {{productName}}",
63630
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo expirado"
61970
63631
  };
61971
63632
 
61972
63633
  // ../hyperline-i18n/build/language.js
@@ -64660,6 +66321,8 @@ var usStates = [
64660
66321
 
64661
66322
  // ../hyperline-lib/build/utils/dates.js
64662
66323
  var import_shared2 = __toESM(require_shared(), 1);
66324
+ var PERIOD_BOUND_DRIFT_TOLERANCE_MS = 2 * 60 * 1e3;
66325
+ var DST_SHIFT_MS = 60 * 60 * 1e3;
64663
66326
 
64664
66327
  // ../hyperline-lib/build/utils/document.js
64665
66328
  var import_shared3 = __toESM(require_shared(), 1);
@@ -64671,6 +66334,11 @@ import * as https from "node:https";
64671
66334
  import { createHash as createHash2 } from "node:crypto";
64672
66335
  import { deepEqual } from "fast-equals";
64673
66336
 
66337
+ // ../hyperline-lib/build/utils/realignDatesToTimezone.js
66338
+ var import_shared4 = __toESM(require_shared(), 1);
66339
+ var MILLISECONDS_PER_DAY = 24 * 60 * 60 * 1e3;
66340
+ var LAST_MILLISECOND_OF_DAY = MILLISECONDS_PER_DAY - 1;
66341
+
64674
66342
  // ../hyperline-lib/build/utils/api/filterBuilder.js
64675
66343
  var baseAuthorizedOperators = ["not", "isNull", "isNotNull"];
64676
66344
  var booleanAuthorizedOperators = [
@@ -64737,7 +66405,151 @@ var isAxiosError = axios.isAxiosError;
64737
66405
 
64738
66406
  // ../hyperline-lib/build/httpClient/httpClient.js
64739
66407
  import axios2 from "axios";
64740
- import axiosRetry, { isNetworkOrIdempotentRequestError } from "axios-retry";
66408
+ import axiosRetry, { isNetworkOrIdempotentRequestError, retryAfter } from "axios-retry";
66409
+
66410
+ // ../hyperline-lib/build/httpClient/logRedaction.js
66411
+ var REDACTED_KEY_NAMES = /* @__PURE__ */ new Set([
66412
+ "accesstoken",
66413
+ "apikey",
66414
+ "apitoken",
66415
+ "assertion",
66416
+ "authtoken",
66417
+ "clientassertion",
66418
+ "codeverifier",
66419
+ "credentials",
66420
+ "idtoken",
66421
+ "privatekey",
66422
+ "refreshtoken",
66423
+ "sessiontoken",
66424
+ "token"
66425
+ ]);
66426
+ var REDACTED_KEY_SUFFIX_PATTERN = /(secret|password)$/;
66427
+ var REDACTED_KEY_CANDIDATE_PATTERN = /token|key|secret|password|assertion|verifier|credentials/i;
66428
+ var REDACTED_VALUE = "<redacted>";
66429
+ var MAX_REDACTION_DEPTH = 10;
66430
+ var MAX_PARSED_STRING_LENGTH = 16384;
66431
+ var MAX_VISITED_NODES = 1e3;
66432
+ var MAX_CONTAINER_ENTRIES = MAX_VISITED_NODES;
66433
+ function redactLogBody({ body }) {
66434
+ return redactValue({
66435
+ value: body,
66436
+ depth: MAX_REDACTION_DEPTH,
66437
+ budget: { remainingNodes: MAX_VISITED_NODES }
66438
+ });
66439
+ }
66440
+ function redactLogUrl({ url: url2 }) {
66441
+ const queryIndex = url2.indexOf("?");
66442
+ if (queryIndex === -1 || url2.length > MAX_PARSED_STRING_LENGTH) {
66443
+ return url2;
66444
+ }
66445
+ const redactedQuery = redactFormEncoded({ text: url2.slice(queryIndex + 1) });
66446
+ return redactedQuery === void 0 ? url2 : `${url2.slice(0, queryIndex)}?${redactedQuery}`;
66447
+ }
66448
+ function redactValue({ value, depth, budget }) {
66449
+ if (depth <= 0 || budget.remainingNodes <= 0) {
66450
+ return value;
66451
+ }
66452
+ budget.remainingNodes -= 1;
66453
+ if (typeof value === "string") {
66454
+ return redactString({ text: value, budget });
66455
+ }
66456
+ if (value instanceof URLSearchParams) {
66457
+ return redactFormEncoded({ text: value.toString() }) ?? value;
66458
+ }
66459
+ if (Array.isArray(value)) {
66460
+ return redactArray({ items: value, depth, budget });
66461
+ }
66462
+ if (isPlainObject2(value)) {
66463
+ return redactObject({ record: value, depth, budget });
66464
+ }
66465
+ return value;
66466
+ }
66467
+ function redactArray({ items, depth, budget }) {
66468
+ if (items.length > MAX_CONTAINER_ENTRIES) {
66469
+ return items;
66470
+ }
66471
+ let redactedItems;
66472
+ for (const [index, item] of items.entries()) {
66473
+ if (budget.remainingNodes <= 0) {
66474
+ break;
66475
+ }
66476
+ const redactedItem = redactValue({ value: item, depth: depth - 1, budget });
66477
+ if (redactedItem !== item) {
66478
+ redactedItems ??= [...items];
66479
+ redactedItems[index] = redactedItem;
66480
+ }
66481
+ }
66482
+ return redactedItems ?? items;
66483
+ }
66484
+ function redactObject({ record: record2, depth, budget }) {
66485
+ const redactedEntries = /* @__PURE__ */ new Map();
66486
+ let entryCount = 0;
66487
+ for (const key in record2) {
66488
+ if (!Object.hasOwn(record2, key)) {
66489
+ continue;
66490
+ }
66491
+ entryCount += 1;
66492
+ if (entryCount > MAX_CONTAINER_ENTRIES) {
66493
+ return record2;
66494
+ }
66495
+ if (budget.remainingNodes <= 0) {
66496
+ break;
66497
+ }
66498
+ const nestedValue = record2[key];
66499
+ const redactedNestedValue = isRedactedKey({ key }) && nestedValue != null ? REDACTED_VALUE : redactValue({ value: nestedValue, depth: depth - 1, budget });
66500
+ if (redactedNestedValue !== nestedValue) {
66501
+ redactedEntries.set(key, redactedNestedValue);
66502
+ }
66503
+ }
66504
+ return redactedEntries.size === 0 ? record2 : { ...record2, ...Object.fromEntries(redactedEntries) };
66505
+ }
66506
+ function redactString({ text, budget }) {
66507
+ if (text.length > MAX_PARSED_STRING_LENGTH) {
66508
+ return text;
66509
+ }
66510
+ const trimmedText = text.trim();
66511
+ if (trimmedText.startsWith("{") || trimmedText.startsWith("[")) {
66512
+ try {
66513
+ const parsedValue = JSON.parse(trimmedText);
66514
+ const redactedValue = redactValue({
66515
+ value: parsedValue,
66516
+ depth: MAX_REDACTION_DEPTH,
66517
+ budget
66518
+ });
66519
+ return redactedValue === parsedValue ? text : JSON.stringify(redactedValue);
66520
+ } catch {
66521
+ return text;
66522
+ }
66523
+ }
66524
+ return redactFormEncoded({ text }) ?? text;
66525
+ }
66526
+ function redactFormEncoded({ text }) {
66527
+ if (!text.includes("=") || !REDACTED_KEY_CANDIDATE_PATTERN.test(text)) {
66528
+ return void 0;
66529
+ }
66530
+ const params = new URLSearchParams(text);
66531
+ let hasRedactedParam = false;
66532
+ for (const key of new Set(params.keys())) {
66533
+ if (isRedactedKey({ key })) {
66534
+ params.set(key, REDACTED_VALUE);
66535
+ hasRedactedParam = true;
66536
+ }
66537
+ }
66538
+ return hasRedactedParam ? params.toString() : void 0;
66539
+ }
66540
+ function isRedactedKey({ key }) {
66541
+ const normalizedKey = key.toLowerCase().replace(/[_-]/g, "");
66542
+ return REDACTED_KEY_NAMES.has(normalizedKey) || REDACTED_KEY_SUFFIX_PATTERN.test(normalizedKey);
66543
+ }
66544
+ function isPlainObject2(value) {
66545
+ if (typeof value !== "object" || value === null) {
66546
+ return false;
66547
+ }
66548
+ const prototype = Object.getPrototypeOf(value);
66549
+ return prototype === Object.prototype || prototype === null;
66550
+ }
66551
+
66552
+ // ../hyperline-lib/build/httpClient/httpClient.js
64741
66553
  import { AxiosError } from "axios";
64742
66554
  var recommendedRetryConfig = {
64743
66555
  retries: 3,
@@ -64805,13 +66617,14 @@ function isTooManyRequestsError(error48) {
64805
66617
  return error48.response?.status === 429;
64806
66618
  }
64807
66619
  var toLogRequest = (config4) => {
66620
+ const url2 = redactLogUrl({ url: config4.url ?? "" });
64808
66621
  return {
64809
66622
  method: config4.method ?? "",
64810
- url: config4.url ?? "",
64811
- path: config4.url ?? "",
66623
+ url: url2,
66624
+ path: url2,
64812
66625
  hostname: config4.baseURL ?? "",
64813
- originalUrl: `${config4.baseURL ?? ""}${config4.url}`,
64814
- body: config4.data,
66626
+ originalUrl: `${config4.baseURL ?? ""}${url2}`,
66627
+ body: redactLogBody({ body: config4.data }),
64815
66628
  headers: {}
64816
66629
  };
64817
66630
  };