@hyperline/cli 0.1.0-build.1.6d94297 → 0.1.0-build.1.6def1d3

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_zod23 = require_lib();
34988
+ var import_zod24 = require_lib();
34989
34989
  var countryIds2 = ["all", ...countries.map(({ id }) => id)];
34990
- var ZodId = import_zod23.z.enum(countryIds2);
34991
- var ZodTranslationsSchemaFn = (schema) => import_zod23.z.record(import_zod23.z.string(), schema.optional());
34990
+ var ZodId = import_zod24.z.enum(countryIds2);
34991
+ var ZodTranslationsSchemaFn = (schema) => import_zod24.z.record(import_zod24.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_zod24 = require_lib();
36291
- var ZodCurrencyId = import_zod24.z.enum(
36290
+ var import_zod25 = require_lib();
36291
+ var ZodCurrencyId = import_zod25.z.enum(
36292
36292
  all_default.map(({ id }) => id)
36293
36293
  );
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(
36294
+ var ZodNumberCurrency = import_zod25.z.string().or(import_zod25.z.number().transform((number4) => number4)).transform((number4) => number4);
36295
+ var ZodNumberCurrencyPositiveValue = import_zod25.z.number().min(0).transform((number4) => number4).transform((number4) => number4);
36296
+ var ZodNumberCurrencyPositiveValueExcludingZero = import_zod25.z.number().gt(0).transform((number4) => number4).transform((number4) => number4);
36297
+ var ZodCurrencyMap = import_zod25.z.record(ZodNumberCurrency).refine(
36298
36298
  (data) => Object.keys(data).every((key) => ZodCurrencyId.safeParse(key).success),
36299
36299
  {
36300
36300
  message: "Invalid currency key.",
@@ -38165,7 +38165,7 @@ Examples:
38165
38165
  // build/commands/generated/accounting-journal-entries.js
38166
38166
  function registerAccounting_Journal_EntriesCommands(parent) {
38167
38167
  const resource = parent.command("accounting-journal-entries").description("Manage accounting > journal entries");
38168
- resource.command("list-journal-entries").description(`List accounting journal entries with optional filters.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--entry-number <value>", `Filter by journal entry number.`).option("--status <value>", `Filter by journal entry status.`).option("--origin <value>", `Filter by automatic or manual origin.`).option("--ledger-id <value>", `Filter by ledger identifier.`).option("--invoicing-entity-id <value>", `Filter by invoicing entity identifier.`).option("--invoice-id <value>", `Filter by invoice identifier.`).option("--customer-id <value>", `Filter by customer identifier.`).option("--subscription-id <value>", `Filter by subscription identifier.`).option("--transaction-id <value>", `Filter by transaction identifier.`).option("--ledger-account-id <value>", `Filter entries containing a ledger account.`).option("--rule-id <value>", `Filter entries containing an accounting rule.`).option("--search <value>", `Search entry number, description, customer, or invoice.`).option("--year <number>", `Filter by entry year.`).option("--quarter <number>", `Filter by entry quarter.`).addHelpText("after", `
38168
+ resource.command("list-journal-entries").description(`List accounting journal entries with optional filters.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--entry-number <value>", `Filter by journal entry number.`).option("--status <value>", `Filter by journal entry status.`).option("--origin <value>", `Filter by automatic or manual origin.`).option("--ledger-id <value>", `Filter by ledger identifier.`).option("--invoicing-entity-id <value>", `Filter by invoicing entity identifier.`).option("--invoice-id <value>", `Filter by invoice identifier.`).option("--customer-id <value>", `Filter by customer identifier.`).option("--subscription-id <value>", `Filter by subscription identifier.`).option("--transaction-id <value>", `Filter by transaction identifier.`).option("--ledger-account-id <value>", `Filter entries containing a ledger account.`).option("--rule-id <value>", `Filter entries containing an accounting rule.`).option("--search <value>", `Search entry number, description, amount, invoice number or ID, customer name or ID, or subscription ID.`).option("--year <number>", `Filter by entry year.`).option("--quarter <number>", `Filter by entry quarter.`).addHelpText("after", `
38169
38169
  Examples:
38170
38170
  hyperline accounting-journal-entries list-journal-entries
38171
38171
  hyperline accounting-journal-entries list-journal-entries --take <take> --entry-number <entry_number>`).action(async (opts) => {
@@ -38409,9 +38409,10 @@ Examples:
38409
38409
  queryParamKeys: ["invoicing_entity_id"]
38410
38410
  });
38411
38411
  });
38412
- resource.command("create-ledger").description(`Create an accounting ledger for an invoicing entity.`).requiredOption("--invoicing-entity-id <value>", `Identifier of the invoicing entity that owns the ledger.`).requiredOption("--name <value>", `Display name of the ledger.`).requiredOption("--code <value>", `Optional accounting code of the ledger.`).requiredOption("--description <value>", `Optional description of the ledger.`).requiredOption("--type <value>", `Type of ledger.`).requiredOption("--currency <value>", `ISO 4217 currency used by the ledger.`).requiredOption("--entry-number-pattern <value>", `Entry numbering pattern containing \`{number}\`.`).requiredOption("--is-primary", `Whether this is the primary ledger for the invoicing entity.`).requiredOption("--is-inactive", `Whether the ledger is inactive.`).addHelpText("after", `
38412
+ resource.command("create-ledger").description(`Create an accounting ledger for an invoicing entity.`).requiredOption("--invoicing-entity-id <value>", `Identifier of the invoicing entity that owns the ledger.`).requiredOption("--name <value>", `Display name of the ledger.`).requiredOption("--code <value>", `Optional accounting code of the ledger.`).requiredOption("--description <value>", `Optional description of the ledger.`).requiredOption("--type <value>", `Type of ledger.`).requiredOption("--currency <value>", `ISO 4217 currency used by the ledger.`).option("--fiscal-year-end-month <number>", `Last month of the ledger's fiscal year, from 1 (January) to 12 (December). Reports split profit between past fiscal years and the current one from it. Defaults to 12. It cannot be changed after creation.`).requiredOption("--entry-number-pattern <value>", `Entry numbering pattern containing \`{number}\`.`).requiredOption("--is-primary", `Whether this is the primary ledger for the invoicing entity.`).requiredOption("--is-inactive", `Whether the ledger is inactive.`).addHelpText("after", `
38413
38413
  Examples:
38414
38414
  hyperline accounting-ledgers create-ledger --invoicing-entity-id <invoicing_entity_id> --name <name> --code <code> --description <description> --type <type> --currency <currency> --entry-number-pattern <entry_number_pattern> --is-primary --is-inactive
38415
+ hyperline accounting-ledgers create-ledger --invoicing-entity-id <invoicing_entity_id> --name <name> --code <code> --description <description> --type <type> --currency <currency> --entry-number-pattern <entry_number_pattern> --is-primary --is-inactive --fiscal-year-end-month <fiscal_year_end_month>
38415
38416
  hyperline accounting-ledgers create-ledger --invoicing-entity-id <invoicing_entity_id> --name <name> --code <code> --description <description> --type <type> --currency <currency> --entry-number-pattern <entry_number_pattern> --is-primary --is-inactive --output json`).action(async (opts) => {
38416
38417
  const ctx = resource.parent?.opts()._ctx;
38417
38418
  if (!ctx) {
@@ -38433,6 +38434,8 @@ Examples:
38433
38434
  args.currency = opts.currency;
38434
38435
  if (opts.entryNumberPattern !== void 0)
38435
38436
  args.entry_number_pattern = opts.entryNumberPattern;
38437
+ if (opts.fiscalYearEndMonth !== void 0)
38438
+ args.fiscal_year_end_month = Number(opts.fiscalYearEndMonth);
38436
38439
  if (opts.isPrimary !== void 0)
38437
38440
  args.is_primary = true;
38438
38441
  if (opts.isInactive !== void 0)
@@ -38504,6 +38507,94 @@ Examples:
38504
38507
  queryParamKeys: []
38505
38508
  });
38506
38509
  });
38510
+ resource.command("get-ledger-close-state").description(`Retrieve the last closed month of a ledger and the latest month that can be closed.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
38511
+ Examples:
38512
+ hyperline accounting-ledgers get-ledger-close-state --id <id>`).action(async (opts) => {
38513
+ const ctx = resource.parent?.opts()._ctx;
38514
+ if (!ctx) {
38515
+ process.stderr.write("Error: Not authenticated\n");
38516
+ process.exit(1);
38517
+ }
38518
+ const args = {};
38519
+ if (opts.id !== void 0)
38520
+ args.id = opts.id;
38521
+ await ctx.execute({
38522
+ method: "GET",
38523
+ path: "/v1/accounting/ledgers/{id}/close",
38524
+ args,
38525
+ queryParamKeys: []
38526
+ });
38527
+ });
38528
+ resource.command("list-ledger-close-events").description(`List the closes and reopens of a ledger, newest first, with who did them and why.`).requiredOption("--id <value>", `id parameter`).option("--take <number>", `take`).option("--skip <number>", `skip`).addHelpText("after", `
38529
+ Examples:
38530
+ hyperline accounting-ledgers list-ledger-close-events --id <id>
38531
+ hyperline accounting-ledgers list-ledger-close-events --id <id> --take <take>`).action(async (opts) => {
38532
+ const ctx = resource.parent?.opts()._ctx;
38533
+ if (!ctx) {
38534
+ process.stderr.write("Error: Not authenticated\n");
38535
+ process.exit(1);
38536
+ }
38537
+ const args = {};
38538
+ if (opts.id !== void 0)
38539
+ args.id = opts.id;
38540
+ if (opts.take !== void 0)
38541
+ args.take = Number(opts.take);
38542
+ if (opts.skip !== void 0)
38543
+ args.skip = Number(opts.skip);
38544
+ await ctx.execute({
38545
+ method: "GET",
38546
+ path: "/v1/accounting/ledgers/{id}/close-events",
38547
+ args,
38548
+ queryParamKeys: ["take", "skip"]
38549
+ });
38550
+ });
38551
+ resource.command("close-ledger-period").description(`Close every month of a ledger through an ended month, after posting the revenue recognition due by its end; a user token needs the accounting_close permission.`).requiredOption("--id <value>", `id parameter`).requiredOption("--through-month <value>", `Last month to close, formatted YYYY-MM: an ended month after the last closed month. Every earlier month is closed too.`).option("--reason <value>", `Why the months are closed, 1 to 500 characters.`).addHelpText("after", `
38552
+ Examples:
38553
+ hyperline accounting-ledgers close-ledger-period --id <id> --through-month <through_month>
38554
+ hyperline accounting-ledgers close-ledger-period --id <id> --through-month <through_month> --reason <reason>
38555
+ hyperline accounting-ledgers close-ledger-period --id <id> --through-month <through_month> --output json`).action(async (opts) => {
38556
+ const ctx = resource.parent?.opts()._ctx;
38557
+ if (!ctx) {
38558
+ process.stderr.write("Error: Not authenticated\n");
38559
+ process.exit(1);
38560
+ }
38561
+ const args = {};
38562
+ if (opts.id !== void 0)
38563
+ args.id = opts.id;
38564
+ if (opts.throughMonth !== void 0)
38565
+ args.through_month = opts.throughMonth;
38566
+ if (opts.reason !== void 0)
38567
+ args.reason = opts.reason;
38568
+ await ctx.execute({
38569
+ method: "POST",
38570
+ path: "/v1/accounting/ledgers/{id}/close",
38571
+ args,
38572
+ queryParamKeys: []
38573
+ });
38574
+ });
38575
+ resource.command("reopen-ledger-period").description(`Reopen a closed month of a ledger and every later month, with a mandatory reason; a user token needs the accounting_close permission.`).requiredOption("--id <value>", `id parameter`).requiredOption("--from-month <value>", `First month to reopen, formatted YYYY-MM: a closed month. Every later month is reopened too.`).requiredOption("--reason <value>", `Why the months are reopened, 1 to 500 characters.`).addHelpText("after", `
38576
+ Examples:
38577
+ hyperline accounting-ledgers reopen-ledger-period --id <id> --from-month <from_month> --reason <reason>
38578
+ hyperline accounting-ledgers reopen-ledger-period --id <id> --from-month <from_month> --reason <reason> --output json`).action(async (opts) => {
38579
+ const ctx = resource.parent?.opts()._ctx;
38580
+ if (!ctx) {
38581
+ process.stderr.write("Error: Not authenticated\n");
38582
+ process.exit(1);
38583
+ }
38584
+ const args = {};
38585
+ if (opts.id !== void 0)
38586
+ args.id = opts.id;
38587
+ if (opts.fromMonth !== void 0)
38588
+ args.from_month = opts.fromMonth;
38589
+ if (opts.reason !== void 0)
38590
+ args.reason = opts.reason;
38591
+ await ctx.execute({
38592
+ method: "POST",
38593
+ path: "/v1/accounting/ledgers/{id}/reopen",
38594
+ args,
38595
+ queryParamKeys: []
38596
+ });
38597
+ });
38507
38598
  }
38508
38599
 
38509
38600
  // build/commands/generated/accounting-reports.js
@@ -38864,7 +38955,7 @@ Examples:
38864
38955
  // build/commands/generated/accounting-rules.js
38865
38956
  function registerAccounting_RulesCommands(parent) {
38866
38957
  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", `
38958
+ 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
38959
  Examples:
38869
38960
  hyperline accounting-rules list
38870
38961
  hyperline accounting-rules list --take <take> --ledger-id <ledger_id>`).action(async (opts) => {
@@ -38878,10 +38969,6 @@ Examples:
38878
38969
  args.ledger_id = opts.ledgerId;
38879
38970
  if (opts["ledgerId.not"] !== void 0)
38880
38971
  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
38972
  if (opts["ledgerId.equals"] !== void 0)
38886
38973
  args.ledger_id__equals = opts["ledgerId.equals"];
38887
38974
  if (opts["ledgerId.contains"] !== void 0)
@@ -38894,10 +38981,6 @@ Examples:
38894
38981
  args.category = opts.category;
38895
38982
  if (opts["category.not"] !== void 0)
38896
38983
  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
38984
  if (opts["category.equals"] !== void 0)
38902
38985
  args.category__equals = opts["category.equals"];
38903
38986
  if (opts["category.contains"] !== void 0)
@@ -38919,16 +39002,12 @@ Examples:
38919
39002
  "skip",
38920
39003
  "ledger_id",
38921
39004
  "ledger_id__not",
38922
- "ledger_id__isNull",
38923
- "ledger_id__isNotNull",
38924
39005
  "ledger_id__equals",
38925
39006
  "ledger_id__contains",
38926
39007
  "ledger_id__startsWith",
38927
39008
  "ledger_id__endWith",
38928
39009
  "category",
38929
39010
  "category__not",
38930
- "category__isNull",
38931
- "category__isNotNull",
38932
39011
  "category__equals",
38933
39012
  "category__contains",
38934
39013
  "category__startsWith",
@@ -39008,7 +39087,7 @@ Examples:
39008
39087
  queryParamKeys: []
39009
39088
  });
39010
39089
  });
39011
- resource.command("create").description(`Create a new accounting rule for account code routing or journal posting, with the filters, accounts and required fields the rule editor applies to its category.`).option("--ledger-id <value>", `Identifier of the ledger this rule belongs to.`).option("--name <value>", `Optional user-defined name for the rule.`).requiredOption("--category <value>", `Rule category (e.g. accounting_software, invoice_posted).`).requiredOption("--priority <number>", `Override order. Higher priority wins when multiple rules match.`).option("--product-ids <json>", `Product IDs to match. Empty means match all.`).option("--product-types <json>", `Product types to match. Allowed values: flat_fee, dynamic, seat, credit. Empty means match all.`).option("--customer-ids <json>", `Customer IDs for customer-specific overrides.`).option("--currencies <json>", `Currency codes to match (e.g. EUR, USD).`).option("--countries <json>", `Country codes for jurisdiction-based overrides.`).option("--tax-schemes <json>", `Tax schemes to match. A context without a tax scheme never matches a rule that sets this filter. Empty means match all.`).option("--tax-territories <json>", `Tax territory country codes to match. A context without a tax territory never matches a rule that sets this filter. Empty means match all.`).option("--tax-rate-classes <json>", `Tax rate classes to match. A context without a tax rate class never matches a rule that sets this filter. Empty means match all.`).option("--coupon-ids <json>", `Coupon IDs to match. Empty means match all.`).option("--client-provider-ids <json>", `Client provider IDs to match. Empty means match all.`).option("--payment-method-types <json>", `Payment method types to match. Empty means match all.`).option("--bank-account-ids <json>", `Bank account IDs to match. Empty means match all.`).option("--invoice-types <json>", `Invoice kinds to match: \`invoice\` or \`document\`. Refunds and other standard invoices match as \`invoice\`. A context without an invoice, such as a PSP payout, never matches a rule that sets this filter. Empty means match all.`).option("--interval-period <value>", `Billing interval period filter (months, years, etc.).`).option("--interval-count <number>", `Billing interval count filter.`).option("--custom-property-filters <json>", `Invoice custom property filters. A rule matches only when every entry matches (AND across entries), and an entry matches when the invoice value is one of its \`values\` (any-of). Matching is strict: an invoice without a value for the property never matches. Each entry adds 10 to the \`suggested_priority\` returned by the rule defaults endpoint. Allowed on invoice_posted, invoice_settled, revenue_recognition, credit_note_created and accounting_software (invoice side) rules. An invoice_settled rule with filters cannot set \`payments_clearing_ledger_account_id\`, as PSP payouts are booked without the invoice. Empty means match all.`).option("--revenue-ledger-account-id <value>", `Revenue ledger account ID used for invoice line revenue routing. Must be a \`revenue\` account. On accounting_software rules, a \`revenue\` or \`contra_revenue\` account with entity_type invoice, an \`asset\` or \`contra_asset\` account with entity_type payment.`).option("--deferred-revenue-ledger-account-id <value>", `Deferred revenue ledger account ID used before revenue is recognized. Must be a \`liability\` account.`).option("--deferred-discount-ledger-account-id <value>", `Deferred discount ledger account ID used before discounts are recognized. Must be an \`asset\` or \`contra_liability\` account.`).option("--contra-revenue-ledger-account-id <value>", `Contra revenue ledger account ID used for amounts that reduce revenue. Must be a \`contra_revenue\` account.`).option("--discount-ledger-account-id <value>", `Discount ledger account ID used for recognized discounts. Must be a \`contra_revenue\` account.`).option("--ar-ledger-account-id <value>", `Accounts receivable ledger account ID used for invoice posting. Must be an \`asset\` account.`).option("--cash-ledger-account-id <value>", `Cash ledger account ID used for payment settlement. Must be an \`asset\` account.`).option("--payments-clearing-ledger-account-id <value>", `Payments clearing ledger account ID used while payments settle. Must be an \`asset\` account.`).option("--output-tax-ledger-account-id <value>", `Output tax ledger account ID used for tax liability. Must be a \`liability\` account.`).option("--uncollectible-debit-ledger-account-id <value>", `Ledger account ID debited when an invoice becomes uncollectible. Must be an \`asset\` account, for doubtful-receivable reclassification, or an \`expense\` account, for direct write-off.`).option("--allowance-for-doubtful-accounts-id <value>", `Allowance for doubtful accounts ledger account ID, set on credit_note_created rules. Must be a \`contra_asset\` account.`).option("--provider-fees-expense-ledger-account-id <value>", `Expense ledger account ID debited for payment provider fees when a payment settles. Must be an \`expense\` account.`).option("--payment-processing-fees-expense-ledger-account-id <value>", `Expense ledger account ID debited for payment processing fees when a payment settles. Takes precedence over \`provider_fees_expense_ledger_account_id\` when set by the same or a higher priority rule. Must be an \`expense\` account.`).option("--payment-processing-fees-revenue-ledger-account-id <value>", `Payment processing fees revenue ledger account ID, set on invoice_settled rules. Must be a \`revenue\` account.`).option("--customer-credits-ledger-account-id <value>", `Customer credits ledger account ID used for credit balances. Must be a \`liability\` account.`).option("--rev-rec-method <value>", `Revenue recognition method.`).option("--rev-rec-granularity <value>", `Recognition period granularity. Used when \`rev_rec_method\` is \`over_time\`.`).option("--rev-rec-point-in-time-basis <value>", `Date revenue is recognized on. Used when \`rev_rec_method\` is \`point_in_time\`.`).option("--discount-recognition-method <value>", `Method used to recognize discounts.`).option("--journal-id <value>", `Journal ID used to route entries in the accounting provider.`).option("--entity-type <value>", `Entity type the rule applies to.`).addHelpText("after", `
39090
+ 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.). \`recurring\` matches every interval except \`once\` and requires a null \`interval_count\`. \`null\` matches every interval, including \`once\`.`).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
39091
  Examples:
39013
39092
  hyperline accounting-rules create --category <category> --priority <priority>
39014
39093
  hyperline accounting-rules create --category <category> --priority <priority> --ledger-id <ledger_id> --name <name>
@@ -39108,7 +39187,7 @@ Examples:
39108
39187
  queryParamKeys: []
39109
39188
  });
39110
39189
  });
39111
- resource.command("update").description(`Update an existing accounting rule, with the filters, accounts and required fields the rule editor applies to its category.`).requiredOption("--id <value>", `id parameter`).option("--name <value>", `Optional user-defined name for the rule.`).option("--category <value>", `Rule category. Cannot be changed after creation, must match the current category when sent.`).option("--priority <number>", `Override order. Higher priority wins when multiple rules match.`).option("--product-ids <json>", `Product IDs to match. Empty means match all.`).option("--product-types <json>", `Product types to match. Allowed values: flat_fee, dynamic, seat, credit. Empty means match all.`).option("--customer-ids <json>", `Customer IDs for customer-specific overrides.`).option("--currencies <json>", `Currency codes to match (e.g. EUR, USD).`).option("--countries <json>", `Country codes for jurisdiction-based overrides.`).option("--tax-schemes <json>", `Tax schemes to match. A context without a tax scheme never matches a rule that sets this filter. Empty means match all.`).option("--tax-territories <json>", `Tax territory country codes to match. A context without a tax territory never matches a rule that sets this filter. Empty means match all.`).option("--tax-rate-classes <json>", `Tax rate classes to match. A context without a tax rate class never matches a rule that sets this filter. Empty means match all.`).option("--coupon-ids <json>", `Coupon IDs to match. Empty means match all.`).option("--client-provider-ids <json>", `Client provider IDs to match. Empty means match all.`).option("--payment-method-types <json>", `Payment method types to match. Empty means match all.`).option("--bank-account-ids <json>", `Bank account IDs to match. Empty means match all.`).option("--invoice-types <json>", `Invoice kinds to match: \`invoice\` or \`document\`. Refunds and other standard invoices match as \`invoice\`. A context without an invoice, such as a PSP payout, never matches a rule that sets this filter. Empty means match all.`).option("--interval-period <value>", `Billing interval period filter (months, years, etc.).`).option("--interval-count <number>", `Billing interval count filter.`).option("--custom-property-filters <json>", `Invoice custom property filters. A rule matches only when every entry matches (AND across entries), and an entry matches when the invoice value is one of its \`values\` (any-of). Matching is strict: an invoice without a value for the property never matches. Each entry adds 10 to the \`suggested_priority\` returned by the rule defaults endpoint. Allowed on invoice_posted, invoice_settled, revenue_recognition, credit_note_created and accounting_software (invoice side) rules. An invoice_settled rule with filters cannot set \`payments_clearing_ledger_account_id\`, as PSP payouts are booked without the invoice. Empty means match all.`).option("--revenue-ledger-account-id <value>", `Revenue ledger account ID used for invoice line revenue routing. Must be a \`revenue\` account. On accounting_software rules, a \`revenue\` or \`contra_revenue\` account with entity_type invoice, an \`asset\` or \`contra_asset\` account with entity_type payment.`).option("--deferred-revenue-ledger-account-id <value>", `Deferred revenue ledger account ID used before revenue is recognized. Must be a \`liability\` account.`).option("--deferred-discount-ledger-account-id <value>", `Deferred discount ledger account ID used before discounts are recognized. Must be an \`asset\` or \`contra_liability\` account.`).option("--contra-revenue-ledger-account-id <value>", `Contra revenue ledger account ID used for amounts that reduce revenue. Must be a \`contra_revenue\` account.`).option("--discount-ledger-account-id <value>", `Discount ledger account ID used for recognized discounts. Must be a \`contra_revenue\` account.`).option("--ar-ledger-account-id <value>", `Accounts receivable ledger account ID used for invoice posting. Must be an \`asset\` account.`).option("--cash-ledger-account-id <value>", `Cash ledger account ID used for payment settlement. Must be an \`asset\` account.`).option("--payments-clearing-ledger-account-id <value>", `Payments clearing ledger account ID used while payments settle. Must be an \`asset\` account.`).option("--output-tax-ledger-account-id <value>", `Output tax ledger account ID used for tax liability. Must be a \`liability\` account.`).option("--uncollectible-debit-ledger-account-id <value>", `Ledger account ID debited when an invoice becomes uncollectible. Must be an \`asset\` account, for doubtful-receivable reclassification, or an \`expense\` account, for direct write-off.`).option("--allowance-for-doubtful-accounts-id <value>", `Allowance for doubtful accounts ledger account ID, set on credit_note_created rules. Must be a \`contra_asset\` account.`).option("--provider-fees-expense-ledger-account-id <value>", `Expense ledger account ID debited for payment provider fees when a payment settles. Must be an \`expense\` account.`).option("--payment-processing-fees-expense-ledger-account-id <value>", `Expense ledger account ID debited for payment processing fees when a payment settles. Takes precedence over \`provider_fees_expense_ledger_account_id\` when set by the same or a higher priority rule. Must be an \`expense\` account.`).option("--payment-processing-fees-revenue-ledger-account-id <value>", `Payment processing fees revenue ledger account ID, set on invoice_settled rules. Must be a \`revenue\` account.`).option("--customer-credits-ledger-account-id <value>", `Customer credits ledger account ID used for credit balances. Must be a \`liability\` account.`).option("--rev-rec-method <value>", `Revenue recognition method.`).option("--rev-rec-granularity <value>", `Recognition period granularity. Used when \`rev_rec_method\` is \`over_time\`.`).option("--rev-rec-point-in-time-basis <value>", `Date revenue is recognized on. Used when \`rev_rec_method\` is \`point_in_time\`.`).option("--discount-recognition-method <value>", `Method used to recognize discounts.`).option("--journal-id <value>", `Journal ID used to route entries in the accounting provider.`).option("--entity-type <value>", `Entity type the rule applies to.`).addHelpText("after", `
39190
+ 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.). \`recurring\` matches every interval except \`once\` and requires a null \`interval_count\`. \`null\` matches every interval, including \`once\`.`).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
39191
  Examples:
39113
39192
  hyperline accounting-rules update --id <id>
39114
39193
  hyperline accounting-rules update --id <id> --name <name> --category <category>
@@ -40594,6 +40673,52 @@ Examples:
40594
40673
  });
40595
40674
  }
40596
40675
 
40676
+ // build/commands/generated/approval-workflows.js
40677
+ function registerApproval_WorkflowsCommands(parent) {
40678
+ const resource = parent.command("approval-workflows").description("Manage approval workflows");
40679
+ resource.command("list").description(`List approval workflows with their steps and approvers. Those whose \`applicable_flows\` include \`workflow_step\` can be picked as the \`approvalWorkflowId\` of a workflow's Request approval step (\`hyperline.request_approval\`). Filter with \`is_active\`; paginated with take/skip.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--is-active <value>", `Only return workflows matching this active state.`).addHelpText("after", `
40680
+ Examples:
40681
+ hyperline approval-workflows list
40682
+ hyperline approval-workflows list --take <take> --is-active <is_active>`).action(async (opts) => {
40683
+ const ctx = resource.parent?.opts()._ctx;
40684
+ if (!ctx) {
40685
+ process.stderr.write("Error: Not authenticated\n");
40686
+ process.exit(1);
40687
+ }
40688
+ const args = {};
40689
+ if (opts.isActive !== void 0)
40690
+ args.is_active = opts.isActive;
40691
+ if (opts.take !== void 0)
40692
+ args.take = Number(opts.take);
40693
+ if (opts.skip !== void 0)
40694
+ args.skip = Number(opts.skip);
40695
+ await ctx.execute({
40696
+ method: "GET",
40697
+ path: "/v1/approvals/workflows",
40698
+ args,
40699
+ queryParamKeys: ["take", "skip", "is_active"]
40700
+ });
40701
+ });
40702
+ resource.command("get").description(`Retrieve a single approval workflow.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
40703
+ Examples:
40704
+ hyperline approval-workflows get --id <id>`).action(async (opts) => {
40705
+ const ctx = resource.parent?.opts()._ctx;
40706
+ if (!ctx) {
40707
+ process.stderr.write("Error: Not authenticated\n");
40708
+ process.exit(1);
40709
+ }
40710
+ const args = {};
40711
+ if (opts.id !== void 0)
40712
+ args.id = opts.id;
40713
+ await ctx.execute({
40714
+ method: "GET",
40715
+ path: "/v1/approvals/workflows/{id}",
40716
+ args,
40717
+ queryParamKeys: []
40718
+ });
40719
+ });
40720
+ }
40721
+
40597
40722
  // build/commands/generated/bank-accounts.js
40598
40723
  function registerBank_AccountsCommands(parent) {
40599
40724
  const resource = parent.command("bank-accounts").description("Manage bank accounts");
@@ -40663,6 +40788,84 @@ Examples:
40663
40788
  });
40664
40789
  }
40665
40790
 
40791
+ // build/commands/generated/catalog.js
40792
+ function registerCatalogCommands(parent) {
40793
+ const resource = parent.command("catalog").description("Manage catalog");
40794
+ resource.command("list-catalog-versions").description(`List product catalog versions (pending draft and published history). Catalog versioning must be enabled for the organisation.`).addHelpText("after", `
40795
+ Examples:
40796
+ hyperline catalog list-catalog-versions`).action(async (_opts) => {
40797
+ const ctx = resource.parent?.opts()._ctx;
40798
+ if (!ctx) {
40799
+ process.stderr.write("Error: Not authenticated\n");
40800
+ process.exit(1);
40801
+ }
40802
+ const args = {};
40803
+ await ctx.execute({
40804
+ method: "GET",
40805
+ path: "/v1/catalog/versions",
40806
+ args,
40807
+ queryParamKeys: []
40808
+ });
40809
+ });
40810
+ resource.command("get-catalog-draft").description(`Get the pending product catalog draft (null when there is none).`).addHelpText("after", `
40811
+ Examples:
40812
+ hyperline catalog get-catalog-draft`).action(async (_opts) => {
40813
+ const ctx = resource.parent?.opts()._ctx;
40814
+ if (!ctx) {
40815
+ process.stderr.write("Error: Not authenticated\n");
40816
+ process.exit(1);
40817
+ }
40818
+ const args = {};
40819
+ await ctx.execute({
40820
+ method: "GET",
40821
+ path: "/v1/catalog/versions/draft",
40822
+ args,
40823
+ queryParamKeys: []
40824
+ });
40825
+ });
40826
+ resource.command("publish-catalog-draft").description(`Publish the pending product catalog draft: its changes become the live catalog.`).addHelpText("after", `
40827
+ Examples:
40828
+ hyperline catalog publish-catalog-draft
40829
+ hyperline catalog publish-catalog-draft --output json`).action(async (_opts) => {
40830
+ const ctx = resource.parent?.opts()._ctx;
40831
+ if (!ctx) {
40832
+ process.stderr.write("Error: Not authenticated\n");
40833
+ process.exit(1);
40834
+ }
40835
+ const args = {};
40836
+ await ctx.execute({
40837
+ method: "POST",
40838
+ path: "/v1/catalog/versions/draft/publish",
40839
+ args,
40840
+ queryParamKeys: []
40841
+ });
40842
+ });
40843
+ resource.command("discard-catalog-draft").description(`Discard the pending product catalog draft without publishing it.`).option("--yes", "Skip confirmation").addHelpText("after", `
40844
+ Examples:
40845
+ hyperline catalog discard-catalog-draft
40846
+ hyperline catalog discard-catalog-draft --output json`).action(async (opts) => {
40847
+ const ctx = resource.parent?.opts()._ctx;
40848
+ if (!ctx) {
40849
+ process.stderr.write("Error: Not authenticated\n");
40850
+ process.exit(1);
40851
+ }
40852
+ const args = {};
40853
+ if (!opts.yes) {
40854
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
40855
+ if (!confirmed) {
40856
+ process.stdout.write("Aborted.\n");
40857
+ return;
40858
+ }
40859
+ }
40860
+ await ctx.execute({
40861
+ method: "DELETE",
40862
+ path: "/v1/catalog/versions/draft",
40863
+ args,
40864
+ queryParamKeys: []
40865
+ });
40866
+ });
40867
+ }
40868
+
40666
40869
  // build/commands/generated/companies.js
40667
40870
  function registerCompaniesCommands(parent) {
40668
40871
  const resource = parent.command("companies").description("Manage companies");
@@ -40705,13 +40908,13 @@ Examples:
40705
40908
  });
40706
40909
  }
40707
40910
 
40708
- // build/commands/generated/coupons.js
40709
- function registerCouponsCommands(parent) {
40710
- const resource = parent.command("coupons").description("Manage coupons");
40711
- resource.command("list").description(`List all coupons with pagination (take/skip). Coupons define discount rules (percentage or fixed amount) that can be applied to subscriptions or invoices.`).option("--take <number>", `take`).option("--skip <number>", `skip`).addHelpText("after", `
40911
+ // build/commands/generated/contracts-clauses.js
40912
+ function registerContracts_ClausesCommands(parent) {
40913
+ const resource = parent.command("contracts-clauses").description("Manage contracts > clauses");
40914
+ resource.command("list-contract-clauses").description(`List the contract clauses of the contract library, with their texts and translations. Use the returned IDs in \`contract_clause_ids\` when creating a quote. Paginated with take/skip.`).option("--take <number>", `take`).option("--skip <number>", `skip`).addHelpText("after", `
40712
40915
  Examples:
40713
- hyperline coupons list
40714
- hyperline coupons list --take <take>`).action(async (opts) => {
40916
+ hyperline contracts-clauses list-contract-clauses
40917
+ hyperline contracts-clauses list-contract-clauses --take <take>`).action(async (opts) => {
40715
40918
  const ctx = resource.parent?.opts()._ctx;
40716
40919
  if (!ctx) {
40717
40920
  process.stderr.write("Error: Not authenticated\n");
@@ -40724,16 +40927,16 @@ Examples:
40724
40927
  args.skip = Number(opts.skip);
40725
40928
  await ctx.execute({
40726
40929
  method: "GET",
40727
- path: "/v1/coupons",
40930
+ path: "/v1/contracts/clauses",
40728
40931
  args,
40729
40932
  queryParamKeys: ["take", "skip"]
40730
40933
  });
40731
40934
  });
40732
- resource.command("create").description(`Create a new coupon with discount rules. Supports percentage or fixed amount discounts, duration limits, and redemption restrictions.`).requiredOption("--name <value>", `Coupon name.`).option("--description <value>", `Coupon description.`).option("--expiration-date <value>", `Date corresponding to the expiration of the coupon.`).option("--redemption-limit <number>", `Maximum number of subscriptions to which a single coupon can be applied.`).option("--product-ids <json>", `Products the coupon is scoped to, read together with \`product_scope\`: the only discounted products when \`include\`, the products never discounted when \`exclude\`, empty when \`all\`.`).option("--product-scope <value>", `Which products the coupon discounts. \`all\`: every product (\`product_ids\` must be empty). \`include\`: only the products in \`product_ids\`. \`exclude\`: every product except those in \`product_ids\` (lines without a product stay discounted). \`include\` and \`exclude\` require a non-empty \`product_ids\`. When omitted on create/update, it is inferred: \`include\` if \`product_ids\` is non-empty, \`all\` otherwise. Integrations that read \`product_ids\` without \`product_scope\` will misread an \`exclude\` list as the products the coupon applies to.`).option("--repeat <value>", `Default repeat behaviour applied when the coupon is attached to a subscription. Valid values: \`once\`, \`forever\`, \`duration\`. Can be overridden at attach time.`).option("--duration <json>", `Default duration applied when \`repeat\` is \`duration\`. Required when \`repeat\` is \`duration\`, must be null otherwise.`).option("--properties <json>", `Key/value pairs to store any metadata useful in your context.`).requiredOption("--type <value>", `type`).option("--discount-amount <number>", `Amount to apply as a discount on the total amount (excluding taxes) of a subscription. Expressed in the currency's smallest unit.`).option("--currency <value>", `Currency code. See [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217#List_of_ISO_4217_currency_codes).`).option("--discount-percent <number>", `Percentage to apply as a discount on the amount (excluding taxes) of a product.`).addHelpText("after", `
40935
+ resource.command("create-contract-clause").description(`Create a contract clause in the contract library, with a default text and optional translations keyed by language code.`).requiredOption("--name <value>", `Name of the contract clause, displayed in the contract library.`).requiredOption("--text <value>", `Default text of the clause, used when no translation exists for the customer language. Plain text, line breaks are preserved.`).option("--translations <json>", `Translations of the clause, keyed by language code. The translation matching the customer language is used instead of \`text\`.`).option("--invoicing-entity-ids <json>", `IDs of the invoicing entities for which the clause is available when building a quote.`).addHelpText("after", `
40733
40936
  Examples:
40734
- hyperline coupons create --name <name> --type <type>
40735
- hyperline coupons create --name <name> --type <type> --description <description> --expiration-date <expiration_date>
40736
- hyperline coupons create --name <name> --type <type> --output json`).action(async (opts) => {
40937
+ hyperline contracts-clauses create-contract-clause --name <name> --text <text>
40938
+ hyperline contracts-clauses create-contract-clause --name <name> --text <text> --translations <translations> --invoicing-entity-ids <invoicing_entity_ids>
40939
+ hyperline contracts-clauses create-contract-clause --name <name> --text <text> --output json`).action(async (opts) => {
40737
40940
  const ctx = resource.parent?.opts()._ctx;
40738
40941
  if (!ctx) {
40739
40942
  process.stderr.write("Error: Not authenticated\n");
@@ -40742,40 +40945,22 @@ Examples:
40742
40945
  const args = {};
40743
40946
  if (opts.name !== void 0)
40744
40947
  args.name = opts.name;
40745
- if (opts.description !== void 0)
40746
- args.description = opts.description;
40747
- if (opts.expirationDate !== void 0)
40748
- args.expiration_date = opts.expirationDate;
40749
- if (opts.productScope !== void 0)
40750
- args.product_scope = opts.productScope;
40751
- if (opts.repeat !== void 0)
40752
- args.repeat = opts.repeat;
40753
- if (opts.type !== void 0)
40754
- args.type = opts.type;
40755
- if (opts.currency !== void 0)
40756
- args.currency = opts.currency;
40757
- if (opts.redemptionLimit !== void 0)
40758
- args.redemption_limit = Number(opts.redemptionLimit);
40759
- if (opts.discountAmount !== void 0)
40760
- args.discount_amount = Number(opts.discountAmount);
40761
- if (opts.discountPercent !== void 0)
40762
- args.discount_percent = Number(opts.discountPercent);
40763
- if (opts.productIds !== void 0)
40764
- args.product_ids = JSON.parse(opts.productIds);
40765
- if (opts.duration !== void 0)
40766
- args.duration = JSON.parse(opts.duration);
40767
- if (opts.properties !== void 0)
40768
- args.properties = JSON.parse(opts.properties);
40948
+ if (opts.text !== void 0)
40949
+ args.text = opts.text;
40950
+ if (opts.translations !== void 0)
40951
+ args.translations = JSON.parse(opts.translations);
40952
+ if (opts.invoicingEntityIds !== void 0)
40953
+ args.invoicing_entity_ids = JSON.parse(opts.invoicingEntityIds);
40769
40954
  await ctx.execute({
40770
40955
  method: "POST",
40771
- path: "/v1/coupons",
40956
+ path: "/v1/contracts/clauses",
40772
40957
  args,
40773
40958
  queryParamKeys: []
40774
40959
  });
40775
40960
  });
40776
- resource.command("get").description(`Retrieve a specific coupon by ID including its discount configuration, redemption count, and deletion status.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
40961
+ resource.command("get-contract-clause").description(`Retrieve a contract clause by ID.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
40777
40962
  Examples:
40778
- hyperline coupons get --id <id>`).action(async (opts) => {
40963
+ hyperline contracts-clauses get-contract-clause --id <id>`).action(async (opts) => {
40779
40964
  const ctx = resource.parent?.opts()._ctx;
40780
40965
  if (!ctx) {
40781
40966
  process.stderr.write("Error: Not authenticated\n");
@@ -40786,16 +40971,16 @@ Examples:
40786
40971
  args.id = opts.id;
40787
40972
  await ctx.execute({
40788
40973
  method: "GET",
40789
- path: "/v1/coupons/{id}",
40974
+ path: "/v1/contracts/clauses/{id}",
40790
40975
  args,
40791
40976
  queryParamKeys: []
40792
40977
  });
40793
40978
  });
40794
- resource.command("update").description(`Update an existing coupon's name, discount rules, or restrictions.`).requiredOption("--id <value>", `id parameter`).requiredOption("--name <value>", `Coupon name.`).option("--description <value>", `Coupon description.`).option("--expiration-date <value>", `Date corresponding to the expiration of the coupon.`).option("--redemption-limit <number>", `Maximum number of subscriptions to which a single coupon can be applied.`).option("--product-ids <json>", `Products the coupon is scoped to, read together with \`product_scope\`: the only discounted products when \`include\`, the products never discounted when \`exclude\`, empty when \`all\`.`).option("--product-scope <value>", `Which products the coupon discounts. \`all\`: every product (\`product_ids\` must be empty). \`include\`: only the products in \`product_ids\`. \`exclude\`: every product except those in \`product_ids\` (lines without a product stay discounted). \`include\` and \`exclude\` require a non-empty \`product_ids\`. When omitted on create/update, it is inferred: \`include\` if \`product_ids\` is non-empty, \`all\` otherwise. Integrations that read \`product_ids\` without \`product_scope\` will misread an \`exclude\` list as the products the coupon applies to.`).option("--repeat <value>", `Default repeat behaviour applied when the coupon is attached to a subscription. Valid values: \`once\`, \`forever\`, \`duration\`. Can be overridden at attach time.`).option("--duration <json>", `Default duration applied when \`repeat\` is \`duration\`. Required when \`repeat\` is \`duration\`, must be null otherwise.`).option("--properties <json>", `Key/value pairs to store any metadata useful in your context.`).requiredOption("--type <value>", `type`).option("--discount-amount <number>", `Amount to apply as a discount on the total amount (excluding taxes) of a subscription. Expressed in the currency's smallest unit.`).option("--currency <value>", `Currency code. See [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217#List_of_ISO_4217_currency_codes).`).option("--discount-percent <number>", `Percentage to apply as a discount on the amount (excluding taxes) of a product.`).addHelpText("after", `
40979
+ resource.command("update-contract-clause").description(`Update the name, text, translations or invoicing entities of a contract clause. Sending \`translations\` replaces all existing translations.`).requiredOption("--id <value>", `id parameter`).option("--name <value>", `Name of the contract clause, displayed in the contract library.`).option("--text <value>", `Default text of the clause, used when no translation exists for the customer language. Plain text, line breaks are preserved.`).option("--translations <json>", `Translations of the clause, keyed by language code. Replaces all existing translations: omitted languages are removed.`).option("--invoicing-entity-ids <json>", `IDs of the invoicing entities for which the clause is available when building a quote.`).addHelpText("after", `
40795
40980
  Examples:
40796
- hyperline coupons update --id <id> --name <name> --type <type>
40797
- hyperline coupons update --id <id> --name <name> --type <type> --description <description> --expiration-date <expiration_date>
40798
- hyperline coupons update --id <id> --name <name> --type <type> --output json`).action(async (opts) => {
40981
+ hyperline contracts-clauses update-contract-clause --id <id>
40982
+ hyperline contracts-clauses update-contract-clause --id <id> --name <name> --text <text>
40983
+ hyperline contracts-clauses update-contract-clause --id <id> --output json`).action(async (opts) => {
40799
40984
  const ctx = resource.parent?.opts()._ctx;
40800
40985
  if (!ctx) {
40801
40986
  process.stderr.write("Error: Not authenticated\n");
@@ -40806,41 +40991,23 @@ Examples:
40806
40991
  args.id = opts.id;
40807
40992
  if (opts.name !== void 0)
40808
40993
  args.name = opts.name;
40809
- if (opts.description !== void 0)
40810
- args.description = opts.description;
40811
- if (opts.expirationDate !== void 0)
40812
- args.expiration_date = opts.expirationDate;
40813
- if (opts.productScope !== void 0)
40814
- args.product_scope = opts.productScope;
40815
- if (opts.repeat !== void 0)
40816
- args.repeat = opts.repeat;
40817
- if (opts.type !== void 0)
40818
- args.type = opts.type;
40819
- if (opts.currency !== void 0)
40820
- args.currency = opts.currency;
40821
- if (opts.redemptionLimit !== void 0)
40822
- args.redemption_limit = Number(opts.redemptionLimit);
40823
- if (opts.discountAmount !== void 0)
40824
- args.discount_amount = Number(opts.discountAmount);
40825
- if (opts.discountPercent !== void 0)
40826
- args.discount_percent = Number(opts.discountPercent);
40827
- if (opts.productIds !== void 0)
40828
- args.product_ids = JSON.parse(opts.productIds);
40829
- if (opts.duration !== void 0)
40830
- args.duration = JSON.parse(opts.duration);
40831
- if (opts.properties !== void 0)
40832
- args.properties = JSON.parse(opts.properties);
40994
+ if (opts.text !== void 0)
40995
+ args.text = opts.text;
40996
+ if (opts.translations !== void 0)
40997
+ args.translations = JSON.parse(opts.translations);
40998
+ if (opts.invoicingEntityIds !== void 0)
40999
+ args.invoicing_entity_ids = JSON.parse(opts.invoicingEntityIds);
40833
41000
  await ctx.execute({
40834
41001
  method: "PUT",
40835
- path: "/v1/coupons/{id}",
41002
+ path: "/v1/contracts/clauses/{id}",
40836
41003
  args,
40837
41004
  queryParamKeys: []
40838
41005
  });
40839
41006
  });
40840
- resource.command("delete").description(`Permanently delete a coupon by ID. This cannot be undone.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
41007
+ resource.command("delete-contract-clause").description(`Delete a contract clause from the contract library. Existing quotes keep their copy of the clause.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
40841
41008
  Examples:
40842
- hyperline coupons delete --id <id>
40843
- hyperline coupons delete --id <id> --output json`).action(async (opts) => {
41009
+ hyperline contracts-clauses delete-contract-clause --id <id>
41010
+ hyperline contracts-clauses delete-contract-clause --id <id> --output json`).action(async (opts) => {
40844
41011
  const ctx = resource.parent?.opts()._ctx;
40845
41012
  if (!ctx) {
40846
41013
  process.stderr.write("Error: Not authenticated\n");
@@ -40858,41 +41025,399 @@ Examples:
40858
41025
  }
40859
41026
  await ctx.execute({
40860
41027
  method: "DELETE",
40861
- path: "/v1/coupons/{id}",
41028
+ path: "/v1/contracts/clauses/{id}",
40862
41029
  args,
40863
41030
  queryParamKeys: []
40864
41031
  });
40865
41032
  });
40866
41033
  }
40867
41034
 
40868
- // build/commands/generated/coupons-promotion-codes.js
40869
- function registerCoupons_Promotion_CodesCommands(parent) {
40870
- const resource = parent.command("coupons-promotion-codes").description("Manage coupons > promotion codes");
40871
- 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", `
41035
+ // build/commands/generated/contracts-documents.js
41036
+ function registerContracts_DocumentsCommands(parent) {
41037
+ const resource = parent.command("contracts-documents").description("Manage contracts > documents");
41038
+ resource.command("list-contract-documents").description(`List the contract documents of the contract library (terms of service, DPA, SLA...), with their contents per language and countries and the files of each content. Paginated with take/skip.`).option("--take <number>", `take`).option("--skip <number>", `skip`).addHelpText("after", `
40872
41039
  Examples:
40873
- hyperline coupons-promotion-codes list-promotion-codes
40874
- hyperline coupons-promotion-codes list-promotion-codes --take <take> --coupon-id <coupon_id>`).action(async (opts) => {
41040
+ hyperline contracts-documents list-contract-documents
41041
+ hyperline contracts-documents list-contract-documents --take <take>`).action(async (opts) => {
40875
41042
  const ctx = resource.parent?.opts()._ctx;
40876
41043
  if (!ctx) {
40877
41044
  process.stderr.write("Error: Not authenticated\n");
40878
41045
  process.exit(1);
40879
41046
  }
40880
41047
  const args = {};
40881
- if (opts.couponId !== void 0)
40882
- args.coupon_id = opts.couponId;
40883
- if (opts["couponId.not"] !== void 0)
40884
- args.coupon_id__not = opts["couponId.not"];
40885
- if (opts["couponId.isNull"] !== void 0)
40886
- args.coupon_id__isNull = opts["couponId.isNull"];
40887
- if (opts["couponId.isNotNull"] !== void 0)
40888
- args.coupon_id__isNotNull = opts["couponId.isNotNull"];
40889
- if (opts["couponId.equals"] !== void 0)
40890
- args.coupon_id__equals = opts["couponId.equals"];
40891
- if (opts["couponId.contains"] !== void 0)
40892
- args.coupon_id__contains = opts["couponId.contains"];
40893
- if (opts["couponId.startsWith"] !== void 0)
40894
- args.coupon_id__startsWith = opts["couponId.startsWith"];
40895
- if (opts["couponId.endWith"] !== void 0)
41048
+ if (opts.take !== void 0)
41049
+ args.take = Number(opts.take);
41050
+ if (opts.skip !== void 0)
41051
+ args.skip = Number(opts.skip);
41052
+ await ctx.execute({
41053
+ method: "GET",
41054
+ path: "/v1/contracts/documents",
41055
+ args,
41056
+ queryParamKeys: ["take", "skip"]
41057
+ });
41058
+ });
41059
+ resource.command("create-contract-document").description(`Create a contract document in the contract library. Its files are added afterwards per language with \`create_contract_document_content\`.`).requiredOption("--name <value>", `Name of the contract document, displayed in the contract library.`).option("--invoicing-entity-ids <json>", `IDs of the invoicing entities for which the contract document is available when building a quote.`).addHelpText("after", `
41060
+ Examples:
41061
+ hyperline contracts-documents create-contract-document --name <name>
41062
+ hyperline contracts-documents create-contract-document --name <name> --invoicing-entity-ids <invoicing_entity_ids>
41063
+ hyperline contracts-documents create-contract-document --name <name> --output json`).action(async (opts) => {
41064
+ const ctx = resource.parent?.opts()._ctx;
41065
+ if (!ctx) {
41066
+ process.stderr.write("Error: Not authenticated\n");
41067
+ process.exit(1);
41068
+ }
41069
+ const args = {};
41070
+ if (opts.name !== void 0)
41071
+ args.name = opts.name;
41072
+ if (opts.invoicingEntityIds !== void 0)
41073
+ args.invoicing_entity_ids = JSON.parse(opts.invoicingEntityIds);
41074
+ await ctx.execute({
41075
+ method: "POST",
41076
+ path: "/v1/contracts/documents",
41077
+ args,
41078
+ queryParamKeys: []
41079
+ });
41080
+ });
41081
+ resource.command("get-contract-document").description(`Retrieve a contract document by ID, with its contents and their files.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
41082
+ Examples:
41083
+ hyperline contracts-documents get-contract-document --id <id>`).action(async (opts) => {
41084
+ const ctx = resource.parent?.opts()._ctx;
41085
+ if (!ctx) {
41086
+ process.stderr.write("Error: Not authenticated\n");
41087
+ process.exit(1);
41088
+ }
41089
+ const args = {};
41090
+ if (opts.id !== void 0)
41091
+ args.id = opts.id;
41092
+ await ctx.execute({
41093
+ method: "GET",
41094
+ path: "/v1/contracts/documents/{id}",
41095
+ args,
41096
+ queryParamKeys: []
41097
+ });
41098
+ });
41099
+ resource.command("update-contract-document").description(`Update the name or invoicing entities of a contract document. Its files are updated per content with \`update_contract_document_content\`.`).requiredOption("--id <value>", `id parameter`).option("--name <value>", `Name of the contract document, displayed in the contract library.`).option("--invoicing-entity-ids <json>", `IDs of the invoicing entities for which the contract document is available when building a quote.`).addHelpText("after", `
41100
+ Examples:
41101
+ hyperline contracts-documents update-contract-document --id <id>
41102
+ hyperline contracts-documents update-contract-document --id <id> --name <name> --invoicing-entity-ids <invoicing_entity_ids>
41103
+ hyperline contracts-documents update-contract-document --id <id> --output json`).action(async (opts) => {
41104
+ const ctx = resource.parent?.opts()._ctx;
41105
+ if (!ctx) {
41106
+ process.stderr.write("Error: Not authenticated\n");
41107
+ process.exit(1);
41108
+ }
41109
+ const args = {};
41110
+ if (opts.id !== void 0)
41111
+ args.id = opts.id;
41112
+ if (opts.name !== void 0)
41113
+ args.name = opts.name;
41114
+ if (opts.invoicingEntityIds !== void 0)
41115
+ args.invoicing_entity_ids = JSON.parse(opts.invoicingEntityIds);
41116
+ await ctx.execute({
41117
+ method: "PUT",
41118
+ path: "/v1/contracts/documents/{id}",
41119
+ args,
41120
+ queryParamKeys: []
41121
+ });
41122
+ });
41123
+ resource.command("delete-contract-document").description(`Delete a contract document from the contract library. Existing quotes keep their copy of the files.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
41124
+ Examples:
41125
+ hyperline contracts-documents delete-contract-document --id <id>
41126
+ hyperline contracts-documents delete-contract-document --id <id> --output json`).action(async (opts) => {
41127
+ const ctx = resource.parent?.opts()._ctx;
41128
+ if (!ctx) {
41129
+ process.stderr.write("Error: Not authenticated\n");
41130
+ process.exit(1);
41131
+ }
41132
+ const args = {};
41133
+ if (opts.id !== void 0)
41134
+ args.id = opts.id;
41135
+ if (!opts.yes) {
41136
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
41137
+ if (!confirmed) {
41138
+ process.stdout.write("Aborted.\n");
41139
+ return;
41140
+ }
41141
+ }
41142
+ await ctx.execute({
41143
+ method: "DELETE",
41144
+ path: "/v1/contracts/documents/{id}",
41145
+ args,
41146
+ queryParamKeys: []
41147
+ });
41148
+ });
41149
+ resource.command("create-contract-document-content").description(`Add a content to a contract document: its files for one language (\`default\` as fallback) and optional countries, sent as a comma-separated list. At least one PDF or Word file is required.`).requiredOption("--id <value>", `id parameter`).requiredOption("--language <value>", `Language of the content. \`default\` is used when no content exists for the customer language.`).option("--countries <value>", `Countries the content applies to, as ISO 3166-1 alpha-2 codes. Empty means all countries. In a multipart request, send a comma-separated list.`).requiredOption("--files <paths...>", `Paths of the local files to upload (space-separated, sends a multipart request)`).addHelpText("after", `
41150
+ Examples:
41151
+ hyperline contracts-documents create-contract-document-content --id <id> --language <language> --files <path>
41152
+ hyperline contracts-documents create-contract-document-content --id <id> --language <language> --files <path> --countries <countries>
41153
+ hyperline contracts-documents create-contract-document-content --id <id> --language <language> --files <path> --output json`).action(async (opts) => {
41154
+ const ctx = resource.parent?.opts()._ctx;
41155
+ if (!ctx) {
41156
+ process.stderr.write("Error: Not authenticated\n");
41157
+ process.exit(1);
41158
+ }
41159
+ const args = {};
41160
+ if (opts.id !== void 0)
41161
+ args.id = opts.id;
41162
+ if (opts.language !== void 0)
41163
+ args.language = opts.language;
41164
+ if (opts.countries !== void 0)
41165
+ args.countries = opts.countries;
41166
+ const files = {};
41167
+ if (opts.files !== void 0)
41168
+ files.files = [opts.files].flat();
41169
+ await ctx.execute({
41170
+ method: "POST",
41171
+ path: "/v1/contracts/documents/{id}/contents",
41172
+ args,
41173
+ queryParamKeys: [],
41174
+ files
41175
+ });
41176
+ });
41177
+ resource.command("update-contract-document-content").description(`Update a contract document content. Sent files replace all its existing files: use it to publish a new version of a document. Existing quotes keep their copy of the previous files.`).requiredOption("--id <value>", `id parameter`).requiredOption("--content-id <value>", `contentId parameter`).option("--language <value>", `Language of the content. \`default\` is used when no content exists for the customer language.`).option("--countries <value>", `Countries the content applies to, as ISO 3166-1 alpha-2 codes. Empty means all countries. In a multipart request, send a comma-separated list, or an empty value for all countries.`).option("--files <paths...>", `Paths of the local files to upload (space-separated, sends a multipart request)`).addHelpText("after", `
41178
+ Examples:
41179
+ hyperline contracts-documents update-contract-document-content --id <id> --content-id <contentId>
41180
+ hyperline contracts-documents update-contract-document-content --id <id> --content-id <contentId> --language <language> --countries <countries>
41181
+ hyperline contracts-documents update-contract-document-content --id <id> --content-id <contentId> --output json`).action(async (opts) => {
41182
+ const ctx = resource.parent?.opts()._ctx;
41183
+ if (!ctx) {
41184
+ process.stderr.write("Error: Not authenticated\n");
41185
+ process.exit(1);
41186
+ }
41187
+ const args = {};
41188
+ if (opts.id !== void 0)
41189
+ args.id = opts.id;
41190
+ if (opts.contentId !== void 0)
41191
+ args.contentId = opts.contentId;
41192
+ if (opts.language !== void 0)
41193
+ args.language = opts.language;
41194
+ if (opts.countries !== void 0)
41195
+ args.countries = opts.countries;
41196
+ const files = {};
41197
+ if (opts.files !== void 0)
41198
+ files.files = [opts.files].flat();
41199
+ await ctx.execute({
41200
+ method: "PUT",
41201
+ path: "/v1/contracts/documents/{id}/contents/{contentId}",
41202
+ args,
41203
+ queryParamKeys: [],
41204
+ files
41205
+ });
41206
+ });
41207
+ resource.command("delete-contract-document-content").description(`Delete a content (one language and countries version) of a contract document.`).requiredOption("--id <value>", `id parameter`).requiredOption("--content-id <value>", `contentId parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
41208
+ Examples:
41209
+ hyperline contracts-documents delete-contract-document-content --id <id> --content-id <contentId>
41210
+ hyperline contracts-documents delete-contract-document-content --id <id> --content-id <contentId> --output json`).action(async (opts) => {
41211
+ const ctx = resource.parent?.opts()._ctx;
41212
+ if (!ctx) {
41213
+ process.stderr.write("Error: Not authenticated\n");
41214
+ process.exit(1);
41215
+ }
41216
+ const args = {};
41217
+ if (opts.id !== void 0)
41218
+ args.id = opts.id;
41219
+ if (opts.contentId !== void 0)
41220
+ args.contentId = opts.contentId;
41221
+ if (!opts.yes) {
41222
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
41223
+ if (!confirmed) {
41224
+ process.stdout.write("Aborted.\n");
41225
+ return;
41226
+ }
41227
+ }
41228
+ await ctx.execute({
41229
+ method: "DELETE",
41230
+ path: "/v1/contracts/documents/{id}/contents/{contentId}",
41231
+ args,
41232
+ queryParamKeys: []
41233
+ });
41234
+ });
41235
+ }
41236
+
41237
+ // build/commands/generated/coupons.js
41238
+ function registerCouponsCommands(parent) {
41239
+ const resource = parent.command("coupons").description("Manage coupons");
41240
+ resource.command("list").description(`List all coupons with pagination (take/skip). Coupons define discount rules (percentage or fixed amount) that can be applied to subscriptions or invoices.`).option("--take <number>", `take`).option("--skip <number>", `skip`).addHelpText("after", `
41241
+ Examples:
41242
+ hyperline coupons list
41243
+ hyperline coupons list --take <take>`).action(async (opts) => {
41244
+ const ctx = resource.parent?.opts()._ctx;
41245
+ if (!ctx) {
41246
+ process.stderr.write("Error: Not authenticated\n");
41247
+ process.exit(1);
41248
+ }
41249
+ const args = {};
41250
+ if (opts.take !== void 0)
41251
+ args.take = Number(opts.take);
41252
+ if (opts.skip !== void 0)
41253
+ args.skip = Number(opts.skip);
41254
+ await ctx.execute({
41255
+ method: "GET",
41256
+ path: "/v1/coupons",
41257
+ args,
41258
+ queryParamKeys: ["take", "skip"]
41259
+ });
41260
+ });
41261
+ 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", `
41262
+ Examples:
41263
+ hyperline coupons create --name <name> --type <type>
41264
+ hyperline coupons create --name <name> --type <type> --description <description> --expiration-date <expiration_date>
41265
+ hyperline coupons create --name <name> --type <type> --output json`).action(async (opts) => {
41266
+ const ctx = resource.parent?.opts()._ctx;
41267
+ if (!ctx) {
41268
+ process.stderr.write("Error: Not authenticated\n");
41269
+ process.exit(1);
41270
+ }
41271
+ const args = {};
41272
+ if (opts.name !== void 0)
41273
+ args.name = opts.name;
41274
+ if (opts.description !== void 0)
41275
+ args.description = opts.description;
41276
+ if (opts.expirationDate !== void 0)
41277
+ args.expiration_date = opts.expirationDate;
41278
+ if (opts.productScope !== void 0)
41279
+ args.product_scope = opts.productScope;
41280
+ if (opts.repeat !== void 0)
41281
+ args.repeat = opts.repeat;
41282
+ if (opts.type !== void 0)
41283
+ args.type = opts.type;
41284
+ if (opts.currency !== void 0)
41285
+ args.currency = opts.currency;
41286
+ if (opts.redemptionLimit !== void 0)
41287
+ args.redemption_limit = Number(opts.redemptionLimit);
41288
+ if (opts.discountAmount !== void 0)
41289
+ args.discount_amount = Number(opts.discountAmount);
41290
+ if (opts.discountPercent !== void 0)
41291
+ args.discount_percent = Number(opts.discountPercent);
41292
+ if (opts.productIds !== void 0)
41293
+ args.product_ids = JSON.parse(opts.productIds);
41294
+ if (opts.duration !== void 0)
41295
+ args.duration = JSON.parse(opts.duration);
41296
+ if (opts.properties !== void 0)
41297
+ args.properties = JSON.parse(opts.properties);
41298
+ await ctx.execute({
41299
+ method: "POST",
41300
+ path: "/v1/coupons",
41301
+ args,
41302
+ queryParamKeys: []
41303
+ });
41304
+ });
41305
+ resource.command("get").description(`Retrieve a specific coupon by ID including its discount configuration, redemption count, and deletion status.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
41306
+ Examples:
41307
+ hyperline coupons get --id <id>`).action(async (opts) => {
41308
+ const ctx = resource.parent?.opts()._ctx;
41309
+ if (!ctx) {
41310
+ process.stderr.write("Error: Not authenticated\n");
41311
+ process.exit(1);
41312
+ }
41313
+ const args = {};
41314
+ if (opts.id !== void 0)
41315
+ args.id = opts.id;
41316
+ await ctx.execute({
41317
+ method: "GET",
41318
+ path: "/v1/coupons/{id}",
41319
+ args,
41320
+ queryParamKeys: []
41321
+ });
41322
+ });
41323
+ 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", `
41324
+ Examples:
41325
+ hyperline coupons update --id <id> --name <name> --type <type>
41326
+ hyperline coupons update --id <id> --name <name> --type <type> --description <description> --expiration-date <expiration_date>
41327
+ hyperline coupons update --id <id> --name <name> --type <type> --output json`).action(async (opts) => {
41328
+ const ctx = resource.parent?.opts()._ctx;
41329
+ if (!ctx) {
41330
+ process.stderr.write("Error: Not authenticated\n");
41331
+ process.exit(1);
41332
+ }
41333
+ const args = {};
41334
+ if (opts.id !== void 0)
41335
+ args.id = opts.id;
41336
+ if (opts.name !== void 0)
41337
+ args.name = opts.name;
41338
+ if (opts.description !== void 0)
41339
+ args.description = opts.description;
41340
+ if (opts.expirationDate !== void 0)
41341
+ args.expiration_date = opts.expirationDate;
41342
+ if (opts.productScope !== void 0)
41343
+ args.product_scope = opts.productScope;
41344
+ if (opts.repeat !== void 0)
41345
+ args.repeat = opts.repeat;
41346
+ if (opts.type !== void 0)
41347
+ args.type = opts.type;
41348
+ if (opts.currency !== void 0)
41349
+ args.currency = opts.currency;
41350
+ if (opts.redemptionLimit !== void 0)
41351
+ args.redemption_limit = Number(opts.redemptionLimit);
41352
+ if (opts.discountAmount !== void 0)
41353
+ args.discount_amount = Number(opts.discountAmount);
41354
+ if (opts.discountPercent !== void 0)
41355
+ args.discount_percent = Number(opts.discountPercent);
41356
+ if (opts.productIds !== void 0)
41357
+ args.product_ids = JSON.parse(opts.productIds);
41358
+ if (opts.duration !== void 0)
41359
+ args.duration = JSON.parse(opts.duration);
41360
+ if (opts.properties !== void 0)
41361
+ args.properties = JSON.parse(opts.properties);
41362
+ await ctx.execute({
41363
+ method: "PUT",
41364
+ path: "/v1/coupons/{id}",
41365
+ args,
41366
+ queryParamKeys: []
41367
+ });
41368
+ });
41369
+ resource.command("delete").description(`Permanently delete a coupon by ID. This cannot be undone.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
41370
+ Examples:
41371
+ hyperline coupons delete --id <id>
41372
+ hyperline coupons delete --id <id> --output json`).action(async (opts) => {
41373
+ const ctx = resource.parent?.opts()._ctx;
41374
+ if (!ctx) {
41375
+ process.stderr.write("Error: Not authenticated\n");
41376
+ process.exit(1);
41377
+ }
41378
+ const args = {};
41379
+ if (opts.id !== void 0)
41380
+ args.id = opts.id;
41381
+ if (!opts.yes) {
41382
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
41383
+ if (!confirmed) {
41384
+ process.stdout.write("Aborted.\n");
41385
+ return;
41386
+ }
41387
+ }
41388
+ await ctx.execute({
41389
+ method: "DELETE",
41390
+ path: "/v1/coupons/{id}",
41391
+ args,
41392
+ queryParamKeys: []
41393
+ });
41394
+ });
41395
+ }
41396
+
41397
+ // build/commands/generated/coupons-promotion-codes.js
41398
+ function registerCoupons_Promotion_CodesCommands(parent) {
41399
+ const resource = parent.command("coupons-promotion-codes").description("Manage coupons > promotion codes");
41400
+ 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", `
41401
+ Examples:
41402
+ hyperline coupons-promotion-codes list-promotion-codes
41403
+ hyperline coupons-promotion-codes list-promotion-codes --take <take> --coupon-id <coupon_id>`).action(async (opts) => {
41404
+ const ctx = resource.parent?.opts()._ctx;
41405
+ if (!ctx) {
41406
+ process.stderr.write("Error: Not authenticated\n");
41407
+ process.exit(1);
41408
+ }
41409
+ const args = {};
41410
+ if (opts.couponId !== void 0)
41411
+ args.coupon_id = opts.couponId;
41412
+ if (opts["couponId.not"] !== void 0)
41413
+ args.coupon_id__not = opts["couponId.not"];
41414
+ if (opts["couponId.equals"] !== void 0)
41415
+ args.coupon_id__equals = opts["couponId.equals"];
41416
+ if (opts["couponId.contains"] !== void 0)
41417
+ args.coupon_id__contains = opts["couponId.contains"];
41418
+ if (opts["couponId.startsWith"] !== void 0)
41419
+ args.coupon_id__startsWith = opts["couponId.startsWith"];
41420
+ if (opts["couponId.endWith"] !== void 0)
40896
41421
  args.coupon_id__endWith = opts["couponId.endWith"];
40897
41422
  if (opts.take !== void 0)
40898
41423
  args.take = Number(opts.take);
@@ -40907,8 +41432,6 @@ Examples:
40907
41432
  "skip",
40908
41433
  "coupon_id",
40909
41434
  "coupon_id__not",
40910
- "coupon_id__isNull",
40911
- "coupon_id__isNotNull",
40912
41435
  "coupon_id__equals",
40913
41436
  "coupon_id__contains",
40914
41437
  "coupon_id__startsWith",
@@ -41162,7 +41685,7 @@ Examples:
41162
41685
  // build/commands/generated/customers.js
41163
41686
  function registerCustomersCommands(parent) {
41164
41687
  const resource = parent.command("customers").description("Manage customers");
41165
- resource.command("list").description(`List customers with optional filters for name, type, status, currency, country, external_id, billing_email, search, tax_id, tax_id_status, subscription_status, invoicing_entity_id, segment_id, custom_properties, payment_method_type, integration_entity_id, created_at, and updated_at. Sortable by created_at or updated_at. Paginated with limit/cursor.`).option("--limit <number>", `Maximum number of items to return (1-100).`).option("--cursor <value>", `Opaque cursor returned in the previous response's \`next_cursor\`. Omit to fetch the first page.`).option("--include-total <value>", `Set to \`true\` to include \`total\` in the response.`).option("--order <value>", `Sort direction.`).option("--sort <value>", `Field used to sort the results.`).option("--tax-id-status <value>", `
41688
+ 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 (JSON object of slug to exact value, e.g. {"my_slug":"value"}; slugs matching no custom property are ignored), payment_method_type, integration_entity_id, created_at, and updated_at. Sortable by created_at or updated_at. Paginated with limit/cursor.`).option("--limit <number>", `Maximum number of items to return (1-100).`).option("--cursor <value>", `Opaque cursor returned in the previous response's \`next_cursor\`. Omit to fetch the first page.`).option("--include-total <value>", `Set to \`true\` to include \`total\` in the response.`).option("--order <value>", `Sort direction.`).option("--sort <value>", `Field used to sort the results.`).option("--tax-id-status <value>", `
41166
41689
  Verification status of the customer tax ID.
41167
41690
 
41168
41691
  - \`valid\`: Tax ID has been verified and is valid.
@@ -41170,7 +41693,7 @@ Verification status of the customer tax ID.
41170
41693
  - \`mismatch\`: Tax ID is valid but is for a different country than the customer's country.
41171
41694
  - \`unverified\`: Tax ID has not been verified yet.
41172
41695
  - \`unsupported\`: Tax ID verification for this type not supported yet.
41173
- `).option("--name <value>", `name`).option("--name.not <value>", `name__not`).option("--name.is-null <value>", `name__isNull`).option("--name.is-not-null <value>", `name__isNotNull`).option("--name.equals <value>", `name__equals`).option("--name.contains <value>", `name__contains`).option("--name.starts-with <value>", `name__startsWith`).option("--name.end-with <value>", `name__endWith`).option("--type <value>", `type`).option("--type.in <value>", `type__in`).option("--status <value>", `status`).option("--status.in <value>", `status__in`).option("--currency <value>", `currency`).option("--currency.not <value>", `currency__not`).option("--currency.is-null <value>", `currency__isNull`).option("--currency.is-not-null <value>", `currency__isNotNull`).option("--currency.equals <value>", `currency__equals`).option("--currency.contains <value>", `currency__contains`).option("--currency.starts-with <value>", `currency__startsWith`).option("--currency.end-with <value>", `currency__endWith`).option("--country <value>", `country`).option("--country.not <value>", `country__not`).option("--country.is-null <value>", `country__isNull`).option("--country.is-not-null <value>", `country__isNotNull`).option("--country.equals <value>", `country__equals`).option("--country.contains <value>", `country__contains`).option("--country.starts-with <value>", `country__startsWith`).option("--country.end-with <value>", `country__endWith`).option("--external-id <value>", `external_id`).option("--external-id.not <value>", `external_id__not`).option("--external-id.is-null <value>", `external_id__isNull`).option("--external-id.is-not-null <value>", `external_id__isNotNull`).option("--external-id.equals <value>", `external_id__equals`).option("--external-id.contains <value>", `external_id__contains`).option("--external-id.starts-with <value>", `external_id__startsWith`).option("--external-id.end-with <value>", `external_id__endWith`).option("--billing-email <value>", `billing_email`).option("--billing-email.not <value>", `billing_email__not`).option("--billing-email.is-null <value>", `billing_email__isNull`).option("--billing-email.is-not-null <value>", `billing_email__isNotNull`).option("--billing-email.equals <value>", `billing_email__equals`).option("--billing-email.contains <value>", `billing_email__contains`).option("--billing-email.starts-with <value>", `billing_email__startsWith`).option("--billing-email.end-with <value>", `billing_email__endWith`).option("--search <value>", `search`).option("--tax-id <value>", `tax_id`).option("--tax-id.not <value>", `tax_id__not`).option("--tax-id.is-null <value>", `tax_id__isNull`).option("--tax-id.is-not-null <value>", `tax_id__isNotNull`).option("--tax-id.equals <value>", `tax_id__equals`).option("--tax-id.contains <value>", `tax_id__contains`).option("--tax-id.starts-with <value>", `tax_id__startsWith`).option("--tax-id.end-with <value>", `tax_id__endWith`).option("--subscription-status <value>", `subscription_status`).option("--subscription-status.in <value>", `subscription_status__in`).option("--invoicing-entity-id <value>", `invoicing_entity_id`).option("--invoicing-entity-id.not <value>", `invoicing_entity_id__not`).option("--invoicing-entity-id.is-null <value>", `invoicing_entity_id__isNull`).option("--invoicing-entity-id.is-not-null <value>", `invoicing_entity_id__isNotNull`).option("--invoicing-entity-id.equals <value>", `invoicing_entity_id__equals`).option("--invoicing-entity-id.contains <value>", `invoicing_entity_id__contains`).option("--invoicing-entity-id.starts-with <value>", `invoicing_entity_id__startsWith`).option("--invoicing-entity-id.end-with <value>", `invoicing_entity_id__endWith`).option("--segment-id <value>", `segment_id`).option("--custom-properties <value>", `custom_properties`).option("--payment-method-type <value>", `payment_method_type`).option("--payment-method-type.in <value>", `payment_method_type__in`).option("--integration-entity-id <value>", `integration_entity_id`).option("--created-at <value>", `created_at`).option("--created-at.not <value>", `created_at__not`).option("--created-at.is-null <value>", `created_at__isNull`).option("--created-at.is-not-null <value>", `created_at__isNotNull`).option("--created-at.equals <value>", `created_at__equals`).option("--created-at.lt <value>", `created_at__lt`).option("--created-at.lte <value>", `created_at__lte`).option("--created-at.gt <value>", `created_at__gt`).option("--created-at.gte <value>", `created_at__gte`).option("--updated-at <value>", `updated_at`).option("--updated-at.not <value>", `updated_at__not`).option("--updated-at.is-null <value>", `updated_at__isNull`).option("--updated-at.is-not-null <value>", `updated_at__isNotNull`).option("--updated-at.equals <value>", `updated_at__equals`).option("--updated-at.lt <value>", `updated_at__lt`).option("--updated-at.lte <value>", `updated_at__lte`).option("--updated-at.gt <value>", `updated_at__gt`).option("--updated-at.gte <value>", `updated_at__gte`).addHelpText("after", `
41696
+ `).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>", `Filter by custom property values, as a JSON object mapping a custom property slug to the exact value to match. Suffix a slug with \`__contains\` for a case-sensitive substring match on text values. Several entries are combined with AND. Entries whose slug matches no custom property, or whose value is \`false\`, \`0\`, \`null\` or an empty string, are ignored.`).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", `
41174
41697
  Examples:
41175
41698
  hyperline customers list
41176
41699
  hyperline customers list --limit <limit> --cursor <cursor>`).action(async (opts) => {
@@ -41194,10 +41717,6 @@ Examples:
41194
41717
  args.name = opts.name;
41195
41718
  if (opts["name.not"] !== void 0)
41196
41719
  args.name__not = opts["name.not"];
41197
- if (opts["name.isNull"] !== void 0)
41198
- args.name__isNull = opts["name.isNull"];
41199
- if (opts["name.isNotNull"] !== void 0)
41200
- args.name__isNotNull = opts["name.isNotNull"];
41201
41720
  if (opts["name.equals"] !== void 0)
41202
41721
  args.name__equals = opts["name.equals"];
41203
41722
  if (opts["name.contains"] !== void 0)
@@ -41218,10 +41737,6 @@ Examples:
41218
41737
  args.currency = opts.currency;
41219
41738
  if (opts["currency.not"] !== void 0)
41220
41739
  args.currency__not = opts["currency.not"];
41221
- if (opts["currency.isNull"] !== void 0)
41222
- args.currency__isNull = opts["currency.isNull"];
41223
- if (opts["currency.isNotNull"] !== void 0)
41224
- args.currency__isNotNull = opts["currency.isNotNull"];
41225
41740
  if (opts["currency.equals"] !== void 0)
41226
41741
  args.currency__equals = opts["currency.equals"];
41227
41742
  if (opts["currency.contains"] !== void 0)
@@ -41230,14 +41745,14 @@ Examples:
41230
41745
  args.currency__startsWith = opts["currency.startsWith"];
41231
41746
  if (opts["currency.endWith"] !== void 0)
41232
41747
  args.currency__endWith = opts["currency.endWith"];
41748
+ if (opts["currency.isNull"] !== void 0)
41749
+ args.currency__isNull = opts["currency.isNull"];
41750
+ if (opts["currency.isNotNull"] !== void 0)
41751
+ args.currency__isNotNull = opts["currency.isNotNull"];
41233
41752
  if (opts.country !== void 0)
41234
41753
  args.country = opts.country;
41235
41754
  if (opts["country.not"] !== void 0)
41236
41755
  args.country__not = opts["country.not"];
41237
- if (opts["country.isNull"] !== void 0)
41238
- args.country__isNull = opts["country.isNull"];
41239
- if (opts["country.isNotNull"] !== void 0)
41240
- args.country__isNotNull = opts["country.isNotNull"];
41241
41756
  if (opts["country.equals"] !== void 0)
41242
41757
  args.country__equals = opts["country.equals"];
41243
41758
  if (opts["country.contains"] !== void 0)
@@ -41246,14 +41761,14 @@ Examples:
41246
41761
  args.country__startsWith = opts["country.startsWith"];
41247
41762
  if (opts["country.endWith"] !== void 0)
41248
41763
  args.country__endWith = opts["country.endWith"];
41764
+ if (opts["country.isNull"] !== void 0)
41765
+ args.country__isNull = opts["country.isNull"];
41766
+ if (opts["country.isNotNull"] !== void 0)
41767
+ args.country__isNotNull = opts["country.isNotNull"];
41249
41768
  if (opts.externalId !== void 0)
41250
41769
  args.external_id = opts.externalId;
41251
41770
  if (opts["externalId.not"] !== void 0)
41252
41771
  args.external_id__not = opts["externalId.not"];
41253
- if (opts["externalId.isNull"] !== void 0)
41254
- args.external_id__isNull = opts["externalId.isNull"];
41255
- if (opts["externalId.isNotNull"] !== void 0)
41256
- args.external_id__isNotNull = opts["externalId.isNotNull"];
41257
41772
  if (opts["externalId.equals"] !== void 0)
41258
41773
  args.external_id__equals = opts["externalId.equals"];
41259
41774
  if (opts["externalId.contains"] !== void 0)
@@ -41262,14 +41777,14 @@ Examples:
41262
41777
  args.external_id__startsWith = opts["externalId.startsWith"];
41263
41778
  if (opts["externalId.endWith"] !== void 0)
41264
41779
  args.external_id__endWith = opts["externalId.endWith"];
41780
+ if (opts["externalId.isNull"] !== void 0)
41781
+ args.external_id__isNull = opts["externalId.isNull"];
41782
+ if (opts["externalId.isNotNull"] !== void 0)
41783
+ args.external_id__isNotNull = opts["externalId.isNotNull"];
41265
41784
  if (opts.billingEmail !== void 0)
41266
41785
  args.billing_email = opts.billingEmail;
41267
41786
  if (opts["billingEmail.not"] !== void 0)
41268
41787
  args.billing_email__not = opts["billingEmail.not"];
41269
- if (opts["billingEmail.isNull"] !== void 0)
41270
- args.billing_email__isNull = opts["billingEmail.isNull"];
41271
- if (opts["billingEmail.isNotNull"] !== void 0)
41272
- args.billing_email__isNotNull = opts["billingEmail.isNotNull"];
41273
41788
  if (opts["billingEmail.equals"] !== void 0)
41274
41789
  args.billing_email__equals = opts["billingEmail.equals"];
41275
41790
  if (opts["billingEmail.contains"] !== void 0)
@@ -41278,16 +41793,16 @@ Examples:
41278
41793
  args.billing_email__startsWith = opts["billingEmail.startsWith"];
41279
41794
  if (opts["billingEmail.endWith"] !== void 0)
41280
41795
  args.billing_email__endWith = opts["billingEmail.endWith"];
41796
+ if (opts["billingEmail.isNull"] !== void 0)
41797
+ args.billing_email__isNull = opts["billingEmail.isNull"];
41798
+ if (opts["billingEmail.isNotNull"] !== void 0)
41799
+ args.billing_email__isNotNull = opts["billingEmail.isNotNull"];
41281
41800
  if (opts.search !== void 0)
41282
41801
  args.search = opts.search;
41283
41802
  if (opts.taxId !== void 0)
41284
41803
  args.tax_id = opts.taxId;
41285
41804
  if (opts["taxId.not"] !== void 0)
41286
41805
  args.tax_id__not = opts["taxId.not"];
41287
- if (opts["taxId.isNull"] !== void 0)
41288
- args.tax_id__isNull = opts["taxId.isNull"];
41289
- if (opts["taxId.isNotNull"] !== void 0)
41290
- args.tax_id__isNotNull = opts["taxId.isNotNull"];
41291
41806
  if (opts["taxId.equals"] !== void 0)
41292
41807
  args.tax_id__equals = opts["taxId.equals"];
41293
41808
  if (opts["taxId.contains"] !== void 0)
@@ -41296,6 +41811,10 @@ Examples:
41296
41811
  args.tax_id__startsWith = opts["taxId.startsWith"];
41297
41812
  if (opts["taxId.endWith"] !== void 0)
41298
41813
  args.tax_id__endWith = opts["taxId.endWith"];
41814
+ if (opts["taxId.isNull"] !== void 0)
41815
+ args.tax_id__isNull = opts["taxId.isNull"];
41816
+ if (opts["taxId.isNotNull"] !== void 0)
41817
+ args.tax_id__isNotNull = opts["taxId.isNotNull"];
41299
41818
  if (opts.subscriptionStatus !== void 0)
41300
41819
  args.subscription_status = opts.subscriptionStatus;
41301
41820
  if (opts["subscriptionStatus.in"] !== void 0)
@@ -41304,10 +41823,6 @@ Examples:
41304
41823
  args.invoicing_entity_id = opts.invoicingEntityId;
41305
41824
  if (opts["invoicingEntityId.not"] !== void 0)
41306
41825
  args.invoicing_entity_id__not = opts["invoicingEntityId.not"];
41307
- if (opts["invoicingEntityId.isNull"] !== void 0)
41308
- args.invoicing_entity_id__isNull = opts["invoicingEntityId.isNull"];
41309
- if (opts["invoicingEntityId.isNotNull"] !== void 0)
41310
- args.invoicing_entity_id__isNotNull = opts["invoicingEntityId.isNotNull"];
41311
41826
  if (opts["invoicingEntityId.equals"] !== void 0)
41312
41827
  args.invoicing_entity_id__equals = opts["invoicingEntityId.equals"];
41313
41828
  if (opts["invoicingEntityId.contains"] !== void 0)
@@ -41330,10 +41845,6 @@ Examples:
41330
41845
  args.created_at = opts.createdAt;
41331
41846
  if (opts["createdAt.not"] !== void 0)
41332
41847
  args.created_at__not = opts["createdAt.not"];
41333
- if (opts["createdAt.isNull"] !== void 0)
41334
- args.created_at__isNull = opts["createdAt.isNull"];
41335
- if (opts["createdAt.isNotNull"] !== void 0)
41336
- args.created_at__isNotNull = opts["createdAt.isNotNull"];
41337
41848
  if (opts["createdAt.equals"] !== void 0)
41338
41849
  args.created_at__equals = opts["createdAt.equals"];
41339
41850
  if (opts["createdAt.lt"] !== void 0)
@@ -41348,10 +41859,6 @@ Examples:
41348
41859
  args.updated_at = opts.updatedAt;
41349
41860
  if (opts["updatedAt.not"] !== void 0)
41350
41861
  args.updated_at__not = opts["updatedAt.not"];
41351
- if (opts["updatedAt.isNull"] !== void 0)
41352
- args.updated_at__isNull = opts["updatedAt.isNull"];
41353
- if (opts["updatedAt.isNotNull"] !== void 0)
41354
- args.updated_at__isNotNull = opts["updatedAt.isNotNull"];
41355
41862
  if (opts["updatedAt.equals"] !== void 0)
41356
41863
  args.updated_at__equals = opts["updatedAt.equals"];
41357
41864
  if (opts["updatedAt.lt"] !== void 0)
@@ -41377,8 +41884,6 @@ Examples:
41377
41884
  "tax_id_status",
41378
41885
  "name",
41379
41886
  "name__not",
41380
- "name__isNull",
41381
- "name__isNotNull",
41382
41887
  "name__equals",
41383
41888
  "name__contains",
41384
41889
  "name__startsWith",
@@ -41389,51 +41894,49 @@ Examples:
41389
41894
  "status__in",
41390
41895
  "currency",
41391
41896
  "currency__not",
41392
- "currency__isNull",
41393
- "currency__isNotNull",
41394
41897
  "currency__equals",
41395
41898
  "currency__contains",
41396
41899
  "currency__startsWith",
41397
41900
  "currency__endWith",
41901
+ "currency__isNull",
41902
+ "currency__isNotNull",
41398
41903
  "country",
41399
41904
  "country__not",
41400
- "country__isNull",
41401
- "country__isNotNull",
41402
41905
  "country__equals",
41403
41906
  "country__contains",
41404
41907
  "country__startsWith",
41405
41908
  "country__endWith",
41909
+ "country__isNull",
41910
+ "country__isNotNull",
41406
41911
  "external_id",
41407
41912
  "external_id__not",
41408
- "external_id__isNull",
41409
- "external_id__isNotNull",
41410
41913
  "external_id__equals",
41411
41914
  "external_id__contains",
41412
41915
  "external_id__startsWith",
41413
41916
  "external_id__endWith",
41917
+ "external_id__isNull",
41918
+ "external_id__isNotNull",
41414
41919
  "billing_email",
41415
41920
  "billing_email__not",
41416
- "billing_email__isNull",
41417
- "billing_email__isNotNull",
41418
41921
  "billing_email__equals",
41419
41922
  "billing_email__contains",
41420
41923
  "billing_email__startsWith",
41421
41924
  "billing_email__endWith",
41925
+ "billing_email__isNull",
41926
+ "billing_email__isNotNull",
41422
41927
  "search",
41423
41928
  "tax_id",
41424
41929
  "tax_id__not",
41425
- "tax_id__isNull",
41426
- "tax_id__isNotNull",
41427
41930
  "tax_id__equals",
41428
41931
  "tax_id__contains",
41429
41932
  "tax_id__startsWith",
41430
41933
  "tax_id__endWith",
41934
+ "tax_id__isNull",
41935
+ "tax_id__isNotNull",
41431
41936
  "subscription_status",
41432
41937
  "subscription_status__in",
41433
41938
  "invoicing_entity_id",
41434
41939
  "invoicing_entity_id__not",
41435
- "invoicing_entity_id__isNull",
41436
- "invoicing_entity_id__isNotNull",
41437
41940
  "invoicing_entity_id__equals",
41438
41941
  "invoicing_entity_id__contains",
41439
41942
  "invoicing_entity_id__startsWith",
@@ -41445,8 +41948,6 @@ Examples:
41445
41948
  "integration_entity_id",
41446
41949
  "created_at",
41447
41950
  "created_at__not",
41448
- "created_at__isNull",
41449
- "created_at__isNotNull",
41450
41951
  "created_at__equals",
41451
41952
  "created_at__lt",
41452
41953
  "created_at__lte",
@@ -41454,8 +41955,6 @@ Examples:
41454
41955
  "created_at__gte",
41455
41956
  "updated_at",
41456
41957
  "updated_at__not",
41457
- "updated_at__isNull",
41458
- "updated_at__isNotNull",
41459
41958
  "updated_at__equals",
41460
41959
  "updated_at__lt",
41461
41960
  "updated_at__lte",
@@ -41492,13 +41991,13 @@ Customer type.
41492
41991
 
41493
41992
  - \`taxable\`: Taxes are automatically determined for the customer.
41494
41993
  - \`exempt\`: The customer is exempt from tax.
41495
- `).option("--registration-number <value>", `Customer registration number.`).option("--einvoicing-code <value>", `Customer electronic invoicing code, used to route their e-invoices to the relevant platform (e.g. Chorus Pro routing code or Peppol identifier).`).option("--external-id <value>", `ID of the customer in your system. This helps matching your customer with the one on Hyperline.`).option("--domain <value>", `Customer domain. If not defined, it is inferred from the billing email.`).option("--invoicing-entity-id <value>", `ID of the invoicing entity this customer will be attached to.`).option("--billing-address <json>", `Customer billing address.`).option("--shipping-address <json>", `Customer shipping address.`).option("--billing-email <value>", `Email to which all communications will be sent.`).option("--invoice-emails <json>", `Emails to which invoices will be sent (e.g. payer, finance team, accounting firm). If not defined, invoices will be sent to the \`billing_email\`; otherwise, they won't be sent to the \`billing_email\`.`).option("--language <value>", `Language used for invoices, emails, and hosted pages.`).option("--timezone <value>", `Customer timezone.`).option("--available-payment-methods <json>", `List of payment methods you allow your customer to pay with. You customer will be able to select one of them in their portal page and those will be the default options when creating a checkout session.`).option("--payment-method-type <value>", `Default payment method type used to pay subscriptions and one-off invoices.`).option("--bank-account <json>", `Custom bank account for the customer. If not defined and customer paying by bank transfer, the bank accounts configured in your account settings will be used.`).option("--custom-payment-delay <number>", `Custom payment terms in days. If not defined, the default one defined on the related invoicing entity will be used.`).option("--custom-payment-initiation-delay <number>", `Custom initiation delay in days before triggering payment. If not defined, the default one defined on the related invoicing entity will be used.`).option("--organisation-id <value>", `Parent organization ID to which the client is attached.`).option("--organisation-invoicing <value>", `
41994
+ `).option("--registration-number <value>", `Customer registration number.`).option("--einvoicing-code <value>", `Customer electronic invoicing code, used to route their e-invoices to the relevant platform (e.g. Chorus Pro routing code or Peppol identifier).`).option("--external-id <value>", `ID of the customer in your system. This helps matching your customer with the one on Hyperline. When external ID uniqueness is enforced for your account, two active customers cannot share the same external ID.`).option("--domain <value>", `Customer domain. If not defined, it is inferred from the billing email.`).option("--invoicing-entity-id <value>", `ID of the invoicing entity this customer will be attached to.`).option("--billing-address <json>", `Customer billing address.`).option("--shipping-address <json>", `Customer shipping address.`).option("--billing-email <value>", `Email to which all communications will be sent.`).option("--invoice-emails <json>", `Emails to which invoices will be sent (e.g. payer, finance team, accounting firm). If not defined, invoices will be sent to the \`billing_email\`; otherwise, they won't be sent to the \`billing_email\`.`).option("--language <value>", `Language used for invoices, emails, and hosted pages.`).option("--timezone <value>", `Customer timezone.`).option("--available-payment-methods <json>", `List of payment methods you allow your customer to pay with. You customer will be able to select one of them in their portal page and those will be the default options when creating a checkout session.`).option("--payment-method-type <value>", `Default payment method type used to pay subscriptions and one-off invoices.`).option("--bank-account <json>", `Custom bank account for the customer. If not defined and customer paying by bank transfer, the bank accounts configured in your account settings will be used.`).option("--custom-payment-delay <number>", `Custom payment terms in days. If not defined, the default one defined on the related invoicing entity will be used.`).option("--custom-payment-initiation-delay <number>", `Custom initiation delay in days before triggering payment. If not defined, the default one defined on the related invoicing entity will be used.`).option("--organisation-id <value>", `Parent organization ID to which the client is attached.`).option("--organisation-invoicing <value>", `
41496
41995
  How customer invoices are issued from the parent organisation.
41497
41996
 
41498
41997
  - \`none\`: Invoices will keep being issued from this customer.
41499
41998
  - \`every_invoice\`: Customer invoices will be issued from the organisation individually.
41500
41999
  - \`concat\`: Customer invoices will be grouped into a global parent invoice at a regular schedule (configured on the organisation).
41501
- `).option("--properties <json>", `Key/value pairs to store any metadata useful in your context.`).option("--custom-properties <json>", `A list of key value with the slug of the custom property as the key and the custom property value as value.`).option("--invoice-reminders-enabled <value>", `Indicates if invoice reminders are enabled for the customer.`).option("--force-invoice-draft <value>", `Indicates if customer invoices should be created as draft invoices.`).option("--price-book-id <value>", `Default price book ID assigned to the customer.`).option("--owner-id <value>", `ID of the Hyperline user responsible for this customer and targeted by customer agent notifications.`).option("--follower-ids <json>", `IDs of Hyperline users following this customer.`).addHelpText("after", `
42000
+ `).option("--properties <json>", `Key/value pairs to store any metadata useful in your context.`).option("--custom-properties <json>", `A list of key value with the slug of the custom property as the key and the custom property value as value.`).option("--invoice-reminders-enabled <value>", `Indicates if invoice reminders are enabled for the customer.`).option("--consolidated-invoicing-enabled <value>", `Indicates if consolidated invoicing is enabled for the customer. When enabled, subscription invoices billed on the same day are grouped into a single invoice. Cannot be disabled while invoices are pending consolidation.`).option("--force-invoice-draft <value>", `Indicates if customer invoices should be created as draft invoices.`).option("--price-book-id <value>", `Default price book ID assigned to the customer.`).option("--owner-id <value>", `ID of the Hyperline user responsible for this customer and targeted by customer agent notifications.`).option("--follower-ids <json>", `IDs of Hyperline users following this customer.`).addHelpText("after", `
41502
42001
  Examples:
41503
42002
  hyperline customers create-customer
41504
42003
  hyperline customers create-customer --name <name> --type <type>
@@ -41543,6 +42042,8 @@ Examples:
41543
42042
  args.organisation_invoicing = opts.organisationInvoicing;
41544
42043
  if (opts.invoiceRemindersEnabled !== void 0)
41545
42044
  args.invoice_reminders_enabled = opts.invoiceRemindersEnabled;
42045
+ if (opts.consolidatedInvoicingEnabled !== void 0)
42046
+ args.consolidated_invoicing_enabled = opts.consolidatedInvoicingEnabled;
41546
42047
  if (opts.forceInvoiceDraft !== void 0)
41547
42048
  args.force_invoice_draft = opts.forceInvoiceDraft;
41548
42049
  if (opts.priceBookId !== void 0)
@@ -41629,13 +42130,13 @@ Customer type.
41629
42130
 
41630
42131
  - \`taxable\`: Taxes are automatically determined for the customer.
41631
42132
  - \`exempt\`: The customer is exempt from tax.
41632
- `).option("--registration-number <value>", `Customer registration number.`).option("--is-government-affiliated", `Indicates if the customer is affiliated with a government entity.`).option("--einvoicing-code <value>", `Customer electronic invoicing code, used to route their e-invoices to the relevant platform (e.g. Chorus Pro routing code or Peppol identifier).`).option("--external-id <value>", `ID of the customer in your system. This helps matching your customer with the one on Hyperline.`).option("--domain <value>", `Customer domain. If not defined, it is inferred from the billing email.`).option("--invoicing-entity-id <value>", `ID of the invoicing entity this customer will be attached to.`).option("--billing-address <json>", `Customer billing address.`).option("--shipping-address <json>", `Customer shipping address.`).option("--billing-email <value>", `Email to which all communications will be sent.`).option("--invoice-emails <json>", `Emails to which invoices will be sent (e.g. payer, finance team, accounting firm). If not defined, invoices will be sent to the \`billing_email\`; otherwise, they won't be sent to the \`billing_email\`.`).option("--language <value>", `Language used for invoices, emails, and hosted pages.`).option("--timezone <value>", `Customer timezone.`).option("--available-payment-methods <json>", `List of payment methods you allow your customer to pay with. You customer will be able to select one of them in their portal page and those will be the default options when creating a checkout session.`).option("--payment-method-type <value>", `Default payment method type used to pay subscriptions and one-off invoices.`).option("--payment-method-id <value>", `ID of the default payment method of the customer. Only applies to card and direct debit.`).option("--bank-account <json>", `Custom bank account for the customer. If not defined and customer paying by bank transfer, the bank accounts configured in your account settings will be used.`).option("--custom-payment-delay <number>", `Custom payment terms in days. If not defined, the default one defined on the related invoicing entity will be used.`).option("--custom-payment-initiation-delay <number>", `Custom initiation delay in days before triggering payment. If not defined, the default one defined on the related invoicing entity will be used.`).option("--organisation-id <value>", `Parent organization ID to which the client is attached.`).option("--organisation-invoicing <value>", `
42133
+ `).option("--registration-number <value>", `Customer registration number.`).option("--is-government-affiliated", `Indicates if the customer is affiliated with a government entity.`).option("--einvoicing-code <value>", `Customer electronic invoicing code, used to route their e-invoices to the relevant platform (e.g. Chorus Pro routing code or Peppol identifier).`).option("--external-id <value>", `ID of the customer in your system. This helps matching your customer with the one on Hyperline. When external ID uniqueness is enforced for your account, two active customers cannot share the same external ID.`).option("--domain <value>", `Customer domain. If not defined, it is inferred from the billing email.`).option("--invoicing-entity-id <value>", `ID of the invoicing entity this customer will be attached to.`).option("--billing-address <json>", `Customer billing address.`).option("--shipping-address <json>", `Customer shipping address.`).option("--billing-email <value>", `Email to which all communications will be sent.`).option("--invoice-emails <json>", `Emails to which invoices will be sent (e.g. payer, finance team, accounting firm). If not defined, invoices will be sent to the \`billing_email\`; otherwise, they won't be sent to the \`billing_email\`.`).option("--language <value>", `Language used for invoices, emails, and hosted pages.`).option("--timezone <value>", `Customer timezone.`).option("--available-payment-methods <json>", `List of payment methods you allow your customer to pay with. You customer will be able to select one of them in their portal page and those will be the default options when creating a checkout session.`).option("--payment-method-type <value>", `Default payment method type used to pay subscriptions and one-off invoices.`).option("--payment-method-id <value>", `ID of the default payment method of the customer. Only applies to card and direct debit.`).option("--bank-account <json>", `Custom bank account for the customer. If not defined and customer paying by bank transfer, the bank accounts configured in your account settings will be used.`).option("--custom-payment-delay <number>", `Custom payment terms in days. If not defined, the default one defined on the related invoicing entity will be used.`).option("--custom-payment-initiation-delay <number>", `Custom initiation delay in days before triggering payment. If not defined, the default one defined on the related invoicing entity will be used.`).option("--organisation-id <value>", `Parent organization ID to which the client is attached.`).option("--organisation-invoicing <value>", `
41633
42134
  How customer invoices are issued from the parent organisation.
41634
42135
 
41635
42136
  - \`none\`: Invoices will keep being issued from this customer.
41636
42137
  - \`every_invoice\`: Customer invoices will be issued from the organisation individually.
41637
42138
  - \`concat\`: Customer invoices will be grouped into a global parent invoice at a regular schedule (configured on the organisation).
41638
- `).option("--properties <json>", `Key/value pairs to store any metadata useful in your context.`).option("--custom-properties <json>", `A list of key value with the slug of the custom property as the key and the custom property value as value.`).option("--invoice-reminders-enabled <value>", `Indicates if invoice reminders are enabled for the customer.`).option("--force-invoice-draft <value>", `Indicates if customer invoices should be created as draft invoices.`).option("--price-book-id <value>", `Default price book ID assigned to the customer.`).option("--owner-id <value>", `ID of the Hyperline user responsible for this customer and targeted by customer agent notifications.`).option("--follower-ids <json>", `IDs of Hyperline users following this customer.`).addHelpText("after", `
42139
+ `).option("--properties <json>", `Key/value pairs to store any metadata useful in your context.`).option("--custom-properties <json>", `A list of key value with the slug of the custom property as the key and the custom property value as value.`).option("--invoice-reminders-enabled <value>", `Indicates if invoice reminders are enabled for the customer.`).option("--consolidated-invoicing-enabled <value>", `Indicates if consolidated invoicing is enabled for the customer. When enabled, subscription invoices billed on the same day are grouped into a single invoice. Cannot be disabled while invoices are pending consolidation.`).option("--force-invoice-draft <value>", `Indicates if customer invoices should be created as draft invoices.`).option("--price-book-id <value>", `Default price book ID assigned to the customer.`).option("--owner-id <value>", `ID of the Hyperline user responsible for this customer and targeted by customer agent notifications.`).option("--follower-ids <json>", `IDs of Hyperline users following this customer.`).addHelpText("after", `
41639
42140
  Examples:
41640
42141
  hyperline customers update --id <id>
41641
42142
  hyperline customers update --id <id> --name <name> --type <type>
@@ -41684,6 +42185,8 @@ Examples:
41684
42185
  args.organisation_invoicing = opts.organisationInvoicing;
41685
42186
  if (opts.invoiceRemindersEnabled !== void 0)
41686
42187
  args.invoice_reminders_enabled = opts.invoiceRemindersEnabled;
42188
+ if (opts.consolidatedInvoicingEnabled !== void 0)
42189
+ args.consolidated_invoicing_enabled = opts.consolidatedInvoicingEnabled;
41687
42190
  if (opts.forceInvoiceDraft !== void 0)
41688
42191
  args.force_invoice_draft = opts.forceInvoiceDraft;
41689
42192
  if (opts.priceBookId !== void 0)
@@ -41915,7 +42418,13 @@ Examples:
41915
42418
  queryParamKeys: []
41916
42419
  });
41917
42420
  });
41918
- resource.command("create-customer-address").description(`Create a shipping address with type shipping; billing creation is rejected because a customer can have at most one billing address, managed through the customer endpoint.`).requiredOption("--customer-id <value>", `customerId parameter`).requiredOption("--type <value>", `Only shipping addresses can be created here. A customer has at most one active billing address, managed through the customer or by updating its address ID.`).option("--name <value>", `Address name.`).option("--line1 <value>", `Address first line.`).option("--line2 <value>", `Address second line (optional).`).option("--city <value>", `Address city.`).option("--zip <value>", `Address ZIP code.`).option("--state <value>", `Only for US country. Second part of subdivision code in ISO format. See [ISO 3166-2:US](https://en.wikipedia.org/wiki/ISO_3166-2:US).`).option("--country <value>", `Two-letter country code in ISO format. See [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2).`).option("--tax-id <value>", `Tax ID override for a shipping address. Null or blank inherits the customer's tax ID; omission on update preserves the override. Billing addresses cannot have an override.`).addHelpText("after", `
42421
+ resource.command("create-customer-address").description(`Create a shipping address with type shipping; billing creation is rejected because a customer can have at most one billing address, managed through the customer endpoint.`).requiredOption("--customer-id <value>", `customerId parameter`).requiredOption("--type <value>", `Only shipping addresses can be created here. A customer has at most one active billing address, managed through the customer or by updating its address ID.`).option("--name <value>", `Address name.`).option("--line1 <value>", `Address first line.`).option("--line2 <value>", `Address second line (optional).`).option("--city <value>", `Address city.`).option("--zip <value>", `Address ZIP code.`).option("--state <value>", `State or province of the address, stored as its code (the second part of the ISO 3166-2 code, e.g. \`CA\` for \`US-CA\`) for:
42422
+ - United States: state, see [ISO 3166-2:US](https://en.wikipedia.org/wiki/ISO_3166-2:US)
42423
+ - Canada: province or territory, see [ISO 3166-2:CA](https://en.wikipedia.org/wiki/ISO_3166-2:CA)
42424
+ - Italy: province, see [ISO 3166-2:IT](https://en.wikipedia.org/wiki/ISO_3166-2:IT)
42425
+ - Brazil: state, see [ISO 3166-2:BR](https://en.wikipedia.org/wiki/ISO_3166-2:BR)
42426
+
42427
+ A code or a name is accepted (e.g. \`ON\` or \`Ontario\`); a value that matches neither for these countries is rejected. For any other country, the state is ignored.`).option("--country <value>", `Two-letter country code in ISO format. See [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2).`).option("--tax-id <value>", `Tax ID override for a shipping address. Null or blank inherits the customer's tax ID; omission on update preserves the override. Billing addresses cannot have an override.`).addHelpText("after", `
41919
42428
  Examples:
41920
42429
  hyperline customers-address create-customer-address --customer-id <customerId> --type <type>
41921
42430
  hyperline customers-address create-customer-address --customer-id <customerId> --type <type> --name <name> --line1 <line1>
@@ -41953,7 +42462,13 @@ Examples:
41953
42462
  queryParamKeys: []
41954
42463
  });
41955
42464
  });
41956
- resource.command("update-customer-address").description(`Update a billing or shipping address by ID; billing changes also update the customer billing-address projection.`).requiredOption("--customer-id <value>", `customerId parameter`).requiredOption("--address-id <value>", `addressId parameter`).option("--name <value>", `Address name.`).option("--line1 <value>", `Address first line.`).option("--line2 <value>", `Address second line (optional).`).option("--city <value>", `Address city.`).option("--zip <value>", `Address ZIP code.`).option("--state <value>", `Only for US country. Second part of subdivision code in ISO format. See [ISO 3166-2:US](https://en.wikipedia.org/wiki/ISO_3166-2:US).`).option("--country <value>", `Two-letter country code in ISO format. See [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2).`).option("--tax-id <value>", `Tax ID override for a shipping address. Null or blank inherits the customer's tax ID; omission on update preserves the override. Billing addresses cannot have an override.`).addHelpText("after", `
42465
+ resource.command("update-customer-address").description(`Update a billing or shipping address by ID; billing changes also update the customer billing-address projection.`).requiredOption("--customer-id <value>", `customerId parameter`).requiredOption("--address-id <value>", `addressId parameter`).option("--name <value>", `Address name.`).option("--line1 <value>", `Address first line.`).option("--line2 <value>", `Address second line (optional).`).option("--city <value>", `Address city.`).option("--zip <value>", `Address ZIP code.`).option("--state <value>", `State or province of the address, stored as its code (the second part of the ISO 3166-2 code, e.g. \`CA\` for \`US-CA\`) for:
42466
+ - United States: state, see [ISO 3166-2:US](https://en.wikipedia.org/wiki/ISO_3166-2:US)
42467
+ - Canada: province or territory, see [ISO 3166-2:CA](https://en.wikipedia.org/wiki/ISO_3166-2:CA)
42468
+ - Italy: province, see [ISO 3166-2:IT](https://en.wikipedia.org/wiki/ISO_3166-2:IT)
42469
+ - Brazil: state, see [ISO 3166-2:BR](https://en.wikipedia.org/wiki/ISO_3166-2:BR)
42470
+
42471
+ A code or a name is accepted (e.g. \`ON\` or \`Ontario\`); a value that matches neither for these countries is rejected. For any other country, the state is ignored.`).option("--country <value>", `Two-letter country code in ISO format. See [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2).`).option("--tax-id <value>", `Tax ID override for a shipping address. Null or blank inherits the customer's tax ID; omission on update preserves the override. Billing addresses cannot have an override.`).addHelpText("after", `
41957
42472
  Examples:
41958
42473
  hyperline customers-address update-customer-address --customer-id <customerId> --address-id <addressId>
41959
42474
  hyperline customers-address update-customer-address --customer-id <customerId> --address-id <addressId> --name <name> --line1 <line1>
@@ -42024,7 +42539,7 @@ Examples:
42024
42539
  // build/commands/generated/customers-credits.js
42025
42540
  function registerCustomers_CreditsCommands(parent) {
42026
42541
  const resource = parent.command("customers-credits").description("Manage customers > credits");
42027
- 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", `
42542
+ 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", `
42028
42543
  Examples:
42029
42544
  hyperline customers-credits list
42030
42545
  hyperline customers-credits list --take <take> --product-id <product_id>`).action(async (opts) => {
@@ -42038,10 +42553,6 @@ Examples:
42038
42553
  args.product_id = opts.productId;
42039
42554
  if (opts["productId.not"] !== void 0)
42040
42555
  args.product_id__not = opts["productId.not"];
42041
- if (opts["productId.isNull"] !== void 0)
42042
- args.product_id__isNull = opts["productId.isNull"];
42043
- if (opts["productId.isNotNull"] !== void 0)
42044
- args.product_id__isNotNull = opts["productId.isNotNull"];
42045
42556
  if (opts["productId.equals"] !== void 0)
42046
42557
  args.product_id__equals = opts["productId.equals"];
42047
42558
  if (opts["productId.contains"] !== void 0)
@@ -42054,10 +42565,6 @@ Examples:
42054
42565
  args.customer_id = opts.customerId;
42055
42566
  if (opts["customerId.not"] !== void 0)
42056
42567
  args.customer_id__not = opts["customerId.not"];
42057
- if (opts["customerId.isNull"] !== void 0)
42058
- args.customer_id__isNull = opts["customerId.isNull"];
42059
- if (opts["customerId.isNotNull"] !== void 0)
42060
- args.customer_id__isNotNull = opts["customerId.isNotNull"];
42061
42568
  if (opts["customerId.equals"] !== void 0)
42062
42569
  args.customer_id__equals = opts["customerId.equals"];
42063
42570
  if (opts["customerId.contains"] !== void 0)
@@ -42070,10 +42577,6 @@ Examples:
42070
42577
  args.updated_at = opts.updatedAt;
42071
42578
  if (opts["updatedAt.not"] !== void 0)
42072
42579
  args.updated_at__not = opts["updatedAt.not"];
42073
- if (opts["updatedAt.isNull"] !== void 0)
42074
- args.updated_at__isNull = opts["updatedAt.isNull"];
42075
- if (opts["updatedAt.isNotNull"] !== void 0)
42076
- args.updated_at__isNotNull = opts["updatedAt.isNotNull"];
42077
42580
  if (opts["updatedAt.equals"] !== void 0)
42078
42581
  args.updated_at__equals = opts["updatedAt.equals"];
42079
42582
  if (opts["updatedAt.lt"] !== void 0)
@@ -42097,24 +42600,18 @@ Examples:
42097
42600
  "skip",
42098
42601
  "product_id",
42099
42602
  "product_id__not",
42100
- "product_id__isNull",
42101
- "product_id__isNotNull",
42102
42603
  "product_id__equals",
42103
42604
  "product_id__contains",
42104
42605
  "product_id__startsWith",
42105
42606
  "product_id__endWith",
42106
42607
  "customer_id",
42107
42608
  "customer_id__not",
42108
- "customer_id__isNull",
42109
- "customer_id__isNotNull",
42110
42609
  "customer_id__equals",
42111
42610
  "customer_id__contains",
42112
42611
  "customer_id__startsWith",
42113
42612
  "customer_id__endWith",
42114
42613
  "updated_at",
42115
42614
  "updated_at__not",
42116
- "updated_at__isNull",
42117
- "updated_at__isNotNull",
42118
42615
  "updated_at__equals",
42119
42616
  "updated_at__lt",
42120
42617
  "updated_at__lte",
@@ -42387,6 +42884,88 @@ Examples:
42387
42884
  });
42388
42885
  }
42389
42886
 
42887
+ // build/commands/generated/customers-features.js
42888
+ function registerCustomers_FeaturesCommands(parent) {
42889
+ const resource = parent.command("customers-features").description("Manage customers > features");
42890
+ resource.command("resolve-customer-features").description(`Resolve feature values for a customer.`).requiredOption("--id <value>", `id parameter`).option("--at <value>", `Resolution date.`).addHelpText("after", `
42891
+ Examples:
42892
+ hyperline customers-features resolve-customer-features --id <id>
42893
+ hyperline customers-features resolve-customer-features --id <id> --at <at>`).action(async (opts) => {
42894
+ const ctx = resource.parent?.opts()._ctx;
42895
+ if (!ctx) {
42896
+ process.stderr.write("Error: Not authenticated\n");
42897
+ process.exit(1);
42898
+ }
42899
+ const args = {};
42900
+ if (opts.id !== void 0)
42901
+ args.id = opts.id;
42902
+ if (opts.at !== void 0)
42903
+ args.at = opts.at;
42904
+ await ctx.execute({
42905
+ method: "GET",
42906
+ path: "/v1/customers/{id}/features",
42907
+ args,
42908
+ queryParamKeys: ["at"]
42909
+ });
42910
+ });
42911
+ 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", `
42912
+ Examples:
42913
+ hyperline customers-features set-customer-feature --id <id> --code <code> --value
42914
+ hyperline customers-features set-customer-feature --id <id> --code <code> --value --reason <reason> --expires-at <expires_at>
42915
+ hyperline customers-features set-customer-feature --id <id> --code <code> --value --output json`).action(async (opts) => {
42916
+ const ctx = resource.parent?.opts()._ctx;
42917
+ if (!ctx) {
42918
+ process.stderr.write("Error: Not authenticated\n");
42919
+ process.exit(1);
42920
+ }
42921
+ const args = {};
42922
+ if (opts.id !== void 0)
42923
+ args.id = opts.id;
42924
+ if (opts.code !== void 0)
42925
+ args.code = opts.code;
42926
+ if (opts.reason !== void 0)
42927
+ args.reason = opts.reason;
42928
+ if (opts.expiresAt !== void 0)
42929
+ args.expires_at = opts.expiresAt;
42930
+ if (opts.value !== void 0)
42931
+ args.value = true;
42932
+ await ctx.execute({
42933
+ method: "PUT",
42934
+ path: "/v1/customers/{id}/features/{code}",
42935
+ args,
42936
+ queryParamKeys: []
42937
+ });
42938
+ });
42939
+ 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", `
42940
+ Examples:
42941
+ hyperline customers-features delete-customer-feature --id <id> --code <code>
42942
+ hyperline customers-features delete-customer-feature --id <id> --code <code> --output json`).action(async (opts) => {
42943
+ const ctx = resource.parent?.opts()._ctx;
42944
+ if (!ctx) {
42945
+ process.stderr.write("Error: Not authenticated\n");
42946
+ process.exit(1);
42947
+ }
42948
+ const args = {};
42949
+ if (opts.id !== void 0)
42950
+ args.id = opts.id;
42951
+ if (opts.code !== void 0)
42952
+ args.code = opts.code;
42953
+ if (!opts.yes) {
42954
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
42955
+ if (!confirmed) {
42956
+ process.stdout.write("Aborted.\n");
42957
+ return;
42958
+ }
42959
+ }
42960
+ await ctx.execute({
42961
+ method: "DELETE",
42962
+ path: "/v1/customers/{id}/features/{code}",
42963
+ args,
42964
+ queryParamKeys: []
42965
+ });
42966
+ });
42967
+ }
42968
+
42390
42969
  // build/commands/generated/customers-payment-methods.js
42391
42970
  function registerCustomers_Payment_MethodsCommands(parent) {
42392
42971
  const resource = parent.command("customers-payment-methods").description("Manage customers > payment methods");
@@ -42806,30 +43385,246 @@ Examples:
42806
43385
  process.stderr.write("Error: Not authenticated\n");
42807
43386
  process.exit(1);
42808
43387
  }
42809
- const args = {};
42810
- if (opts.exportId !== void 0)
42811
- args.exportId = opts.exportId;
43388
+ const args = {};
43389
+ if (opts.exportId !== void 0)
43390
+ args.exportId = opts.exportId;
43391
+ await ctx.execute({
43392
+ method: "GET",
43393
+ path: "/v1/exports/{exportId}",
43394
+ args,
43395
+ queryParamKeys: []
43396
+ });
43397
+ });
43398
+ resource.command("download").description(`Download the file for a completed export as a downloadable file. The HTTP client must follow redirects. Supports CSV, JSON, XLSX and ZIP formats depending on the export type.`).requiredOption("--export-id <value>", `exportId parameter`).addHelpText("after", `
43399
+ Examples:
43400
+ hyperline exports download --export-id <exportId>`).action(async (opts) => {
43401
+ const ctx = resource.parent?.opts()._ctx;
43402
+ if (!ctx) {
43403
+ process.stderr.write("Error: Not authenticated\n");
43404
+ process.exit(1);
43405
+ }
43406
+ const args = {};
43407
+ if (opts.exportId !== void 0)
43408
+ args.exportId = opts.exportId;
43409
+ await ctx.execute({
43410
+ method: "GET",
43411
+ path: "/v2/exports/{exportId}/download",
43412
+ args,
43413
+ queryParamKeys: []
43414
+ });
43415
+ });
43416
+ }
43417
+
43418
+ // build/commands/generated/features.js
43419
+ function registerFeaturesCommands(parent) {
43420
+ const resource = parent.command("features").description("Manage features");
43421
+ 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", `
43422
+ Examples:
43423
+ hyperline features list
43424
+ hyperline features list --take <take> --code <code>`).action(async (opts) => {
43425
+ const ctx = resource.parent?.opts()._ctx;
43426
+ if (!ctx) {
43427
+ process.stderr.write("Error: Not authenticated\n");
43428
+ process.exit(1);
43429
+ }
43430
+ const args = {};
43431
+ if (opts.code !== void 0)
43432
+ args.code = opts.code;
43433
+ if (opts["code.not"] !== void 0)
43434
+ args.code__not = opts["code.not"];
43435
+ if (opts["code.equals"] !== void 0)
43436
+ args.code__equals = opts["code.equals"];
43437
+ if (opts["code.contains"] !== void 0)
43438
+ args.code__contains = opts["code.contains"];
43439
+ if (opts["code.startsWith"] !== void 0)
43440
+ args.code__startsWith = opts["code.startsWith"];
43441
+ if (opts["code.endWith"] !== void 0)
43442
+ args.code__endWith = opts["code.endWith"];
43443
+ if (opts.name !== void 0)
43444
+ args.name = opts.name;
43445
+ if (opts["name.not"] !== void 0)
43446
+ args.name__not = opts["name.not"];
43447
+ if (opts["name.equals"] !== void 0)
43448
+ args.name__equals = opts["name.equals"];
43449
+ if (opts["name.contains"] !== void 0)
43450
+ args.name__contains = opts["name.contains"];
43451
+ if (opts["name.startsWith"] !== void 0)
43452
+ args.name__startsWith = opts["name.startsWith"];
43453
+ if (opts["name.endWith"] !== void 0)
43454
+ args.name__endWith = opts["name.endWith"];
43455
+ if (opts.status !== void 0)
43456
+ args.status = opts.status;
43457
+ if (opts["status.in"] !== void 0)
43458
+ args.status__in = opts["status.in"];
43459
+ if (opts.search !== void 0)
43460
+ args.search = opts.search;
43461
+ if (opts.take !== void 0)
43462
+ args.take = Number(opts.take);
43463
+ if (opts.skip !== void 0)
43464
+ args.skip = Number(opts.skip);
43465
+ await ctx.execute({
43466
+ method: "GET",
43467
+ path: "/v1/features",
43468
+ args,
43469
+ queryParamKeys: [
43470
+ "take",
43471
+ "skip",
43472
+ "code",
43473
+ "code__not",
43474
+ "code__equals",
43475
+ "code__contains",
43476
+ "code__startsWith",
43477
+ "code__endWith",
43478
+ "name",
43479
+ "name__not",
43480
+ "name__equals",
43481
+ "name__contains",
43482
+ "name__startsWith",
43483
+ "name__endWith",
43484
+ "status",
43485
+ "status__in",
43486
+ "search"
43487
+ ]
43488
+ });
43489
+ });
43490
+ 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", `
43491
+ Examples:
43492
+ hyperline features create --code <code> --name <name> --value-type <value_type> --default-value
43493
+ hyperline features create --code <code> --name <name> --value-type <value_type> --default-value --description <description> --resolution-strategy <resolution_strategy>
43494
+ hyperline features create --code <code> --name <name> --value-type <value_type> --default-value --output json`).action(async (opts) => {
43495
+ const ctx = resource.parent?.opts()._ctx;
43496
+ if (!ctx) {
43497
+ process.stderr.write("Error: Not authenticated\n");
43498
+ process.exit(1);
43499
+ }
43500
+ const args = {};
43501
+ if (opts.code !== void 0)
43502
+ args.code = opts.code;
43503
+ if (opts.name !== void 0)
43504
+ args.name = opts.name;
43505
+ if (opts.description !== void 0)
43506
+ args.description = opts.description;
43507
+ if (opts.valueType !== void 0)
43508
+ args.value_type = opts.valueType;
43509
+ if (opts.resolutionStrategy !== void 0)
43510
+ args.resolution_strategy = opts.resolutionStrategy;
43511
+ if (opts.defaultValue !== void 0)
43512
+ args.default_value = true;
43513
+ await ctx.execute({
43514
+ method: "POST",
43515
+ path: "/v1/features",
43516
+ args,
43517
+ queryParamKeys: []
43518
+ });
43519
+ });
43520
+ resource.command("get").description(`Retrieve a feature definition.`).requiredOption("--code <value>", `code parameter`).addHelpText("after", `
43521
+ Examples:
43522
+ hyperline features get --code <code>`).action(async (opts) => {
43523
+ const ctx = resource.parent?.opts()._ctx;
43524
+ if (!ctx) {
43525
+ process.stderr.write("Error: Not authenticated\n");
43526
+ process.exit(1);
43527
+ }
43528
+ const args = {};
43529
+ if (opts.code !== void 0)
43530
+ args.code = opts.code;
43531
+ await ctx.execute({
43532
+ method: "GET",
43533
+ path: "/v1/features/{code}",
43534
+ args,
43535
+ queryParamKeys: []
43536
+ });
43537
+ });
43538
+ 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", `
43539
+ Examples:
43540
+ hyperline features update --code <code>
43541
+ hyperline features update --code <code> --name <name> --description <description>
43542
+ hyperline features update --code <code> --output json`).action(async (opts) => {
43543
+ const ctx = resource.parent?.opts()._ctx;
43544
+ if (!ctx) {
43545
+ process.stderr.write("Error: Not authenticated\n");
43546
+ process.exit(1);
43547
+ }
43548
+ const args = {};
43549
+ if (opts.code !== void 0)
43550
+ args.code = opts.code;
43551
+ if (opts.name !== void 0)
43552
+ args.name = opts.name;
43553
+ if (opts.description !== void 0)
43554
+ args.description = opts.description;
43555
+ if (opts.valueType !== void 0)
43556
+ args.value_type = opts.valueType;
43557
+ if (opts.resolutionStrategy !== void 0)
43558
+ args.resolution_strategy = opts.resolutionStrategy;
43559
+ if (opts.defaultValue !== void 0)
43560
+ args.default_value = true;
43561
+ await ctx.execute({
43562
+ method: "PUT",
43563
+ path: "/v1/features/{code}",
43564
+ args,
43565
+ queryParamKeys: []
43566
+ });
43567
+ });
43568
+ resource.command("archive").description(`Archive a feature definition.`).requiredOption("--code <value>", `code parameter`).addHelpText("after", `
43569
+ Examples:
43570
+ hyperline features archive --code <code>
43571
+ hyperline features archive --code <code> --output json`).action(async (opts) => {
43572
+ const ctx = resource.parent?.opts()._ctx;
43573
+ if (!ctx) {
43574
+ process.stderr.write("Error: Not authenticated\n");
43575
+ process.exit(1);
43576
+ }
43577
+ const args = {};
43578
+ if (opts.code !== void 0)
43579
+ args.code = opts.code;
43580
+ await ctx.execute({
43581
+ method: "PUT",
43582
+ path: "/v1/features/{code}/archive",
43583
+ args,
43584
+ queryParamKeys: []
43585
+ });
43586
+ });
43587
+ 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", `
43588
+ Examples:
43589
+ hyperline features delete --code <code>
43590
+ hyperline features delete --code <code> --output json`).action(async (opts) => {
43591
+ const ctx = resource.parent?.opts()._ctx;
43592
+ if (!ctx) {
43593
+ process.stderr.write("Error: Not authenticated\n");
43594
+ process.exit(1);
43595
+ }
43596
+ const args = {};
43597
+ if (opts.code !== void 0)
43598
+ args.code = opts.code;
43599
+ if (!opts.yes) {
43600
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
43601
+ if (!confirmed) {
43602
+ process.stdout.write("Aborted.\n");
43603
+ return;
43604
+ }
43605
+ }
42812
43606
  await ctx.execute({
42813
- method: "GET",
42814
- path: "/v1/exports/{exportId}",
43607
+ method: "DELETE",
43608
+ path: "/v1/features/{code}",
42815
43609
  args,
42816
43610
  queryParamKeys: []
42817
43611
  });
42818
43612
  });
42819
- resource.command("download").description(`Download the file for a completed export as a downloadable file. The HTTP client must follow redirects. Supports CSV, JSON, XLSX and ZIP formats depending on the export type.`).requiredOption("--export-id <value>", `exportId parameter`).addHelpText("after", `
43613
+ resource.command("unarchive").description(`Unarchive a feature definition.`).requiredOption("--code <value>", `code parameter`).addHelpText("after", `
42820
43614
  Examples:
42821
- hyperline exports download --export-id <exportId>`).action(async (opts) => {
43615
+ hyperline features unarchive --code <code>
43616
+ hyperline features unarchive --code <code> --output json`).action(async (opts) => {
42822
43617
  const ctx = resource.parent?.opts()._ctx;
42823
43618
  if (!ctx) {
42824
43619
  process.stderr.write("Error: Not authenticated\n");
42825
43620
  process.exit(1);
42826
43621
  }
42827
43622
  const args = {};
42828
- if (opts.exportId !== void 0)
42829
- args.exportId = opts.exportId;
43623
+ if (opts.code !== void 0)
43624
+ args.code = opts.code;
42830
43625
  await ctx.execute({
42831
- method: "GET",
42832
- path: "/v2/exports/{exportId}/download",
43626
+ method: "PUT",
43627
+ path: "/v1/features/{code}/unarchive",
42833
43628
  args,
42834
43629
  queryParamKeys: []
42835
43630
  });
@@ -42857,7 +43652,7 @@ Examples:
42857
43652
  queryParamKeys: []
42858
43653
  });
42859
43654
  });
42860
- 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", `
43655
+ 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", `
42861
43656
  Examples:
42862
43657
  hyperline files list
42863
43658
  hyperline files list --take <take> --name <name>`).action(async (opts) => {
@@ -42871,10 +43666,6 @@ Examples:
42871
43666
  args.name = opts.name;
42872
43667
  if (opts["name.not"] !== void 0)
42873
43668
  args.name__not = opts["name.not"];
42874
- if (opts["name.isNull"] !== void 0)
42875
- args.name__isNull = opts["name.isNull"];
42876
- if (opts["name.isNotNull"] !== void 0)
42877
- args.name__isNotNull = opts["name.isNotNull"];
42878
43669
  if (opts["name.equals"] !== void 0)
42879
43670
  args.name__equals = opts["name.equals"];
42880
43671
  if (opts["name.contains"] !== void 0)
@@ -42887,10 +43678,6 @@ Examples:
42887
43678
  args.customer_id = opts.customerId;
42888
43679
  if (opts["customerId.not"] !== void 0)
42889
43680
  args.customer_id__not = opts["customerId.not"];
42890
- if (opts["customerId.isNull"] !== void 0)
42891
- args.customer_id__isNull = opts["customerId.isNull"];
42892
- if (opts["customerId.isNotNull"] !== void 0)
42893
- args.customer_id__isNotNull = opts["customerId.isNotNull"];
42894
43681
  if (opts["customerId.equals"] !== void 0)
42895
43682
  args.customer_id__equals = opts["customerId.equals"];
42896
43683
  if (opts["customerId.contains"] !== void 0)
@@ -42899,6 +43686,10 @@ Examples:
42899
43686
  args.customer_id__startsWith = opts["customerId.startsWith"];
42900
43687
  if (opts["customerId.endWith"] !== void 0)
42901
43688
  args.customer_id__endWith = opts["customerId.endWith"];
43689
+ if (opts["customerId.isNull"] !== void 0)
43690
+ args.customer_id__isNull = opts["customerId.isNull"];
43691
+ if (opts["customerId.isNotNull"] !== void 0)
43692
+ args.customer_id__isNotNull = opts["customerId.isNotNull"];
42902
43693
  if (opts.take !== void 0)
42903
43694
  args.take = Number(opts.take);
42904
43695
  if (opts.skip !== void 0)
@@ -42912,27 +43703,25 @@ Examples:
42912
43703
  "skip",
42913
43704
  "name",
42914
43705
  "name__not",
42915
- "name__isNull",
42916
- "name__isNotNull",
42917
43706
  "name__equals",
42918
43707
  "name__contains",
42919
43708
  "name__startsWith",
42920
43709
  "name__endWith",
42921
43710
  "customer_id",
42922
43711
  "customer_id__not",
42923
- "customer_id__isNull",
42924
- "customer_id__isNotNull",
42925
43712
  "customer_id__equals",
42926
43713
  "customer_id__contains",
42927
43714
  "customer_id__startsWith",
42928
- "customer_id__endWith"
43715
+ "customer_id__endWith",
43716
+ "customer_id__isNull",
43717
+ "customer_id__isNotNull"
42929
43718
  ]
42930
43719
  });
42931
43720
  });
42932
- 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", `
43721
+ 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.`).requiredOption("--file <path>", `Path of the local file to upload (sends a multipart request)`).addHelpText("after", `
42933
43722
  Examples:
42934
- hyperline files create --name <name> --customer-id <customer_id>
42935
- hyperline files create --name <name> --customer-id <customer_id> --output json`).action(async (opts) => {
43723
+ hyperline files create --name <name> --customer-id <customer_id> --file <path>
43724
+ hyperline files create --name <name> --customer-id <customer_id> --file <path> --output json`).action(async (opts) => {
42936
43725
  const ctx = resource.parent?.opts()._ctx;
42937
43726
  if (!ctx) {
42938
43727
  process.stderr.write("Error: Not authenticated\n");
@@ -42943,11 +43732,15 @@ Examples:
42943
43732
  args.name = opts.name;
42944
43733
  if (opts.customerId !== void 0)
42945
43734
  args.customer_id = opts.customerId;
43735
+ const files = {};
43736
+ if (opts.file !== void 0)
43737
+ files.file = [opts.file].flat();
42946
43738
  await ctx.execute({
42947
43739
  method: "POST",
42948
43740
  path: "/v1/files",
42949
43741
  args,
42950
- queryParamKeys: []
43742
+ queryParamKeys: [],
43743
+ files
42951
43744
  });
42952
43745
  });
42953
43746
  resource.command("delete").description(`Permanently delete a file by ID.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
@@ -42981,7 +43774,7 @@ Examples:
42981
43774
  // build/commands/generated/invoices.js
42982
43775
  function registerInvoicesCommands(parent) {
42983
43776
  const resource = parent.command("invoices").description("Manage invoices");
42984
- 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", `
43777
+ 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", `
42985
43778
  Examples:
42986
43779
  hyperline invoices list
42987
43780
  hyperline invoices list --limit <limit> --cursor <cursor>`).action(async (opts) => {
@@ -43011,10 +43804,6 @@ Examples:
43011
43804
  args.customer_id = opts.customerId;
43012
43805
  if (opts["customerId.not"] !== void 0)
43013
43806
  args.customer_id__not = opts["customerId.not"];
43014
- if (opts["customerId.isNull"] !== void 0)
43015
- args.customer_id__isNull = opts["customerId.isNull"];
43016
- if (opts["customerId.isNotNull"] !== void 0)
43017
- args.customer_id__isNotNull = opts["customerId.isNotNull"];
43018
43807
  if (opts["customerId.equals"] !== void 0)
43019
43808
  args.customer_id__equals = opts["customerId.equals"];
43020
43809
  if (opts["customerId.contains"] !== void 0)
@@ -43029,10 +43818,6 @@ Examples:
43029
43818
  args.subscription_id = opts.subscriptionId;
43030
43819
  if (opts["subscriptionId.not"] !== void 0)
43031
43820
  args.subscription_id__not = opts["subscriptionId.not"];
43032
- if (opts["subscriptionId.isNull"] !== void 0)
43033
- args.subscription_id__isNull = opts["subscriptionId.isNull"];
43034
- if (opts["subscriptionId.isNotNull"] !== void 0)
43035
- args.subscription_id__isNotNull = opts["subscriptionId.isNotNull"];
43036
43821
  if (opts["subscriptionId.equals"] !== void 0)
43037
43822
  args.subscription_id__equals = opts["subscriptionId.equals"];
43038
43823
  if (opts["subscriptionId.contains"] !== void 0)
@@ -43041,14 +43826,14 @@ Examples:
43041
43826
  args.subscription_id__startsWith = opts["subscriptionId.startsWith"];
43042
43827
  if (opts["subscriptionId.endWith"] !== void 0)
43043
43828
  args.subscription_id__endWith = opts["subscriptionId.endWith"];
43829
+ if (opts["subscriptionId.isNull"] !== void 0)
43830
+ args.subscription_id__isNull = opts["subscriptionId.isNull"];
43831
+ if (opts["subscriptionId.isNotNull"] !== void 0)
43832
+ args.subscription_id__isNotNull = opts["subscriptionId.isNotNull"];
43044
43833
  if (opts.invoicingEntityId !== void 0)
43045
43834
  args.invoicing_entity_id = opts.invoicingEntityId;
43046
43835
  if (opts["invoicingEntityId.not"] !== void 0)
43047
43836
  args.invoicing_entity_id__not = opts["invoicingEntityId.not"];
43048
- if (opts["invoicingEntityId.isNull"] !== void 0)
43049
- args.invoicing_entity_id__isNull = opts["invoicingEntityId.isNull"];
43050
- if (opts["invoicingEntityId.isNotNull"] !== void 0)
43051
- args.invoicing_entity_id__isNotNull = opts["invoicingEntityId.isNotNull"];
43052
43837
  if (opts["invoicingEntityId.equals"] !== void 0)
43053
43838
  args.invoicing_entity_id__equals = opts["invoicingEntityId.equals"];
43054
43839
  if (opts["invoicingEntityId.contains"] !== void 0)
@@ -43061,10 +43846,6 @@ Examples:
43061
43846
  args.invoice_number = opts.invoiceNumber;
43062
43847
  if (opts["invoiceNumber.not"] !== void 0)
43063
43848
  args.invoice_number__not = opts["invoiceNumber.not"];
43064
- if (opts["invoiceNumber.isNull"] !== void 0)
43065
- args.invoice_number__isNull = opts["invoiceNumber.isNull"];
43066
- if (opts["invoiceNumber.isNotNull"] !== void 0)
43067
- args.invoice_number__isNotNull = opts["invoiceNumber.isNotNull"];
43068
43849
  if (opts["invoiceNumber.equals"] !== void 0)
43069
43850
  args.invoice_number__equals = opts["invoiceNumber.equals"];
43070
43851
  if (opts["invoiceNumber.contains"] !== void 0)
@@ -43077,10 +43858,6 @@ Examples:
43077
43858
  args.original_invoice_id = opts.originalInvoiceId;
43078
43859
  if (opts["originalInvoiceId.not"] !== void 0)
43079
43860
  args.original_invoice_id__not = opts["originalInvoiceId.not"];
43080
- if (opts["originalInvoiceId.isNull"] !== void 0)
43081
- args.original_invoice_id__isNull = opts["originalInvoiceId.isNull"];
43082
- if (opts["originalInvoiceId.isNotNull"] !== void 0)
43083
- args.original_invoice_id__isNotNull = opts["originalInvoiceId.isNotNull"];
43084
43861
  if (opts["originalInvoiceId.equals"] !== void 0)
43085
43862
  args.original_invoice_id__equals = opts["originalInvoiceId.equals"];
43086
43863
  if (opts["originalInvoiceId.contains"] !== void 0)
@@ -43089,14 +43866,14 @@ Examples:
43089
43866
  args.original_invoice_id__startsWith = opts["originalInvoiceId.startsWith"];
43090
43867
  if (opts["originalInvoiceId.endWith"] !== void 0)
43091
43868
  args.original_invoice_id__endWith = opts["originalInvoiceId.endWith"];
43869
+ if (opts["originalInvoiceId.isNull"] !== void 0)
43870
+ args.original_invoice_id__isNull = opts["originalInvoiceId.isNull"];
43871
+ if (opts["originalInvoiceId.isNotNull"] !== void 0)
43872
+ args.original_invoice_id__isNotNull = opts["originalInvoiceId.isNotNull"];
43092
43873
  if (opts.originalInvoiceNumber !== void 0)
43093
43874
  args.original_invoice_number = opts.originalInvoiceNumber;
43094
43875
  if (opts["originalInvoiceNumber.not"] !== void 0)
43095
43876
  args.original_invoice_number__not = opts["originalInvoiceNumber.not"];
43096
- if (opts["originalInvoiceNumber.isNull"] !== void 0)
43097
- args.original_invoice_number__isNull = opts["originalInvoiceNumber.isNull"];
43098
- if (opts["originalInvoiceNumber.isNotNull"] !== void 0)
43099
- args.original_invoice_number__isNotNull = opts["originalInvoiceNumber.isNotNull"];
43100
43877
  if (opts["originalInvoiceNumber.equals"] !== void 0)
43101
43878
  args.original_invoice_number__equals = opts["originalInvoiceNumber.equals"];
43102
43879
  if (opts["originalInvoiceNumber.contains"] !== void 0)
@@ -43105,16 +43882,16 @@ Examples:
43105
43882
  args.original_invoice_number__startsWith = opts["originalInvoiceNumber.startsWith"];
43106
43883
  if (opts["originalInvoiceNumber.endWith"] !== void 0)
43107
43884
  args.original_invoice_number__endWith = opts["originalInvoiceNumber.endWith"];
43885
+ if (opts["originalInvoiceNumber.isNull"] !== void 0)
43886
+ args.original_invoice_number__isNull = opts["originalInvoiceNumber.isNull"];
43887
+ if (opts["originalInvoiceNumber.isNotNull"] !== void 0)
43888
+ args.original_invoice_number__isNotNull = opts["originalInvoiceNumber.isNotNull"];
43108
43889
  if (opts.lineItemId !== void 0)
43109
43890
  args.line_item_id = opts.lineItemId;
43110
43891
  if (opts.periodStart !== void 0)
43111
43892
  args.period_start = opts.periodStart;
43112
43893
  if (opts["periodStart.not"] !== void 0)
43113
43894
  args.period_start__not = opts["periodStart.not"];
43114
- if (opts["periodStart.isNull"] !== void 0)
43115
- args.period_start__isNull = opts["periodStart.isNull"];
43116
- if (opts["periodStart.isNotNull"] !== void 0)
43117
- args.period_start__isNotNull = opts["periodStart.isNotNull"];
43118
43895
  if (opts["periodStart.equals"] !== void 0)
43119
43896
  args.period_start__equals = opts["periodStart.equals"];
43120
43897
  if (opts["periodStart.lt"] !== void 0)
@@ -43125,14 +43902,14 @@ Examples:
43125
43902
  args.period_start__gt = opts["periodStart.gt"];
43126
43903
  if (opts["periodStart.gte"] !== void 0)
43127
43904
  args.period_start__gte = opts["periodStart.gte"];
43905
+ if (opts["periodStart.isNull"] !== void 0)
43906
+ args.period_start__isNull = opts["periodStart.isNull"];
43907
+ if (opts["periodStart.isNotNull"] !== void 0)
43908
+ args.period_start__isNotNull = opts["periodStart.isNotNull"];
43128
43909
  if (opts.periodEnd !== void 0)
43129
43910
  args.period_end = opts.periodEnd;
43130
43911
  if (opts["periodEnd.not"] !== void 0)
43131
43912
  args.period_end__not = opts["periodEnd.not"];
43132
- if (opts["periodEnd.isNull"] !== void 0)
43133
- args.period_end__isNull = opts["periodEnd.isNull"];
43134
- if (opts["periodEnd.isNotNull"] !== void 0)
43135
- args.period_end__isNotNull = opts["periodEnd.isNotNull"];
43136
43913
  if (opts["periodEnd.equals"] !== void 0)
43137
43914
  args.period_end__equals = opts["periodEnd.equals"];
43138
43915
  if (opts["periodEnd.lt"] !== void 0)
@@ -43143,14 +43920,14 @@ Examples:
43143
43920
  args.period_end__gt = opts["periodEnd.gt"];
43144
43921
  if (opts["periodEnd.gte"] !== void 0)
43145
43922
  args.period_end__gte = opts["periodEnd.gte"];
43923
+ if (opts["periodEnd.isNull"] !== void 0)
43924
+ args.period_end__isNull = opts["periodEnd.isNull"];
43925
+ if (opts["periodEnd.isNotNull"] !== void 0)
43926
+ args.period_end__isNotNull = opts["periodEnd.isNotNull"];
43146
43927
  if (opts.issuedAt !== void 0)
43147
43928
  args.issued_at = opts.issuedAt;
43148
43929
  if (opts["issuedAt.not"] !== void 0)
43149
43930
  args.issued_at__not = opts["issuedAt.not"];
43150
- if (opts["issuedAt.isNull"] !== void 0)
43151
- args.issued_at__isNull = opts["issuedAt.isNull"];
43152
- if (opts["issuedAt.isNotNull"] !== void 0)
43153
- args.issued_at__isNotNull = opts["issuedAt.isNotNull"];
43154
43931
  if (opts["issuedAt.equals"] !== void 0)
43155
43932
  args.issued_at__equals = opts["issuedAt.equals"];
43156
43933
  if (opts["issuedAt.lt"] !== void 0)
@@ -43165,10 +43942,6 @@ Examples:
43165
43942
  args.due_at = opts.dueAt;
43166
43943
  if (opts["dueAt.not"] !== void 0)
43167
43944
  args.due_at__not = opts["dueAt.not"];
43168
- if (opts["dueAt.isNull"] !== void 0)
43169
- args.due_at__isNull = opts["dueAt.isNull"];
43170
- if (opts["dueAt.isNotNull"] !== void 0)
43171
- args.due_at__isNotNull = opts["dueAt.isNotNull"];
43172
43945
  if (opts["dueAt.equals"] !== void 0)
43173
43946
  args.due_at__equals = opts["dueAt.equals"];
43174
43947
  if (opts["dueAt.lt"] !== void 0)
@@ -43183,10 +43956,6 @@ Examples:
43183
43956
  args.updated_at = opts.updatedAt;
43184
43957
  if (opts["updatedAt.not"] !== void 0)
43185
43958
  args.updated_at__not = opts["updatedAt.not"];
43186
- if (opts["updatedAt.isNull"] !== void 0)
43187
- args.updated_at__isNull = opts["updatedAt.isNull"];
43188
- if (opts["updatedAt.isNotNull"] !== void 0)
43189
- args.updated_at__isNotNull = opts["updatedAt.isNotNull"];
43190
43959
  if (opts["updatedAt.equals"] !== void 0)
43191
43960
  args.updated_at__equals = opts["updatedAt.equals"];
43192
43961
  if (opts["updatedAt.lt"] !== void 0)
@@ -43215,8 +43984,6 @@ Examples:
43215
43984
  "status__in",
43216
43985
  "customer_id",
43217
43986
  "customer_id__not",
43218
- "customer_id__isNull",
43219
- "customer_id__isNotNull",
43220
43987
  "customer_id__equals",
43221
43988
  "customer_id__contains",
43222
43989
  "customer_id__startsWith",
@@ -43224,67 +43991,61 @@ Examples:
43224
43991
  "customer_external_id",
43225
43992
  "subscription_id",
43226
43993
  "subscription_id__not",
43227
- "subscription_id__isNull",
43228
- "subscription_id__isNotNull",
43229
43994
  "subscription_id__equals",
43230
43995
  "subscription_id__contains",
43231
43996
  "subscription_id__startsWith",
43232
43997
  "subscription_id__endWith",
43998
+ "subscription_id__isNull",
43999
+ "subscription_id__isNotNull",
43233
44000
  "invoicing_entity_id",
43234
44001
  "invoicing_entity_id__not",
43235
- "invoicing_entity_id__isNull",
43236
- "invoicing_entity_id__isNotNull",
43237
44002
  "invoicing_entity_id__equals",
43238
44003
  "invoicing_entity_id__contains",
43239
44004
  "invoicing_entity_id__startsWith",
43240
44005
  "invoicing_entity_id__endWith",
43241
44006
  "invoice_number",
43242
44007
  "invoice_number__not",
43243
- "invoice_number__isNull",
43244
- "invoice_number__isNotNull",
43245
44008
  "invoice_number__equals",
43246
44009
  "invoice_number__contains",
43247
44010
  "invoice_number__startsWith",
43248
44011
  "invoice_number__endWith",
43249
44012
  "original_invoice_id",
43250
44013
  "original_invoice_id__not",
43251
- "original_invoice_id__isNull",
43252
- "original_invoice_id__isNotNull",
43253
44014
  "original_invoice_id__equals",
43254
44015
  "original_invoice_id__contains",
43255
44016
  "original_invoice_id__startsWith",
43256
44017
  "original_invoice_id__endWith",
44018
+ "original_invoice_id__isNull",
44019
+ "original_invoice_id__isNotNull",
43257
44020
  "original_invoice_number",
43258
44021
  "original_invoice_number__not",
43259
- "original_invoice_number__isNull",
43260
- "original_invoice_number__isNotNull",
43261
44022
  "original_invoice_number__equals",
43262
44023
  "original_invoice_number__contains",
43263
44024
  "original_invoice_number__startsWith",
43264
44025
  "original_invoice_number__endWith",
44026
+ "original_invoice_number__isNull",
44027
+ "original_invoice_number__isNotNull",
43265
44028
  "line_item_id",
43266
44029
  "period_start",
43267
44030
  "period_start__not",
43268
- "period_start__isNull",
43269
- "period_start__isNotNull",
43270
44031
  "period_start__equals",
43271
44032
  "period_start__lt",
43272
44033
  "period_start__lte",
43273
44034
  "period_start__gt",
43274
44035
  "period_start__gte",
44036
+ "period_start__isNull",
44037
+ "period_start__isNotNull",
43275
44038
  "period_end",
43276
44039
  "period_end__not",
43277
- "period_end__isNull",
43278
- "period_end__isNotNull",
43279
44040
  "period_end__equals",
43280
44041
  "period_end__lt",
43281
44042
  "period_end__lte",
43282
44043
  "period_end__gt",
43283
44044
  "period_end__gte",
44045
+ "period_end__isNull",
44046
+ "period_end__isNotNull",
43284
44047
  "issued_at",
43285
44048
  "issued_at__not",
43286
- "issued_at__isNull",
43287
- "issued_at__isNotNull",
43288
44049
  "issued_at__equals",
43289
44050
  "issued_at__lt",
43290
44051
  "issued_at__lte",
@@ -43292,8 +44053,6 @@ Examples:
43292
44053
  "issued_at__gte",
43293
44054
  "due_at",
43294
44055
  "due_at__not",
43295
- "due_at__isNull",
43296
- "due_at__isNotNull",
43297
44056
  "due_at__equals",
43298
44057
  "due_at__lt",
43299
44058
  "due_at__lte",
@@ -43301,8 +44060,6 @@ Examples:
43301
44060
  "due_at__gte",
43302
44061
  "updated_at",
43303
44062
  "updated_at__not",
43304
- "updated_at__isNull",
43305
- "updated_at__isNotNull",
43306
44063
  "updated_at__equals",
43307
44064
  "updated_at__lt",
43308
44065
  "updated_at__lte",
@@ -43536,6 +44293,36 @@ Examples:
43536
44293
  queryParamKeys: []
43537
44294
  });
43538
44295
  });
44296
+ resource.command("send-invoice-emails").description(`Send a specific email (\`email_type\`, e.g. \`invoice_ready\` for the to-pay email) to the customer for a list of invoice IDs, asynchronously in batch. Returns a batch_id only; outcomes arrive via webhooks (invoice.batch.email_succeeded / invoice.batch.email_skipped / invoice.batch.email_failed). An invoice whose status doesn't match the email (e.g. a draft or an invoice still pending approval after validate_invoice) is skipped, so check each invoice's status with get_invoice first. Every call sends the emails again: never re-call it to retry or check status.`).option("--batch-id <value>", `Optional client-supplied identifier for the batch. Echoed back in the response and on the emitted webhook events. Generated if omitted.`).requiredOption("--email-type <value>", `The email to send. The invoice's status must resolve to this email, otherwise it is skipped with reason \`email_type_mismatch\`.
44297
+
44298
+ - \`invoice_ready\`: The to-pay invoice email (for \`to_pay\`, \`partially_paid\`, \`late\` invoices).
44299
+ - \`invoice_settled\`: The paid-invoice email (for \`paid\` invoices).
44300
+ - \`invoice_errored\`: The failed-payment email (for \`error\` invoices with a payment method).
44301
+ - \`credit_note_ready\`: The issued-credit-note email (for \`to_pay\`, \`partially_paid\` refunds).
44302
+ - \`credit_note_settled\`: The credit-note email (for paid refunds).`).requiredOption("--ids <json>", `IDs of the invoices to send the email for. Processed asynchronously; each outcome is reported via webhook events.`).addHelpText("after", `
44303
+ Examples:
44304
+ hyperline invoices send-invoice-emails --email-type <email_type> --ids <ids>
44305
+ hyperline invoices send-invoice-emails --email-type <email_type> --ids <ids> --batch-id <batch_id>
44306
+ hyperline invoices send-invoice-emails --email-type <email_type> --ids <ids> --output json`).action(async (opts) => {
44307
+ const ctx = resource.parent?.opts()._ctx;
44308
+ if (!ctx) {
44309
+ process.stderr.write("Error: Not authenticated\n");
44310
+ process.exit(1);
44311
+ }
44312
+ const args = {};
44313
+ if (opts.batchId !== void 0)
44314
+ args.batch_id = opts.batchId;
44315
+ if (opts.emailType !== void 0)
44316
+ args.email_type = opts.emailType;
44317
+ if (opts.ids !== void 0)
44318
+ args.ids = JSON.parse(opts.ids);
44319
+ await ctx.execute({
44320
+ method: "POST",
44321
+ path: "/v1/invoices/send-email",
44322
+ args,
44323
+ queryParamKeys: []
44324
+ });
44325
+ });
43539
44326
  resource.command("mark-invoice-as-uncollectible").description(`Mark an invoice as uncollectible for accounting write-off purposes. The invoice remains in the system for record keeping.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
43540
44327
  Examples:
43541
44328
  hyperline invoices mark-invoice-as-uncollectible --id <id>
@@ -43573,7 +44360,7 @@ Examples:
43573
44360
  queryParamKeys: []
43574
44361
  });
43575
44362
  });
43576
- resource.command("update").description(`Update an invoice. Draft/grace_period allow modifying line items, dates, and metadata before finalization. Finalized invoices are restricted to metadata (paid: custom_note/purchase_order/custom_properties/additional_display_fields/subscription_id; uncollectible: properties/custom_note/custom_properties/additional_display_fields/subscription_id).`).requiredOption("--id <value>", `id parameter`).option("--type <value>", `Type of the invoice.
44363
+ resource.command("update").description(`Update an invoice. Draft/grace_period allow modifying line items, dates, and metadata before finalization. Finalized invoices allow updating product and price links and revenue classification on existing line items by ID, with unchanged amounts/taxes and automatic accounting reposting, plus metadata (paid/partially_paid: custom_note/purchase_order/custom_properties/additional_display_fields/subscription_id; uncollectible: properties/custom_note/custom_properties/additional_display_fields/subscription_id).`).requiredOption("--id <value>", `id parameter`).option("--type <value>", `Type of the invoice.
43577
44364
 
43578
44365
  - \`invoice\`: Legal invoice to be paid by your customer.
43579
44366
  - \`credit_note\`: Legal credit note cancelling an invoice and refunding your customer.
@@ -43582,7 +44369,7 @@ Examples:
43582
44369
 
43583
44370
  - \`auto\`: Tax is automatically computed and applied.
43584
44371
  - \`not_eligible\`: Tax collection is disabled for the invoice.
43585
- `).option("--issuing-method <value>", `Set to \`scheduled\` to finalize the draft invoice automatically on its issue date (\`emitted_at\`), in the invoice timezone. The issue date must be after today. Set to \`manual\` to unschedule the invoice.`).option("--emitted-at <value>", `Issue date of the draft invoice. For a scheduled invoice, the day on which it is automatically finalized.`).option("--line-items <json>", `line_items`).option("--coupons <json>", `coupons`).option("--payment-method-type <value>", `payment_method_type`).option("--payment-method-id <value>", `ID of the default payment method used to pay the invoice. Transactions related to the invoice may use different payment methods.`).option("--bank-account-id <value>", `ID of the bank account displayed on the invoice. Transactions related to the invoice may use different bank accounts.`).option("--subscription-id <value>", `ID of the subscription related to the invoice.`).option("--properties <json>", `Key/value pairs to store any metadata useful in your context.`).option("--custom-properties <json>", `Values for custom properties defined for the \`invoice\` entity, keyed by slug.`).option("--additional-display-fields <json>", `Ordered additional fields displayed on the invoice PDF. Invoice and customer custom properties are referenced by slug.`).option("--customer <json>", `Override customer details on the invoice. Only allowed for draft or grace period invoices.`).addHelpText("after", `
44372
+ `).option("--issuing-method <value>", `Set to \`scheduled\` to finalize the draft invoice automatically on its issue date (\`emitted_at\`), in the invoice timezone. The issue date must be after today. Set to \`manual\` to unschedule the invoice.`).option("--emitted-at <value>", `Issue date of the draft invoice. For a scheduled invoice, the day on which it is automatically finalized.`).option("--line-items <json>", `Draft edits replace the line list. Finalized invoice line updates accept up to 100 lines per request and update only the specified existing line IDs and allow product and price links and revenue classification; amounts and taxes stay unchanged. Accounting postings are rebuilt atomically; updates affecting closed accounting periods are rejected.`).option("--coupons <json>", `coupons`).option("--payment-method-type <value>", `payment_method_type`).option("--payment-method-id <value>", `ID of the default payment method used to pay the invoice. Transactions related to the invoice may use different payment methods.`).option("--bank-account-id <value>", `ID of the bank account displayed on the invoice. Transactions related to the invoice may use different bank accounts.`).option("--subscription-id <value>", `ID of the subscription related to the invoice.`).option("--properties <json>", `Key/value pairs to store any metadata useful in your context.`).option("--custom-properties <json>", `Values for custom properties defined for the \`invoice\` entity, keyed by slug.`).option("--additional-display-fields <json>", `Ordered additional fields displayed on the invoice PDF. Invoice and customer custom properties are referenced by slug.`).option("--customer <json>", `Override customer details on the invoice. Only allowed for draft or grace period invoices.`).addHelpText("after", `
43586
44373
  Examples:
43587
44374
  hyperline invoices update --id <id>
43588
44375
  hyperline invoices update --id <id> --type <type> --document-name <document_name>
@@ -43668,10 +44455,10 @@ Examples:
43668
44455
  queryParamKeys: []
43669
44456
  });
43670
44457
  });
43671
- resource.command("upload-pdf-to").description(`Upload a custom PDF file (max 5MB) to attach to an existing invoice, replacing the auto-generated PDF.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
44458
+ resource.command("upload-pdf-to").description(`Upload a custom PDF file (max 5MB) to attach to an existing invoice, replacing the auto-generated PDF.`).requiredOption("--id <value>", `id parameter`).requiredOption("--file <path>", `Path of the local file to upload (sends a multipart request)`).addHelpText("after", `
43672
44459
  Examples:
43673
- hyperline invoices upload-pdf-to --id <id>
43674
- hyperline invoices upload-pdf-to --id <id> --output json`).action(async (opts) => {
44460
+ hyperline invoices upload-pdf-to --id <id> --file <path>
44461
+ hyperline invoices upload-pdf-to --id <id> --file <path> --output json`).action(async (opts) => {
43675
44462
  const ctx = resource.parent?.opts()._ctx;
43676
44463
  if (!ctx) {
43677
44464
  process.stderr.write("Error: Not authenticated\n");
@@ -43680,11 +44467,15 @@ Examples:
43680
44467
  const args = {};
43681
44468
  if (opts.id !== void 0)
43682
44469
  args.id = opts.id;
44470
+ const files = {};
44471
+ if (opts.file !== void 0)
44472
+ files.file = [opts.file].flat();
43683
44473
  await ctx.execute({
43684
44474
  method: "POST",
43685
44475
  path: "/v1/invoices/{id}/upload",
43686
44476
  args,
43687
- queryParamKeys: []
44477
+ queryParamKeys: [],
44478
+ files
43688
44479
  });
43689
44480
  });
43690
44481
  resource.command("download").description(`Download the PDF of an invoice as a downloadable file. The HTTP client must follow redirects. Supports lang/locale params for localization.`).requiredOption("--id <value>", `id parameter`).option("--lang <value>", `lang`).option("--locale <value>", `Locale as a supported language code and an uppercase ISO 3166-1 alpha-2 country code, separated by a hyphen.`).addHelpText("after", `
@@ -43823,7 +44614,13 @@ Examples:
43823
44614
  queryParamKeys: []
43824
44615
  });
43825
44616
  });
43826
- resource.command("create-invoicing-entity").description(`Create a new invoicing entity with company details, address, and tax configuration. Used as the sender on invoices.`).option("--is-default", `Flag to indicate if this is the default invoicing entity. If true, it will switch the other existing invoicing entities to non-default.`).requiredOption("--name <value>", `The name of the invoicing entity.`).option("--trade-name <value>", `The trade name of the invoicing entity.`).option("--timezone <value>", `The timezone the invoicing entity operates in.`).option("--language <value>", `The default language of the invoicing entity.`).option("--registration-number <value>", `The registration number of the invoicing entity.`).option("--tax-id <value>", `The tax identification number of the invoicing entity.`).option("--billing-email <value>", `The billing email address for the invoicing entity.`).option("--address-line1 <value>", `The first line of the address for the invoicing entity.`).option("--address-line2 <value>", `The second line of the address for the invoicing entity.`).option("--zip-code <value>", `The postal code for the invoicing entity's address.`).option("--state <value>", `The state or province of the invoicing entity.`).option("--city <value>", `The city of the invoicing entity.`).requiredOption("--country <value>", `The country in which the invoicing entity is registered. It cannot be changed after creation.`).requiredOption("--currency <value>", `The currency code that the invoicing entity operates in.`).requiredOption("--accounting-currency <value>", `The currency used for accounting purposes.`).option("--invoice-number-pattern <value>", `The pattern used for generating invoice numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--credit-note-number-pattern <value>", `The pattern used for generating credit note numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--document-number-pattern <value>", `The pattern used for generating document numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--next-invoice-number <number>", `The next invoice number to be used.`).option("--next-credit-note-number <number>", `The next credit note number to be used.`).option("--next-document-number <number>", `The next document number to be used.`).option("--default-payment-delay <number>", `The default payment term in days.`).option("--invoice-grace-period-duration <number>", `The grace period duration in days.`).option("--invoice-payment-initiation-delay <number>", `The payment initiation delay in days for the invoices.`).option("--document-payment-initiation-delay <number>", `The payment initiation delay in days for the custom documents.`).option("--invoice-late-fees <value>", `The late fees applicable to the invoices.`).option("--invoice-footer <value>", `The footer text to be used in invoices.`).option("--document-footer <value>", `The footer text to be used in documents. If not specified, the invoice footer will be used.`).option("--quote-footer <value>", `The footer text to be used in quotes.`).option("--logo-url <value>", `URL of the logo to be used in invoices.`).option("--favicon-url <value>", `URL of the logo to be used as favicon.`).option("--brand-color <value>", `Brand color to be used in invoices (hexadecimal color code).`).option("--forced-customer-type <value>", `Forces all customers created under this invoicing entity to have this type. Set to null to allow users to choose.`).option("--credit-note-wallet-refund-enabled", `When enabled and no \`refund_method\` is specified, credit note refunds default to the customer's wallet, including credit notes generated by subscription updates, cancellations, and transitions. An explicit \`refund_method\` always wins. Requires wallets to be enabled at the workspace level.`).option("--standalone-credit-note-creation-enabled", `Whether credit notes without an original invoice can be created under this invoicing entity. Defaults to \`true\`.`).option("--fx-conversion-display-enabled", `Whether the exchange rate and converted amount in the accounting currency are displayed on the invoice PDF when the invoice currency differs from the accounting currency. The conversion data is still stored and returned by the API when disabled. Defaults to \`true\`.`).addHelpText("after", `
44617
+ resource.command("create-invoicing-entity").description(`Create a new invoicing entity with company details, address, and tax configuration. Used as the sender on invoices.`).option("--is-default", `Flag to indicate if this is the default invoicing entity. If true, it will switch the other existing invoicing entities to non-default.`).requiredOption("--name <value>", `The name of the invoicing entity.`).option("--trade-name <value>", `The trade name of the invoicing entity.`).option("--timezone <value>", `The timezone the invoicing entity operates in.`).option("--language <value>", `The default language of the invoicing entity.`).option("--registration-number <value>", `The registration number of the invoicing entity.`).option("--tax-id <value>", `The tax identification number of the invoicing entity.`).option("--billing-email <value>", `The billing email address for the invoicing entity.`).option("--address-line1 <value>", `The first line of the address for the invoicing entity.`).option("--address-line2 <value>", `The second line of the address for the invoicing entity.`).option("--zip-code <value>", `The postal code for the invoicing entity's address.`).option("--state <value>", `State or province of the address, stored as its code (the second part of the ISO 3166-2 code, e.g. \`CA\` for \`US-CA\`) for:
44618
+ - United States: state, see [ISO 3166-2:US](https://en.wikipedia.org/wiki/ISO_3166-2:US)
44619
+ - Canada: province or territory, see [ISO 3166-2:CA](https://en.wikipedia.org/wiki/ISO_3166-2:CA)
44620
+ - Italy: province, see [ISO 3166-2:IT](https://en.wikipedia.org/wiki/ISO_3166-2:IT)
44621
+ - Brazil: state, see [ISO 3166-2:BR](https://en.wikipedia.org/wiki/ISO_3166-2:BR)
44622
+
44623
+ A code or a name is accepted (e.g. \`ON\` or \`Ontario\`); a value that matches neither for these countries is rejected. For any other country, the state is ignored.`).option("--city <value>", `The city of the invoicing entity.`).requiredOption("--country <value>", `The country in which the invoicing entity is registered. It cannot be changed after creation.`).requiredOption("--currency <value>", `The currency code that the invoicing entity operates in.`).requiredOption("--accounting-currency <value>", `The currency used for accounting purposes.`).option("--invoice-number-pattern <value>", `The pattern used for generating invoice numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--credit-note-number-pattern <value>", `The pattern used for generating credit note numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--document-number-pattern <value>", `The pattern used for generating document numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--next-invoice-number <number>", `The next invoice number to be used.`).option("--next-credit-note-number <number>", `The next credit note number to be used.`).option("--next-document-number <number>", `The next document number to be used.`).option("--default-payment-delay <number>", `The default payment term in days.`).option("--invoice-grace-period-duration <number>", `The grace period duration in days.`).option("--invoice-payment-initiation-delay <number>", `The payment initiation delay in days for the invoices.`).option("--document-payment-initiation-delay <number>", `The payment initiation delay in days for the custom documents.`).option("--invoice-late-fees <value>", `The late fees applicable to the invoices.`).option("--invoice-footer <value>", `The footer text to be used in invoices.`).option("--document-footer <value>", `The footer text to be used in documents. If not specified, the invoice footer will be used.`).option("--quote-footer <value>", `The footer text to be used in quotes.`).option("--logo-url <value>", `URL of the logo to be used in invoices.`).option("--favicon-url <value>", `URL of the logo to be used as favicon.`).option("--brand-color <value>", `Brand color to be used in invoices (hexadecimal color code).`).option("--forced-customer-type <value>", `Forces all customers created under this invoicing entity to have this type. Set to null to allow users to choose.`).option("--credit-note-wallet-refund-enabled", `When enabled and no \`refund_method\` is specified, credit note refunds default to the customer's wallet, including credit notes generated by subscription updates, cancellations, and transitions. An explicit \`refund_method\` always wins. Requires wallets to be enabled at the workspace level.`).option("--standalone-credit-note-creation-enabled", `Whether credit notes without an original invoice can be created under this invoicing entity. Defaults to \`true\`.`).option("--fx-conversion-display-enabled", `Whether the exchange rate and converted amount in the accounting currency are displayed on the invoice PDF when the invoice currency differs from the accounting currency. The conversion data is still stored and returned by the API when disabled. Defaults to \`true\`.`).addHelpText("after", `
43827
44624
  Examples:
43828
44625
  hyperline invoicing-entities create-invoicing-entity --name <name> --country <country> --currency <currency> --accounting-currency <accounting_currency>
43829
44626
  hyperline invoicing-entities create-invoicing-entity --name <name> --country <country> --currency <currency> --accounting-currency <accounting_currency> --is-default --trade-name <trade_name>
@@ -43915,7 +44712,13 @@ Examples:
43915
44712
  queryParamKeys: []
43916
44713
  });
43917
44714
  });
43918
- resource.command("update-invoicing-entity").description(`Update an existing invoicing entity's details (address, tax ID, branding, etc.).`).requiredOption("--id <value>", `id parameter`).option("--name <value>", `The name of the invoicing entity.`).option("--registration-number <value>", `The registration number of the invoicing entity.`).option("--tax-id <value>", `The tax identification number of the invoicing entity.`).option("--billing-email <value>", `The billing email address for the invoicing entity.`).option("--timezone <value>", `The timezone the invoicing entity operates in.`).option("--language <value>", `The default language of the invoicing entity.`).option("--is-default", `Flag to indicate if this is the default invoicing entity. If true, it will switch the other existing invoicing entities to non-default.`).option("--address-line1 <value>", `The first line of the address for the invoicing entity.`).option("--address-line2 <value>", `The second line of the address for the invoicing entity.`).option("--zip-code <value>", `The postal code for the invoicing entity's address.`).option("--state <value>", `The state or province of the invoicing entity.`).option("--city <value>", `The city of the invoicing entity.`).option("--country <value>", `The country in which the invoicing entity is registered. It cannot be changed after creation.`).option("--currency <value>", `The currency code that the invoicing entity operates in.`).option("--accounting-currency <value>", `The currency used for accounting purposes.`).option("--invoice-number-pattern <value>", `The pattern used for generating invoice numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--credit-note-number-pattern <value>", `The pattern used for generating credit note numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--document-number-pattern <value>", `The pattern used for generating document numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--default-payment-delay <number>", `The default payment term in days.`).option("--invoice-grace-period-duration <number>", `The grace period duration in days.`).option("--invoice-payment-initiation-delay <number>", `The payment initiation delay in days for the invoices.`).option("--document-payment-initiation-delay <number>", `The payment initiation delay in days for the custom documents.`).option("--invoice-late-fees <value>", `The late fees applicable to the invoices.`).option("--invoice-footer <value>", `The footer text to be used in invoices.`).option("--document-footer <value>", `The footer text to be used in documents. If not specified, the invoice footer will be used.`).option("--logo-url <value>", `URL of the logo to be used in invoices.`).option("--favicon-url <value>", `URL of the logo to be used as favicon.`).option("--brand-color <value>", `Brand color to be used in invoices (hexadecimal color code).`).option("--forced-customer-type <value>", `Forces all customers created under this invoicing entity to have this type. Set to null to allow users to choose.`).option("--credit-note-wallet-refund-enabled", `When enabled and no \`refund_method\` is specified, credit note refunds default to the customer's wallet, including credit notes generated by subscription updates, cancellations, and transitions. An explicit \`refund_method\` always wins. Requires wallets to be enabled at the workspace level.`).option("--standalone-credit-note-creation-enabled", `Whether credit notes without an original invoice can be created under this invoicing entity. Defaults to \`true\`.`).option("--fx-conversion-display-enabled", `Whether the exchange rate and converted amount in the accounting currency are displayed on the invoice PDF when the invoice currency differs from the accounting currency. The conversion data is still stored and returned by the API when disabled. Defaults to \`true\`.`).addHelpText("after", `
44715
+ resource.command("update-invoicing-entity").description(`Update an existing invoicing entity's details (address, tax ID, branding, etc.).`).requiredOption("--id <value>", `id parameter`).option("--name <value>", `The name of the invoicing entity.`).option("--registration-number <value>", `The registration number of the invoicing entity.`).option("--tax-id <value>", `The tax identification number of the invoicing entity.`).option("--billing-email <value>", `The billing email address for the invoicing entity.`).option("--timezone <value>", `The timezone the invoicing entity operates in.`).option("--language <value>", `The default language of the invoicing entity.`).option("--is-default", `Flag to indicate if this is the default invoicing entity. If true, it will switch the other existing invoicing entities to non-default.`).option("--address-line1 <value>", `The first line of the address for the invoicing entity.`).option("--address-line2 <value>", `The second line of the address for the invoicing entity.`).option("--zip-code <value>", `The postal code for the invoicing entity's address.`).option("--state <value>", `State or province of the address, stored as its code (the second part of the ISO 3166-2 code, e.g. \`CA\` for \`US-CA\`) for:
44716
+ - United States: state, see [ISO 3166-2:US](https://en.wikipedia.org/wiki/ISO_3166-2:US)
44717
+ - Canada: province or territory, see [ISO 3166-2:CA](https://en.wikipedia.org/wiki/ISO_3166-2:CA)
44718
+ - Italy: province, see [ISO 3166-2:IT](https://en.wikipedia.org/wiki/ISO_3166-2:IT)
44719
+ - Brazil: state, see [ISO 3166-2:BR](https://en.wikipedia.org/wiki/ISO_3166-2:BR)
44720
+
44721
+ A code or a name is accepted (e.g. \`ON\` or \`Ontario\`); a value that matches neither for these countries is rejected. For any other country, the state is ignored.`).option("--city <value>", `The city of the invoicing entity.`).option("--country <value>", `The country in which the invoicing entity is registered. It cannot be changed after creation.`).option("--currency <value>", `The currency code that the invoicing entity operates in.`).option("--accounting-currency <value>", `The currency used for accounting purposes.`).option("--invoice-number-pattern <value>", `The pattern used for generating invoice numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--credit-note-number-pattern <value>", `The pattern used for generating credit note numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--document-number-pattern <value>", `The pattern used for generating document numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--default-payment-delay <number>", `The default payment term in days.`).option("--invoice-grace-period-duration <number>", `The grace period duration in days.`).option("--invoice-payment-initiation-delay <number>", `The payment initiation delay in days for the invoices.`).option("--document-payment-initiation-delay <number>", `The payment initiation delay in days for the custom documents.`).option("--invoice-late-fees <value>", `The late fees applicable to the invoices.`).option("--invoice-footer <value>", `The footer text to be used in invoices.`).option("--document-footer <value>", `The footer text to be used in documents. If not specified, the invoice footer will be used.`).option("--logo-url <value>", `URL of the logo to be used in invoices.`).option("--favicon-url <value>", `URL of the logo to be used as favicon.`).option("--brand-color <value>", `Brand color to be used in invoices (hexadecimal color code).`).option("--forced-customer-type <value>", `Forces all customers created under this invoicing entity to have this type. Set to null to allow users to choose.`).option("--credit-note-wallet-refund-enabled", `When enabled and no \`refund_method\` is specified, credit note refunds default to the customer's wallet, including credit notes generated by subscription updates, cancellations, and transitions. An explicit \`refund_method\` always wins. Requires wallets to be enabled at the workspace level.`).option("--standalone-credit-note-creation-enabled", `Whether credit notes without an original invoice can be created under this invoicing entity. Defaults to \`true\`.`).option("--fx-conversion-display-enabled", `Whether the exchange rate and converted amount in the accounting currency are displayed on the invoice PDF when the invoice currency differs from the accounting currency. The conversion data is still stored and returned by the API when disabled. Defaults to \`true\`.`).addHelpText("after", `
43919
44722
  Examples:
43920
44723
  hyperline invoicing-entities update-invoicing-entity --id <id>
43921
44724
  hyperline invoicing-entities update-invoicing-entity --id <id> --name <name> --registration-number <registration_number>
@@ -44030,7 +44833,7 @@ Examples:
44030
44833
  // build/commands/generated/organisations.js
44031
44834
  function registerOrganisationsCommands(parent) {
44032
44835
  const resource = parent.command("organisations").description("Manage organisations");
44033
- 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", `
44836
+ 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", `
44034
44837
  Examples:
44035
44838
  hyperline organisations list
44036
44839
  hyperline organisations list --limit <limit> --cursor <cursor>`).action(async (opts) => {
@@ -44052,10 +44855,6 @@ Examples:
44052
44855
  args.created_at = opts.createdAt;
44053
44856
  if (opts["createdAt.not"] !== void 0)
44054
44857
  args.created_at__not = opts["createdAt.not"];
44055
- if (opts["createdAt.isNull"] !== void 0)
44056
- args.created_at__isNull = opts["createdAt.isNull"];
44057
- if (opts["createdAt.isNotNull"] !== void 0)
44058
- args.created_at__isNotNull = opts["createdAt.isNotNull"];
44059
44858
  if (opts["createdAt.equals"] !== void 0)
44060
44859
  args.created_at__equals = opts["createdAt.equals"];
44061
44860
  if (opts["createdAt.lt"] !== void 0)
@@ -44070,10 +44869,6 @@ Examples:
44070
44869
  args.updated_at = opts.updatedAt;
44071
44870
  if (opts["updatedAt.not"] !== void 0)
44072
44871
  args.updated_at__not = opts["updatedAt.not"];
44073
- if (opts["updatedAt.isNull"] !== void 0)
44074
- args.updated_at__isNull = opts["updatedAt.isNull"];
44075
- if (opts["updatedAt.isNotNull"] !== void 0)
44076
- args.updated_at__isNotNull = opts["updatedAt.isNotNull"];
44077
44872
  if (opts["updatedAt.equals"] !== void 0)
44078
44873
  args.updated_at__equals = opts["updatedAt.equals"];
44079
44874
  if (opts["updatedAt.lt"] !== void 0)
@@ -44098,8 +44893,6 @@ Examples:
44098
44893
  "sort",
44099
44894
  "created_at",
44100
44895
  "created_at__not",
44101
- "created_at__isNull",
44102
- "created_at__isNotNull",
44103
44896
  "created_at__equals",
44104
44897
  "created_at__lt",
44105
44898
  "created_at__lte",
@@ -44107,8 +44900,6 @@ Examples:
44107
44900
  "created_at__gte",
44108
44901
  "updated_at",
44109
44902
  "updated_at__not",
44110
- "updated_at__isNull",
44111
- "updated_at__isNotNull",
44112
44903
  "updated_at__equals",
44113
44904
  "updated_at__lt",
44114
44905
  "updated_at__lte",
@@ -44174,7 +44965,7 @@ function registerPaymentsCommands(parent) {
44174
44965
  Payment type.
44175
44966
 
44176
44967
  - \`one_time\`: One-time payment, generating one-off invoice.
44177
- `).requiredOption("--customer-id <value>", `ID of the customer.`).option("--products <json>", `Products composing the related invoice.`).option("--purchase-order <value>", `Purchase order added on the generated invoice.`).option("--custom-note <value>", `Custom note added on the generated invoice.`).requiredOption("--charging-method <value>", `
44968
+ `).requiredOption("--customer-id <value>", `ID of the customer.`).option("--products <json>", `Products composing the related invoice.`).option("--purchase-order <value>", `Purchase order added on the generated invoice.`).option("--custom-note <value>", `Custom note added on the generated invoice.`).option("--coupons <json>", `Coupons applied to the generated invoice before the checkout is created, so the checkout email already shows the discounted amount. \`line_item_indexes\` refer to the position of the products in \`products\`. Only supported with the \`checkout\` charging method.`).requiredOption("--charging-method <value>", `
44178
44969
  Charging method.
44179
44970
 
44180
44971
  - \`immediately\`: Customer's payment method will be charged directly to pay the invoice.
@@ -44206,6 +44997,8 @@ Examples:
44206
44997
  args.payment_method_id = opts.paymentMethodId;
44207
44998
  if (opts.products !== void 0)
44208
44999
  args.products = JSON.parse(opts.products);
45000
+ if (opts.coupons !== void 0)
45001
+ args.coupons = JSON.parse(opts.coupons);
44209
45002
  if (opts.availablePaymentMethods !== void 0)
44210
45003
  args.available_payment_methods = JSON.parse(opts.availablePaymentMethods);
44211
45004
  if (opts.checkoutSession !== void 0)
@@ -44222,7 +45015,7 @@ Examples:
44222
45015
  // build/commands/generated/price-configurations.js
44223
45016
  function registerPrice_ConfigurationsCommands(parent) {
44224
45017
  const resource = parent.command("price-configurations").description("Manage price configurations");
44225
- 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", `
45018
+ 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", `
44226
45019
  Examples:
44227
45020
  hyperline price-configurations list
44228
45021
  hyperline price-configurations list --take <take> --product-id <product_id>`).action(async (opts) => {
@@ -44236,10 +45029,6 @@ Examples:
44236
45029
  args.product_id = opts.productId;
44237
45030
  if (opts["productId.not"] !== void 0)
44238
45031
  args.product_id__not = opts["productId.not"];
44239
- if (opts["productId.isNull"] !== void 0)
44240
- args.product_id__isNull = opts["productId.isNull"];
44241
- if (opts["productId.isNotNull"] !== void 0)
44242
- args.product_id__isNotNull = opts["productId.isNotNull"];
44243
45032
  if (opts["productId.equals"] !== void 0)
44244
45033
  args.product_id__equals = opts["productId.equals"];
44245
45034
  if (opts["productId.contains"] !== void 0)
@@ -44252,10 +45041,6 @@ Examples:
44252
45041
  args.price_book_id = opts.priceBookId;
44253
45042
  if (opts["priceBookId.not"] !== void 0)
44254
45043
  args.price_book_id__not = opts["priceBookId.not"];
44255
- if (opts["priceBookId.isNull"] !== void 0)
44256
- args.price_book_id__isNull = opts["priceBookId.isNull"];
44257
- if (opts["priceBookId.isNotNull"] !== void 0)
44258
- args.price_book_id__isNotNull = opts["priceBookId.isNotNull"];
44259
45044
  if (opts["priceBookId.equals"] !== void 0)
44260
45045
  args.price_book_id__equals = opts["priceBookId.equals"];
44261
45046
  if (opts["priceBookId.contains"] !== void 0)
@@ -44264,6 +45049,10 @@ Examples:
44264
45049
  args.price_book_id__startsWith = opts["priceBookId.startsWith"];
44265
45050
  if (opts["priceBookId.endWith"] !== void 0)
44266
45051
  args.price_book_id__endWith = opts["priceBookId.endWith"];
45052
+ if (opts["priceBookId.isNull"] !== void 0)
45053
+ args.price_book_id__isNull = opts["priceBookId.isNull"];
45054
+ if (opts["priceBookId.isNotNull"] !== void 0)
45055
+ args.price_book_id__isNotNull = opts["priceBookId.isNotNull"];
44267
45056
  if (opts.take !== void 0)
44268
45057
  args.take = Number(opts.take);
44269
45058
  if (opts.skip !== void 0)
@@ -44277,20 +45066,18 @@ Examples:
44277
45066
  "skip",
44278
45067
  "product_id",
44279
45068
  "product_id__not",
44280
- "product_id__isNull",
44281
- "product_id__isNotNull",
44282
45069
  "product_id__equals",
44283
45070
  "product_id__contains",
44284
45071
  "product_id__startsWith",
44285
45072
  "product_id__endWith",
44286
45073
  "price_book_id",
44287
45074
  "price_book_id__not",
44288
- "price_book_id__isNull",
44289
- "price_book_id__isNotNull",
44290
45075
  "price_book_id__equals",
44291
45076
  "price_book_id__contains",
44292
45077
  "price_book_id__startsWith",
44293
- "price_book_id__endWith"
45078
+ "price_book_id__endWith",
45079
+ "price_book_id__isNull",
45080
+ "price_book_id__isNotNull"
44294
45081
  ]
44295
45082
  });
44296
45083
  });
@@ -44416,7 +45203,7 @@ Examples:
44416
45203
  // build/commands/generated/products.js
44417
45204
  function registerProductsCommands(parent) {
44418
45205
  const resource = parent.command("products").description("Manage products");
44419
- 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", `
45206
+ resource.command("list").description(`List products with optional filters for id, status, name, description, type, price_book_id, and custom_properties (JSON object of slug to exact value, e.g. {"my_slug":"value"}; slugs matching no custom property are rejected). Products define what is being sold (flat fee, per-unit, usage-based, etc.). Paginated with take/skip. Includes bundle items and the first 50 price configurations per product. Use list_price_configurations filtered by product_id for the complete list.`).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`).option("--custom-properties <value>", `Filter by custom property values, as a JSON object mapping a custom property slug to the exact value to match. Suffix a slug with \`__contains\` for a case-sensitive substring match on text values. Several entries are combined with AND. A slug that matches no custom property returns a \`400\` error.`).addHelpText("after", `
44420
45207
  Examples:
44421
45208
  hyperline products list
44422
45209
  hyperline products list --take <take> --id <id>`).action(async (opts) => {
@@ -44430,10 +45217,6 @@ Examples:
44430
45217
  args.id = opts.id;
44431
45218
  if (opts["id.not"] !== void 0)
44432
45219
  args.id__not = opts["id.not"];
44433
- if (opts["id.isNull"] !== void 0)
44434
- args.id__isNull = opts["id.isNull"];
44435
- if (opts["id.isNotNull"] !== void 0)
44436
- args.id__isNotNull = opts["id.isNotNull"];
44437
45220
  if (opts["id.equals"] !== void 0)
44438
45221
  args.id__equals = opts["id.equals"];
44439
45222
  if (opts["id.contains"] !== void 0)
@@ -44450,10 +45233,6 @@ Examples:
44450
45233
  args.name = opts.name;
44451
45234
  if (opts["name.not"] !== void 0)
44452
45235
  args.name__not = opts["name.not"];
44453
- if (opts["name.isNull"] !== void 0)
44454
- args.name__isNull = opts["name.isNull"];
44455
- if (opts["name.isNotNull"] !== void 0)
44456
- args.name__isNotNull = opts["name.isNotNull"];
44457
45236
  if (opts["name.equals"] !== void 0)
44458
45237
  args.name__equals = opts["name.equals"];
44459
45238
  if (opts["name.contains"] !== void 0)
@@ -44466,10 +45245,6 @@ Examples:
44466
45245
  args.description = opts.description;
44467
45246
  if (opts["description.not"] !== void 0)
44468
45247
  args.description__not = opts["description.not"];
44469
- if (opts["description.isNull"] !== void 0)
44470
- args.description__isNull = opts["description.isNull"];
44471
- if (opts["description.isNotNull"] !== void 0)
44472
- args.description__isNotNull = opts["description.isNotNull"];
44473
45248
  if (opts["description.equals"] !== void 0)
44474
45249
  args.description__equals = opts["description.equals"];
44475
45250
  if (opts["description.contains"] !== void 0)
@@ -44478,14 +45253,14 @@ Examples:
44478
45253
  args.description__startsWith = opts["description.startsWith"];
44479
45254
  if (opts["description.endWith"] !== void 0)
44480
45255
  args.description__endWith = opts["description.endWith"];
45256
+ if (opts["description.isNull"] !== void 0)
45257
+ args.description__isNull = opts["description.isNull"];
45258
+ if (opts["description.isNotNull"] !== void 0)
45259
+ args.description__isNotNull = opts["description.isNotNull"];
44481
45260
  if (opts.type !== void 0)
44482
45261
  args.type = opts.type;
44483
45262
  if (opts["type.not"] !== void 0)
44484
45263
  args.type__not = opts["type.not"];
44485
- if (opts["type.isNull"] !== void 0)
44486
- args.type__isNull = opts["type.isNull"];
44487
- if (opts["type.isNotNull"] !== void 0)
44488
- args.type__isNotNull = opts["type.isNotNull"];
44489
45264
  if (opts["type.equals"] !== void 0)
44490
45265
  args.type__equals = opts["type.equals"];
44491
45266
  if (opts["type.contains"] !== void 0)
@@ -44496,6 +45271,8 @@ Examples:
44496
45271
  args.type__endWith = opts["type.endWith"];
44497
45272
  if (opts.priceBookId !== void 0)
44498
45273
  args.price_book_id = opts.priceBookId;
45274
+ if (opts.customProperties !== void 0)
45275
+ args.custom_properties = opts.customProperties;
44499
45276
  if (opts.take !== void 0)
44500
45277
  args.take = Number(opts.take);
44501
45278
  if (opts.skip !== void 0)
@@ -44509,8 +45286,6 @@ Examples:
44509
45286
  "skip",
44510
45287
  "id",
44511
45288
  "id__not",
44512
- "id__isNull",
44513
- "id__isNotNull",
44514
45289
  "id__equals",
44515
45290
  "id__contains",
44516
45291
  "id__startsWith",
@@ -44519,33 +45294,30 @@ Examples:
44519
45294
  "status__in",
44520
45295
  "name",
44521
45296
  "name__not",
44522
- "name__isNull",
44523
- "name__isNotNull",
44524
45297
  "name__equals",
44525
45298
  "name__contains",
44526
45299
  "name__startsWith",
44527
45300
  "name__endWith",
44528
45301
  "description",
44529
45302
  "description__not",
44530
- "description__isNull",
44531
- "description__isNotNull",
44532
45303
  "description__equals",
44533
45304
  "description__contains",
44534
45305
  "description__startsWith",
44535
45306
  "description__endWith",
45307
+ "description__isNull",
45308
+ "description__isNotNull",
44536
45309
  "type",
44537
45310
  "type__not",
44538
- "type__isNull",
44539
- "type__isNotNull",
44540
45311
  "type__equals",
44541
45312
  "type__contains",
44542
45313
  "type__startsWith",
44543
45314
  "type__endWith",
44544
- "price_book_id"
45315
+ "price_book_id",
45316
+ "custom_properties"
44545
45317
  ]
44546
45318
  });
44547
45319
  });
44548
- resource.command("create").description(`Create a new product with name, type (flat_fee, per_unit, usage, seat, etc.), and pricing configuration.`).requiredOption("--name <value>", `Product name.`).option("--description <value>", `Product description.`).option("--description-display-interval-dates", `Indicates if the dates of the interval should be automatically added in the product description on the invoices.`).option("--public-description <value>", `Public description of the product.`).option("--translations <json>", `Product name and description translations.`).option("--is-available-on-demand", `is_available_on_demand`).option("--is-available-on-subscription", `is_available_on_subscription`).option("--custom-properties <json>", `A list of key value with the slug of the custom property as the key and the custom property value as value.`).option("--accounting <json>", `Mapping invoicing entity ID/accounting settings.`).requiredOption("--type <value>", `Product type for fixed fee products.`).requiredOption("--price-configurations <json>", `Price configurations for the product.`).option("--aggregator <json>", `Aggregator configuration to automatically count seats from billable events. Only count aggregators are supported for seat products.`).option("--aggregator-id <value>", `ID of an existing aggregator to link to this product.`).option("--unit-name <value>", `Name of the unit (e.g., 'user', 'seat').`).option("--is-connected-seat-item", `When true, the seat count is automatically synced from an external source (e.g., CRM users).`).option("--credit-aggregators <json>", `Multiple aggregators with weights for multi-aggregator credit consumption. Cannot be used together with aggregator or aggregator_id.`).option("--low-credits-threshold <number>", `Threshold indicating a low level of credits.`).option("--credits-grant-mode <value>", `
45320
+ resource.command("create").description(`Create a new product with name, type (flat_fee, per_unit, usage, seat, etc.), and pricing configuration. With catalog versioning enabled, the change is staged in the pending catalog draft and only goes live after publish_catalog_draft.`).requiredOption("--name <value>", `Product name.`).option("--description <value>", `Product description.`).option("--description-display-interval-dates", `Indicates if the dates of the interval should be automatically added in the product description on the invoices.`).option("--public-description <value>", `Public description of the product.`).option("--translations <json>", `Product name and description translations.`).option("--is-available-on-demand", `is_available_on_demand`).option("--is-available-on-subscription", `is_available_on_subscription`).option("--custom-properties <json>", `A list of key value with the slug of the custom property as the key and the custom property value as value.`).option("--accounting <json>", `Mapping invoicing entity ID/accounting settings.`).requiredOption("--type <value>", `Product type for fixed fee products.`).requiredOption("--price-configurations <json>", `Price configurations for the product.`).option("--aggregator <json>", `Aggregator configuration to automatically count seats from billable events. Only count aggregators are supported for seat products.`).option("--aggregator-id <value>", `ID of an existing aggregator to link to this product.`).option("--unit-name <value>", `Name of the unit (e.g., 'user', 'seat').`).option("--is-connected-seat-item", `When true, the seat count is automatically synced from an external source (e.g., CRM users).`).option("--credit-aggregators <json>", `Multiple aggregators with weights for multi-aggregator credit consumption. Cannot be used together with aggregator or aggregator_id.`).option("--low-credits-threshold <number>", `Threshold indicating a low level of credits.`).option("--credits-grant-mode <value>", `
44549
45321
  How the periodic credit allowance is granted for partial billing periods.
44550
45322
 
44551
45323
  - \`prorated\` (default): the granted credits are prorated to the elapsed period.
@@ -44633,11 +45405,116 @@ Examples:
44633
45405
  queryParamKeys: ["price_book_id"]
44634
45406
  });
44635
45407
  });
44636
- resource.command("update").description(`Update a product's name, description, type, or configuration by ID.`).requiredOption("--id <value>", `id parameter`).requiredOption("--name <value>", `Product name.`).option("--description <value>", `Product description.`).option("--public-description <value>", `Public description of the product.`).option("--translations <json>", `Product name and description translations.`).option("--is-available-on-demand", `is_available_on_demand`).option("--is-available-on-subscription", `is_available_on_subscription`).option("--properties <json>", `properties`).option("--custom-properties <json>", `A list of key value with the slug of the custom property as the key and the custom property value as value.`).option("--accounting <json>", `Mapping invoicing entity ID/accounting settings.`).addHelpText("after", `
45408
+ resource.command("update").description(`Update a product's name, description, type, or configuration by ID. With catalog versioning enabled, the change is staged in the pending catalog draft and only goes live after publish_catalog_draft.`).requiredOption("--id <value>", `id parameter`).requiredOption("--name <value>", `Product name.`).option("--description <value>", `Product description.`).option("--public-description <value>", `Public description of the product.`).option("--translations <json>", `Product name and description translations.`).option("--is-available-on-demand", `is_available_on_demand`).option("--is-available-on-subscription", `is_available_on_subscription`).option("--properties <json>", `properties`).option("--custom-properties <json>", `A list of key value with the slug of the custom property as the key and the custom property value as value.`).option("--accounting <json>", `Mapping invoicing entity ID/accounting settings.`).addHelpText("after", `
45409
+ Examples:
45410
+ hyperline products update --id <id> --name <name>
45411
+ hyperline products update --id <id> --name <name> --description <description> --public-description <public_description>
45412
+ hyperline products update --id <id> --name <name> --output json`).action(async (opts) => {
45413
+ const ctx = resource.parent?.opts()._ctx;
45414
+ if (!ctx) {
45415
+ process.stderr.write("Error: Not authenticated\n");
45416
+ process.exit(1);
45417
+ }
45418
+ const args = {};
45419
+ if (opts.id !== void 0)
45420
+ args.id = opts.id;
45421
+ if (opts.name !== void 0)
45422
+ args.name = opts.name;
45423
+ if (opts.description !== void 0)
45424
+ args.description = opts.description;
45425
+ if (opts.publicDescription !== void 0)
45426
+ args.public_description = opts.publicDescription;
45427
+ if (opts.isAvailableOnDemand !== void 0)
45428
+ args.is_available_on_demand = true;
45429
+ if (opts.isAvailableOnSubscription !== void 0)
45430
+ args.is_available_on_subscription = true;
45431
+ if (opts.translations !== void 0)
45432
+ args.translations = JSON.parse(opts.translations);
45433
+ if (opts.properties !== void 0)
45434
+ args.properties = JSON.parse(opts.properties);
45435
+ if (opts.customProperties !== void 0)
45436
+ args.custom_properties = JSON.parse(opts.customProperties);
45437
+ if (opts.accounting !== void 0)
45438
+ args.accounting = JSON.parse(opts.accounting);
45439
+ await ctx.execute({
45440
+ method: "PUT",
45441
+ path: "/v1/products/{id}",
45442
+ args,
45443
+ queryParamKeys: []
45444
+ });
45445
+ });
45446
+ resource.command("archive").description(`Archive a product by ID. Archived products cannot be added to new subscriptions but remain on existing ones.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
45447
+ Examples:
45448
+ hyperline products archive --id <id>
45449
+ hyperline products archive --id <id> --output json`).action(async (opts) => {
45450
+ const ctx = resource.parent?.opts()._ctx;
45451
+ if (!ctx) {
45452
+ process.stderr.write("Error: Not authenticated\n");
45453
+ process.exit(1);
45454
+ }
45455
+ const args = {};
45456
+ if (opts.id !== void 0)
45457
+ args.id = opts.id;
45458
+ await ctx.execute({
45459
+ method: "PUT",
45460
+ path: "/v1/products/{id}/archive",
45461
+ args,
45462
+ queryParamKeys: []
45463
+ });
45464
+ });
45465
+ resource.command("delete").description(`Permanently delete an archived product by ID. Products attached to subscriptions, plans, or templates cannot be deleted.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
45466
+ Examples:
45467
+ hyperline products delete --id <id>
45468
+ hyperline products delete --id <id> --output json`).action(async (opts) => {
45469
+ const ctx = resource.parent?.opts()._ctx;
45470
+ if (!ctx) {
45471
+ process.stderr.write("Error: Not authenticated\n");
45472
+ process.exit(1);
45473
+ }
45474
+ const args = {};
45475
+ if (opts.id !== void 0)
45476
+ args.id = opts.id;
45477
+ if (!opts.yes) {
45478
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
45479
+ if (!confirmed) {
45480
+ process.stdout.write("Aborted.\n");
45481
+ return;
45482
+ }
45483
+ }
45484
+ await ctx.execute({
45485
+ method: "DELETE",
45486
+ path: "/v1/products/{id}",
45487
+ args,
45488
+ queryParamKeys: []
45489
+ });
45490
+ });
45491
+ resource.command("unarchive").description(`Restore a previously archived product, making it available for new subscriptions again.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
45492
+ Examples:
45493
+ hyperline products unarchive --id <id>
45494
+ hyperline products unarchive --id <id> --output json`).action(async (opts) => {
45495
+ const ctx = resource.parent?.opts()._ctx;
45496
+ if (!ctx) {
45497
+ process.stderr.write("Error: Not authenticated\n");
45498
+ process.exit(1);
45499
+ }
45500
+ const args = {};
45501
+ if (opts.id !== void 0)
45502
+ args.id = opts.id;
45503
+ await ctx.execute({
45504
+ method: "PUT",
45505
+ path: "/v1/products/{id}/unarchive",
45506
+ args,
45507
+ queryParamKeys: []
45508
+ });
45509
+ });
45510
+ }
45511
+
45512
+ // build/commands/generated/products-features.js
45513
+ function registerProducts_FeaturesCommands(parent) {
45514
+ const resource = parent.command("products-features").description("Manage products > features");
45515
+ resource.command("list-product-features").description(`List feature values assigned to a product.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
44637
45516
  Examples:
44638
- hyperline products update --id <id> --name <name>
44639
- hyperline products update --id <id> --name <name> --description <description> --public-description <public_description>
44640
- hyperline products update --id <id> --name <name> --output json`).action(async (opts) => {
45517
+ hyperline products-features list-product-features --id <id>`).action(async (opts) => {
44641
45518
  const ctx = resource.parent?.opts()._ctx;
44642
45519
  if (!ctx) {
44643
45520
  process.stderr.write("Error: Not authenticated\n");
@@ -44646,35 +45523,17 @@ Examples:
44646
45523
  const args = {};
44647
45524
  if (opts.id !== void 0)
44648
45525
  args.id = opts.id;
44649
- if (opts.name !== void 0)
44650
- args.name = opts.name;
44651
- if (opts.description !== void 0)
44652
- args.description = opts.description;
44653
- if (opts.publicDescription !== void 0)
44654
- args.public_description = opts.publicDescription;
44655
- if (opts.isAvailableOnDemand !== void 0)
44656
- args.is_available_on_demand = true;
44657
- if (opts.isAvailableOnSubscription !== void 0)
44658
- args.is_available_on_subscription = true;
44659
- if (opts.translations !== void 0)
44660
- args.translations = JSON.parse(opts.translations);
44661
- if (opts.properties !== void 0)
44662
- args.properties = JSON.parse(opts.properties);
44663
- if (opts.customProperties !== void 0)
44664
- args.custom_properties = JSON.parse(opts.customProperties);
44665
- if (opts.accounting !== void 0)
44666
- args.accounting = JSON.parse(opts.accounting);
44667
45526
  await ctx.execute({
44668
- method: "PUT",
44669
- path: "/v1/products/{id}",
45527
+ method: "GET",
45528
+ path: "/v1/products/{id}/features",
44670
45529
  args,
44671
45530
  queryParamKeys: []
44672
45531
  });
44673
45532
  });
44674
- resource.command("archive").description(`Archive a product by ID. Archived products cannot be added to new subscriptions but remain on existing ones.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
45533
+ 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", `
44675
45534
  Examples:
44676
- hyperline products archive --id <id>
44677
- hyperline products archive --id <id> --output json`).action(async (opts) => {
45535
+ hyperline products-features set-product-feature --id <id> --code <code> --value
45536
+ hyperline products-features set-product-feature --id <id> --code <code> --value --output json`).action(async (opts) => {
44678
45537
  const ctx = resource.parent?.opts()._ctx;
44679
45538
  if (!ctx) {
44680
45539
  process.stderr.write("Error: Not authenticated\n");
@@ -44683,17 +45542,21 @@ Examples:
44683
45542
  const args = {};
44684
45543
  if (opts.id !== void 0)
44685
45544
  args.id = opts.id;
45545
+ if (opts.code !== void 0)
45546
+ args.code = opts.code;
45547
+ if (opts.value !== void 0)
45548
+ args.value = true;
44686
45549
  await ctx.execute({
44687
45550
  method: "PUT",
44688
- path: "/v1/products/{id}/archive",
45551
+ path: "/v1/products/{id}/features/{code}",
44689
45552
  args,
44690
45553
  queryParamKeys: []
44691
45554
  });
44692
45555
  });
44693
- resource.command("delete").description(`Permanently delete an archived product by ID. Products attached to subscriptions, plans, or templates cannot be deleted.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
45556
+ 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", `
44694
45557
  Examples:
44695
- hyperline products delete --id <id>
44696
- hyperline products delete --id <id> --output json`).action(async (opts) => {
45558
+ hyperline products-features delete-product-feature --id <id> --code <code>
45559
+ hyperline products-features delete-product-feature --id <id> --code <code> --output json`).action(async (opts) => {
44697
45560
  const ctx = resource.parent?.opts()._ctx;
44698
45561
  if (!ctx) {
44699
45562
  process.stderr.write("Error: Not authenticated\n");
@@ -44702,6 +45565,8 @@ Examples:
44702
45565
  const args = {};
44703
45566
  if (opts.id !== void 0)
44704
45567
  args.id = opts.id;
45568
+ if (opts.code !== void 0)
45569
+ args.code = opts.code;
44705
45570
  if (!opts.yes) {
44706
45571
  const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
44707
45572
  if (!confirmed) {
@@ -44711,26 +45576,7 @@ Examples:
44711
45576
  }
44712
45577
  await ctx.execute({
44713
45578
  method: "DELETE",
44714
- path: "/v1/products/{id}",
44715
- args,
44716
- queryParamKeys: []
44717
- });
44718
- });
44719
- resource.command("unarchive").description(`Restore a previously archived product, making it available for new subscriptions again.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
44720
- Examples:
44721
- hyperline products unarchive --id <id>
44722
- hyperline products unarchive --id <id> --output json`).action(async (opts) => {
44723
- const ctx = resource.parent?.opts()._ctx;
44724
- if (!ctx) {
44725
- process.stderr.write("Error: Not authenticated\n");
44726
- process.exit(1);
44727
- }
44728
- const args = {};
44729
- if (opts.id !== void 0)
44730
- args.id = opts.id;
44731
- await ctx.execute({
44732
- method: "PUT",
44733
- path: "/v1/products/{id}/unarchive",
45579
+ path: "/v1/products/{id}/features/{code}",
44734
45580
  args,
44735
45581
  queryParamKeys: []
44736
45582
  });
@@ -44746,12 +45592,12 @@ Quote status.
44746
45592
  - \`draft\`: The quote is a draft.
44747
45593
  - \`approved\`: The quote is approved and ready to be sent to the customer.
44748
45594
  - \`pending_signature\`: The quote is awaiting the customer's signature.
44749
- `).option("--owner-email <value>", `Email address of the Hyperline user acting as the quote owner. The owner requests approval when the quote is finalized using an API key or finalized during creation. If not specified, the Hyperline account owner will be assigned.`).requiredOption("--customer-id <value>", `ID of the customer.`).option("--invoicing-entity-id <value>", `ID of the invoicing entity attached to the quote.`).option("--catalog-version-id <value>", `ID of a published catalog version to price every product of the quote from, instead of the live products catalog. A product's own \`catalog_version_id\` takes precedence, and explicit \`prices\` always win over both.`).option("--comments <value>", `Custom comments displayed on the quote.`).option("--terms <value>", `Custom quotation terms.`).option("--amount <number>", `Estimated contract value. For subscription quotes, defaults to the computed subscription value if not specified. For one-off quotes, this field is ignored \u2014 the amount is always derived from the linked invoice's \`amount_excluding_tax\`.`).option("--contract-value <number>", `What the customer pays over the contract, each coupon counted on the invoices it applies to. Computed from the subscription for \`subscription\` and \`subscription_update\` quotes, unless set manually. Not set on \`one_off\` quotes. When specified, overrides the computed value.`).option("--collect-payment-details <value>", `Collect customer payment method mandate during signature flow or not.`).option("--collect-custom-property-ids <json>", `IDs of the customer custom properties required to be filled during the signature flow.`).option("--contract-clause-ids <json>", `IDs of the contract clauses used in the quote terms.`).option("--require-tax-id <value>", `Require the customer to provide a tax ID during the signature flow.`).option("--display-quote-value <value>", `Display the total quote value on the quote.`).option("--display-quote-value-with-tax <value>", `Display the total quote value including tax on the quote. Only applies to \`one_off\` quotes.`).option("--display-taxes <value>", `Display tax breakdown on the quote.`).option("--display-price-tiers <value>", `Controls which price tiers are displayed on the quote.
45595
+ `).option("--owner-email <value>", `Email address of the Hyperline user acting as the quote owner. The user must be a member of your Hyperline account. 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.
44750
45596
 
44751
45597
  - \`all\`: Display all pricing tiers.
44752
45598
  - \`matching\`: Only display the tiers used to compute the price based on quantity.
44753
45599
  - \`none\`: Hide all pricing tiers.
44754
- `).option("--display-phase-value <value>", `Display per-phase value breakdown on the quote.`).option("--display-discounts-on-total <value>", `Display discounts on the totals, with product prices before discount. Totals then follow the contract value, so discounts with a limited duration are included.`).option("--display-first-invoice-amount <value>", `Display the first invoice amount on the quote.`).option("--display-documents-in-preview <value>", `Display attached documents in the quote preview.`).option("--subscription-update-display <value>", `Sections displayed on subscription update quotes: quote_update_details, subscription_details, or both. Takes precedence over display_subscription_on_update.`).option("--generate-draft-invoices <value>", `When \`true\`, the invoice issued after signature stays in \`draft\` status instead of being emitted for payment. Use this when you want to review the final invoice manually before sending it. Defaults to \`false\`.`).option("--template-id <value>", `ID of the quote template. If not specified, a subscription configuration or an \`invoice\` payload must be defined.`).option("--expires-at <value>", `Quote expiration date. UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.`).option("--subscription <json>", `Subscription configuration constituting the quote.`).option("--invoice <json>", `Invoice configuration constituting the one-off quote. When provided, a draft invoice is created and linked to the quote. Cannot be combined with \`subscription\` or \`template_id\`.`).addHelpText("after", `
45600
+ `).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\`.`).option("--attachments <paths...>", `Paths of the local files to upload (space-separated, sends a multipart request)`).addHelpText("after", `
44755
45601
  Examples:
44756
45602
  hyperline quotes create --customer-id <customer_id>
44757
45603
  hyperline quotes create --customer-id <customer_id> --status <status> --owner-email <owner_email>
@@ -44816,14 +45662,18 @@ Examples:
44816
45662
  args.subscription = JSON.parse(opts.subscription);
44817
45663
  if (opts.invoice !== void 0)
44818
45664
  args.invoice = JSON.parse(opts.invoice);
45665
+ const files = {};
45666
+ if (opts.attachments !== void 0)
45667
+ files.attachments = [opts.attachments].flat();
44819
45668
  await ctx.execute({
44820
45669
  method: "POST",
44821
45670
  path: "/v1/quotes",
44822
45671
  args,
44823
- queryParamKeys: []
45672
+ queryParamKeys: [],
45673
+ files
44824
45674
  });
44825
45675
  });
44826
- resource.command("list").description(`List quotes with optional filters for id, number, status, customer_id, template_id, crm_opportunity_id, type, and updated_at. Paginated with take/skip.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--id <value>", `id`).option("--id.not <value>", `id__not`).option("--id.is-null <value>", `id__isNull`).option("--id.is-not-null <value>", `id__isNotNull`).option("--id.equals <value>", `id__equals`).option("--id.contains <value>", `id__contains`).option("--id.starts-with <value>", `id__startsWith`).option("--id.end-with <value>", `id__endWith`).option("--number <value>", `number`).option("--number.not <value>", `number__not`).option("--number.is-null <value>", `number__isNull`).option("--number.is-not-null <value>", `number__isNotNull`).option("--number.equals <value>", `number__equals`).option("--number.contains <value>", `number__contains`).option("--number.starts-with <value>", `number__startsWith`).option("--number.end-with <value>", `number__endWith`).option("--status <value>", `status`).option("--status.in <value>", `status__in`).option("--customer-id <value>", `customer_id`).option("--customer-id.not <value>", `customer_id__not`).option("--customer-id.is-null <value>", `customer_id__isNull`).option("--customer-id.is-not-null <value>", `customer_id__isNotNull`).option("--customer-id.equals <value>", `customer_id__equals`).option("--customer-id.contains <value>", `customer_id__contains`).option("--customer-id.starts-with <value>", `customer_id__startsWith`).option("--customer-id.end-with <value>", `customer_id__endWith`).option("--template-id <value>", `template_id`).option("--template-id.not <value>", `template_id__not`).option("--template-id.is-null <value>", `template_id__isNull`).option("--template-id.is-not-null <value>", `template_id__isNotNull`).option("--template-id.equals <value>", `template_id__equals`).option("--template-id.contains <value>", `template_id__contains`).option("--template-id.starts-with <value>", `template_id__startsWith`).option("--template-id.end-with <value>", `template_id__endWith`).option("--crm-opportunity-id <value>", `crm_opportunity_id`).option("--crm-opportunity-id.not <value>", `crm_opportunity_id__not`).option("--crm-opportunity-id.is-null <value>", `crm_opportunity_id__isNull`).option("--crm-opportunity-id.is-not-null <value>", `crm_opportunity_id__isNotNull`).option("--crm-opportunity-id.equals <value>", `crm_opportunity_id__equals`).option("--crm-opportunity-id.contains <value>", `crm_opportunity_id__contains`).option("--crm-opportunity-id.starts-with <value>", `crm_opportunity_id__startsWith`).option("--crm-opportunity-id.end-with <value>", `crm_opportunity_id__endWith`).option("--type <value>", `type`).option("--updated-at <value>", `updated_at`).option("--updated-at.not <value>", `updated_at__not`).option("--updated-at.is-null <value>", `updated_at__isNull`).option("--updated-at.is-not-null <value>", `updated_at__isNotNull`).option("--updated-at.equals <value>", `updated_at__equals`).option("--updated-at.lt <value>", `updated_at__lt`).option("--updated-at.lte <value>", `updated_at__lte`).option("--updated-at.gt <value>", `updated_at__gt`).option("--updated-at.gte <value>", `updated_at__gte`).addHelpText("after", `
45676
+ 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", `
44827
45677
  Examples:
44828
45678
  hyperline quotes list
44829
45679
  hyperline quotes list --take <take> --id <id>`).action(async (opts) => {
@@ -44837,10 +45687,6 @@ Examples:
44837
45687
  args.id = opts.id;
44838
45688
  if (opts["id.not"] !== void 0)
44839
45689
  args.id__not = opts["id.not"];
44840
- if (opts["id.isNull"] !== void 0)
44841
- args.id__isNull = opts["id.isNull"];
44842
- if (opts["id.isNotNull"] !== void 0)
44843
- args.id__isNotNull = opts["id.isNotNull"];
44844
45690
  if (opts["id.equals"] !== void 0)
44845
45691
  args.id__equals = opts["id.equals"];
44846
45692
  if (opts["id.contains"] !== void 0)
@@ -44853,10 +45699,6 @@ Examples:
44853
45699
  args.number = opts.number;
44854
45700
  if (opts["number.not"] !== void 0)
44855
45701
  args.number__not = opts["number.not"];
44856
- if (opts["number.isNull"] !== void 0)
44857
- args.number__isNull = opts["number.isNull"];
44858
- if (opts["number.isNotNull"] !== void 0)
44859
- args.number__isNotNull = opts["number.isNotNull"];
44860
45702
  if (opts["number.equals"] !== void 0)
44861
45703
  args.number__equals = opts["number.equals"];
44862
45704
  if (opts["number.contains"] !== void 0)
@@ -44873,10 +45715,6 @@ Examples:
44873
45715
  args.customer_id = opts.customerId;
44874
45716
  if (opts["customerId.not"] !== void 0)
44875
45717
  args.customer_id__not = opts["customerId.not"];
44876
- if (opts["customerId.isNull"] !== void 0)
44877
- args.customer_id__isNull = opts["customerId.isNull"];
44878
- if (opts["customerId.isNotNull"] !== void 0)
44879
- args.customer_id__isNotNull = opts["customerId.isNotNull"];
44880
45718
  if (opts["customerId.equals"] !== void 0)
44881
45719
  args.customer_id__equals = opts["customerId.equals"];
44882
45720
  if (opts["customerId.contains"] !== void 0)
@@ -44889,10 +45727,6 @@ Examples:
44889
45727
  args.template_id = opts.templateId;
44890
45728
  if (opts["templateId.not"] !== void 0)
44891
45729
  args.template_id__not = opts["templateId.not"];
44892
- if (opts["templateId.isNull"] !== void 0)
44893
- args.template_id__isNull = opts["templateId.isNull"];
44894
- if (opts["templateId.isNotNull"] !== void 0)
44895
- args.template_id__isNotNull = opts["templateId.isNotNull"];
44896
45730
  if (opts["templateId.equals"] !== void 0)
44897
45731
  args.template_id__equals = opts["templateId.equals"];
44898
45732
  if (opts["templateId.contains"] !== void 0)
@@ -44901,14 +45735,14 @@ Examples:
44901
45735
  args.template_id__startsWith = opts["templateId.startsWith"];
44902
45736
  if (opts["templateId.endWith"] !== void 0)
44903
45737
  args.template_id__endWith = opts["templateId.endWith"];
45738
+ if (opts["templateId.isNull"] !== void 0)
45739
+ args.template_id__isNull = opts["templateId.isNull"];
45740
+ if (opts["templateId.isNotNull"] !== void 0)
45741
+ args.template_id__isNotNull = opts["templateId.isNotNull"];
44904
45742
  if (opts.crmOpportunityId !== void 0)
44905
45743
  args.crm_opportunity_id = opts.crmOpportunityId;
44906
45744
  if (opts["crmOpportunityId.not"] !== void 0)
44907
45745
  args.crm_opportunity_id__not = opts["crmOpportunityId.not"];
44908
- if (opts["crmOpportunityId.isNull"] !== void 0)
44909
- args.crm_opportunity_id__isNull = opts["crmOpportunityId.isNull"];
44910
- if (opts["crmOpportunityId.isNotNull"] !== void 0)
44911
- args.crm_opportunity_id__isNotNull = opts["crmOpportunityId.isNotNull"];
44912
45746
  if (opts["crmOpportunityId.equals"] !== void 0)
44913
45747
  args.crm_opportunity_id__equals = opts["crmOpportunityId.equals"];
44914
45748
  if (opts["crmOpportunityId.contains"] !== void 0)
@@ -44917,16 +45751,16 @@ Examples:
44917
45751
  args.crm_opportunity_id__startsWith = opts["crmOpportunityId.startsWith"];
44918
45752
  if (opts["crmOpportunityId.endWith"] !== void 0)
44919
45753
  args.crm_opportunity_id__endWith = opts["crmOpportunityId.endWith"];
45754
+ if (opts["crmOpportunityId.isNull"] !== void 0)
45755
+ args.crm_opportunity_id__isNull = opts["crmOpportunityId.isNull"];
45756
+ if (opts["crmOpportunityId.isNotNull"] !== void 0)
45757
+ args.crm_opportunity_id__isNotNull = opts["crmOpportunityId.isNotNull"];
44920
45758
  if (opts.type !== void 0)
44921
45759
  args.type = opts.type;
44922
45760
  if (opts.updatedAt !== void 0)
44923
45761
  args.updated_at = opts.updatedAt;
44924
45762
  if (opts["updatedAt.not"] !== void 0)
44925
45763
  args.updated_at__not = opts["updatedAt.not"];
44926
- if (opts["updatedAt.isNull"] !== void 0)
44927
- args.updated_at__isNull = opts["updatedAt.isNull"];
44928
- if (opts["updatedAt.isNotNull"] !== void 0)
44929
- args.updated_at__isNotNull = opts["updatedAt.isNotNull"];
44930
45764
  if (opts["updatedAt.equals"] !== void 0)
44931
45765
  args.updated_at__equals = opts["updatedAt.equals"];
44932
45766
  if (opts["updatedAt.lt"] !== void 0)
@@ -44950,16 +45784,12 @@ Examples:
44950
45784
  "skip",
44951
45785
  "id",
44952
45786
  "id__not",
44953
- "id__isNull",
44954
- "id__isNotNull",
44955
45787
  "id__equals",
44956
45788
  "id__contains",
44957
45789
  "id__startsWith",
44958
45790
  "id__endWith",
44959
45791
  "number",
44960
45792
  "number__not",
44961
- "number__isNull",
44962
- "number__isNotNull",
44963
45793
  "number__equals",
44964
45794
  "number__contains",
44965
45795
  "number__startsWith",
@@ -44968,33 +45798,29 @@ Examples:
44968
45798
  "status__in",
44969
45799
  "customer_id",
44970
45800
  "customer_id__not",
44971
- "customer_id__isNull",
44972
- "customer_id__isNotNull",
44973
45801
  "customer_id__equals",
44974
45802
  "customer_id__contains",
44975
45803
  "customer_id__startsWith",
44976
45804
  "customer_id__endWith",
44977
45805
  "template_id",
44978
45806
  "template_id__not",
44979
- "template_id__isNull",
44980
- "template_id__isNotNull",
44981
45807
  "template_id__equals",
44982
45808
  "template_id__contains",
44983
45809
  "template_id__startsWith",
44984
45810
  "template_id__endWith",
45811
+ "template_id__isNull",
45812
+ "template_id__isNotNull",
44985
45813
  "crm_opportunity_id",
44986
45814
  "crm_opportunity_id__not",
44987
- "crm_opportunity_id__isNull",
44988
- "crm_opportunity_id__isNotNull",
44989
45815
  "crm_opportunity_id__equals",
44990
45816
  "crm_opportunity_id__contains",
44991
45817
  "crm_opportunity_id__startsWith",
44992
45818
  "crm_opportunity_id__endWith",
45819
+ "crm_opportunity_id__isNull",
45820
+ "crm_opportunity_id__isNotNull",
44993
45821
  "type",
44994
45822
  "updated_at",
44995
45823
  "updated_at__not",
44996
- "updated_at__isNull",
44997
- "updated_at__isNotNull",
44998
45824
  "updated_at__equals",
44999
45825
  "updated_at__lt",
45000
45826
  "updated_at__lte",
@@ -45021,12 +45847,12 @@ Examples:
45021
45847
  queryParamKeys: []
45022
45848
  });
45023
45849
  });
45024
- resource.command("update").description(`Update quote-level fields before a quote is finalized. On draft quotes, pass \`subscription\` inline \u2014 the full configuration, not a reference to an existing subscription \u2014 to create or replace the draft subscription configuration, or pass \`invoice\` on a one-off quote to replace the linked draft invoice. For quotes created from \`template_id\`, use this tool for subscription overrides such as dates, contract terms, products, phases, coupons, discounts, prices, seats, and subscription custom properties. Omit \`terms\`, \`comments\`, and \`contract_clause_ids\` unless deliberately overriding template content. Discover product and price configuration IDs with \`get_catalog_context\`.`).requiredOption("--id <value>", `id parameter`).option("--owner-email <value>", `Email address of the Hyperline user acting as the quote owner. The owner requests approval when the quote is finalized using an API key or finalized during creation.`).option("--catalog-version-id <value>", `ID of a published catalog version to price every product of the quote from, instead of the live products catalog. A product's own \`catalog_version_id\` takes precedence, and explicit \`prices\` always win over both.`).option("--comments <value>", `Custom comments displayed on the quote.`).option("--terms <value>", `Custom quotation terms.`).option("--amount <number>", `Estimated contract value. Set to \`null\` to clear the manually set value.`).option("--contract-value <number>", `What the customer pays over the contract, each coupon counted on the invoices it applies to. Computed from the subscription for \`subscription\` and \`subscription_update\` quotes, unless set manually. Not set on \`one_off\` quotes. When specified, overrides the computed value. Set to \`null\` to go back to the computed value.`).option("--collect-payment-details <value>", `Collect customer payment method mandate during signature flow or not.`).option("--collect-custom-property-ids <json>", `IDs of the customer custom properties required to be filled during the signature flow.`).option("--contract-clause-ids <json>", `IDs of the contract clauses used in the quote terms.`).option("--require-tax-id <value>", `Require the customer to provide a tax ID during the signature flow.`).option("--display-quote-value <value>", `Display the total quote value on the quote.`).option("--display-quote-value-with-tax <value>", `Display the total quote value including tax on the quote. Only applies to \`one_off\` quotes.`).option("--display-taxes <value>", `Display tax breakdown on the quote.`).option("--display-price-tiers <value>", `Controls which price tiers are displayed on the quote.
45850
+ 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 user must be a member of your Hyperline account. 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.
45025
45851
 
45026
45852
  - \`all\`: Display all pricing tiers.
45027
45853
  - \`matching\`: Only display the tiers used to compute the price based on quantity.
45028
45854
  - \`none\`: Hide all pricing tiers.
45029
- `).option("--display-phase-value <value>", `Display per-phase value breakdown on the quote.`).option("--display-discounts-on-total <value>", `Display discounts on the totals, with product prices before discount. Totals then follow the contract value, so discounts with a limited duration are included.`).option("--display-first-invoice-amount <value>", `Display the first invoice amount on the quote.`).option("--display-documents-in-preview <value>", `Display attached documents in the quote preview.`).option("--subscription-update-display <value>", `Sections displayed on subscription update quotes: quote_update_details, subscription_details, or both. Takes precedence over display_subscription_on_update.`).option("--generate-draft-invoices <value>", `When \`true\`, the invoice issued after signature stays in \`draft\` status instead of being emitted for payment. Use this when you want to review the final invoice manually before sending it. Defaults to \`false\`.`).option("--crm-opportunity-id <value>", `ID of the related opportunity/deal in the connected CRM.`).option("--expires-at <value>", `Quote expiration date. UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format. Set to \`null\` to clear the expiration.`).option("--subscription <json>", `Subscription configuration constituting the quote. When provided on a draft quote, it creates or replaces the draft subscription attached to the quote.`).option("--invoice <json>", `Invoice configuration constituting the one-off quote. When provided on a draft one-off quote, it deletes the previous draft invoice and creates a fresh one linked to the quote. \`invoice.invoicing_entity_id\` is ignored on update \u2014 the quote's existing invoicing entity is reused.`).addHelpText("after", `
45855
+ `).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.`).option("--attachments <paths...>", `Paths of the local files to upload (space-separated, sends a multipart request)`).addHelpText("after", `
45030
45856
  Examples:
45031
45857
  hyperline quotes update --id <id>
45032
45858
  hyperline quotes update --id <id> --owner-email <owner_email> --catalog-version-id <catalog_version_id>
@@ -45087,11 +45913,15 @@ Examples:
45087
45913
  args.subscription = JSON.parse(opts.subscription);
45088
45914
  if (opts.invoice !== void 0)
45089
45915
  args.invoice = JSON.parse(opts.invoice);
45916
+ const files = {};
45917
+ if (opts.attachments !== void 0)
45918
+ files.attachments = [opts.attachments].flat();
45090
45919
  await ctx.execute({
45091
45920
  method: "PATCH",
45092
45921
  path: "/v1/quotes/{id}",
45093
45922
  args,
45094
- queryParamKeys: []
45923
+ queryParamKeys: [],
45924
+ files
45095
45925
  });
45096
45926
  });
45097
45927
  resource.command("duplicate").description(`Create a draft duplicate of an existing quote, including its linked invoice or subscription configuration.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
@@ -45244,9 +46074,10 @@ Examples:
45244
46074
  queryParamKeys: []
45245
46075
  });
45246
46076
  });
45247
- resource.command("sign").description(`Manually mark a quote as signed externally. Optionally upload a signed PDF. Bypasses the built-in Hyperline signature flow.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
46077
+ resource.command("sign").description(`Manually mark a quote as signed externally. Optionally upload a signed PDF. Bypasses the built-in Hyperline signature flow.`).requiredOption("--id <value>", `id parameter`).option("--signed-quote <path>", `Path of the local file to upload (sends a multipart request)`).addHelpText("after", `
45248
46078
  Examples:
45249
46079
  hyperline quotes sign --id <id>
46080
+ hyperline quotes sign --id <id> --signed-quote <path>
45250
46081
  hyperline quotes sign --id <id> --output json`).action(async (opts) => {
45251
46082
  const ctx = resource.parent?.opts()._ctx;
45252
46083
  if (!ctx) {
@@ -45256,11 +46087,15 @@ Examples:
45256
46087
  const args = {};
45257
46088
  if (opts.id !== void 0)
45258
46089
  args.id = opts.id;
46090
+ const files = {};
46091
+ if (opts.signedQuote !== void 0)
46092
+ files.signed_quote = [opts.signedQuote].flat();
45259
46093
  await ctx.execute({
45260
46094
  method: "POST",
45261
46095
  path: "/v1/quotes/{id}/sign",
45262
46096
  args,
45263
- queryParamKeys: []
46097
+ queryParamKeys: [],
46098
+ files
45264
46099
  });
45265
46100
  });
45266
46101
  resource.command("void").description(`Void an existing quote, canceling it and preventing further actions.`).requiredOption("--id <value>", `id parameter`).requiredOption("--reason <value>", `Quote voiding reason.`).addHelpText("after", `
@@ -45372,7 +46207,7 @@ Examples:
45372
46207
  // build/commands/generated/quotes-templates.js
45373
46208
  function registerQuotes_TemplatesCommands(parent) {
45374
46209
  const resource = parent.command("quotes-templates").description("Manage quotes > templates");
45375
- 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", `
46210
+ 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", `
45376
46211
  Examples:
45377
46212
  hyperline quotes-templates list-quote-templates
45378
46213
  hyperline quotes-templates list-quote-templates --take <take> --id <id>`).action(async (opts) => {
@@ -45386,10 +46221,6 @@ Examples:
45386
46221
  args.id = opts.id;
45387
46222
  if (opts["id.not"] !== void 0)
45388
46223
  args.id__not = opts["id.not"];
45389
- if (opts["id.isNull"] !== void 0)
45390
- args.id__isNull = opts["id.isNull"];
45391
- if (opts["id.isNotNull"] !== void 0)
45392
- args.id__isNotNull = opts["id.isNotNull"];
45393
46224
  if (opts["id.equals"] !== void 0)
45394
46225
  args.id__equals = opts["id.equals"];
45395
46226
  if (opts["id.contains"] !== void 0)
@@ -45402,10 +46233,6 @@ Examples:
45402
46233
  args.name = opts.name;
45403
46234
  if (opts["name.not"] !== void 0)
45404
46235
  args.name__not = opts["name.not"];
45405
- if (opts["name.isNull"] !== void 0)
45406
- args.name__isNull = opts["name.isNull"];
45407
- if (opts["name.isNotNull"] !== void 0)
45408
- args.name__isNotNull = opts["name.isNotNull"];
45409
46236
  if (opts["name.equals"] !== void 0)
45410
46237
  args.name__equals = opts["name.equals"];
45411
46238
  if (opts["name.contains"] !== void 0)
@@ -45418,10 +46245,6 @@ Examples:
45418
46245
  args.subscription_template_id = opts.subscriptionTemplateId;
45419
46246
  if (opts["subscriptionTemplateId.not"] !== void 0)
45420
46247
  args.subscription_template_id__not = opts["subscriptionTemplateId.not"];
45421
- if (opts["subscriptionTemplateId.isNull"] !== void 0)
45422
- args.subscription_template_id__isNull = opts["subscriptionTemplateId.isNull"];
45423
- if (opts["subscriptionTemplateId.isNotNull"] !== void 0)
45424
- args.subscription_template_id__isNotNull = opts["subscriptionTemplateId.isNotNull"];
45425
46248
  if (opts["subscriptionTemplateId.equals"] !== void 0)
45426
46249
  args.subscription_template_id__equals = opts["subscriptionTemplateId.equals"];
45427
46250
  if (opts["subscriptionTemplateId.contains"] !== void 0)
@@ -45430,6 +46253,10 @@ Examples:
45430
46253
  args.subscription_template_id__startsWith = opts["subscriptionTemplateId.startsWith"];
45431
46254
  if (opts["subscriptionTemplateId.endWith"] !== void 0)
45432
46255
  args.subscription_template_id__endWith = opts["subscriptionTemplateId.endWith"];
46256
+ if (opts["subscriptionTemplateId.isNull"] !== void 0)
46257
+ args.subscription_template_id__isNull = opts["subscriptionTemplateId.isNull"];
46258
+ if (opts["subscriptionTemplateId.isNotNull"] !== void 0)
46259
+ args.subscription_template_id__isNotNull = opts["subscriptionTemplateId.isNotNull"];
45433
46260
  if (opts.search !== void 0)
45434
46261
  args.search = opts.search;
45435
46262
  if (opts.take !== void 0)
@@ -45445,28 +46272,24 @@ Examples:
45445
46272
  "skip",
45446
46273
  "id",
45447
46274
  "id__not",
45448
- "id__isNull",
45449
- "id__isNotNull",
45450
46275
  "id__equals",
45451
46276
  "id__contains",
45452
46277
  "id__startsWith",
45453
46278
  "id__endWith",
45454
46279
  "name",
45455
46280
  "name__not",
45456
- "name__isNull",
45457
- "name__isNotNull",
45458
46281
  "name__equals",
45459
46282
  "name__contains",
45460
46283
  "name__startsWith",
45461
46284
  "name__endWith",
45462
46285
  "subscription_template_id",
45463
46286
  "subscription_template_id__not",
45464
- "subscription_template_id__isNull",
45465
- "subscription_template_id__isNotNull",
45466
46287
  "subscription_template_id__equals",
45467
46288
  "subscription_template_id__contains",
45468
46289
  "subscription_template_id__startsWith",
45469
46290
  "subscription_template_id__endWith",
46291
+ "subscription_template_id__isNull",
46292
+ "subscription_template_id__isNotNull",
45470
46293
  "search"
45471
46294
  ]
45472
46295
  });
@@ -45868,7 +46691,7 @@ Examples:
45868
46691
  queryParamKeys: []
45869
46692
  });
45870
46693
  });
45871
- 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>", `
46694
+ 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 (JSON object of slug to exact value, e.g. {"my_slug":"value"}; slugs matching no custom property are ignored), 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>", `
45872
46695
  Subscription status filter.
45873
46696
 
45874
46697
  - \`active\`, \`pending\`, \`paused\`, \`errored\`, \`cancelled\`, \`draft\`, \`voided\`, \`archived\`: match that status.
@@ -45877,7 +46700,7 @@ Subscription status filter.
45877
46700
  - \`any\`: every status, no exclusion.
45878
46701
 
45879
46702
  Use \`status__in\` with comma-separated values to combine statuses. When the filter is omitted, \`draft\`, \`voided\`, \`cancelled\` and \`archived\` subscriptions are excluded.
45880
- `).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`).option("--cancel-at <value>", `cancel_at`).option("--cancel-at.not <value>", `cancel_at__not`).option("--cancel-at.is-null <value>", `cancel_at__isNull`).option("--cancel-at.is-not-null <value>", `cancel_at__isNotNull`).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("--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", `
46703
+ `).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>", `Filter by custom property values, as a JSON object mapping a custom property slug to the exact value to match. Suffix a slug with \`__contains\` for a case-sensitive substring match on text values. Several entries are combined with AND. Entries whose slug matches no custom property, or whose value is \`false\`, \`0\`, \`null\` or an empty string, are ignored.`).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", `
45881
46704
  Examples:
45882
46705
  hyperline subscriptions list
45883
46706
  hyperline subscriptions list --take <take> --activation-strategy <activation_strategy>`).action(async (opts) => {
@@ -45899,10 +46722,6 @@ Examples:
45899
46722
  args.currency = opts.currency;
45900
46723
  if (opts["currency.not"] !== void 0)
45901
46724
  args.currency__not = opts["currency.not"];
45902
- if (opts["currency.isNull"] !== void 0)
45903
- args.currency__isNull = opts["currency.isNull"];
45904
- if (opts["currency.isNotNull"] !== void 0)
45905
- args.currency__isNotNull = opts["currency.isNotNull"];
45906
46725
  if (opts["currency.equals"] !== void 0)
45907
46726
  args.currency__equals = opts["currency.equals"];
45908
46727
  if (opts["currency.contains"] !== void 0)
@@ -45915,10 +46734,6 @@ Examples:
45915
46734
  args.plan_id = opts.planId;
45916
46735
  if (opts["planId.not"] !== void 0)
45917
46736
  args.plan_id__not = opts["planId.not"];
45918
- if (opts["planId.isNull"] !== void 0)
45919
- args.plan_id__isNull = opts["planId.isNull"];
45920
- if (opts["planId.isNotNull"] !== void 0)
45921
- args.plan_id__isNotNull = opts["planId.isNotNull"];
45922
46737
  if (opts["planId.equals"] !== void 0)
45923
46738
  args.plan_id__equals = opts["planId.equals"];
45924
46739
  if (opts["planId.contains"] !== void 0)
@@ -45927,14 +46742,14 @@ Examples:
45927
46742
  args.plan_id__startsWith = opts["planId.startsWith"];
45928
46743
  if (opts["planId.endWith"] !== void 0)
45929
46744
  args.plan_id__endWith = opts["planId.endWith"];
46745
+ if (opts["planId.isNull"] !== void 0)
46746
+ args.plan_id__isNull = opts["planId.isNull"];
46747
+ if (opts["planId.isNotNull"] !== void 0)
46748
+ args.plan_id__isNotNull = opts["planId.isNotNull"];
45930
46749
  if (opts.originalQuoteId !== void 0)
45931
46750
  args.original_quote_id = opts.originalQuoteId;
45932
46751
  if (opts["originalQuoteId.not"] !== void 0)
45933
46752
  args.original_quote_id__not = opts["originalQuoteId.not"];
45934
- if (opts["originalQuoteId.isNull"] !== void 0)
45935
- args.original_quote_id__isNull = opts["originalQuoteId.isNull"];
45936
- if (opts["originalQuoteId.isNotNull"] !== void 0)
45937
- args.original_quote_id__isNotNull = opts["originalQuoteId.isNotNull"];
45938
46753
  if (opts["originalQuoteId.equals"] !== void 0)
45939
46754
  args.original_quote_id__equals = opts["originalQuoteId.equals"];
45940
46755
  if (opts["originalQuoteId.contains"] !== void 0)
@@ -45943,14 +46758,14 @@ Examples:
45943
46758
  args.original_quote_id__startsWith = opts["originalQuoteId.startsWith"];
45944
46759
  if (opts["originalQuoteId.endWith"] !== void 0)
45945
46760
  args.original_quote_id__endWith = opts["originalQuoteId.endWith"];
46761
+ if (opts["originalQuoteId.isNull"] !== void 0)
46762
+ args.original_quote_id__isNull = opts["originalQuoteId.isNull"];
46763
+ if (opts["originalQuoteId.isNotNull"] !== void 0)
46764
+ args.original_quote_id__isNotNull = opts["originalQuoteId.isNotNull"];
45946
46765
  if (opts.customerId !== void 0)
45947
46766
  args.customer_id = opts.customerId;
45948
46767
  if (opts["customerId.not"] !== void 0)
45949
46768
  args.customer_id__not = opts["customerId.not"];
45950
- if (opts["customerId.isNull"] !== void 0)
45951
- args.customer_id__isNull = opts["customerId.isNull"];
45952
- if (opts["customerId.isNotNull"] !== void 0)
45953
- args.customer_id__isNotNull = opts["customerId.isNotNull"];
45954
46769
  if (opts["customerId.equals"] !== void 0)
45955
46770
  args.customer_id__equals = opts["customerId.equals"];
45956
46771
  if (opts["customerId.contains"] !== void 0)
@@ -45959,16 +46774,16 @@ Examples:
45959
46774
  args.customer_id__startsWith = opts["customerId.startsWith"];
45960
46775
  if (opts["customerId.endWith"] !== void 0)
45961
46776
  args.customer_id__endWith = opts["customerId.endWith"];
46777
+ if (opts["customerId.isNull"] !== void 0)
46778
+ args.customer_id__isNull = opts["customerId.isNull"];
46779
+ if (opts["customerId.isNotNull"] !== void 0)
46780
+ args.customer_id__isNotNull = opts["customerId.isNotNull"];
45962
46781
  if (opts.invoicingEntityId !== void 0)
45963
46782
  args.invoicing_entity_id = opts.invoicingEntityId;
45964
46783
  if (opts.purchaseOrder !== void 0)
45965
46784
  args.purchase_order = opts.purchaseOrder;
45966
46785
  if (opts["purchaseOrder.not"] !== void 0)
45967
46786
  args.purchase_order__not = opts["purchaseOrder.not"];
45968
- if (opts["purchaseOrder.isNull"] !== void 0)
45969
- args.purchase_order__isNull = opts["purchaseOrder.isNull"];
45970
- if (opts["purchaseOrder.isNotNull"] !== void 0)
45971
- args.purchase_order__isNotNull = opts["purchaseOrder.isNotNull"];
45972
46787
  if (opts["purchaseOrder.equals"] !== void 0)
45973
46788
  args.purchase_order__equals = opts["purchaseOrder.equals"];
45974
46789
  if (opts["purchaseOrder.contains"] !== void 0)
@@ -45977,6 +46792,10 @@ Examples:
45977
46792
  args.purchase_order__startsWith = opts["purchaseOrder.startsWith"];
45978
46793
  if (opts["purchaseOrder.endWith"] !== void 0)
45979
46794
  args.purchase_order__endWith = opts["purchaseOrder.endWith"];
46795
+ if (opts["purchaseOrder.isNull"] !== void 0)
46796
+ args.purchase_order__isNull = opts["purchaseOrder.isNull"];
46797
+ if (opts["purchaseOrder.isNotNull"] !== void 0)
46798
+ args.purchase_order__isNotNull = opts["purchaseOrder.isNotNull"];
45980
46799
  if (opts.customProperties !== void 0)
45981
46800
  args.custom_properties = opts.customProperties;
45982
46801
  if (opts.invoiceDrafts !== void 0)
@@ -45987,10 +46806,6 @@ Examples:
45987
46806
  args.updated_at = opts.updatedAt;
45988
46807
  if (opts["updatedAt.not"] !== void 0)
45989
46808
  args.updated_at__not = opts["updatedAt.not"];
45990
- if (opts["updatedAt.isNull"] !== void 0)
45991
- args.updated_at__isNull = opts["updatedAt.isNull"];
45992
- if (opts["updatedAt.isNotNull"] !== void 0)
45993
- args.updated_at__isNotNull = opts["updatedAt.isNotNull"];
45994
46809
  if (opts["updatedAt.equals"] !== void 0)
45995
46810
  args.updated_at__equals = opts["updatedAt.equals"];
45996
46811
  if (opts["updatedAt.lt"] !== void 0)
@@ -46005,10 +46820,6 @@ Examples:
46005
46820
  args.cancel_at = opts.cancelAt;
46006
46821
  if (opts["cancelAt.not"] !== void 0)
46007
46822
  args.cancel_at__not = opts["cancelAt.not"];
46008
- if (opts["cancelAt.isNull"] !== void 0)
46009
- args.cancel_at__isNull = opts["cancelAt.isNull"];
46010
- if (opts["cancelAt.isNotNull"] !== void 0)
46011
- args.cancel_at__isNotNull = opts["cancelAt.isNotNull"];
46012
46823
  if (opts["cancelAt.equals"] !== void 0)
46013
46824
  args.cancel_at__equals = opts["cancelAt.equals"];
46014
46825
  if (opts["cancelAt.lt"] !== void 0)
@@ -46019,6 +46830,10 @@ Examples:
46019
46830
  args.cancel_at__gt = opts["cancelAt.gt"];
46020
46831
  if (opts["cancelAt.gte"] !== void 0)
46021
46832
  args.cancel_at__gte = opts["cancelAt.gte"];
46833
+ if (opts["cancelAt.isNull"] !== void 0)
46834
+ args.cancel_at__isNull = opts["cancelAt.isNull"];
46835
+ if (opts["cancelAt.isNotNull"] !== void 0)
46836
+ args.cancel_at__isNotNull = opts["cancelAt.isNotNull"];
46022
46837
  if (opts["contractStart.gte"] !== void 0)
46023
46838
  args.contract_start__gte = opts["contractStart.gte"];
46024
46839
  if (opts["contractStart.lte"] !== void 0)
@@ -46046,52 +46861,48 @@ Examples:
46046
46861
  "status__in",
46047
46862
  "currency",
46048
46863
  "currency__not",
46049
- "currency__isNull",
46050
- "currency__isNotNull",
46051
46864
  "currency__equals",
46052
46865
  "currency__contains",
46053
46866
  "currency__startsWith",
46054
46867
  "currency__endWith",
46055
46868
  "plan_id",
46056
46869
  "plan_id__not",
46057
- "plan_id__isNull",
46058
- "plan_id__isNotNull",
46059
46870
  "plan_id__equals",
46060
46871
  "plan_id__contains",
46061
46872
  "plan_id__startsWith",
46062
46873
  "plan_id__endWith",
46874
+ "plan_id__isNull",
46875
+ "plan_id__isNotNull",
46063
46876
  "original_quote_id",
46064
46877
  "original_quote_id__not",
46065
- "original_quote_id__isNull",
46066
- "original_quote_id__isNotNull",
46067
46878
  "original_quote_id__equals",
46068
46879
  "original_quote_id__contains",
46069
46880
  "original_quote_id__startsWith",
46070
46881
  "original_quote_id__endWith",
46882
+ "original_quote_id__isNull",
46883
+ "original_quote_id__isNotNull",
46071
46884
  "customer_id",
46072
46885
  "customer_id__not",
46073
- "customer_id__isNull",
46074
- "customer_id__isNotNull",
46075
46886
  "customer_id__equals",
46076
46887
  "customer_id__contains",
46077
46888
  "customer_id__startsWith",
46078
46889
  "customer_id__endWith",
46890
+ "customer_id__isNull",
46891
+ "customer_id__isNotNull",
46079
46892
  "invoicing_entity_id",
46080
46893
  "purchase_order",
46081
46894
  "purchase_order__not",
46082
- "purchase_order__isNull",
46083
- "purchase_order__isNotNull",
46084
46895
  "purchase_order__equals",
46085
46896
  "purchase_order__contains",
46086
46897
  "purchase_order__startsWith",
46087
46898
  "purchase_order__endWith",
46899
+ "purchase_order__isNull",
46900
+ "purchase_order__isNotNull",
46088
46901
  "custom_properties",
46089
46902
  "invoice_drafts",
46090
46903
  "integration_entity_id",
46091
46904
  "updated_at",
46092
46905
  "updated_at__not",
46093
- "updated_at__isNull",
46094
- "updated_at__isNotNull",
46095
46906
  "updated_at__equals",
46096
46907
  "updated_at__lt",
46097
46908
  "updated_at__lte",
@@ -46099,13 +46910,13 @@ Examples:
46099
46910
  "updated_at__gte",
46100
46911
  "cancel_at",
46101
46912
  "cancel_at__not",
46102
- "cancel_at__isNull",
46103
- "cancel_at__isNotNull",
46104
46913
  "cancel_at__equals",
46105
46914
  "cancel_at__lt",
46106
46915
  "cancel_at__lte",
46107
46916
  "cancel_at__gt",
46108
46917
  "cancel_at__gte",
46918
+ "cancel_at__isNull",
46919
+ "cancel_at__isNotNull",
46109
46920
  "contract_start__gte",
46110
46921
  "contract_start__lte",
46111
46922
  "contract_end__gte",
@@ -46392,7 +47203,7 @@ Examples:
46392
47203
  // build/commands/generated/subscriptions-transitions.js
46393
47204
  function registerSubscriptions_TransitionsCommands(parent) {
46394
47205
  const resource = parent.command("subscriptions-transitions").description("Manage subscriptions > transitions");
46395
- 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", `
47206
+ 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", `
46396
47207
  Examples:
46397
47208
  hyperline subscriptions-transitions list-subscription-transitions
46398
47209
  hyperline subscriptions-transitions list-subscription-transitions --take <take> --status <status>`).action(async (opts) => {
@@ -46410,10 +47221,6 @@ Examples:
46410
47221
  args.source_subscription_id = opts.sourceSubscriptionId;
46411
47222
  if (opts["sourceSubscriptionId.not"] !== void 0)
46412
47223
  args.source_subscription_id__not = opts["sourceSubscriptionId.not"];
46413
- if (opts["sourceSubscriptionId.isNull"] !== void 0)
46414
- args.source_subscription_id__isNull = opts["sourceSubscriptionId.isNull"];
46415
- if (opts["sourceSubscriptionId.isNotNull"] !== void 0)
46416
- args.source_subscription_id__isNotNull = opts["sourceSubscriptionId.isNotNull"];
46417
47224
  if (opts["sourceSubscriptionId.equals"] !== void 0)
46418
47225
  args.source_subscription_id__equals = opts["sourceSubscriptionId.equals"];
46419
47226
  if (opts["sourceSubscriptionId.contains"] !== void 0)
@@ -46426,10 +47233,6 @@ Examples:
46426
47233
  args.base_subscription_id = opts.baseSubscriptionId;
46427
47234
  if (opts["baseSubscriptionId.not"] !== void 0)
46428
47235
  args.base_subscription_id__not = opts["baseSubscriptionId.not"];
46429
- if (opts["baseSubscriptionId.isNull"] !== void 0)
46430
- args.base_subscription_id__isNull = opts["baseSubscriptionId.isNull"];
46431
- if (opts["baseSubscriptionId.isNotNull"] !== void 0)
46432
- args.base_subscription_id__isNotNull = opts["baseSubscriptionId.isNotNull"];
46433
47236
  if (opts["baseSubscriptionId.equals"] !== void 0)
46434
47237
  args.base_subscription_id__equals = opts["baseSubscriptionId.equals"];
46435
47238
  if (opts["baseSubscriptionId.contains"] !== void 0)
@@ -46442,10 +47245,6 @@ Examples:
46442
47245
  args.target_subscription_id = opts.targetSubscriptionId;
46443
47246
  if (opts["targetSubscriptionId.not"] !== void 0)
46444
47247
  args.target_subscription_id__not = opts["targetSubscriptionId.not"];
46445
- if (opts["targetSubscriptionId.isNull"] !== void 0)
46446
- args.target_subscription_id__isNull = opts["targetSubscriptionId.isNull"];
46447
- if (opts["targetSubscriptionId.isNotNull"] !== void 0)
46448
- args.target_subscription_id__isNotNull = opts["targetSubscriptionId.isNotNull"];
46449
47248
  if (opts["targetSubscriptionId.equals"] !== void 0)
46450
47249
  args.target_subscription_id__equals = opts["targetSubscriptionId.equals"];
46451
47250
  if (opts["targetSubscriptionId.contains"] !== void 0)
@@ -46454,14 +47253,14 @@ Examples:
46454
47253
  args.target_subscription_id__startsWith = opts["targetSubscriptionId.startsWith"];
46455
47254
  if (opts["targetSubscriptionId.endWith"] !== void 0)
46456
47255
  args.target_subscription_id__endWith = opts["targetSubscriptionId.endWith"];
47256
+ if (opts["targetSubscriptionId.isNull"] !== void 0)
47257
+ args.target_subscription_id__isNull = opts["targetSubscriptionId.isNull"];
47258
+ if (opts["targetSubscriptionId.isNotNull"] !== void 0)
47259
+ args.target_subscription_id__isNotNull = opts["targetSubscriptionId.isNotNull"];
46457
47260
  if (opts.transitionDate !== void 0)
46458
47261
  args.transition_date = opts.transitionDate;
46459
47262
  if (opts["transitionDate.not"] !== void 0)
46460
47263
  args.transition_date__not = opts["transitionDate.not"];
46461
- if (opts["transitionDate.isNull"] !== void 0)
46462
- args.transition_date__isNull = opts["transitionDate.isNull"];
46463
- if (opts["transitionDate.isNotNull"] !== void 0)
46464
- args.transition_date__isNotNull = opts["transitionDate.isNotNull"];
46465
47264
  if (opts["transitionDate.equals"] !== void 0)
46466
47265
  args.transition_date__equals = opts["transitionDate.equals"];
46467
47266
  if (opts["transitionDate.lt"] !== void 0)
@@ -46472,14 +47271,14 @@ Examples:
46472
47271
  args.transition_date__gt = opts["transitionDate.gt"];
46473
47272
  if (opts["transitionDate.gte"] !== void 0)
46474
47273
  args.transition_date__gte = opts["transitionDate.gte"];
47274
+ if (opts["transitionDate.isNull"] !== void 0)
47275
+ args.transition_date__isNull = opts["transitionDate.isNull"];
47276
+ if (opts["transitionDate.isNotNull"] !== void 0)
47277
+ args.transition_date__isNotNull = opts["transitionDate.isNotNull"];
46475
47278
  if (opts.transitionedAt !== void 0)
46476
47279
  args.transitioned_at = opts.transitionedAt;
46477
47280
  if (opts["transitionedAt.not"] !== void 0)
46478
47281
  args.transitioned_at__not = opts["transitionedAt.not"];
46479
- if (opts["transitionedAt.isNull"] !== void 0)
46480
- args.transitioned_at__isNull = opts["transitionedAt.isNull"];
46481
- if (opts["transitionedAt.isNotNull"] !== void 0)
46482
- args.transitioned_at__isNotNull = opts["transitionedAt.isNotNull"];
46483
47282
  if (opts["transitionedAt.equals"] !== void 0)
46484
47283
  args.transitioned_at__equals = opts["transitionedAt.equals"];
46485
47284
  if (opts["transitionedAt.lt"] !== void 0)
@@ -46490,6 +47289,10 @@ Examples:
46490
47289
  args.transitioned_at__gt = opts["transitionedAt.gt"];
46491
47290
  if (opts["transitionedAt.gte"] !== void 0)
46492
47291
  args.transitioned_at__gte = opts["transitionedAt.gte"];
47292
+ if (opts["transitionedAt.isNull"] !== void 0)
47293
+ args.transitioned_at__isNull = opts["transitionedAt.isNull"];
47294
+ if (opts["transitionedAt.isNotNull"] !== void 0)
47295
+ args.transitioned_at__isNotNull = opts["transitionedAt.isNotNull"];
46493
47296
  if (opts.take !== void 0)
46494
47297
  args.take = Number(opts.take);
46495
47298
  if (opts.skip !== void 0)
@@ -46505,46 +47308,42 @@ Examples:
46505
47308
  "status__in",
46506
47309
  "source_subscription_id",
46507
47310
  "source_subscription_id__not",
46508
- "source_subscription_id__isNull",
46509
- "source_subscription_id__isNotNull",
46510
47311
  "source_subscription_id__equals",
46511
47312
  "source_subscription_id__contains",
46512
47313
  "source_subscription_id__startsWith",
46513
47314
  "source_subscription_id__endWith",
46514
47315
  "base_subscription_id",
46515
47316
  "base_subscription_id__not",
46516
- "base_subscription_id__isNull",
46517
- "base_subscription_id__isNotNull",
46518
47317
  "base_subscription_id__equals",
46519
47318
  "base_subscription_id__contains",
46520
47319
  "base_subscription_id__startsWith",
46521
47320
  "base_subscription_id__endWith",
46522
47321
  "target_subscription_id",
46523
47322
  "target_subscription_id__not",
46524
- "target_subscription_id__isNull",
46525
- "target_subscription_id__isNotNull",
46526
47323
  "target_subscription_id__equals",
46527
47324
  "target_subscription_id__contains",
46528
47325
  "target_subscription_id__startsWith",
46529
47326
  "target_subscription_id__endWith",
47327
+ "target_subscription_id__isNull",
47328
+ "target_subscription_id__isNotNull",
46530
47329
  "transition_date",
46531
47330
  "transition_date__not",
46532
- "transition_date__isNull",
46533
- "transition_date__isNotNull",
46534
47331
  "transition_date__equals",
46535
47332
  "transition_date__lt",
46536
47333
  "transition_date__lte",
46537
47334
  "transition_date__gt",
46538
47335
  "transition_date__gte",
47336
+ "transition_date__isNull",
47337
+ "transition_date__isNotNull",
46539
47338
  "transitioned_at",
46540
47339
  "transitioned_at__not",
46541
- "transitioned_at__isNull",
46542
- "transitioned_at__isNotNull",
46543
47340
  "transitioned_at__equals",
46544
47341
  "transitioned_at__lt",
46545
47342
  "transitioned_at__lte",
46546
47343
  "transitioned_at__gt",
46547
- "transitioned_at__gte"
47344
+ "transitioned_at__gte",
47345
+ "transitioned_at__isNull",
47346
+ "transitioned_at__isNotNull"
46548
47347
  ]
46549
47348
  });
46550
47349
  });
@@ -46622,7 +47421,7 @@ Examples:
46622
47421
  // build/commands/generated/taxes.js
46623
47422
  function registerTaxesCommands(parent) {
46624
47423
  const resource = parent.command("taxes").description("Manage taxes");
46625
- 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", `
47424
+ 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", `
46626
47425
  Examples:
46627
47426
  hyperline taxes list-tax-rates
46628
47427
  hyperline taxes list-tax-rates --take <take> --id <id>`).action(async (opts) => {
@@ -46636,10 +47435,6 @@ Examples:
46636
47435
  args.id = opts.id;
46637
47436
  if (opts["id.not"] !== void 0)
46638
47437
  args.id__not = opts["id.not"];
46639
- if (opts["id.isNull"] !== void 0)
46640
- args.id__isNull = opts["id.isNull"];
46641
- if (opts["id.isNotNull"] !== void 0)
46642
- args.id__isNotNull = opts["id.isNotNull"];
46643
47438
  if (opts["id.equals"] !== void 0)
46644
47439
  args.id__equals = opts["id.equals"];
46645
47440
  if (opts["id.contains"] !== void 0)
@@ -46652,10 +47447,6 @@ Examples:
46652
47447
  args.name = opts.name;
46653
47448
  if (opts["name.not"] !== void 0)
46654
47449
  args.name__not = opts["name.not"];
46655
- if (opts["name.isNull"] !== void 0)
46656
- args.name__isNull = opts["name.isNull"];
46657
- if (opts["name.isNotNull"] !== void 0)
46658
- args.name__isNotNull = opts["name.isNotNull"];
46659
47450
  if (opts["name.equals"] !== void 0)
46660
47451
  args.name__equals = opts["name.equals"];
46661
47452
  if (opts["name.contains"] !== void 0)
@@ -46664,14 +47455,14 @@ Examples:
46664
47455
  args.name__startsWith = opts["name.startsWith"];
46665
47456
  if (opts["name.endWith"] !== void 0)
46666
47457
  args.name__endWith = opts["name.endWith"];
47458
+ if (opts["name.isNull"] !== void 0)
47459
+ args.name__isNull = opts["name.isNull"];
47460
+ if (opts["name.isNotNull"] !== void 0)
47461
+ args.name__isNotNull = opts["name.isNotNull"];
46667
47462
  if (opts.description !== void 0)
46668
47463
  args.description = opts.description;
46669
47464
  if (opts["description.not"] !== void 0)
46670
47465
  args.description__not = opts["description.not"];
46671
- if (opts["description.isNull"] !== void 0)
46672
- args.description__isNull = opts["description.isNull"];
46673
- if (opts["description.isNotNull"] !== void 0)
46674
- args.description__isNotNull = opts["description.isNotNull"];
46675
47466
  if (opts["description.equals"] !== void 0)
46676
47467
  args.description__equals = opts["description.equals"];
46677
47468
  if (opts["description.contains"] !== void 0)
@@ -46680,14 +47471,14 @@ Examples:
46680
47471
  args.description__startsWith = opts["description.startsWith"];
46681
47472
  if (opts["description.endWith"] !== void 0)
46682
47473
  args.description__endWith = opts["description.endWith"];
47474
+ if (opts["description.isNull"] !== void 0)
47475
+ args.description__isNull = opts["description.isNull"];
47476
+ if (opts["description.isNotNull"] !== void 0)
47477
+ args.description__isNotNull = opts["description.isNotNull"];
46683
47478
  if (opts.invoicingEntityId !== void 0)
46684
47479
  args.invoicing_entity_id = opts.invoicingEntityId;
46685
47480
  if (opts["invoicingEntityId.not"] !== void 0)
46686
47481
  args.invoicing_entity_id__not = opts["invoicingEntityId.not"];
46687
- if (opts["invoicingEntityId.isNull"] !== void 0)
46688
- args.invoicing_entity_id__isNull = opts["invoicingEntityId.isNull"];
46689
- if (opts["invoicingEntityId.isNotNull"] !== void 0)
46690
- args.invoicing_entity_id__isNotNull = opts["invoicingEntityId.isNotNull"];
46691
47482
  if (opts["invoicingEntityId.equals"] !== void 0)
46692
47483
  args.invoicing_entity_id__equals = opts["invoicingEntityId.equals"];
46693
47484
  if (opts["invoicingEntityId.contains"] !== void 0)
@@ -46709,32 +47500,28 @@ Examples:
46709
47500
  "skip",
46710
47501
  "id",
46711
47502
  "id__not",
46712
- "id__isNull",
46713
- "id__isNotNull",
46714
47503
  "id__equals",
46715
47504
  "id__contains",
46716
47505
  "id__startsWith",
46717
47506
  "id__endWith",
46718
47507
  "name",
46719
47508
  "name__not",
46720
- "name__isNull",
46721
- "name__isNotNull",
46722
47509
  "name__equals",
46723
47510
  "name__contains",
46724
47511
  "name__startsWith",
46725
47512
  "name__endWith",
47513
+ "name__isNull",
47514
+ "name__isNotNull",
46726
47515
  "description",
46727
47516
  "description__not",
46728
- "description__isNull",
46729
- "description__isNotNull",
46730
47517
  "description__equals",
46731
47518
  "description__contains",
46732
47519
  "description__startsWith",
46733
47520
  "description__endWith",
47521
+ "description__isNull",
47522
+ "description__isNotNull",
46734
47523
  "invoicing_entity_id",
46735
47524
  "invoicing_entity_id__not",
46736
- "invoicing_entity_id__isNull",
46737
- "invoicing_entity_id__isNotNull",
46738
47525
  "invoicing_entity_id__equals",
46739
47526
  "invoicing_entity_id__contains",
46740
47527
  "invoicing_entity_id__startsWith",
@@ -47313,11 +48100,16 @@ function registerAllCommands(program2) {
47313
48100
  registerAi_BillingCommands(program2);
47314
48101
  registerAi_CostsCommands(program2);
47315
48102
  registerAnalyticsCommands(program2);
48103
+ registerApproval_WorkflowsCommands(program2);
47316
48104
  registerBank_AccountsCommands(program2);
48105
+ registerCatalogCommands(program2);
47317
48106
  registerCompaniesCommands(program2);
48107
+ registerContracts_ClausesCommands(program2);
48108
+ registerContracts_DocumentsCommands(program2);
47318
48109
  registerCouponsCommands(program2);
47319
48110
  registerCoupons_Promotion_CodesCommands(program2);
47320
48111
  registerCustomers_CreditsCommands(program2);
48112
+ registerCustomers_FeaturesCommands(program2);
47321
48113
  registerCustomers_Payment_MethodsCommands(program2);
47322
48114
  registerCustomers_AddressCommands(program2);
47323
48115
  registerCustomers_ShippingCommands(program2);
@@ -47326,12 +48118,14 @@ function registerAllCommands(program2) {
47326
48118
  registerOrganisationsCommands(program2);
47327
48119
  registerCustomers_SegmentsCommands(program2);
47328
48120
  registerExportsCommands(program2);
48121
+ registerFeaturesCommands(program2);
47329
48122
  registerFilesCommands(program2);
47330
48123
  registerInvoicesCommands(program2);
47331
48124
  registerInvoices_TransactionsCommands(program2);
47332
48125
  registerInvoicing_EntitiesCommands(program2);
47333
48126
  registerAi_MonitoringCommands(program2);
47334
48127
  registerPaymentsCommands(program2);
48128
+ registerProducts_FeaturesCommands(program2);
47335
48129
  registerProductsCommands(program2);
47336
48130
  registerPrice_ConfigurationsCommands(program2);
47337
48131
  registerQuotesCommands(program2);
@@ -63392,7 +64186,25 @@ var de = {
63392
64186
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Diese Position wurde f\xFCr den anteiligen Zeitraum in Rechnung gestellt",
63393
64187
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Betrag von {{amount}} f\xFCr den anteiligen Zeitraum nicht in Rechnung gestellt",
63394
64188
  "subscriptions.updates.updatePrices": "Preise f\xFCr {{productName}} aktualisieren",
63395
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 abgelaufenes Guthaben"
64189
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 abgelaufenes Guthaben",
64190
+ "quotes.blockers.quote_not_draft": "Setzen Sie das Angebot auf Entwurf zur\xFCck, bevor Sie seine Konfigurationen \xE4ndern",
64191
+ "quotes.blockers.quote_expiration_date_missing": "Das Angebot muss ein Ablaufdatum haben, um zur Genehmigung gesendet zu werden",
64192
+ "quotes.blockers.quote_configuration_missing": "F\xFCgen Sie mindestens eine Konfiguration hinzu, bevor Sie das Angebot einreichen",
64193
+ "quotes.blockers.quote_configuration_subscription_update_customer": "Abonnement\xE4nderungen m\xFCssen den Kunden des Angebots verwenden",
64194
+ "quotes.blockers.quote_configuration_multiple_configurations_disabled": "Aktivieren Sie mehrere Konfigurationen, bevor Sie einen untergeordneten Kunden zuweisen",
64195
+ "quotes.blockers.quote_configuration_customer_not_child": "W\xE4hlen Sie einen untergeordneten Kunden des Angebotskunden",
64196
+ "quotes.blockers.quote_configuration_type_mismatch": "Die verkn\xFCpfte Konfiguration entspricht nicht dem Konfigurationstyp",
64197
+ "quotes.blockers.quote_configuration_not_draft": "W\xE4hlen Sie eine Konfiguration im Entwurf",
64198
+ "quotes.blockers.quote_configuration_customer_mismatch": "Die Konfiguration muss zum Kunden der Konfiguration geh\xF6ren",
64199
+ "quotes.blockers.quote_configuration_currency_mismatch": "Die Konfiguration muss die W\xE4hrung des Angebots verwenden",
64200
+ "quotes.blockers.quote_configuration_invoicing_entity_mismatch": "Die Rechnung muss die Rechnungsstellungseinheit des Angebots verwenden",
64201
+ "quotes.blockers.quote_configuration_already_linked": "Die Konfiguration ist bereits mit einer Angebotskonfiguration verkn\xFCpft",
64202
+ "quotes.blockers.quote_configuration_not_subscription_update": "W\xE4hlen Sie eine Konfiguration f\xFCr eine Abonnement\xE4nderung",
64203
+ "quotes.blockers.quote_configuration_not_new_subscription": "W\xE4hlen Sie eine Konfiguration f\xFCr ein neues Abonnement",
64204
+ "quotes.blockers.quote_configuration_duplicate_subscription_update": "Ein Abonnement kann in einem Angebot nur einmal ge\xE4ndert werden",
64205
+ "quotes.blockers.quote_draft_invoice_missing": "Das Angebot muss eine Rechnung im Entwurf haben, um abgeschlossen zu werden",
64206
+ "quotes.blockers.quote_draft_subscription_missing": "Das Angebot muss ein Abonnement im Entwurf haben, um abgeschlossen zu werden",
64207
+ "quotes.blockers.quote_expiry_after_transition_date": "Das Ablaufdatum des Angebots muss sp\xE4testens am Ende des aktuellen Abrechnungszeitraums liegen, oder am geplanten \xDCbergangsdatum, wenn dieses sp\xE4ter liegt"
63396
64208
  };
63397
64209
 
63398
64210
  // ../hyperline-i18n/build/locales/en.js
@@ -63442,7 +64254,25 @@ var en = {
63442
64254
  "accounting.revrec.closedPeriodFallbackNote": " (posted to next open period \u2014 target accounting period closed; original date {{originalDate}})",
63443
64255
  "einvoicing.paymentProcessed": "Payment processed",
63444
64256
  "einvoicing.paymentReceived": "Payment received",
63445
- "einvoicing.paymentFromWallet": "Payment from wallet"
64257
+ "einvoicing.paymentFromWallet": "Payment from wallet",
64258
+ "quotes.blockers.quote_not_draft": "Redraft the quote before changing its configurations",
64259
+ "quotes.blockers.quote_expiration_date_missing": "Quote must have an expiration date to be sent for approval",
64260
+ "quotes.blockers.quote_configuration_missing": "Add at least one configuration before submitting the quote",
64261
+ "quotes.blockers.quote_configuration_subscription_update_customer": "Subscription updates must use the quote customer",
64262
+ "quotes.blockers.quote_configuration_multiple_configurations_disabled": "Enable multiple configurations before assigning a child customer",
64263
+ "quotes.blockers.quote_configuration_customer_not_child": "Select a child customer of the quote customer",
64264
+ "quotes.blockers.quote_configuration_type_mismatch": "The linked configuration does not match the configuration type",
64265
+ "quotes.blockers.quote_configuration_not_draft": "Select a draft configuration",
64266
+ "quotes.blockers.quote_configuration_customer_mismatch": "The configuration must belong to the configuration customer",
64267
+ "quotes.blockers.quote_configuration_currency_mismatch": "The configuration must use the quote currency",
64268
+ "quotes.blockers.quote_configuration_invoicing_entity_mismatch": "The invoice must use the quote invoicing entity",
64269
+ "quotes.blockers.quote_configuration_already_linked": "The configuration is already linked to a quote configuration",
64270
+ "quotes.blockers.quote_configuration_not_subscription_update": "Select a subscription update configuration",
64271
+ "quotes.blockers.quote_configuration_not_new_subscription": "Select a new subscription configuration",
64272
+ "quotes.blockers.quote_configuration_duplicate_subscription_update": "A subscription can only be updated once in a quote",
64273
+ "quotes.blockers.quote_draft_invoice_missing": "Quote must have a draft invoice to be finalized",
64274
+ "quotes.blockers.quote_draft_subscription_missing": "Quote must have a draft subscription to be finalized",
64275
+ "quotes.blockers.quote_expiry_after_transition_date": "The quote expiration date must be on or before the end of the current billing period, or the scheduled transition date when it falls later"
63446
64276
  };
63447
64277
 
63448
64278
  // ../hyperline-i18n/build/locales/es.js
@@ -63492,7 +64322,25 @@ var es = {
63492
64322
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Esta l\xEDnea ha sido facturada para el per\xEDodo prorrateado",
63493
64323
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Importe de {{amount}} no facturado para el per\xEDodo prorrateado",
63494
64324
  "subscriptions.updates.updatePrices": "Actualizar precios para {{productName}}",
63495
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo caducado"
64325
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo caducado",
64326
+ "quotes.blockers.quote_not_draft": "Vuelve a poner el presupuesto en borrador antes de cambiar sus configuraciones",
64327
+ "quotes.blockers.quote_expiration_date_missing": "El presupuesto debe tener una fecha de vencimiento para enviarse a aprobaci\xF3n",
64328
+ "quotes.blockers.quote_configuration_missing": "A\xF1ade al menos una configuraci\xF3n antes de enviar el presupuesto",
64329
+ "quotes.blockers.quote_configuration_subscription_update_customer": "Las actualizaciones de suscripci\xF3n deben usar el cliente del presupuesto",
64330
+ "quotes.blockers.quote_configuration_multiple_configurations_disabled": "Activa las configuraciones m\xFAltiples antes de asignar un cliente hijo",
64331
+ "quotes.blockers.quote_configuration_customer_not_child": "Selecciona un cliente hijo del cliente del presupuesto",
64332
+ "quotes.blockers.quote_configuration_type_mismatch": "La configuraci\xF3n vinculada no coincide con el tipo de configuraci\xF3n",
64333
+ "quotes.blockers.quote_configuration_not_draft": "Selecciona una configuraci\xF3n en borrador",
64334
+ "quotes.blockers.quote_configuration_customer_mismatch": "La configuraci\xF3n debe pertenecer al cliente de la configuraci\xF3n",
64335
+ "quotes.blockers.quote_configuration_currency_mismatch": "La configuraci\xF3n debe usar la moneda del presupuesto",
64336
+ "quotes.blockers.quote_configuration_invoicing_entity_mismatch": "La factura debe usar la entidad de facturaci\xF3n del presupuesto",
64337
+ "quotes.blockers.quote_configuration_already_linked": "La configuraci\xF3n ya est\xE1 vinculada a una configuraci\xF3n de presupuesto",
64338
+ "quotes.blockers.quote_configuration_not_subscription_update": "Selecciona una configuraci\xF3n de actualizaci\xF3n de suscripci\xF3n",
64339
+ "quotes.blockers.quote_configuration_not_new_subscription": "Selecciona una configuraci\xF3n de nueva suscripci\xF3n",
64340
+ "quotes.blockers.quote_configuration_duplicate_subscription_update": "Una suscripci\xF3n solo puede actualizarse una vez en un presupuesto",
64341
+ "quotes.blockers.quote_draft_invoice_missing": "El presupuesto debe tener una factura en borrador para finalizarse",
64342
+ "quotes.blockers.quote_draft_subscription_missing": "El presupuesto debe tener una suscripci\xF3n en borrador para finalizarse",
64343
+ "quotes.blockers.quote_expiry_after_transition_date": "La fecha de vencimiento del presupuesto debe ser, como m\xE1ximo, el final del periodo de facturaci\xF3n actual, o la fecha de transici\xF3n programada si es posterior"
63496
64344
  };
63497
64345
 
63498
64346
  // ../hyperline-i18n/build/locales/fr.js
@@ -63542,7 +64390,25 @@ var fr = {
63542
64390
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Cette ligne a \xE9t\xE9 factur\xE9e pour la p\xE9riode proratis\xE9e",
63543
64391
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Montant de {{amount}} non factur\xE9 pour la p\xE9riode proratis\xE9e",
63544
64392
  "subscriptions.updates.updatePrices": "Mise \xE0 jour des prix pour {{productName}}",
63545
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 solde expir\xE9"
64393
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 solde expir\xE9",
64394
+ "quotes.blockers.quote_not_draft": "Repassez le devis en brouillon avant de modifier ses configurations",
64395
+ "quotes.blockers.quote_expiration_date_missing": "Le devis doit avoir une date d'expiration pour \xEAtre envoy\xE9 en validation",
64396
+ "quotes.blockers.quote_configuration_missing": "Ajoutez au moins une configuration avant de soumettre le devis",
64397
+ "quotes.blockers.quote_configuration_subscription_update_customer": "Les mises \xE0 jour d'abonnement doivent utiliser le client du devis",
64398
+ "quotes.blockers.quote_configuration_multiple_configurations_disabled": "Activez les configurations multiples avant d'assigner un client enfant",
64399
+ "quotes.blockers.quote_configuration_customer_not_child": "S\xE9lectionnez un client enfant du client du devis",
64400
+ "quotes.blockers.quote_configuration_type_mismatch": "La configuration li\xE9e ne correspond pas au type de configuration",
64401
+ "quotes.blockers.quote_configuration_not_draft": "S\xE9lectionnez une configuration en brouillon",
64402
+ "quotes.blockers.quote_configuration_customer_mismatch": "La configuration doit appartenir au client de la configuration",
64403
+ "quotes.blockers.quote_configuration_currency_mismatch": "La configuration doit utiliser la devise du devis",
64404
+ "quotes.blockers.quote_configuration_invoicing_entity_mismatch": "La facture doit utiliser l'entit\xE9 de facturation du devis",
64405
+ "quotes.blockers.quote_configuration_already_linked": "La configuration est d\xE9j\xE0 li\xE9e \xE0 une configuration de devis",
64406
+ "quotes.blockers.quote_configuration_not_subscription_update": "S\xE9lectionnez une configuration de mise \xE0 jour d'abonnement",
64407
+ "quotes.blockers.quote_configuration_not_new_subscription": "S\xE9lectionnez une configuration de nouvel abonnement",
64408
+ "quotes.blockers.quote_configuration_duplicate_subscription_update": "Un abonnement ne peut \xEAtre mis \xE0 jour qu'une seule fois dans un devis",
64409
+ "quotes.blockers.quote_draft_invoice_missing": "Le devis doit avoir une facture en brouillon pour \xEAtre finalis\xE9",
64410
+ "quotes.blockers.quote_draft_subscription_missing": "Le devis doit avoir un abonnement en brouillon pour \xEAtre finalis\xE9",
64411
+ "quotes.blockers.quote_expiry_after_transition_date": "La date d'expiration du devis doit \xEAtre au plus tard la fin de la p\xE9riode de facturation en cours, ou la date de transition planifi\xE9e si elle est post\xE9rieure"
63546
64412
  };
63547
64413
 
63548
64414
  // ../hyperline-i18n/build/locales/it.js
@@ -63592,7 +64458,25 @@ var it = {
63592
64458
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Questa voce \xE8 stata fatturata per il periodo proporzionato",
63593
64459
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Importo di {{amount}} non fatturato per il periodo proporzionato",
63594
64460
  "subscriptions.updates.updatePrices": "Aggiorna prezzi per {{productName}}",
63595
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo scaduto"
64461
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo scaduto",
64462
+ "quotes.blockers.quote_not_draft": "Riporta il preventivo in bozza prima di modificarne le configurazioni",
64463
+ "quotes.blockers.quote_expiration_date_missing": "Il preventivo deve avere una data di scadenza per essere inviato per approvazione",
64464
+ "quotes.blockers.quote_configuration_missing": "Aggiungi almeno una configurazione prima di inviare il preventivo",
64465
+ "quotes.blockers.quote_configuration_subscription_update_customer": "Gli aggiornamenti dell'abbonamento devono usare il cliente del preventivo",
64466
+ "quotes.blockers.quote_configuration_multiple_configurations_disabled": "Attiva le configurazioni multiple prima di assegnare un cliente figlio",
64467
+ "quotes.blockers.quote_configuration_customer_not_child": "Seleziona un cliente figlio del cliente del preventivo",
64468
+ "quotes.blockers.quote_configuration_type_mismatch": "La configurazione collegata non corrisponde al tipo di configurazione",
64469
+ "quotes.blockers.quote_configuration_not_draft": "Seleziona una configurazione in bozza",
64470
+ "quotes.blockers.quote_configuration_customer_mismatch": "La configurazione deve appartenere al cliente della configurazione",
64471
+ "quotes.blockers.quote_configuration_currency_mismatch": "La configurazione deve usare la valuta del preventivo",
64472
+ "quotes.blockers.quote_configuration_invoicing_entity_mismatch": "La fattura deve usare l'entit\xE0 di fatturazione del preventivo",
64473
+ "quotes.blockers.quote_configuration_already_linked": "La configurazione \xE8 gi\xE0 collegata a una configurazione del preventivo",
64474
+ "quotes.blockers.quote_configuration_not_subscription_update": "Seleziona una configurazione di aggiornamento dell'abbonamento",
64475
+ "quotes.blockers.quote_configuration_not_new_subscription": "Seleziona una configurazione di nuovo abbonamento",
64476
+ "quotes.blockers.quote_configuration_duplicate_subscription_update": "Un abbonamento pu\xF2 essere aggiornato una sola volta in un preventivo",
64477
+ "quotes.blockers.quote_draft_invoice_missing": "Il preventivo deve avere una fattura in bozza per essere finalizzato",
64478
+ "quotes.blockers.quote_draft_subscription_missing": "Il preventivo deve avere un abbonamento in bozza per essere finalizzato",
64479
+ "quotes.blockers.quote_expiry_after_transition_date": "La data di scadenza del preventivo deve essere entro la fine del periodo di fatturazione corrente, o la data di transizione pianificata se successiva"
63596
64480
  };
63597
64481
 
63598
64482
  // ../hyperline-i18n/build/locales/lt.js
@@ -63642,7 +64526,25 @@ var lt = {
63642
64526
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "U\u017E \u0161i\u0105 eilut\u0119 proporcingam laikotarpiui s\u0105skaita fakt\u016Bra i\u0161ra\u0161yta",
63643
64527
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Proporcingam laikotarpiui nei\u0161ra\u0161yta {{amount}} suma",
63644
64528
  "subscriptions.updates.updatePrices": "Atnaujinti {{productName}} kainas",
63645
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 nebegaliojantis likutis"
64529
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 nebegaliojantis likutis",
64530
+ "quotes.blockers.quote_not_draft": "Prie\u0161 keisdami pasi\u016Blymo konfig\u016Bracijas, gr\u0105\u017Einkite j\u012F \u012F juodra\u0161t\u012F",
64531
+ "quotes.blockers.quote_expiration_date_missing": "Pasi\u016Blymas turi tur\u0117ti galiojimo pabaigos dat\u0105, kad b\u016Bt\u0173 i\u0161si\u0173stas tvirtinti",
64532
+ "quotes.blockers.quote_configuration_missing": "Prie\u0161 pateikdami pasi\u016Blym\u0105, prid\u0117kite bent vien\u0105 konfig\u016Bracij\u0105",
64533
+ "quotes.blockers.quote_configuration_subscription_update_customer": "Prenumeratos atnaujinimai turi naudoti pasi\u016Blymo klient\u0105",
64534
+ "quotes.blockers.quote_configuration_multiple_configurations_disabled": "Prie\u0161 priskirdami antrin\u012F klient\u0105, \u012Fjunkite kelias konfig\u016Bracijas",
64535
+ "quotes.blockers.quote_configuration_customer_not_child": "Pasirinkite pasi\u016Blymo kliento antrin\u012F klient\u0105",
64536
+ "quotes.blockers.quote_configuration_type_mismatch": "Susieta konfig\u016Bracija neatitinka konfig\u016Bracijos tipo",
64537
+ "quotes.blockers.quote_configuration_not_draft": "Pasirinkite konfig\u016Bracijos juodra\u0161t\u012F",
64538
+ "quotes.blockers.quote_configuration_customer_mismatch": "Konfig\u016Bracija turi priklausyti konfig\u016Bracijos klientui",
64539
+ "quotes.blockers.quote_configuration_currency_mismatch": "Konfig\u016Bracija turi naudoti pasi\u016Blymo valiut\u0105",
64540
+ "quotes.blockers.quote_configuration_invoicing_entity_mismatch": "S\u0105skaita fakt\u016Bra turi naudoti pasi\u016Blymo s\u0105skait\u0173 i\u0161ra\u0161ymo subjekt\u0105",
64541
+ "quotes.blockers.quote_configuration_already_linked": "Konfig\u016Bracija jau susieta su pasi\u016Blymo konfig\u016Bracija",
64542
+ "quotes.blockers.quote_configuration_not_subscription_update": "Pasirinkite prenumeratos atnaujinimo konfig\u016Bracij\u0105",
64543
+ "quotes.blockers.quote_configuration_not_new_subscription": "Pasirinkite naujos prenumeratos konfig\u016Bracij\u0105",
64544
+ "quotes.blockers.quote_configuration_duplicate_subscription_update": "Prenumerat\u0105 pasi\u016Blyme galima atnaujinti tik vien\u0105 kart\u0105",
64545
+ "quotes.blockers.quote_draft_invoice_missing": "Pasi\u016Blymas turi tur\u0117ti s\u0105skaitos fakt\u016Bros juodra\u0161t\u012F, kad b\u016Bt\u0173 u\u017Ebaigtas",
64546
+ "quotes.blockers.quote_draft_subscription_missing": "Pasi\u016Blymas turi tur\u0117ti prenumeratos juodra\u0161t\u012F, kad b\u016Bt\u0173 u\u017Ebaigtas",
64547
+ "quotes.blockers.quote_expiry_after_transition_date": "Pasi\u016Blymo galiojimo pabaigos data turi b\u016Bti ne v\u0117lesn\u0117 nei dabartinio atsiskaitymo laikotarpio pabaiga arba suplanuota per\u0117jimo data, jei ji v\u0117lesn\u0117"
63646
64548
  };
63647
64549
 
63648
64550
  // ../hyperline-i18n/build/locales/nl.js
@@ -63692,7 +64594,25 @@ var nl = {
63692
64594
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Deze regel is gefactureerd voor de geproportioneerde periode",
63693
64595
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Bedrag van {{amount}} niet gefactureerd voor de geproportioneerde periode",
63694
64596
  "subscriptions.updates.updatePrices": "Prijzen bijwerken voor {{productName}}",
63695
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 verlopen saldo"
64597
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 verlopen saldo",
64598
+ "quotes.blockers.quote_not_draft": "Zet de offerte terug naar concept voordat u de configuraties wijzigt",
64599
+ "quotes.blockers.quote_expiration_date_missing": "De offerte moet een vervaldatum hebben om ter goedkeuring te worden verzonden",
64600
+ "quotes.blockers.quote_configuration_missing": "Voeg ten minste \xE9\xE9n configuratie toe voordat u de offerte indient",
64601
+ "quotes.blockers.quote_configuration_subscription_update_customer": "Abonnementswijzigingen moeten de klant van de offerte gebruiken",
64602
+ "quotes.blockers.quote_configuration_multiple_configurations_disabled": "Schakel meerdere configuraties in voordat u een onderliggende klant toewijst",
64603
+ "quotes.blockers.quote_configuration_customer_not_child": "Selecteer een onderliggende klant van de offerteklant",
64604
+ "quotes.blockers.quote_configuration_type_mismatch": "De gekoppelde configuratie komt niet overeen met het configuratietype",
64605
+ "quotes.blockers.quote_configuration_not_draft": "Selecteer een conceptconfiguratie",
64606
+ "quotes.blockers.quote_configuration_customer_mismatch": "De configuratie moet bij de klant van de configuratie horen",
64607
+ "quotes.blockers.quote_configuration_currency_mismatch": "De configuratie moet de valuta van de offerte gebruiken",
64608
+ "quotes.blockers.quote_configuration_invoicing_entity_mismatch": "De factuur moet de facturatie-entiteit van de offerte gebruiken",
64609
+ "quotes.blockers.quote_configuration_already_linked": "De configuratie is al gekoppeld aan een offerteconfiguratie",
64610
+ "quotes.blockers.quote_configuration_not_subscription_update": "Selecteer een configuratie voor een abonnementswijziging",
64611
+ "quotes.blockers.quote_configuration_not_new_subscription": "Selecteer een configuratie voor een nieuw abonnement",
64612
+ "quotes.blockers.quote_configuration_duplicate_subscription_update": "Een abonnement kan maar \xE9\xE9n keer per offerte worden gewijzigd",
64613
+ "quotes.blockers.quote_draft_invoice_missing": "De offerte moet een conceptfactuur hebben om te worden afgerond",
64614
+ "quotes.blockers.quote_draft_subscription_missing": "De offerte moet een conceptabonnement hebben om te worden afgerond",
64615
+ "quotes.blockers.quote_expiry_after_transition_date": "De vervaldatum van de offerte moet uiterlijk het einde van de huidige factuurperiode zijn, of de geplande overgangsdatum als die later valt"
63696
64616
  };
63697
64617
 
63698
64618
  // ../hyperline-i18n/build/locales/pl.js
@@ -63742,7 +64662,25 @@ var pl = {
63742
64662
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Ta pozycja zosta\u0142a zafakturowana za okres proporcjonalny",
63743
64663
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Kwota {{amount}} niefakturowana za okres proporcjonalny",
63744
64664
  "subscriptions.updates.updatePrices": "Aktualizuj ceny dla {{productName}}",
63745
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 wygas\u0142e saldo"
64665
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 wygas\u0142e saldo",
64666
+ "quotes.blockers.quote_not_draft": "Przywr\xF3\u0107 ofert\u0119 do wersji roboczej przed zmian\u0105 jej konfiguracji",
64667
+ "quotes.blockers.quote_expiration_date_missing": "Oferta musi mie\u0107 dat\u0119 wyga\u015Bni\u0119cia, aby zosta\u0142a wys\u0142ana do zatwierdzenia",
64668
+ "quotes.blockers.quote_configuration_missing": "Dodaj co najmniej jedn\u0105 konfiguracj\u0119 przed przes\u0142aniem oferty",
64669
+ "quotes.blockers.quote_configuration_subscription_update_customer": "Aktualizacje subskrypcji musz\u0105 u\u017Cywa\u0107 klienta oferty",
64670
+ "quotes.blockers.quote_configuration_multiple_configurations_disabled": "W\u0142\u0105cz wiele konfiguracji przed przypisaniem klienta podrz\u0119dnego",
64671
+ "quotes.blockers.quote_configuration_customer_not_child": "Wybierz klienta podrz\u0119dnego klienta oferty",
64672
+ "quotes.blockers.quote_configuration_type_mismatch": "Powi\u0105zana konfiguracja nie odpowiada typowi konfiguracji",
64673
+ "quotes.blockers.quote_configuration_not_draft": "Wybierz konfiguracj\u0119 w wersji roboczej",
64674
+ "quotes.blockers.quote_configuration_customer_mismatch": "Konfiguracja musi nale\u017Ce\u0107 do klienta konfiguracji",
64675
+ "quotes.blockers.quote_configuration_currency_mismatch": "Konfiguracja musi u\u017Cywa\u0107 waluty oferty",
64676
+ "quotes.blockers.quote_configuration_invoicing_entity_mismatch": "Faktura musi u\u017Cywa\u0107 podmiotu fakturuj\u0105cego oferty",
64677
+ "quotes.blockers.quote_configuration_already_linked": "Konfiguracja jest ju\u017C powi\u0105zana z konfiguracj\u0105 oferty",
64678
+ "quotes.blockers.quote_configuration_not_subscription_update": "Wybierz konfiguracj\u0119 aktualizacji subskrypcji",
64679
+ "quotes.blockers.quote_configuration_not_new_subscription": "Wybierz konfiguracj\u0119 nowej subskrypcji",
64680
+ "quotes.blockers.quote_configuration_duplicate_subscription_update": "Subskrypcj\u0119 mo\u017Cna zaktualizowa\u0107 w ofercie tylko raz",
64681
+ "quotes.blockers.quote_draft_invoice_missing": "Oferta musi mie\u0107 faktur\u0119 w wersji roboczej, aby zosta\u0142a sfinalizowana",
64682
+ "quotes.blockers.quote_draft_subscription_missing": "Oferta musi mie\u0107 subskrypcj\u0119 w wersji roboczej, aby zosta\u0142a sfinalizowana",
64683
+ "quotes.blockers.quote_expiry_after_transition_date": "Data wyga\u015Bni\u0119cia oferty musi przypada\u0107 najp\xF3\u017Aniej na koniec bie\u017C\u0105cego okresu rozliczeniowego lub na zaplanowan\u0105 dat\u0119 przej\u015Bcia, je\u015Bli jest p\xF3\u017Aniejsza"
63746
64684
  };
63747
64685
 
63748
64686
  // ../hyperline-i18n/build/locales/pt.js
@@ -63792,7 +64730,25 @@ var pt = {
63792
64730
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Esta linha foi faturada para o per\xEDodo proporcional",
63793
64731
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Valor de {{amount}} n\xE3o faturado para o per\xEDodo proporcional",
63794
64732
  "subscriptions.updates.updatePrices": "Atualizar pre\xE7os para {{productName}}",
63795
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo expirado"
64733
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo expirado",
64734
+ "quotes.blockers.quote_not_draft": "Volte a colocar o or\xE7amento em rascunho antes de alterar as suas configura\xE7\xF5es",
64735
+ "quotes.blockers.quote_expiration_date_missing": "O or\xE7amento deve ter uma data de expira\xE7\xE3o para ser enviado para aprova\xE7\xE3o",
64736
+ "quotes.blockers.quote_configuration_missing": "Adicione pelo menos uma configura\xE7\xE3o antes de submeter o or\xE7amento",
64737
+ "quotes.blockers.quote_configuration_subscription_update_customer": "As atualiza\xE7\xF5es de subscri\xE7\xE3o devem usar o cliente do or\xE7amento",
64738
+ "quotes.blockers.quote_configuration_multiple_configurations_disabled": "Ative as configura\xE7\xF5es m\xFAltiplas antes de atribuir um cliente filho",
64739
+ "quotes.blockers.quote_configuration_customer_not_child": "Selecione um cliente filho do cliente do or\xE7amento",
64740
+ "quotes.blockers.quote_configuration_type_mismatch": "A configura\xE7\xE3o associada n\xE3o corresponde ao tipo de configura\xE7\xE3o",
64741
+ "quotes.blockers.quote_configuration_not_draft": "Selecione uma configura\xE7\xE3o em rascunho",
64742
+ "quotes.blockers.quote_configuration_customer_mismatch": "A configura\xE7\xE3o deve pertencer ao cliente da configura\xE7\xE3o",
64743
+ "quotes.blockers.quote_configuration_currency_mismatch": "A configura\xE7\xE3o deve usar a moeda do or\xE7amento",
64744
+ "quotes.blockers.quote_configuration_invoicing_entity_mismatch": "A fatura deve usar a entidade de fatura\xE7\xE3o do or\xE7amento",
64745
+ "quotes.blockers.quote_configuration_already_linked": "A configura\xE7\xE3o j\xE1 est\xE1 associada a uma configura\xE7\xE3o de or\xE7amento",
64746
+ "quotes.blockers.quote_configuration_not_subscription_update": "Selecione uma configura\xE7\xE3o de atualiza\xE7\xE3o de subscri\xE7\xE3o",
64747
+ "quotes.blockers.quote_configuration_not_new_subscription": "Selecione uma configura\xE7\xE3o de nova subscri\xE7\xE3o",
64748
+ "quotes.blockers.quote_configuration_duplicate_subscription_update": "Uma subscri\xE7\xE3o s\xF3 pode ser atualizada uma vez num or\xE7amento",
64749
+ "quotes.blockers.quote_draft_invoice_missing": "O or\xE7amento deve ter uma fatura em rascunho para ser finalizado",
64750
+ "quotes.blockers.quote_draft_subscription_missing": "O or\xE7amento deve ter uma subscri\xE7\xE3o em rascunho para ser finalizado",
64751
+ "quotes.blockers.quote_expiry_after_transition_date": "A data de expira\xE7\xE3o do or\xE7amento deve ser, no m\xE1ximo, o fim do per\xEDodo de fatura\xE7\xE3o atual, ou a data de transi\xE7\xE3o agendada se for posterior"
63796
64752
  };
63797
64753
 
63798
64754
  // ../hyperline-i18n/build/language.js
@@ -63973,16 +64929,19 @@ var REDACTED_KEY_NAMES = /* @__PURE__ */ new Set([
63973
64929
  "credentials",
63974
64930
  "iban",
63975
64931
  "idtoken",
64932
+ "launchticket",
63976
64933
  "privatekey",
63977
64934
  "publictoken",
63978
64935
  "refreshtoken",
64936
+ // A workflow secret's value (core/workflows secrets).
64937
+ "secretvalue",
63979
64938
  "sessiontoken",
63980
64939
  "token",
63981
64940
  "tokenid",
63982
64941
  "verificationcode"
63983
64942
  ]);
63984
64943
  var REDACTED_KEY_SUFFIX_PATTERN = /(secret|password|passphrase|apikey)$/;
63985
- var REDACTED_KEY_CANDIDATE_PATTERN = /token|key|secret|pass|assertion|verifier|credential|authorization|cookie|iban|cardnumber|code|connectionurl/i;
64944
+ var REDACTED_KEY_CANDIDATE_PATTERN = /token|ticket|key|secret|pass|assertion|verifier|credential|authorization|cookie|iban|cardnumber|code|connectionurl/i;
63986
64945
  var URL_ONLY_REDACTED_KEYS = /* @__PURE__ */ new Set(["key"]);
63987
64946
  var OAUTH_CODE_KEY = "code";
63988
64947
  var OAUTH_CODE_CONTEXT_KEYS = ["state", "grant_type"];
@@ -66744,69 +67703,6 @@ var Decimal = P.constructor = clone2(DEFAULTS);
66744
67703
  LN10 = new Decimal(LN10);
66745
67704
  PI = new Decimal(PI);
66746
67705
 
66747
- // ../hyperline-lib/build/utils/config/usStates.js
66748
- var usStates = [
66749
- "AA",
66750
- "AE",
66751
- "AK",
66752
- "AL",
66753
- "AP",
66754
- "AR",
66755
- "AS",
66756
- "AZ",
66757
- "CA",
66758
- "CO",
66759
- "CT",
66760
- "DC",
66761
- "DE",
66762
- "FL",
66763
- "GA",
66764
- "GU",
66765
- "HI",
66766
- "IA",
66767
- "ID",
66768
- "IL",
66769
- "IN",
66770
- "KS",
66771
- "KY",
66772
- "LA",
66773
- "MA",
66774
- "MD",
66775
- "ME",
66776
- "MI",
66777
- "MN",
66778
- "MO",
66779
- "MP",
66780
- "MS",
66781
- "MT",
66782
- "NC",
66783
- "ND",
66784
- "NE",
66785
- "NH",
66786
- "NJ",
66787
- "NM",
66788
- "NV",
66789
- "NY",
66790
- "OH",
66791
- "OK",
66792
- "OR",
66793
- "PA",
66794
- "PR",
66795
- "RI",
66796
- "SC",
66797
- "SD",
66798
- "TN",
66799
- "TX",
66800
- "UT",
66801
- "VA",
66802
- "VI",
66803
- "VT",
66804
- "WA",
66805
- "WI",
66806
- "WV",
66807
- "WY"
66808
- ];
66809
-
66810
67706
  // ../hyperline-lib/build/utils/dates.js
66811
67707
  var import_shared2 = __toESM(require_shared(), 1);
66812
67708
  var PERIOD_BOUND_DRIFT_TOLERANCE_MS = 2 * 60 * 1e3;
@@ -66831,7 +67727,8 @@ var dateRealignmentModeSchema = external_exports.enum([
66831
67727
  "utc_midnight_import",
66832
67728
  "dst_hour_drift",
66833
67729
  "month_start_drift",
66834
- "manual_phase_end_midnight"
67730
+ "manual_phase_end_midnight",
67731
+ "customer_timezone_change"
66835
67732
  ]).default("utc_midnight_import");
66836
67733
  var DST_HOUR_SHIFT_BY_LOCAL_MILLISECOND_OF_DAY = /* @__PURE__ */ new Map([
66837
67734
  [23 * MILLISECONDS_PER_HOUR, MILLISECONDS_PER_HOUR],
@@ -66840,8 +67737,16 @@ var DST_HOUR_SHIFT_BY_LOCAL_MILLISECOND_OF_DAY = /* @__PURE__ */ new Map([
66840
67737
  [MILLISECONDS_PER_HOUR - 1, -MILLISECONDS_PER_HOUR]
66841
67738
  ]);
66842
67739
 
67740
+ // ../hyperline-lib/build/utils/overviewPeriods.js
67741
+ var OverviewPeriodSchema = external_exports.enum([
67742
+ "this_month",
67743
+ "last_month",
67744
+ "last_3_months"
67745
+ ]);
67746
+
66843
67747
  // ../hyperline-lib/build/utils/api/filterBuilder.js
66844
- var baseAuthorizedOperators = ["not", "isNull", "isNotNull"];
67748
+ var nullAuthorizedOperators = ["isNull", "isNotNull"];
67749
+ var baseAuthorizedOperators = ["not", ...nullAuthorizedOperators];
66845
67750
  var booleanAuthorizedOperators = [
66846
67751
  ...baseAuthorizedOperators,
66847
67752
  "equals"
@@ -66870,10 +67775,17 @@ var authorizedOperators = [
66870
67775
  ...arrayAuthorizedOperators,
66871
67776
  ...mapAuthorizedOperators
66872
67777
  ];
67778
+ var NullFilterValueSchema = BooleanSchema.or(external_exports.literal("")).optional();
66873
67779
 
66874
67780
  // ../hyperline-lib/build/http/dto/state.js
66875
- var StateSchema = external_exports.enum(usStates).openapi({
66876
- description: "Only for US country. Second part of subdivision code in ISO format. See [ISO 3166-2:US](https://en.wikipedia.org/wiki/ISO_3166-2:US).",
67781
+ var StateSchema = external_exports.string().openapi({
67782
+ description: `State or province of the address, stored as its code (the second part of the ISO 3166-2 code, e.g. \`CA\` for \`US-CA\`) for:
67783
+ - United States: state, see [ISO 3166-2:US](https://en.wikipedia.org/wiki/ISO_3166-2:US)
67784
+ - Canada: province or territory, see [ISO 3166-2:CA](https://en.wikipedia.org/wiki/ISO_3166-2:CA)
67785
+ - Italy: province, see [ISO 3166-2:IT](https://en.wikipedia.org/wiki/ISO_3166-2:IT)
67786
+ - Brazil: state, see [ISO 3166-2:BR](https://en.wikipedia.org/wiki/ISO_3166-2:BR)
67787
+
67788
+ A code or a name is accepted (e.g. \`ON\` or \`Ontario\`); a value that matches neither for these countries is rejected. For any other country, the state is ignored.`,
66877
67789
  example: "CA"
66878
67790
  });
66879
67791
 
@@ -66987,9 +67899,10 @@ var toLogRequest = (config4) => {
66987
67899
  };
66988
67900
 
66989
67901
  // ../hyperline-lib/build/httpClient/publicUrlFetch.js
67902
+ import { lookup as lookupCallback } from "node:dns";
66990
67903
  import { lookup } from "node:dns/promises";
66991
67904
  import { isIP } from "node:net";
66992
- import { Agent } from "undici";
67905
+ import { Agent, fetch as fetch2 } from "undici";
66993
67906
  var PINNED_DISPATCHER_TTL_MS = 5 * 60 * 1e3;
66994
67907
  var DEFAULT_MAX_RESPONSE_BYTES = 2 * 1024 * 1024;
66995
67908
 
@@ -67001,14 +67914,23 @@ import multer2 from "multer";
67001
67914
  // ../hyperline-lib/build/httpRouter/file.js
67002
67915
  import helmet from "helmet";
67003
67916
 
67004
- // ../hyperline-lib/build/publicApi/auth/index.js
67917
+ // ../hyperline-lib/build/publicApi/auth/apiKey.js
67005
67918
  import { randomBytes as randomBytes2, scryptSync } from "node:crypto";
67006
67919
 
67920
+ // ../hyperline-lib/build/publicApi/auth/apiKeyHashCache.js
67921
+ import { createHash as createHash4 } from "node:crypto";
67922
+ var TTL_MS = 5 * 6e4;
67923
+
67007
67924
  // ../hyperline-mcp/build/requestBuilder.js
67008
- function buildRequestConfig(path2, args, method, queryParamKeys = []) {
67925
+ function buildRequestConfig({ path: path2, args, method, queryParamKeys = [], arrayBody = false }) {
67009
67926
  const { url: url2, usedKeys } = replacePathParams(path2, args);
67010
67927
  const remaining = removeUsedKeys(args, usedKeys);
67011
- const { params, data } = separateParamsAndBody(remaining, method, queryParamKeys);
67928
+ const { params, data } = separateParamsAndBody({
67929
+ args: remaining,
67930
+ method,
67931
+ queryParamKeys,
67932
+ arrayBody
67933
+ });
67012
67934
  return { url: url2, params, data };
67013
67935
  }
67014
67936
  function replacePathParams(path2, args) {
@@ -67039,7 +67961,7 @@ var PathParamError = class extends Error {
67039
67961
  function removeUsedKeys(args, usedKeys) {
67040
67962
  return Object.fromEntries(Object.entries(args).filter(([key]) => !usedKeys.has(key)));
67041
67963
  }
67042
- function separateParamsAndBody(args, method, queryParamKeys) {
67964
+ function separateParamsAndBody({ args, method, queryParamKeys, arrayBody }) {
67043
67965
  const isBodyMethod = ["POST", "PUT", "PATCH"].includes(method);
67044
67966
  if (!isBodyMethod) {
67045
67967
  return { params: args };
@@ -67047,8 +67969,7 @@ function separateParamsAndBody(args, method, queryParamKeys) {
67047
67969
  const queryKeySet = new Set(queryParamKeys);
67048
67970
  const params = Object.fromEntries(Object.entries(args).filter(([key]) => queryKeySet.has(key)));
67049
67971
  const data = Object.fromEntries(Object.entries(args).filter(([key]) => !queryKeySet.has(key)));
67050
- const dataKeys = Object.keys(data);
67051
- if (dataKeys.length === 1 && dataKeys[0] === "items" && Array.isArray(data.items)) {
67972
+ if (arrayBody && Array.isArray(data.items)) {
67052
67973
  return { params, data: data.items };
67053
67974
  }
67054
67975
  return { params, data };
@@ -67066,6 +67987,62 @@ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/
67066
67987
  // ../hyperline-mcp/build/server/server.js
67067
67988
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
67068
67989
 
67990
+ // build/multipart.js
67991
+ import { readFile as readFile2 } from "node:fs/promises";
67992
+ import { basename, extname } from "node:path";
67993
+ var MIMETYPES_BY_EXTENSION = {
67994
+ ".csv": "text/csv",
67995
+ ".doc": "application/msword",
67996
+ ".docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
67997
+ ".gif": "image/gif",
67998
+ ".jpeg": "image/jpeg",
67999
+ ".jpg": "image/jpeg",
68000
+ ".json": "application/json",
68001
+ ".pdf": "application/pdf",
68002
+ ".png": "image/png",
68003
+ ".svg": "image/svg+xml",
68004
+ ".txt": "text/plain",
68005
+ ".xls": "application/vnd.ms-excel",
68006
+ ".xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
68007
+ ".xml": "application/xml"
68008
+ };
68009
+ function getMimetypeFromPath(filePath) {
68010
+ return MIMETYPES_BY_EXTENSION[extname(filePath).toLowerCase()] ?? "application/octet-stream";
68011
+ }
68012
+ function appendFormValue({ formData, key, value }) {
68013
+ if (value === void 0) {
68014
+ return;
68015
+ }
68016
+ if (value === null) {
68017
+ formData.append(key, "");
68018
+ return;
68019
+ }
68020
+ if (Array.isArray(value)) {
68021
+ for (const [index, item] of value.entries()) {
68022
+ appendFormValue({ formData, key: `${key}[${index}]`, value: item });
68023
+ }
68024
+ return;
68025
+ }
68026
+ if (typeof value === "object") {
68027
+ throw new Error(`--${key} cannot be sent alongside files: a multipart request only carries scalar fields.`);
68028
+ }
68029
+ formData.append(key, String(value));
68030
+ }
68031
+ async function buildMultipartBody({ data, files }) {
68032
+ const formData = new FormData();
68033
+ for (const [key, value] of Object.entries(data)) {
68034
+ appendFormValue({ formData, key, value });
68035
+ }
68036
+ const fileUploads = Object.entries(files).flatMap(([fieldName, filePaths]) => filePaths.map((filePath) => ({ fieldName, filePath })));
68037
+ const fileContents = await Promise.all(fileUploads.map(({ filePath }) => readFile2(filePath)));
68038
+ for (const [index, { fieldName, filePath }] of fileUploads.entries()) {
68039
+ formData.append(fieldName, new Blob([new Uint8Array(fileContents[index])], {
68040
+ type: getMimetypeFromPath(filePath)
68041
+ }), basename(filePath));
68042
+ }
68043
+ return formData;
68044
+ }
68045
+
67069
68046
  // build/output.js
67070
68047
  function formatOutput({ data, format: format2 }) {
67071
68048
  if (format2 === "json") {
@@ -67125,16 +68102,25 @@ function createCLIContext({ apiKey, baseUrl, outputFormat, source, companyId })
67125
68102
  return {
67126
68103
  baseUrl,
67127
68104
  outputFormat,
67128
- async execute({ method, path: path2, args, queryParamKeys = [], body, baseUrlOverride }) {
67129
- const { url: url2, params, data } = buildRequestConfig(path2, args, method, queryParamKeys);
68105
+ async execute({ method, path: path2, args, queryParamKeys = [], body, files, baseUrlOverride }) {
68106
+ const { url: url2, params, data } = buildRequestConfig({
68107
+ path: path2,
68108
+ args,
68109
+ method,
68110
+ queryParamKeys
68111
+ });
67130
68112
  const requestData = body ?? data;
67131
68113
  const hasData = Array.isArray(requestData) ? requestData.length > 0 : requestData != null && Object.keys(requestData).length > 0;
68114
+ const hasFiles = Object.values(files ?? {}).some((filePaths) => filePaths.length > 0);
67132
68115
  try {
67133
68116
  const response = await httpClient.request({
67134
68117
  method,
67135
68118
  url: url2,
67136
68119
  params,
67137
- data: hasData ? requestData : void 0,
68120
+ data: hasFiles ? await buildMultipartBody({
68121
+ data: requestData ?? {},
68122
+ files: files ?? {}
68123
+ }) : hasData ? requestData : void 0,
67138
68124
  ...baseUrlOverride ? { baseURL: baseUrlOverride } : {},
67139
68125
  headers: {
67140
68126
  "Hyperline-Source": source,