@hyperline/cli 0.1.0-build.1.027b80a → 0.1.0-build.1.02c8787

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.
@@ -34985,10 +34985,10 @@ var require_shared = __commonJS({
34985
34985
  ZodId: () => ZodId,
34986
34986
  ZodTranslationsSchemaFn: () => ZodTranslationsSchemaFn
34987
34987
  });
34988
- var import_zod22 = require_lib();
34988
+ var import_zod23 = require_lib();
34989
34989
  var countryIds2 = ["all", ...countries.map(({ id }) => id)];
34990
- var ZodId = import_zod22.z.enum(countryIds2);
34991
- var ZodTranslationsSchemaFn = (schema) => import_zod22.z.record(import_zod22.z.string(), schema.optional());
34990
+ var ZodId = import_zod23.z.enum(countryIds2);
34991
+ var ZodTranslationsSchemaFn = (schema) => import_zod23.z.record(import_zod23.z.string(), schema.optional());
34992
34992
  var UsStates = [
34993
34993
  { id: "AA", name: "Armed Forces Americas" },
34994
34994
  { id: "AE", name: "Armed Forces Europe" },
@@ -36287,14 +36287,14 @@ var require_shared = __commonJS({
36287
36287
  ZodNumberCurrencyPositiveValue: () => ZodNumberCurrencyPositiveValue,
36288
36288
  ZodNumberCurrencyPositiveValueExcludingZero: () => ZodNumberCurrencyPositiveValueExcludingZero
36289
36289
  });
36290
- var import_zod23 = require_lib();
36291
- var ZodCurrencyId = import_zod23.z.enum(
36290
+ var import_zod24 = require_lib();
36291
+ var ZodCurrencyId = import_zod24.z.enum(
36292
36292
  all_default.map(({ id }) => id)
36293
36293
  );
36294
- var ZodNumberCurrency = 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(
36294
+ var ZodNumberCurrency = import_zod24.z.string().or(import_zod24.z.number().transform((number4) => number4)).transform((number4) => number4);
36295
+ var ZodNumberCurrencyPositiveValue = import_zod24.z.number().min(0).transform((number4) => number4).transform((number4) => number4);
36296
+ var ZodNumberCurrencyPositiveValueExcludingZero = import_zod24.z.number().gt(0).transform((number4) => number4).transform((number4) => number4);
36297
+ var ZodCurrencyMap = import_zod24.z.record(ZodNumberCurrency).refine(
36298
36298
  (data) => Object.keys(data).every((key) => ZodCurrencyId.safeParse(key).success),
36299
36299
  {
36300
36300
  message: "Invalid currency key.",
@@ -38864,7 +38864,7 @@ Examples:
38864
38864
  // build/commands/generated/accounting-rules.js
38865
38865
  function registerAccounting_RulesCommands(parent) {
38866
38866
  const resource = parent.command("accounting-rules").description("Manage accounting > rules");
38867
- resource.command("list").description(`Retrieve existing accounting rules with optional filtering.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--ledger-id <value>", `ledger_id`).option("--ledger-id.not <value>", `ledger_id__not`).option("--ledger-id.is-null <value>", `ledger_id__isNull`).option("--ledger-id.is-not-null <value>", `ledger_id__isNotNull`).option("--ledger-id.equals <value>", `ledger_id__equals`).option("--ledger-id.contains <value>", `ledger_id__contains`).option("--ledger-id.starts-with <value>", `ledger_id__startsWith`).option("--ledger-id.end-with <value>", `ledger_id__endWith`).option("--category <value>", `category`).option("--category.not <value>", `category__not`).option("--category.is-null <value>", `category__isNull`).option("--category.is-not-null <value>", `category__isNotNull`).option("--category.equals <value>", `category__equals`).option("--category.contains <value>", `category__contains`).option("--category.starts-with <value>", `category__startsWith`).option("--category.end-with <value>", `category__endWith`).addHelpText("after", `
38867
+ resource.command("list").description(`Retrieve existing accounting rules with optional filtering.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--ledger-id <value>", `ledger_id`).option("--ledger-id.not <value>", `ledger_id__not`).option("--ledger-id.equals <value>", `ledger_id__equals`).option("--ledger-id.contains <value>", `ledger_id__contains`).option("--ledger-id.starts-with <value>", `ledger_id__startsWith`).option("--ledger-id.end-with <value>", `ledger_id__endWith`).option("--category <value>", `category`).option("--category.not <value>", `category__not`).option("--category.equals <value>", `category__equals`).option("--category.contains <value>", `category__contains`).option("--category.starts-with <value>", `category__startsWith`).option("--category.end-with <value>", `category__endWith`).addHelpText("after", `
38868
38868
  Examples:
38869
38869
  hyperline accounting-rules list
38870
38870
  hyperline accounting-rules list --take <take> --ledger-id <ledger_id>`).action(async (opts) => {
@@ -38878,10 +38878,6 @@ Examples:
38878
38878
  args.ledger_id = opts.ledgerId;
38879
38879
  if (opts["ledgerId.not"] !== void 0)
38880
38880
  args.ledger_id__not = opts["ledgerId.not"];
38881
- if (opts["ledgerId.isNull"] !== void 0)
38882
- args.ledger_id__isNull = opts["ledgerId.isNull"];
38883
- if (opts["ledgerId.isNotNull"] !== void 0)
38884
- args.ledger_id__isNotNull = opts["ledgerId.isNotNull"];
38885
38881
  if (opts["ledgerId.equals"] !== void 0)
38886
38882
  args.ledger_id__equals = opts["ledgerId.equals"];
38887
38883
  if (opts["ledgerId.contains"] !== void 0)
@@ -38894,10 +38890,6 @@ Examples:
38894
38890
  args.category = opts.category;
38895
38891
  if (opts["category.not"] !== void 0)
38896
38892
  args.category__not = opts["category.not"];
38897
- if (opts["category.isNull"] !== void 0)
38898
- args.category__isNull = opts["category.isNull"];
38899
- if (opts["category.isNotNull"] !== void 0)
38900
- args.category__isNotNull = opts["category.isNotNull"];
38901
38893
  if (opts["category.equals"] !== void 0)
38902
38894
  args.category__equals = opts["category.equals"];
38903
38895
  if (opts["category.contains"] !== void 0)
@@ -38919,16 +38911,12 @@ Examples:
38919
38911
  "skip",
38920
38912
  "ledger_id",
38921
38913
  "ledger_id__not",
38922
- "ledger_id__isNull",
38923
- "ledger_id__isNotNull",
38924
38914
  "ledger_id__equals",
38925
38915
  "ledger_id__contains",
38926
38916
  "ledger_id__startsWith",
38927
38917
  "ledger_id__endWith",
38928
38918
  "category",
38929
38919
  "category__not",
38930
- "category__isNull",
38931
- "category__isNotNull",
38932
38920
  "category__equals",
38933
38921
  "category__contains",
38934
38922
  "category__startsWith",
@@ -39008,7 +38996,7 @@ Examples:
39008
38996
  queryParamKeys: []
39009
38997
  });
39010
38998
  });
39011
- resource.command("create").description(`Create a new accounting rule for account code routing or journal posting, with the filters, accounts and required fields the rule editor applies to its category.`).option("--ledger-id <value>", `Identifier of the ledger this rule belongs to.`).option("--name <value>", `Optional user-defined name for the rule.`).requiredOption("--category <value>", `Rule category (e.g. accounting_software, invoice_posted).`).requiredOption("--priority <number>", `Override order. Higher priority wins when multiple rules match.`).option("--product-ids <json>", `Product IDs to match. Empty means match all.`).option("--product-types <json>", `Product types to match. Allowed values: flat_fee, dynamic, seat, credit. Empty means match all.`).option("--customer-ids <json>", `Customer IDs for customer-specific overrides.`).option("--currencies <json>", `Currency codes to match (e.g. EUR, USD).`).option("--countries <json>", `Country codes for jurisdiction-based overrides.`).option("--tax-schemes <json>", `Tax schemes to match. A context without a tax scheme never matches a rule that sets this filter. Empty means match all.`).option("--tax-territories <json>", `Tax territory country codes to match. A context without a tax territory never matches a rule that sets this filter. Empty means match all.`).option("--tax-rate-classes <json>", `Tax rate classes to match. A context without a tax rate class never matches a rule that sets this filter. Empty means match all.`).option("--coupon-ids <json>", `Coupon IDs to match. Empty means match all.`).option("--client-provider-ids <json>", `Client provider IDs to match. Empty means match all.`).option("--payment-method-types <json>", `Payment method types to match. Empty means match all.`).option("--bank-account-ids <json>", `Bank account IDs to match. Empty means match all.`).option("--invoice-types <json>", `Invoice kinds to match: \`invoice\` or \`document\`. Refunds and other standard invoices match as \`invoice\`. A context without an invoice, such as a PSP payout, never matches a rule that sets this filter. Empty means match all.`).option("--interval-period <value>", `Billing interval period filter (months, years, etc.).`).option("--interval-count <number>", `Billing interval count filter.`).option("--custom-property-filters <json>", `Invoice custom property filters. A rule matches only when every entry matches (AND across entries), and an entry matches when the invoice value is one of its \`values\` (any-of). Matching is strict: an invoice without a value for the property never matches. Each entry adds 10 to the \`suggested_priority\` returned by the rule defaults endpoint. Allowed on invoice_posted, invoice_settled, revenue_recognition, credit_note_created and accounting_software (invoice side) rules. An invoice_settled rule with filters cannot set \`payments_clearing_ledger_account_id\`, as PSP payouts are booked without the invoice. Empty means match all.`).option("--revenue-ledger-account-id <value>", `Revenue ledger account ID used for invoice line revenue routing.`).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("--allowance-for-doubtful-accounts-id <value>", `Allowance for doubtful accounts ledger account ID, set on credit_note_created rules.`).option("--provider-fees-expense-ledger-account-id <value>", `Expense ledger account ID debited for payment provider fees when a payment settles.`).option("--payment-processing-fees-expense-ledger-account-id <value>", `Expense ledger account ID debited for payment processing fees when a payment settles. Takes precedence over \`provider_fees_expense_ledger_account_id\` when set by the same or a higher priority rule.`).option("--payment-processing-fees-revenue-ledger-account-id <value>", `Payment processing fees revenue ledger account ID, set on invoice_settled rules.`).option("--customer-credits-ledger-account-id <value>", `Customer credits ledger account ID used for credit balances.`).option("--rev-rec-method <value>", `Revenue recognition method.`).option("--rev-rec-granularity <value>", `Recognition period granularity. Used when \`rev_rec_method\` is \`over_time\`.`).option("--rev-rec-point-in-time-basis <value>", `Date revenue is recognized on. Used when \`rev_rec_method\` is \`point_in_time\`.`).option("--discount-recognition-method <value>", `Method used to recognize discounts.`).option("--journal-id <value>", `Journal ID used to route entries in the accounting provider.`).option("--entity-type <value>", `Entity type the rule applies to.`).addHelpText("after", `
38999
+ resource.command("create").description(`Create a new accounting rule for account code routing or journal posting, with the filters, accounts and required fields the rule editor applies to its category.`).option("--ledger-id <value>", `Identifier of the ledger this rule belongs to.`).option("--name <value>", `Optional user-defined name for the rule.`).requiredOption("--category <value>", `Rule category (e.g. accounting_software, invoice_posted).`).requiredOption("--priority <number>", `Override order. Higher priority wins when multiple rules match.`).option("--product-ids <json>", `Product IDs to match. Empty means match all.`).option("--product-types <json>", `Product types to match. Allowed values: flat_fee, dynamic, seat, credit. Empty means match all.`).option("--customer-ids <json>", `Customer IDs for customer-specific overrides.`).option("--currencies <json>", `Currency codes to match (e.g. EUR, USD).`).option("--countries <json>", `Country codes for jurisdiction-based overrides.`).option("--tax-schemes <json>", `Tax schemes to match. A context without a tax scheme never matches a rule that sets this filter. Empty means match all.`).option("--tax-territories <json>", `Tax territory country codes to match. A context without a tax territory never matches a rule that sets this filter. Empty means match all.`).option("--tax-rate-classes <json>", `Tax rate classes to match. A context without a tax rate class never matches a rule that sets this filter. Empty means match all.`).option("--coupon-ids <json>", `Coupon IDs to match. Empty means match all.`).option("--client-provider-ids <json>", `Client provider IDs to match. Empty means match all.`).option("--payment-method-types <json>", `Payment method types to match. Empty means match all.`).option("--bank-account-ids <json>", `Bank account IDs to match. Empty means match all.`).option("--invoice-types <json>", `Invoice kinds to match: \`invoice\` or \`document\`. Refunds and other standard invoices match as \`invoice\`. A context without an invoice, such as a PSP payout, never matches a rule that sets this filter. Empty means match all.`).option("--interval-period <value>", `Billing interval period filter (months, years, etc.).`).option("--interval-count <number>", `Billing interval count filter.`).option("--custom-property-filters <json>", `Invoice custom property filters. A rule matches only when every entry matches (AND across entries), and an entry matches when the invoice value is one of its \`values\` (any-of). Matching is strict: an invoice without a value for the property never matches. Each entry adds 10 to the \`suggested_priority\` returned by the rule defaults endpoint. Allowed on invoice_posted, invoice_settled, revenue_recognition, credit_note_created and accounting_software (invoice side) rules. An invoice_settled rule with filters cannot set \`payments_clearing_ledger_account_id\`, as PSP payouts are booked without the invoice. Empty means match all.`).option("--revenue-ledger-account-id <value>", `Revenue ledger account ID used for invoice line revenue routing. Must be a \`revenue\` account. On accounting_software rules, a \`revenue\` or \`contra_revenue\` account with entity_type invoice, an \`asset\` or \`contra_asset\` account with entity_type payment.`).option("--deferred-revenue-ledger-account-id <value>", `Deferred revenue ledger account ID used before revenue is recognized. Must be a \`liability\` account.`).option("--deferred-discount-ledger-account-id <value>", `Deferred discount ledger account ID used before discounts are recognized. Must be an \`asset\` or \`contra_liability\` account.`).option("--contra-revenue-ledger-account-id <value>", `Contra revenue ledger account ID used for amounts that reduce revenue. Must be a \`contra_revenue\` account.`).option("--discount-ledger-account-id <value>", `Discount ledger account ID used for recognized discounts. Must be a \`contra_revenue\` account.`).option("--ar-ledger-account-id <value>", `Accounts receivable ledger account ID used for invoice posting. Must be an \`asset\` account.`).option("--cash-ledger-account-id <value>", `Cash ledger account ID used for payment settlement. Must be an \`asset\` account.`).option("--payments-clearing-ledger-account-id <value>", `Payments clearing ledger account ID used while payments settle. Must be an \`asset\` account.`).option("--output-tax-ledger-account-id <value>", `Output tax ledger account ID used for tax liability. Must be a \`liability\` account.`).option("--uncollectible-debit-ledger-account-id <value>", `Ledger account ID debited when an invoice becomes uncollectible. Must be an \`asset\` account, for doubtful-receivable reclassification, or an \`expense\` account, for direct write-off.`).option("--allowance-for-doubtful-accounts-id <value>", `Allowance for doubtful accounts ledger account ID, set on credit_note_created rules. Must be a \`contra_asset\` account.`).option("--provider-fees-expense-ledger-account-id <value>", `Expense ledger account ID debited for payment provider fees when a payment settles. Must be an \`expense\` account.`).option("--payment-processing-fees-expense-ledger-account-id <value>", `Expense ledger account ID debited for payment processing fees when a payment settles. Takes precedence over \`provider_fees_expense_ledger_account_id\` when set by the same or a higher priority rule. Must be an \`expense\` account.`).option("--payment-processing-fees-revenue-ledger-account-id <value>", `Payment processing fees revenue ledger account ID, set on invoice_settled rules. Must be a \`revenue\` account.`).option("--customer-credits-ledger-account-id <value>", `Customer credits ledger account ID used for credit balances. Must be a \`liability\` account.`).option("--rev-rec-method <value>", `Revenue recognition method.`).option("--rev-rec-granularity <value>", `Recognition period granularity. Used when \`rev_rec_method\` is \`over_time\`.`).option("--rev-rec-point-in-time-basis <value>", `Date revenue is recognized on. Used when \`rev_rec_method\` is \`point_in_time\`.`).option("--discount-recognition-method <value>", `Method used to recognize discounts.`).option("--journal-id <value>", `Journal ID used to route entries in the accounting provider.`).option("--entity-type <value>", `Entity type the rule applies to.`).addHelpText("after", `
39012
39000
  Examples:
39013
39001
  hyperline accounting-rules create --category <category> --priority <priority>
39014
39002
  hyperline accounting-rules create --category <category> --priority <priority> --ledger-id <ledger_id> --name <name>
@@ -39108,7 +39096,7 @@ Examples:
39108
39096
  queryParamKeys: []
39109
39097
  });
39110
39098
  });
39111
- resource.command("update").description(`Update an existing accounting rule, with the filters, accounts and required fields the rule editor applies to its category.`).requiredOption("--id <value>", `id parameter`).option("--name <value>", `Optional user-defined name for the rule.`).option("--category <value>", `Rule category. Cannot be changed after creation, must match the current category when sent.`).option("--priority <number>", `Override order. Higher priority wins when multiple rules match.`).option("--product-ids <json>", `Product IDs to match. Empty means match all.`).option("--product-types <json>", `Product types to match. Allowed values: flat_fee, dynamic, seat, credit. Empty means match all.`).option("--customer-ids <json>", `Customer IDs for customer-specific overrides.`).option("--currencies <json>", `Currency codes to match (e.g. EUR, USD).`).option("--countries <json>", `Country codes for jurisdiction-based overrides.`).option("--tax-schemes <json>", `Tax schemes to match. A context without a tax scheme never matches a rule that sets this filter. Empty means match all.`).option("--tax-territories <json>", `Tax territory country codes to match. A context without a tax territory never matches a rule that sets this filter. Empty means match all.`).option("--tax-rate-classes <json>", `Tax rate classes to match. A context without a tax rate class never matches a rule that sets this filter. Empty means match all.`).option("--coupon-ids <json>", `Coupon IDs to match. Empty means match all.`).option("--client-provider-ids <json>", `Client provider IDs to match. Empty means match all.`).option("--payment-method-types <json>", `Payment method types to match. Empty means match all.`).option("--bank-account-ids <json>", `Bank account IDs to match. Empty means match all.`).option("--invoice-types <json>", `Invoice kinds to match: \`invoice\` or \`document\`. Refunds and other standard invoices match as \`invoice\`. A context without an invoice, such as a PSP payout, never matches a rule that sets this filter. Empty means match all.`).option("--interval-period <value>", `Billing interval period filter (months, years, etc.).`).option("--interval-count <number>", `Billing interval count filter.`).option("--custom-property-filters <json>", `Invoice custom property filters. A rule matches only when every entry matches (AND across entries), and an entry matches when the invoice value is one of its \`values\` (any-of). Matching is strict: an invoice without a value for the property never matches. Each entry adds 10 to the \`suggested_priority\` returned by the rule defaults endpoint. Allowed on invoice_posted, invoice_settled, revenue_recognition, credit_note_created and accounting_software (invoice side) rules. An invoice_settled rule with filters cannot set \`payments_clearing_ledger_account_id\`, as PSP payouts are booked without the invoice. Empty means match all.`).option("--revenue-ledger-account-id <value>", `Revenue ledger account ID used for invoice line revenue routing.`).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("--allowance-for-doubtful-accounts-id <value>", `Allowance for doubtful accounts ledger account ID, set on credit_note_created rules.`).option("--provider-fees-expense-ledger-account-id <value>", `Expense ledger account ID debited for payment provider fees when a payment settles.`).option("--payment-processing-fees-expense-ledger-account-id <value>", `Expense ledger account ID debited for payment processing fees when a payment settles. Takes precedence over \`provider_fees_expense_ledger_account_id\` when set by the same or a higher priority rule.`).option("--payment-processing-fees-revenue-ledger-account-id <value>", `Payment processing fees revenue ledger account ID, set on invoice_settled rules.`).option("--customer-credits-ledger-account-id <value>", `Customer credits ledger account ID used for credit balances.`).option("--rev-rec-method <value>", `Revenue recognition method.`).option("--rev-rec-granularity <value>", `Recognition period granularity. Used when \`rev_rec_method\` is \`over_time\`.`).option("--rev-rec-point-in-time-basis <value>", `Date revenue is recognized on. Used when \`rev_rec_method\` is \`point_in_time\`.`).option("--discount-recognition-method <value>", `Method used to recognize discounts.`).option("--journal-id <value>", `Journal ID used to route entries in the accounting provider.`).option("--entity-type <value>", `Entity type the rule applies to.`).addHelpText("after", `
39099
+ resource.command("update").description(`Update an existing accounting rule, with the filters, accounts and required fields the rule editor applies to its category.`).requiredOption("--id <value>", `id parameter`).option("--name <value>", `Optional user-defined name for the rule.`).option("--category <value>", `Rule category. Cannot be changed after creation, must match the current category when sent.`).option("--priority <number>", `Override order. Higher priority wins when multiple rules match.`).option("--product-ids <json>", `Product IDs to match. Empty means match all.`).option("--product-types <json>", `Product types to match. Allowed values: flat_fee, dynamic, seat, credit. Empty means match all.`).option("--customer-ids <json>", `Customer IDs for customer-specific overrides.`).option("--currencies <json>", `Currency codes to match (e.g. EUR, USD).`).option("--countries <json>", `Country codes for jurisdiction-based overrides.`).option("--tax-schemes <json>", `Tax schemes to match. A context without a tax scheme never matches a rule that sets this filter. Empty means match all.`).option("--tax-territories <json>", `Tax territory country codes to match. A context without a tax territory never matches a rule that sets this filter. Empty means match all.`).option("--tax-rate-classes <json>", `Tax rate classes to match. A context without a tax rate class never matches a rule that sets this filter. Empty means match all.`).option("--coupon-ids <json>", `Coupon IDs to match. Empty means match all.`).option("--client-provider-ids <json>", `Client provider IDs to match. Empty means match all.`).option("--payment-method-types <json>", `Payment method types to match. Empty means match all.`).option("--bank-account-ids <json>", `Bank account IDs to match. Empty means match all.`).option("--invoice-types <json>", `Invoice kinds to match: \`invoice\` or \`document\`. Refunds and other standard invoices match as \`invoice\`. A context without an invoice, such as a PSP payout, never matches a rule that sets this filter. Empty means match all.`).option("--interval-period <value>", `Billing interval period filter (months, years, etc.).`).option("--interval-count <number>", `Billing interval count filter.`).option("--custom-property-filters <json>", `Invoice custom property filters. A rule matches only when every entry matches (AND across entries), and an entry matches when the invoice value is one of its \`values\` (any-of). Matching is strict: an invoice without a value for the property never matches. Each entry adds 10 to the \`suggested_priority\` returned by the rule defaults endpoint. Allowed on invoice_posted, invoice_settled, revenue_recognition, credit_note_created and accounting_software (invoice side) rules. An invoice_settled rule with filters cannot set \`payments_clearing_ledger_account_id\`, as PSP payouts are booked without the invoice. Empty means match all.`).option("--revenue-ledger-account-id <value>", `Revenue ledger account ID used for invoice line revenue routing. Must be a \`revenue\` account. On accounting_software rules, a \`revenue\` or \`contra_revenue\` account with entity_type invoice, an \`asset\` or \`contra_asset\` account with entity_type payment.`).option("--deferred-revenue-ledger-account-id <value>", `Deferred revenue ledger account ID used before revenue is recognized. Must be a \`liability\` account.`).option("--deferred-discount-ledger-account-id <value>", `Deferred discount ledger account ID used before discounts are recognized. Must be an \`asset\` or \`contra_liability\` account.`).option("--contra-revenue-ledger-account-id <value>", `Contra revenue ledger account ID used for amounts that reduce revenue. Must be a \`contra_revenue\` account.`).option("--discount-ledger-account-id <value>", `Discount ledger account ID used for recognized discounts. Must be a \`contra_revenue\` account.`).option("--ar-ledger-account-id <value>", `Accounts receivable ledger account ID used for invoice posting. Must be an \`asset\` account.`).option("--cash-ledger-account-id <value>", `Cash ledger account ID used for payment settlement. Must be an \`asset\` account.`).option("--payments-clearing-ledger-account-id <value>", `Payments clearing ledger account ID used while payments settle. Must be an \`asset\` account.`).option("--output-tax-ledger-account-id <value>", `Output tax ledger account ID used for tax liability. Must be a \`liability\` account.`).option("--uncollectible-debit-ledger-account-id <value>", `Ledger account ID debited when an invoice becomes uncollectible. Must be an \`asset\` account, for doubtful-receivable reclassification, or an \`expense\` account, for direct write-off.`).option("--allowance-for-doubtful-accounts-id <value>", `Allowance for doubtful accounts ledger account ID, set on credit_note_created rules. Must be a \`contra_asset\` account.`).option("--provider-fees-expense-ledger-account-id <value>", `Expense ledger account ID debited for payment provider fees when a payment settles. Must be an \`expense\` account.`).option("--payment-processing-fees-expense-ledger-account-id <value>", `Expense ledger account ID debited for payment processing fees when a payment settles. Takes precedence over \`provider_fees_expense_ledger_account_id\` when set by the same or a higher priority rule. Must be an \`expense\` account.`).option("--payment-processing-fees-revenue-ledger-account-id <value>", `Payment processing fees revenue ledger account ID, set on invoice_settled rules. Must be a \`revenue\` account.`).option("--customer-credits-ledger-account-id <value>", `Customer credits ledger account ID used for credit balances. Must be a \`liability\` account.`).option("--rev-rec-method <value>", `Revenue recognition method.`).option("--rev-rec-granularity <value>", `Recognition period granularity. Used when \`rev_rec_method\` is \`over_time\`.`).option("--rev-rec-point-in-time-basis <value>", `Date revenue is recognized on. Used when \`rev_rec_method\` is \`point_in_time\`.`).option("--discount-recognition-method <value>", `Method used to recognize discounts.`).option("--journal-id <value>", `Journal ID used to route entries in the accounting provider.`).option("--entity-type <value>", `Entity type the rule applies to.`).addHelpText("after", `
39112
39100
  Examples:
39113
39101
  hyperline accounting-rules update --id <id>
39114
39102
  hyperline accounting-rules update --id <id> --name <name> --category <category>
@@ -40505,6 +40493,71 @@ Examples:
40505
40493
  });
40506
40494
  }
40507
40495
 
40496
+ // build/commands/generated/ai-monitoring.js
40497
+ function registerAi_MonitoringCommands(parent) {
40498
+ const resource = parent.command("ai-monitoring").description("Manage ai > monitoring");
40499
+ resource.command("list-monitoring-analyses").description(`List customer health analyses from the monitoring agent, newest first: health score (0-100), tier, summary, per-dimension scores, risk factors and positive signals. Filter by customer (Hyperline or external ID) with limit=1 to get a customer's current health score, or by customer_id__in (up to 100 Hyperline IDs) for several customers; the first analysis per customer is its latest. Only completed analyses unless status is set.`).option("--limit <number>", `Maximum number of items to return (1-100).`).option("--cursor <value>", `Opaque cursor returned in the previous response's \`next_cursor\`. Omit to fetch the first page.`).option("--include-total <value>", `Set to \`true\` to include \`total\` in the response.`).option("--customer-id <value>", `Return only analyses of this customer. Accepts the Hyperline ID or your own external ID.`).option("--customer-id.in <value>", `Comma-separated list of up to 100 Hyperline customer IDs. Return only analyses of these customers. Cannot be combined with \`customer_id\`.`).option("--status <value>", `Return only analyses with this status. Defaults to \`completed\`, the analyses that carry a score.`).option("--created-at.gte <value>", `Return only analyses created at or after this date.`).option("--created-at.lte <value>", `Return only analyses created at or before this date.`).addHelpText("after", `
40500
+ Examples:
40501
+ hyperline ai-monitoring list-monitoring-analyses
40502
+ hyperline ai-monitoring list-monitoring-analyses --limit <limit> --cursor <cursor>`).action(async (opts) => {
40503
+ const ctx = resource.parent?.opts()._ctx;
40504
+ if (!ctx) {
40505
+ process.stderr.write("Error: Not authenticated\n");
40506
+ process.exit(1);
40507
+ }
40508
+ const args = {};
40509
+ if (opts.cursor !== void 0)
40510
+ args.cursor = opts.cursor;
40511
+ if (opts.includeTotal !== void 0)
40512
+ args.include_total = opts.includeTotal;
40513
+ if (opts.customerId !== void 0)
40514
+ args.customer_id = opts.customerId;
40515
+ if (opts["customerId.in"] !== void 0)
40516
+ args.customer_id__in = opts["customerId.in"];
40517
+ if (opts.status !== void 0)
40518
+ args.status = opts.status;
40519
+ if (opts["createdAt.gte"] !== void 0)
40520
+ args.created_at__gte = opts["createdAt.gte"];
40521
+ if (opts["createdAt.lte"] !== void 0)
40522
+ args.created_at__lte = opts["createdAt.lte"];
40523
+ if (opts.limit !== void 0)
40524
+ args.limit = Number(opts.limit);
40525
+ await ctx.execute({
40526
+ method: "GET",
40527
+ path: "/v1/agents/monitoring/analyses",
40528
+ args,
40529
+ queryParamKeys: [
40530
+ "limit",
40531
+ "cursor",
40532
+ "include_total",
40533
+ "customer_id",
40534
+ "customer_id__in",
40535
+ "status",
40536
+ "created_at__gte",
40537
+ "created_at__lte"
40538
+ ]
40539
+ });
40540
+ });
40541
+ 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", `
40542
+ Examples:
40543
+ hyperline ai-monitoring get-monitoring-analysis --id <id>`).action(async (opts) => {
40544
+ const ctx = resource.parent?.opts()._ctx;
40545
+ if (!ctx) {
40546
+ process.stderr.write("Error: Not authenticated\n");
40547
+ process.exit(1);
40548
+ }
40549
+ const args = {};
40550
+ if (opts.id !== void 0)
40551
+ args.id = opts.id;
40552
+ await ctx.execute({
40553
+ method: "GET",
40554
+ path: "/v1/agents/monitoring/analyses/{id}",
40555
+ args,
40556
+ queryParamKeys: []
40557
+ });
40558
+ });
40559
+ }
40560
+
40508
40561
  // build/commands/generated/analytics.js
40509
40562
  function registerAnalyticsCommands(parent) {
40510
40563
  const resource = parent.command("analytics").description("Manage analytics");
@@ -40664,7 +40717,7 @@ Examples:
40664
40717
  queryParamKeys: ["take", "skip"]
40665
40718
  });
40666
40719
  });
40667
- 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", `
40720
+ resource.command("create").description(`Create a new coupon with discount rules. Supports percentage or fixed amount discounts, duration limits, and redemption restrictions.`).requiredOption("--name <value>", `Coupon name.`).option("--description <value>", `Coupon description.`).option("--expiration-date <value>", `Date corresponding to the expiration of the coupon.`).option("--redemption-limit <number>", `Maximum number of subscriptions to which a single coupon can be applied.`).option("--product-ids <json>", `Products the coupon is scoped to, read together with \`product_scope\`: the only discounted products when \`include\`, the products never discounted when \`exclude\`, empty when \`all\`.`).option("--product-scope <value>", `Which products the coupon discounts. \`all\`: every product (\`product_ids\` must be empty). \`include\`: only the products in \`product_ids\`. \`exclude\`: every product except those in \`product_ids\` (lines without a product stay discounted). \`include\` and \`exclude\` require a non-empty \`product_ids\`. When omitted on create/update, it is inferred: \`include\` if \`product_ids\` is non-empty, \`all\` otherwise. Integrations that read \`product_ids\` without \`product_scope\` will misread an \`exclude\` list as the products the coupon applies to.`).option("--repeat <value>", `Default repeat behaviour applied when the coupon is attached to a subscription. Valid values: \`once\`, \`forever\`, \`duration\`. Can be overridden at attach time.`).option("--duration <json>", `Default duration applied when \`repeat\` is \`duration\`. Required when \`repeat\` is \`duration\`, must be null otherwise.`).option("--properties <json>", `Key/value pairs to store any metadata useful in your context.`).requiredOption("--type <value>", `type`).option("--discount-amount <number>", `Amount to apply as a discount on the total amount (excluding taxes) of a subscription. Expressed in the currency's smallest unit.`).option("--currency <value>", `Currency code. See [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217#List_of_ISO_4217_currency_codes).`).option("--discount-percent <number>", `Percentage to apply as a discount on the amount (excluding taxes) of a product.`).addHelpText("after", `
40668
40721
  Examples:
40669
40722
  hyperline coupons create --name <name> --type <type>
40670
40723
  hyperline coupons create --name <name> --type <type> --description <description> --expiration-date <expiration_date>
@@ -40681,6 +40734,8 @@ Examples:
40681
40734
  args.description = opts.description;
40682
40735
  if (opts.expirationDate !== void 0)
40683
40736
  args.expiration_date = opts.expirationDate;
40737
+ if (opts.productScope !== void 0)
40738
+ args.product_scope = opts.productScope;
40684
40739
  if (opts.repeat !== void 0)
40685
40740
  args.repeat = opts.repeat;
40686
40741
  if (opts.type !== void 0)
@@ -40724,7 +40779,7 @@ Examples:
40724
40779
  queryParamKeys: []
40725
40780
  });
40726
40781
  });
40727
- 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", `
40782
+ resource.command("update").description(`Update an existing coupon's name, discount rules, or restrictions.`).requiredOption("--id <value>", `id parameter`).requiredOption("--name <value>", `Coupon name.`).option("--description <value>", `Coupon description.`).option("--expiration-date <value>", `Date corresponding to the expiration of the coupon.`).option("--redemption-limit <number>", `Maximum number of subscriptions to which a single coupon can be applied.`).option("--product-ids <json>", `Products the coupon is scoped to, read together with \`product_scope\`: the only discounted products when \`include\`, the products never discounted when \`exclude\`, empty when \`all\`.`).option("--product-scope <value>", `Which products the coupon discounts. \`all\`: every product (\`product_ids\` must be empty). \`include\`: only the products in \`product_ids\`. \`exclude\`: every product except those in \`product_ids\` (lines without a product stay discounted). \`include\` and \`exclude\` require a non-empty \`product_ids\`. When omitted on create/update, it is inferred: \`include\` if \`product_ids\` is non-empty, \`all\` otherwise. Integrations that read \`product_ids\` without \`product_scope\` will misread an \`exclude\` list as the products the coupon applies to.`).option("--repeat <value>", `Default repeat behaviour applied when the coupon is attached to a subscription. Valid values: \`once\`, \`forever\`, \`duration\`. Can be overridden at attach time.`).option("--duration <json>", `Default duration applied when \`repeat\` is \`duration\`. Required when \`repeat\` is \`duration\`, must be null otherwise.`).option("--properties <json>", `Key/value pairs to store any metadata useful in your context.`).requiredOption("--type <value>", `type`).option("--discount-amount <number>", `Amount to apply as a discount on the total amount (excluding taxes) of a subscription. Expressed in the currency's smallest unit.`).option("--currency <value>", `Currency code. See [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217#List_of_ISO_4217_currency_codes).`).option("--discount-percent <number>", `Percentage to apply as a discount on the amount (excluding taxes) of a product.`).addHelpText("after", `
40728
40783
  Examples:
40729
40784
  hyperline coupons update --id <id> --name <name> --type <type>
40730
40785
  hyperline coupons update --id <id> --name <name> --type <type> --description <description> --expiration-date <expiration_date>
@@ -40743,6 +40798,8 @@ Examples:
40743
40798
  args.description = opts.description;
40744
40799
  if (opts.expirationDate !== void 0)
40745
40800
  args.expiration_date = opts.expirationDate;
40801
+ if (opts.productScope !== void 0)
40802
+ args.product_scope = opts.productScope;
40746
40803
  if (opts.repeat !== void 0)
40747
40804
  args.repeat = opts.repeat;
40748
40805
  if (opts.type !== void 0)
@@ -40799,7 +40856,7 @@ Examples:
40799
40856
  // build/commands/generated/coupons-promotion-codes.js
40800
40857
  function registerCoupons_Promotion_CodesCommands(parent) {
40801
40858
  const resource = parent.command("coupons-promotion-codes").description("Manage coupons > promotion codes");
40802
- 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", `
40859
+ 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.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", `
40803
40860
  Examples:
40804
40861
  hyperline coupons-promotion-codes list-promotion-codes
40805
40862
  hyperline coupons-promotion-codes list-promotion-codes --take <take> --coupon-id <coupon_id>`).action(async (opts) => {
@@ -40813,10 +40870,6 @@ Examples:
40813
40870
  args.coupon_id = opts.couponId;
40814
40871
  if (opts["couponId.not"] !== void 0)
40815
40872
  args.coupon_id__not = opts["couponId.not"];
40816
- if (opts["couponId.isNull"] !== void 0)
40817
- args.coupon_id__isNull = opts["couponId.isNull"];
40818
- if (opts["couponId.isNotNull"] !== void 0)
40819
- args.coupon_id__isNotNull = opts["couponId.isNotNull"];
40820
40873
  if (opts["couponId.equals"] !== void 0)
40821
40874
  args.coupon_id__equals = opts["couponId.equals"];
40822
40875
  if (opts["couponId.contains"] !== void 0)
@@ -40838,8 +40891,6 @@ Examples:
40838
40891
  "skip",
40839
40892
  "coupon_id",
40840
40893
  "coupon_id__not",
40841
- "coupon_id__isNull",
40842
- "coupon_id__isNotNull",
40843
40894
  "coupon_id__equals",
40844
40895
  "coupon_id__contains",
40845
40896
  "coupon_id__startsWith",
@@ -41093,7 +41144,15 @@ Examples:
41093
41144
  // build/commands/generated/customers.js
41094
41145
  function registerCustomersCommands(parent) {
41095
41146
  const resource = parent.command("customers").description("Manage customers");
41096
- resource.command("list").description(`List customers with optional filters for name, type, status, currency, country, external_id, billing_email, search, tax_id, subscription_status, invoicing_entity_id, segment_id, custom_properties, payment_method_type, integration_entity_id, created_at, and updated_at. Sortable by created_at or updated_at. Paginated with limit/cursor.`).option("--limit <number>", `Maximum number of items to return (1-100).`).option("--cursor <value>", `Opaque cursor returned in the previous response's \`next_cursor\`. Omit to fetch the first page.`).option("--include-total <value>", `Set to \`true\` to include \`total\` in the response.`).option("--order <value>", `Sort direction.`).option("--sort <value>", `Field used to sort the results.`).option("--name <value>", `name`).option("--name.not <value>", `name__not`).option("--name.is-null <value>", `name__isNull`).option("--name.is-not-null <value>", `name__isNotNull`).option("--name.equals <value>", `name__equals`).option("--name.contains <value>", `name__contains`).option("--name.starts-with <value>", `name__startsWith`).option("--name.end-with <value>", `name__endWith`).option("--type <value>", `type`).option("--type.in <value>", `type__in`).option("--status <value>", `status`).option("--status.in <value>", `status__in`).option("--currency <value>", `currency`).option("--currency.not <value>", `currency__not`).option("--currency.is-null <value>", `currency__isNull`).option("--currency.is-not-null <value>", `currency__isNotNull`).option("--currency.equals <value>", `currency__equals`).option("--currency.contains <value>", `currency__contains`).option("--currency.starts-with <value>", `currency__startsWith`).option("--currency.end-with <value>", `currency__endWith`).option("--country <value>", `country`).option("--country.not <value>", `country__not`).option("--country.is-null <value>", `country__isNull`).option("--country.is-not-null <value>", `country__isNotNull`).option("--country.equals <value>", `country__equals`).option("--country.contains <value>", `country__contains`).option("--country.starts-with <value>", `country__startsWith`).option("--country.end-with <value>", `country__endWith`).option("--external-id <value>", `external_id`).option("--external-id.not <value>", `external_id__not`).option("--external-id.is-null <value>", `external_id__isNull`).option("--external-id.is-not-null <value>", `external_id__isNotNull`).option("--external-id.equals <value>", `external_id__equals`).option("--external-id.contains <value>", `external_id__contains`).option("--external-id.starts-with <value>", `external_id__startsWith`).option("--external-id.end-with <value>", `external_id__endWith`).option("--billing-email <value>", `billing_email`).option("--billing-email.not <value>", `billing_email__not`).option("--billing-email.is-null <value>", `billing_email__isNull`).option("--billing-email.is-not-null <value>", `billing_email__isNotNull`).option("--billing-email.equals <value>", `billing_email__equals`).option("--billing-email.contains <value>", `billing_email__contains`).option("--billing-email.starts-with <value>", `billing_email__startsWith`).option("--billing-email.end-with <value>", `billing_email__endWith`).option("--search <value>", `search`).option("--tax-id <value>", `tax_id`).option("--tax-id.not <value>", `tax_id__not`).option("--tax-id.is-null <value>", `tax_id__isNull`).option("--tax-id.is-not-null <value>", `tax_id__isNotNull`).option("--tax-id.equals <value>", `tax_id__equals`).option("--tax-id.contains <value>", `tax_id__contains`).option("--tax-id.starts-with <value>", `tax_id__startsWith`).option("--tax-id.end-with <value>", `tax_id__endWith`).option("--subscription-status <value>", `subscription_status`).option("--subscription-status.in <value>", `subscription_status__in`).option("--invoicing-entity-id <value>", `invoicing_entity_id`).option("--invoicing-entity-id.not <value>", `invoicing_entity_id__not`).option("--invoicing-entity-id.is-null <value>", `invoicing_entity_id__isNull`).option("--invoicing-entity-id.is-not-null <value>", `invoicing_entity_id__isNotNull`).option("--invoicing-entity-id.equals <value>", `invoicing_entity_id__equals`).option("--invoicing-entity-id.contains <value>", `invoicing_entity_id__contains`).option("--invoicing-entity-id.starts-with <value>", `invoicing_entity_id__startsWith`).option("--invoicing-entity-id.end-with <value>", `invoicing_entity_id__endWith`).option("--segment-id <value>", `segment_id`).option("--custom-properties <value>", `custom_properties`).option("--payment-method-type <value>", `payment_method_type`).option("--payment-method-type.in <value>", `payment_method_type__in`).option("--integration-entity-id <value>", `integration_entity_id`).option("--created-at <value>", `created_at`).option("--created-at.not <value>", `created_at__not`).option("--created-at.is-null <value>", `created_at__isNull`).option("--created-at.is-not-null <value>", `created_at__isNotNull`).option("--created-at.equals <value>", `created_at__equals`).option("--created-at.lt <value>", `created_at__lt`).option("--created-at.lte <value>", `created_at__lte`).option("--created-at.gt <value>", `created_at__gt`).option("--created-at.gte <value>", `created_at__gte`).option("--updated-at <value>", `updated_at`).option("--updated-at.not <value>", `updated_at__not`).option("--updated-at.is-null <value>", `updated_at__isNull`).option("--updated-at.is-not-null <value>", `updated_at__isNotNull`).option("--updated-at.equals <value>", `updated_at__equals`).option("--updated-at.lt <value>", `updated_at__lt`).option("--updated-at.lte <value>", `updated_at__lte`).option("--updated-at.gt <value>", `updated_at__gt`).option("--updated-at.gte <value>", `updated_at__gte`).addHelpText("after", `
41147
+ resource.command("list").description(`List customers with optional filters for name, type, status, currency, country, external_id, billing_email, search, tax_id, tax_id_status, subscription_status, invoicing_entity_id, segment_id, custom_properties, payment_method_type, integration_entity_id, created_at, and updated_at. Sortable by created_at or updated_at. Paginated with limit/cursor.`).option("--limit <number>", `Maximum number of items to return (1-100).`).option("--cursor <value>", `Opaque cursor returned in the previous response's \`next_cursor\`. Omit to fetch the first page.`).option("--include-total <value>", `Set to \`true\` to include \`total\` in the response.`).option("--order <value>", `Sort direction.`).option("--sort <value>", `Field used to sort the results.`).option("--tax-id-status <value>", `
41148
+ Verification status of the customer tax ID.
41149
+
41150
+ - \`valid\`: Tax ID has been verified and is valid.
41151
+ - \`invalid\`: Tax ID has been verified and is invalid.
41152
+ - \`mismatch\`: Tax ID is valid but is for a different country than the customer's country.
41153
+ - \`unverified\`: Tax ID has not been verified yet.
41154
+ - \`unsupported\`: Tax ID verification for this type not supported yet.
41155
+ `).option("--name <value>", `name`).option("--name.not <value>", `name__not`).option("--name.equals <value>", `name__equals`).option("--name.contains <value>", `name__contains`).option("--name.starts-with <value>", `name__startsWith`).option("--name.end-with <value>", `name__endWith`).option("--type <value>", `type`).option("--type.in <value>", `type__in`).option("--status <value>", `status`).option("--status.in <value>", `status__in`).option("--currency <value>", `currency`).option("--currency.not <value>", `currency__not`).option("--currency.equals <value>", `currency__equals`).option("--currency.contains <value>", `currency__contains`).option("--currency.starts-with <value>", `currency__startsWith`).option("--currency.end-with <value>", `currency__endWith`).option("--currency.is-null <value>", `currency__isNull`).option("--currency.is-not-null <value>", `currency__isNotNull`).option("--country <value>", `country`).option("--country.not <value>", `country__not`).option("--country.equals <value>", `country__equals`).option("--country.contains <value>", `country__contains`).option("--country.starts-with <value>", `country__startsWith`).option("--country.end-with <value>", `country__endWith`).option("--country.is-null <value>", `country__isNull`).option("--country.is-not-null <value>", `country__isNotNull`).option("--external-id <value>", `external_id`).option("--external-id.not <value>", `external_id__not`).option("--external-id.equals <value>", `external_id__equals`).option("--external-id.contains <value>", `external_id__contains`).option("--external-id.starts-with <value>", `external_id__startsWith`).option("--external-id.end-with <value>", `external_id__endWith`).option("--external-id.is-null <value>", `external_id__isNull`).option("--external-id.is-not-null <value>", `external_id__isNotNull`).option("--billing-email <value>", `billing_email`).option("--billing-email.not <value>", `billing_email__not`).option("--billing-email.equals <value>", `billing_email__equals`).option("--billing-email.contains <value>", `billing_email__contains`).option("--billing-email.starts-with <value>", `billing_email__startsWith`).option("--billing-email.end-with <value>", `billing_email__endWith`).option("--billing-email.is-null <value>", `billing_email__isNull`).option("--billing-email.is-not-null <value>", `billing_email__isNotNull`).option("--search <value>", `search`).option("--tax-id <value>", `tax_id`).option("--tax-id.not <value>", `tax_id__not`).option("--tax-id.equals <value>", `tax_id__equals`).option("--tax-id.contains <value>", `tax_id__contains`).option("--tax-id.starts-with <value>", `tax_id__startsWith`).option("--tax-id.end-with <value>", `tax_id__endWith`).option("--tax-id.is-null <value>", `tax_id__isNull`).option("--tax-id.is-not-null <value>", `tax_id__isNotNull`).option("--subscription-status <value>", `subscription_status`).option("--subscription-status.in <value>", `subscription_status__in`).option("--invoicing-entity-id <value>", `invoicing_entity_id`).option("--invoicing-entity-id.not <value>", `invoicing_entity_id__not`).option("--invoicing-entity-id.equals <value>", `invoicing_entity_id__equals`).option("--invoicing-entity-id.contains <value>", `invoicing_entity_id__contains`).option("--invoicing-entity-id.starts-with <value>", `invoicing_entity_id__startsWith`).option("--invoicing-entity-id.end-with <value>", `invoicing_entity_id__endWith`).option("--segment-id <value>", `segment_id`).option("--custom-properties <value>", `custom_properties`).option("--payment-method-type <value>", `payment_method_type`).option("--payment-method-type.in <value>", `payment_method_type__in`).option("--integration-entity-id <value>", `integration_entity_id`).option("--created-at <value>", `created_at`).option("--created-at.not <value>", `created_at__not`).option("--created-at.equals <value>", `created_at__equals`).option("--created-at.lt <value>", `created_at__lt`).option("--created-at.lte <value>", `created_at__lte`).option("--created-at.gt <value>", `created_at__gt`).option("--created-at.gte <value>", `created_at__gte`).option("--updated-at <value>", `updated_at`).option("--updated-at.not <value>", `updated_at__not`).option("--updated-at.equals <value>", `updated_at__equals`).option("--updated-at.lt <value>", `updated_at__lt`).option("--updated-at.lte <value>", `updated_at__lte`).option("--updated-at.gt <value>", `updated_at__gt`).option("--updated-at.gte <value>", `updated_at__gte`).addHelpText("after", `
41097
41156
  Examples:
41098
41157
  hyperline customers list
41099
41158
  hyperline customers list --limit <limit> --cursor <cursor>`).action(async (opts) => {
@@ -41111,14 +41170,12 @@ Examples:
41111
41170
  args.order = opts.order;
41112
41171
  if (opts.sort !== void 0)
41113
41172
  args.sort = opts.sort;
41173
+ if (opts.taxIdStatus !== void 0)
41174
+ args.tax_id_status = opts.taxIdStatus;
41114
41175
  if (opts.name !== void 0)
41115
41176
  args.name = opts.name;
41116
41177
  if (opts["name.not"] !== void 0)
41117
41178
  args.name__not = opts["name.not"];
41118
- if (opts["name.isNull"] !== void 0)
41119
- args.name__isNull = opts["name.isNull"];
41120
- if (opts["name.isNotNull"] !== void 0)
41121
- args.name__isNotNull = opts["name.isNotNull"];
41122
41179
  if (opts["name.equals"] !== void 0)
41123
41180
  args.name__equals = opts["name.equals"];
41124
41181
  if (opts["name.contains"] !== void 0)
@@ -41139,10 +41196,6 @@ Examples:
41139
41196
  args.currency = opts.currency;
41140
41197
  if (opts["currency.not"] !== void 0)
41141
41198
  args.currency__not = opts["currency.not"];
41142
- if (opts["currency.isNull"] !== void 0)
41143
- args.currency__isNull = opts["currency.isNull"];
41144
- if (opts["currency.isNotNull"] !== void 0)
41145
- args.currency__isNotNull = opts["currency.isNotNull"];
41146
41199
  if (opts["currency.equals"] !== void 0)
41147
41200
  args.currency__equals = opts["currency.equals"];
41148
41201
  if (opts["currency.contains"] !== void 0)
@@ -41151,14 +41204,14 @@ Examples:
41151
41204
  args.currency__startsWith = opts["currency.startsWith"];
41152
41205
  if (opts["currency.endWith"] !== void 0)
41153
41206
  args.currency__endWith = opts["currency.endWith"];
41207
+ if (opts["currency.isNull"] !== void 0)
41208
+ args.currency__isNull = opts["currency.isNull"];
41209
+ if (opts["currency.isNotNull"] !== void 0)
41210
+ args.currency__isNotNull = opts["currency.isNotNull"];
41154
41211
  if (opts.country !== void 0)
41155
41212
  args.country = opts.country;
41156
41213
  if (opts["country.not"] !== void 0)
41157
41214
  args.country__not = opts["country.not"];
41158
- if (opts["country.isNull"] !== void 0)
41159
- args.country__isNull = opts["country.isNull"];
41160
- if (opts["country.isNotNull"] !== void 0)
41161
- args.country__isNotNull = opts["country.isNotNull"];
41162
41215
  if (opts["country.equals"] !== void 0)
41163
41216
  args.country__equals = opts["country.equals"];
41164
41217
  if (opts["country.contains"] !== void 0)
@@ -41167,14 +41220,14 @@ Examples:
41167
41220
  args.country__startsWith = opts["country.startsWith"];
41168
41221
  if (opts["country.endWith"] !== void 0)
41169
41222
  args.country__endWith = opts["country.endWith"];
41223
+ if (opts["country.isNull"] !== void 0)
41224
+ args.country__isNull = opts["country.isNull"];
41225
+ if (opts["country.isNotNull"] !== void 0)
41226
+ args.country__isNotNull = opts["country.isNotNull"];
41170
41227
  if (opts.externalId !== void 0)
41171
41228
  args.external_id = opts.externalId;
41172
41229
  if (opts["externalId.not"] !== void 0)
41173
41230
  args.external_id__not = opts["externalId.not"];
41174
- if (opts["externalId.isNull"] !== void 0)
41175
- args.external_id__isNull = opts["externalId.isNull"];
41176
- if (opts["externalId.isNotNull"] !== void 0)
41177
- args.external_id__isNotNull = opts["externalId.isNotNull"];
41178
41231
  if (opts["externalId.equals"] !== void 0)
41179
41232
  args.external_id__equals = opts["externalId.equals"];
41180
41233
  if (opts["externalId.contains"] !== void 0)
@@ -41183,14 +41236,14 @@ Examples:
41183
41236
  args.external_id__startsWith = opts["externalId.startsWith"];
41184
41237
  if (opts["externalId.endWith"] !== void 0)
41185
41238
  args.external_id__endWith = opts["externalId.endWith"];
41239
+ if (opts["externalId.isNull"] !== void 0)
41240
+ args.external_id__isNull = opts["externalId.isNull"];
41241
+ if (opts["externalId.isNotNull"] !== void 0)
41242
+ args.external_id__isNotNull = opts["externalId.isNotNull"];
41186
41243
  if (opts.billingEmail !== void 0)
41187
41244
  args.billing_email = opts.billingEmail;
41188
41245
  if (opts["billingEmail.not"] !== void 0)
41189
41246
  args.billing_email__not = opts["billingEmail.not"];
41190
- if (opts["billingEmail.isNull"] !== void 0)
41191
- args.billing_email__isNull = opts["billingEmail.isNull"];
41192
- if (opts["billingEmail.isNotNull"] !== void 0)
41193
- args.billing_email__isNotNull = opts["billingEmail.isNotNull"];
41194
41247
  if (opts["billingEmail.equals"] !== void 0)
41195
41248
  args.billing_email__equals = opts["billingEmail.equals"];
41196
41249
  if (opts["billingEmail.contains"] !== void 0)
@@ -41199,16 +41252,16 @@ Examples:
41199
41252
  args.billing_email__startsWith = opts["billingEmail.startsWith"];
41200
41253
  if (opts["billingEmail.endWith"] !== void 0)
41201
41254
  args.billing_email__endWith = opts["billingEmail.endWith"];
41255
+ if (opts["billingEmail.isNull"] !== void 0)
41256
+ args.billing_email__isNull = opts["billingEmail.isNull"];
41257
+ if (opts["billingEmail.isNotNull"] !== void 0)
41258
+ args.billing_email__isNotNull = opts["billingEmail.isNotNull"];
41202
41259
  if (opts.search !== void 0)
41203
41260
  args.search = opts.search;
41204
41261
  if (opts.taxId !== void 0)
41205
41262
  args.tax_id = opts.taxId;
41206
41263
  if (opts["taxId.not"] !== void 0)
41207
41264
  args.tax_id__not = opts["taxId.not"];
41208
- if (opts["taxId.isNull"] !== void 0)
41209
- args.tax_id__isNull = opts["taxId.isNull"];
41210
- if (opts["taxId.isNotNull"] !== void 0)
41211
- args.tax_id__isNotNull = opts["taxId.isNotNull"];
41212
41265
  if (opts["taxId.equals"] !== void 0)
41213
41266
  args.tax_id__equals = opts["taxId.equals"];
41214
41267
  if (opts["taxId.contains"] !== void 0)
@@ -41217,6 +41270,10 @@ Examples:
41217
41270
  args.tax_id__startsWith = opts["taxId.startsWith"];
41218
41271
  if (opts["taxId.endWith"] !== void 0)
41219
41272
  args.tax_id__endWith = opts["taxId.endWith"];
41273
+ if (opts["taxId.isNull"] !== void 0)
41274
+ args.tax_id__isNull = opts["taxId.isNull"];
41275
+ if (opts["taxId.isNotNull"] !== void 0)
41276
+ args.tax_id__isNotNull = opts["taxId.isNotNull"];
41220
41277
  if (opts.subscriptionStatus !== void 0)
41221
41278
  args.subscription_status = opts.subscriptionStatus;
41222
41279
  if (opts["subscriptionStatus.in"] !== void 0)
@@ -41225,10 +41282,6 @@ Examples:
41225
41282
  args.invoicing_entity_id = opts.invoicingEntityId;
41226
41283
  if (opts["invoicingEntityId.not"] !== void 0)
41227
41284
  args.invoicing_entity_id__not = opts["invoicingEntityId.not"];
41228
- if (opts["invoicingEntityId.isNull"] !== void 0)
41229
- args.invoicing_entity_id__isNull = opts["invoicingEntityId.isNull"];
41230
- if (opts["invoicingEntityId.isNotNull"] !== void 0)
41231
- args.invoicing_entity_id__isNotNull = opts["invoicingEntityId.isNotNull"];
41232
41285
  if (opts["invoicingEntityId.equals"] !== void 0)
41233
41286
  args.invoicing_entity_id__equals = opts["invoicingEntityId.equals"];
41234
41287
  if (opts["invoicingEntityId.contains"] !== void 0)
@@ -41251,10 +41304,6 @@ Examples:
41251
41304
  args.created_at = opts.createdAt;
41252
41305
  if (opts["createdAt.not"] !== void 0)
41253
41306
  args.created_at__not = opts["createdAt.not"];
41254
- if (opts["createdAt.isNull"] !== void 0)
41255
- args.created_at__isNull = opts["createdAt.isNull"];
41256
- if (opts["createdAt.isNotNull"] !== void 0)
41257
- args.created_at__isNotNull = opts["createdAt.isNotNull"];
41258
41307
  if (opts["createdAt.equals"] !== void 0)
41259
41308
  args.created_at__equals = opts["createdAt.equals"];
41260
41309
  if (opts["createdAt.lt"] !== void 0)
@@ -41269,10 +41318,6 @@ Examples:
41269
41318
  args.updated_at = opts.updatedAt;
41270
41319
  if (opts["updatedAt.not"] !== void 0)
41271
41320
  args.updated_at__not = opts["updatedAt.not"];
41272
- if (opts["updatedAt.isNull"] !== void 0)
41273
- args.updated_at__isNull = opts["updatedAt.isNull"];
41274
- if (opts["updatedAt.isNotNull"] !== void 0)
41275
- args.updated_at__isNotNull = opts["updatedAt.isNotNull"];
41276
41321
  if (opts["updatedAt.equals"] !== void 0)
41277
41322
  args.updated_at__equals = opts["updatedAt.equals"];
41278
41323
  if (opts["updatedAt.lt"] !== void 0)
@@ -41295,10 +41340,9 @@ Examples:
41295
41340
  "include_total",
41296
41341
  "order",
41297
41342
  "sort",
41343
+ "tax_id_status",
41298
41344
  "name",
41299
41345
  "name__not",
41300
- "name__isNull",
41301
- "name__isNotNull",
41302
41346
  "name__equals",
41303
41347
  "name__contains",
41304
41348
  "name__startsWith",
@@ -41309,51 +41353,49 @@ Examples:
41309
41353
  "status__in",
41310
41354
  "currency",
41311
41355
  "currency__not",
41312
- "currency__isNull",
41313
- "currency__isNotNull",
41314
41356
  "currency__equals",
41315
41357
  "currency__contains",
41316
41358
  "currency__startsWith",
41317
41359
  "currency__endWith",
41360
+ "currency__isNull",
41361
+ "currency__isNotNull",
41318
41362
  "country",
41319
41363
  "country__not",
41320
- "country__isNull",
41321
- "country__isNotNull",
41322
41364
  "country__equals",
41323
41365
  "country__contains",
41324
41366
  "country__startsWith",
41325
41367
  "country__endWith",
41368
+ "country__isNull",
41369
+ "country__isNotNull",
41326
41370
  "external_id",
41327
41371
  "external_id__not",
41328
- "external_id__isNull",
41329
- "external_id__isNotNull",
41330
41372
  "external_id__equals",
41331
41373
  "external_id__contains",
41332
41374
  "external_id__startsWith",
41333
41375
  "external_id__endWith",
41376
+ "external_id__isNull",
41377
+ "external_id__isNotNull",
41334
41378
  "billing_email",
41335
41379
  "billing_email__not",
41336
- "billing_email__isNull",
41337
- "billing_email__isNotNull",
41338
41380
  "billing_email__equals",
41339
41381
  "billing_email__contains",
41340
41382
  "billing_email__startsWith",
41341
41383
  "billing_email__endWith",
41384
+ "billing_email__isNull",
41385
+ "billing_email__isNotNull",
41342
41386
  "search",
41343
41387
  "tax_id",
41344
41388
  "tax_id__not",
41345
- "tax_id__isNull",
41346
- "tax_id__isNotNull",
41347
41389
  "tax_id__equals",
41348
41390
  "tax_id__contains",
41349
41391
  "tax_id__startsWith",
41350
41392
  "tax_id__endWith",
41393
+ "tax_id__isNull",
41394
+ "tax_id__isNotNull",
41351
41395
  "subscription_status",
41352
41396
  "subscription_status__in",
41353
41397
  "invoicing_entity_id",
41354
41398
  "invoicing_entity_id__not",
41355
- "invoicing_entity_id__isNull",
41356
- "invoicing_entity_id__isNotNull",
41357
41399
  "invoicing_entity_id__equals",
41358
41400
  "invoicing_entity_id__contains",
41359
41401
  "invoicing_entity_id__startsWith",
@@ -41365,8 +41407,6 @@ Examples:
41365
41407
  "integration_entity_id",
41366
41408
  "created_at",
41367
41409
  "created_at__not",
41368
- "created_at__isNull",
41369
- "created_at__isNotNull",
41370
41410
  "created_at__equals",
41371
41411
  "created_at__lt",
41372
41412
  "created_at__lte",
@@ -41374,8 +41414,6 @@ Examples:
41374
41414
  "created_at__gte",
41375
41415
  "updated_at",
41376
41416
  "updated_at__not",
41377
- "updated_at__isNull",
41378
- "updated_at__isNotNull",
41379
41417
  "updated_at__equals",
41380
41418
  "updated_at__lt",
41381
41419
  "updated_at__lte",
@@ -41944,7 +41982,7 @@ Examples:
41944
41982
  // build/commands/generated/customers-credits.js
41945
41983
  function registerCustomers_CreditsCommands(parent) {
41946
41984
  const resource = parent.command("customers-credits").description("Manage customers > credits");
41947
- resource.command("list").description(`List credit products across all customers with optional filters for product_id, customer_id, and updated_at. Paginated with take/skip.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--product-id <value>", `product_id`).option("--product-id.not <value>", `product_id__not`).option("--product-id.is-null <value>", `product_id__isNull`).option("--product-id.is-not-null <value>", `product_id__isNotNull`).option("--product-id.equals <value>", `product_id__equals`).option("--product-id.contains <value>", `product_id__contains`).option("--product-id.starts-with <value>", `product_id__startsWith`).option("--product-id.end-with <value>", `product_id__endWith`).option("--customer-id <value>", `customer_id`).option("--customer-id.not <value>", `customer_id__not`).option("--customer-id.is-null <value>", `customer_id__isNull`).option("--customer-id.is-not-null <value>", `customer_id__isNotNull`).option("--customer-id.equals <value>", `customer_id__equals`).option("--customer-id.contains <value>", `customer_id__contains`).option("--customer-id.starts-with <value>", `customer_id__startsWith`).option("--customer-id.end-with <value>", `customer_id__endWith`).option("--updated-at <value>", `updated_at`).option("--updated-at.not <value>", `updated_at__not`).option("--updated-at.is-null <value>", `updated_at__isNull`).option("--updated-at.is-not-null <value>", `updated_at__isNotNull`).option("--updated-at.equals <value>", `updated_at__equals`).option("--updated-at.lt <value>", `updated_at__lt`).option("--updated-at.lte <value>", `updated_at__lte`).option("--updated-at.gt <value>", `updated_at__gt`).option("--updated-at.gte <value>", `updated_at__gte`).addHelpText("after", `
41985
+ resource.command("list").description(`List credit products across all customers with optional filters for product_id, customer_id, and updated_at. Paginated with take/skip.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--product-id <value>", `product_id`).option("--product-id.not <value>", `product_id__not`).option("--product-id.equals <value>", `product_id__equals`).option("--product-id.contains <value>", `product_id__contains`).option("--product-id.starts-with <value>", `product_id__startsWith`).option("--product-id.end-with <value>", `product_id__endWith`).option("--customer-id <value>", `customer_id`).option("--customer-id.not <value>", `customer_id__not`).option("--customer-id.equals <value>", `customer_id__equals`).option("--customer-id.contains <value>", `customer_id__contains`).option("--customer-id.starts-with <value>", `customer_id__startsWith`).option("--customer-id.end-with <value>", `customer_id__endWith`).option("--updated-at <value>", `updated_at`).option("--updated-at.not <value>", `updated_at__not`).option("--updated-at.equals <value>", `updated_at__equals`).option("--updated-at.lt <value>", `updated_at__lt`).option("--updated-at.lte <value>", `updated_at__lte`).option("--updated-at.gt <value>", `updated_at__gt`).option("--updated-at.gte <value>", `updated_at__gte`).addHelpText("after", `
41948
41986
  Examples:
41949
41987
  hyperline customers-credits list
41950
41988
  hyperline customers-credits list --take <take> --product-id <product_id>`).action(async (opts) => {
@@ -41958,10 +41996,6 @@ Examples:
41958
41996
  args.product_id = opts.productId;
41959
41997
  if (opts["productId.not"] !== void 0)
41960
41998
  args.product_id__not = opts["productId.not"];
41961
- if (opts["productId.isNull"] !== void 0)
41962
- args.product_id__isNull = opts["productId.isNull"];
41963
- if (opts["productId.isNotNull"] !== void 0)
41964
- args.product_id__isNotNull = opts["productId.isNotNull"];
41965
41999
  if (opts["productId.equals"] !== void 0)
41966
42000
  args.product_id__equals = opts["productId.equals"];
41967
42001
  if (opts["productId.contains"] !== void 0)
@@ -41974,10 +42008,6 @@ Examples:
41974
42008
  args.customer_id = opts.customerId;
41975
42009
  if (opts["customerId.not"] !== void 0)
41976
42010
  args.customer_id__not = opts["customerId.not"];
41977
- if (opts["customerId.isNull"] !== void 0)
41978
- args.customer_id__isNull = opts["customerId.isNull"];
41979
- if (opts["customerId.isNotNull"] !== void 0)
41980
- args.customer_id__isNotNull = opts["customerId.isNotNull"];
41981
42011
  if (opts["customerId.equals"] !== void 0)
41982
42012
  args.customer_id__equals = opts["customerId.equals"];
41983
42013
  if (opts["customerId.contains"] !== void 0)
@@ -41990,10 +42020,6 @@ Examples:
41990
42020
  args.updated_at = opts.updatedAt;
41991
42021
  if (opts["updatedAt.not"] !== void 0)
41992
42022
  args.updated_at__not = opts["updatedAt.not"];
41993
- if (opts["updatedAt.isNull"] !== void 0)
41994
- args.updated_at__isNull = opts["updatedAt.isNull"];
41995
- if (opts["updatedAt.isNotNull"] !== void 0)
41996
- args.updated_at__isNotNull = opts["updatedAt.isNotNull"];
41997
42023
  if (opts["updatedAt.equals"] !== void 0)
41998
42024
  args.updated_at__equals = opts["updatedAt.equals"];
41999
42025
  if (opts["updatedAt.lt"] !== void 0)
@@ -42017,24 +42043,18 @@ Examples:
42017
42043
  "skip",
42018
42044
  "product_id",
42019
42045
  "product_id__not",
42020
- "product_id__isNull",
42021
- "product_id__isNotNull",
42022
42046
  "product_id__equals",
42023
42047
  "product_id__contains",
42024
42048
  "product_id__startsWith",
42025
42049
  "product_id__endWith",
42026
42050
  "customer_id",
42027
42051
  "customer_id__not",
42028
- "customer_id__isNull",
42029
- "customer_id__isNotNull",
42030
42052
  "customer_id__equals",
42031
42053
  "customer_id__contains",
42032
42054
  "customer_id__startsWith",
42033
42055
  "customer_id__endWith",
42034
42056
  "updated_at",
42035
42057
  "updated_at__not",
42036
- "updated_at__isNull",
42037
- "updated_at__isNotNull",
42038
42058
  "updated_at__equals",
42039
42059
  "updated_at__lt",
42040
42060
  "updated_at__lte",
@@ -42307,6 +42327,88 @@ Examples:
42307
42327
  });
42308
42328
  }
42309
42329
 
42330
+ // build/commands/generated/customers-features.js
42331
+ function registerCustomers_FeaturesCommands(parent) {
42332
+ const resource = parent.command("customers-features").description("Manage customers > features");
42333
+ resource.command("resolve-customer-features").description(`Resolve feature values for a customer.`).requiredOption("--id <value>", `id parameter`).option("--at <value>", `Resolution date.`).addHelpText("after", `
42334
+ Examples:
42335
+ hyperline customers-features resolve-customer-features --id <id>
42336
+ hyperline customers-features resolve-customer-features --id <id> --at <at>`).action(async (opts) => {
42337
+ const ctx = resource.parent?.opts()._ctx;
42338
+ if (!ctx) {
42339
+ process.stderr.write("Error: Not authenticated\n");
42340
+ process.exit(1);
42341
+ }
42342
+ const args = {};
42343
+ if (opts.id !== void 0)
42344
+ args.id = opts.id;
42345
+ if (opts.at !== void 0)
42346
+ args.at = opts.at;
42347
+ await ctx.execute({
42348
+ method: "GET",
42349
+ path: "/v1/customers/{id}/features",
42350
+ args,
42351
+ queryParamKeys: ["at"]
42352
+ });
42353
+ });
42354
+ resource.command("set-customer-feature").description(`Set a feature override for a customer.`).requiredOption("--id <value>", `id parameter`).requiredOption("--code <value>", `code parameter`).requiredOption("--value", `Feature value.`).option("--reason <value>", `Reason associated with a customer feature override.`).option("--expires-at <value>", `Expiration date of a customer feature override.`).addHelpText("after", `
42355
+ Examples:
42356
+ hyperline customers-features set-customer-feature --id <id> --code <code> --value
42357
+ hyperline customers-features set-customer-feature --id <id> --code <code> --value --reason <reason> --expires-at <expires_at>
42358
+ hyperline customers-features set-customer-feature --id <id> --code <code> --value --output json`).action(async (opts) => {
42359
+ const ctx = resource.parent?.opts()._ctx;
42360
+ if (!ctx) {
42361
+ process.stderr.write("Error: Not authenticated\n");
42362
+ process.exit(1);
42363
+ }
42364
+ const args = {};
42365
+ if (opts.id !== void 0)
42366
+ args.id = opts.id;
42367
+ if (opts.code !== void 0)
42368
+ args.code = opts.code;
42369
+ if (opts.reason !== void 0)
42370
+ args.reason = opts.reason;
42371
+ if (opts.expiresAt !== void 0)
42372
+ args.expires_at = opts.expiresAt;
42373
+ if (opts.value !== void 0)
42374
+ args.value = true;
42375
+ await ctx.execute({
42376
+ method: "PUT",
42377
+ path: "/v1/customers/{id}/features/{code}",
42378
+ args,
42379
+ queryParamKeys: []
42380
+ });
42381
+ });
42382
+ resource.command("delete-customer-feature").description(`Delete a feature override from a customer.`).requiredOption("--id <value>", `id parameter`).requiredOption("--code <value>", `code parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
42383
+ Examples:
42384
+ hyperline customers-features delete-customer-feature --id <id> --code <code>
42385
+ hyperline customers-features delete-customer-feature --id <id> --code <code> --output json`).action(async (opts) => {
42386
+ const ctx = resource.parent?.opts()._ctx;
42387
+ if (!ctx) {
42388
+ process.stderr.write("Error: Not authenticated\n");
42389
+ process.exit(1);
42390
+ }
42391
+ const args = {};
42392
+ if (opts.id !== void 0)
42393
+ args.id = opts.id;
42394
+ if (opts.code !== void 0)
42395
+ args.code = opts.code;
42396
+ if (!opts.yes) {
42397
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
42398
+ if (!confirmed) {
42399
+ process.stdout.write("Aborted.\n");
42400
+ return;
42401
+ }
42402
+ }
42403
+ await ctx.execute({
42404
+ method: "DELETE",
42405
+ path: "/v1/customers/{id}/features/{code}",
42406
+ args,
42407
+ queryParamKeys: []
42408
+ });
42409
+ });
42410
+ }
42411
+
42310
42412
  // build/commands/generated/customers-payment-methods.js
42311
42413
  function registerCustomers_Payment_MethodsCommands(parent) {
42312
42414
  const resource = parent.command("customers-payment-methods").description("Manage customers > payment methods");
@@ -42756,45 +42858,35 @@ Examples:
42756
42858
  });
42757
42859
  }
42758
42860
 
42759
- // build/commands/generated/files.js
42760
- function registerFilesCommands(parent) {
42761
- const resource = parent.command("files").description("Manage files");
42762
- resource.command("download").description(`Download the raw content of a file by ID. Returns the file binary with appropriate content type.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
42763
- Examples:
42764
- hyperline files download --id <id>`).action(async (opts) => {
42765
- const ctx = resource.parent?.opts()._ctx;
42766
- if (!ctx) {
42767
- process.stderr.write("Error: Not authenticated\n");
42768
- process.exit(1);
42769
- }
42770
- const args = {};
42771
- if (opts.id !== void 0)
42772
- args.id = opts.id;
42773
- await ctx.execute({
42774
- method: "GET",
42775
- path: "/v1/files/{id}/download",
42776
- args,
42777
- queryParamKeys: []
42778
- });
42779
- });
42780
- resource.command("list").description(`List uploaded files with optional filters for name and customer_id. Paginated with take/skip.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--name <value>", `name`).option("--name.not <value>", `name__not`).option("--name.is-null <value>", `name__isNull`).option("--name.is-not-null <value>", `name__isNotNull`).option("--name.equals <value>", `name__equals`).option("--name.contains <value>", `name__contains`).option("--name.starts-with <value>", `name__startsWith`).option("--name.end-with <value>", `name__endWith`).option("--customer-id <value>", `customer_id`).option("--customer-id.not <value>", `customer_id__not`).option("--customer-id.is-null <value>", `customer_id__isNull`).option("--customer-id.is-not-null <value>", `customer_id__isNotNull`).option("--customer-id.equals <value>", `customer_id__equals`).option("--customer-id.contains <value>", `customer_id__contains`).option("--customer-id.starts-with <value>", `customer_id__startsWith`).option("--customer-id.end-with <value>", `customer_id__endWith`).addHelpText("after", `
42861
+ // build/commands/generated/features.js
42862
+ function registerFeaturesCommands(parent) {
42863
+ const resource = parent.command("features").description("Manage features");
42864
+ resource.command("list").description(`List feature definitions.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--code <value>", `code`).option("--code.not <value>", `code__not`).option("--code.equals <value>", `code__equals`).option("--code.contains <value>", `code__contains`).option("--code.starts-with <value>", `code__startsWith`).option("--code.end-with <value>", `code__endWith`).option("--name <value>", `name`).option("--name.not <value>", `name__not`).option("--name.equals <value>", `name__equals`).option("--name.contains <value>", `name__contains`).option("--name.starts-with <value>", `name__startsWith`).option("--name.end-with <value>", `name__endWith`).option("--status <value>", `status`).option("--status.in <value>", `status__in`).option("--search <value>", `search`).addHelpText("after", `
42781
42865
  Examples:
42782
- hyperline files list
42783
- hyperline files list --take <take> --name <name>`).action(async (opts) => {
42866
+ hyperline features list
42867
+ hyperline features list --take <take> --code <code>`).action(async (opts) => {
42784
42868
  const ctx = resource.parent?.opts()._ctx;
42785
42869
  if (!ctx) {
42786
42870
  process.stderr.write("Error: Not authenticated\n");
42787
42871
  process.exit(1);
42788
42872
  }
42789
42873
  const args = {};
42874
+ if (opts.code !== void 0)
42875
+ args.code = opts.code;
42876
+ if (opts["code.not"] !== void 0)
42877
+ args.code__not = opts["code.not"];
42878
+ if (opts["code.equals"] !== void 0)
42879
+ args.code__equals = opts["code.equals"];
42880
+ if (opts["code.contains"] !== void 0)
42881
+ args.code__contains = opts["code.contains"];
42882
+ if (opts["code.startsWith"] !== void 0)
42883
+ args.code__startsWith = opts["code.startsWith"];
42884
+ if (opts["code.endWith"] !== void 0)
42885
+ args.code__endWith = opts["code.endWith"];
42790
42886
  if (opts.name !== void 0)
42791
42887
  args.name = opts.name;
42792
42888
  if (opts["name.not"] !== void 0)
42793
42889
  args.name__not = opts["name.not"];
42794
- if (opts["name.isNull"] !== void 0)
42795
- args.name__isNull = opts["name.isNull"];
42796
- if (opts["name.isNotNull"] !== void 0)
42797
- args.name__isNotNull = opts["name.isNotNull"];
42798
42890
  if (opts["name.equals"] !== void 0)
42799
42891
  args.name__equals = opts["name.equals"];
42800
42892
  if (opts["name.contains"] !== void 0)
@@ -42803,50 +42895,270 @@ Examples:
42803
42895
  args.name__startsWith = opts["name.startsWith"];
42804
42896
  if (opts["name.endWith"] !== void 0)
42805
42897
  args.name__endWith = opts["name.endWith"];
42806
- if (opts.customerId !== void 0)
42807
- args.customer_id = opts.customerId;
42808
- if (opts["customerId.not"] !== void 0)
42809
- args.customer_id__not = opts["customerId.not"];
42810
- if (opts["customerId.isNull"] !== void 0)
42811
- args.customer_id__isNull = opts["customerId.isNull"];
42812
- if (opts["customerId.isNotNull"] !== void 0)
42813
- args.customer_id__isNotNull = opts["customerId.isNotNull"];
42814
- if (opts["customerId.equals"] !== void 0)
42815
- args.customer_id__equals = opts["customerId.equals"];
42816
- if (opts["customerId.contains"] !== void 0)
42817
- args.customer_id__contains = opts["customerId.contains"];
42818
- if (opts["customerId.startsWith"] !== void 0)
42819
- args.customer_id__startsWith = opts["customerId.startsWith"];
42820
- if (opts["customerId.endWith"] !== void 0)
42821
- args.customer_id__endWith = opts["customerId.endWith"];
42898
+ if (opts.status !== void 0)
42899
+ args.status = opts.status;
42900
+ if (opts["status.in"] !== void 0)
42901
+ args.status__in = opts["status.in"];
42902
+ if (opts.search !== void 0)
42903
+ args.search = opts.search;
42822
42904
  if (opts.take !== void 0)
42823
42905
  args.take = Number(opts.take);
42824
42906
  if (opts.skip !== void 0)
42825
42907
  args.skip = Number(opts.skip);
42826
42908
  await ctx.execute({
42827
42909
  method: "GET",
42828
- path: "/v1/files",
42910
+ path: "/v1/features",
42829
42911
  args,
42830
42912
  queryParamKeys: [
42831
42913
  "take",
42832
42914
  "skip",
42915
+ "code",
42916
+ "code__not",
42917
+ "code__equals",
42918
+ "code__contains",
42919
+ "code__startsWith",
42920
+ "code__endWith",
42833
42921
  "name",
42834
42922
  "name__not",
42835
- "name__isNull",
42836
- "name__isNotNull",
42837
42923
  "name__equals",
42838
42924
  "name__contains",
42839
42925
  "name__startsWith",
42840
42926
  "name__endWith",
42841
- "customer_id",
42842
- "customer_id__not",
42843
- "customer_id__isNull",
42844
- "customer_id__isNotNull",
42845
- "customer_id__equals",
42846
- "customer_id__contains",
42847
- "customer_id__startsWith",
42848
- "customer_id__endWith"
42849
- ]
42927
+ "status",
42928
+ "status__in",
42929
+ "search"
42930
+ ]
42931
+ });
42932
+ });
42933
+ resource.command("create").description(`Create a feature definition.`).requiredOption("--code <value>", `Feature code.`).requiredOption("--name <value>", `Feature name.`).option("--description <value>", `Feature description.`).requiredOption("--value-type <value>", `Type of feature value.`).requiredOption("--default-value", `Default value used when no product or customer feature value applies. Null means no default.`).option("--resolution-strategy <value>", `Strategy used to combine multiple product feature values for number features.`).addHelpText("after", `
42934
+ Examples:
42935
+ hyperline features create --code <code> --name <name> --value-type <value_type> --default-value
42936
+ hyperline features create --code <code> --name <name> --value-type <value_type> --default-value --description <description> --resolution-strategy <resolution_strategy>
42937
+ hyperline features create --code <code> --name <name> --value-type <value_type> --default-value --output json`).action(async (opts) => {
42938
+ const ctx = resource.parent?.opts()._ctx;
42939
+ if (!ctx) {
42940
+ process.stderr.write("Error: Not authenticated\n");
42941
+ process.exit(1);
42942
+ }
42943
+ const args = {};
42944
+ if (opts.code !== void 0)
42945
+ args.code = opts.code;
42946
+ if (opts.name !== void 0)
42947
+ args.name = opts.name;
42948
+ if (opts.description !== void 0)
42949
+ args.description = opts.description;
42950
+ if (opts.valueType !== void 0)
42951
+ args.value_type = opts.valueType;
42952
+ if (opts.resolutionStrategy !== void 0)
42953
+ args.resolution_strategy = opts.resolutionStrategy;
42954
+ if (opts.defaultValue !== void 0)
42955
+ args.default_value = true;
42956
+ await ctx.execute({
42957
+ method: "POST",
42958
+ path: "/v1/features",
42959
+ args,
42960
+ queryParamKeys: []
42961
+ });
42962
+ });
42963
+ resource.command("get").description(`Retrieve a feature definition.`).requiredOption("--code <value>", `code parameter`).addHelpText("after", `
42964
+ Examples:
42965
+ hyperline features get --code <code>`).action(async (opts) => {
42966
+ const ctx = resource.parent?.opts()._ctx;
42967
+ if (!ctx) {
42968
+ process.stderr.write("Error: Not authenticated\n");
42969
+ process.exit(1);
42970
+ }
42971
+ const args = {};
42972
+ if (opts.code !== void 0)
42973
+ args.code = opts.code;
42974
+ await ctx.execute({
42975
+ method: "GET",
42976
+ path: "/v1/features/{code}",
42977
+ args,
42978
+ queryParamKeys: []
42979
+ });
42980
+ });
42981
+ resource.command("update").description(`Update a feature definition.`).requiredOption("--code <value>", `code parameter`).option("--name <value>", `Feature name.`).option("--description <value>", `Feature description.`).option("--value-type <value>", `value_type`).option("--default-value", `Default value used when no product or customer feature value applies. Null means no default.`).option("--resolution-strategy <value>", `Strategy used to combine multiple product feature values for number features.`).addHelpText("after", `
42982
+ Examples:
42983
+ hyperline features update --code <code>
42984
+ hyperline features update --code <code> --name <name> --description <description>
42985
+ hyperline features update --code <code> --output json`).action(async (opts) => {
42986
+ const ctx = resource.parent?.opts()._ctx;
42987
+ if (!ctx) {
42988
+ process.stderr.write("Error: Not authenticated\n");
42989
+ process.exit(1);
42990
+ }
42991
+ const args = {};
42992
+ if (opts.code !== void 0)
42993
+ args.code = opts.code;
42994
+ if (opts.name !== void 0)
42995
+ args.name = opts.name;
42996
+ if (opts.description !== void 0)
42997
+ args.description = opts.description;
42998
+ if (opts.valueType !== void 0)
42999
+ args.value_type = opts.valueType;
43000
+ if (opts.resolutionStrategy !== void 0)
43001
+ args.resolution_strategy = opts.resolutionStrategy;
43002
+ if (opts.defaultValue !== void 0)
43003
+ args.default_value = true;
43004
+ await ctx.execute({
43005
+ method: "PUT",
43006
+ path: "/v1/features/{code}",
43007
+ args,
43008
+ queryParamKeys: []
43009
+ });
43010
+ });
43011
+ resource.command("archive").description(`Archive a feature definition.`).requiredOption("--code <value>", `code parameter`).addHelpText("after", `
43012
+ Examples:
43013
+ hyperline features archive --code <code>
43014
+ hyperline features archive --code <code> --output json`).action(async (opts) => {
43015
+ const ctx = resource.parent?.opts()._ctx;
43016
+ if (!ctx) {
43017
+ process.stderr.write("Error: Not authenticated\n");
43018
+ process.exit(1);
43019
+ }
43020
+ const args = {};
43021
+ if (opts.code !== void 0)
43022
+ args.code = opts.code;
43023
+ await ctx.execute({
43024
+ method: "PUT",
43025
+ path: "/v1/features/{code}/archive",
43026
+ args,
43027
+ queryParamKeys: []
43028
+ });
43029
+ });
43030
+ resource.command("delete").description(`Delete an archived feature definition that is not in use.`).requiredOption("--code <value>", `code parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
43031
+ Examples:
43032
+ hyperline features delete --code <code>
43033
+ hyperline features delete --code <code> --output json`).action(async (opts) => {
43034
+ const ctx = resource.parent?.opts()._ctx;
43035
+ if (!ctx) {
43036
+ process.stderr.write("Error: Not authenticated\n");
43037
+ process.exit(1);
43038
+ }
43039
+ const args = {};
43040
+ if (opts.code !== void 0)
43041
+ args.code = opts.code;
43042
+ if (!opts.yes) {
43043
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
43044
+ if (!confirmed) {
43045
+ process.stdout.write("Aborted.\n");
43046
+ return;
43047
+ }
43048
+ }
43049
+ await ctx.execute({
43050
+ method: "DELETE",
43051
+ path: "/v1/features/{code}",
43052
+ args,
43053
+ queryParamKeys: []
43054
+ });
43055
+ });
43056
+ resource.command("unarchive").description(`Unarchive a feature definition.`).requiredOption("--code <value>", `code parameter`).addHelpText("after", `
43057
+ Examples:
43058
+ hyperline features unarchive --code <code>
43059
+ hyperline features unarchive --code <code> --output json`).action(async (opts) => {
43060
+ const ctx = resource.parent?.opts()._ctx;
43061
+ if (!ctx) {
43062
+ process.stderr.write("Error: Not authenticated\n");
43063
+ process.exit(1);
43064
+ }
43065
+ const args = {};
43066
+ if (opts.code !== void 0)
43067
+ args.code = opts.code;
43068
+ await ctx.execute({
43069
+ method: "PUT",
43070
+ path: "/v1/features/{code}/unarchive",
43071
+ args,
43072
+ queryParamKeys: []
43073
+ });
43074
+ });
43075
+ }
43076
+
43077
+ // build/commands/generated/files.js
43078
+ function registerFilesCommands(parent) {
43079
+ const resource = parent.command("files").description("Manage files");
43080
+ resource.command("download").description(`Download the raw content of a file by ID. Returns the file binary with appropriate content type.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
43081
+ Examples:
43082
+ hyperline files download --id <id>`).action(async (opts) => {
43083
+ const ctx = resource.parent?.opts()._ctx;
43084
+ if (!ctx) {
43085
+ process.stderr.write("Error: Not authenticated\n");
43086
+ process.exit(1);
43087
+ }
43088
+ const args = {};
43089
+ if (opts.id !== void 0)
43090
+ args.id = opts.id;
43091
+ await ctx.execute({
43092
+ method: "GET",
43093
+ path: "/v1/files/{id}/download",
43094
+ args,
43095
+ queryParamKeys: []
43096
+ });
43097
+ });
43098
+ resource.command("list").description(`List uploaded files with optional filters for name and customer_id. Paginated with take/skip.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--name <value>", `name`).option("--name.not <value>", `name__not`).option("--name.equals <value>", `name__equals`).option("--name.contains <value>", `name__contains`).option("--name.starts-with <value>", `name__startsWith`).option("--name.end-with <value>", `name__endWith`).option("--customer-id <value>", `customer_id`).option("--customer-id.not <value>", `customer_id__not`).option("--customer-id.equals <value>", `customer_id__equals`).option("--customer-id.contains <value>", `customer_id__contains`).option("--customer-id.starts-with <value>", `customer_id__startsWith`).option("--customer-id.end-with <value>", `customer_id__endWith`).option("--customer-id.is-null <value>", `customer_id__isNull`).option("--customer-id.is-not-null <value>", `customer_id__isNotNull`).addHelpText("after", `
43099
+ Examples:
43100
+ hyperline files list
43101
+ hyperline files list --take <take> --name <name>`).action(async (opts) => {
43102
+ const ctx = resource.parent?.opts()._ctx;
43103
+ if (!ctx) {
43104
+ process.stderr.write("Error: Not authenticated\n");
43105
+ process.exit(1);
43106
+ }
43107
+ const args = {};
43108
+ if (opts.name !== void 0)
43109
+ args.name = opts.name;
43110
+ if (opts["name.not"] !== void 0)
43111
+ args.name__not = opts["name.not"];
43112
+ if (opts["name.equals"] !== void 0)
43113
+ args.name__equals = opts["name.equals"];
43114
+ if (opts["name.contains"] !== void 0)
43115
+ args.name__contains = opts["name.contains"];
43116
+ if (opts["name.startsWith"] !== void 0)
43117
+ args.name__startsWith = opts["name.startsWith"];
43118
+ if (opts["name.endWith"] !== void 0)
43119
+ args.name__endWith = opts["name.endWith"];
43120
+ if (opts.customerId !== void 0)
43121
+ args.customer_id = opts.customerId;
43122
+ if (opts["customerId.not"] !== void 0)
43123
+ args.customer_id__not = opts["customerId.not"];
43124
+ if (opts["customerId.equals"] !== void 0)
43125
+ args.customer_id__equals = opts["customerId.equals"];
43126
+ if (opts["customerId.contains"] !== void 0)
43127
+ args.customer_id__contains = opts["customerId.contains"];
43128
+ if (opts["customerId.startsWith"] !== void 0)
43129
+ args.customer_id__startsWith = opts["customerId.startsWith"];
43130
+ if (opts["customerId.endWith"] !== void 0)
43131
+ args.customer_id__endWith = opts["customerId.endWith"];
43132
+ if (opts["customerId.isNull"] !== void 0)
43133
+ args.customer_id__isNull = opts["customerId.isNull"];
43134
+ if (opts["customerId.isNotNull"] !== void 0)
43135
+ args.customer_id__isNotNull = opts["customerId.isNotNull"];
43136
+ if (opts.take !== void 0)
43137
+ args.take = Number(opts.take);
43138
+ if (opts.skip !== void 0)
43139
+ args.skip = Number(opts.skip);
43140
+ await ctx.execute({
43141
+ method: "GET",
43142
+ path: "/v1/files",
43143
+ args,
43144
+ queryParamKeys: [
43145
+ "take",
43146
+ "skip",
43147
+ "name",
43148
+ "name__not",
43149
+ "name__equals",
43150
+ "name__contains",
43151
+ "name__startsWith",
43152
+ "name__endWith",
43153
+ "customer_id",
43154
+ "customer_id__not",
43155
+ "customer_id__equals",
43156
+ "customer_id__contains",
43157
+ "customer_id__startsWith",
43158
+ "customer_id__endWith",
43159
+ "customer_id__isNull",
43160
+ "customer_id__isNotNull"
43161
+ ]
42850
43162
  });
42851
43163
  });
42852
43164
  resource.command("create").description(`Upload a new file (max 10MB). Requires multipart form data with a file field and metadata (name and customer_id).`).requiredOption("--name <value>", `Name of the file to be uploaded.`).requiredOption("--customer-id <value>", `ID of the customer to link the file to.`).addHelpText("after", `
@@ -42901,7 +43213,7 @@ Examples:
42901
43213
  // build/commands/generated/invoices.js
42902
43214
  function registerInvoicesCommands(parent) {
42903
43215
  const resource = parent.command("invoices").description("Manage invoices");
42904
- resource.command("list").description(`List invoices with filters for type, status, customer_id, customer_external_id, subscription_id, invoicing_entity_id, invoice_number, period dates, emission_date, due_date, and updated_at. Sortable by created_at or emitted_at. By default, open invoices are excluded. Paginated with limit/cursor.`).option("--limit <number>", `Maximum number of items to return (1-100).`).option("--cursor <value>", `Opaque cursor returned in the previous response's \`next_cursor\`. Omit to fetch the first page.`).option("--include-total <value>", `Set to \`true\` to include \`total\` in the response.`).option("--order <value>", `Sort direction.`).option("--sort <value>", `Field used to sort the results.`).option("--type <value>", `type`).option("--type.in <value>", `type__in`).option("--status <value>", `status`).option("--status.in <value>", `status__in`).option("--customer-id <value>", `customer_id`).option("--customer-id.not <value>", `customer_id__not`).option("--customer-id.is-null <value>", `customer_id__isNull`).option("--customer-id.is-not-null <value>", `customer_id__isNotNull`).option("--customer-id.equals <value>", `customer_id__equals`).option("--customer-id.contains <value>", `customer_id__contains`).option("--customer-id.starts-with <value>", `customer_id__startsWith`).option("--customer-id.end-with <value>", `customer_id__endWith`).option("--customer-external-id <value>", `customer_external_id`).option("--subscription-id <value>", `subscription_id`).option("--subscription-id.not <value>", `subscription_id__not`).option("--subscription-id.is-null <value>", `subscription_id__isNull`).option("--subscription-id.is-not-null <value>", `subscription_id__isNotNull`).option("--subscription-id.equals <value>", `subscription_id__equals`).option("--subscription-id.contains <value>", `subscription_id__contains`).option("--subscription-id.starts-with <value>", `subscription_id__startsWith`).option("--subscription-id.end-with <value>", `subscription_id__endWith`).option("--invoicing-entity-id <value>", `invoicing_entity_id`).option("--invoicing-entity-id.not <value>", `invoicing_entity_id__not`).option("--invoicing-entity-id.is-null <value>", `invoicing_entity_id__isNull`).option("--invoicing-entity-id.is-not-null <value>", `invoicing_entity_id__isNotNull`).option("--invoicing-entity-id.equals <value>", `invoicing_entity_id__equals`).option("--invoicing-entity-id.contains <value>", `invoicing_entity_id__contains`).option("--invoicing-entity-id.starts-with <value>", `invoicing_entity_id__startsWith`).option("--invoicing-entity-id.end-with <value>", `invoicing_entity_id__endWith`).option("--invoice-number <value>", `invoice_number`).option("--invoice-number.not <value>", `invoice_number__not`).option("--invoice-number.is-null <value>", `invoice_number__isNull`).option("--invoice-number.is-not-null <value>", `invoice_number__isNotNull`).option("--invoice-number.equals <value>", `invoice_number__equals`).option("--invoice-number.contains <value>", `invoice_number__contains`).option("--invoice-number.starts-with <value>", `invoice_number__startsWith`).option("--invoice-number.end-with <value>", `invoice_number__endWith`).option("--original-invoice-id <value>", `original_invoice_id`).option("--original-invoice-id.not <value>", `original_invoice_id__not`).option("--original-invoice-id.is-null <value>", `original_invoice_id__isNull`).option("--original-invoice-id.is-not-null <value>", `original_invoice_id__isNotNull`).option("--original-invoice-id.equals <value>", `original_invoice_id__equals`).option("--original-invoice-id.contains <value>", `original_invoice_id__contains`).option("--original-invoice-id.starts-with <value>", `original_invoice_id__startsWith`).option("--original-invoice-id.end-with <value>", `original_invoice_id__endWith`).option("--original-invoice-number <value>", `original_invoice_number`).option("--original-invoice-number.not <value>", `original_invoice_number__not`).option("--original-invoice-number.is-null <value>", `original_invoice_number__isNull`).option("--original-invoice-number.is-not-null <value>", `original_invoice_number__isNotNull`).option("--original-invoice-number.equals <value>", `original_invoice_number__equals`).option("--original-invoice-number.contains <value>", `original_invoice_number__contains`).option("--original-invoice-number.starts-with <value>", `original_invoice_number__startsWith`).option("--original-invoice-number.end-with <value>", `original_invoice_number__endWith`).option("--line-item-id <value>", `line_item_id`).option("--period-start <value>", `period_start`).option("--period-start.not <value>", `period_start__not`).option("--period-start.is-null <value>", `period_start__isNull`).option("--period-start.is-not-null <value>", `period_start__isNotNull`).option("--period-start.equals <value>", `period_start__equals`).option("--period-start.lt <value>", `period_start__lt`).option("--period-start.lte <value>", `period_start__lte`).option("--period-start.gt <value>", `period_start__gt`).option("--period-start.gte <value>", `period_start__gte`).option("--period-end <value>", `period_end`).option("--period-end.not <value>", `period_end__not`).option("--period-end.is-null <value>", `period_end__isNull`).option("--period-end.is-not-null <value>", `period_end__isNotNull`).option("--period-end.equals <value>", `period_end__equals`).option("--period-end.lt <value>", `period_end__lt`).option("--period-end.lte <value>", `period_end__lte`).option("--period-end.gt <value>", `period_end__gt`).option("--period-end.gte <value>", `period_end__gte`).option("--issued-at <value>", `issued_at`).option("--issued-at.not <value>", `issued_at__not`).option("--issued-at.is-null <value>", `issued_at__isNull`).option("--issued-at.is-not-null <value>", `issued_at__isNotNull`).option("--issued-at.equals <value>", `issued_at__equals`).option("--issued-at.lt <value>", `issued_at__lt`).option("--issued-at.lte <value>", `issued_at__lte`).option("--issued-at.gt <value>", `issued_at__gt`).option("--issued-at.gte <value>", `issued_at__gte`).option("--due-at <value>", `due_at`).option("--due-at.not <value>", `due_at__not`).option("--due-at.is-null <value>", `due_at__isNull`).option("--due-at.is-not-null <value>", `due_at__isNotNull`).option("--due-at.equals <value>", `due_at__equals`).option("--due-at.lt <value>", `due_at__lt`).option("--due-at.lte <value>", `due_at__lte`).option("--due-at.gt <value>", `due_at__gt`).option("--due-at.gte <value>", `due_at__gte`).option("--updated-at <value>", `updated_at`).option("--updated-at.not <value>", `updated_at__not`).option("--updated-at.is-null <value>", `updated_at__isNull`).option("--updated-at.is-not-null <value>", `updated_at__isNotNull`).option("--updated-at.equals <value>", `updated_at__equals`).option("--updated-at.lt <value>", `updated_at__lt`).option("--updated-at.lte <value>", `updated_at__lte`).option("--updated-at.gt <value>", `updated_at__gt`).option("--updated-at.gte <value>", `updated_at__gte`).addHelpText("after", `
43216
+ resource.command("list").description(`List invoices with filters for type, status, customer_id, customer_external_id, subscription_id, invoicing_entity_id, invoice_number, period dates, emission_date, due_date, and updated_at. Sortable by created_at or emitted_at. By default, open invoices are excluded. Paginated with limit/cursor.`).option("--limit <number>", `Maximum number of items to return (1-100).`).option("--cursor <value>", `Opaque cursor returned in the previous response's \`next_cursor\`. Omit to fetch the first page.`).option("--include-total <value>", `Set to \`true\` to include \`total\` in the response.`).option("--order <value>", `Sort direction.`).option("--sort <value>", `Field used to sort the results.`).option("--type <value>", `type`).option("--type.in <value>", `type__in`).option("--status <value>", `status`).option("--status.in <value>", `status__in`).option("--customer-id <value>", `customer_id`).option("--customer-id.not <value>", `customer_id__not`).option("--customer-id.equals <value>", `customer_id__equals`).option("--customer-id.contains <value>", `customer_id__contains`).option("--customer-id.starts-with <value>", `customer_id__startsWith`).option("--customer-id.end-with <value>", `customer_id__endWith`).option("--customer-external-id <value>", `customer_external_id`).option("--subscription-id <value>", `subscription_id`).option("--subscription-id.not <value>", `subscription_id__not`).option("--subscription-id.equals <value>", `subscription_id__equals`).option("--subscription-id.contains <value>", `subscription_id__contains`).option("--subscription-id.starts-with <value>", `subscription_id__startsWith`).option("--subscription-id.end-with <value>", `subscription_id__endWith`).option("--subscription-id.is-null <value>", `subscription_id__isNull`).option("--subscription-id.is-not-null <value>", `subscription_id__isNotNull`).option("--invoicing-entity-id <value>", `invoicing_entity_id`).option("--invoicing-entity-id.not <value>", `invoicing_entity_id__not`).option("--invoicing-entity-id.equals <value>", `invoicing_entity_id__equals`).option("--invoicing-entity-id.contains <value>", `invoicing_entity_id__contains`).option("--invoicing-entity-id.starts-with <value>", `invoicing_entity_id__startsWith`).option("--invoicing-entity-id.end-with <value>", `invoicing_entity_id__endWith`).option("--invoice-number <value>", `invoice_number`).option("--invoice-number.not <value>", `invoice_number__not`).option("--invoice-number.equals <value>", `invoice_number__equals`).option("--invoice-number.contains <value>", `invoice_number__contains`).option("--invoice-number.starts-with <value>", `invoice_number__startsWith`).option("--invoice-number.end-with <value>", `invoice_number__endWith`).option("--original-invoice-id <value>", `original_invoice_id`).option("--original-invoice-id.not <value>", `original_invoice_id__not`).option("--original-invoice-id.equals <value>", `original_invoice_id__equals`).option("--original-invoice-id.contains <value>", `original_invoice_id__contains`).option("--original-invoice-id.starts-with <value>", `original_invoice_id__startsWith`).option("--original-invoice-id.end-with <value>", `original_invoice_id__endWith`).option("--original-invoice-id.is-null <value>", `original_invoice_id__isNull`).option("--original-invoice-id.is-not-null <value>", `original_invoice_id__isNotNull`).option("--original-invoice-number <value>", `original_invoice_number`).option("--original-invoice-number.not <value>", `original_invoice_number__not`).option("--original-invoice-number.equals <value>", `original_invoice_number__equals`).option("--original-invoice-number.contains <value>", `original_invoice_number__contains`).option("--original-invoice-number.starts-with <value>", `original_invoice_number__startsWith`).option("--original-invoice-number.end-with <value>", `original_invoice_number__endWith`).option("--original-invoice-number.is-null <value>", `original_invoice_number__isNull`).option("--original-invoice-number.is-not-null <value>", `original_invoice_number__isNotNull`).option("--line-item-id <value>", `line_item_id`).option("--period-start <value>", `period_start`).option("--period-start.not <value>", `period_start__not`).option("--period-start.equals <value>", `period_start__equals`).option("--period-start.lt <value>", `period_start__lt`).option("--period-start.lte <value>", `period_start__lte`).option("--period-start.gt <value>", `period_start__gt`).option("--period-start.gte <value>", `period_start__gte`).option("--period-start.is-null <value>", `period_start__isNull`).option("--period-start.is-not-null <value>", `period_start__isNotNull`).option("--period-end <value>", `period_end`).option("--period-end.not <value>", `period_end__not`).option("--period-end.equals <value>", `period_end__equals`).option("--period-end.lt <value>", `period_end__lt`).option("--period-end.lte <value>", `period_end__lte`).option("--period-end.gt <value>", `period_end__gt`).option("--period-end.gte <value>", `period_end__gte`).option("--period-end.is-null <value>", `period_end__isNull`).option("--period-end.is-not-null <value>", `period_end__isNotNull`).option("--issued-at <value>", `issued_at`).option("--issued-at.not <value>", `issued_at__not`).option("--issued-at.equals <value>", `issued_at__equals`).option("--issued-at.lt <value>", `issued_at__lt`).option("--issued-at.lte <value>", `issued_at__lte`).option("--issued-at.gt <value>", `issued_at__gt`).option("--issued-at.gte <value>", `issued_at__gte`).option("--due-at <value>", `due_at`).option("--due-at.not <value>", `due_at__not`).option("--due-at.equals <value>", `due_at__equals`).option("--due-at.lt <value>", `due_at__lt`).option("--due-at.lte <value>", `due_at__lte`).option("--due-at.gt <value>", `due_at__gt`).option("--due-at.gte <value>", `due_at__gte`).option("--updated-at <value>", `updated_at`).option("--updated-at.not <value>", `updated_at__not`).option("--updated-at.equals <value>", `updated_at__equals`).option("--updated-at.lt <value>", `updated_at__lt`).option("--updated-at.lte <value>", `updated_at__lte`).option("--updated-at.gt <value>", `updated_at__gt`).option("--updated-at.gte <value>", `updated_at__gte`).addHelpText("after", `
42905
43217
  Examples:
42906
43218
  hyperline invoices list
42907
43219
  hyperline invoices list --limit <limit> --cursor <cursor>`).action(async (opts) => {
@@ -42931,10 +43243,6 @@ Examples:
42931
43243
  args.customer_id = opts.customerId;
42932
43244
  if (opts["customerId.not"] !== void 0)
42933
43245
  args.customer_id__not = opts["customerId.not"];
42934
- if (opts["customerId.isNull"] !== void 0)
42935
- args.customer_id__isNull = opts["customerId.isNull"];
42936
- if (opts["customerId.isNotNull"] !== void 0)
42937
- args.customer_id__isNotNull = opts["customerId.isNotNull"];
42938
43246
  if (opts["customerId.equals"] !== void 0)
42939
43247
  args.customer_id__equals = opts["customerId.equals"];
42940
43248
  if (opts["customerId.contains"] !== void 0)
@@ -42949,10 +43257,6 @@ Examples:
42949
43257
  args.subscription_id = opts.subscriptionId;
42950
43258
  if (opts["subscriptionId.not"] !== void 0)
42951
43259
  args.subscription_id__not = opts["subscriptionId.not"];
42952
- if (opts["subscriptionId.isNull"] !== void 0)
42953
- args.subscription_id__isNull = opts["subscriptionId.isNull"];
42954
- if (opts["subscriptionId.isNotNull"] !== void 0)
42955
- args.subscription_id__isNotNull = opts["subscriptionId.isNotNull"];
42956
43260
  if (opts["subscriptionId.equals"] !== void 0)
42957
43261
  args.subscription_id__equals = opts["subscriptionId.equals"];
42958
43262
  if (opts["subscriptionId.contains"] !== void 0)
@@ -42961,14 +43265,14 @@ Examples:
42961
43265
  args.subscription_id__startsWith = opts["subscriptionId.startsWith"];
42962
43266
  if (opts["subscriptionId.endWith"] !== void 0)
42963
43267
  args.subscription_id__endWith = opts["subscriptionId.endWith"];
43268
+ if (opts["subscriptionId.isNull"] !== void 0)
43269
+ args.subscription_id__isNull = opts["subscriptionId.isNull"];
43270
+ if (opts["subscriptionId.isNotNull"] !== void 0)
43271
+ args.subscription_id__isNotNull = opts["subscriptionId.isNotNull"];
42964
43272
  if (opts.invoicingEntityId !== void 0)
42965
43273
  args.invoicing_entity_id = opts.invoicingEntityId;
42966
43274
  if (opts["invoicingEntityId.not"] !== void 0)
42967
43275
  args.invoicing_entity_id__not = opts["invoicingEntityId.not"];
42968
- if (opts["invoicingEntityId.isNull"] !== void 0)
42969
- args.invoicing_entity_id__isNull = opts["invoicingEntityId.isNull"];
42970
- if (opts["invoicingEntityId.isNotNull"] !== void 0)
42971
- args.invoicing_entity_id__isNotNull = opts["invoicingEntityId.isNotNull"];
42972
43276
  if (opts["invoicingEntityId.equals"] !== void 0)
42973
43277
  args.invoicing_entity_id__equals = opts["invoicingEntityId.equals"];
42974
43278
  if (opts["invoicingEntityId.contains"] !== void 0)
@@ -42981,10 +43285,6 @@ Examples:
42981
43285
  args.invoice_number = opts.invoiceNumber;
42982
43286
  if (opts["invoiceNumber.not"] !== void 0)
42983
43287
  args.invoice_number__not = opts["invoiceNumber.not"];
42984
- if (opts["invoiceNumber.isNull"] !== void 0)
42985
- args.invoice_number__isNull = opts["invoiceNumber.isNull"];
42986
- if (opts["invoiceNumber.isNotNull"] !== void 0)
42987
- args.invoice_number__isNotNull = opts["invoiceNumber.isNotNull"];
42988
43288
  if (opts["invoiceNumber.equals"] !== void 0)
42989
43289
  args.invoice_number__equals = opts["invoiceNumber.equals"];
42990
43290
  if (opts["invoiceNumber.contains"] !== void 0)
@@ -42997,10 +43297,6 @@ Examples:
42997
43297
  args.original_invoice_id = opts.originalInvoiceId;
42998
43298
  if (opts["originalInvoiceId.not"] !== void 0)
42999
43299
  args.original_invoice_id__not = opts["originalInvoiceId.not"];
43000
- if (opts["originalInvoiceId.isNull"] !== void 0)
43001
- args.original_invoice_id__isNull = opts["originalInvoiceId.isNull"];
43002
- if (opts["originalInvoiceId.isNotNull"] !== void 0)
43003
- args.original_invoice_id__isNotNull = opts["originalInvoiceId.isNotNull"];
43004
43300
  if (opts["originalInvoiceId.equals"] !== void 0)
43005
43301
  args.original_invoice_id__equals = opts["originalInvoiceId.equals"];
43006
43302
  if (opts["originalInvoiceId.contains"] !== void 0)
@@ -43009,14 +43305,14 @@ Examples:
43009
43305
  args.original_invoice_id__startsWith = opts["originalInvoiceId.startsWith"];
43010
43306
  if (opts["originalInvoiceId.endWith"] !== void 0)
43011
43307
  args.original_invoice_id__endWith = opts["originalInvoiceId.endWith"];
43308
+ if (opts["originalInvoiceId.isNull"] !== void 0)
43309
+ args.original_invoice_id__isNull = opts["originalInvoiceId.isNull"];
43310
+ if (opts["originalInvoiceId.isNotNull"] !== void 0)
43311
+ args.original_invoice_id__isNotNull = opts["originalInvoiceId.isNotNull"];
43012
43312
  if (opts.originalInvoiceNumber !== void 0)
43013
43313
  args.original_invoice_number = opts.originalInvoiceNumber;
43014
43314
  if (opts["originalInvoiceNumber.not"] !== void 0)
43015
43315
  args.original_invoice_number__not = opts["originalInvoiceNumber.not"];
43016
- if (opts["originalInvoiceNumber.isNull"] !== void 0)
43017
- args.original_invoice_number__isNull = opts["originalInvoiceNumber.isNull"];
43018
- if (opts["originalInvoiceNumber.isNotNull"] !== void 0)
43019
- args.original_invoice_number__isNotNull = opts["originalInvoiceNumber.isNotNull"];
43020
43316
  if (opts["originalInvoiceNumber.equals"] !== void 0)
43021
43317
  args.original_invoice_number__equals = opts["originalInvoiceNumber.equals"];
43022
43318
  if (opts["originalInvoiceNumber.contains"] !== void 0)
@@ -43025,16 +43321,16 @@ Examples:
43025
43321
  args.original_invoice_number__startsWith = opts["originalInvoiceNumber.startsWith"];
43026
43322
  if (opts["originalInvoiceNumber.endWith"] !== void 0)
43027
43323
  args.original_invoice_number__endWith = opts["originalInvoiceNumber.endWith"];
43324
+ if (opts["originalInvoiceNumber.isNull"] !== void 0)
43325
+ args.original_invoice_number__isNull = opts["originalInvoiceNumber.isNull"];
43326
+ if (opts["originalInvoiceNumber.isNotNull"] !== void 0)
43327
+ args.original_invoice_number__isNotNull = opts["originalInvoiceNumber.isNotNull"];
43028
43328
  if (opts.lineItemId !== void 0)
43029
43329
  args.line_item_id = opts.lineItemId;
43030
43330
  if (opts.periodStart !== void 0)
43031
43331
  args.period_start = opts.periodStart;
43032
43332
  if (opts["periodStart.not"] !== void 0)
43033
43333
  args.period_start__not = opts["periodStart.not"];
43034
- if (opts["periodStart.isNull"] !== void 0)
43035
- args.period_start__isNull = opts["periodStart.isNull"];
43036
- if (opts["periodStart.isNotNull"] !== void 0)
43037
- args.period_start__isNotNull = opts["periodStart.isNotNull"];
43038
43334
  if (opts["periodStart.equals"] !== void 0)
43039
43335
  args.period_start__equals = opts["periodStart.equals"];
43040
43336
  if (opts["periodStart.lt"] !== void 0)
@@ -43045,14 +43341,14 @@ Examples:
43045
43341
  args.period_start__gt = opts["periodStart.gt"];
43046
43342
  if (opts["periodStart.gte"] !== void 0)
43047
43343
  args.period_start__gte = opts["periodStart.gte"];
43344
+ if (opts["periodStart.isNull"] !== void 0)
43345
+ args.period_start__isNull = opts["periodStart.isNull"];
43346
+ if (opts["periodStart.isNotNull"] !== void 0)
43347
+ args.period_start__isNotNull = opts["periodStart.isNotNull"];
43048
43348
  if (opts.periodEnd !== void 0)
43049
43349
  args.period_end = opts.periodEnd;
43050
43350
  if (opts["periodEnd.not"] !== void 0)
43051
43351
  args.period_end__not = opts["periodEnd.not"];
43052
- if (opts["periodEnd.isNull"] !== void 0)
43053
- args.period_end__isNull = opts["periodEnd.isNull"];
43054
- if (opts["periodEnd.isNotNull"] !== void 0)
43055
- args.period_end__isNotNull = opts["periodEnd.isNotNull"];
43056
43352
  if (opts["periodEnd.equals"] !== void 0)
43057
43353
  args.period_end__equals = opts["periodEnd.equals"];
43058
43354
  if (opts["periodEnd.lt"] !== void 0)
@@ -43063,14 +43359,14 @@ Examples:
43063
43359
  args.period_end__gt = opts["periodEnd.gt"];
43064
43360
  if (opts["periodEnd.gte"] !== void 0)
43065
43361
  args.period_end__gte = opts["periodEnd.gte"];
43362
+ if (opts["periodEnd.isNull"] !== void 0)
43363
+ args.period_end__isNull = opts["periodEnd.isNull"];
43364
+ if (opts["periodEnd.isNotNull"] !== void 0)
43365
+ args.period_end__isNotNull = opts["periodEnd.isNotNull"];
43066
43366
  if (opts.issuedAt !== void 0)
43067
43367
  args.issued_at = opts.issuedAt;
43068
43368
  if (opts["issuedAt.not"] !== void 0)
43069
43369
  args.issued_at__not = opts["issuedAt.not"];
43070
- if (opts["issuedAt.isNull"] !== void 0)
43071
- args.issued_at__isNull = opts["issuedAt.isNull"];
43072
- if (opts["issuedAt.isNotNull"] !== void 0)
43073
- args.issued_at__isNotNull = opts["issuedAt.isNotNull"];
43074
43370
  if (opts["issuedAt.equals"] !== void 0)
43075
43371
  args.issued_at__equals = opts["issuedAt.equals"];
43076
43372
  if (opts["issuedAt.lt"] !== void 0)
@@ -43085,10 +43381,6 @@ Examples:
43085
43381
  args.due_at = opts.dueAt;
43086
43382
  if (opts["dueAt.not"] !== void 0)
43087
43383
  args.due_at__not = opts["dueAt.not"];
43088
- if (opts["dueAt.isNull"] !== void 0)
43089
- args.due_at__isNull = opts["dueAt.isNull"];
43090
- if (opts["dueAt.isNotNull"] !== void 0)
43091
- args.due_at__isNotNull = opts["dueAt.isNotNull"];
43092
43384
  if (opts["dueAt.equals"] !== void 0)
43093
43385
  args.due_at__equals = opts["dueAt.equals"];
43094
43386
  if (opts["dueAt.lt"] !== void 0)
@@ -43103,10 +43395,6 @@ Examples:
43103
43395
  args.updated_at = opts.updatedAt;
43104
43396
  if (opts["updatedAt.not"] !== void 0)
43105
43397
  args.updated_at__not = opts["updatedAt.not"];
43106
- if (opts["updatedAt.isNull"] !== void 0)
43107
- args.updated_at__isNull = opts["updatedAt.isNull"];
43108
- if (opts["updatedAt.isNotNull"] !== void 0)
43109
- args.updated_at__isNotNull = opts["updatedAt.isNotNull"];
43110
43398
  if (opts["updatedAt.equals"] !== void 0)
43111
43399
  args.updated_at__equals = opts["updatedAt.equals"];
43112
43400
  if (opts["updatedAt.lt"] !== void 0)
@@ -43135,8 +43423,6 @@ Examples:
43135
43423
  "status__in",
43136
43424
  "customer_id",
43137
43425
  "customer_id__not",
43138
- "customer_id__isNull",
43139
- "customer_id__isNotNull",
43140
43426
  "customer_id__equals",
43141
43427
  "customer_id__contains",
43142
43428
  "customer_id__startsWith",
@@ -43144,67 +43430,61 @@ Examples:
43144
43430
  "customer_external_id",
43145
43431
  "subscription_id",
43146
43432
  "subscription_id__not",
43147
- "subscription_id__isNull",
43148
- "subscription_id__isNotNull",
43149
43433
  "subscription_id__equals",
43150
43434
  "subscription_id__contains",
43151
43435
  "subscription_id__startsWith",
43152
43436
  "subscription_id__endWith",
43437
+ "subscription_id__isNull",
43438
+ "subscription_id__isNotNull",
43153
43439
  "invoicing_entity_id",
43154
43440
  "invoicing_entity_id__not",
43155
- "invoicing_entity_id__isNull",
43156
- "invoicing_entity_id__isNotNull",
43157
43441
  "invoicing_entity_id__equals",
43158
43442
  "invoicing_entity_id__contains",
43159
43443
  "invoicing_entity_id__startsWith",
43160
43444
  "invoicing_entity_id__endWith",
43161
43445
  "invoice_number",
43162
43446
  "invoice_number__not",
43163
- "invoice_number__isNull",
43164
- "invoice_number__isNotNull",
43165
43447
  "invoice_number__equals",
43166
43448
  "invoice_number__contains",
43167
43449
  "invoice_number__startsWith",
43168
43450
  "invoice_number__endWith",
43169
43451
  "original_invoice_id",
43170
43452
  "original_invoice_id__not",
43171
- "original_invoice_id__isNull",
43172
- "original_invoice_id__isNotNull",
43173
43453
  "original_invoice_id__equals",
43174
43454
  "original_invoice_id__contains",
43175
43455
  "original_invoice_id__startsWith",
43176
43456
  "original_invoice_id__endWith",
43457
+ "original_invoice_id__isNull",
43458
+ "original_invoice_id__isNotNull",
43177
43459
  "original_invoice_number",
43178
43460
  "original_invoice_number__not",
43179
- "original_invoice_number__isNull",
43180
- "original_invoice_number__isNotNull",
43181
43461
  "original_invoice_number__equals",
43182
43462
  "original_invoice_number__contains",
43183
43463
  "original_invoice_number__startsWith",
43184
43464
  "original_invoice_number__endWith",
43465
+ "original_invoice_number__isNull",
43466
+ "original_invoice_number__isNotNull",
43185
43467
  "line_item_id",
43186
43468
  "period_start",
43187
43469
  "period_start__not",
43188
- "period_start__isNull",
43189
- "period_start__isNotNull",
43190
43470
  "period_start__equals",
43191
43471
  "period_start__lt",
43192
43472
  "period_start__lte",
43193
43473
  "period_start__gt",
43194
43474
  "period_start__gte",
43475
+ "period_start__isNull",
43476
+ "period_start__isNotNull",
43195
43477
  "period_end",
43196
43478
  "period_end__not",
43197
- "period_end__isNull",
43198
- "period_end__isNotNull",
43199
43479
  "period_end__equals",
43200
43480
  "period_end__lt",
43201
43481
  "period_end__lte",
43202
43482
  "period_end__gt",
43203
43483
  "period_end__gte",
43484
+ "period_end__isNull",
43485
+ "period_end__isNotNull",
43204
43486
  "issued_at",
43205
43487
  "issued_at__not",
43206
- "issued_at__isNull",
43207
- "issued_at__isNotNull",
43208
43488
  "issued_at__equals",
43209
43489
  "issued_at__lt",
43210
43490
  "issued_at__lte",
@@ -43212,8 +43492,6 @@ Examples:
43212
43492
  "issued_at__gte",
43213
43493
  "due_at",
43214
43494
  "due_at__not",
43215
- "due_at__isNull",
43216
- "due_at__isNotNull",
43217
43495
  "due_at__equals",
43218
43496
  "due_at__lt",
43219
43497
  "due_at__lte",
@@ -43221,8 +43499,6 @@ Examples:
43221
43499
  "due_at__gte",
43222
43500
  "updated_at",
43223
43501
  "updated_at__not",
43224
- "updated_at__isNull",
43225
- "updated_at__isNotNull",
43226
43502
  "updated_at__equals",
43227
43503
  "updated_at__lt",
43228
43504
  "updated_at__lte",
@@ -43910,88 +44186,19 @@ Examples:
43910
44186
  args.credit_note_wallet_refund_enabled = true;
43911
44187
  if (opts.standaloneCreditNoteCreationEnabled !== void 0)
43912
44188
  args.standalone_credit_note_creation_enabled = true;
43913
- if (opts.fxConversionDisplayEnabled !== void 0)
43914
- args.fx_conversion_display_enabled = true;
43915
- await ctx.execute({
43916
- method: "PUT",
43917
- path: "/v1/invoicing-entities/{id}",
43918
- args,
43919
- queryParamKeys: []
43920
- });
43921
- });
43922
- resource.command("delete-invoicing-entity").description(`Soft-delete an invoicing entity by ID. Existing invoices linked to it are preserved.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
43923
- Examples:
43924
- hyperline invoicing-entities delete-invoicing-entity --id <id>
43925
- hyperline invoicing-entities delete-invoicing-entity --id <id> --output json`).action(async (opts) => {
43926
- const ctx = resource.parent?.opts()._ctx;
43927
- if (!ctx) {
43928
- process.stderr.write("Error: Not authenticated\n");
43929
- process.exit(1);
43930
- }
43931
- const args = {};
43932
- if (opts.id !== void 0)
43933
- args.id = opts.id;
43934
- if (!opts.yes) {
43935
- const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
43936
- if (!confirmed) {
43937
- process.stdout.write("Aborted.\n");
43938
- return;
43939
- }
43940
- }
43941
- await ctx.execute({
43942
- method: "DELETE",
43943
- path: "/v1/invoicing-entities/{id}",
43944
- args,
43945
- queryParamKeys: []
43946
- });
43947
- });
43948
- }
43949
-
43950
- // build/commands/generated/monitoring.js
43951
- function registerMonitoringCommands(parent) {
43952
- const resource = parent.command("monitoring").description("Manage monitoring");
43953
- 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", `
43954
- Examples:
43955
- hyperline monitoring list-monitoring-analyses
43956
- hyperline monitoring list-monitoring-analyses --limit <limit> --cursor <cursor>`).action(async (opts) => {
43957
- const ctx = resource.parent?.opts()._ctx;
43958
- if (!ctx) {
43959
- process.stderr.write("Error: Not authenticated\n");
43960
- process.exit(1);
43961
- }
43962
- const args = {};
43963
- if (opts.cursor !== void 0)
43964
- args.cursor = opts.cursor;
43965
- if (opts.includeTotal !== void 0)
43966
- args.include_total = opts.includeTotal;
43967
- if (opts.customerId !== void 0)
43968
- args.customer_id = opts.customerId;
43969
- if (opts.status !== void 0)
43970
- args.status = opts.status;
43971
- if (opts["createdAt.gte"] !== void 0)
43972
- args.created_at__gte = opts["createdAt.gte"];
43973
- if (opts["createdAt.lte"] !== void 0)
43974
- args.created_at__lte = opts["createdAt.lte"];
43975
- if (opts.limit !== void 0)
43976
- args.limit = Number(opts.limit);
43977
- await ctx.execute({
43978
- method: "GET",
43979
- path: "/v1/agents/monitoring/analyses",
43980
- args,
43981
- queryParamKeys: [
43982
- "limit",
43983
- "cursor",
43984
- "include_total",
43985
- "customer_id",
43986
- "status",
43987
- "created_at__gte",
43988
- "created_at__lte"
43989
- ]
44189
+ if (opts.fxConversionDisplayEnabled !== void 0)
44190
+ args.fx_conversion_display_enabled = true;
44191
+ await ctx.execute({
44192
+ method: "PUT",
44193
+ path: "/v1/invoicing-entities/{id}",
44194
+ args,
44195
+ queryParamKeys: []
43990
44196
  });
43991
44197
  });
43992
- 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", `
44198
+ resource.command("delete-invoicing-entity").description(`Soft-delete an invoicing entity by ID. Existing invoices linked to it are preserved.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
43993
44199
  Examples:
43994
- hyperline monitoring get-monitoring-analysis --id <id>`).action(async (opts) => {
44200
+ hyperline invoicing-entities delete-invoicing-entity --id <id>
44201
+ hyperline invoicing-entities delete-invoicing-entity --id <id> --output json`).action(async (opts) => {
43995
44202
  const ctx = resource.parent?.opts()._ctx;
43996
44203
  if (!ctx) {
43997
44204
  process.stderr.write("Error: Not authenticated\n");
@@ -44000,9 +44207,16 @@ Examples:
44000
44207
  const args = {};
44001
44208
  if (opts.id !== void 0)
44002
44209
  args.id = opts.id;
44210
+ if (!opts.yes) {
44211
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
44212
+ if (!confirmed) {
44213
+ process.stdout.write("Aborted.\n");
44214
+ return;
44215
+ }
44216
+ }
44003
44217
  await ctx.execute({
44004
- method: "GET",
44005
- path: "/v1/agents/monitoring/analyses/{id}",
44218
+ method: "DELETE",
44219
+ path: "/v1/invoicing-entities/{id}",
44006
44220
  args,
44007
44221
  queryParamKeys: []
44008
44222
  });
@@ -44012,7 +44226,7 @@ Examples:
44012
44226
  // build/commands/generated/organisations.js
44013
44227
  function registerOrganisationsCommands(parent) {
44014
44228
  const resource = parent.command("organisations").description("Manage organisations");
44015
- resource.command("list").description(`Retrieve organisations with their billing details and child customer IDs.`).option("--limit <number>", `Maximum number of items to return (1-100).`).option("--cursor <value>", `Opaque cursor returned in the previous response's \`next_cursor\`. Omit to fetch the first page.`).option("--include-total <value>", `Set to \`true\` to include \`total\` in the response.`).option("--order <value>", `Sort direction.`).option("--sort <value>", `Field used to sort the results.`).option("--created-at <value>", `created_at`).option("--created-at.not <value>", `created_at__not`).option("--created-at.is-null <value>", `created_at__isNull`).option("--created-at.is-not-null <value>", `created_at__isNotNull`).option("--created-at.equals <value>", `created_at__equals`).option("--created-at.lt <value>", `created_at__lt`).option("--created-at.lte <value>", `created_at__lte`).option("--created-at.gt <value>", `created_at__gt`).option("--created-at.gte <value>", `created_at__gte`).option("--updated-at <value>", `updated_at`).option("--updated-at.not <value>", `updated_at__not`).option("--updated-at.is-null <value>", `updated_at__isNull`).option("--updated-at.is-not-null <value>", `updated_at__isNotNull`).option("--updated-at.equals <value>", `updated_at__equals`).option("--updated-at.lt <value>", `updated_at__lt`).option("--updated-at.lte <value>", `updated_at__lte`).option("--updated-at.gt <value>", `updated_at__gt`).option("--updated-at.gte <value>", `updated_at__gte`).addHelpText("after", `
44229
+ resource.command("list").description(`Retrieve organisations with their billing details and child customer IDs.`).option("--limit <number>", `Maximum number of items to return (1-100).`).option("--cursor <value>", `Opaque cursor returned in the previous response's \`next_cursor\`. Omit to fetch the first page.`).option("--include-total <value>", `Set to \`true\` to include \`total\` in the response.`).option("--order <value>", `Sort direction.`).option("--sort <value>", `Field used to sort the results.`).option("--created-at <value>", `created_at`).option("--created-at.not <value>", `created_at__not`).option("--created-at.equals <value>", `created_at__equals`).option("--created-at.lt <value>", `created_at__lt`).option("--created-at.lte <value>", `created_at__lte`).option("--created-at.gt <value>", `created_at__gt`).option("--created-at.gte <value>", `created_at__gte`).option("--updated-at <value>", `updated_at`).option("--updated-at.not <value>", `updated_at__not`).option("--updated-at.equals <value>", `updated_at__equals`).option("--updated-at.lt <value>", `updated_at__lt`).option("--updated-at.lte <value>", `updated_at__lte`).option("--updated-at.gt <value>", `updated_at__gt`).option("--updated-at.gte <value>", `updated_at__gte`).addHelpText("after", `
44016
44230
  Examples:
44017
44231
  hyperline organisations list
44018
44232
  hyperline organisations list --limit <limit> --cursor <cursor>`).action(async (opts) => {
@@ -44034,10 +44248,6 @@ Examples:
44034
44248
  args.created_at = opts.createdAt;
44035
44249
  if (opts["createdAt.not"] !== void 0)
44036
44250
  args.created_at__not = opts["createdAt.not"];
44037
- if (opts["createdAt.isNull"] !== void 0)
44038
- args.created_at__isNull = opts["createdAt.isNull"];
44039
- if (opts["createdAt.isNotNull"] !== void 0)
44040
- args.created_at__isNotNull = opts["createdAt.isNotNull"];
44041
44251
  if (opts["createdAt.equals"] !== void 0)
44042
44252
  args.created_at__equals = opts["createdAt.equals"];
44043
44253
  if (opts["createdAt.lt"] !== void 0)
@@ -44052,10 +44262,6 @@ Examples:
44052
44262
  args.updated_at = opts.updatedAt;
44053
44263
  if (opts["updatedAt.not"] !== void 0)
44054
44264
  args.updated_at__not = opts["updatedAt.not"];
44055
- if (opts["updatedAt.isNull"] !== void 0)
44056
- args.updated_at__isNull = opts["updatedAt.isNull"];
44057
- if (opts["updatedAt.isNotNull"] !== void 0)
44058
- args.updated_at__isNotNull = opts["updatedAt.isNotNull"];
44059
44265
  if (opts["updatedAt.equals"] !== void 0)
44060
44266
  args.updated_at__equals = opts["updatedAt.equals"];
44061
44267
  if (opts["updatedAt.lt"] !== void 0)
@@ -44080,8 +44286,6 @@ Examples:
44080
44286
  "sort",
44081
44287
  "created_at",
44082
44288
  "created_at__not",
44083
- "created_at__isNull",
44084
- "created_at__isNotNull",
44085
44289
  "created_at__equals",
44086
44290
  "created_at__lt",
44087
44291
  "created_at__lte",
@@ -44089,8 +44293,6 @@ Examples:
44089
44293
  "created_at__gte",
44090
44294
  "updated_at",
44091
44295
  "updated_at__not",
44092
- "updated_at__isNull",
44093
- "updated_at__isNotNull",
44094
44296
  "updated_at__equals",
44095
44297
  "updated_at__lt",
44096
44298
  "updated_at__lte",
@@ -44204,7 +44406,7 @@ Examples:
44204
44406
  // build/commands/generated/price-configurations.js
44205
44407
  function registerPrice_ConfigurationsCommands(parent) {
44206
44408
  const resource = parent.command("price-configurations").description("Manage price configurations");
44207
- resource.command("list").description(`List price configurations with optional filters for product_id and price_book_id. Price configurations define how a product is priced (tiers, volume, graduated, etc.). Paginated with take/skip.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--product-id <value>", `product_id`).option("--product-id.not <value>", `product_id__not`).option("--product-id.is-null <value>", `product_id__isNull`).option("--product-id.is-not-null <value>", `product_id__isNotNull`).option("--product-id.equals <value>", `product_id__equals`).option("--product-id.contains <value>", `product_id__contains`).option("--product-id.starts-with <value>", `product_id__startsWith`).option("--product-id.end-with <value>", `product_id__endWith`).option("--price-book-id <value>", `price_book_id`).option("--price-book-id.not <value>", `price_book_id__not`).option("--price-book-id.is-null <value>", `price_book_id__isNull`).option("--price-book-id.is-not-null <value>", `price_book_id__isNotNull`).option("--price-book-id.equals <value>", `price_book_id__equals`).option("--price-book-id.contains <value>", `price_book_id__contains`).option("--price-book-id.starts-with <value>", `price_book_id__startsWith`).option("--price-book-id.end-with <value>", `price_book_id__endWith`).addHelpText("after", `
44409
+ resource.command("list").description(`List price configurations with optional filters for product_id and price_book_id. Price configurations define how a product is priced (tiers, volume, graduated, etc.). Paginated with take/skip.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--product-id <value>", `product_id`).option("--product-id.not <value>", `product_id__not`).option("--product-id.equals <value>", `product_id__equals`).option("--product-id.contains <value>", `product_id__contains`).option("--product-id.starts-with <value>", `product_id__startsWith`).option("--product-id.end-with <value>", `product_id__endWith`).option("--price-book-id <value>", `price_book_id`).option("--price-book-id.not <value>", `price_book_id__not`).option("--price-book-id.equals <value>", `price_book_id__equals`).option("--price-book-id.contains <value>", `price_book_id__contains`).option("--price-book-id.starts-with <value>", `price_book_id__startsWith`).option("--price-book-id.end-with <value>", `price_book_id__endWith`).option("--price-book-id.is-null <value>", `price_book_id__isNull`).option("--price-book-id.is-not-null <value>", `price_book_id__isNotNull`).addHelpText("after", `
44208
44410
  Examples:
44209
44411
  hyperline price-configurations list
44210
44412
  hyperline price-configurations list --take <take> --product-id <product_id>`).action(async (opts) => {
@@ -44218,10 +44420,6 @@ Examples:
44218
44420
  args.product_id = opts.productId;
44219
44421
  if (opts["productId.not"] !== void 0)
44220
44422
  args.product_id__not = opts["productId.not"];
44221
- if (opts["productId.isNull"] !== void 0)
44222
- args.product_id__isNull = opts["productId.isNull"];
44223
- if (opts["productId.isNotNull"] !== void 0)
44224
- args.product_id__isNotNull = opts["productId.isNotNull"];
44225
44423
  if (opts["productId.equals"] !== void 0)
44226
44424
  args.product_id__equals = opts["productId.equals"];
44227
44425
  if (opts["productId.contains"] !== void 0)
@@ -44234,10 +44432,6 @@ Examples:
44234
44432
  args.price_book_id = opts.priceBookId;
44235
44433
  if (opts["priceBookId.not"] !== void 0)
44236
44434
  args.price_book_id__not = opts["priceBookId.not"];
44237
- if (opts["priceBookId.isNull"] !== void 0)
44238
- args.price_book_id__isNull = opts["priceBookId.isNull"];
44239
- if (opts["priceBookId.isNotNull"] !== void 0)
44240
- args.price_book_id__isNotNull = opts["priceBookId.isNotNull"];
44241
44435
  if (opts["priceBookId.equals"] !== void 0)
44242
44436
  args.price_book_id__equals = opts["priceBookId.equals"];
44243
44437
  if (opts["priceBookId.contains"] !== void 0)
@@ -44246,6 +44440,10 @@ Examples:
44246
44440
  args.price_book_id__startsWith = opts["priceBookId.startsWith"];
44247
44441
  if (opts["priceBookId.endWith"] !== void 0)
44248
44442
  args.price_book_id__endWith = opts["priceBookId.endWith"];
44443
+ if (opts["priceBookId.isNull"] !== void 0)
44444
+ args.price_book_id__isNull = opts["priceBookId.isNull"];
44445
+ if (opts["priceBookId.isNotNull"] !== void 0)
44446
+ args.price_book_id__isNotNull = opts["priceBookId.isNotNull"];
44249
44447
  if (opts.take !== void 0)
44250
44448
  args.take = Number(opts.take);
44251
44449
  if (opts.skip !== void 0)
@@ -44259,20 +44457,18 @@ Examples:
44259
44457
  "skip",
44260
44458
  "product_id",
44261
44459
  "product_id__not",
44262
- "product_id__isNull",
44263
- "product_id__isNotNull",
44264
44460
  "product_id__equals",
44265
44461
  "product_id__contains",
44266
44462
  "product_id__startsWith",
44267
44463
  "product_id__endWith",
44268
44464
  "price_book_id",
44269
44465
  "price_book_id__not",
44270
- "price_book_id__isNull",
44271
- "price_book_id__isNotNull",
44272
44466
  "price_book_id__equals",
44273
44467
  "price_book_id__contains",
44274
44468
  "price_book_id__startsWith",
44275
- "price_book_id__endWith"
44469
+ "price_book_id__endWith",
44470
+ "price_book_id__isNull",
44471
+ "price_book_id__isNotNull"
44276
44472
  ]
44277
44473
  });
44278
44474
  });
@@ -44294,7 +44490,7 @@ Examples:
44294
44490
  queryParamKeys: []
44295
44491
  });
44296
44492
  });
44297
- 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", `
44493
+ resource.command("create").description(`Create a new price configuration on an existing product. Specify the product_id, pricing type (fee, volume, bulk, packaged, bps, bundle), currency, billing interval, and price tiers. Supports metering_filter for dynamic products.`).requiredOption("--currency <value>", `Currency code. See [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217#List_of_ISO_4217_currency_codes).`).option("--countries <json>", `Countries this price configuration is eligible in. Omit or send \`null\` to make it eligible in every country. An empty array restricts it to customers that have no country set.`).option("--price-book-id <value>", `ID of the price book to which this price configuration belongs to. If null, the price configuration belongs to the default price book.`).requiredOption("--billing-interval <json>", `Billing interval on which the price configuration is eligible.`).option("--commitment-interval <json>", `Commitment interval on which the price configuration is eligible.`).requiredOption("--type <value>", `type`).requiredOption("--prices <json>", `Price tiers of the price configuration. If fixed amount, only one price is available.`).requiredOption("--product-id <value>", `ID of the product to add the price configuration to.`).option("--metering-filter <json>", `Filter to scope which billable events are eligible for this price configuration.`).option("--aggregator-filter-id <value>", `ID of an existing metering filter of the product's aggregator to attach to this price configuration, instead of creating a new one with \`metering_filter\`.`).option("--allow-on-portal", `allow_on_portal`).addHelpText("after", `
44298
44494
  Examples:
44299
44495
  hyperline price-configurations create --currency <currency> --billing-interval <billing_interval> --type <type> --prices <prices> --product-id <product_id>
44300
44496
  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>
@@ -44313,6 +44509,8 @@ Examples:
44313
44509
  args.type = opts.type;
44314
44510
  if (opts.productId !== void 0)
44315
44511
  args.product_id = opts.productId;
44512
+ if (opts.aggregatorFilterId !== void 0)
44513
+ args.aggregator_filter_id = opts.aggregatorFilterId;
44316
44514
  if (opts.allowOnPortal !== void 0)
44317
44515
  args.allow_on_portal = true;
44318
44516
  if (opts.countries !== void 0)
@@ -44396,7 +44594,7 @@ Examples:
44396
44594
  // build/commands/generated/products.js
44397
44595
  function registerProductsCommands(parent) {
44398
44596
  const resource = parent.command("products").description("Manage products");
44399
- resource.command("list").description(`List products with optional filters for id, status, name, description, type, and price_book_id. Products define what is being sold (flat fee, per-unit, usage-based, etc.). Paginated with take/skip.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--id <value>", `id`).option("--id.not <value>", `id__not`).option("--id.is-null <value>", `id__isNull`).option("--id.is-not-null <value>", `id__isNotNull`).option("--id.equals <value>", `id__equals`).option("--id.contains <value>", `id__contains`).option("--id.starts-with <value>", `id__startsWith`).option("--id.end-with <value>", `id__endWith`).option("--status <value>", `status`).option("--status.in <value>", `status__in`).option("--name <value>", `name`).option("--name.not <value>", `name__not`).option("--name.is-null <value>", `name__isNull`).option("--name.is-not-null <value>", `name__isNotNull`).option("--name.equals <value>", `name__equals`).option("--name.contains <value>", `name__contains`).option("--name.starts-with <value>", `name__startsWith`).option("--name.end-with <value>", `name__endWith`).option("--description <value>", `description`).option("--description.not <value>", `description__not`).option("--description.is-null <value>", `description__isNull`).option("--description.is-not-null <value>", `description__isNotNull`).option("--description.equals <value>", `description__equals`).option("--description.contains <value>", `description__contains`).option("--description.starts-with <value>", `description__startsWith`).option("--description.end-with <value>", `description__endWith`).option("--type <value>", `type`).option("--type.not <value>", `type__not`).option("--type.is-null <value>", `type__isNull`).option("--type.is-not-null <value>", `type__isNotNull`).option("--type.equals <value>", `type__equals`).option("--type.contains <value>", `type__contains`).option("--type.starts-with <value>", `type__startsWith`).option("--type.end-with <value>", `type__endWith`).option("--price-book-id <value>", `price_book_id`).addHelpText("after", `
44597
+ resource.command("list").description(`List products with optional filters for id, status, name, description, type, and price_book_id. Products define what is being sold (flat fee, per-unit, usage-based, etc.). Paginated with take/skip.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--id <value>", `id`).option("--id.not <value>", `id__not`).option("--id.equals <value>", `id__equals`).option("--id.contains <value>", `id__contains`).option("--id.starts-with <value>", `id__startsWith`).option("--id.end-with <value>", `id__endWith`).option("--status <value>", `status`).option("--status.in <value>", `status__in`).option("--name <value>", `name`).option("--name.not <value>", `name__not`).option("--name.equals <value>", `name__equals`).option("--name.contains <value>", `name__contains`).option("--name.starts-with <value>", `name__startsWith`).option("--name.end-with <value>", `name__endWith`).option("--description <value>", `description`).option("--description.not <value>", `description__not`).option("--description.equals <value>", `description__equals`).option("--description.contains <value>", `description__contains`).option("--description.starts-with <value>", `description__startsWith`).option("--description.end-with <value>", `description__endWith`).option("--description.is-null <value>", `description__isNull`).option("--description.is-not-null <value>", `description__isNotNull`).option("--type <value>", `type`).option("--type.not <value>", `type__not`).option("--type.equals <value>", `type__equals`).option("--type.contains <value>", `type__contains`).option("--type.starts-with <value>", `type__startsWith`).option("--type.end-with <value>", `type__endWith`).option("--price-book-id <value>", `price_book_id`).addHelpText("after", `
44400
44598
  Examples:
44401
44599
  hyperline products list
44402
44600
  hyperline products list --take <take> --id <id>`).action(async (opts) => {
@@ -44410,10 +44608,6 @@ Examples:
44410
44608
  args.id = opts.id;
44411
44609
  if (opts["id.not"] !== void 0)
44412
44610
  args.id__not = opts["id.not"];
44413
- if (opts["id.isNull"] !== void 0)
44414
- args.id__isNull = opts["id.isNull"];
44415
- if (opts["id.isNotNull"] !== void 0)
44416
- args.id__isNotNull = opts["id.isNotNull"];
44417
44611
  if (opts["id.equals"] !== void 0)
44418
44612
  args.id__equals = opts["id.equals"];
44419
44613
  if (opts["id.contains"] !== void 0)
@@ -44430,10 +44624,6 @@ Examples:
44430
44624
  args.name = opts.name;
44431
44625
  if (opts["name.not"] !== void 0)
44432
44626
  args.name__not = opts["name.not"];
44433
- if (opts["name.isNull"] !== void 0)
44434
- args.name__isNull = opts["name.isNull"];
44435
- if (opts["name.isNotNull"] !== void 0)
44436
- args.name__isNotNull = opts["name.isNotNull"];
44437
44627
  if (opts["name.equals"] !== void 0)
44438
44628
  args.name__equals = opts["name.equals"];
44439
44629
  if (opts["name.contains"] !== void 0)
@@ -44446,10 +44636,6 @@ Examples:
44446
44636
  args.description = opts.description;
44447
44637
  if (opts["description.not"] !== void 0)
44448
44638
  args.description__not = opts["description.not"];
44449
- if (opts["description.isNull"] !== void 0)
44450
- args.description__isNull = opts["description.isNull"];
44451
- if (opts["description.isNotNull"] !== void 0)
44452
- args.description__isNotNull = opts["description.isNotNull"];
44453
44639
  if (opts["description.equals"] !== void 0)
44454
44640
  args.description__equals = opts["description.equals"];
44455
44641
  if (opts["description.contains"] !== void 0)
@@ -44458,14 +44644,14 @@ Examples:
44458
44644
  args.description__startsWith = opts["description.startsWith"];
44459
44645
  if (opts["description.endWith"] !== void 0)
44460
44646
  args.description__endWith = opts["description.endWith"];
44647
+ if (opts["description.isNull"] !== void 0)
44648
+ args.description__isNull = opts["description.isNull"];
44649
+ if (opts["description.isNotNull"] !== void 0)
44650
+ args.description__isNotNull = opts["description.isNotNull"];
44461
44651
  if (opts.type !== void 0)
44462
44652
  args.type = opts.type;
44463
44653
  if (opts["type.not"] !== void 0)
44464
44654
  args.type__not = opts["type.not"];
44465
- if (opts["type.isNull"] !== void 0)
44466
- args.type__isNull = opts["type.isNull"];
44467
- if (opts["type.isNotNull"] !== void 0)
44468
- args.type__isNotNull = opts["type.isNotNull"];
44469
44655
  if (opts["type.equals"] !== void 0)
44470
44656
  args.type__equals = opts["type.equals"];
44471
44657
  if (opts["type.contains"] !== void 0)
@@ -44489,8 +44675,6 @@ Examples:
44489
44675
  "skip",
44490
44676
  "id",
44491
44677
  "id__not",
44492
- "id__isNull",
44493
- "id__isNotNull",
44494
44678
  "id__equals",
44495
44679
  "id__contains",
44496
44680
  "id__startsWith",
@@ -44499,24 +44683,20 @@ Examples:
44499
44683
  "status__in",
44500
44684
  "name",
44501
44685
  "name__not",
44502
- "name__isNull",
44503
- "name__isNotNull",
44504
44686
  "name__equals",
44505
44687
  "name__contains",
44506
44688
  "name__startsWith",
44507
44689
  "name__endWith",
44508
44690
  "description",
44509
44691
  "description__not",
44510
- "description__isNull",
44511
- "description__isNotNull",
44512
44692
  "description__equals",
44513
44693
  "description__contains",
44514
44694
  "description__startsWith",
44515
44695
  "description__endWith",
44696
+ "description__isNull",
44697
+ "description__isNotNull",
44516
44698
  "type",
44517
44699
  "type__not",
44518
- "type__isNull",
44519
- "type__isNotNull",
44520
44700
  "type__equals",
44521
44701
  "type__contains",
44522
44702
  "type__startsWith",
@@ -44717,6 +44897,80 @@ Examples:
44717
44897
  });
44718
44898
  }
44719
44899
 
44900
+ // build/commands/generated/products-features.js
44901
+ function registerProducts_FeaturesCommands(parent) {
44902
+ const resource = parent.command("products-features").description("Manage products > features");
44903
+ resource.command("list-product-features").description(`List feature values assigned to a product.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
44904
+ Examples:
44905
+ hyperline products-features list-product-features --id <id>`).action(async (opts) => {
44906
+ const ctx = resource.parent?.opts()._ctx;
44907
+ if (!ctx) {
44908
+ process.stderr.write("Error: Not authenticated\n");
44909
+ process.exit(1);
44910
+ }
44911
+ const args = {};
44912
+ if (opts.id !== void 0)
44913
+ args.id = opts.id;
44914
+ await ctx.execute({
44915
+ method: "GET",
44916
+ path: "/v1/products/{id}/features",
44917
+ args,
44918
+ queryParamKeys: []
44919
+ });
44920
+ });
44921
+ resource.command("set-product-feature").description(`Set a feature value for a product.`).requiredOption("--id <value>", `id parameter`).requiredOption("--code <value>", `code parameter`).requiredOption("--value", `Feature value.`).addHelpText("after", `
44922
+ Examples:
44923
+ hyperline products-features set-product-feature --id <id> --code <code> --value
44924
+ hyperline products-features set-product-feature --id <id> --code <code> --value --output json`).action(async (opts) => {
44925
+ const ctx = resource.parent?.opts()._ctx;
44926
+ if (!ctx) {
44927
+ process.stderr.write("Error: Not authenticated\n");
44928
+ process.exit(1);
44929
+ }
44930
+ const args = {};
44931
+ if (opts.id !== void 0)
44932
+ args.id = opts.id;
44933
+ if (opts.code !== void 0)
44934
+ args.code = opts.code;
44935
+ if (opts.value !== void 0)
44936
+ args.value = true;
44937
+ await ctx.execute({
44938
+ method: "PUT",
44939
+ path: "/v1/products/{id}/features/{code}",
44940
+ args,
44941
+ queryParamKeys: []
44942
+ });
44943
+ });
44944
+ resource.command("delete-product-feature").description(`Delete a feature value from a product.`).requiredOption("--id <value>", `id parameter`).requiredOption("--code <value>", `code parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
44945
+ Examples:
44946
+ hyperline products-features delete-product-feature --id <id> --code <code>
44947
+ hyperline products-features delete-product-feature --id <id> --code <code> --output json`).action(async (opts) => {
44948
+ const ctx = resource.parent?.opts()._ctx;
44949
+ if (!ctx) {
44950
+ process.stderr.write("Error: Not authenticated\n");
44951
+ process.exit(1);
44952
+ }
44953
+ const args = {};
44954
+ if (opts.id !== void 0)
44955
+ args.id = opts.id;
44956
+ if (opts.code !== void 0)
44957
+ args.code = opts.code;
44958
+ if (!opts.yes) {
44959
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
44960
+ if (!confirmed) {
44961
+ process.stdout.write("Aborted.\n");
44962
+ return;
44963
+ }
44964
+ }
44965
+ await ctx.execute({
44966
+ method: "DELETE",
44967
+ path: "/v1/products/{id}/features/{code}",
44968
+ args,
44969
+ queryParamKeys: []
44970
+ });
44971
+ });
44972
+ }
44973
+
44720
44974
  // build/commands/generated/quotes.js
44721
44975
  function registerQuotesCommands(parent) {
44722
44976
  const resource = parent.command("quotes").description("Manage quotes");
@@ -44726,12 +44980,12 @@ Quote status.
44726
44980
  - \`draft\`: The quote is a draft.
44727
44981
  - \`approved\`: The quote is approved and ready to be sent to the customer.
44728
44982
  - \`pending_signature\`: The quote is awaiting the customer's signature.
44729
- `).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.
44983
+ `).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. When computed, a subscription phase with neither an end date nor a fixed duration is counted over a conventional horizon: the contract's length for a single phase on a contract that has one, otherwise 12 months or the longest billing interval if longer. That horizon is not an end date: the subscription can run past it. Usage-based and connected seat lines are priced at their estimated quantity when it exceeds the committed quantity and, for seats, the live seat count. For subscription quotes, defaults to the computed subscription value if not specified. For one-off quotes, this field is ignored \u2014 the amount is always derived from the linked invoice's \`amount_excluding_tax\`.`).option("--contract-value <number>", `What the customer pays over the contract, each coupon counted on the invoices it applies to. Computed from the subscription for \`subscription\` and \`subscription_update\` quotes, unless set manually. Not set on \`one_off\` quotes. When specified, overrides the computed value.`).option("--collect-payment-details <value>", `Collect customer payment method mandate during signature flow or not.`).option("--collect-custom-property-ids <json>", `IDs of the customer custom properties required to be filled during the signature flow.`).option("--contract-clause-ids <json>", `IDs of the contract clauses used in the quote terms.`).option("--require-tax-id <value>", `Require the customer to provide a tax ID during the signature flow.`).option("--display-quote-value <value>", `Display the total quote value on the quote.`).option("--display-quote-value-with-tax <value>", `Display the total quote value including tax on the quote. Only applies to \`one_off\` quotes.`).option("--display-taxes <value>", `Display tax breakdown on the quote.`).option("--display-price-tiers <value>", `Controls which price tiers are displayed on the quote.
44730
44984
 
44731
44985
  - \`all\`: Display all pricing tiers.
44732
44986
  - \`matching\`: Only display the tiers used to compute the price based on quantity.
44733
44987
  - \`none\`: Hide all pricing tiers.
44734
- `).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", `
44988
+ `).option("--display-phase-value <value>", `Display per-phase value breakdown on the quote.`).option("--display-discounts-on-total <value>", `Display discounts on the totals, with product prices before discount. Totals then follow the contract value, so discounts with a limited duration are included.`).option("--display-first-invoice-amount <value>", `Display the first invoice amount on the quote.`).option("--display-documents-in-preview <value>", `Display attached documents in the quote preview.`).option("--subscription-update-display <value>", `Sections displayed on subscription update quotes: quote_update_details, subscription_details, or both. Takes precedence over display_subscription_on_update.`).option("--generate-draft-invoices <value>", `When \`true\`, the invoice issued after signature stays in \`draft\` status instead of being emitted for payment. Use this when you want to review the final invoice manually before sending it. Defaults to \`false\`.`).option("--template-id <value>", `ID of the quote template. If not specified, a subscription configuration or an \`invoice\` payload must be defined.`).option("--expires-at <value>", `Quote expiration date. UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.`).option("--subscription <json>", `Subscription configuration constituting the quote.`).option("--invoice <json>", `Invoice configuration constituting the one-off quote. When provided, a draft invoice is created and linked to the quote. Cannot be combined with \`subscription\` or \`template_id\`.`).addHelpText("after", `
44735
44989
  Examples:
44736
44990
  hyperline quotes create --customer-id <customer_id>
44737
44991
  hyperline quotes create --customer-id <customer_id> --status <status> --owner-email <owner_email>
@@ -44770,6 +45024,8 @@ Examples:
44770
45024
  args.display_price_tiers = opts.displayPriceTiers;
44771
45025
  if (opts.displayPhaseValue !== void 0)
44772
45026
  args.display_phase_value = opts.displayPhaseValue;
45027
+ if (opts.displayDiscountsOnTotal !== void 0)
45028
+ args.display_discounts_on_total = opts.displayDiscountsOnTotal;
44773
45029
  if (opts.displayFirstInvoiceAmount !== void 0)
44774
45030
  args.display_first_invoice_amount = opts.displayFirstInvoiceAmount;
44775
45031
  if (opts.displayDocumentsInPreview !== void 0)
@@ -44784,6 +45040,8 @@ Examples:
44784
45040
  args.expires_at = opts.expiresAt;
44785
45041
  if (opts.amount !== void 0)
44786
45042
  args.amount = Number(opts.amount);
45043
+ if (opts.contractValue !== void 0)
45044
+ args.contract_value = Number(opts.contractValue);
44787
45045
  if (opts.collectCustomPropertyIds !== void 0)
44788
45046
  args.collect_custom_property_ids = JSON.parse(opts.collectCustomPropertyIds);
44789
45047
  if (opts.contractClauseIds !== void 0)
@@ -44799,7 +45057,7 @@ Examples:
44799
45057
  queryParamKeys: []
44800
45058
  });
44801
45059
  });
44802
- resource.command("list").description(`List quotes with optional filters for id, number, status, customer_id, template_id, crm_opportunity_id, type, and updated_at. Paginated with take/skip.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--id <value>", `id`).option("--id.not <value>", `id__not`).option("--id.is-null <value>", `id__isNull`).option("--id.is-not-null <value>", `id__isNotNull`).option("--id.equals <value>", `id__equals`).option("--id.contains <value>", `id__contains`).option("--id.starts-with <value>", `id__startsWith`).option("--id.end-with <value>", `id__endWith`).option("--number <value>", `number`).option("--number.not <value>", `number__not`).option("--number.is-null <value>", `number__isNull`).option("--number.is-not-null <value>", `number__isNotNull`).option("--number.equals <value>", `number__equals`).option("--number.contains <value>", `number__contains`).option("--number.starts-with <value>", `number__startsWith`).option("--number.end-with <value>", `number__endWith`).option("--status <value>", `status`).option("--status.in <value>", `status__in`).option("--customer-id <value>", `customer_id`).option("--customer-id.not <value>", `customer_id__not`).option("--customer-id.is-null <value>", `customer_id__isNull`).option("--customer-id.is-not-null <value>", `customer_id__isNotNull`).option("--customer-id.equals <value>", `customer_id__equals`).option("--customer-id.contains <value>", `customer_id__contains`).option("--customer-id.starts-with <value>", `customer_id__startsWith`).option("--customer-id.end-with <value>", `customer_id__endWith`).option("--template-id <value>", `template_id`).option("--template-id.not <value>", `template_id__not`).option("--template-id.is-null <value>", `template_id__isNull`).option("--template-id.is-not-null <value>", `template_id__isNotNull`).option("--template-id.equals <value>", `template_id__equals`).option("--template-id.contains <value>", `template_id__contains`).option("--template-id.starts-with <value>", `template_id__startsWith`).option("--template-id.end-with <value>", `template_id__endWith`).option("--crm-opportunity-id <value>", `crm_opportunity_id`).option("--crm-opportunity-id.not <value>", `crm_opportunity_id__not`).option("--crm-opportunity-id.is-null <value>", `crm_opportunity_id__isNull`).option("--crm-opportunity-id.is-not-null <value>", `crm_opportunity_id__isNotNull`).option("--crm-opportunity-id.equals <value>", `crm_opportunity_id__equals`).option("--crm-opportunity-id.contains <value>", `crm_opportunity_id__contains`).option("--crm-opportunity-id.starts-with <value>", `crm_opportunity_id__startsWith`).option("--crm-opportunity-id.end-with <value>", `crm_opportunity_id__endWith`).option("--type <value>", `type`).option("--type.not <value>", `type__not`).option("--type.is-null <value>", `type__isNull`).option("--type.is-not-null <value>", `type__isNotNull`).option("--type.equals <value>", `type__equals`).option("--type.contains <value>", `type__contains`).option("--type.starts-with <value>", `type__startsWith`).option("--type.end-with <value>", `type__endWith`).option("--updated-at <value>", `updated_at`).option("--updated-at.not <value>", `updated_at__not`).option("--updated-at.is-null <value>", `updated_at__isNull`).option("--updated-at.is-not-null <value>", `updated_at__isNotNull`).option("--updated-at.equals <value>", `updated_at__equals`).option("--updated-at.lt <value>", `updated_at__lt`).option("--updated-at.lte <value>", `updated_at__lte`).option("--updated-at.gt <value>", `updated_at__gt`).option("--updated-at.gte <value>", `updated_at__gte`).addHelpText("after", `
45060
+ resource.command("list").description(`List quotes with optional filters for id, number, status, customer_id, template_id, crm_opportunity_id, type, and updated_at. Paginated with take/skip.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--id <value>", `id`).option("--id.not <value>", `id__not`).option("--id.equals <value>", `id__equals`).option("--id.contains <value>", `id__contains`).option("--id.starts-with <value>", `id__startsWith`).option("--id.end-with <value>", `id__endWith`).option("--number <value>", `number`).option("--number.not <value>", `number__not`).option("--number.equals <value>", `number__equals`).option("--number.contains <value>", `number__contains`).option("--number.starts-with <value>", `number__startsWith`).option("--number.end-with <value>", `number__endWith`).option("--status <value>", `status`).option("--status.in <value>", `status__in`).option("--customer-id <value>", `customer_id`).option("--customer-id.not <value>", `customer_id__not`).option("--customer-id.equals <value>", `customer_id__equals`).option("--customer-id.contains <value>", `customer_id__contains`).option("--customer-id.starts-with <value>", `customer_id__startsWith`).option("--customer-id.end-with <value>", `customer_id__endWith`).option("--template-id <value>", `template_id`).option("--template-id.not <value>", `template_id__not`).option("--template-id.equals <value>", `template_id__equals`).option("--template-id.contains <value>", `template_id__contains`).option("--template-id.starts-with <value>", `template_id__startsWith`).option("--template-id.end-with <value>", `template_id__endWith`).option("--template-id.is-null <value>", `template_id__isNull`).option("--template-id.is-not-null <value>", `template_id__isNotNull`).option("--crm-opportunity-id <value>", `crm_opportunity_id`).option("--crm-opportunity-id.not <value>", `crm_opportunity_id__not`).option("--crm-opportunity-id.equals <value>", `crm_opportunity_id__equals`).option("--crm-opportunity-id.contains <value>", `crm_opportunity_id__contains`).option("--crm-opportunity-id.starts-with <value>", `crm_opportunity_id__startsWith`).option("--crm-opportunity-id.end-with <value>", `crm_opportunity_id__endWith`).option("--crm-opportunity-id.is-null <value>", `crm_opportunity_id__isNull`).option("--crm-opportunity-id.is-not-null <value>", `crm_opportunity_id__isNotNull`).option("--type <value>", `type`).option("--updated-at <value>", `updated_at`).option("--updated-at.not <value>", `updated_at__not`).option("--updated-at.equals <value>", `updated_at__equals`).option("--updated-at.lt <value>", `updated_at__lt`).option("--updated-at.lte <value>", `updated_at__lte`).option("--updated-at.gt <value>", `updated_at__gt`).option("--updated-at.gte <value>", `updated_at__gte`).addHelpText("after", `
44803
45061
  Examples:
44804
45062
  hyperline quotes list
44805
45063
  hyperline quotes list --take <take> --id <id>`).action(async (opts) => {
@@ -44813,10 +45071,6 @@ Examples:
44813
45071
  args.id = opts.id;
44814
45072
  if (opts["id.not"] !== void 0)
44815
45073
  args.id__not = opts["id.not"];
44816
- if (opts["id.isNull"] !== void 0)
44817
- args.id__isNull = opts["id.isNull"];
44818
- if (opts["id.isNotNull"] !== void 0)
44819
- args.id__isNotNull = opts["id.isNotNull"];
44820
45074
  if (opts["id.equals"] !== void 0)
44821
45075
  args.id__equals = opts["id.equals"];
44822
45076
  if (opts["id.contains"] !== void 0)
@@ -44829,10 +45083,6 @@ Examples:
44829
45083
  args.number = opts.number;
44830
45084
  if (opts["number.not"] !== void 0)
44831
45085
  args.number__not = opts["number.not"];
44832
- if (opts["number.isNull"] !== void 0)
44833
- args.number__isNull = opts["number.isNull"];
44834
- if (opts["number.isNotNull"] !== void 0)
44835
- args.number__isNotNull = opts["number.isNotNull"];
44836
45086
  if (opts["number.equals"] !== void 0)
44837
45087
  args.number__equals = opts["number.equals"];
44838
45088
  if (opts["number.contains"] !== void 0)
@@ -44849,10 +45099,6 @@ Examples:
44849
45099
  args.customer_id = opts.customerId;
44850
45100
  if (opts["customerId.not"] !== void 0)
44851
45101
  args.customer_id__not = opts["customerId.not"];
44852
- if (opts["customerId.isNull"] !== void 0)
44853
- args.customer_id__isNull = opts["customerId.isNull"];
44854
- if (opts["customerId.isNotNull"] !== void 0)
44855
- args.customer_id__isNotNull = opts["customerId.isNotNull"];
44856
45102
  if (opts["customerId.equals"] !== void 0)
44857
45103
  args.customer_id__equals = opts["customerId.equals"];
44858
45104
  if (opts["customerId.contains"] !== void 0)
@@ -44865,10 +45111,6 @@ Examples:
44865
45111
  args.template_id = opts.templateId;
44866
45112
  if (opts["templateId.not"] !== void 0)
44867
45113
  args.template_id__not = opts["templateId.not"];
44868
- if (opts["templateId.isNull"] !== void 0)
44869
- args.template_id__isNull = opts["templateId.isNull"];
44870
- if (opts["templateId.isNotNull"] !== void 0)
44871
- args.template_id__isNotNull = opts["templateId.isNotNull"];
44872
45114
  if (opts["templateId.equals"] !== void 0)
44873
45115
  args.template_id__equals = opts["templateId.equals"];
44874
45116
  if (opts["templateId.contains"] !== void 0)
@@ -44877,14 +45119,14 @@ Examples:
44877
45119
  args.template_id__startsWith = opts["templateId.startsWith"];
44878
45120
  if (opts["templateId.endWith"] !== void 0)
44879
45121
  args.template_id__endWith = opts["templateId.endWith"];
45122
+ if (opts["templateId.isNull"] !== void 0)
45123
+ args.template_id__isNull = opts["templateId.isNull"];
45124
+ if (opts["templateId.isNotNull"] !== void 0)
45125
+ args.template_id__isNotNull = opts["templateId.isNotNull"];
44880
45126
  if (opts.crmOpportunityId !== void 0)
44881
45127
  args.crm_opportunity_id = opts.crmOpportunityId;
44882
45128
  if (opts["crmOpportunityId.not"] !== void 0)
44883
45129
  args.crm_opportunity_id__not = opts["crmOpportunityId.not"];
44884
- if (opts["crmOpportunityId.isNull"] !== void 0)
44885
- args.crm_opportunity_id__isNull = opts["crmOpportunityId.isNull"];
44886
- if (opts["crmOpportunityId.isNotNull"] !== void 0)
44887
- args.crm_opportunity_id__isNotNull = opts["crmOpportunityId.isNotNull"];
44888
45130
  if (opts["crmOpportunityId.equals"] !== void 0)
44889
45131
  args.crm_opportunity_id__equals = opts["crmOpportunityId.equals"];
44890
45132
  if (opts["crmOpportunityId.contains"] !== void 0)
@@ -44893,30 +45135,16 @@ Examples:
44893
45135
  args.crm_opportunity_id__startsWith = opts["crmOpportunityId.startsWith"];
44894
45136
  if (opts["crmOpportunityId.endWith"] !== void 0)
44895
45137
  args.crm_opportunity_id__endWith = opts["crmOpportunityId.endWith"];
45138
+ if (opts["crmOpportunityId.isNull"] !== void 0)
45139
+ args.crm_opportunity_id__isNull = opts["crmOpportunityId.isNull"];
45140
+ if (opts["crmOpportunityId.isNotNull"] !== void 0)
45141
+ args.crm_opportunity_id__isNotNull = opts["crmOpportunityId.isNotNull"];
44896
45142
  if (opts.type !== void 0)
44897
45143
  args.type = opts.type;
44898
- if (opts["type.not"] !== void 0)
44899
- args.type__not = opts["type.not"];
44900
- if (opts["type.isNull"] !== void 0)
44901
- args.type__isNull = opts["type.isNull"];
44902
- if (opts["type.isNotNull"] !== void 0)
44903
- args.type__isNotNull = opts["type.isNotNull"];
44904
- if (opts["type.equals"] !== void 0)
44905
- args.type__equals = opts["type.equals"];
44906
- if (opts["type.contains"] !== void 0)
44907
- args.type__contains = opts["type.contains"];
44908
- if (opts["type.startsWith"] !== void 0)
44909
- args.type__startsWith = opts["type.startsWith"];
44910
- if (opts["type.endWith"] !== void 0)
44911
- args.type__endWith = opts["type.endWith"];
44912
45144
  if (opts.updatedAt !== void 0)
44913
45145
  args.updated_at = opts.updatedAt;
44914
45146
  if (opts["updatedAt.not"] !== void 0)
44915
45147
  args.updated_at__not = opts["updatedAt.not"];
44916
- if (opts["updatedAt.isNull"] !== void 0)
44917
- args.updated_at__isNull = opts["updatedAt.isNull"];
44918
- if (opts["updatedAt.isNotNull"] !== void 0)
44919
- args.updated_at__isNotNull = opts["updatedAt.isNotNull"];
44920
45148
  if (opts["updatedAt.equals"] !== void 0)
44921
45149
  args.updated_at__equals = opts["updatedAt.equals"];
44922
45150
  if (opts["updatedAt.lt"] !== void 0)
@@ -44940,16 +45168,12 @@ Examples:
44940
45168
  "skip",
44941
45169
  "id",
44942
45170
  "id__not",
44943
- "id__isNull",
44944
- "id__isNotNull",
44945
45171
  "id__equals",
44946
45172
  "id__contains",
44947
45173
  "id__startsWith",
44948
45174
  "id__endWith",
44949
45175
  "number",
44950
45176
  "number__not",
44951
- "number__isNull",
44952
- "number__isNotNull",
44953
45177
  "number__equals",
44954
45178
  "number__contains",
44955
45179
  "number__startsWith",
@@ -44958,40 +45182,29 @@ Examples:
44958
45182
  "status__in",
44959
45183
  "customer_id",
44960
45184
  "customer_id__not",
44961
- "customer_id__isNull",
44962
- "customer_id__isNotNull",
44963
45185
  "customer_id__equals",
44964
45186
  "customer_id__contains",
44965
45187
  "customer_id__startsWith",
44966
45188
  "customer_id__endWith",
44967
45189
  "template_id",
44968
45190
  "template_id__not",
44969
- "template_id__isNull",
44970
- "template_id__isNotNull",
44971
45191
  "template_id__equals",
44972
45192
  "template_id__contains",
44973
45193
  "template_id__startsWith",
44974
45194
  "template_id__endWith",
45195
+ "template_id__isNull",
45196
+ "template_id__isNotNull",
44975
45197
  "crm_opportunity_id",
44976
45198
  "crm_opportunity_id__not",
44977
- "crm_opportunity_id__isNull",
44978
- "crm_opportunity_id__isNotNull",
44979
45199
  "crm_opportunity_id__equals",
44980
45200
  "crm_opportunity_id__contains",
44981
45201
  "crm_opportunity_id__startsWith",
44982
45202
  "crm_opportunity_id__endWith",
45203
+ "crm_opportunity_id__isNull",
45204
+ "crm_opportunity_id__isNotNull",
44983
45205
  "type",
44984
- "type__not",
44985
- "type__isNull",
44986
- "type__isNotNull",
44987
- "type__equals",
44988
- "type__contains",
44989
- "type__startsWith",
44990
- "type__endWith",
44991
45206
  "updated_at",
44992
45207
  "updated_at__not",
44993
- "updated_at__isNull",
44994
- "updated_at__isNotNull",
44995
45208
  "updated_at__equals",
44996
45209
  "updated_at__lt",
44997
45210
  "updated_at__lte",
@@ -45018,12 +45231,12 @@ Examples:
45018
45231
  queryParamKeys: []
45019
45232
  });
45020
45233
  });
45021
- 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.
45234
+ 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. When computed, a subscription phase with neither an end date nor a fixed duration is counted over a conventional horizon: the contract's length for a single phase on a contract that has one, otherwise 12 months or the longest billing interval if longer. That horizon is not an end date: the subscription can run past it. Usage-based and connected seat lines are priced at their estimated quantity when it exceeds the committed quantity and, for seats, the live seat count. Set to \`null\` to clear the manually set value.`).option("--contract-value <number>", `What the customer pays over the contract, each coupon counted on the invoices it applies to. Computed from the subscription for \`subscription\` and \`subscription_update\` quotes, unless set manually. Not set on \`one_off\` quotes. When specified, overrides the computed value. Set to \`null\` to go back to the computed value.`).option("--collect-payment-details <value>", `Collect customer payment method mandate during signature flow or not.`).option("--collect-custom-property-ids <json>", `IDs of the customer custom properties required to be filled during the signature flow.`).option("--contract-clause-ids <json>", `IDs of the contract clauses used in the quote terms.`).option("--require-tax-id <value>", `Require the customer to provide a tax ID during the signature flow.`).option("--display-quote-value <value>", `Display the total quote value on the quote.`).option("--display-quote-value-with-tax <value>", `Display the total quote value including tax on the quote. Only applies to \`one_off\` quotes.`).option("--display-taxes <value>", `Display tax breakdown on the quote.`).option("--display-price-tiers <value>", `Controls which price tiers are displayed on the quote.
45022
45235
 
45023
45236
  - \`all\`: Display all pricing tiers.
45024
45237
  - \`matching\`: Only display the tiers used to compute the price based on quantity.
45025
45238
  - \`none\`: Hide all pricing tiers.
45026
- `).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", `
45239
+ `).option("--display-phase-value <value>", `Display per-phase value breakdown on the quote.`).option("--display-discounts-on-total <value>", `Display discounts on the totals, with product prices before discount. Totals then follow the contract value, so discounts with a limited duration are included.`).option("--display-first-invoice-amount <value>", `Display the first invoice amount on the quote.`).option("--display-documents-in-preview <value>", `Display attached documents in the quote preview.`).option("--subscription-update-display <value>", `Sections displayed on subscription update quotes: quote_update_details, subscription_details, or both. Takes precedence over display_subscription_on_update.`).option("--generate-draft-invoices <value>", `When \`true\`, the invoice issued after signature stays in \`draft\` status instead of being emitted for payment. Use this when you want to review the final invoice manually before sending it. Defaults to \`false\`.`).option("--crm-opportunity-id <value>", `ID of the related opportunity/deal in the connected CRM.`).option("--expires-at <value>", `Quote expiration date. UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format. Set to \`null\` to clear the expiration.`).option("--subscription <json>", `Subscription configuration constituting the quote. When provided on a draft quote, it creates or replaces the draft subscription attached to the quote.`).option("--invoice <json>", `Invoice configuration constituting the one-off quote. When provided on a draft one-off quote, it deletes the previous draft invoice and creates a fresh one linked to the quote. \`invoice.invoicing_entity_id\` is ignored on update \u2014 the quote's existing invoicing entity is reused.`).addHelpText("after", `
45027
45240
  Examples:
45028
45241
  hyperline quotes update --id <id>
45029
45242
  hyperline quotes update --id <id> --owner-email <owner_email> --catalog-version-id <catalog_version_id>
@@ -45058,6 +45271,8 @@ Examples:
45058
45271
  args.display_price_tiers = opts.displayPriceTiers;
45059
45272
  if (opts.displayPhaseValue !== void 0)
45060
45273
  args.display_phase_value = opts.displayPhaseValue;
45274
+ if (opts.displayDiscountsOnTotal !== void 0)
45275
+ args.display_discounts_on_total = opts.displayDiscountsOnTotal;
45061
45276
  if (opts.displayFirstInvoiceAmount !== void 0)
45062
45277
  args.display_first_invoice_amount = opts.displayFirstInvoiceAmount;
45063
45278
  if (opts.displayDocumentsInPreview !== void 0)
@@ -45072,6 +45287,8 @@ Examples:
45072
45287
  args.expires_at = opts.expiresAt;
45073
45288
  if (opts.amount !== void 0)
45074
45289
  args.amount = Number(opts.amount);
45290
+ if (opts.contractValue !== void 0)
45291
+ args.contract_value = Number(opts.contractValue);
45075
45292
  if (opts.collectCustomPropertyIds !== void 0)
45076
45293
  args.collect_custom_property_ids = JSON.parse(opts.collectCustomPropertyIds);
45077
45294
  if (opts.contractClauseIds !== void 0)
@@ -45149,6 +45366,25 @@ Examples:
45149
45366
  queryParamKeys: []
45150
45367
  });
45151
45368
  });
45369
+ resource.command("redraft").description(`Switch a quote back to draft so its subscription or invoice configuration can be updated. Works on quotes pending approval, with changes requested, approved, or awaiting signature. Cancels pending approval requests and the signature request; the quote must then be finalized again.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
45370
+ Examples:
45371
+ hyperline quotes redraft --id <id>
45372
+ hyperline quotes redraft --id <id> --output json`).action(async (opts) => {
45373
+ const ctx = resource.parent?.opts()._ctx;
45374
+ if (!ctx) {
45375
+ process.stderr.write("Error: Not authenticated\n");
45376
+ process.exit(1);
45377
+ }
45378
+ const args = {};
45379
+ if (opts.id !== void 0)
45380
+ args.id = opts.id;
45381
+ await ctx.execute({
45382
+ method: "POST",
45383
+ path: "/v1/quotes/{id}/redraft",
45384
+ args,
45385
+ queryParamKeys: []
45386
+ });
45387
+ });
45152
45388
  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", `
45153
45389
  Examples:
45154
45390
  hyperline quotes send --id <id>
@@ -45346,7 +45582,7 @@ Examples:
45346
45582
  // build/commands/generated/quotes-templates.js
45347
45583
  function registerQuotes_TemplatesCommands(parent) {
45348
45584
  const resource = parent.command("quotes-templates").description("Manage quotes > templates");
45349
- resource.command("list-quote-templates").description(`List quote templates with pagination and optional filters for id, name, subscription_template_id, and search. Use template IDs to create quotes from reusable quote defaults.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--id <value>", `id`).option("--id.not <value>", `id__not`).option("--id.is-null <value>", `id__isNull`).option("--id.is-not-null <value>", `id__isNotNull`).option("--id.equals <value>", `id__equals`).option("--id.contains <value>", `id__contains`).option("--id.starts-with <value>", `id__startsWith`).option("--id.end-with <value>", `id__endWith`).option("--name <value>", `name`).option("--name.not <value>", `name__not`).option("--name.is-null <value>", `name__isNull`).option("--name.is-not-null <value>", `name__isNotNull`).option("--name.equals <value>", `name__equals`).option("--name.contains <value>", `name__contains`).option("--name.starts-with <value>", `name__startsWith`).option("--name.end-with <value>", `name__endWith`).option("--subscription-template-id <value>", `subscription_template_id`).option("--subscription-template-id.not <value>", `subscription_template_id__not`).option("--subscription-template-id.is-null <value>", `subscription_template_id__isNull`).option("--subscription-template-id.is-not-null <value>", `subscription_template_id__isNotNull`).option("--subscription-template-id.equals <value>", `subscription_template_id__equals`).option("--subscription-template-id.contains <value>", `subscription_template_id__contains`).option("--subscription-template-id.starts-with <value>", `subscription_template_id__startsWith`).option("--subscription-template-id.end-with <value>", `subscription_template_id__endWith`).option("--search <value>", `search`).addHelpText("after", `
45585
+ resource.command("list-quote-templates").description(`List quote templates with pagination and optional filters for id, name, subscription_template_id, and search. Use template IDs to create quotes from reusable quote defaults.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--id <value>", `id`).option("--id.not <value>", `id__not`).option("--id.equals <value>", `id__equals`).option("--id.contains <value>", `id__contains`).option("--id.starts-with <value>", `id__startsWith`).option("--id.end-with <value>", `id__endWith`).option("--name <value>", `name`).option("--name.not <value>", `name__not`).option("--name.equals <value>", `name__equals`).option("--name.contains <value>", `name__contains`).option("--name.starts-with <value>", `name__startsWith`).option("--name.end-with <value>", `name__endWith`).option("--subscription-template-id <value>", `subscription_template_id`).option("--subscription-template-id.not <value>", `subscription_template_id__not`).option("--subscription-template-id.equals <value>", `subscription_template_id__equals`).option("--subscription-template-id.contains <value>", `subscription_template_id__contains`).option("--subscription-template-id.starts-with <value>", `subscription_template_id__startsWith`).option("--subscription-template-id.end-with <value>", `subscription_template_id__endWith`).option("--subscription-template-id.is-null <value>", `subscription_template_id__isNull`).option("--subscription-template-id.is-not-null <value>", `subscription_template_id__isNotNull`).option("--search <value>", `search`).addHelpText("after", `
45350
45586
  Examples:
45351
45587
  hyperline quotes-templates list-quote-templates
45352
45588
  hyperline quotes-templates list-quote-templates --take <take> --id <id>`).action(async (opts) => {
@@ -45360,10 +45596,6 @@ Examples:
45360
45596
  args.id = opts.id;
45361
45597
  if (opts["id.not"] !== void 0)
45362
45598
  args.id__not = opts["id.not"];
45363
- if (opts["id.isNull"] !== void 0)
45364
- args.id__isNull = opts["id.isNull"];
45365
- if (opts["id.isNotNull"] !== void 0)
45366
- args.id__isNotNull = opts["id.isNotNull"];
45367
45599
  if (opts["id.equals"] !== void 0)
45368
45600
  args.id__equals = opts["id.equals"];
45369
45601
  if (opts["id.contains"] !== void 0)
@@ -45376,10 +45608,6 @@ Examples:
45376
45608
  args.name = opts.name;
45377
45609
  if (opts["name.not"] !== void 0)
45378
45610
  args.name__not = opts["name.not"];
45379
- if (opts["name.isNull"] !== void 0)
45380
- args.name__isNull = opts["name.isNull"];
45381
- if (opts["name.isNotNull"] !== void 0)
45382
- args.name__isNotNull = opts["name.isNotNull"];
45383
45611
  if (opts["name.equals"] !== void 0)
45384
45612
  args.name__equals = opts["name.equals"];
45385
45613
  if (opts["name.contains"] !== void 0)
@@ -45392,10 +45620,6 @@ Examples:
45392
45620
  args.subscription_template_id = opts.subscriptionTemplateId;
45393
45621
  if (opts["subscriptionTemplateId.not"] !== void 0)
45394
45622
  args.subscription_template_id__not = opts["subscriptionTemplateId.not"];
45395
- if (opts["subscriptionTemplateId.isNull"] !== void 0)
45396
- args.subscription_template_id__isNull = opts["subscriptionTemplateId.isNull"];
45397
- if (opts["subscriptionTemplateId.isNotNull"] !== void 0)
45398
- args.subscription_template_id__isNotNull = opts["subscriptionTemplateId.isNotNull"];
45399
45623
  if (opts["subscriptionTemplateId.equals"] !== void 0)
45400
45624
  args.subscription_template_id__equals = opts["subscriptionTemplateId.equals"];
45401
45625
  if (opts["subscriptionTemplateId.contains"] !== void 0)
@@ -45404,6 +45628,10 @@ Examples:
45404
45628
  args.subscription_template_id__startsWith = opts["subscriptionTemplateId.startsWith"];
45405
45629
  if (opts["subscriptionTemplateId.endWith"] !== void 0)
45406
45630
  args.subscription_template_id__endWith = opts["subscriptionTemplateId.endWith"];
45631
+ if (opts["subscriptionTemplateId.isNull"] !== void 0)
45632
+ args.subscription_template_id__isNull = opts["subscriptionTemplateId.isNull"];
45633
+ if (opts["subscriptionTemplateId.isNotNull"] !== void 0)
45634
+ args.subscription_template_id__isNotNull = opts["subscriptionTemplateId.isNotNull"];
45407
45635
  if (opts.search !== void 0)
45408
45636
  args.search = opts.search;
45409
45637
  if (opts.take !== void 0)
@@ -45419,28 +45647,24 @@ Examples:
45419
45647
  "skip",
45420
45648
  "id",
45421
45649
  "id__not",
45422
- "id__isNull",
45423
- "id__isNotNull",
45424
45650
  "id__equals",
45425
45651
  "id__contains",
45426
45652
  "id__startsWith",
45427
45653
  "id__endWith",
45428
45654
  "name",
45429
45655
  "name__not",
45430
- "name__isNull",
45431
- "name__isNotNull",
45432
45656
  "name__equals",
45433
45657
  "name__contains",
45434
45658
  "name__startsWith",
45435
45659
  "name__endWith",
45436
45660
  "subscription_template_id",
45437
45661
  "subscription_template_id__not",
45438
- "subscription_template_id__isNull",
45439
- "subscription_template_id__isNotNull",
45440
45662
  "subscription_template_id__equals",
45441
45663
  "subscription_template_id__contains",
45442
45664
  "subscription_template_id__startsWith",
45443
45665
  "subscription_template_id__endWith",
45666
+ "subscription_template_id__isNull",
45667
+ "subscription_template_id__isNotNull",
45444
45668
  "search"
45445
45669
  ]
45446
45670
  });
@@ -45842,7 +46066,7 @@ Examples:
45842
46066
  queryParamKeys: []
45843
46067
  });
45844
46068
  });
45845
- resource.command("list").description(`List subscriptions with filters for activation_strategy, status, currency, plan_id, original_quote_id, integration_entity_id, customer_id, invoicing_entity_id, purchase_order, updated_at, custom_properties. Draft, voided, cancelled and archived excluded by default (status=all applies the same exclusion); status=any returns every status. Paginated with take/skip.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--activation-strategy <value>", `activation_strategy`).option("--activation-strategy.in <value>", `activation_strategy__in`).option("--status <value>", `
46069
+ resource.command("list").description(`List subscriptions with filters for activation_strategy, status, currency, plan_id, original_quote_id, integration_entity_id, customer_id, invoicing_entity_id, purchase_order, updated_at, cancel_at, custom_properties, and the active contract: contract_start__gte/__lte, contract_end__gte/__lte, renew_automatically. For upcoming renewals, combine contract_end__gte/__lte with renew_automatically, plus cancel_at for scheduled cancellations. Draft, voided, cancelled and archived excluded by default (status=all applies the same exclusion); status=any returns every status. Paginated with take/skip.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--activation-strategy <value>", `activation_strategy`).option("--activation-strategy.in <value>", `activation_strategy__in`).option("--status <value>", `
45846
46070
  Subscription status filter.
45847
46071
 
45848
46072
  - \`active\`, \`pending\`, \`paused\`, \`errored\`, \`cancelled\`, \`draft\`, \`voided\`, \`archived\`: match that status.
@@ -45851,7 +46075,7 @@ Subscription status filter.
45851
46075
  - \`any\`: every status, no exclusion.
45852
46076
 
45853
46077
  Use \`status__in\` with comma-separated values to combine statuses. When the filter is omitted, \`draft\`, \`voided\`, \`cancelled\` and \`archived\` subscriptions are excluded.
45854
- `).option("--status.in <value>", `Comma-separated list of subscription statuses to include. Same values as \`status\`.`).option("--currency <value>", `currency`).option("--currency.not <value>", `currency__not`).option("--currency.is-null <value>", `currency__isNull`).option("--currency.is-not-null <value>", `currency__isNotNull`).option("--currency.equals <value>", `currency__equals`).option("--currency.contains <value>", `currency__contains`).option("--currency.starts-with <value>", `currency__startsWith`).option("--currency.end-with <value>", `currency__endWith`).option("--plan-id <value>", `plan_id`).option("--plan-id.not <value>", `plan_id__not`).option("--plan-id.is-null <value>", `plan_id__isNull`).option("--plan-id.is-not-null <value>", `plan_id__isNotNull`).option("--plan-id.equals <value>", `plan_id__equals`).option("--plan-id.contains <value>", `plan_id__contains`).option("--plan-id.starts-with <value>", `plan_id__startsWith`).option("--plan-id.end-with <value>", `plan_id__endWith`).option("--original-quote-id <value>", `original_quote_id`).option("--original-quote-id.not <value>", `original_quote_id__not`).option("--original-quote-id.is-null <value>", `original_quote_id__isNull`).option("--original-quote-id.is-not-null <value>", `original_quote_id__isNotNull`).option("--original-quote-id.equals <value>", `original_quote_id__equals`).option("--original-quote-id.contains <value>", `original_quote_id__contains`).option("--original-quote-id.starts-with <value>", `original_quote_id__startsWith`).option("--original-quote-id.end-with <value>", `original_quote_id__endWith`).option("--customer-id <value>", `customer_id`).option("--customer-id.not <value>", `customer_id__not`).option("--customer-id.is-null <value>", `customer_id__isNull`).option("--customer-id.is-not-null <value>", `customer_id__isNotNull`).option("--customer-id.equals <value>", `customer_id__equals`).option("--customer-id.contains <value>", `customer_id__contains`).option("--customer-id.starts-with <value>", `customer_id__startsWith`).option("--customer-id.end-with <value>", `customer_id__endWith`).option("--invoicing-entity-id <value>", `invoicing_entity_id`).option("--purchase-order <value>", `purchase_order`).option("--purchase-order.not <value>", `purchase_order__not`).option("--purchase-order.is-null <value>", `purchase_order__isNull`).option("--purchase-order.is-not-null <value>", `purchase_order__isNotNull`).option("--purchase-order.equals <value>", `purchase_order__equals`).option("--purchase-order.contains <value>", `purchase_order__contains`).option("--purchase-order.starts-with <value>", `purchase_order__startsWith`).option("--purchase-order.end-with <value>", `purchase_order__endWith`).option("--custom-properties <value>", `custom_properties`).option("--invoice-drafts <value>", `invoice_drafts`).option("--integration-entity-id <value>", `integration_entity_id`).option("--updated-at <value>", `updated_at`).option("--updated-at.not <value>", `updated_at__not`).option("--updated-at.is-null <value>", `updated_at__isNull`).option("--updated-at.is-not-null <value>", `updated_at__isNotNull`).option("--updated-at.equals <value>", `updated_at__equals`).option("--updated-at.lt <value>", `updated_at__lt`).option("--updated-at.lte <value>", `updated_at__lte`).option("--updated-at.gt <value>", `updated_at__gt`).option("--updated-at.gte <value>", `updated_at__gte`).addHelpText("after", `
46078
+ `).option("--status.in <value>", `Comma-separated list of subscription statuses to include. Same values as \`status\`.`).option("--currency <value>", `currency`).option("--currency.not <value>", `currency__not`).option("--currency.equals <value>", `currency__equals`).option("--currency.contains <value>", `currency__contains`).option("--currency.starts-with <value>", `currency__startsWith`).option("--currency.end-with <value>", `currency__endWith`).option("--plan-id <value>", `plan_id`).option("--plan-id.not <value>", `plan_id__not`).option("--plan-id.equals <value>", `plan_id__equals`).option("--plan-id.contains <value>", `plan_id__contains`).option("--plan-id.starts-with <value>", `plan_id__startsWith`).option("--plan-id.end-with <value>", `plan_id__endWith`).option("--plan-id.is-null <value>", `plan_id__isNull`).option("--plan-id.is-not-null <value>", `plan_id__isNotNull`).option("--original-quote-id <value>", `original_quote_id`).option("--original-quote-id.not <value>", `original_quote_id__not`).option("--original-quote-id.equals <value>", `original_quote_id__equals`).option("--original-quote-id.contains <value>", `original_quote_id__contains`).option("--original-quote-id.starts-with <value>", `original_quote_id__startsWith`).option("--original-quote-id.end-with <value>", `original_quote_id__endWith`).option("--original-quote-id.is-null <value>", `original_quote_id__isNull`).option("--original-quote-id.is-not-null <value>", `original_quote_id__isNotNull`).option("--customer-id <value>", `customer_id`).option("--customer-id.not <value>", `customer_id__not`).option("--customer-id.equals <value>", `customer_id__equals`).option("--customer-id.contains <value>", `customer_id__contains`).option("--customer-id.starts-with <value>", `customer_id__startsWith`).option("--customer-id.end-with <value>", `customer_id__endWith`).option("--customer-id.is-null <value>", `customer_id__isNull`).option("--customer-id.is-not-null <value>", `customer_id__isNotNull`).option("--invoicing-entity-id <value>", `invoicing_entity_id`).option("--purchase-order <value>", `purchase_order`).option("--purchase-order.not <value>", `purchase_order__not`).option("--purchase-order.equals <value>", `purchase_order__equals`).option("--purchase-order.contains <value>", `purchase_order__contains`).option("--purchase-order.starts-with <value>", `purchase_order__startsWith`).option("--purchase-order.end-with <value>", `purchase_order__endWith`).option("--purchase-order.is-null <value>", `purchase_order__isNull`).option("--purchase-order.is-not-null <value>", `purchase_order__isNotNull`).option("--custom-properties <value>", `custom_properties`).option("--invoice-drafts <value>", `invoice_drafts`).option("--integration-entity-id <value>", `integration_entity_id`).option("--updated-at <value>", `updated_at`).option("--updated-at.not <value>", `updated_at__not`).option("--updated-at.equals <value>", `updated_at__equals`).option("--updated-at.lt <value>", `updated_at__lt`).option("--updated-at.lte <value>", `updated_at__lte`).option("--updated-at.gt <value>", `updated_at__gt`).option("--updated-at.gte <value>", `updated_at__gte`).option("--cancel-at <value>", `cancel_at`).option("--cancel-at.not <value>", `cancel_at__not`).option("--cancel-at.equals <value>", `cancel_at__equals`).option("--cancel-at.lt <value>", `cancel_at__lt`).option("--cancel-at.lte <value>", `cancel_at__lte`).option("--cancel-at.gt <value>", `cancel_at__gt`).option("--cancel-at.gte <value>", `cancel_at__gte`).option("--cancel-at.is-null <value>", `cancel_at__isNull`).option("--cancel-at.is-not-null <value>", `cancel_at__isNotNull`).option("--contract-start.gte <value>", `Return only subscriptions whose active contract starts on or after this date.`).option("--contract-start.lte <value>", `Return only subscriptions whose active contract starts on or before this date.`).option("--contract-end.gte <value>", `Return only subscriptions whose active contract ends on or after this date.`).option("--contract-end.lte <value>", `Return only subscriptions whose active contract ends on or before this date.`).option("--renew-automatically <value>", `Return only subscriptions whose active contract renews automatically (\`true\`) or not (\`false\`).`).addHelpText("after", `
45855
46079
  Examples:
45856
46080
  hyperline subscriptions list
45857
46081
  hyperline subscriptions list --take <take> --activation-strategy <activation_strategy>`).action(async (opts) => {
@@ -45873,10 +46097,6 @@ Examples:
45873
46097
  args.currency = opts.currency;
45874
46098
  if (opts["currency.not"] !== void 0)
45875
46099
  args.currency__not = opts["currency.not"];
45876
- if (opts["currency.isNull"] !== void 0)
45877
- args.currency__isNull = opts["currency.isNull"];
45878
- if (opts["currency.isNotNull"] !== void 0)
45879
- args.currency__isNotNull = opts["currency.isNotNull"];
45880
46100
  if (opts["currency.equals"] !== void 0)
45881
46101
  args.currency__equals = opts["currency.equals"];
45882
46102
  if (opts["currency.contains"] !== void 0)
@@ -45889,10 +46109,6 @@ Examples:
45889
46109
  args.plan_id = opts.planId;
45890
46110
  if (opts["planId.not"] !== void 0)
45891
46111
  args.plan_id__not = opts["planId.not"];
45892
- if (opts["planId.isNull"] !== void 0)
45893
- args.plan_id__isNull = opts["planId.isNull"];
45894
- if (opts["planId.isNotNull"] !== void 0)
45895
- args.plan_id__isNotNull = opts["planId.isNotNull"];
45896
46112
  if (opts["planId.equals"] !== void 0)
45897
46113
  args.plan_id__equals = opts["planId.equals"];
45898
46114
  if (opts["planId.contains"] !== void 0)
@@ -45901,14 +46117,14 @@ Examples:
45901
46117
  args.plan_id__startsWith = opts["planId.startsWith"];
45902
46118
  if (opts["planId.endWith"] !== void 0)
45903
46119
  args.plan_id__endWith = opts["planId.endWith"];
46120
+ if (opts["planId.isNull"] !== void 0)
46121
+ args.plan_id__isNull = opts["planId.isNull"];
46122
+ if (opts["planId.isNotNull"] !== void 0)
46123
+ args.plan_id__isNotNull = opts["planId.isNotNull"];
45904
46124
  if (opts.originalQuoteId !== void 0)
45905
46125
  args.original_quote_id = opts.originalQuoteId;
45906
46126
  if (opts["originalQuoteId.not"] !== void 0)
45907
46127
  args.original_quote_id__not = opts["originalQuoteId.not"];
45908
- if (opts["originalQuoteId.isNull"] !== void 0)
45909
- args.original_quote_id__isNull = opts["originalQuoteId.isNull"];
45910
- if (opts["originalQuoteId.isNotNull"] !== void 0)
45911
- args.original_quote_id__isNotNull = opts["originalQuoteId.isNotNull"];
45912
46128
  if (opts["originalQuoteId.equals"] !== void 0)
45913
46129
  args.original_quote_id__equals = opts["originalQuoteId.equals"];
45914
46130
  if (opts["originalQuoteId.contains"] !== void 0)
@@ -45917,14 +46133,14 @@ Examples:
45917
46133
  args.original_quote_id__startsWith = opts["originalQuoteId.startsWith"];
45918
46134
  if (opts["originalQuoteId.endWith"] !== void 0)
45919
46135
  args.original_quote_id__endWith = opts["originalQuoteId.endWith"];
46136
+ if (opts["originalQuoteId.isNull"] !== void 0)
46137
+ args.original_quote_id__isNull = opts["originalQuoteId.isNull"];
46138
+ if (opts["originalQuoteId.isNotNull"] !== void 0)
46139
+ args.original_quote_id__isNotNull = opts["originalQuoteId.isNotNull"];
45920
46140
  if (opts.customerId !== void 0)
45921
46141
  args.customer_id = opts.customerId;
45922
46142
  if (opts["customerId.not"] !== void 0)
45923
46143
  args.customer_id__not = opts["customerId.not"];
45924
- if (opts["customerId.isNull"] !== void 0)
45925
- args.customer_id__isNull = opts["customerId.isNull"];
45926
- if (opts["customerId.isNotNull"] !== void 0)
45927
- args.customer_id__isNotNull = opts["customerId.isNotNull"];
45928
46144
  if (opts["customerId.equals"] !== void 0)
45929
46145
  args.customer_id__equals = opts["customerId.equals"];
45930
46146
  if (opts["customerId.contains"] !== void 0)
@@ -45933,16 +46149,16 @@ Examples:
45933
46149
  args.customer_id__startsWith = opts["customerId.startsWith"];
45934
46150
  if (opts["customerId.endWith"] !== void 0)
45935
46151
  args.customer_id__endWith = opts["customerId.endWith"];
46152
+ if (opts["customerId.isNull"] !== void 0)
46153
+ args.customer_id__isNull = opts["customerId.isNull"];
46154
+ if (opts["customerId.isNotNull"] !== void 0)
46155
+ args.customer_id__isNotNull = opts["customerId.isNotNull"];
45936
46156
  if (opts.invoicingEntityId !== void 0)
45937
46157
  args.invoicing_entity_id = opts.invoicingEntityId;
45938
46158
  if (opts.purchaseOrder !== void 0)
45939
46159
  args.purchase_order = opts.purchaseOrder;
45940
46160
  if (opts["purchaseOrder.not"] !== void 0)
45941
46161
  args.purchase_order__not = opts["purchaseOrder.not"];
45942
- if (opts["purchaseOrder.isNull"] !== void 0)
45943
- args.purchase_order__isNull = opts["purchaseOrder.isNull"];
45944
- if (opts["purchaseOrder.isNotNull"] !== void 0)
45945
- args.purchase_order__isNotNull = opts["purchaseOrder.isNotNull"];
45946
46162
  if (opts["purchaseOrder.equals"] !== void 0)
45947
46163
  args.purchase_order__equals = opts["purchaseOrder.equals"];
45948
46164
  if (opts["purchaseOrder.contains"] !== void 0)
@@ -45951,6 +46167,10 @@ Examples:
45951
46167
  args.purchase_order__startsWith = opts["purchaseOrder.startsWith"];
45952
46168
  if (opts["purchaseOrder.endWith"] !== void 0)
45953
46169
  args.purchase_order__endWith = opts["purchaseOrder.endWith"];
46170
+ if (opts["purchaseOrder.isNull"] !== void 0)
46171
+ args.purchase_order__isNull = opts["purchaseOrder.isNull"];
46172
+ if (opts["purchaseOrder.isNotNull"] !== void 0)
46173
+ args.purchase_order__isNotNull = opts["purchaseOrder.isNotNull"];
45954
46174
  if (opts.customProperties !== void 0)
45955
46175
  args.custom_properties = opts.customProperties;
45956
46176
  if (opts.invoiceDrafts !== void 0)
@@ -45961,10 +46181,6 @@ Examples:
45961
46181
  args.updated_at = opts.updatedAt;
45962
46182
  if (opts["updatedAt.not"] !== void 0)
45963
46183
  args.updated_at__not = opts["updatedAt.not"];
45964
- if (opts["updatedAt.isNull"] !== void 0)
45965
- args.updated_at__isNull = opts["updatedAt.isNull"];
45966
- if (opts["updatedAt.isNotNull"] !== void 0)
45967
- args.updated_at__isNotNull = opts["updatedAt.isNotNull"];
45968
46184
  if (opts["updatedAt.equals"] !== void 0)
45969
46185
  args.updated_at__equals = opts["updatedAt.equals"];
45970
46186
  if (opts["updatedAt.lt"] !== void 0)
@@ -45975,6 +46191,34 @@ Examples:
45975
46191
  args.updated_at__gt = opts["updatedAt.gt"];
45976
46192
  if (opts["updatedAt.gte"] !== void 0)
45977
46193
  args.updated_at__gte = opts["updatedAt.gte"];
46194
+ if (opts.cancelAt !== void 0)
46195
+ args.cancel_at = opts.cancelAt;
46196
+ if (opts["cancelAt.not"] !== void 0)
46197
+ args.cancel_at__not = opts["cancelAt.not"];
46198
+ if (opts["cancelAt.equals"] !== void 0)
46199
+ args.cancel_at__equals = opts["cancelAt.equals"];
46200
+ if (opts["cancelAt.lt"] !== void 0)
46201
+ args.cancel_at__lt = opts["cancelAt.lt"];
46202
+ if (opts["cancelAt.lte"] !== void 0)
46203
+ args.cancel_at__lte = opts["cancelAt.lte"];
46204
+ if (opts["cancelAt.gt"] !== void 0)
46205
+ args.cancel_at__gt = opts["cancelAt.gt"];
46206
+ if (opts["cancelAt.gte"] !== void 0)
46207
+ args.cancel_at__gte = opts["cancelAt.gte"];
46208
+ if (opts["cancelAt.isNull"] !== void 0)
46209
+ args.cancel_at__isNull = opts["cancelAt.isNull"];
46210
+ if (opts["cancelAt.isNotNull"] !== void 0)
46211
+ args.cancel_at__isNotNull = opts["cancelAt.isNotNull"];
46212
+ if (opts["contractStart.gte"] !== void 0)
46213
+ args.contract_start__gte = opts["contractStart.gte"];
46214
+ if (opts["contractStart.lte"] !== void 0)
46215
+ args.contract_start__lte = opts["contractStart.lte"];
46216
+ if (opts["contractEnd.gte"] !== void 0)
46217
+ args.contract_end__gte = opts["contractEnd.gte"];
46218
+ if (opts["contractEnd.lte"] !== void 0)
46219
+ args.contract_end__lte = opts["contractEnd.lte"];
46220
+ if (opts.renewAutomatically !== void 0)
46221
+ args.renew_automatically = opts.renewAutomatically;
45978
46222
  if (opts.take !== void 0)
45979
46223
  args.take = Number(opts.take);
45980
46224
  if (opts.skip !== void 0)
@@ -45992,57 +46236,67 @@ Examples:
45992
46236
  "status__in",
45993
46237
  "currency",
45994
46238
  "currency__not",
45995
- "currency__isNull",
45996
- "currency__isNotNull",
45997
46239
  "currency__equals",
45998
46240
  "currency__contains",
45999
46241
  "currency__startsWith",
46000
46242
  "currency__endWith",
46001
46243
  "plan_id",
46002
46244
  "plan_id__not",
46003
- "plan_id__isNull",
46004
- "plan_id__isNotNull",
46005
46245
  "plan_id__equals",
46006
46246
  "plan_id__contains",
46007
46247
  "plan_id__startsWith",
46008
46248
  "plan_id__endWith",
46249
+ "plan_id__isNull",
46250
+ "plan_id__isNotNull",
46009
46251
  "original_quote_id",
46010
46252
  "original_quote_id__not",
46011
- "original_quote_id__isNull",
46012
- "original_quote_id__isNotNull",
46013
46253
  "original_quote_id__equals",
46014
46254
  "original_quote_id__contains",
46015
46255
  "original_quote_id__startsWith",
46016
46256
  "original_quote_id__endWith",
46257
+ "original_quote_id__isNull",
46258
+ "original_quote_id__isNotNull",
46017
46259
  "customer_id",
46018
46260
  "customer_id__not",
46019
- "customer_id__isNull",
46020
- "customer_id__isNotNull",
46021
46261
  "customer_id__equals",
46022
46262
  "customer_id__contains",
46023
46263
  "customer_id__startsWith",
46024
46264
  "customer_id__endWith",
46265
+ "customer_id__isNull",
46266
+ "customer_id__isNotNull",
46025
46267
  "invoicing_entity_id",
46026
46268
  "purchase_order",
46027
46269
  "purchase_order__not",
46028
- "purchase_order__isNull",
46029
- "purchase_order__isNotNull",
46030
46270
  "purchase_order__equals",
46031
46271
  "purchase_order__contains",
46032
46272
  "purchase_order__startsWith",
46033
46273
  "purchase_order__endWith",
46274
+ "purchase_order__isNull",
46275
+ "purchase_order__isNotNull",
46034
46276
  "custom_properties",
46035
46277
  "invoice_drafts",
46036
46278
  "integration_entity_id",
46037
46279
  "updated_at",
46038
46280
  "updated_at__not",
46039
- "updated_at__isNull",
46040
- "updated_at__isNotNull",
46041
46281
  "updated_at__equals",
46042
46282
  "updated_at__lt",
46043
46283
  "updated_at__lte",
46044
46284
  "updated_at__gt",
46045
- "updated_at__gte"
46285
+ "updated_at__gte",
46286
+ "cancel_at",
46287
+ "cancel_at__not",
46288
+ "cancel_at__equals",
46289
+ "cancel_at__lt",
46290
+ "cancel_at__lte",
46291
+ "cancel_at__gt",
46292
+ "cancel_at__gte",
46293
+ "cancel_at__isNull",
46294
+ "cancel_at__isNotNull",
46295
+ "contract_start__gte",
46296
+ "contract_start__lte",
46297
+ "contract_end__gte",
46298
+ "contract_end__lte",
46299
+ "renew_automatically"
46046
46300
  ]
46047
46301
  });
46048
46302
  });
@@ -46324,7 +46578,7 @@ Examples:
46324
46578
  // build/commands/generated/subscriptions-transitions.js
46325
46579
  function registerSubscriptions_TransitionsCommands(parent) {
46326
46580
  const resource = parent.command("subscriptions-transitions").description("Manage subscriptions > transitions");
46327
- resource.command("list-subscription-transitions").description(`List subscription transitions (migrations from one subscription to another). Filterable and paginated with take/skip.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--status <value>", `status`).option("--status.in <value>", `status__in`).option("--source-subscription-id <value>", `source_subscription_id`).option("--source-subscription-id.not <value>", `source_subscription_id__not`).option("--source-subscription-id.is-null <value>", `source_subscription_id__isNull`).option("--source-subscription-id.is-not-null <value>", `source_subscription_id__isNotNull`).option("--source-subscription-id.equals <value>", `source_subscription_id__equals`).option("--source-subscription-id.contains <value>", `source_subscription_id__contains`).option("--source-subscription-id.starts-with <value>", `source_subscription_id__startsWith`).option("--source-subscription-id.end-with <value>", `source_subscription_id__endWith`).option("--base-subscription-id <value>", `base_subscription_id`).option("--base-subscription-id.not <value>", `base_subscription_id__not`).option("--base-subscription-id.is-null <value>", `base_subscription_id__isNull`).option("--base-subscription-id.is-not-null <value>", `base_subscription_id__isNotNull`).option("--base-subscription-id.equals <value>", `base_subscription_id__equals`).option("--base-subscription-id.contains <value>", `base_subscription_id__contains`).option("--base-subscription-id.starts-with <value>", `base_subscription_id__startsWith`).option("--base-subscription-id.end-with <value>", `base_subscription_id__endWith`).option("--target-subscription-id <value>", `target_subscription_id`).option("--target-subscription-id.not <value>", `target_subscription_id__not`).option("--target-subscription-id.is-null <value>", `target_subscription_id__isNull`).option("--target-subscription-id.is-not-null <value>", `target_subscription_id__isNotNull`).option("--target-subscription-id.equals <value>", `target_subscription_id__equals`).option("--target-subscription-id.contains <value>", `target_subscription_id__contains`).option("--target-subscription-id.starts-with <value>", `target_subscription_id__startsWith`).option("--target-subscription-id.end-with <value>", `target_subscription_id__endWith`).option("--transition-date <value>", `transition_date`).option("--transition-date.not <value>", `transition_date__not`).option("--transition-date.is-null <value>", `transition_date__isNull`).option("--transition-date.is-not-null <value>", `transition_date__isNotNull`).option("--transition-date.equals <value>", `transition_date__equals`).option("--transition-date.lt <value>", `transition_date__lt`).option("--transition-date.lte <value>", `transition_date__lte`).option("--transition-date.gt <value>", `transition_date__gt`).option("--transition-date.gte <value>", `transition_date__gte`).option("--transitioned-at <value>", `transitioned_at`).option("--transitioned-at.not <value>", `transitioned_at__not`).option("--transitioned-at.is-null <value>", `transitioned_at__isNull`).option("--transitioned-at.is-not-null <value>", `transitioned_at__isNotNull`).option("--transitioned-at.equals <value>", `transitioned_at__equals`).option("--transitioned-at.lt <value>", `transitioned_at__lt`).option("--transitioned-at.lte <value>", `transitioned_at__lte`).option("--transitioned-at.gt <value>", `transitioned_at__gt`).option("--transitioned-at.gte <value>", `transitioned_at__gte`).addHelpText("after", `
46581
+ resource.command("list-subscription-transitions").description(`List subscription transitions (migrations from one subscription to another). Filterable and paginated with take/skip.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--status <value>", `status`).option("--status.in <value>", `status__in`).option("--source-subscription-id <value>", `source_subscription_id`).option("--source-subscription-id.not <value>", `source_subscription_id__not`).option("--source-subscription-id.equals <value>", `source_subscription_id__equals`).option("--source-subscription-id.contains <value>", `source_subscription_id__contains`).option("--source-subscription-id.starts-with <value>", `source_subscription_id__startsWith`).option("--source-subscription-id.end-with <value>", `source_subscription_id__endWith`).option("--base-subscription-id <value>", `base_subscription_id`).option("--base-subscription-id.not <value>", `base_subscription_id__not`).option("--base-subscription-id.equals <value>", `base_subscription_id__equals`).option("--base-subscription-id.contains <value>", `base_subscription_id__contains`).option("--base-subscription-id.starts-with <value>", `base_subscription_id__startsWith`).option("--base-subscription-id.end-with <value>", `base_subscription_id__endWith`).option("--target-subscription-id <value>", `target_subscription_id`).option("--target-subscription-id.not <value>", `target_subscription_id__not`).option("--target-subscription-id.equals <value>", `target_subscription_id__equals`).option("--target-subscription-id.contains <value>", `target_subscription_id__contains`).option("--target-subscription-id.starts-with <value>", `target_subscription_id__startsWith`).option("--target-subscription-id.end-with <value>", `target_subscription_id__endWith`).option("--target-subscription-id.is-null <value>", `target_subscription_id__isNull`).option("--target-subscription-id.is-not-null <value>", `target_subscription_id__isNotNull`).option("--transition-date <value>", `transition_date`).option("--transition-date.not <value>", `transition_date__not`).option("--transition-date.equals <value>", `transition_date__equals`).option("--transition-date.lt <value>", `transition_date__lt`).option("--transition-date.lte <value>", `transition_date__lte`).option("--transition-date.gt <value>", `transition_date__gt`).option("--transition-date.gte <value>", `transition_date__gte`).option("--transition-date.is-null <value>", `transition_date__isNull`).option("--transition-date.is-not-null <value>", `transition_date__isNotNull`).option("--transitioned-at <value>", `transitioned_at`).option("--transitioned-at.not <value>", `transitioned_at__not`).option("--transitioned-at.equals <value>", `transitioned_at__equals`).option("--transitioned-at.lt <value>", `transitioned_at__lt`).option("--transitioned-at.lte <value>", `transitioned_at__lte`).option("--transitioned-at.gt <value>", `transitioned_at__gt`).option("--transitioned-at.gte <value>", `transitioned_at__gte`).option("--transitioned-at.is-null <value>", `transitioned_at__isNull`).option("--transitioned-at.is-not-null <value>", `transitioned_at__isNotNull`).addHelpText("after", `
46328
46582
  Examples:
46329
46583
  hyperline subscriptions-transitions list-subscription-transitions
46330
46584
  hyperline subscriptions-transitions list-subscription-transitions --take <take> --status <status>`).action(async (opts) => {
@@ -46342,10 +46596,6 @@ Examples:
46342
46596
  args.source_subscription_id = opts.sourceSubscriptionId;
46343
46597
  if (opts["sourceSubscriptionId.not"] !== void 0)
46344
46598
  args.source_subscription_id__not = opts["sourceSubscriptionId.not"];
46345
- if (opts["sourceSubscriptionId.isNull"] !== void 0)
46346
- args.source_subscription_id__isNull = opts["sourceSubscriptionId.isNull"];
46347
- if (opts["sourceSubscriptionId.isNotNull"] !== void 0)
46348
- args.source_subscription_id__isNotNull = opts["sourceSubscriptionId.isNotNull"];
46349
46599
  if (opts["sourceSubscriptionId.equals"] !== void 0)
46350
46600
  args.source_subscription_id__equals = opts["sourceSubscriptionId.equals"];
46351
46601
  if (opts["sourceSubscriptionId.contains"] !== void 0)
@@ -46358,10 +46608,6 @@ Examples:
46358
46608
  args.base_subscription_id = opts.baseSubscriptionId;
46359
46609
  if (opts["baseSubscriptionId.not"] !== void 0)
46360
46610
  args.base_subscription_id__not = opts["baseSubscriptionId.not"];
46361
- if (opts["baseSubscriptionId.isNull"] !== void 0)
46362
- args.base_subscription_id__isNull = opts["baseSubscriptionId.isNull"];
46363
- if (opts["baseSubscriptionId.isNotNull"] !== void 0)
46364
- args.base_subscription_id__isNotNull = opts["baseSubscriptionId.isNotNull"];
46365
46611
  if (opts["baseSubscriptionId.equals"] !== void 0)
46366
46612
  args.base_subscription_id__equals = opts["baseSubscriptionId.equals"];
46367
46613
  if (opts["baseSubscriptionId.contains"] !== void 0)
@@ -46374,10 +46620,6 @@ Examples:
46374
46620
  args.target_subscription_id = opts.targetSubscriptionId;
46375
46621
  if (opts["targetSubscriptionId.not"] !== void 0)
46376
46622
  args.target_subscription_id__not = opts["targetSubscriptionId.not"];
46377
- if (opts["targetSubscriptionId.isNull"] !== void 0)
46378
- args.target_subscription_id__isNull = opts["targetSubscriptionId.isNull"];
46379
- if (opts["targetSubscriptionId.isNotNull"] !== void 0)
46380
- args.target_subscription_id__isNotNull = opts["targetSubscriptionId.isNotNull"];
46381
46623
  if (opts["targetSubscriptionId.equals"] !== void 0)
46382
46624
  args.target_subscription_id__equals = opts["targetSubscriptionId.equals"];
46383
46625
  if (opts["targetSubscriptionId.contains"] !== void 0)
@@ -46386,14 +46628,14 @@ Examples:
46386
46628
  args.target_subscription_id__startsWith = opts["targetSubscriptionId.startsWith"];
46387
46629
  if (opts["targetSubscriptionId.endWith"] !== void 0)
46388
46630
  args.target_subscription_id__endWith = opts["targetSubscriptionId.endWith"];
46631
+ if (opts["targetSubscriptionId.isNull"] !== void 0)
46632
+ args.target_subscription_id__isNull = opts["targetSubscriptionId.isNull"];
46633
+ if (opts["targetSubscriptionId.isNotNull"] !== void 0)
46634
+ args.target_subscription_id__isNotNull = opts["targetSubscriptionId.isNotNull"];
46389
46635
  if (opts.transitionDate !== void 0)
46390
46636
  args.transition_date = opts.transitionDate;
46391
46637
  if (opts["transitionDate.not"] !== void 0)
46392
46638
  args.transition_date__not = opts["transitionDate.not"];
46393
- if (opts["transitionDate.isNull"] !== void 0)
46394
- args.transition_date__isNull = opts["transitionDate.isNull"];
46395
- if (opts["transitionDate.isNotNull"] !== void 0)
46396
- args.transition_date__isNotNull = opts["transitionDate.isNotNull"];
46397
46639
  if (opts["transitionDate.equals"] !== void 0)
46398
46640
  args.transition_date__equals = opts["transitionDate.equals"];
46399
46641
  if (opts["transitionDate.lt"] !== void 0)
@@ -46404,14 +46646,14 @@ Examples:
46404
46646
  args.transition_date__gt = opts["transitionDate.gt"];
46405
46647
  if (opts["transitionDate.gte"] !== void 0)
46406
46648
  args.transition_date__gte = opts["transitionDate.gte"];
46649
+ if (opts["transitionDate.isNull"] !== void 0)
46650
+ args.transition_date__isNull = opts["transitionDate.isNull"];
46651
+ if (opts["transitionDate.isNotNull"] !== void 0)
46652
+ args.transition_date__isNotNull = opts["transitionDate.isNotNull"];
46407
46653
  if (opts.transitionedAt !== void 0)
46408
46654
  args.transitioned_at = opts.transitionedAt;
46409
46655
  if (opts["transitionedAt.not"] !== void 0)
46410
46656
  args.transitioned_at__not = opts["transitionedAt.not"];
46411
- if (opts["transitionedAt.isNull"] !== void 0)
46412
- args.transitioned_at__isNull = opts["transitionedAt.isNull"];
46413
- if (opts["transitionedAt.isNotNull"] !== void 0)
46414
- args.transitioned_at__isNotNull = opts["transitionedAt.isNotNull"];
46415
46657
  if (opts["transitionedAt.equals"] !== void 0)
46416
46658
  args.transitioned_at__equals = opts["transitionedAt.equals"];
46417
46659
  if (opts["transitionedAt.lt"] !== void 0)
@@ -46422,6 +46664,10 @@ Examples:
46422
46664
  args.transitioned_at__gt = opts["transitionedAt.gt"];
46423
46665
  if (opts["transitionedAt.gte"] !== void 0)
46424
46666
  args.transitioned_at__gte = opts["transitionedAt.gte"];
46667
+ if (opts["transitionedAt.isNull"] !== void 0)
46668
+ args.transitioned_at__isNull = opts["transitionedAt.isNull"];
46669
+ if (opts["transitionedAt.isNotNull"] !== void 0)
46670
+ args.transitioned_at__isNotNull = opts["transitionedAt.isNotNull"];
46425
46671
  if (opts.take !== void 0)
46426
46672
  args.take = Number(opts.take);
46427
46673
  if (opts.skip !== void 0)
@@ -46437,46 +46683,42 @@ Examples:
46437
46683
  "status__in",
46438
46684
  "source_subscription_id",
46439
46685
  "source_subscription_id__not",
46440
- "source_subscription_id__isNull",
46441
- "source_subscription_id__isNotNull",
46442
46686
  "source_subscription_id__equals",
46443
46687
  "source_subscription_id__contains",
46444
46688
  "source_subscription_id__startsWith",
46445
46689
  "source_subscription_id__endWith",
46446
46690
  "base_subscription_id",
46447
46691
  "base_subscription_id__not",
46448
- "base_subscription_id__isNull",
46449
- "base_subscription_id__isNotNull",
46450
46692
  "base_subscription_id__equals",
46451
46693
  "base_subscription_id__contains",
46452
46694
  "base_subscription_id__startsWith",
46453
46695
  "base_subscription_id__endWith",
46454
46696
  "target_subscription_id",
46455
46697
  "target_subscription_id__not",
46456
- "target_subscription_id__isNull",
46457
- "target_subscription_id__isNotNull",
46458
46698
  "target_subscription_id__equals",
46459
46699
  "target_subscription_id__contains",
46460
46700
  "target_subscription_id__startsWith",
46461
46701
  "target_subscription_id__endWith",
46702
+ "target_subscription_id__isNull",
46703
+ "target_subscription_id__isNotNull",
46462
46704
  "transition_date",
46463
46705
  "transition_date__not",
46464
- "transition_date__isNull",
46465
- "transition_date__isNotNull",
46466
46706
  "transition_date__equals",
46467
46707
  "transition_date__lt",
46468
46708
  "transition_date__lte",
46469
46709
  "transition_date__gt",
46470
46710
  "transition_date__gte",
46711
+ "transition_date__isNull",
46712
+ "transition_date__isNotNull",
46471
46713
  "transitioned_at",
46472
46714
  "transitioned_at__not",
46473
- "transitioned_at__isNull",
46474
- "transitioned_at__isNotNull",
46475
46715
  "transitioned_at__equals",
46476
46716
  "transitioned_at__lt",
46477
46717
  "transitioned_at__lte",
46478
46718
  "transitioned_at__gt",
46479
- "transitioned_at__gte"
46719
+ "transitioned_at__gte",
46720
+ "transitioned_at__isNull",
46721
+ "transitioned_at__isNotNull"
46480
46722
  ]
46481
46723
  });
46482
46724
  });
@@ -46554,7 +46796,7 @@ Examples:
46554
46796
  // build/commands/generated/taxes.js
46555
46797
  function registerTaxesCommands(parent) {
46556
46798
  const resource = parent.command("taxes").description("Manage taxes");
46557
- resource.command("list-tax-rates").description(`List custom and default tax rate mappings with optional filters for id, name, description, and invoicing_entity_id. Paginated with take/skip.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--id <value>", `id`).option("--id.not <value>", `id__not`).option("--id.is-null <value>", `id__isNull`).option("--id.is-not-null <value>", `id__isNotNull`).option("--id.equals <value>", `id__equals`).option("--id.contains <value>", `id__contains`).option("--id.starts-with <value>", `id__startsWith`).option("--id.end-with <value>", `id__endWith`).option("--name <value>", `name`).option("--name.not <value>", `name__not`).option("--name.is-null <value>", `name__isNull`).option("--name.is-not-null <value>", `name__isNotNull`).option("--name.equals <value>", `name__equals`).option("--name.contains <value>", `name__contains`).option("--name.starts-with <value>", `name__startsWith`).option("--name.end-with <value>", `name__endWith`).option("--description <value>", `description`).option("--description.not <value>", `description__not`).option("--description.is-null <value>", `description__isNull`).option("--description.is-not-null <value>", `description__isNotNull`).option("--description.equals <value>", `description__equals`).option("--description.contains <value>", `description__contains`).option("--description.starts-with <value>", `description__startsWith`).option("--description.end-with <value>", `description__endWith`).option("--invoicing-entity-id <value>", `invoicing_entity_id`).option("--invoicing-entity-id.not <value>", `invoicing_entity_id__not`).option("--invoicing-entity-id.is-null <value>", `invoicing_entity_id__isNull`).option("--invoicing-entity-id.is-not-null <value>", `invoicing_entity_id__isNotNull`).option("--invoicing-entity-id.equals <value>", `invoicing_entity_id__equals`).option("--invoicing-entity-id.contains <value>", `invoicing_entity_id__contains`).option("--invoicing-entity-id.starts-with <value>", `invoicing_entity_id__startsWith`).option("--invoicing-entity-id.end-with <value>", `invoicing_entity_id__endWith`).addHelpText("after", `
46799
+ resource.command("list-tax-rates").description(`List custom and default tax rate mappings with optional filters for id, name, description, and invoicing_entity_id. Paginated with take/skip.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--id <value>", `id`).option("--id.not <value>", `id__not`).option("--id.equals <value>", `id__equals`).option("--id.contains <value>", `id__contains`).option("--id.starts-with <value>", `id__startsWith`).option("--id.end-with <value>", `id__endWith`).option("--name <value>", `name`).option("--name.not <value>", `name__not`).option("--name.equals <value>", `name__equals`).option("--name.contains <value>", `name__contains`).option("--name.starts-with <value>", `name__startsWith`).option("--name.end-with <value>", `name__endWith`).option("--name.is-null <value>", `name__isNull`).option("--name.is-not-null <value>", `name__isNotNull`).option("--description <value>", `description`).option("--description.not <value>", `description__not`).option("--description.equals <value>", `description__equals`).option("--description.contains <value>", `description__contains`).option("--description.starts-with <value>", `description__startsWith`).option("--description.end-with <value>", `description__endWith`).option("--description.is-null <value>", `description__isNull`).option("--description.is-not-null <value>", `description__isNotNull`).option("--invoicing-entity-id <value>", `invoicing_entity_id`).option("--invoicing-entity-id.not <value>", `invoicing_entity_id__not`).option("--invoicing-entity-id.equals <value>", `invoicing_entity_id__equals`).option("--invoicing-entity-id.contains <value>", `invoicing_entity_id__contains`).option("--invoicing-entity-id.starts-with <value>", `invoicing_entity_id__startsWith`).option("--invoicing-entity-id.end-with <value>", `invoicing_entity_id__endWith`).addHelpText("after", `
46558
46800
  Examples:
46559
46801
  hyperline taxes list-tax-rates
46560
46802
  hyperline taxes list-tax-rates --take <take> --id <id>`).action(async (opts) => {
@@ -46568,10 +46810,6 @@ Examples:
46568
46810
  args.id = opts.id;
46569
46811
  if (opts["id.not"] !== void 0)
46570
46812
  args.id__not = opts["id.not"];
46571
- if (opts["id.isNull"] !== void 0)
46572
- args.id__isNull = opts["id.isNull"];
46573
- if (opts["id.isNotNull"] !== void 0)
46574
- args.id__isNotNull = opts["id.isNotNull"];
46575
46813
  if (opts["id.equals"] !== void 0)
46576
46814
  args.id__equals = opts["id.equals"];
46577
46815
  if (opts["id.contains"] !== void 0)
@@ -46584,10 +46822,6 @@ Examples:
46584
46822
  args.name = opts.name;
46585
46823
  if (opts["name.not"] !== void 0)
46586
46824
  args.name__not = opts["name.not"];
46587
- if (opts["name.isNull"] !== void 0)
46588
- args.name__isNull = opts["name.isNull"];
46589
- if (opts["name.isNotNull"] !== void 0)
46590
- args.name__isNotNull = opts["name.isNotNull"];
46591
46825
  if (opts["name.equals"] !== void 0)
46592
46826
  args.name__equals = opts["name.equals"];
46593
46827
  if (opts["name.contains"] !== void 0)
@@ -46596,14 +46830,14 @@ Examples:
46596
46830
  args.name__startsWith = opts["name.startsWith"];
46597
46831
  if (opts["name.endWith"] !== void 0)
46598
46832
  args.name__endWith = opts["name.endWith"];
46833
+ if (opts["name.isNull"] !== void 0)
46834
+ args.name__isNull = opts["name.isNull"];
46835
+ if (opts["name.isNotNull"] !== void 0)
46836
+ args.name__isNotNull = opts["name.isNotNull"];
46599
46837
  if (opts.description !== void 0)
46600
46838
  args.description = opts.description;
46601
46839
  if (opts["description.not"] !== void 0)
46602
46840
  args.description__not = opts["description.not"];
46603
- if (opts["description.isNull"] !== void 0)
46604
- args.description__isNull = opts["description.isNull"];
46605
- if (opts["description.isNotNull"] !== void 0)
46606
- args.description__isNotNull = opts["description.isNotNull"];
46607
46841
  if (opts["description.equals"] !== void 0)
46608
46842
  args.description__equals = opts["description.equals"];
46609
46843
  if (opts["description.contains"] !== void 0)
@@ -46612,14 +46846,14 @@ Examples:
46612
46846
  args.description__startsWith = opts["description.startsWith"];
46613
46847
  if (opts["description.endWith"] !== void 0)
46614
46848
  args.description__endWith = opts["description.endWith"];
46849
+ if (opts["description.isNull"] !== void 0)
46850
+ args.description__isNull = opts["description.isNull"];
46851
+ if (opts["description.isNotNull"] !== void 0)
46852
+ args.description__isNotNull = opts["description.isNotNull"];
46615
46853
  if (opts.invoicingEntityId !== void 0)
46616
46854
  args.invoicing_entity_id = opts.invoicingEntityId;
46617
46855
  if (opts["invoicingEntityId.not"] !== void 0)
46618
46856
  args.invoicing_entity_id__not = opts["invoicingEntityId.not"];
46619
- if (opts["invoicingEntityId.isNull"] !== void 0)
46620
- args.invoicing_entity_id__isNull = opts["invoicingEntityId.isNull"];
46621
- if (opts["invoicingEntityId.isNotNull"] !== void 0)
46622
- args.invoicing_entity_id__isNotNull = opts["invoicingEntityId.isNotNull"];
46623
46857
  if (opts["invoicingEntityId.equals"] !== void 0)
46624
46858
  args.invoicing_entity_id__equals = opts["invoicingEntityId.equals"];
46625
46859
  if (opts["invoicingEntityId.contains"] !== void 0)
@@ -46641,32 +46875,28 @@ Examples:
46641
46875
  "skip",
46642
46876
  "id",
46643
46877
  "id__not",
46644
- "id__isNull",
46645
- "id__isNotNull",
46646
46878
  "id__equals",
46647
46879
  "id__contains",
46648
46880
  "id__startsWith",
46649
46881
  "id__endWith",
46650
46882
  "name",
46651
46883
  "name__not",
46652
- "name__isNull",
46653
- "name__isNotNull",
46654
46884
  "name__equals",
46655
46885
  "name__contains",
46656
46886
  "name__startsWith",
46657
46887
  "name__endWith",
46888
+ "name__isNull",
46889
+ "name__isNotNull",
46658
46890
  "description",
46659
46891
  "description__not",
46660
- "description__isNull",
46661
- "description__isNotNull",
46662
46892
  "description__equals",
46663
46893
  "description__contains",
46664
46894
  "description__startsWith",
46665
46895
  "description__endWith",
46896
+ "description__isNull",
46897
+ "description__isNotNull",
46666
46898
  "invoicing_entity_id",
46667
46899
  "invoicing_entity_id__not",
46668
- "invoicing_entity_id__isNull",
46669
- "invoicing_entity_id__isNotNull",
46670
46900
  "invoicing_entity_id__equals",
46671
46901
  "invoicing_entity_id__contains",
46672
46902
  "invoicing_entity_id__startsWith",
@@ -47250,6 +47480,7 @@ function registerAllCommands(program2) {
47250
47480
  registerCouponsCommands(program2);
47251
47481
  registerCoupons_Promotion_CodesCommands(program2);
47252
47482
  registerCustomers_CreditsCommands(program2);
47483
+ registerCustomers_FeaturesCommands(program2);
47253
47484
  registerCustomers_Payment_MethodsCommands(program2);
47254
47485
  registerCustomers_AddressCommands(program2);
47255
47486
  registerCustomers_ShippingCommands(program2);
@@ -47258,12 +47489,14 @@ function registerAllCommands(program2) {
47258
47489
  registerOrganisationsCommands(program2);
47259
47490
  registerCustomers_SegmentsCommands(program2);
47260
47491
  registerExportsCommands(program2);
47492
+ registerFeaturesCommands(program2);
47261
47493
  registerFilesCommands(program2);
47262
47494
  registerInvoicesCommands(program2);
47263
47495
  registerInvoices_TransactionsCommands(program2);
47264
47496
  registerInvoicing_EntitiesCommands(program2);
47265
- registerMonitoringCommands(program2);
47497
+ registerAi_MonitoringCommands(program2);
47266
47498
  registerPaymentsCommands(program2);
47499
+ registerProducts_FeaturesCommands(program2);
47267
47500
  registerProductsCommands(program2);
47268
47501
  registerPrice_ConfigurationsCommands(program2);
47269
47502
  registerQuotesCommands(program2);
@@ -63297,6 +63530,8 @@ var de = {
63297
63530
  "einvoicing.paymentFromWallet": "Zahlung aus Guthaben",
63298
63531
  "einvoicing.paymentProcessed": "Zahlung verarbeitet",
63299
63532
  "einvoicing.paymentReceived": "Zahlung erhalten",
63533
+ "invoices.minimumFee.adjustmentName": "Anpassung der Mindestgeb\xFChr",
63534
+ "invoices.minimumFee.name": "Mindestgeb\xFChr",
63300
63535
  "invoices.outstandingProduct.description": "Unbezahlter Betrag der Rechnung{{invoiceNumber}} vom {{date}}",
63301
63536
  "invoices.outstandingProduct.descriptionPeriod": "Unbezahlter Betrag der Rechnung{{invoiceNumber}} vom {{periodStart}} bis {{periodEnd}}",
63302
63537
  "invoices.outstandingProduct.name": "Offener Saldo",
@@ -63330,6 +63565,8 @@ var en = {
63330
63565
  "creditNotes.refundChargeName": "Refund for invoice",
63331
63566
  "credits.bundleOf": "{{productName}} - Pack of {{creditCount}} credits",
63332
63567
  "credits.unitsOf": "{{productName}} - {{creditCount}} credits",
63568
+ "invoices.minimumFee.adjustmentName": "Minimum fee adjustment",
63569
+ "invoices.minimumFee.name": "Minimum fee",
63333
63570
  "invoices.outstandingProduct.description": "Unpaid amount from the invoice{{invoiceNumber}} emitted on {{date}}",
63334
63571
  "invoices.outstandingProduct.descriptionPeriod": "Unpaid amount from the invoice{{invoiceNumber}} from {{periodStart}} to {{periodEnd}}",
63335
63572
  "invoices.outstandingProduct.name": "Outstanding balance",
@@ -63393,6 +63630,8 @@ var es = {
63393
63630
  "einvoicing.paymentFromWallet": "Pago desde el monedero",
63394
63631
  "einvoicing.paymentProcessed": "Pago procesado",
63395
63632
  "einvoicing.paymentReceived": "Pago recibido",
63633
+ "invoices.minimumFee.adjustmentName": "Ajuste del cargo m\xEDnimo",
63634
+ "invoices.minimumFee.name": "Cargo m\xEDnimo",
63396
63635
  "invoices.outstandingProduct.description": "Monto pendiente de la factura{{invoiceNumber}} emitida el {{date}}",
63397
63636
  "invoices.outstandingProduct.descriptionPeriod": "Monto pendiente de la factura{{invoiceNumber}} del {{periodStart}} al {{periodEnd}}",
63398
63637
  "invoices.outstandingProduct.name": "Saldo pendiente",
@@ -63441,6 +63680,8 @@ var fr = {
63441
63680
  "einvoicing.paymentFromWallet": "Paiement depuis le portefeuille",
63442
63681
  "einvoicing.paymentProcessed": "Paiement effectu\xE9",
63443
63682
  "einvoicing.paymentReceived": "Paiement re\xE7u",
63683
+ "invoices.minimumFee.adjustmentName": "Ajustement des frais minimums",
63684
+ "invoices.minimumFee.name": "Frais minimums",
63444
63685
  "invoices.outstandingProduct.description": "Montant impay\xE9 de la facture{{invoiceNumber}} \xE9mise le {{date}}",
63445
63686
  "invoices.outstandingProduct.descriptionPeriod": "Montant impay\xE9 de la facture{{invoiceNumber}} du {{periodStart}} au {{periodEnd}}",
63446
63687
  "invoices.outstandingProduct.name": "Solde impay\xE9",
@@ -63489,6 +63730,8 @@ var it = {
63489
63730
  "einvoicing.paymentFromWallet": "Pagamento dal portafoglio",
63490
63731
  "einvoicing.paymentProcessed": "Pagamento elaborato",
63491
63732
  "einvoicing.paymentReceived": "Pagamento ricevuto",
63733
+ "invoices.minimumFee.adjustmentName": "Adeguamento all\u2019importo minimo",
63734
+ "invoices.minimumFee.name": "Importo minimo",
63492
63735
  "invoices.outstandingProduct.description": "Importo insoluto della fattura{{invoiceNumber}} emessa il {{date}}",
63493
63736
  "invoices.outstandingProduct.descriptionPeriod": "Importo insoluto della fattura{{invoiceNumber}} dal {{periodStart}} al {{periodEnd}}",
63494
63737
  "invoices.outstandingProduct.name": "Saldo insoluto",
@@ -63537,6 +63780,8 @@ var lt = {
63537
63780
  "einvoicing.paymentFromWallet": "Mok\u0117jimas i\u0161 pinigin\u0117s",
63538
63781
  "einvoicing.paymentProcessed": "Mok\u0117jimas apdorotas",
63539
63782
  "einvoicing.paymentReceived": "Mok\u0117jimas gautas",
63783
+ "invoices.minimumFee.adjustmentName": "Minimalaus mokes\u010Dio koregavimas",
63784
+ "invoices.minimumFee.name": "Minimalus mokestis",
63540
63785
  "invoices.outstandingProduct.description": "Neapmok\u0117ta {{date}} i\u0161ra\u0161ytos s\u0105skaitos fakt\u016Bros{{invoiceNumber}} suma",
63541
63786
  "invoices.outstandingProduct.descriptionPeriod": "Neapmok\u0117ta s\u0105skaitos fakt\u016Bros{{invoiceNumber}} suma u\u017E laikotarp\u012F nuo {{periodStart}} iki {{periodEnd}}",
63542
63787
  "invoices.outstandingProduct.name": "Neapmok\u0117tas likutis",
@@ -63585,6 +63830,8 @@ var nl = {
63585
63830
  "einvoicing.paymentFromWallet": "Betaling uit tegoed",
63586
63831
  "einvoicing.paymentProcessed": "Betaling verwerkt",
63587
63832
  "einvoicing.paymentReceived": "Betaling ontvangen",
63833
+ "invoices.minimumFee.adjustmentName": "Aanpassing minimumbedrag",
63834
+ "invoices.minimumFee.name": "Minimumbedrag",
63588
63835
  "invoices.outstandingProduct.description": "Onbetaald bedrag van de factuur{{invoiceNumber}} uitgegeven op {{date}}",
63589
63836
  "invoices.outstandingProduct.descriptionPeriod": "Onbetaald bedrag van de factuur{{invoiceNumber}} van {{periodStart}} tot {{periodEnd}}",
63590
63837
  "invoices.outstandingProduct.name": "Openstaand saldo",
@@ -63633,6 +63880,8 @@ var pl = {
63633
63880
  "einvoicing.paymentFromWallet": "P\u0142atno\u015B\u0107 z portfela",
63634
63881
  "einvoicing.paymentProcessed": "P\u0142atno\u015B\u0107 przetworzona",
63635
63882
  "einvoicing.paymentReceived": "P\u0142atno\u015B\u0107 otrzymana",
63883
+ "invoices.minimumFee.adjustmentName": "Wyr\xF3wnanie do op\u0142aty minimalnej",
63884
+ "invoices.minimumFee.name": "Op\u0142ata minimalna",
63636
63885
  "invoices.outstandingProduct.description": "Nieop\u0142acona kwota z faktury{{invoiceNumber}} wystawionej {{date}}",
63637
63886
  "invoices.outstandingProduct.descriptionPeriod": "Nieop\u0142acona kwota z faktury{{invoiceNumber}} od {{periodStart}} do {{periodEnd}}",
63638
63887
  "invoices.outstandingProduct.name": "Niezap\u0142acone saldo",
@@ -63681,6 +63930,8 @@ var pt = {
63681
63930
  "einvoicing.paymentFromWallet": "Pagamento da carteira",
63682
63931
  "einvoicing.paymentProcessed": "Pagamento processado",
63683
63932
  "einvoicing.paymentReceived": "Pagamento recebido",
63933
+ "invoices.minimumFee.adjustmentName": "Ajuste do valor m\xEDnimo",
63934
+ "invoices.minimumFee.name": "Valor m\xEDnimo",
63684
63935
  "invoices.outstandingProduct.description": "Valor em aberto da fatura{{invoiceNumber}} emitida em {{date}}",
63685
63936
  "invoices.outstandingProduct.descriptionPeriod": "Valor em aberto da fatura{{invoiceNumber}} de {{periodStart}} a {{periodEnd}}",
63686
63937
  "invoices.outstandingProduct.name": "Saldo em aberto",
@@ -63778,97 +64029,314 @@ var executionContextStorage = new AsyncLocalStorage();
63778
64029
  function getExecutionContext() {
63779
64030
  return executionContextStorage.getStore();
63780
64031
  }
63781
-
63782
- // ../hyperline-monitoring/build/context/correlationId.js
63783
- import { AsyncLocalStorage as AsyncLocalStorage2 } from "node:async_hooks";
63784
- var correlationIdStorage = new AsyncLocalStorage2();
63785
- function getCorrelationId() {
63786
- return correlationIdStorage.getStore();
64032
+
64033
+ // ../hyperline-monitoring/build/context/correlationId.js
64034
+ import { AsyncLocalStorage as AsyncLocalStorage2 } from "node:async_hooks";
64035
+ var correlationIdStorage = new AsyncLocalStorage2();
64036
+ function getCorrelationId() {
64037
+ return correlationIdStorage.getStore();
64038
+ }
64039
+
64040
+ // ../hyperline-config/build/index.js
64041
+ import "dotenv/config";
64042
+ import * as stackTraceParser from "stacktrace-parser";
64043
+ function coerceBoolean() {
64044
+ return external_exports.any().refine((value) => ["true", "false"].includes(value), {
64045
+ message: "Expected boolean"
64046
+ }).transform((value) => (
64047
+ // biome-ignore lint/complexity/noUselessTernary: ignore
64048
+ value === "true" ? true : false
64049
+ ));
64050
+ }
64051
+ var types = {
64052
+ string: external_exports.coerce.string,
64053
+ number: external_exports.coerce.number,
64054
+ boolean: coerceBoolean,
64055
+ enum: external_exports.enum
64056
+ };
64057
+ function getConfig(schema, testValues) {
64058
+ const validator = external_exports.object(Object.fromEntries(Object.entries(schema).map(([key, zodType]) => {
64059
+ if (zodType instanceof ZodOptional) {
64060
+ return [key, external_exports.string().optional()];
64061
+ }
64062
+ return [key, external_exports.string()];
64063
+ })));
64064
+ const processEnv = process.env;
64065
+ const isTestMode = processEnv.NODE_ENV === "test";
64066
+ const envVariables = {
64067
+ ...processEnv,
64068
+ ...isTestMode && testValues ? Object.fromEntries(Object.entries(testValues).map(([key, value]) => [key, String(value)])) : {}
64069
+ };
64070
+ const packageName = envVariables.npm_package_name;
64071
+ const parseProcessEnvResult = validator.safeParse(envVariables);
64072
+ if (!parseProcessEnvResult.success) {
64073
+ const parsedStackTrace = stackTraceParser.parse(parseProcessEnvResult.error.stack ?? "");
64074
+ const getConfigCallLine = parsedStackTrace.find((line) => {
64075
+ return !line.file?.includes("hyperline-config") && (line.file?.includes("apps/") || line.file?.includes("core/") || line.file?.includes("packages/"));
64076
+ });
64077
+ const callerFile = getConfigCallLine?.file;
64078
+ console.error(`Invalid environment variables for service \`${packageName}\`: \`${callerFile}\``);
64079
+ console.error(parseProcessEnvResult.error.format());
64080
+ process.exit(1);
64081
+ }
64082
+ const coercion = external_exports.object(schema);
64083
+ return coercion.parse(parseProcessEnvResult.data);
64084
+ }
64085
+
64086
+ // ../hyperline-monitoring/build/config.js
64087
+ var config2 = getConfig({
64088
+ // config
64089
+ APP_VERSION: types.string().optional(),
64090
+ // Deployment environment for log tagging, when it cannot be read off
64091
+ // NODE_ENV. Set only by the PDF render worker pools, which must run with
64092
+ // NODE_ENV="production" to get the production React build regardless of which
64093
+ // environment the pod is actually in (see core/invoicing/services/pdf/index.ts).
64094
+ // Unset everywhere else, so the NODE_ENV fallback keeps current behaviour.
64095
+ APP_ENV: types.string().optional(),
64096
+ DD_SERVICE: types.string().optional(),
64097
+ LOGGER_CONSOLE_ENABLED: types.boolean().optional(),
64098
+ LOGGER_STDOUT_ENABLED: types.boolean().optional(),
64099
+ NODE_ENV: types.enum(["local", "test", "staging", "sandbox", "production"]),
64100
+ EVENT_LOOP_MONITORING_ENABLED: types.boolean().optional(),
64101
+ MEMORY_MONITORING_ENABLED: types.boolean().optional(),
64102
+ MEMORY_MONITORING_INTERVAL_MS: types.number().optional()
64103
+ // secrets
64104
+ }, {
64105
+ APP_VERSION: void 0,
64106
+ APP_ENV: void 0,
64107
+ DD_SERVICE: void 0,
64108
+ LOGGER_CONSOLE_ENABLED: false,
64109
+ LOGGER_STDOUT_ENABLED: false,
64110
+ EVENT_LOOP_MONITORING_ENABLED: false,
64111
+ MEMORY_MONITORING_ENABLED: false,
64112
+ MEMORY_MONITORING_INTERVAL_MS: 3e4,
64113
+ NODE_ENV: "test"
64114
+ });
64115
+
64116
+ // ../hyperline-monitoring/build/logger/logger.js
64117
+ import * as util from "node:util";
64118
+ import prune2 from "json-prune";
64119
+ import * as winston from "winston";
64120
+
64121
+ // ../hyperline-monitoring/build/logger/formatting/format.js
64122
+ import prune from "json-prune";
64123
+
64124
+ // ../hyperline-monitoring/build/logger/formatting/logRedaction.js
64125
+ var REDACTED_KEY_NAMES = /* @__PURE__ */ new Set([
64126
+ "accesstoken",
64127
+ "apitoken",
64128
+ "assertion",
64129
+ "authorization",
64130
+ "authtoken",
64131
+ "cardnumber",
64132
+ "clientassertion",
64133
+ "codeverifier",
64134
+ "connectionurl",
64135
+ "consumerkey",
64136
+ "cookie",
64137
+ "credential",
64138
+ "credentials",
64139
+ "iban",
64140
+ "idtoken",
64141
+ "privatekey",
64142
+ "publictoken",
64143
+ "refreshtoken",
64144
+ "sessiontoken",
64145
+ "token",
64146
+ "tokenid",
64147
+ "verificationcode"
64148
+ ]);
64149
+ var REDACTED_KEY_SUFFIX_PATTERN = /(secret|password|passphrase|apikey)$/;
64150
+ var REDACTED_KEY_CANDIDATE_PATTERN = /token|key|secret|pass|assertion|verifier|credential|authorization|cookie|iban|cardnumber|code|connectionurl/i;
64151
+ var URL_ONLY_REDACTED_KEYS = /* @__PURE__ */ new Set(["key"]);
64152
+ var OAUTH_CODE_KEY = "code";
64153
+ var OAUTH_CODE_CONTEXT_KEYS = ["state", "grant_type"];
64154
+ var REDACTED_VALUE = "<redacted>";
64155
+ var TRUNCATED_VALUE = "[TRUNCATED: not redacted]";
64156
+ var TRUNCATED_KEY = "[TRUNCATED]";
64157
+ var MAX_REDACTION_DEPTH = 6;
64158
+ var MAX_ARRAY_ENTRIES = 50;
64159
+ var MAX_PARSED_STRING_LENGTH = 16384;
64160
+ var MAX_VISITED_NODES = 5e3;
64161
+ var MAX_CONTAINER_ENTRIES = 1e3;
64162
+ var MAX_STRING_CHARACTERS = 256e3;
64163
+ function redactLogBody({ body }) {
64164
+ return redactValue({
64165
+ value: body,
64166
+ depth: MAX_REDACTION_DEPTH,
64167
+ budget: {
64168
+ remainingNodes: MAX_VISITED_NODES,
64169
+ remainingChars: MAX_STRING_CHARACTERS
64170
+ }
64171
+ });
64172
+ }
64173
+ function redactLogUrl({ url: url2 }) {
64174
+ const queryIndex = url2.indexOf("?");
64175
+ if (queryIndex === -1) {
64176
+ return url2;
64177
+ }
64178
+ if (url2.length > MAX_PARSED_STRING_LENGTH) {
64179
+ return `${url2.slice(0, queryIndex)}?${TRUNCATED_VALUE}`;
64180
+ }
64181
+ const redactedQuery = redactFormEncoded({
64182
+ text: url2.slice(queryIndex + 1),
64183
+ extraRedactedKeys: URL_ONLY_REDACTED_KEYS
64184
+ });
64185
+ return redactedQuery === void 0 ? url2 : `${url2.slice(0, queryIndex)}?${redactedQuery}`;
64186
+ }
64187
+ function redactValue({ value, depth, budget }) {
64188
+ if (isOpaqueObject({ value })) {
64189
+ return replaceOpaqueObject({ value });
64190
+ }
64191
+ if (typeof value === "string") {
64192
+ if (value.length > budget.remainingChars) {
64193
+ return TRUNCATED_VALUE;
64194
+ }
64195
+ budget.remainingChars -= value.length;
64196
+ }
64197
+ if (depth <= 0 || budget.remainingNodes <= 0) {
64198
+ return isInspectable({ value }) ? TRUNCATED_VALUE : value;
64199
+ }
64200
+ budget.remainingNodes -= 1;
64201
+ if (typeof value === "string") {
64202
+ return redactString({ text: value, budget });
64203
+ }
64204
+ if (value instanceof URLSearchParams) {
64205
+ return redactValue({ value: value.toString(), depth, budget });
64206
+ }
64207
+ if (Array.isArray(value)) {
64208
+ return redactArray({ items: value, depth, budget });
64209
+ }
64210
+ if (isPlainObject2(value)) {
64211
+ return redactObject({ record: value, depth, budget });
64212
+ }
64213
+ return value;
64214
+ }
64215
+ function isOpaqueObject({ value }) {
64216
+ return typeof value === "object" && value !== null && !Array.isArray(value) && !isPlainObject2(value) && !(value instanceof URLSearchParams);
64217
+ }
64218
+ function replaceOpaqueObject({ value }) {
64219
+ if (typeof value !== "object" || value === null || value instanceof Date) {
64220
+ return value;
64221
+ }
64222
+ if (value instanceof ArrayBuffer || ArrayBuffer.isView(value)) {
64223
+ return `[BINARY ${value.byteLength} bytes]`;
64224
+ }
64225
+ if (value instanceof Blob) {
64226
+ return `[BINARY ${value.size} bytes]`;
64227
+ }
64228
+ if (value instanceof FormData || typeof Reflect.get(value, "pipe") === "function") {
64229
+ return "[BINARY stream]";
64230
+ }
64231
+ return TRUNCATED_VALUE;
64232
+ }
64233
+ function redactArray({ items, depth, budget }) {
64234
+ const isTruncated = items.length > MAX_ARRAY_ENTRIES;
64235
+ const keptItems = isTruncated ? items.slice(0, MAX_ARRAY_ENTRIES) : items;
64236
+ let redactedItems;
64237
+ for (const [index, item] of keptItems.entries()) {
64238
+ const redactedItem = redactValue({ value: item, depth: depth - 1, budget });
64239
+ if (redactedItem !== item) {
64240
+ redactedItems ??= [...keptItems];
64241
+ redactedItems[index] = redactedItem;
64242
+ }
64243
+ }
64244
+ const result = redactedItems ?? keptItems;
64245
+ return isTruncated ? [...result, TRUNCATED_VALUE] : result;
64246
+ }
64247
+ function redactObject({ record: record2, depth, budget }) {
64248
+ const redactedEntries = /* @__PURE__ */ new Map();
64249
+ const carriesOAuthCode = OAUTH_CODE_CONTEXT_KEYS.some((contextKey) => Object.hasOwn(record2, contextKey));
64250
+ const keptKeys = [];
64251
+ let isTruncated = false;
64252
+ for (const key in record2) {
64253
+ if (!Object.hasOwn(record2, key)) {
64254
+ continue;
64255
+ }
64256
+ if (keptKeys.length >= MAX_CONTAINER_ENTRIES || key.length > budget.remainingChars) {
64257
+ isTruncated = true;
64258
+ break;
64259
+ }
64260
+ budget.remainingChars -= key.length;
64261
+ keptKeys.push(key);
64262
+ const nestedValue = record2[key];
64263
+ const isSensitiveKey = isRedactedKey({ key }) || carriesOAuthCode && key === OAUTH_CODE_KEY;
64264
+ const shouldRedact = isSensitiveKey && nestedValue != null && typeof nestedValue !== "boolean";
64265
+ if (shouldRedact) {
64266
+ budget.remainingNodes -= 1;
64267
+ }
64268
+ const redactedNestedValue = shouldRedact ? REDACTED_VALUE : redactValue({ value: nestedValue, depth: depth - 1, budget });
64269
+ if (redactedNestedValue !== nestedValue) {
64270
+ redactedEntries.set(key, redactedNestedValue);
64271
+ }
64272
+ }
64273
+ if (isTruncated) {
64274
+ const keptRecord = {};
64275
+ for (const key of keptKeys) {
64276
+ keptRecord[key] = redactedEntries.has(key) ? redactedEntries.get(key) : record2[key];
64277
+ }
64278
+ keptRecord[TRUNCATED_KEY] = TRUNCATED_VALUE;
64279
+ return keptRecord;
64280
+ }
64281
+ return redactedEntries.size === 0 ? record2 : { ...record2, ...Object.fromEntries(redactedEntries) };
64282
+ }
64283
+ function redactString({ text, budget }) {
64284
+ if (text.length > MAX_PARSED_STRING_LENGTH) {
64285
+ return TRUNCATED_VALUE;
64286
+ }
64287
+ if (!isInspectable({ value: text })) {
64288
+ return text;
64289
+ }
64290
+ const trimmedText = text.trim();
64291
+ if (trimmedText.startsWith("{") || trimmedText.startsWith("[")) {
64292
+ try {
64293
+ const parsedValue = JSON.parse(trimmedText);
64294
+ const redactedValue = redactValue({
64295
+ value: parsedValue,
64296
+ depth: MAX_REDACTION_DEPTH,
64297
+ budget
64298
+ });
64299
+ return redactedValue === parsedValue ? text : JSON.stringify(redactedValue);
64300
+ } catch {
64301
+ return REDACTED_KEY_CANDIDATE_PATTERN.test(text) ? TRUNCATED_VALUE : redactFormEncoded({ text }) ?? text;
64302
+ }
64303
+ }
64304
+ return redactFormEncoded({ text }) ?? text;
64305
+ }
64306
+ function redactFormEncoded({ text, extraRedactedKeys }) {
64307
+ if (!text.includes("=") || !REDACTED_KEY_CANDIDATE_PATTERN.test(text)) {
64308
+ return void 0;
64309
+ }
64310
+ const params = new URLSearchParams(text);
64311
+ const carriesOAuthCode = OAUTH_CODE_CONTEXT_KEYS.some((contextKey) => params.has(contextKey));
64312
+ let hasRedactedParam = false;
64313
+ for (const key of new Set(params.keys())) {
64314
+ if (isRedactedKey({ key }) || extraRedactedKeys?.has(key.toLowerCase()) || carriesOAuthCode && key === OAUTH_CODE_KEY) {
64315
+ params.set(key, REDACTED_VALUE);
64316
+ hasRedactedParam = true;
64317
+ }
64318
+ }
64319
+ return hasRedactedParam ? params.toString() : void 0;
64320
+ }
64321
+ function isRedactedKey({ key }) {
64322
+ const normalizedKey = key.toLowerCase().replace(/[_-]/g, "");
64323
+ return REDACTED_KEY_NAMES.has(normalizedKey) || REDACTED_KEY_SUFFIX_PATTERN.test(normalizedKey);
63787
64324
  }
63788
-
63789
- // ../hyperline-config/build/index.js
63790
- import "dotenv/config";
63791
- import * as stackTraceParser from "stacktrace-parser";
63792
- function coerceBoolean() {
63793
- return external_exports.any().refine((value) => ["true", "false"].includes(value), {
63794
- message: "Expected boolean"
63795
- }).transform((value) => (
63796
- // biome-ignore lint/complexity/noUselessTernary: ignore
63797
- value === "true" ? true : false
63798
- ));
64325
+ function isInspectable({ value }) {
64326
+ if (typeof value === "string") {
64327
+ return value.length > MAX_PARSED_STRING_LENGTH || /^\s*[{[]/.test(value) || value.includes("=") && REDACTED_KEY_CANDIDATE_PATTERN.test(value);
64328
+ }
64329
+ return value instanceof URLSearchParams || Array.isArray(value) || isPlainObject2(value);
63799
64330
  }
63800
- var types = {
63801
- string: external_exports.coerce.string,
63802
- number: external_exports.coerce.number,
63803
- boolean: coerceBoolean,
63804
- enum: external_exports.enum
63805
- };
63806
- function getConfig(schema, testValues) {
63807
- const validator = external_exports.object(Object.fromEntries(Object.entries(schema).map(([key, zodType]) => {
63808
- if (zodType instanceof ZodOptional) {
63809
- return [key, external_exports.string().optional()];
63810
- }
63811
- return [key, external_exports.string()];
63812
- })));
63813
- const processEnv = process.env;
63814
- const isTestMode = processEnv.NODE_ENV === "test";
63815
- const envVariables = {
63816
- ...processEnv,
63817
- ...isTestMode && testValues ? Object.fromEntries(Object.entries(testValues).map(([key, value]) => [key, String(value)])) : {}
63818
- };
63819
- const packageName = envVariables.npm_package_name;
63820
- const parseProcessEnvResult = validator.safeParse(envVariables);
63821
- if (!parseProcessEnvResult.success) {
63822
- const parsedStackTrace = stackTraceParser.parse(parseProcessEnvResult.error.stack ?? "");
63823
- const getConfigCallLine = parsedStackTrace.find((line) => {
63824
- return !line.file?.includes("hyperline-config") && (line.file?.includes("apps/") || line.file?.includes("core/") || line.file?.includes("packages/"));
63825
- });
63826
- const callerFile = getConfigCallLine?.file;
63827
- console.error(`Invalid environment variables for service \`${packageName}\`: \`${callerFile}\``);
63828
- console.error(parseProcessEnvResult.error.format());
63829
- process.exit(1);
64331
+ function isPlainObject2(value) {
64332
+ if (typeof value !== "object" || value === null) {
64333
+ return false;
63830
64334
  }
63831
- const coercion = external_exports.object(schema);
63832
- return coercion.parse(parseProcessEnvResult.data);
64335
+ const prototype = Object.getPrototypeOf(value);
64336
+ return prototype === Object.prototype || prototype === null;
63833
64337
  }
63834
64338
 
63835
- // ../hyperline-monitoring/build/config.js
63836
- var config2 = getConfig({
63837
- // config
63838
- APP_VERSION: types.string().optional(),
63839
- // Deployment environment for log tagging, when it cannot be read off
63840
- // NODE_ENV. Set only by the PDF render worker pools, which must run with
63841
- // NODE_ENV="production" to get the production React build regardless of which
63842
- // environment the pod is actually in (see core/invoicing/services/pdf/index.ts).
63843
- // Unset everywhere else, so the NODE_ENV fallback keeps current behaviour.
63844
- APP_ENV: types.string().optional(),
63845
- DD_SERVICE: types.string().optional(),
63846
- LOGGER_CONSOLE_ENABLED: types.boolean().optional(),
63847
- LOGGER_STDOUT_ENABLED: types.boolean().optional(),
63848
- NODE_ENV: types.enum(["local", "test", "staging", "sandbox", "production"]),
63849
- EVENT_LOOP_MONITORING_ENABLED: types.boolean().optional(),
63850
- MEMORY_MONITORING_ENABLED: types.boolean().optional(),
63851
- MEMORY_MONITORING_INTERVAL_MS: types.number().optional()
63852
- // secrets
63853
- }, {
63854
- APP_VERSION: void 0,
63855
- APP_ENV: void 0,
63856
- DD_SERVICE: void 0,
63857
- LOGGER_CONSOLE_ENABLED: false,
63858
- LOGGER_STDOUT_ENABLED: false,
63859
- EVENT_LOOP_MONITORING_ENABLED: false,
63860
- MEMORY_MONITORING_ENABLED: false,
63861
- MEMORY_MONITORING_INTERVAL_MS: 3e4,
63862
- NODE_ENV: "test"
63863
- });
63864
-
63865
- // ../hyperline-monitoring/build/logger/logger.js
63866
- import * as util from "node:util";
63867
- import prune2 from "json-prune";
63868
- import * as winston from "winston";
63869
-
63870
64339
  // ../hyperline-monitoring/build/logger/formatting/format.js
63871
- import prune from "json-prune";
63872
64340
  var REDACTED_HEADER_KEY_PATTERN = /authorization|authenticate|cookie|secret|token|credential|signature|jwt|api[_-]?key|access[_-]?token|refresh[_-]?token|private[_-]?key/i;
63873
64341
  function jsonFormat(info) {
63874
64342
  const prunedInfo = JSON.parse(prune(info));
@@ -63929,14 +64397,106 @@ function transformPrune(info) {
63929
64397
  });
63930
64398
  return info;
63931
64399
  }
64400
+ var MAX_AXIOS_ERROR_DEPTH = 5;
64401
+ var MAX_AXIOS_ERROR_CONTAINER_ENTRIES = 1e3;
64402
+ var MAX_AXIOS_ERROR_VISITED_NODES = 5e3;
64403
+ var REDACTED_BODY_KEYS = /* @__PURE__ */ new Set(["requestBody", "responseBody"]);
63932
64404
  function transformAxiosError(info) {
63933
- Object.entries(info).forEach(([key, value]) => {
63934
- if (typeof value === "object" && value?.name === "AxiosError") {
63935
- info[key] = formatAxiosError(value);
64405
+ let walk;
64406
+ for (const [key, value] of Object.entries(info)) {
64407
+ if (typeof value !== "object" || value === null || REDACTED_BODY_KEYS.has(key)) {
64408
+ continue;
63936
64409
  }
63937
- });
64410
+ walk ??= {
64411
+ formatted: /* @__PURE__ */ new Map(),
64412
+ remainingNodes: MAX_AXIOS_ERROR_VISITED_NODES
64413
+ };
64414
+ const formattedValue = formatNestedAxiosErrors({
64415
+ value,
64416
+ depth: MAX_AXIOS_ERROR_DEPTH,
64417
+ walk
64418
+ });
64419
+ if (formattedValue !== value) {
64420
+ info[key] = formattedValue;
64421
+ }
64422
+ }
63938
64423
  return info;
63939
64424
  }
64425
+ function formatNestedAxiosErrors({ value, depth, walk }) {
64426
+ if (typeof value !== "object" || value === null) {
64427
+ return value;
64428
+ }
64429
+ if (walk.formatted.has(value)) {
64430
+ return walk.formatted.get(value);
64431
+ }
64432
+ if (Reflect.get(value, "name") === "AxiosError") {
64433
+ const formattedError = walk.remainingNodes > 0 ? formatAxiosError(value) : summarizeAxiosError({ error: value });
64434
+ walk.remainingNodes -= 1;
64435
+ walk.formatted.set(value, formattedError);
64436
+ return formattedError;
64437
+ }
64438
+ const isWalkable = Array.isArray(value) || value instanceof Error || isPlainRecord(value);
64439
+ if (!isWalkable || depth <= 0 || walk.remainingNodes <= 0) {
64440
+ return value;
64441
+ }
64442
+ walk.formatted.set(value, "[Circular]");
64443
+ walk.remainingNodes -= 1;
64444
+ const formattedValue = formatWalkableValue({ value, depth, walk });
64445
+ walk.formatted.set(value, formattedValue);
64446
+ return formattedValue;
64447
+ }
64448
+ function summarizeAxiosError({ error: error48 }) {
64449
+ return {
64450
+ name: Reflect.get(error48, "name"),
64451
+ message: Reflect.get(error48, "message"),
64452
+ code: Reflect.get(error48, "code")
64453
+ };
64454
+ }
64455
+ function formatWalkableValue({ value, depth, walk }) {
64456
+ if (Array.isArray(value)) {
64457
+ if (value.length > MAX_AXIOS_ERROR_CONTAINER_ENTRIES) {
64458
+ return value;
64459
+ }
64460
+ let formattedItems;
64461
+ for (const [index, item] of value.entries()) {
64462
+ const formattedItem = formatNestedAxiosErrors({
64463
+ value: item,
64464
+ depth: depth - 1,
64465
+ walk
64466
+ });
64467
+ if (formattedItem !== item) {
64468
+ formattedItems ??= [...value];
64469
+ formattedItems[index] = formattedItem;
64470
+ }
64471
+ }
64472
+ return formattedItems ?? value;
64473
+ }
64474
+ const keys = Object.keys(value);
64475
+ if (keys.length > MAX_AXIOS_ERROR_CONTAINER_ENTRIES) {
64476
+ return value;
64477
+ }
64478
+ const formattedEntries = /* @__PURE__ */ new Map();
64479
+ for (const key of keys) {
64480
+ const nestedValue = Reflect.get(value, key);
64481
+ const formattedNestedValue = formatNestedAxiosErrors({
64482
+ value: nestedValue,
64483
+ depth: depth - 1,
64484
+ walk
64485
+ });
64486
+ if (formattedNestedValue !== nestedValue) {
64487
+ formattedEntries.set(key, formattedNestedValue);
64488
+ }
64489
+ }
64490
+ if (formattedEntries.size === 0) {
64491
+ return value;
64492
+ }
64493
+ return {
64494
+ ...value,
64495
+ // Error properties are not enumerable, so the spread would drop them.
64496
+ ...value instanceof Error ? { name: value.name, message: value.message, stack: value.stack } : {},
64497
+ ...Object.fromEntries(formattedEntries)
64498
+ };
64499
+ }
63940
64500
  function formatAxiosError(error48) {
63941
64501
  if (!isRecord(error48) || error48.name !== "AxiosError") {
63942
64502
  return error48;
@@ -63949,9 +64509,9 @@ function formatAxiosError(error48) {
63949
64509
  code: error48.code,
63950
64510
  request: {
63951
64511
  method: request?.method,
63952
- url: request?.url,
64512
+ url: typeof request?.url === "string" ? redactLogUrl({ url: request.url }) : request?.url,
63953
64513
  baseURL: request?.baseURL,
63954
- params: request?.params,
64514
+ params: redactLogBody({ body: request?.params }),
63955
64515
  headers: redactHeaders({ headers: request?.headers }),
63956
64516
  "axios-retry": request?.["axios-retry"]
63957
64517
  },
@@ -63959,7 +64519,7 @@ function formatAxiosError(error48) {
63959
64519
  status: response?.status,
63960
64520
  statusText: response?.statusText,
63961
64521
  headers: redactHeaders({ headers: response?.headers }),
63962
- data: response?.data
64522
+ data: redactLogBody({ body: response?.data })
63963
64523
  }
63964
64524
  };
63965
64525
  }
@@ -63972,6 +64532,10 @@ function redactHeaders({ headers }) {
63972
64532
  REDACTED_HEADER_KEY_PATTERN.test(headerKey) ? "<redacted>" : headerValue
63973
64533
  ]));
63974
64534
  }
64535
+ function isPlainRecord(value) {
64536
+ const prototype = Object.getPrototypeOf(value);
64537
+ return prototype === Object.prototype || prototype === null;
64538
+ }
63975
64539
  function isRecord(value) {
63976
64540
  return typeof value === "object" && value !== null && !Array.isArray(value);
63977
64541
  }
@@ -64001,7 +64565,7 @@ function logHttpResponse(logger2, response, responseTime, extra) {
64001
64565
  const responseMetadata = {
64002
64566
  statusCode,
64003
64567
  responseTime,
64004
- responseBody,
64568
+ responseBody: redactLogBody({ body: responseBody }),
64005
64569
  // Redacted so secrets (authorization/cookie/token/…) never reach the logs
64006
64570
  // while diagnostic headers (e.g. rate-limit headers on a 429) stay visible.
64007
64571
  responseHeaders: responseHeaders === void 0 ? void 0 : redactHeaders({ headers: responseHeaders })
@@ -64014,14 +64578,15 @@ function logHttpResponse(logger2, response, responseTime, extra) {
64014
64578
  }
64015
64579
  function transform2(request) {
64016
64580
  const method = request.method.toUpperCase();
64017
- const message = `${method} ${request.originalUrl}`;
64581
+ const originalUrl = redactLogUrl({ url: request.originalUrl });
64582
+ const message = `${method} ${originalUrl}`;
64018
64583
  const metadata = {};
64019
64584
  metadata.method = method;
64020
- metadata.url = request.url;
64021
- metadata.path = request.path;
64585
+ metadata.url = redactLogUrl({ url: request.url });
64586
+ metadata.path = redactLogUrl({ url: request.path });
64022
64587
  metadata.hostname = request.hostname;
64023
- metadata.originalUrl = request.originalUrl;
64024
- metadata.requestBody = request.body && typeof request.body === "object" && "apiKey" in request.body ? { ...request.body, apiKey: "<redacted>" } : request.body;
64588
+ metadata.originalUrl = originalUrl;
64589
+ metadata.requestBody = redactLogBody({ body: request.body });
64025
64590
  metadata.routePath = transformUrlIntoRoutePath(request);
64026
64591
  metadata.apiKeyEnd = request.headers["authorization"]?.slice(-6);
64027
64592
  return { message, metadata };
@@ -64068,7 +64633,16 @@ function buildLoggerFactory({ config: config4, context }) {
64068
64633
  const internalLogger = winston.createLogger({
64069
64634
  transports: transports2,
64070
64635
  defaultMeta,
64071
- format: winston.format.combine(winston.format.splat(), winston.format(addMetadata({ getCorrelationId, getExecutionContext }))(), winston.format(transformErrorEnrich)({ depth: 5 }), winston.format(transformPrune)(), winston.format(transformAxiosError)(), winston.format.timestamp()),
64636
+ format: winston.format.combine(
64637
+ winston.format.splat(),
64638
+ winston.format(addMetadata({ getCorrelationId, getExecutionContext }))(),
64639
+ // Before pruning: json-prune would otherwise serialize a binary
64640
+ // `response.data` byte by byte before it is summarised (#6006).
64641
+ winston.format(transformAxiosError)(),
64642
+ winston.format(transformErrorEnrich)({ depth: 5 }),
64643
+ winston.format(transformPrune)(),
64644
+ winston.format.timestamp()
64645
+ ),
64072
64646
  exitOnError: false
64073
64647
  });
64074
64648
  function createLogger3({ serviceName }) {
@@ -66415,11 +66989,25 @@ import { deepEqual } from "fast-equals";
66415
66989
 
66416
66990
  // ../hyperline-lib/build/utils/realignDatesToTimezone.js
66417
66991
  var import_shared4 = __toESM(require_shared(), 1);
66418
- var MILLISECONDS_PER_DAY = 24 * 60 * 60 * 1e3;
66992
+ var MILLISECONDS_PER_HOUR = 60 * 60 * 1e3;
66993
+ var MILLISECONDS_PER_DAY = 24 * MILLISECONDS_PER_HOUR;
66419
66994
  var LAST_MILLISECOND_OF_DAY = MILLISECONDS_PER_DAY - 1;
66995
+ var dateRealignmentModeSchema = external_exports.enum([
66996
+ "utc_midnight_import",
66997
+ "dst_hour_drift",
66998
+ "month_start_drift",
66999
+ "manual_phase_end_midnight"
67000
+ ]).default("utc_midnight_import");
67001
+ var DST_HOUR_SHIFT_BY_LOCAL_MILLISECOND_OF_DAY = /* @__PURE__ */ new Map([
67002
+ [23 * MILLISECONDS_PER_HOUR, MILLISECONDS_PER_HOUR],
67003
+ [LAST_MILLISECOND_OF_DAY - MILLISECONDS_PER_HOUR, MILLISECONDS_PER_HOUR],
67004
+ [MILLISECONDS_PER_HOUR, -MILLISECONDS_PER_HOUR],
67005
+ [MILLISECONDS_PER_HOUR - 1, -MILLISECONDS_PER_HOUR]
67006
+ ]);
66420
67007
 
66421
67008
  // ../hyperline-lib/build/utils/api/filterBuilder.js
66422
- var baseAuthorizedOperators = ["not", "isNull", "isNotNull"];
67009
+ var nullAuthorizedOperators = ["isNull", "isNotNull"];
67010
+ var baseAuthorizedOperators = ["not", ...nullAuthorizedOperators];
66423
67011
  var booleanAuthorizedOperators = [
66424
67012
  ...baseAuthorizedOperators,
66425
67013
  "equals"
@@ -66448,6 +67036,7 @@ var authorizedOperators = [
66448
67036
  ...arrayAuthorizedOperators,
66449
67037
  ...mapAuthorizedOperators
66450
67038
  ];
67039
+ var NullFilterValueSchema = BooleanSchema.or(external_exports.literal("")).optional();
66451
67040
 
66452
67041
  // ../hyperline-lib/build/http/dto/state.js
66453
67042
  var StateSchema = external_exports.enum(usStates).openapi({
@@ -66485,150 +67074,6 @@ var isAxiosError = axios.isAxiosError;
66485
67074
  // ../hyperline-lib/build/httpClient/httpClient.js
66486
67075
  import axios2 from "axios";
66487
67076
  import axiosRetry, { isNetworkOrIdempotentRequestError, retryAfter } from "axios-retry";
66488
-
66489
- // ../hyperline-lib/build/httpClient/logRedaction.js
66490
- var REDACTED_KEY_NAMES = /* @__PURE__ */ new Set([
66491
- "accesstoken",
66492
- "apikey",
66493
- "apitoken",
66494
- "assertion",
66495
- "authtoken",
66496
- "clientassertion",
66497
- "codeverifier",
66498
- "credentials",
66499
- "idtoken",
66500
- "privatekey",
66501
- "refreshtoken",
66502
- "sessiontoken",
66503
- "token"
66504
- ]);
66505
- var REDACTED_KEY_SUFFIX_PATTERN = /(secret|password)$/;
66506
- var REDACTED_KEY_CANDIDATE_PATTERN = /token|key|secret|password|assertion|verifier|credentials/i;
66507
- var REDACTED_VALUE = "<redacted>";
66508
- var MAX_REDACTION_DEPTH = 10;
66509
- var MAX_PARSED_STRING_LENGTH = 16384;
66510
- var MAX_VISITED_NODES = 1e3;
66511
- var MAX_CONTAINER_ENTRIES = MAX_VISITED_NODES;
66512
- function redactLogBody({ body }) {
66513
- return redactValue({
66514
- value: body,
66515
- depth: MAX_REDACTION_DEPTH,
66516
- budget: { remainingNodes: MAX_VISITED_NODES }
66517
- });
66518
- }
66519
- function redactLogUrl({ url: url2 }) {
66520
- const queryIndex = url2.indexOf("?");
66521
- if (queryIndex === -1 || url2.length > MAX_PARSED_STRING_LENGTH) {
66522
- return url2;
66523
- }
66524
- const redactedQuery = redactFormEncoded({ text: url2.slice(queryIndex + 1) });
66525
- return redactedQuery === void 0 ? url2 : `${url2.slice(0, queryIndex)}?${redactedQuery}`;
66526
- }
66527
- function redactValue({ value, depth, budget }) {
66528
- if (depth <= 0 || budget.remainingNodes <= 0) {
66529
- return value;
66530
- }
66531
- budget.remainingNodes -= 1;
66532
- if (typeof value === "string") {
66533
- return redactString({ text: value, budget });
66534
- }
66535
- if (value instanceof URLSearchParams) {
66536
- return redactFormEncoded({ text: value.toString() }) ?? value;
66537
- }
66538
- if (Array.isArray(value)) {
66539
- return redactArray({ items: value, depth, budget });
66540
- }
66541
- if (isPlainObject2(value)) {
66542
- return redactObject({ record: value, depth, budget });
66543
- }
66544
- return value;
66545
- }
66546
- function redactArray({ items, depth, budget }) {
66547
- if (items.length > MAX_CONTAINER_ENTRIES) {
66548
- return items;
66549
- }
66550
- let redactedItems;
66551
- for (const [index, item] of items.entries()) {
66552
- if (budget.remainingNodes <= 0) {
66553
- break;
66554
- }
66555
- const redactedItem = redactValue({ value: item, depth: depth - 1, budget });
66556
- if (redactedItem !== item) {
66557
- redactedItems ??= [...items];
66558
- redactedItems[index] = redactedItem;
66559
- }
66560
- }
66561
- return redactedItems ?? items;
66562
- }
66563
- function redactObject({ record: record2, depth, budget }) {
66564
- const redactedEntries = /* @__PURE__ */ new Map();
66565
- let entryCount = 0;
66566
- for (const key in record2) {
66567
- if (!Object.hasOwn(record2, key)) {
66568
- continue;
66569
- }
66570
- entryCount += 1;
66571
- if (entryCount > MAX_CONTAINER_ENTRIES) {
66572
- return record2;
66573
- }
66574
- if (budget.remainingNodes <= 0) {
66575
- break;
66576
- }
66577
- const nestedValue = record2[key];
66578
- const redactedNestedValue = isRedactedKey({ key }) && nestedValue != null ? REDACTED_VALUE : redactValue({ value: nestedValue, depth: depth - 1, budget });
66579
- if (redactedNestedValue !== nestedValue) {
66580
- redactedEntries.set(key, redactedNestedValue);
66581
- }
66582
- }
66583
- return redactedEntries.size === 0 ? record2 : { ...record2, ...Object.fromEntries(redactedEntries) };
66584
- }
66585
- function redactString({ text, budget }) {
66586
- if (text.length > MAX_PARSED_STRING_LENGTH) {
66587
- return text;
66588
- }
66589
- const trimmedText = text.trim();
66590
- if (trimmedText.startsWith("{") || trimmedText.startsWith("[")) {
66591
- try {
66592
- const parsedValue = JSON.parse(trimmedText);
66593
- const redactedValue = redactValue({
66594
- value: parsedValue,
66595
- depth: MAX_REDACTION_DEPTH,
66596
- budget
66597
- });
66598
- return redactedValue === parsedValue ? text : JSON.stringify(redactedValue);
66599
- } catch {
66600
- return text;
66601
- }
66602
- }
66603
- return redactFormEncoded({ text }) ?? text;
66604
- }
66605
- function redactFormEncoded({ text }) {
66606
- if (!text.includes("=") || !REDACTED_KEY_CANDIDATE_PATTERN.test(text)) {
66607
- return void 0;
66608
- }
66609
- const params = new URLSearchParams(text);
66610
- let hasRedactedParam = false;
66611
- for (const key of new Set(params.keys())) {
66612
- if (isRedactedKey({ key })) {
66613
- params.set(key, REDACTED_VALUE);
66614
- hasRedactedParam = true;
66615
- }
66616
- }
66617
- return hasRedactedParam ? params.toString() : void 0;
66618
- }
66619
- function isRedactedKey({ key }) {
66620
- const normalizedKey = key.toLowerCase().replace(/[_-]/g, "");
66621
- return REDACTED_KEY_NAMES.has(normalizedKey) || REDACTED_KEY_SUFFIX_PATTERN.test(normalizedKey);
66622
- }
66623
- function isPlainObject2(value) {
66624
- if (typeof value !== "object" || value === null) {
66625
- return false;
66626
- }
66627
- const prototype = Object.getPrototypeOf(value);
66628
- return prototype === Object.prototype || prototype === null;
66629
- }
66630
-
66631
- // ../hyperline-lib/build/httpClient/httpClient.js
66632
67077
  import { AxiosError } from "axios";
66633
67078
  var recommendedRetryConfig = {
66634
67079
  retries: 3,
@@ -66696,14 +67141,14 @@ function isTooManyRequestsError(error48) {
66696
67141
  return error48.response?.status === 429;
66697
67142
  }
66698
67143
  var toLogRequest = (config4) => {
66699
- const url2 = redactLogUrl({ url: config4.url ?? "" });
67144
+ const url2 = config4.url ?? "";
66700
67145
  return {
66701
67146
  method: config4.method ?? "",
66702
67147
  url: url2,
66703
67148
  path: url2,
66704
67149
  hostname: config4.baseURL ?? "",
66705
67150
  originalUrl: `${config4.baseURL ?? ""}${url2}`,
66706
- body: redactLogBody({ body: config4.data }),
67151
+ body: config4.data,
66707
67152
  headers: {}
66708
67153
  };
66709
67154
  };
@@ -66723,9 +67168,13 @@ import multer2 from "multer";
66723
67168
  // ../hyperline-lib/build/httpRouter/file.js
66724
67169
  import helmet from "helmet";
66725
67170
 
66726
- // ../hyperline-lib/build/publicApi/auth/index.js
67171
+ // ../hyperline-lib/build/publicApi/auth/apiKey.js
66727
67172
  import { randomBytes as randomBytes2, scryptSync } from "node:crypto";
66728
67173
 
67174
+ // ../hyperline-lib/build/publicApi/auth/apiKeyHashCache.js
67175
+ import { createHash as createHash4 } from "node:crypto";
67176
+ var TTL_MS = 5 * 6e4;
67177
+
66729
67178
  // ../hyperline-mcp/build/requestBuilder.js
66730
67179
  function buildRequestConfig(path2, args, method, queryParamKeys = []) {
66731
67180
  const { url: url2, usedKeys } = replacePathParams(path2, args);