@hyperline/cli 0.1.0-build.1.8e4ca92 → 0.1.0-build.1.8fc9a80

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",
@@ -41915,7 +42414,13 @@ Examples:
41915
42414
  queryParamKeys: []
41916
42415
  });
41917
42416
  });
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", `
42417
+ 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:
42418
+ - United States: state, see [ISO 3166-2:US](https://en.wikipedia.org/wiki/ISO_3166-2:US)
42419
+ - Canada: province or territory, see [ISO 3166-2:CA](https://en.wikipedia.org/wiki/ISO_3166-2:CA)
42420
+ - Italy: province, see [ISO 3166-2:IT](https://en.wikipedia.org/wiki/ISO_3166-2:IT)
42421
+ - Brazil: state, see [ISO 3166-2:BR](https://en.wikipedia.org/wiki/ISO_3166-2:BR)
42422
+
42423
+ 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
42424
  Examples:
41920
42425
  hyperline customers-address create-customer-address --customer-id <customerId> --type <type>
41921
42426
  hyperline customers-address create-customer-address --customer-id <customerId> --type <type> --name <name> --line1 <line1>
@@ -41953,7 +42458,13 @@ Examples:
41953
42458
  queryParamKeys: []
41954
42459
  });
41955
42460
  });
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", `
42461
+ 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:
42462
+ - United States: state, see [ISO 3166-2:US](https://en.wikipedia.org/wiki/ISO_3166-2:US)
42463
+ - Canada: province or territory, see [ISO 3166-2:CA](https://en.wikipedia.org/wiki/ISO_3166-2:CA)
42464
+ - Italy: province, see [ISO 3166-2:IT](https://en.wikipedia.org/wiki/ISO_3166-2:IT)
42465
+ - Brazil: state, see [ISO 3166-2:BR](https://en.wikipedia.org/wiki/ISO_3166-2:BR)
42466
+
42467
+ 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
42468
  Examples:
41958
42469
  hyperline customers-address update-customer-address --customer-id <customerId> --address-id <addressId>
41959
42470
  hyperline customers-address update-customer-address --customer-id <customerId> --address-id <addressId> --name <name> --line1 <line1>
@@ -42024,7 +42535,7 @@ Examples:
42024
42535
  // build/commands/generated/customers-credits.js
42025
42536
  function registerCustomers_CreditsCommands(parent) {
42026
42537
  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", `
42538
+ 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
42539
  Examples:
42029
42540
  hyperline customers-credits list
42030
42541
  hyperline customers-credits list --take <take> --product-id <product_id>`).action(async (opts) => {
@@ -42038,10 +42549,6 @@ Examples:
42038
42549
  args.product_id = opts.productId;
42039
42550
  if (opts["productId.not"] !== void 0)
42040
42551
  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
42552
  if (opts["productId.equals"] !== void 0)
42046
42553
  args.product_id__equals = opts["productId.equals"];
42047
42554
  if (opts["productId.contains"] !== void 0)
@@ -42054,10 +42561,6 @@ Examples:
42054
42561
  args.customer_id = opts.customerId;
42055
42562
  if (opts["customerId.not"] !== void 0)
42056
42563
  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
42564
  if (opts["customerId.equals"] !== void 0)
42062
42565
  args.customer_id__equals = opts["customerId.equals"];
42063
42566
  if (opts["customerId.contains"] !== void 0)
@@ -42070,10 +42573,6 @@ Examples:
42070
42573
  args.updated_at = opts.updatedAt;
42071
42574
  if (opts["updatedAt.not"] !== void 0)
42072
42575
  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
42576
  if (opts["updatedAt.equals"] !== void 0)
42078
42577
  args.updated_at__equals = opts["updatedAt.equals"];
42079
42578
  if (opts["updatedAt.lt"] !== void 0)
@@ -42097,24 +42596,18 @@ Examples:
42097
42596
  "skip",
42098
42597
  "product_id",
42099
42598
  "product_id__not",
42100
- "product_id__isNull",
42101
- "product_id__isNotNull",
42102
42599
  "product_id__equals",
42103
42600
  "product_id__contains",
42104
42601
  "product_id__startsWith",
42105
42602
  "product_id__endWith",
42106
42603
  "customer_id",
42107
42604
  "customer_id__not",
42108
- "customer_id__isNull",
42109
- "customer_id__isNotNull",
42110
42605
  "customer_id__equals",
42111
42606
  "customer_id__contains",
42112
42607
  "customer_id__startsWith",
42113
42608
  "customer_id__endWith",
42114
42609
  "updated_at",
42115
42610
  "updated_at__not",
42116
- "updated_at__isNull",
42117
- "updated_at__isNotNull",
42118
42611
  "updated_at__equals",
42119
42612
  "updated_at__lt",
42120
42613
  "updated_at__lte",
@@ -42387,6 +42880,88 @@ Examples:
42387
42880
  });
42388
42881
  }
42389
42882
 
42883
+ // build/commands/generated/customers-features.js
42884
+ function registerCustomers_FeaturesCommands(parent) {
42885
+ const resource = parent.command("customers-features").description("Manage customers > features");
42886
+ resource.command("resolve-customer-features").description(`Resolve feature values for a customer.`).requiredOption("--id <value>", `id parameter`).option("--at <value>", `Resolution date.`).addHelpText("after", `
42887
+ Examples:
42888
+ hyperline customers-features resolve-customer-features --id <id>
42889
+ hyperline customers-features resolve-customer-features --id <id> --at <at>`).action(async (opts) => {
42890
+ const ctx = resource.parent?.opts()._ctx;
42891
+ if (!ctx) {
42892
+ process.stderr.write("Error: Not authenticated\n");
42893
+ process.exit(1);
42894
+ }
42895
+ const args = {};
42896
+ if (opts.id !== void 0)
42897
+ args.id = opts.id;
42898
+ if (opts.at !== void 0)
42899
+ args.at = opts.at;
42900
+ await ctx.execute({
42901
+ method: "GET",
42902
+ path: "/v1/customers/{id}/features",
42903
+ args,
42904
+ queryParamKeys: ["at"]
42905
+ });
42906
+ });
42907
+ 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", `
42908
+ Examples:
42909
+ hyperline customers-features set-customer-feature --id <id> --code <code> --value
42910
+ hyperline customers-features set-customer-feature --id <id> --code <code> --value --reason <reason> --expires-at <expires_at>
42911
+ hyperline customers-features set-customer-feature --id <id> --code <code> --value --output json`).action(async (opts) => {
42912
+ const ctx = resource.parent?.opts()._ctx;
42913
+ if (!ctx) {
42914
+ process.stderr.write("Error: Not authenticated\n");
42915
+ process.exit(1);
42916
+ }
42917
+ const args = {};
42918
+ if (opts.id !== void 0)
42919
+ args.id = opts.id;
42920
+ if (opts.code !== void 0)
42921
+ args.code = opts.code;
42922
+ if (opts.reason !== void 0)
42923
+ args.reason = opts.reason;
42924
+ if (opts.expiresAt !== void 0)
42925
+ args.expires_at = opts.expiresAt;
42926
+ if (opts.value !== void 0)
42927
+ args.value = true;
42928
+ await ctx.execute({
42929
+ method: "PUT",
42930
+ path: "/v1/customers/{id}/features/{code}",
42931
+ args,
42932
+ queryParamKeys: []
42933
+ });
42934
+ });
42935
+ 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", `
42936
+ Examples:
42937
+ hyperline customers-features delete-customer-feature --id <id> --code <code>
42938
+ hyperline customers-features delete-customer-feature --id <id> --code <code> --output json`).action(async (opts) => {
42939
+ const ctx = resource.parent?.opts()._ctx;
42940
+ if (!ctx) {
42941
+ process.stderr.write("Error: Not authenticated\n");
42942
+ process.exit(1);
42943
+ }
42944
+ const args = {};
42945
+ if (opts.id !== void 0)
42946
+ args.id = opts.id;
42947
+ if (opts.code !== void 0)
42948
+ args.code = opts.code;
42949
+ if (!opts.yes) {
42950
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
42951
+ if (!confirmed) {
42952
+ process.stdout.write("Aborted.\n");
42953
+ return;
42954
+ }
42955
+ }
42956
+ await ctx.execute({
42957
+ method: "DELETE",
42958
+ path: "/v1/customers/{id}/features/{code}",
42959
+ args,
42960
+ queryParamKeys: []
42961
+ });
42962
+ });
42963
+ }
42964
+
42390
42965
  // build/commands/generated/customers-payment-methods.js
42391
42966
  function registerCustomers_Payment_MethodsCommands(parent) {
42392
42967
  const resource = parent.command("customers-payment-methods").description("Manage customers > payment methods");
@@ -42806,30 +43381,246 @@ Examples:
42806
43381
  process.stderr.write("Error: Not authenticated\n");
42807
43382
  process.exit(1);
42808
43383
  }
42809
- const args = {};
42810
- if (opts.exportId !== void 0)
42811
- args.exportId = opts.exportId;
43384
+ const args = {};
43385
+ if (opts.exportId !== void 0)
43386
+ args.exportId = opts.exportId;
43387
+ await ctx.execute({
43388
+ method: "GET",
43389
+ path: "/v1/exports/{exportId}",
43390
+ args,
43391
+ queryParamKeys: []
43392
+ });
43393
+ });
43394
+ 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", `
43395
+ Examples:
43396
+ hyperline exports download --export-id <exportId>`).action(async (opts) => {
43397
+ const ctx = resource.parent?.opts()._ctx;
43398
+ if (!ctx) {
43399
+ process.stderr.write("Error: Not authenticated\n");
43400
+ process.exit(1);
43401
+ }
43402
+ const args = {};
43403
+ if (opts.exportId !== void 0)
43404
+ args.exportId = opts.exportId;
43405
+ await ctx.execute({
43406
+ method: "GET",
43407
+ path: "/v2/exports/{exportId}/download",
43408
+ args,
43409
+ queryParamKeys: []
43410
+ });
43411
+ });
43412
+ }
43413
+
43414
+ // build/commands/generated/features.js
43415
+ function registerFeaturesCommands(parent) {
43416
+ const resource = parent.command("features").description("Manage features");
43417
+ 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", `
43418
+ Examples:
43419
+ hyperline features list
43420
+ hyperline features list --take <take> --code <code>`).action(async (opts) => {
43421
+ const ctx = resource.parent?.opts()._ctx;
43422
+ if (!ctx) {
43423
+ process.stderr.write("Error: Not authenticated\n");
43424
+ process.exit(1);
43425
+ }
43426
+ const args = {};
43427
+ if (opts.code !== void 0)
43428
+ args.code = opts.code;
43429
+ if (opts["code.not"] !== void 0)
43430
+ args.code__not = opts["code.not"];
43431
+ if (opts["code.equals"] !== void 0)
43432
+ args.code__equals = opts["code.equals"];
43433
+ if (opts["code.contains"] !== void 0)
43434
+ args.code__contains = opts["code.contains"];
43435
+ if (opts["code.startsWith"] !== void 0)
43436
+ args.code__startsWith = opts["code.startsWith"];
43437
+ if (opts["code.endWith"] !== void 0)
43438
+ args.code__endWith = opts["code.endWith"];
43439
+ if (opts.name !== void 0)
43440
+ args.name = opts.name;
43441
+ if (opts["name.not"] !== void 0)
43442
+ args.name__not = opts["name.not"];
43443
+ if (opts["name.equals"] !== void 0)
43444
+ args.name__equals = opts["name.equals"];
43445
+ if (opts["name.contains"] !== void 0)
43446
+ args.name__contains = opts["name.contains"];
43447
+ if (opts["name.startsWith"] !== void 0)
43448
+ args.name__startsWith = opts["name.startsWith"];
43449
+ if (opts["name.endWith"] !== void 0)
43450
+ args.name__endWith = opts["name.endWith"];
43451
+ if (opts.status !== void 0)
43452
+ args.status = opts.status;
43453
+ if (opts["status.in"] !== void 0)
43454
+ args.status__in = opts["status.in"];
43455
+ if (opts.search !== void 0)
43456
+ args.search = opts.search;
43457
+ if (opts.take !== void 0)
43458
+ args.take = Number(opts.take);
43459
+ if (opts.skip !== void 0)
43460
+ args.skip = Number(opts.skip);
43461
+ await ctx.execute({
43462
+ method: "GET",
43463
+ path: "/v1/features",
43464
+ args,
43465
+ queryParamKeys: [
43466
+ "take",
43467
+ "skip",
43468
+ "code",
43469
+ "code__not",
43470
+ "code__equals",
43471
+ "code__contains",
43472
+ "code__startsWith",
43473
+ "code__endWith",
43474
+ "name",
43475
+ "name__not",
43476
+ "name__equals",
43477
+ "name__contains",
43478
+ "name__startsWith",
43479
+ "name__endWith",
43480
+ "status",
43481
+ "status__in",
43482
+ "search"
43483
+ ]
43484
+ });
43485
+ });
43486
+ 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", `
43487
+ Examples:
43488
+ hyperline features create --code <code> --name <name> --value-type <value_type> --default-value
43489
+ hyperline features create --code <code> --name <name> --value-type <value_type> --default-value --description <description> --resolution-strategy <resolution_strategy>
43490
+ hyperline features create --code <code> --name <name> --value-type <value_type> --default-value --output json`).action(async (opts) => {
43491
+ const ctx = resource.parent?.opts()._ctx;
43492
+ if (!ctx) {
43493
+ process.stderr.write("Error: Not authenticated\n");
43494
+ process.exit(1);
43495
+ }
43496
+ const args = {};
43497
+ if (opts.code !== void 0)
43498
+ args.code = opts.code;
43499
+ if (opts.name !== void 0)
43500
+ args.name = opts.name;
43501
+ if (opts.description !== void 0)
43502
+ args.description = opts.description;
43503
+ if (opts.valueType !== void 0)
43504
+ args.value_type = opts.valueType;
43505
+ if (opts.resolutionStrategy !== void 0)
43506
+ args.resolution_strategy = opts.resolutionStrategy;
43507
+ if (opts.defaultValue !== void 0)
43508
+ args.default_value = true;
43509
+ await ctx.execute({
43510
+ method: "POST",
43511
+ path: "/v1/features",
43512
+ args,
43513
+ queryParamKeys: []
43514
+ });
43515
+ });
43516
+ resource.command("get").description(`Retrieve a feature definition.`).requiredOption("--code <value>", `code parameter`).addHelpText("after", `
43517
+ Examples:
43518
+ hyperline features get --code <code>`).action(async (opts) => {
43519
+ const ctx = resource.parent?.opts()._ctx;
43520
+ if (!ctx) {
43521
+ process.stderr.write("Error: Not authenticated\n");
43522
+ process.exit(1);
43523
+ }
43524
+ const args = {};
43525
+ if (opts.code !== void 0)
43526
+ args.code = opts.code;
43527
+ await ctx.execute({
43528
+ method: "GET",
43529
+ path: "/v1/features/{code}",
43530
+ args,
43531
+ queryParamKeys: []
43532
+ });
43533
+ });
43534
+ 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", `
43535
+ Examples:
43536
+ hyperline features update --code <code>
43537
+ hyperline features update --code <code> --name <name> --description <description>
43538
+ hyperline features update --code <code> --output json`).action(async (opts) => {
43539
+ const ctx = resource.parent?.opts()._ctx;
43540
+ if (!ctx) {
43541
+ process.stderr.write("Error: Not authenticated\n");
43542
+ process.exit(1);
43543
+ }
43544
+ const args = {};
43545
+ if (opts.code !== void 0)
43546
+ args.code = opts.code;
43547
+ if (opts.name !== void 0)
43548
+ args.name = opts.name;
43549
+ if (opts.description !== void 0)
43550
+ args.description = opts.description;
43551
+ if (opts.valueType !== void 0)
43552
+ args.value_type = opts.valueType;
43553
+ if (opts.resolutionStrategy !== void 0)
43554
+ args.resolution_strategy = opts.resolutionStrategy;
43555
+ if (opts.defaultValue !== void 0)
43556
+ args.default_value = true;
43557
+ await ctx.execute({
43558
+ method: "PUT",
43559
+ path: "/v1/features/{code}",
43560
+ args,
43561
+ queryParamKeys: []
43562
+ });
43563
+ });
43564
+ resource.command("archive").description(`Archive a feature definition.`).requiredOption("--code <value>", `code parameter`).addHelpText("after", `
43565
+ Examples:
43566
+ hyperline features archive --code <code>
43567
+ hyperline features archive --code <code> --output json`).action(async (opts) => {
43568
+ const ctx = resource.parent?.opts()._ctx;
43569
+ if (!ctx) {
43570
+ process.stderr.write("Error: Not authenticated\n");
43571
+ process.exit(1);
43572
+ }
43573
+ const args = {};
43574
+ if (opts.code !== void 0)
43575
+ args.code = opts.code;
43576
+ await ctx.execute({
43577
+ method: "PUT",
43578
+ path: "/v1/features/{code}/archive",
43579
+ args,
43580
+ queryParamKeys: []
43581
+ });
43582
+ });
43583
+ 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", `
43584
+ Examples:
43585
+ hyperline features delete --code <code>
43586
+ hyperline features delete --code <code> --output json`).action(async (opts) => {
43587
+ const ctx = resource.parent?.opts()._ctx;
43588
+ if (!ctx) {
43589
+ process.stderr.write("Error: Not authenticated\n");
43590
+ process.exit(1);
43591
+ }
43592
+ const args = {};
43593
+ if (opts.code !== void 0)
43594
+ args.code = opts.code;
43595
+ if (!opts.yes) {
43596
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
43597
+ if (!confirmed) {
43598
+ process.stdout.write("Aborted.\n");
43599
+ return;
43600
+ }
43601
+ }
42812
43602
  await ctx.execute({
42813
- method: "GET",
42814
- path: "/v1/exports/{exportId}",
43603
+ method: "DELETE",
43604
+ path: "/v1/features/{code}",
42815
43605
  args,
42816
43606
  queryParamKeys: []
42817
43607
  });
42818
43608
  });
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", `
43609
+ resource.command("unarchive").description(`Unarchive a feature definition.`).requiredOption("--code <value>", `code parameter`).addHelpText("after", `
42820
43610
  Examples:
42821
- hyperline exports download --export-id <exportId>`).action(async (opts) => {
43611
+ hyperline features unarchive --code <code>
43612
+ hyperline features unarchive --code <code> --output json`).action(async (opts) => {
42822
43613
  const ctx = resource.parent?.opts()._ctx;
42823
43614
  if (!ctx) {
42824
43615
  process.stderr.write("Error: Not authenticated\n");
42825
43616
  process.exit(1);
42826
43617
  }
42827
43618
  const args = {};
42828
- if (opts.exportId !== void 0)
42829
- args.exportId = opts.exportId;
43619
+ if (opts.code !== void 0)
43620
+ args.code = opts.code;
42830
43621
  await ctx.execute({
42831
- method: "GET",
42832
- path: "/v2/exports/{exportId}/download",
43622
+ method: "PUT",
43623
+ path: "/v1/features/{code}/unarchive",
42833
43624
  args,
42834
43625
  queryParamKeys: []
42835
43626
  });
@@ -42857,7 +43648,7 @@ Examples:
42857
43648
  queryParamKeys: []
42858
43649
  });
42859
43650
  });
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", `
43651
+ 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
43652
  Examples:
42862
43653
  hyperline files list
42863
43654
  hyperline files list --take <take> --name <name>`).action(async (opts) => {
@@ -42871,10 +43662,6 @@ Examples:
42871
43662
  args.name = opts.name;
42872
43663
  if (opts["name.not"] !== void 0)
42873
43664
  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
43665
  if (opts["name.equals"] !== void 0)
42879
43666
  args.name__equals = opts["name.equals"];
42880
43667
  if (opts["name.contains"] !== void 0)
@@ -42887,10 +43674,6 @@ Examples:
42887
43674
  args.customer_id = opts.customerId;
42888
43675
  if (opts["customerId.not"] !== void 0)
42889
43676
  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
43677
  if (opts["customerId.equals"] !== void 0)
42895
43678
  args.customer_id__equals = opts["customerId.equals"];
42896
43679
  if (opts["customerId.contains"] !== void 0)
@@ -42899,6 +43682,10 @@ Examples:
42899
43682
  args.customer_id__startsWith = opts["customerId.startsWith"];
42900
43683
  if (opts["customerId.endWith"] !== void 0)
42901
43684
  args.customer_id__endWith = opts["customerId.endWith"];
43685
+ if (opts["customerId.isNull"] !== void 0)
43686
+ args.customer_id__isNull = opts["customerId.isNull"];
43687
+ if (opts["customerId.isNotNull"] !== void 0)
43688
+ args.customer_id__isNotNull = opts["customerId.isNotNull"];
42902
43689
  if (opts.take !== void 0)
42903
43690
  args.take = Number(opts.take);
42904
43691
  if (opts.skip !== void 0)
@@ -42912,27 +43699,25 @@ Examples:
42912
43699
  "skip",
42913
43700
  "name",
42914
43701
  "name__not",
42915
- "name__isNull",
42916
- "name__isNotNull",
42917
43702
  "name__equals",
42918
43703
  "name__contains",
42919
43704
  "name__startsWith",
42920
43705
  "name__endWith",
42921
43706
  "customer_id",
42922
43707
  "customer_id__not",
42923
- "customer_id__isNull",
42924
- "customer_id__isNotNull",
42925
43708
  "customer_id__equals",
42926
43709
  "customer_id__contains",
42927
43710
  "customer_id__startsWith",
42928
- "customer_id__endWith"
43711
+ "customer_id__endWith",
43712
+ "customer_id__isNull",
43713
+ "customer_id__isNotNull"
42929
43714
  ]
42930
43715
  });
42931
43716
  });
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", `
43717
+ 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
43718
  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) => {
43719
+ hyperline files create --name <name> --customer-id <customer_id> --file <path>
43720
+ hyperline files create --name <name> --customer-id <customer_id> --file <path> --output json`).action(async (opts) => {
42936
43721
  const ctx = resource.parent?.opts()._ctx;
42937
43722
  if (!ctx) {
42938
43723
  process.stderr.write("Error: Not authenticated\n");
@@ -42943,11 +43728,15 @@ Examples:
42943
43728
  args.name = opts.name;
42944
43729
  if (opts.customerId !== void 0)
42945
43730
  args.customer_id = opts.customerId;
43731
+ const files = {};
43732
+ if (opts.file !== void 0)
43733
+ files.file = [opts.file].flat();
42946
43734
  await ctx.execute({
42947
43735
  method: "POST",
42948
43736
  path: "/v1/files",
42949
43737
  args,
42950
- queryParamKeys: []
43738
+ queryParamKeys: [],
43739
+ files
42951
43740
  });
42952
43741
  });
42953
43742
  resource.command("delete").description(`Permanently delete a file by ID.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
@@ -42981,7 +43770,7 @@ Examples:
42981
43770
  // build/commands/generated/invoices.js
42982
43771
  function registerInvoicesCommands(parent) {
42983
43772
  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", `
43773
+ 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
43774
  Examples:
42986
43775
  hyperline invoices list
42987
43776
  hyperline invoices list --limit <limit> --cursor <cursor>`).action(async (opts) => {
@@ -43011,10 +43800,6 @@ Examples:
43011
43800
  args.customer_id = opts.customerId;
43012
43801
  if (opts["customerId.not"] !== void 0)
43013
43802
  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
43803
  if (opts["customerId.equals"] !== void 0)
43019
43804
  args.customer_id__equals = opts["customerId.equals"];
43020
43805
  if (opts["customerId.contains"] !== void 0)
@@ -43029,10 +43814,6 @@ Examples:
43029
43814
  args.subscription_id = opts.subscriptionId;
43030
43815
  if (opts["subscriptionId.not"] !== void 0)
43031
43816
  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
43817
  if (opts["subscriptionId.equals"] !== void 0)
43037
43818
  args.subscription_id__equals = opts["subscriptionId.equals"];
43038
43819
  if (opts["subscriptionId.contains"] !== void 0)
@@ -43041,14 +43822,14 @@ Examples:
43041
43822
  args.subscription_id__startsWith = opts["subscriptionId.startsWith"];
43042
43823
  if (opts["subscriptionId.endWith"] !== void 0)
43043
43824
  args.subscription_id__endWith = opts["subscriptionId.endWith"];
43825
+ if (opts["subscriptionId.isNull"] !== void 0)
43826
+ args.subscription_id__isNull = opts["subscriptionId.isNull"];
43827
+ if (opts["subscriptionId.isNotNull"] !== void 0)
43828
+ args.subscription_id__isNotNull = opts["subscriptionId.isNotNull"];
43044
43829
  if (opts.invoicingEntityId !== void 0)
43045
43830
  args.invoicing_entity_id = opts.invoicingEntityId;
43046
43831
  if (opts["invoicingEntityId.not"] !== void 0)
43047
43832
  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
43833
  if (opts["invoicingEntityId.equals"] !== void 0)
43053
43834
  args.invoicing_entity_id__equals = opts["invoicingEntityId.equals"];
43054
43835
  if (opts["invoicingEntityId.contains"] !== void 0)
@@ -43061,10 +43842,6 @@ Examples:
43061
43842
  args.invoice_number = opts.invoiceNumber;
43062
43843
  if (opts["invoiceNumber.not"] !== void 0)
43063
43844
  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
43845
  if (opts["invoiceNumber.equals"] !== void 0)
43069
43846
  args.invoice_number__equals = opts["invoiceNumber.equals"];
43070
43847
  if (opts["invoiceNumber.contains"] !== void 0)
@@ -43077,10 +43854,6 @@ Examples:
43077
43854
  args.original_invoice_id = opts.originalInvoiceId;
43078
43855
  if (opts["originalInvoiceId.not"] !== void 0)
43079
43856
  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
43857
  if (opts["originalInvoiceId.equals"] !== void 0)
43085
43858
  args.original_invoice_id__equals = opts["originalInvoiceId.equals"];
43086
43859
  if (opts["originalInvoiceId.contains"] !== void 0)
@@ -43089,14 +43862,14 @@ Examples:
43089
43862
  args.original_invoice_id__startsWith = opts["originalInvoiceId.startsWith"];
43090
43863
  if (opts["originalInvoiceId.endWith"] !== void 0)
43091
43864
  args.original_invoice_id__endWith = opts["originalInvoiceId.endWith"];
43865
+ if (opts["originalInvoiceId.isNull"] !== void 0)
43866
+ args.original_invoice_id__isNull = opts["originalInvoiceId.isNull"];
43867
+ if (opts["originalInvoiceId.isNotNull"] !== void 0)
43868
+ args.original_invoice_id__isNotNull = opts["originalInvoiceId.isNotNull"];
43092
43869
  if (opts.originalInvoiceNumber !== void 0)
43093
43870
  args.original_invoice_number = opts.originalInvoiceNumber;
43094
43871
  if (opts["originalInvoiceNumber.not"] !== void 0)
43095
43872
  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
43873
  if (opts["originalInvoiceNumber.equals"] !== void 0)
43101
43874
  args.original_invoice_number__equals = opts["originalInvoiceNumber.equals"];
43102
43875
  if (opts["originalInvoiceNumber.contains"] !== void 0)
@@ -43105,16 +43878,16 @@ Examples:
43105
43878
  args.original_invoice_number__startsWith = opts["originalInvoiceNumber.startsWith"];
43106
43879
  if (opts["originalInvoiceNumber.endWith"] !== void 0)
43107
43880
  args.original_invoice_number__endWith = opts["originalInvoiceNumber.endWith"];
43881
+ if (opts["originalInvoiceNumber.isNull"] !== void 0)
43882
+ args.original_invoice_number__isNull = opts["originalInvoiceNumber.isNull"];
43883
+ if (opts["originalInvoiceNumber.isNotNull"] !== void 0)
43884
+ args.original_invoice_number__isNotNull = opts["originalInvoiceNumber.isNotNull"];
43108
43885
  if (opts.lineItemId !== void 0)
43109
43886
  args.line_item_id = opts.lineItemId;
43110
43887
  if (opts.periodStart !== void 0)
43111
43888
  args.period_start = opts.periodStart;
43112
43889
  if (opts["periodStart.not"] !== void 0)
43113
43890
  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
43891
  if (opts["periodStart.equals"] !== void 0)
43119
43892
  args.period_start__equals = opts["periodStart.equals"];
43120
43893
  if (opts["periodStart.lt"] !== void 0)
@@ -43125,14 +43898,14 @@ Examples:
43125
43898
  args.period_start__gt = opts["periodStart.gt"];
43126
43899
  if (opts["periodStart.gte"] !== void 0)
43127
43900
  args.period_start__gte = opts["periodStart.gte"];
43901
+ if (opts["periodStart.isNull"] !== void 0)
43902
+ args.period_start__isNull = opts["periodStart.isNull"];
43903
+ if (opts["periodStart.isNotNull"] !== void 0)
43904
+ args.period_start__isNotNull = opts["periodStart.isNotNull"];
43128
43905
  if (opts.periodEnd !== void 0)
43129
43906
  args.period_end = opts.periodEnd;
43130
43907
  if (opts["periodEnd.not"] !== void 0)
43131
43908
  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
43909
  if (opts["periodEnd.equals"] !== void 0)
43137
43910
  args.period_end__equals = opts["periodEnd.equals"];
43138
43911
  if (opts["periodEnd.lt"] !== void 0)
@@ -43143,14 +43916,14 @@ Examples:
43143
43916
  args.period_end__gt = opts["periodEnd.gt"];
43144
43917
  if (opts["periodEnd.gte"] !== void 0)
43145
43918
  args.period_end__gte = opts["periodEnd.gte"];
43919
+ if (opts["periodEnd.isNull"] !== void 0)
43920
+ args.period_end__isNull = opts["periodEnd.isNull"];
43921
+ if (opts["periodEnd.isNotNull"] !== void 0)
43922
+ args.period_end__isNotNull = opts["periodEnd.isNotNull"];
43146
43923
  if (opts.issuedAt !== void 0)
43147
43924
  args.issued_at = opts.issuedAt;
43148
43925
  if (opts["issuedAt.not"] !== void 0)
43149
43926
  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
43927
  if (opts["issuedAt.equals"] !== void 0)
43155
43928
  args.issued_at__equals = opts["issuedAt.equals"];
43156
43929
  if (opts["issuedAt.lt"] !== void 0)
@@ -43165,10 +43938,6 @@ Examples:
43165
43938
  args.due_at = opts.dueAt;
43166
43939
  if (opts["dueAt.not"] !== void 0)
43167
43940
  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
43941
  if (opts["dueAt.equals"] !== void 0)
43173
43942
  args.due_at__equals = opts["dueAt.equals"];
43174
43943
  if (opts["dueAt.lt"] !== void 0)
@@ -43183,10 +43952,6 @@ Examples:
43183
43952
  args.updated_at = opts.updatedAt;
43184
43953
  if (opts["updatedAt.not"] !== void 0)
43185
43954
  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
43955
  if (opts["updatedAt.equals"] !== void 0)
43191
43956
  args.updated_at__equals = opts["updatedAt.equals"];
43192
43957
  if (opts["updatedAt.lt"] !== void 0)
@@ -43215,8 +43980,6 @@ Examples:
43215
43980
  "status__in",
43216
43981
  "customer_id",
43217
43982
  "customer_id__not",
43218
- "customer_id__isNull",
43219
- "customer_id__isNotNull",
43220
43983
  "customer_id__equals",
43221
43984
  "customer_id__contains",
43222
43985
  "customer_id__startsWith",
@@ -43224,67 +43987,61 @@ Examples:
43224
43987
  "customer_external_id",
43225
43988
  "subscription_id",
43226
43989
  "subscription_id__not",
43227
- "subscription_id__isNull",
43228
- "subscription_id__isNotNull",
43229
43990
  "subscription_id__equals",
43230
43991
  "subscription_id__contains",
43231
43992
  "subscription_id__startsWith",
43232
43993
  "subscription_id__endWith",
43994
+ "subscription_id__isNull",
43995
+ "subscription_id__isNotNull",
43233
43996
  "invoicing_entity_id",
43234
43997
  "invoicing_entity_id__not",
43235
- "invoicing_entity_id__isNull",
43236
- "invoicing_entity_id__isNotNull",
43237
43998
  "invoicing_entity_id__equals",
43238
43999
  "invoicing_entity_id__contains",
43239
44000
  "invoicing_entity_id__startsWith",
43240
44001
  "invoicing_entity_id__endWith",
43241
44002
  "invoice_number",
43242
44003
  "invoice_number__not",
43243
- "invoice_number__isNull",
43244
- "invoice_number__isNotNull",
43245
44004
  "invoice_number__equals",
43246
44005
  "invoice_number__contains",
43247
44006
  "invoice_number__startsWith",
43248
44007
  "invoice_number__endWith",
43249
44008
  "original_invoice_id",
43250
44009
  "original_invoice_id__not",
43251
- "original_invoice_id__isNull",
43252
- "original_invoice_id__isNotNull",
43253
44010
  "original_invoice_id__equals",
43254
44011
  "original_invoice_id__contains",
43255
44012
  "original_invoice_id__startsWith",
43256
44013
  "original_invoice_id__endWith",
44014
+ "original_invoice_id__isNull",
44015
+ "original_invoice_id__isNotNull",
43257
44016
  "original_invoice_number",
43258
44017
  "original_invoice_number__not",
43259
- "original_invoice_number__isNull",
43260
- "original_invoice_number__isNotNull",
43261
44018
  "original_invoice_number__equals",
43262
44019
  "original_invoice_number__contains",
43263
44020
  "original_invoice_number__startsWith",
43264
44021
  "original_invoice_number__endWith",
44022
+ "original_invoice_number__isNull",
44023
+ "original_invoice_number__isNotNull",
43265
44024
  "line_item_id",
43266
44025
  "period_start",
43267
44026
  "period_start__not",
43268
- "period_start__isNull",
43269
- "period_start__isNotNull",
43270
44027
  "period_start__equals",
43271
44028
  "period_start__lt",
43272
44029
  "period_start__lte",
43273
44030
  "period_start__gt",
43274
44031
  "period_start__gte",
44032
+ "period_start__isNull",
44033
+ "period_start__isNotNull",
43275
44034
  "period_end",
43276
44035
  "period_end__not",
43277
- "period_end__isNull",
43278
- "period_end__isNotNull",
43279
44036
  "period_end__equals",
43280
44037
  "period_end__lt",
43281
44038
  "period_end__lte",
43282
44039
  "period_end__gt",
43283
44040
  "period_end__gte",
44041
+ "period_end__isNull",
44042
+ "period_end__isNotNull",
43284
44043
  "issued_at",
43285
44044
  "issued_at__not",
43286
- "issued_at__isNull",
43287
- "issued_at__isNotNull",
43288
44045
  "issued_at__equals",
43289
44046
  "issued_at__lt",
43290
44047
  "issued_at__lte",
@@ -43292,8 +44049,6 @@ Examples:
43292
44049
  "issued_at__gte",
43293
44050
  "due_at",
43294
44051
  "due_at__not",
43295
- "due_at__isNull",
43296
- "due_at__isNotNull",
43297
44052
  "due_at__equals",
43298
44053
  "due_at__lt",
43299
44054
  "due_at__lte",
@@ -43301,8 +44056,6 @@ Examples:
43301
44056
  "due_at__gte",
43302
44057
  "updated_at",
43303
44058
  "updated_at__not",
43304
- "updated_at__isNull",
43305
- "updated_at__isNotNull",
43306
44059
  "updated_at__equals",
43307
44060
  "updated_at__lt",
43308
44061
  "updated_at__lte",
@@ -43536,6 +44289,36 @@ Examples:
43536
44289
  queryParamKeys: []
43537
44290
  });
43538
44291
  });
44292
+ 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\`.
44293
+
44294
+ - \`invoice_ready\`: The to-pay invoice email (for \`to_pay\`, \`partially_paid\`, \`late\` invoices).
44295
+ - \`invoice_settled\`: The paid-invoice email (for \`paid\` invoices).
44296
+ - \`invoice_errored\`: The failed-payment email (for \`error\` invoices with a payment method).
44297
+ - \`credit_note_ready\`: The issued-credit-note email (for \`to_pay\`, \`partially_paid\` refunds).
44298
+ - \`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", `
44299
+ Examples:
44300
+ hyperline invoices send-invoice-emails --email-type <email_type> --ids <ids>
44301
+ hyperline invoices send-invoice-emails --email-type <email_type> --ids <ids> --batch-id <batch_id>
44302
+ hyperline invoices send-invoice-emails --email-type <email_type> --ids <ids> --output json`).action(async (opts) => {
44303
+ const ctx = resource.parent?.opts()._ctx;
44304
+ if (!ctx) {
44305
+ process.stderr.write("Error: Not authenticated\n");
44306
+ process.exit(1);
44307
+ }
44308
+ const args = {};
44309
+ if (opts.batchId !== void 0)
44310
+ args.batch_id = opts.batchId;
44311
+ if (opts.emailType !== void 0)
44312
+ args.email_type = opts.emailType;
44313
+ if (opts.ids !== void 0)
44314
+ args.ids = JSON.parse(opts.ids);
44315
+ await ctx.execute({
44316
+ method: "POST",
44317
+ path: "/v1/invoices/send-email",
44318
+ args,
44319
+ queryParamKeys: []
44320
+ });
44321
+ });
43539
44322
  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
44323
  Examples:
43541
44324
  hyperline invoices mark-invoice-as-uncollectible --id <id>
@@ -43668,10 +44451,10 @@ Examples:
43668
44451
  queryParamKeys: []
43669
44452
  });
43670
44453
  });
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", `
44454
+ 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
44455
  Examples:
43673
- hyperline invoices upload-pdf-to --id <id>
43674
- hyperline invoices upload-pdf-to --id <id> --output json`).action(async (opts) => {
44456
+ hyperline invoices upload-pdf-to --id <id> --file <path>
44457
+ hyperline invoices upload-pdf-to --id <id> --file <path> --output json`).action(async (opts) => {
43675
44458
  const ctx = resource.parent?.opts()._ctx;
43676
44459
  if (!ctx) {
43677
44460
  process.stderr.write("Error: Not authenticated\n");
@@ -43680,11 +44463,15 @@ Examples:
43680
44463
  const args = {};
43681
44464
  if (opts.id !== void 0)
43682
44465
  args.id = opts.id;
44466
+ const files = {};
44467
+ if (opts.file !== void 0)
44468
+ files.file = [opts.file].flat();
43683
44469
  await ctx.execute({
43684
44470
  method: "POST",
43685
44471
  path: "/v1/invoices/{id}/upload",
43686
44472
  args,
43687
- queryParamKeys: []
44473
+ queryParamKeys: [],
44474
+ files
43688
44475
  });
43689
44476
  });
43690
44477
  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 +44610,13 @@ Examples:
43823
44610
  queryParamKeys: []
43824
44611
  });
43825
44612
  });
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", `
44613
+ 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:
44614
+ - United States: state, see [ISO 3166-2:US](https://en.wikipedia.org/wiki/ISO_3166-2:US)
44615
+ - Canada: province or territory, see [ISO 3166-2:CA](https://en.wikipedia.org/wiki/ISO_3166-2:CA)
44616
+ - Italy: province, see [ISO 3166-2:IT](https://en.wikipedia.org/wiki/ISO_3166-2:IT)
44617
+ - Brazil: state, see [ISO 3166-2:BR](https://en.wikipedia.org/wiki/ISO_3166-2:BR)
44618
+
44619
+ 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
44620
  Examples:
43828
44621
  hyperline invoicing-entities create-invoicing-entity --name <name> --country <country> --currency <currency> --accounting-currency <accounting_currency>
43829
44622
  hyperline invoicing-entities create-invoicing-entity --name <name> --country <country> --currency <currency> --accounting-currency <accounting_currency> --is-default --trade-name <trade_name>
@@ -43915,7 +44708,13 @@ Examples:
43915
44708
  queryParamKeys: []
43916
44709
  });
43917
44710
  });
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", `
44711
+ 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:
44712
+ - United States: state, see [ISO 3166-2:US](https://en.wikipedia.org/wiki/ISO_3166-2:US)
44713
+ - Canada: province or territory, see [ISO 3166-2:CA](https://en.wikipedia.org/wiki/ISO_3166-2:CA)
44714
+ - Italy: province, see [ISO 3166-2:IT](https://en.wikipedia.org/wiki/ISO_3166-2:IT)
44715
+ - Brazil: state, see [ISO 3166-2:BR](https://en.wikipedia.org/wiki/ISO_3166-2:BR)
44716
+
44717
+ 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
44718
  Examples:
43920
44719
  hyperline invoicing-entities update-invoicing-entity --id <id>
43921
44720
  hyperline invoicing-entities update-invoicing-entity --id <id> --name <name> --registration-number <registration_number>
@@ -44030,7 +44829,7 @@ Examples:
44030
44829
  // build/commands/generated/organisations.js
44031
44830
  function registerOrganisationsCommands(parent) {
44032
44831
  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", `
44832
+ 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
44833
  Examples:
44035
44834
  hyperline organisations list
44036
44835
  hyperline organisations list --limit <limit> --cursor <cursor>`).action(async (opts) => {
@@ -44052,10 +44851,6 @@ Examples:
44052
44851
  args.created_at = opts.createdAt;
44053
44852
  if (opts["createdAt.not"] !== void 0)
44054
44853
  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
44854
  if (opts["createdAt.equals"] !== void 0)
44060
44855
  args.created_at__equals = opts["createdAt.equals"];
44061
44856
  if (opts["createdAt.lt"] !== void 0)
@@ -44070,10 +44865,6 @@ Examples:
44070
44865
  args.updated_at = opts.updatedAt;
44071
44866
  if (opts["updatedAt.not"] !== void 0)
44072
44867
  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
44868
  if (opts["updatedAt.equals"] !== void 0)
44078
44869
  args.updated_at__equals = opts["updatedAt.equals"];
44079
44870
  if (opts["updatedAt.lt"] !== void 0)
@@ -44098,8 +44889,6 @@ Examples:
44098
44889
  "sort",
44099
44890
  "created_at",
44100
44891
  "created_at__not",
44101
- "created_at__isNull",
44102
- "created_at__isNotNull",
44103
44892
  "created_at__equals",
44104
44893
  "created_at__lt",
44105
44894
  "created_at__lte",
@@ -44107,8 +44896,6 @@ Examples:
44107
44896
  "created_at__gte",
44108
44897
  "updated_at",
44109
44898
  "updated_at__not",
44110
- "updated_at__isNull",
44111
- "updated_at__isNotNull",
44112
44899
  "updated_at__equals",
44113
44900
  "updated_at__lt",
44114
44901
  "updated_at__lte",
@@ -44174,7 +44961,7 @@ function registerPaymentsCommands(parent) {
44174
44961
  Payment type.
44175
44962
 
44176
44963
  - \`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>", `
44964
+ `).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
44965
  Charging method.
44179
44966
 
44180
44967
  - \`immediately\`: Customer's payment method will be charged directly to pay the invoice.
@@ -44206,6 +44993,8 @@ Examples:
44206
44993
  args.payment_method_id = opts.paymentMethodId;
44207
44994
  if (opts.products !== void 0)
44208
44995
  args.products = JSON.parse(opts.products);
44996
+ if (opts.coupons !== void 0)
44997
+ args.coupons = JSON.parse(opts.coupons);
44209
44998
  if (opts.availablePaymentMethods !== void 0)
44210
44999
  args.available_payment_methods = JSON.parse(opts.availablePaymentMethods);
44211
45000
  if (opts.checkoutSession !== void 0)
@@ -44222,7 +45011,7 @@ Examples:
44222
45011
  // build/commands/generated/price-configurations.js
44223
45012
  function registerPrice_ConfigurationsCommands(parent) {
44224
45013
  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", `
45014
+ 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
45015
  Examples:
44227
45016
  hyperline price-configurations list
44228
45017
  hyperline price-configurations list --take <take> --product-id <product_id>`).action(async (opts) => {
@@ -44236,10 +45025,6 @@ Examples:
44236
45025
  args.product_id = opts.productId;
44237
45026
  if (opts["productId.not"] !== void 0)
44238
45027
  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
45028
  if (opts["productId.equals"] !== void 0)
44244
45029
  args.product_id__equals = opts["productId.equals"];
44245
45030
  if (opts["productId.contains"] !== void 0)
@@ -44252,10 +45037,6 @@ Examples:
44252
45037
  args.price_book_id = opts.priceBookId;
44253
45038
  if (opts["priceBookId.not"] !== void 0)
44254
45039
  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
45040
  if (opts["priceBookId.equals"] !== void 0)
44260
45041
  args.price_book_id__equals = opts["priceBookId.equals"];
44261
45042
  if (opts["priceBookId.contains"] !== void 0)
@@ -44264,6 +45045,10 @@ Examples:
44264
45045
  args.price_book_id__startsWith = opts["priceBookId.startsWith"];
44265
45046
  if (opts["priceBookId.endWith"] !== void 0)
44266
45047
  args.price_book_id__endWith = opts["priceBookId.endWith"];
45048
+ if (opts["priceBookId.isNull"] !== void 0)
45049
+ args.price_book_id__isNull = opts["priceBookId.isNull"];
45050
+ if (opts["priceBookId.isNotNull"] !== void 0)
45051
+ args.price_book_id__isNotNull = opts["priceBookId.isNotNull"];
44267
45052
  if (opts.take !== void 0)
44268
45053
  args.take = Number(opts.take);
44269
45054
  if (opts.skip !== void 0)
@@ -44277,20 +45062,18 @@ Examples:
44277
45062
  "skip",
44278
45063
  "product_id",
44279
45064
  "product_id__not",
44280
- "product_id__isNull",
44281
- "product_id__isNotNull",
44282
45065
  "product_id__equals",
44283
45066
  "product_id__contains",
44284
45067
  "product_id__startsWith",
44285
45068
  "product_id__endWith",
44286
45069
  "price_book_id",
44287
45070
  "price_book_id__not",
44288
- "price_book_id__isNull",
44289
- "price_book_id__isNotNull",
44290
45071
  "price_book_id__equals",
44291
45072
  "price_book_id__contains",
44292
45073
  "price_book_id__startsWith",
44293
- "price_book_id__endWith"
45074
+ "price_book_id__endWith",
45075
+ "price_book_id__isNull",
45076
+ "price_book_id__isNotNull"
44294
45077
  ]
44295
45078
  });
44296
45079
  });
@@ -44416,7 +45199,7 @@ Examples:
44416
45199
  // build/commands/generated/products.js
44417
45200
  function registerProductsCommands(parent) {
44418
45201
  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", `
45202
+ 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
45203
  Examples:
44421
45204
  hyperline products list
44422
45205
  hyperline products list --take <take> --id <id>`).action(async (opts) => {
@@ -44430,10 +45213,6 @@ Examples:
44430
45213
  args.id = opts.id;
44431
45214
  if (opts["id.not"] !== void 0)
44432
45215
  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
45216
  if (opts["id.equals"] !== void 0)
44438
45217
  args.id__equals = opts["id.equals"];
44439
45218
  if (opts["id.contains"] !== void 0)
@@ -44450,10 +45229,6 @@ Examples:
44450
45229
  args.name = opts.name;
44451
45230
  if (opts["name.not"] !== void 0)
44452
45231
  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
45232
  if (opts["name.equals"] !== void 0)
44458
45233
  args.name__equals = opts["name.equals"];
44459
45234
  if (opts["name.contains"] !== void 0)
@@ -44466,10 +45241,6 @@ Examples:
44466
45241
  args.description = opts.description;
44467
45242
  if (opts["description.not"] !== void 0)
44468
45243
  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
45244
  if (opts["description.equals"] !== void 0)
44474
45245
  args.description__equals = opts["description.equals"];
44475
45246
  if (opts["description.contains"] !== void 0)
@@ -44478,14 +45249,14 @@ Examples:
44478
45249
  args.description__startsWith = opts["description.startsWith"];
44479
45250
  if (opts["description.endWith"] !== void 0)
44480
45251
  args.description__endWith = opts["description.endWith"];
45252
+ if (opts["description.isNull"] !== void 0)
45253
+ args.description__isNull = opts["description.isNull"];
45254
+ if (opts["description.isNotNull"] !== void 0)
45255
+ args.description__isNotNull = opts["description.isNotNull"];
44481
45256
  if (opts.type !== void 0)
44482
45257
  args.type = opts.type;
44483
45258
  if (opts["type.not"] !== void 0)
44484
45259
  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
45260
  if (opts["type.equals"] !== void 0)
44490
45261
  args.type__equals = opts["type.equals"];
44491
45262
  if (opts["type.contains"] !== void 0)
@@ -44496,6 +45267,8 @@ Examples:
44496
45267
  args.type__endWith = opts["type.endWith"];
44497
45268
  if (opts.priceBookId !== void 0)
44498
45269
  args.price_book_id = opts.priceBookId;
45270
+ if (opts.customProperties !== void 0)
45271
+ args.custom_properties = opts.customProperties;
44499
45272
  if (opts.take !== void 0)
44500
45273
  args.take = Number(opts.take);
44501
45274
  if (opts.skip !== void 0)
@@ -44509,8 +45282,6 @@ Examples:
44509
45282
  "skip",
44510
45283
  "id",
44511
45284
  "id__not",
44512
- "id__isNull",
44513
- "id__isNotNull",
44514
45285
  "id__equals",
44515
45286
  "id__contains",
44516
45287
  "id__startsWith",
@@ -44519,33 +45290,30 @@ Examples:
44519
45290
  "status__in",
44520
45291
  "name",
44521
45292
  "name__not",
44522
- "name__isNull",
44523
- "name__isNotNull",
44524
45293
  "name__equals",
44525
45294
  "name__contains",
44526
45295
  "name__startsWith",
44527
45296
  "name__endWith",
44528
45297
  "description",
44529
45298
  "description__not",
44530
- "description__isNull",
44531
- "description__isNotNull",
44532
45299
  "description__equals",
44533
45300
  "description__contains",
44534
45301
  "description__startsWith",
44535
45302
  "description__endWith",
45303
+ "description__isNull",
45304
+ "description__isNotNull",
44536
45305
  "type",
44537
45306
  "type__not",
44538
- "type__isNull",
44539
- "type__isNotNull",
44540
45307
  "type__equals",
44541
45308
  "type__contains",
44542
45309
  "type__startsWith",
44543
45310
  "type__endWith",
44544
- "price_book_id"
45311
+ "price_book_id",
45312
+ "custom_properties"
44545
45313
  ]
44546
45314
  });
44547
45315
  });
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>", `
45316
+ 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
45317
  How the periodic credit allowance is granted for partial billing periods.
44550
45318
 
44551
45319
  - \`prorated\` (default): the granted credits are prorated to the elapsed period.
@@ -44633,11 +45401,116 @@ Examples:
44633
45401
  queryParamKeys: ["price_book_id"]
44634
45402
  });
44635
45403
  });
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", `
45404
+ 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", `
45405
+ Examples:
45406
+ hyperline products update --id <id> --name <name>
45407
+ hyperline products update --id <id> --name <name> --description <description> --public-description <public_description>
45408
+ hyperline products update --id <id> --name <name> --output json`).action(async (opts) => {
45409
+ const ctx = resource.parent?.opts()._ctx;
45410
+ if (!ctx) {
45411
+ process.stderr.write("Error: Not authenticated\n");
45412
+ process.exit(1);
45413
+ }
45414
+ const args = {};
45415
+ if (opts.id !== void 0)
45416
+ args.id = opts.id;
45417
+ if (opts.name !== void 0)
45418
+ args.name = opts.name;
45419
+ if (opts.description !== void 0)
45420
+ args.description = opts.description;
45421
+ if (opts.publicDescription !== void 0)
45422
+ args.public_description = opts.publicDescription;
45423
+ if (opts.isAvailableOnDemand !== void 0)
45424
+ args.is_available_on_demand = true;
45425
+ if (opts.isAvailableOnSubscription !== void 0)
45426
+ args.is_available_on_subscription = true;
45427
+ if (opts.translations !== void 0)
45428
+ args.translations = JSON.parse(opts.translations);
45429
+ if (opts.properties !== void 0)
45430
+ args.properties = JSON.parse(opts.properties);
45431
+ if (opts.customProperties !== void 0)
45432
+ args.custom_properties = JSON.parse(opts.customProperties);
45433
+ if (opts.accounting !== void 0)
45434
+ args.accounting = JSON.parse(opts.accounting);
45435
+ await ctx.execute({
45436
+ method: "PUT",
45437
+ path: "/v1/products/{id}",
45438
+ args,
45439
+ queryParamKeys: []
45440
+ });
45441
+ });
45442
+ 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", `
45443
+ Examples:
45444
+ hyperline products archive --id <id>
45445
+ hyperline products archive --id <id> --output json`).action(async (opts) => {
45446
+ const ctx = resource.parent?.opts()._ctx;
45447
+ if (!ctx) {
45448
+ process.stderr.write("Error: Not authenticated\n");
45449
+ process.exit(1);
45450
+ }
45451
+ const args = {};
45452
+ if (opts.id !== void 0)
45453
+ args.id = opts.id;
45454
+ await ctx.execute({
45455
+ method: "PUT",
45456
+ path: "/v1/products/{id}/archive",
45457
+ args,
45458
+ queryParamKeys: []
45459
+ });
45460
+ });
45461
+ 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", `
45462
+ Examples:
45463
+ hyperline products delete --id <id>
45464
+ hyperline products delete --id <id> --output json`).action(async (opts) => {
45465
+ const ctx = resource.parent?.opts()._ctx;
45466
+ if (!ctx) {
45467
+ process.stderr.write("Error: Not authenticated\n");
45468
+ process.exit(1);
45469
+ }
45470
+ const args = {};
45471
+ if (opts.id !== void 0)
45472
+ args.id = opts.id;
45473
+ if (!opts.yes) {
45474
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
45475
+ if (!confirmed) {
45476
+ process.stdout.write("Aborted.\n");
45477
+ return;
45478
+ }
45479
+ }
45480
+ await ctx.execute({
45481
+ method: "DELETE",
45482
+ path: "/v1/products/{id}",
45483
+ args,
45484
+ queryParamKeys: []
45485
+ });
45486
+ });
45487
+ resource.command("unarchive").description(`Restore a previously archived product, making it available for new subscriptions again.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
45488
+ Examples:
45489
+ hyperline products unarchive --id <id>
45490
+ hyperline products unarchive --id <id> --output json`).action(async (opts) => {
45491
+ const ctx = resource.parent?.opts()._ctx;
45492
+ if (!ctx) {
45493
+ process.stderr.write("Error: Not authenticated\n");
45494
+ process.exit(1);
45495
+ }
45496
+ const args = {};
45497
+ if (opts.id !== void 0)
45498
+ args.id = opts.id;
45499
+ await ctx.execute({
45500
+ method: "PUT",
45501
+ path: "/v1/products/{id}/unarchive",
45502
+ args,
45503
+ queryParamKeys: []
45504
+ });
45505
+ });
45506
+ }
45507
+
45508
+ // build/commands/generated/products-features.js
45509
+ function registerProducts_FeaturesCommands(parent) {
45510
+ const resource = parent.command("products-features").description("Manage products > features");
45511
+ resource.command("list-product-features").description(`List feature values assigned to a product.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
44637
45512
  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) => {
45513
+ hyperline products-features list-product-features --id <id>`).action(async (opts) => {
44641
45514
  const ctx = resource.parent?.opts()._ctx;
44642
45515
  if (!ctx) {
44643
45516
  process.stderr.write("Error: Not authenticated\n");
@@ -44646,35 +45519,17 @@ Examples:
44646
45519
  const args = {};
44647
45520
  if (opts.id !== void 0)
44648
45521
  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
45522
  await ctx.execute({
44668
- method: "PUT",
44669
- path: "/v1/products/{id}",
45523
+ method: "GET",
45524
+ path: "/v1/products/{id}/features",
44670
45525
  args,
44671
45526
  queryParamKeys: []
44672
45527
  });
44673
45528
  });
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", `
45529
+ 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
45530
  Examples:
44676
- hyperline products archive --id <id>
44677
- hyperline products archive --id <id> --output json`).action(async (opts) => {
45531
+ hyperline products-features set-product-feature --id <id> --code <code> --value
45532
+ hyperline products-features set-product-feature --id <id> --code <code> --value --output json`).action(async (opts) => {
44678
45533
  const ctx = resource.parent?.opts()._ctx;
44679
45534
  if (!ctx) {
44680
45535
  process.stderr.write("Error: Not authenticated\n");
@@ -44683,17 +45538,21 @@ Examples:
44683
45538
  const args = {};
44684
45539
  if (opts.id !== void 0)
44685
45540
  args.id = opts.id;
45541
+ if (opts.code !== void 0)
45542
+ args.code = opts.code;
45543
+ if (opts.value !== void 0)
45544
+ args.value = true;
44686
45545
  await ctx.execute({
44687
45546
  method: "PUT",
44688
- path: "/v1/products/{id}/archive",
45547
+ path: "/v1/products/{id}/features/{code}",
44689
45548
  args,
44690
45549
  queryParamKeys: []
44691
45550
  });
44692
45551
  });
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", `
45552
+ 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
45553
  Examples:
44695
- hyperline products delete --id <id>
44696
- hyperline products delete --id <id> --output json`).action(async (opts) => {
45554
+ hyperline products-features delete-product-feature --id <id> --code <code>
45555
+ hyperline products-features delete-product-feature --id <id> --code <code> --output json`).action(async (opts) => {
44697
45556
  const ctx = resource.parent?.opts()._ctx;
44698
45557
  if (!ctx) {
44699
45558
  process.stderr.write("Error: Not authenticated\n");
@@ -44702,6 +45561,8 @@ Examples:
44702
45561
  const args = {};
44703
45562
  if (opts.id !== void 0)
44704
45563
  args.id = opts.id;
45564
+ if (opts.code !== void 0)
45565
+ args.code = opts.code;
44705
45566
  if (!opts.yes) {
44706
45567
  const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
44707
45568
  if (!confirmed) {
@@ -44711,26 +45572,7 @@ Examples:
44711
45572
  }
44712
45573
  await ctx.execute({
44713
45574
  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",
45575
+ path: "/v1/products/{id}/features/{code}",
44734
45576
  args,
44735
45577
  queryParamKeys: []
44736
45578
  });
@@ -44746,12 +45588,12 @@ Quote status.
44746
45588
  - \`draft\`: The quote is a draft.
44747
45589
  - \`approved\`: The quote is approved and ready to be sent to the customer.
44748
45590
  - \`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.
45591
+ `).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
45592
 
44751
45593
  - \`all\`: Display all pricing tiers.
44752
45594
  - \`matching\`: Only display the tiers used to compute the price based on quantity.
44753
45595
  - \`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", `
45596
+ `).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
45597
  Examples:
44756
45598
  hyperline quotes create --customer-id <customer_id>
44757
45599
  hyperline quotes create --customer-id <customer_id> --status <status> --owner-email <owner_email>
@@ -44816,14 +45658,18 @@ Examples:
44816
45658
  args.subscription = JSON.parse(opts.subscription);
44817
45659
  if (opts.invoice !== void 0)
44818
45660
  args.invoice = JSON.parse(opts.invoice);
45661
+ const files = {};
45662
+ if (opts.attachments !== void 0)
45663
+ files.attachments = [opts.attachments].flat();
44819
45664
  await ctx.execute({
44820
45665
  method: "POST",
44821
45666
  path: "/v1/quotes",
44822
45667
  args,
44823
- queryParamKeys: []
45668
+ queryParamKeys: [],
45669
+ files
44824
45670
  });
44825
45671
  });
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", `
45672
+ 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
45673
  Examples:
44828
45674
  hyperline quotes list
44829
45675
  hyperline quotes list --take <take> --id <id>`).action(async (opts) => {
@@ -44837,10 +45683,6 @@ Examples:
44837
45683
  args.id = opts.id;
44838
45684
  if (opts["id.not"] !== void 0)
44839
45685
  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
45686
  if (opts["id.equals"] !== void 0)
44845
45687
  args.id__equals = opts["id.equals"];
44846
45688
  if (opts["id.contains"] !== void 0)
@@ -44853,10 +45695,6 @@ Examples:
44853
45695
  args.number = opts.number;
44854
45696
  if (opts["number.not"] !== void 0)
44855
45697
  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
45698
  if (opts["number.equals"] !== void 0)
44861
45699
  args.number__equals = opts["number.equals"];
44862
45700
  if (opts["number.contains"] !== void 0)
@@ -44873,10 +45711,6 @@ Examples:
44873
45711
  args.customer_id = opts.customerId;
44874
45712
  if (opts["customerId.not"] !== void 0)
44875
45713
  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
45714
  if (opts["customerId.equals"] !== void 0)
44881
45715
  args.customer_id__equals = opts["customerId.equals"];
44882
45716
  if (opts["customerId.contains"] !== void 0)
@@ -44889,10 +45723,6 @@ Examples:
44889
45723
  args.template_id = opts.templateId;
44890
45724
  if (opts["templateId.not"] !== void 0)
44891
45725
  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
45726
  if (opts["templateId.equals"] !== void 0)
44897
45727
  args.template_id__equals = opts["templateId.equals"];
44898
45728
  if (opts["templateId.contains"] !== void 0)
@@ -44901,14 +45731,14 @@ Examples:
44901
45731
  args.template_id__startsWith = opts["templateId.startsWith"];
44902
45732
  if (opts["templateId.endWith"] !== void 0)
44903
45733
  args.template_id__endWith = opts["templateId.endWith"];
45734
+ if (opts["templateId.isNull"] !== void 0)
45735
+ args.template_id__isNull = opts["templateId.isNull"];
45736
+ if (opts["templateId.isNotNull"] !== void 0)
45737
+ args.template_id__isNotNull = opts["templateId.isNotNull"];
44904
45738
  if (opts.crmOpportunityId !== void 0)
44905
45739
  args.crm_opportunity_id = opts.crmOpportunityId;
44906
45740
  if (opts["crmOpportunityId.not"] !== void 0)
44907
45741
  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
45742
  if (opts["crmOpportunityId.equals"] !== void 0)
44913
45743
  args.crm_opportunity_id__equals = opts["crmOpportunityId.equals"];
44914
45744
  if (opts["crmOpportunityId.contains"] !== void 0)
@@ -44917,16 +45747,16 @@ Examples:
44917
45747
  args.crm_opportunity_id__startsWith = opts["crmOpportunityId.startsWith"];
44918
45748
  if (opts["crmOpportunityId.endWith"] !== void 0)
44919
45749
  args.crm_opportunity_id__endWith = opts["crmOpportunityId.endWith"];
45750
+ if (opts["crmOpportunityId.isNull"] !== void 0)
45751
+ args.crm_opportunity_id__isNull = opts["crmOpportunityId.isNull"];
45752
+ if (opts["crmOpportunityId.isNotNull"] !== void 0)
45753
+ args.crm_opportunity_id__isNotNull = opts["crmOpportunityId.isNotNull"];
44920
45754
  if (opts.type !== void 0)
44921
45755
  args.type = opts.type;
44922
45756
  if (opts.updatedAt !== void 0)
44923
45757
  args.updated_at = opts.updatedAt;
44924
45758
  if (opts["updatedAt.not"] !== void 0)
44925
45759
  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
45760
  if (opts["updatedAt.equals"] !== void 0)
44931
45761
  args.updated_at__equals = opts["updatedAt.equals"];
44932
45762
  if (opts["updatedAt.lt"] !== void 0)
@@ -44950,16 +45780,12 @@ Examples:
44950
45780
  "skip",
44951
45781
  "id",
44952
45782
  "id__not",
44953
- "id__isNull",
44954
- "id__isNotNull",
44955
45783
  "id__equals",
44956
45784
  "id__contains",
44957
45785
  "id__startsWith",
44958
45786
  "id__endWith",
44959
45787
  "number",
44960
45788
  "number__not",
44961
- "number__isNull",
44962
- "number__isNotNull",
44963
45789
  "number__equals",
44964
45790
  "number__contains",
44965
45791
  "number__startsWith",
@@ -44968,33 +45794,29 @@ Examples:
44968
45794
  "status__in",
44969
45795
  "customer_id",
44970
45796
  "customer_id__not",
44971
- "customer_id__isNull",
44972
- "customer_id__isNotNull",
44973
45797
  "customer_id__equals",
44974
45798
  "customer_id__contains",
44975
45799
  "customer_id__startsWith",
44976
45800
  "customer_id__endWith",
44977
45801
  "template_id",
44978
45802
  "template_id__not",
44979
- "template_id__isNull",
44980
- "template_id__isNotNull",
44981
45803
  "template_id__equals",
44982
45804
  "template_id__contains",
44983
45805
  "template_id__startsWith",
44984
45806
  "template_id__endWith",
45807
+ "template_id__isNull",
45808
+ "template_id__isNotNull",
44985
45809
  "crm_opportunity_id",
44986
45810
  "crm_opportunity_id__not",
44987
- "crm_opportunity_id__isNull",
44988
- "crm_opportunity_id__isNotNull",
44989
45811
  "crm_opportunity_id__equals",
44990
45812
  "crm_opportunity_id__contains",
44991
45813
  "crm_opportunity_id__startsWith",
44992
45814
  "crm_opportunity_id__endWith",
45815
+ "crm_opportunity_id__isNull",
45816
+ "crm_opportunity_id__isNotNull",
44993
45817
  "type",
44994
45818
  "updated_at",
44995
45819
  "updated_at__not",
44996
- "updated_at__isNull",
44997
- "updated_at__isNotNull",
44998
45820
  "updated_at__equals",
44999
45821
  "updated_at__lt",
45000
45822
  "updated_at__lte",
@@ -45021,12 +45843,12 @@ Examples:
45021
45843
  queryParamKeys: []
45022
45844
  });
45023
45845
  });
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.
45846
+ 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
45847
 
45026
45848
  - \`all\`: Display all pricing tiers.
45027
45849
  - \`matching\`: Only display the tiers used to compute the price based on quantity.
45028
45850
  - \`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", `
45851
+ `).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
45852
  Examples:
45031
45853
  hyperline quotes update --id <id>
45032
45854
  hyperline quotes update --id <id> --owner-email <owner_email> --catalog-version-id <catalog_version_id>
@@ -45087,11 +45909,15 @@ Examples:
45087
45909
  args.subscription = JSON.parse(opts.subscription);
45088
45910
  if (opts.invoice !== void 0)
45089
45911
  args.invoice = JSON.parse(opts.invoice);
45912
+ const files = {};
45913
+ if (opts.attachments !== void 0)
45914
+ files.attachments = [opts.attachments].flat();
45090
45915
  await ctx.execute({
45091
45916
  method: "PATCH",
45092
45917
  path: "/v1/quotes/{id}",
45093
45918
  args,
45094
- queryParamKeys: []
45919
+ queryParamKeys: [],
45920
+ files
45095
45921
  });
45096
45922
  });
45097
45923
  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 +46070,10 @@ Examples:
45244
46070
  queryParamKeys: []
45245
46071
  });
45246
46072
  });
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", `
46073
+ 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
46074
  Examples:
45249
46075
  hyperline quotes sign --id <id>
46076
+ hyperline quotes sign --id <id> --signed-quote <path>
45250
46077
  hyperline quotes sign --id <id> --output json`).action(async (opts) => {
45251
46078
  const ctx = resource.parent?.opts()._ctx;
45252
46079
  if (!ctx) {
@@ -45256,11 +46083,15 @@ Examples:
45256
46083
  const args = {};
45257
46084
  if (opts.id !== void 0)
45258
46085
  args.id = opts.id;
46086
+ const files = {};
46087
+ if (opts.signedQuote !== void 0)
46088
+ files.signed_quote = [opts.signedQuote].flat();
45259
46089
  await ctx.execute({
45260
46090
  method: "POST",
45261
46091
  path: "/v1/quotes/{id}/sign",
45262
46092
  args,
45263
- queryParamKeys: []
46093
+ queryParamKeys: [],
46094
+ files
45264
46095
  });
45265
46096
  });
45266
46097
  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 +46203,7 @@ Examples:
45372
46203
  // build/commands/generated/quotes-templates.js
45373
46204
  function registerQuotes_TemplatesCommands(parent) {
45374
46205
  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", `
46206
+ 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
46207
  Examples:
45377
46208
  hyperline quotes-templates list-quote-templates
45378
46209
  hyperline quotes-templates list-quote-templates --take <take> --id <id>`).action(async (opts) => {
@@ -45386,10 +46217,6 @@ Examples:
45386
46217
  args.id = opts.id;
45387
46218
  if (opts["id.not"] !== void 0)
45388
46219
  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
46220
  if (opts["id.equals"] !== void 0)
45394
46221
  args.id__equals = opts["id.equals"];
45395
46222
  if (opts["id.contains"] !== void 0)
@@ -45402,10 +46229,6 @@ Examples:
45402
46229
  args.name = opts.name;
45403
46230
  if (opts["name.not"] !== void 0)
45404
46231
  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
46232
  if (opts["name.equals"] !== void 0)
45410
46233
  args.name__equals = opts["name.equals"];
45411
46234
  if (opts["name.contains"] !== void 0)
@@ -45418,10 +46241,6 @@ Examples:
45418
46241
  args.subscription_template_id = opts.subscriptionTemplateId;
45419
46242
  if (opts["subscriptionTemplateId.not"] !== void 0)
45420
46243
  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
46244
  if (opts["subscriptionTemplateId.equals"] !== void 0)
45426
46245
  args.subscription_template_id__equals = opts["subscriptionTemplateId.equals"];
45427
46246
  if (opts["subscriptionTemplateId.contains"] !== void 0)
@@ -45430,6 +46249,10 @@ Examples:
45430
46249
  args.subscription_template_id__startsWith = opts["subscriptionTemplateId.startsWith"];
45431
46250
  if (opts["subscriptionTemplateId.endWith"] !== void 0)
45432
46251
  args.subscription_template_id__endWith = opts["subscriptionTemplateId.endWith"];
46252
+ if (opts["subscriptionTemplateId.isNull"] !== void 0)
46253
+ args.subscription_template_id__isNull = opts["subscriptionTemplateId.isNull"];
46254
+ if (opts["subscriptionTemplateId.isNotNull"] !== void 0)
46255
+ args.subscription_template_id__isNotNull = opts["subscriptionTemplateId.isNotNull"];
45433
46256
  if (opts.search !== void 0)
45434
46257
  args.search = opts.search;
45435
46258
  if (opts.take !== void 0)
@@ -45445,28 +46268,24 @@ Examples:
45445
46268
  "skip",
45446
46269
  "id",
45447
46270
  "id__not",
45448
- "id__isNull",
45449
- "id__isNotNull",
45450
46271
  "id__equals",
45451
46272
  "id__contains",
45452
46273
  "id__startsWith",
45453
46274
  "id__endWith",
45454
46275
  "name",
45455
46276
  "name__not",
45456
- "name__isNull",
45457
- "name__isNotNull",
45458
46277
  "name__equals",
45459
46278
  "name__contains",
45460
46279
  "name__startsWith",
45461
46280
  "name__endWith",
45462
46281
  "subscription_template_id",
45463
46282
  "subscription_template_id__not",
45464
- "subscription_template_id__isNull",
45465
- "subscription_template_id__isNotNull",
45466
46283
  "subscription_template_id__equals",
45467
46284
  "subscription_template_id__contains",
45468
46285
  "subscription_template_id__startsWith",
45469
46286
  "subscription_template_id__endWith",
46287
+ "subscription_template_id__isNull",
46288
+ "subscription_template_id__isNotNull",
45470
46289
  "search"
45471
46290
  ]
45472
46291
  });
@@ -45868,7 +46687,7 @@ Examples:
45868
46687
  queryParamKeys: []
45869
46688
  });
45870
46689
  });
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>", `
46690
+ 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
46691
  Subscription status filter.
45873
46692
 
45874
46693
  - \`active\`, \`pending\`, \`paused\`, \`errored\`, \`cancelled\`, \`draft\`, \`voided\`, \`archived\`: match that status.
@@ -45877,7 +46696,7 @@ Subscription status filter.
45877
46696
  - \`any\`: every status, no exclusion.
45878
46697
 
45879
46698
  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", `
46699
+ `).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
46700
  Examples:
45882
46701
  hyperline subscriptions list
45883
46702
  hyperline subscriptions list --take <take> --activation-strategy <activation_strategy>`).action(async (opts) => {
@@ -45899,10 +46718,6 @@ Examples:
45899
46718
  args.currency = opts.currency;
45900
46719
  if (opts["currency.not"] !== void 0)
45901
46720
  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
46721
  if (opts["currency.equals"] !== void 0)
45907
46722
  args.currency__equals = opts["currency.equals"];
45908
46723
  if (opts["currency.contains"] !== void 0)
@@ -45915,10 +46730,6 @@ Examples:
45915
46730
  args.plan_id = opts.planId;
45916
46731
  if (opts["planId.not"] !== void 0)
45917
46732
  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
46733
  if (opts["planId.equals"] !== void 0)
45923
46734
  args.plan_id__equals = opts["planId.equals"];
45924
46735
  if (opts["planId.contains"] !== void 0)
@@ -45927,14 +46738,14 @@ Examples:
45927
46738
  args.plan_id__startsWith = opts["planId.startsWith"];
45928
46739
  if (opts["planId.endWith"] !== void 0)
45929
46740
  args.plan_id__endWith = opts["planId.endWith"];
46741
+ if (opts["planId.isNull"] !== void 0)
46742
+ args.plan_id__isNull = opts["planId.isNull"];
46743
+ if (opts["planId.isNotNull"] !== void 0)
46744
+ args.plan_id__isNotNull = opts["planId.isNotNull"];
45930
46745
  if (opts.originalQuoteId !== void 0)
45931
46746
  args.original_quote_id = opts.originalQuoteId;
45932
46747
  if (opts["originalQuoteId.not"] !== void 0)
45933
46748
  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
46749
  if (opts["originalQuoteId.equals"] !== void 0)
45939
46750
  args.original_quote_id__equals = opts["originalQuoteId.equals"];
45940
46751
  if (opts["originalQuoteId.contains"] !== void 0)
@@ -45943,14 +46754,14 @@ Examples:
45943
46754
  args.original_quote_id__startsWith = opts["originalQuoteId.startsWith"];
45944
46755
  if (opts["originalQuoteId.endWith"] !== void 0)
45945
46756
  args.original_quote_id__endWith = opts["originalQuoteId.endWith"];
46757
+ if (opts["originalQuoteId.isNull"] !== void 0)
46758
+ args.original_quote_id__isNull = opts["originalQuoteId.isNull"];
46759
+ if (opts["originalQuoteId.isNotNull"] !== void 0)
46760
+ args.original_quote_id__isNotNull = opts["originalQuoteId.isNotNull"];
45946
46761
  if (opts.customerId !== void 0)
45947
46762
  args.customer_id = opts.customerId;
45948
46763
  if (opts["customerId.not"] !== void 0)
45949
46764
  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
46765
  if (opts["customerId.equals"] !== void 0)
45955
46766
  args.customer_id__equals = opts["customerId.equals"];
45956
46767
  if (opts["customerId.contains"] !== void 0)
@@ -45959,16 +46770,16 @@ Examples:
45959
46770
  args.customer_id__startsWith = opts["customerId.startsWith"];
45960
46771
  if (opts["customerId.endWith"] !== void 0)
45961
46772
  args.customer_id__endWith = opts["customerId.endWith"];
46773
+ if (opts["customerId.isNull"] !== void 0)
46774
+ args.customer_id__isNull = opts["customerId.isNull"];
46775
+ if (opts["customerId.isNotNull"] !== void 0)
46776
+ args.customer_id__isNotNull = opts["customerId.isNotNull"];
45962
46777
  if (opts.invoicingEntityId !== void 0)
45963
46778
  args.invoicing_entity_id = opts.invoicingEntityId;
45964
46779
  if (opts.purchaseOrder !== void 0)
45965
46780
  args.purchase_order = opts.purchaseOrder;
45966
46781
  if (opts["purchaseOrder.not"] !== void 0)
45967
46782
  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
46783
  if (opts["purchaseOrder.equals"] !== void 0)
45973
46784
  args.purchase_order__equals = opts["purchaseOrder.equals"];
45974
46785
  if (opts["purchaseOrder.contains"] !== void 0)
@@ -45977,6 +46788,10 @@ Examples:
45977
46788
  args.purchase_order__startsWith = opts["purchaseOrder.startsWith"];
45978
46789
  if (opts["purchaseOrder.endWith"] !== void 0)
45979
46790
  args.purchase_order__endWith = opts["purchaseOrder.endWith"];
46791
+ if (opts["purchaseOrder.isNull"] !== void 0)
46792
+ args.purchase_order__isNull = opts["purchaseOrder.isNull"];
46793
+ if (opts["purchaseOrder.isNotNull"] !== void 0)
46794
+ args.purchase_order__isNotNull = opts["purchaseOrder.isNotNull"];
45980
46795
  if (opts.customProperties !== void 0)
45981
46796
  args.custom_properties = opts.customProperties;
45982
46797
  if (opts.invoiceDrafts !== void 0)
@@ -45987,10 +46802,6 @@ Examples:
45987
46802
  args.updated_at = opts.updatedAt;
45988
46803
  if (opts["updatedAt.not"] !== void 0)
45989
46804
  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
46805
  if (opts["updatedAt.equals"] !== void 0)
45995
46806
  args.updated_at__equals = opts["updatedAt.equals"];
45996
46807
  if (opts["updatedAt.lt"] !== void 0)
@@ -46005,10 +46816,6 @@ Examples:
46005
46816
  args.cancel_at = opts.cancelAt;
46006
46817
  if (opts["cancelAt.not"] !== void 0)
46007
46818
  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
46819
  if (opts["cancelAt.equals"] !== void 0)
46013
46820
  args.cancel_at__equals = opts["cancelAt.equals"];
46014
46821
  if (opts["cancelAt.lt"] !== void 0)
@@ -46019,6 +46826,10 @@ Examples:
46019
46826
  args.cancel_at__gt = opts["cancelAt.gt"];
46020
46827
  if (opts["cancelAt.gte"] !== void 0)
46021
46828
  args.cancel_at__gte = opts["cancelAt.gte"];
46829
+ if (opts["cancelAt.isNull"] !== void 0)
46830
+ args.cancel_at__isNull = opts["cancelAt.isNull"];
46831
+ if (opts["cancelAt.isNotNull"] !== void 0)
46832
+ args.cancel_at__isNotNull = opts["cancelAt.isNotNull"];
46022
46833
  if (opts["contractStart.gte"] !== void 0)
46023
46834
  args.contract_start__gte = opts["contractStart.gte"];
46024
46835
  if (opts["contractStart.lte"] !== void 0)
@@ -46046,52 +46857,48 @@ Examples:
46046
46857
  "status__in",
46047
46858
  "currency",
46048
46859
  "currency__not",
46049
- "currency__isNull",
46050
- "currency__isNotNull",
46051
46860
  "currency__equals",
46052
46861
  "currency__contains",
46053
46862
  "currency__startsWith",
46054
46863
  "currency__endWith",
46055
46864
  "plan_id",
46056
46865
  "plan_id__not",
46057
- "plan_id__isNull",
46058
- "plan_id__isNotNull",
46059
46866
  "plan_id__equals",
46060
46867
  "plan_id__contains",
46061
46868
  "plan_id__startsWith",
46062
46869
  "plan_id__endWith",
46870
+ "plan_id__isNull",
46871
+ "plan_id__isNotNull",
46063
46872
  "original_quote_id",
46064
46873
  "original_quote_id__not",
46065
- "original_quote_id__isNull",
46066
- "original_quote_id__isNotNull",
46067
46874
  "original_quote_id__equals",
46068
46875
  "original_quote_id__contains",
46069
46876
  "original_quote_id__startsWith",
46070
46877
  "original_quote_id__endWith",
46878
+ "original_quote_id__isNull",
46879
+ "original_quote_id__isNotNull",
46071
46880
  "customer_id",
46072
46881
  "customer_id__not",
46073
- "customer_id__isNull",
46074
- "customer_id__isNotNull",
46075
46882
  "customer_id__equals",
46076
46883
  "customer_id__contains",
46077
46884
  "customer_id__startsWith",
46078
46885
  "customer_id__endWith",
46886
+ "customer_id__isNull",
46887
+ "customer_id__isNotNull",
46079
46888
  "invoicing_entity_id",
46080
46889
  "purchase_order",
46081
46890
  "purchase_order__not",
46082
- "purchase_order__isNull",
46083
- "purchase_order__isNotNull",
46084
46891
  "purchase_order__equals",
46085
46892
  "purchase_order__contains",
46086
46893
  "purchase_order__startsWith",
46087
46894
  "purchase_order__endWith",
46895
+ "purchase_order__isNull",
46896
+ "purchase_order__isNotNull",
46088
46897
  "custom_properties",
46089
46898
  "invoice_drafts",
46090
46899
  "integration_entity_id",
46091
46900
  "updated_at",
46092
46901
  "updated_at__not",
46093
- "updated_at__isNull",
46094
- "updated_at__isNotNull",
46095
46902
  "updated_at__equals",
46096
46903
  "updated_at__lt",
46097
46904
  "updated_at__lte",
@@ -46099,13 +46906,13 @@ Examples:
46099
46906
  "updated_at__gte",
46100
46907
  "cancel_at",
46101
46908
  "cancel_at__not",
46102
- "cancel_at__isNull",
46103
- "cancel_at__isNotNull",
46104
46909
  "cancel_at__equals",
46105
46910
  "cancel_at__lt",
46106
46911
  "cancel_at__lte",
46107
46912
  "cancel_at__gt",
46108
46913
  "cancel_at__gte",
46914
+ "cancel_at__isNull",
46915
+ "cancel_at__isNotNull",
46109
46916
  "contract_start__gte",
46110
46917
  "contract_start__lte",
46111
46918
  "contract_end__gte",
@@ -46392,7 +47199,7 @@ Examples:
46392
47199
  // build/commands/generated/subscriptions-transitions.js
46393
47200
  function registerSubscriptions_TransitionsCommands(parent) {
46394
47201
  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", `
47202
+ 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
47203
  Examples:
46397
47204
  hyperline subscriptions-transitions list-subscription-transitions
46398
47205
  hyperline subscriptions-transitions list-subscription-transitions --take <take> --status <status>`).action(async (opts) => {
@@ -46410,10 +47217,6 @@ Examples:
46410
47217
  args.source_subscription_id = opts.sourceSubscriptionId;
46411
47218
  if (opts["sourceSubscriptionId.not"] !== void 0)
46412
47219
  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
47220
  if (opts["sourceSubscriptionId.equals"] !== void 0)
46418
47221
  args.source_subscription_id__equals = opts["sourceSubscriptionId.equals"];
46419
47222
  if (opts["sourceSubscriptionId.contains"] !== void 0)
@@ -46426,10 +47229,6 @@ Examples:
46426
47229
  args.base_subscription_id = opts.baseSubscriptionId;
46427
47230
  if (opts["baseSubscriptionId.not"] !== void 0)
46428
47231
  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
47232
  if (opts["baseSubscriptionId.equals"] !== void 0)
46434
47233
  args.base_subscription_id__equals = opts["baseSubscriptionId.equals"];
46435
47234
  if (opts["baseSubscriptionId.contains"] !== void 0)
@@ -46442,10 +47241,6 @@ Examples:
46442
47241
  args.target_subscription_id = opts.targetSubscriptionId;
46443
47242
  if (opts["targetSubscriptionId.not"] !== void 0)
46444
47243
  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
47244
  if (opts["targetSubscriptionId.equals"] !== void 0)
46450
47245
  args.target_subscription_id__equals = opts["targetSubscriptionId.equals"];
46451
47246
  if (opts["targetSubscriptionId.contains"] !== void 0)
@@ -46454,14 +47249,14 @@ Examples:
46454
47249
  args.target_subscription_id__startsWith = opts["targetSubscriptionId.startsWith"];
46455
47250
  if (opts["targetSubscriptionId.endWith"] !== void 0)
46456
47251
  args.target_subscription_id__endWith = opts["targetSubscriptionId.endWith"];
47252
+ if (opts["targetSubscriptionId.isNull"] !== void 0)
47253
+ args.target_subscription_id__isNull = opts["targetSubscriptionId.isNull"];
47254
+ if (opts["targetSubscriptionId.isNotNull"] !== void 0)
47255
+ args.target_subscription_id__isNotNull = opts["targetSubscriptionId.isNotNull"];
46457
47256
  if (opts.transitionDate !== void 0)
46458
47257
  args.transition_date = opts.transitionDate;
46459
47258
  if (opts["transitionDate.not"] !== void 0)
46460
47259
  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
47260
  if (opts["transitionDate.equals"] !== void 0)
46466
47261
  args.transition_date__equals = opts["transitionDate.equals"];
46467
47262
  if (opts["transitionDate.lt"] !== void 0)
@@ -46472,14 +47267,14 @@ Examples:
46472
47267
  args.transition_date__gt = opts["transitionDate.gt"];
46473
47268
  if (opts["transitionDate.gte"] !== void 0)
46474
47269
  args.transition_date__gte = opts["transitionDate.gte"];
47270
+ if (opts["transitionDate.isNull"] !== void 0)
47271
+ args.transition_date__isNull = opts["transitionDate.isNull"];
47272
+ if (opts["transitionDate.isNotNull"] !== void 0)
47273
+ args.transition_date__isNotNull = opts["transitionDate.isNotNull"];
46475
47274
  if (opts.transitionedAt !== void 0)
46476
47275
  args.transitioned_at = opts.transitionedAt;
46477
47276
  if (opts["transitionedAt.not"] !== void 0)
46478
47277
  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
47278
  if (opts["transitionedAt.equals"] !== void 0)
46484
47279
  args.transitioned_at__equals = opts["transitionedAt.equals"];
46485
47280
  if (opts["transitionedAt.lt"] !== void 0)
@@ -46490,6 +47285,10 @@ Examples:
46490
47285
  args.transitioned_at__gt = opts["transitionedAt.gt"];
46491
47286
  if (opts["transitionedAt.gte"] !== void 0)
46492
47287
  args.transitioned_at__gte = opts["transitionedAt.gte"];
47288
+ if (opts["transitionedAt.isNull"] !== void 0)
47289
+ args.transitioned_at__isNull = opts["transitionedAt.isNull"];
47290
+ if (opts["transitionedAt.isNotNull"] !== void 0)
47291
+ args.transitioned_at__isNotNull = opts["transitionedAt.isNotNull"];
46493
47292
  if (opts.take !== void 0)
46494
47293
  args.take = Number(opts.take);
46495
47294
  if (opts.skip !== void 0)
@@ -46505,46 +47304,42 @@ Examples:
46505
47304
  "status__in",
46506
47305
  "source_subscription_id",
46507
47306
  "source_subscription_id__not",
46508
- "source_subscription_id__isNull",
46509
- "source_subscription_id__isNotNull",
46510
47307
  "source_subscription_id__equals",
46511
47308
  "source_subscription_id__contains",
46512
47309
  "source_subscription_id__startsWith",
46513
47310
  "source_subscription_id__endWith",
46514
47311
  "base_subscription_id",
46515
47312
  "base_subscription_id__not",
46516
- "base_subscription_id__isNull",
46517
- "base_subscription_id__isNotNull",
46518
47313
  "base_subscription_id__equals",
46519
47314
  "base_subscription_id__contains",
46520
47315
  "base_subscription_id__startsWith",
46521
47316
  "base_subscription_id__endWith",
46522
47317
  "target_subscription_id",
46523
47318
  "target_subscription_id__not",
46524
- "target_subscription_id__isNull",
46525
- "target_subscription_id__isNotNull",
46526
47319
  "target_subscription_id__equals",
46527
47320
  "target_subscription_id__contains",
46528
47321
  "target_subscription_id__startsWith",
46529
47322
  "target_subscription_id__endWith",
47323
+ "target_subscription_id__isNull",
47324
+ "target_subscription_id__isNotNull",
46530
47325
  "transition_date",
46531
47326
  "transition_date__not",
46532
- "transition_date__isNull",
46533
- "transition_date__isNotNull",
46534
47327
  "transition_date__equals",
46535
47328
  "transition_date__lt",
46536
47329
  "transition_date__lte",
46537
47330
  "transition_date__gt",
46538
47331
  "transition_date__gte",
47332
+ "transition_date__isNull",
47333
+ "transition_date__isNotNull",
46539
47334
  "transitioned_at",
46540
47335
  "transitioned_at__not",
46541
- "transitioned_at__isNull",
46542
- "transitioned_at__isNotNull",
46543
47336
  "transitioned_at__equals",
46544
47337
  "transitioned_at__lt",
46545
47338
  "transitioned_at__lte",
46546
47339
  "transitioned_at__gt",
46547
- "transitioned_at__gte"
47340
+ "transitioned_at__gte",
47341
+ "transitioned_at__isNull",
47342
+ "transitioned_at__isNotNull"
46548
47343
  ]
46549
47344
  });
46550
47345
  });
@@ -46622,7 +47417,7 @@ Examples:
46622
47417
  // build/commands/generated/taxes.js
46623
47418
  function registerTaxesCommands(parent) {
46624
47419
  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", `
47420
+ 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
47421
  Examples:
46627
47422
  hyperline taxes list-tax-rates
46628
47423
  hyperline taxes list-tax-rates --take <take> --id <id>`).action(async (opts) => {
@@ -46636,10 +47431,6 @@ Examples:
46636
47431
  args.id = opts.id;
46637
47432
  if (opts["id.not"] !== void 0)
46638
47433
  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
47434
  if (opts["id.equals"] !== void 0)
46644
47435
  args.id__equals = opts["id.equals"];
46645
47436
  if (opts["id.contains"] !== void 0)
@@ -46652,10 +47443,6 @@ Examples:
46652
47443
  args.name = opts.name;
46653
47444
  if (opts["name.not"] !== void 0)
46654
47445
  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
47446
  if (opts["name.equals"] !== void 0)
46660
47447
  args.name__equals = opts["name.equals"];
46661
47448
  if (opts["name.contains"] !== void 0)
@@ -46664,14 +47451,14 @@ Examples:
46664
47451
  args.name__startsWith = opts["name.startsWith"];
46665
47452
  if (opts["name.endWith"] !== void 0)
46666
47453
  args.name__endWith = opts["name.endWith"];
47454
+ if (opts["name.isNull"] !== void 0)
47455
+ args.name__isNull = opts["name.isNull"];
47456
+ if (opts["name.isNotNull"] !== void 0)
47457
+ args.name__isNotNull = opts["name.isNotNull"];
46667
47458
  if (opts.description !== void 0)
46668
47459
  args.description = opts.description;
46669
47460
  if (opts["description.not"] !== void 0)
46670
47461
  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
47462
  if (opts["description.equals"] !== void 0)
46676
47463
  args.description__equals = opts["description.equals"];
46677
47464
  if (opts["description.contains"] !== void 0)
@@ -46680,14 +47467,14 @@ Examples:
46680
47467
  args.description__startsWith = opts["description.startsWith"];
46681
47468
  if (opts["description.endWith"] !== void 0)
46682
47469
  args.description__endWith = opts["description.endWith"];
47470
+ if (opts["description.isNull"] !== void 0)
47471
+ args.description__isNull = opts["description.isNull"];
47472
+ if (opts["description.isNotNull"] !== void 0)
47473
+ args.description__isNotNull = opts["description.isNotNull"];
46683
47474
  if (opts.invoicingEntityId !== void 0)
46684
47475
  args.invoicing_entity_id = opts.invoicingEntityId;
46685
47476
  if (opts["invoicingEntityId.not"] !== void 0)
46686
47477
  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
47478
  if (opts["invoicingEntityId.equals"] !== void 0)
46692
47479
  args.invoicing_entity_id__equals = opts["invoicingEntityId.equals"];
46693
47480
  if (opts["invoicingEntityId.contains"] !== void 0)
@@ -46709,32 +47496,28 @@ Examples:
46709
47496
  "skip",
46710
47497
  "id",
46711
47498
  "id__not",
46712
- "id__isNull",
46713
- "id__isNotNull",
46714
47499
  "id__equals",
46715
47500
  "id__contains",
46716
47501
  "id__startsWith",
46717
47502
  "id__endWith",
46718
47503
  "name",
46719
47504
  "name__not",
46720
- "name__isNull",
46721
- "name__isNotNull",
46722
47505
  "name__equals",
46723
47506
  "name__contains",
46724
47507
  "name__startsWith",
46725
47508
  "name__endWith",
47509
+ "name__isNull",
47510
+ "name__isNotNull",
46726
47511
  "description",
46727
47512
  "description__not",
46728
- "description__isNull",
46729
- "description__isNotNull",
46730
47513
  "description__equals",
46731
47514
  "description__contains",
46732
47515
  "description__startsWith",
46733
47516
  "description__endWith",
47517
+ "description__isNull",
47518
+ "description__isNotNull",
46734
47519
  "invoicing_entity_id",
46735
47520
  "invoicing_entity_id__not",
46736
- "invoicing_entity_id__isNull",
46737
- "invoicing_entity_id__isNotNull",
46738
47521
  "invoicing_entity_id__equals",
46739
47522
  "invoicing_entity_id__contains",
46740
47523
  "invoicing_entity_id__startsWith",
@@ -47313,11 +48096,16 @@ function registerAllCommands(program2) {
47313
48096
  registerAi_BillingCommands(program2);
47314
48097
  registerAi_CostsCommands(program2);
47315
48098
  registerAnalyticsCommands(program2);
48099
+ registerApproval_WorkflowsCommands(program2);
47316
48100
  registerBank_AccountsCommands(program2);
48101
+ registerCatalogCommands(program2);
47317
48102
  registerCompaniesCommands(program2);
48103
+ registerContracts_ClausesCommands(program2);
48104
+ registerContracts_DocumentsCommands(program2);
47318
48105
  registerCouponsCommands(program2);
47319
48106
  registerCoupons_Promotion_CodesCommands(program2);
47320
48107
  registerCustomers_CreditsCommands(program2);
48108
+ registerCustomers_FeaturesCommands(program2);
47321
48109
  registerCustomers_Payment_MethodsCommands(program2);
47322
48110
  registerCustomers_AddressCommands(program2);
47323
48111
  registerCustomers_ShippingCommands(program2);
@@ -47326,12 +48114,14 @@ function registerAllCommands(program2) {
47326
48114
  registerOrganisationsCommands(program2);
47327
48115
  registerCustomers_SegmentsCommands(program2);
47328
48116
  registerExportsCommands(program2);
48117
+ registerFeaturesCommands(program2);
47329
48118
  registerFilesCommands(program2);
47330
48119
  registerInvoicesCommands(program2);
47331
48120
  registerInvoices_TransactionsCommands(program2);
47332
48121
  registerInvoicing_EntitiesCommands(program2);
47333
48122
  registerAi_MonitoringCommands(program2);
47334
48123
  registerPaymentsCommands(program2);
48124
+ registerProducts_FeaturesCommands(program2);
47335
48125
  registerProductsCommands(program2);
47336
48126
  registerPrice_ConfigurationsCommands(program2);
47337
48127
  registerQuotesCommands(program2);
@@ -63392,7 +64182,25 @@ var de = {
63392
64182
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Diese Position wurde f\xFCr den anteiligen Zeitraum in Rechnung gestellt",
63393
64183
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Betrag von {{amount}} f\xFCr den anteiligen Zeitraum nicht in Rechnung gestellt",
63394
64184
  "subscriptions.updates.updatePrices": "Preise f\xFCr {{productName}} aktualisieren",
63395
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 abgelaufenes Guthaben"
64185
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 abgelaufenes Guthaben",
64186
+ "quotes.blockers.quote_not_draft": "Setzen Sie das Angebot auf Entwurf zur\xFCck, bevor Sie seine Konfigurationen \xE4ndern",
64187
+ "quotes.blockers.quote_expiration_date_missing": "Das Angebot muss ein Ablaufdatum haben, um zur Genehmigung gesendet zu werden",
64188
+ "quotes.blockers.quote_configuration_missing": "F\xFCgen Sie mindestens eine Konfiguration hinzu, bevor Sie das Angebot einreichen",
64189
+ "quotes.blockers.quote_configuration_subscription_update_customer": "Abonnement\xE4nderungen m\xFCssen den Kunden des Angebots verwenden",
64190
+ "quotes.blockers.quote_configuration_multiple_configurations_disabled": "Aktivieren Sie mehrere Konfigurationen, bevor Sie einen untergeordneten Kunden zuweisen",
64191
+ "quotes.blockers.quote_configuration_customer_not_child": "W\xE4hlen Sie einen untergeordneten Kunden des Angebotskunden",
64192
+ "quotes.blockers.quote_configuration_type_mismatch": "Die verkn\xFCpfte Konfiguration entspricht nicht dem Konfigurationstyp",
64193
+ "quotes.blockers.quote_configuration_not_draft": "W\xE4hlen Sie eine Konfiguration im Entwurf",
64194
+ "quotes.blockers.quote_configuration_customer_mismatch": "Die Konfiguration muss zum Kunden der Konfiguration geh\xF6ren",
64195
+ "quotes.blockers.quote_configuration_currency_mismatch": "Die Konfiguration muss die W\xE4hrung des Angebots verwenden",
64196
+ "quotes.blockers.quote_configuration_invoicing_entity_mismatch": "Die Rechnung muss die Rechnungsstellungseinheit des Angebots verwenden",
64197
+ "quotes.blockers.quote_configuration_already_linked": "Die Konfiguration ist bereits mit einer Angebotskonfiguration verkn\xFCpft",
64198
+ "quotes.blockers.quote_configuration_not_subscription_update": "W\xE4hlen Sie eine Konfiguration f\xFCr eine Abonnement\xE4nderung",
64199
+ "quotes.blockers.quote_configuration_not_new_subscription": "W\xE4hlen Sie eine Konfiguration f\xFCr ein neues Abonnement",
64200
+ "quotes.blockers.quote_configuration_duplicate_subscription_update": "Ein Abonnement kann in einem Angebot nur einmal ge\xE4ndert werden",
64201
+ "quotes.blockers.quote_draft_invoice_missing": "Das Angebot muss eine Rechnung im Entwurf haben, um abgeschlossen zu werden",
64202
+ "quotes.blockers.quote_draft_subscription_missing": "Das Angebot muss ein Abonnement im Entwurf haben, um abgeschlossen zu werden",
64203
+ "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
64204
  };
63397
64205
 
63398
64206
  // ../hyperline-i18n/build/locales/en.js
@@ -63442,7 +64250,25 @@ var en = {
63442
64250
  "accounting.revrec.closedPeriodFallbackNote": " (posted to next open period \u2014 target accounting period closed; original date {{originalDate}})",
63443
64251
  "einvoicing.paymentProcessed": "Payment processed",
63444
64252
  "einvoicing.paymentReceived": "Payment received",
63445
- "einvoicing.paymentFromWallet": "Payment from wallet"
64253
+ "einvoicing.paymentFromWallet": "Payment from wallet",
64254
+ "quotes.blockers.quote_not_draft": "Redraft the quote before changing its configurations",
64255
+ "quotes.blockers.quote_expiration_date_missing": "Quote must have an expiration date to be sent for approval",
64256
+ "quotes.blockers.quote_configuration_missing": "Add at least one configuration before submitting the quote",
64257
+ "quotes.blockers.quote_configuration_subscription_update_customer": "Subscription updates must use the quote customer",
64258
+ "quotes.blockers.quote_configuration_multiple_configurations_disabled": "Enable multiple configurations before assigning a child customer",
64259
+ "quotes.blockers.quote_configuration_customer_not_child": "Select a child customer of the quote customer",
64260
+ "quotes.blockers.quote_configuration_type_mismatch": "The linked configuration does not match the configuration type",
64261
+ "quotes.blockers.quote_configuration_not_draft": "Select a draft configuration",
64262
+ "quotes.blockers.quote_configuration_customer_mismatch": "The configuration must belong to the configuration customer",
64263
+ "quotes.blockers.quote_configuration_currency_mismatch": "The configuration must use the quote currency",
64264
+ "quotes.blockers.quote_configuration_invoicing_entity_mismatch": "The invoice must use the quote invoicing entity",
64265
+ "quotes.blockers.quote_configuration_already_linked": "The configuration is already linked to a quote configuration",
64266
+ "quotes.blockers.quote_configuration_not_subscription_update": "Select a subscription update configuration",
64267
+ "quotes.blockers.quote_configuration_not_new_subscription": "Select a new subscription configuration",
64268
+ "quotes.blockers.quote_configuration_duplicate_subscription_update": "A subscription can only be updated once in a quote",
64269
+ "quotes.blockers.quote_draft_invoice_missing": "Quote must have a draft invoice to be finalized",
64270
+ "quotes.blockers.quote_draft_subscription_missing": "Quote must have a draft subscription to be finalized",
64271
+ "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
64272
  };
63447
64273
 
63448
64274
  // ../hyperline-i18n/build/locales/es.js
@@ -63492,7 +64318,25 @@ var es = {
63492
64318
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Esta l\xEDnea ha sido facturada para el per\xEDodo prorrateado",
63493
64319
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Importe de {{amount}} no facturado para el per\xEDodo prorrateado",
63494
64320
  "subscriptions.updates.updatePrices": "Actualizar precios para {{productName}}",
63495
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo caducado"
64321
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo caducado",
64322
+ "quotes.blockers.quote_not_draft": "Vuelve a poner el presupuesto en borrador antes de cambiar sus configuraciones",
64323
+ "quotes.blockers.quote_expiration_date_missing": "El presupuesto debe tener una fecha de vencimiento para enviarse a aprobaci\xF3n",
64324
+ "quotes.blockers.quote_configuration_missing": "A\xF1ade al menos una configuraci\xF3n antes de enviar el presupuesto",
64325
+ "quotes.blockers.quote_configuration_subscription_update_customer": "Las actualizaciones de suscripci\xF3n deben usar el cliente del presupuesto",
64326
+ "quotes.blockers.quote_configuration_multiple_configurations_disabled": "Activa las configuraciones m\xFAltiples antes de asignar un cliente hijo",
64327
+ "quotes.blockers.quote_configuration_customer_not_child": "Selecciona un cliente hijo del cliente del presupuesto",
64328
+ "quotes.blockers.quote_configuration_type_mismatch": "La configuraci\xF3n vinculada no coincide con el tipo de configuraci\xF3n",
64329
+ "quotes.blockers.quote_configuration_not_draft": "Selecciona una configuraci\xF3n en borrador",
64330
+ "quotes.blockers.quote_configuration_customer_mismatch": "La configuraci\xF3n debe pertenecer al cliente de la configuraci\xF3n",
64331
+ "quotes.blockers.quote_configuration_currency_mismatch": "La configuraci\xF3n debe usar la moneda del presupuesto",
64332
+ "quotes.blockers.quote_configuration_invoicing_entity_mismatch": "La factura debe usar la entidad de facturaci\xF3n del presupuesto",
64333
+ "quotes.blockers.quote_configuration_already_linked": "La configuraci\xF3n ya est\xE1 vinculada a una configuraci\xF3n de presupuesto",
64334
+ "quotes.blockers.quote_configuration_not_subscription_update": "Selecciona una configuraci\xF3n de actualizaci\xF3n de suscripci\xF3n",
64335
+ "quotes.blockers.quote_configuration_not_new_subscription": "Selecciona una configuraci\xF3n de nueva suscripci\xF3n",
64336
+ "quotes.blockers.quote_configuration_duplicate_subscription_update": "Una suscripci\xF3n solo puede actualizarse una vez en un presupuesto",
64337
+ "quotes.blockers.quote_draft_invoice_missing": "El presupuesto debe tener una factura en borrador para finalizarse",
64338
+ "quotes.blockers.quote_draft_subscription_missing": "El presupuesto debe tener una suscripci\xF3n en borrador para finalizarse",
64339
+ "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
64340
  };
63497
64341
 
63498
64342
  // ../hyperline-i18n/build/locales/fr.js
@@ -63542,7 +64386,25 @@ var fr = {
63542
64386
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Cette ligne a \xE9t\xE9 factur\xE9e pour la p\xE9riode proratis\xE9e",
63543
64387
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Montant de {{amount}} non factur\xE9 pour la p\xE9riode proratis\xE9e",
63544
64388
  "subscriptions.updates.updatePrices": "Mise \xE0 jour des prix pour {{productName}}",
63545
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 solde expir\xE9"
64389
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 solde expir\xE9",
64390
+ "quotes.blockers.quote_not_draft": "Repassez le devis en brouillon avant de modifier ses configurations",
64391
+ "quotes.blockers.quote_expiration_date_missing": "Le devis doit avoir une date d'expiration pour \xEAtre envoy\xE9 en validation",
64392
+ "quotes.blockers.quote_configuration_missing": "Ajoutez au moins une configuration avant de soumettre le devis",
64393
+ "quotes.blockers.quote_configuration_subscription_update_customer": "Les mises \xE0 jour d'abonnement doivent utiliser le client du devis",
64394
+ "quotes.blockers.quote_configuration_multiple_configurations_disabled": "Activez les configurations multiples avant d'assigner un client enfant",
64395
+ "quotes.blockers.quote_configuration_customer_not_child": "S\xE9lectionnez un client enfant du client du devis",
64396
+ "quotes.blockers.quote_configuration_type_mismatch": "La configuration li\xE9e ne correspond pas au type de configuration",
64397
+ "quotes.blockers.quote_configuration_not_draft": "S\xE9lectionnez une configuration en brouillon",
64398
+ "quotes.blockers.quote_configuration_customer_mismatch": "La configuration doit appartenir au client de la configuration",
64399
+ "quotes.blockers.quote_configuration_currency_mismatch": "La configuration doit utiliser la devise du devis",
64400
+ "quotes.blockers.quote_configuration_invoicing_entity_mismatch": "La facture doit utiliser l'entit\xE9 de facturation du devis",
64401
+ "quotes.blockers.quote_configuration_already_linked": "La configuration est d\xE9j\xE0 li\xE9e \xE0 une configuration de devis",
64402
+ "quotes.blockers.quote_configuration_not_subscription_update": "S\xE9lectionnez une configuration de mise \xE0 jour d'abonnement",
64403
+ "quotes.blockers.quote_configuration_not_new_subscription": "S\xE9lectionnez une configuration de nouvel abonnement",
64404
+ "quotes.blockers.quote_configuration_duplicate_subscription_update": "Un abonnement ne peut \xEAtre mis \xE0 jour qu'une seule fois dans un devis",
64405
+ "quotes.blockers.quote_draft_invoice_missing": "Le devis doit avoir une facture en brouillon pour \xEAtre finalis\xE9",
64406
+ "quotes.blockers.quote_draft_subscription_missing": "Le devis doit avoir un abonnement en brouillon pour \xEAtre finalis\xE9",
64407
+ "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
64408
  };
63547
64409
 
63548
64410
  // ../hyperline-i18n/build/locales/it.js
@@ -63592,7 +64454,25 @@ var it = {
63592
64454
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Questa voce \xE8 stata fatturata per il periodo proporzionato",
63593
64455
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Importo di {{amount}} non fatturato per il periodo proporzionato",
63594
64456
  "subscriptions.updates.updatePrices": "Aggiorna prezzi per {{productName}}",
63595
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo scaduto"
64457
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo scaduto",
64458
+ "quotes.blockers.quote_not_draft": "Riporta il preventivo in bozza prima di modificarne le configurazioni",
64459
+ "quotes.blockers.quote_expiration_date_missing": "Il preventivo deve avere una data di scadenza per essere inviato per approvazione",
64460
+ "quotes.blockers.quote_configuration_missing": "Aggiungi almeno una configurazione prima di inviare il preventivo",
64461
+ "quotes.blockers.quote_configuration_subscription_update_customer": "Gli aggiornamenti dell'abbonamento devono usare il cliente del preventivo",
64462
+ "quotes.blockers.quote_configuration_multiple_configurations_disabled": "Attiva le configurazioni multiple prima di assegnare un cliente figlio",
64463
+ "quotes.blockers.quote_configuration_customer_not_child": "Seleziona un cliente figlio del cliente del preventivo",
64464
+ "quotes.blockers.quote_configuration_type_mismatch": "La configurazione collegata non corrisponde al tipo di configurazione",
64465
+ "quotes.blockers.quote_configuration_not_draft": "Seleziona una configurazione in bozza",
64466
+ "quotes.blockers.quote_configuration_customer_mismatch": "La configurazione deve appartenere al cliente della configurazione",
64467
+ "quotes.blockers.quote_configuration_currency_mismatch": "La configurazione deve usare la valuta del preventivo",
64468
+ "quotes.blockers.quote_configuration_invoicing_entity_mismatch": "La fattura deve usare l'entit\xE0 di fatturazione del preventivo",
64469
+ "quotes.blockers.quote_configuration_already_linked": "La configurazione \xE8 gi\xE0 collegata a una configurazione del preventivo",
64470
+ "quotes.blockers.quote_configuration_not_subscription_update": "Seleziona una configurazione di aggiornamento dell'abbonamento",
64471
+ "quotes.blockers.quote_configuration_not_new_subscription": "Seleziona una configurazione di nuovo abbonamento",
64472
+ "quotes.blockers.quote_configuration_duplicate_subscription_update": "Un abbonamento pu\xF2 essere aggiornato una sola volta in un preventivo",
64473
+ "quotes.blockers.quote_draft_invoice_missing": "Il preventivo deve avere una fattura in bozza per essere finalizzato",
64474
+ "quotes.blockers.quote_draft_subscription_missing": "Il preventivo deve avere un abbonamento in bozza per essere finalizzato",
64475
+ "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
64476
  };
63597
64477
 
63598
64478
  // ../hyperline-i18n/build/locales/lt.js
@@ -63642,7 +64522,25 @@ var lt = {
63642
64522
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "U\u017E \u0161i\u0105 eilut\u0119 proporcingam laikotarpiui s\u0105skaita fakt\u016Bra i\u0161ra\u0161yta",
63643
64523
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Proporcingam laikotarpiui nei\u0161ra\u0161yta {{amount}} suma",
63644
64524
  "subscriptions.updates.updatePrices": "Atnaujinti {{productName}} kainas",
63645
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 nebegaliojantis likutis"
64525
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 nebegaliojantis likutis",
64526
+ "quotes.blockers.quote_not_draft": "Prie\u0161 keisdami pasi\u016Blymo konfig\u016Bracijas, gr\u0105\u017Einkite j\u012F \u012F juodra\u0161t\u012F",
64527
+ "quotes.blockers.quote_expiration_date_missing": "Pasi\u016Blymas turi tur\u0117ti galiojimo pabaigos dat\u0105, kad b\u016Bt\u0173 i\u0161si\u0173stas tvirtinti",
64528
+ "quotes.blockers.quote_configuration_missing": "Prie\u0161 pateikdami pasi\u016Blym\u0105, prid\u0117kite bent vien\u0105 konfig\u016Bracij\u0105",
64529
+ "quotes.blockers.quote_configuration_subscription_update_customer": "Prenumeratos atnaujinimai turi naudoti pasi\u016Blymo klient\u0105",
64530
+ "quotes.blockers.quote_configuration_multiple_configurations_disabled": "Prie\u0161 priskirdami antrin\u012F klient\u0105, \u012Fjunkite kelias konfig\u016Bracijas",
64531
+ "quotes.blockers.quote_configuration_customer_not_child": "Pasirinkite pasi\u016Blymo kliento antrin\u012F klient\u0105",
64532
+ "quotes.blockers.quote_configuration_type_mismatch": "Susieta konfig\u016Bracija neatitinka konfig\u016Bracijos tipo",
64533
+ "quotes.blockers.quote_configuration_not_draft": "Pasirinkite konfig\u016Bracijos juodra\u0161t\u012F",
64534
+ "quotes.blockers.quote_configuration_customer_mismatch": "Konfig\u016Bracija turi priklausyti konfig\u016Bracijos klientui",
64535
+ "quotes.blockers.quote_configuration_currency_mismatch": "Konfig\u016Bracija turi naudoti pasi\u016Blymo valiut\u0105",
64536
+ "quotes.blockers.quote_configuration_invoicing_entity_mismatch": "S\u0105skaita fakt\u016Bra turi naudoti pasi\u016Blymo s\u0105skait\u0173 i\u0161ra\u0161ymo subjekt\u0105",
64537
+ "quotes.blockers.quote_configuration_already_linked": "Konfig\u016Bracija jau susieta su pasi\u016Blymo konfig\u016Bracija",
64538
+ "quotes.blockers.quote_configuration_not_subscription_update": "Pasirinkite prenumeratos atnaujinimo konfig\u016Bracij\u0105",
64539
+ "quotes.blockers.quote_configuration_not_new_subscription": "Pasirinkite naujos prenumeratos konfig\u016Bracij\u0105",
64540
+ "quotes.blockers.quote_configuration_duplicate_subscription_update": "Prenumerat\u0105 pasi\u016Blyme galima atnaujinti tik vien\u0105 kart\u0105",
64541
+ "quotes.blockers.quote_draft_invoice_missing": "Pasi\u016Blymas turi tur\u0117ti s\u0105skaitos fakt\u016Bros juodra\u0161t\u012F, kad b\u016Bt\u0173 u\u017Ebaigtas",
64542
+ "quotes.blockers.quote_draft_subscription_missing": "Pasi\u016Blymas turi tur\u0117ti prenumeratos juodra\u0161t\u012F, kad b\u016Bt\u0173 u\u017Ebaigtas",
64543
+ "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
64544
  };
63647
64545
 
63648
64546
  // ../hyperline-i18n/build/locales/nl.js
@@ -63692,7 +64590,25 @@ var nl = {
63692
64590
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Deze regel is gefactureerd voor de geproportioneerde periode",
63693
64591
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Bedrag van {{amount}} niet gefactureerd voor de geproportioneerde periode",
63694
64592
  "subscriptions.updates.updatePrices": "Prijzen bijwerken voor {{productName}}",
63695
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 verlopen saldo"
64593
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 verlopen saldo",
64594
+ "quotes.blockers.quote_not_draft": "Zet de offerte terug naar concept voordat u de configuraties wijzigt",
64595
+ "quotes.blockers.quote_expiration_date_missing": "De offerte moet een vervaldatum hebben om ter goedkeuring te worden verzonden",
64596
+ "quotes.blockers.quote_configuration_missing": "Voeg ten minste \xE9\xE9n configuratie toe voordat u de offerte indient",
64597
+ "quotes.blockers.quote_configuration_subscription_update_customer": "Abonnementswijzigingen moeten de klant van de offerte gebruiken",
64598
+ "quotes.blockers.quote_configuration_multiple_configurations_disabled": "Schakel meerdere configuraties in voordat u een onderliggende klant toewijst",
64599
+ "quotes.blockers.quote_configuration_customer_not_child": "Selecteer een onderliggende klant van de offerteklant",
64600
+ "quotes.blockers.quote_configuration_type_mismatch": "De gekoppelde configuratie komt niet overeen met het configuratietype",
64601
+ "quotes.blockers.quote_configuration_not_draft": "Selecteer een conceptconfiguratie",
64602
+ "quotes.blockers.quote_configuration_customer_mismatch": "De configuratie moet bij de klant van de configuratie horen",
64603
+ "quotes.blockers.quote_configuration_currency_mismatch": "De configuratie moet de valuta van de offerte gebruiken",
64604
+ "quotes.blockers.quote_configuration_invoicing_entity_mismatch": "De factuur moet de facturatie-entiteit van de offerte gebruiken",
64605
+ "quotes.blockers.quote_configuration_already_linked": "De configuratie is al gekoppeld aan een offerteconfiguratie",
64606
+ "quotes.blockers.quote_configuration_not_subscription_update": "Selecteer een configuratie voor een abonnementswijziging",
64607
+ "quotes.blockers.quote_configuration_not_new_subscription": "Selecteer een configuratie voor een nieuw abonnement",
64608
+ "quotes.blockers.quote_configuration_duplicate_subscription_update": "Een abonnement kan maar \xE9\xE9n keer per offerte worden gewijzigd",
64609
+ "quotes.blockers.quote_draft_invoice_missing": "De offerte moet een conceptfactuur hebben om te worden afgerond",
64610
+ "quotes.blockers.quote_draft_subscription_missing": "De offerte moet een conceptabonnement hebben om te worden afgerond",
64611
+ "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
64612
  };
63697
64613
 
63698
64614
  // ../hyperline-i18n/build/locales/pl.js
@@ -63742,7 +64658,25 @@ var pl = {
63742
64658
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Ta pozycja zosta\u0142a zafakturowana za okres proporcjonalny",
63743
64659
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Kwota {{amount}} niefakturowana za okres proporcjonalny",
63744
64660
  "subscriptions.updates.updatePrices": "Aktualizuj ceny dla {{productName}}",
63745
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 wygas\u0142e saldo"
64661
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 wygas\u0142e saldo",
64662
+ "quotes.blockers.quote_not_draft": "Przywr\xF3\u0107 ofert\u0119 do wersji roboczej przed zmian\u0105 jej konfiguracji",
64663
+ "quotes.blockers.quote_expiration_date_missing": "Oferta musi mie\u0107 dat\u0119 wyga\u015Bni\u0119cia, aby zosta\u0142a wys\u0142ana do zatwierdzenia",
64664
+ "quotes.blockers.quote_configuration_missing": "Dodaj co najmniej jedn\u0105 konfiguracj\u0119 przed przes\u0142aniem oferty",
64665
+ "quotes.blockers.quote_configuration_subscription_update_customer": "Aktualizacje subskrypcji musz\u0105 u\u017Cywa\u0107 klienta oferty",
64666
+ "quotes.blockers.quote_configuration_multiple_configurations_disabled": "W\u0142\u0105cz wiele konfiguracji przed przypisaniem klienta podrz\u0119dnego",
64667
+ "quotes.blockers.quote_configuration_customer_not_child": "Wybierz klienta podrz\u0119dnego klienta oferty",
64668
+ "quotes.blockers.quote_configuration_type_mismatch": "Powi\u0105zana konfiguracja nie odpowiada typowi konfiguracji",
64669
+ "quotes.blockers.quote_configuration_not_draft": "Wybierz konfiguracj\u0119 w wersji roboczej",
64670
+ "quotes.blockers.quote_configuration_customer_mismatch": "Konfiguracja musi nale\u017Ce\u0107 do klienta konfiguracji",
64671
+ "quotes.blockers.quote_configuration_currency_mismatch": "Konfiguracja musi u\u017Cywa\u0107 waluty oferty",
64672
+ "quotes.blockers.quote_configuration_invoicing_entity_mismatch": "Faktura musi u\u017Cywa\u0107 podmiotu fakturuj\u0105cego oferty",
64673
+ "quotes.blockers.quote_configuration_already_linked": "Konfiguracja jest ju\u017C powi\u0105zana z konfiguracj\u0105 oferty",
64674
+ "quotes.blockers.quote_configuration_not_subscription_update": "Wybierz konfiguracj\u0119 aktualizacji subskrypcji",
64675
+ "quotes.blockers.quote_configuration_not_new_subscription": "Wybierz konfiguracj\u0119 nowej subskrypcji",
64676
+ "quotes.blockers.quote_configuration_duplicate_subscription_update": "Subskrypcj\u0119 mo\u017Cna zaktualizowa\u0107 w ofercie tylko raz",
64677
+ "quotes.blockers.quote_draft_invoice_missing": "Oferta musi mie\u0107 faktur\u0119 w wersji roboczej, aby zosta\u0142a sfinalizowana",
64678
+ "quotes.blockers.quote_draft_subscription_missing": "Oferta musi mie\u0107 subskrypcj\u0119 w wersji roboczej, aby zosta\u0142a sfinalizowana",
64679
+ "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
64680
  };
63747
64681
 
63748
64682
  // ../hyperline-i18n/build/locales/pt.js
@@ -63792,7 +64726,25 @@ var pt = {
63792
64726
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Esta linha foi faturada para o per\xEDodo proporcional",
63793
64727
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Valor de {{amount}} n\xE3o faturado para o per\xEDodo proporcional",
63794
64728
  "subscriptions.updates.updatePrices": "Atualizar pre\xE7os para {{productName}}",
63795
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo expirado"
64729
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo expirado",
64730
+ "quotes.blockers.quote_not_draft": "Volte a colocar o or\xE7amento em rascunho antes de alterar as suas configura\xE7\xF5es",
64731
+ "quotes.blockers.quote_expiration_date_missing": "O or\xE7amento deve ter uma data de expira\xE7\xE3o para ser enviado para aprova\xE7\xE3o",
64732
+ "quotes.blockers.quote_configuration_missing": "Adicione pelo menos uma configura\xE7\xE3o antes de submeter o or\xE7amento",
64733
+ "quotes.blockers.quote_configuration_subscription_update_customer": "As atualiza\xE7\xF5es de subscri\xE7\xE3o devem usar o cliente do or\xE7amento",
64734
+ "quotes.blockers.quote_configuration_multiple_configurations_disabled": "Ative as configura\xE7\xF5es m\xFAltiplas antes de atribuir um cliente filho",
64735
+ "quotes.blockers.quote_configuration_customer_not_child": "Selecione um cliente filho do cliente do or\xE7amento",
64736
+ "quotes.blockers.quote_configuration_type_mismatch": "A configura\xE7\xE3o associada n\xE3o corresponde ao tipo de configura\xE7\xE3o",
64737
+ "quotes.blockers.quote_configuration_not_draft": "Selecione uma configura\xE7\xE3o em rascunho",
64738
+ "quotes.blockers.quote_configuration_customer_mismatch": "A configura\xE7\xE3o deve pertencer ao cliente da configura\xE7\xE3o",
64739
+ "quotes.blockers.quote_configuration_currency_mismatch": "A configura\xE7\xE3o deve usar a moeda do or\xE7amento",
64740
+ "quotes.blockers.quote_configuration_invoicing_entity_mismatch": "A fatura deve usar a entidade de fatura\xE7\xE3o do or\xE7amento",
64741
+ "quotes.blockers.quote_configuration_already_linked": "A configura\xE7\xE3o j\xE1 est\xE1 associada a uma configura\xE7\xE3o de or\xE7amento",
64742
+ "quotes.blockers.quote_configuration_not_subscription_update": "Selecione uma configura\xE7\xE3o de atualiza\xE7\xE3o de subscri\xE7\xE3o",
64743
+ "quotes.blockers.quote_configuration_not_new_subscription": "Selecione uma configura\xE7\xE3o de nova subscri\xE7\xE3o",
64744
+ "quotes.blockers.quote_configuration_duplicate_subscription_update": "Uma subscri\xE7\xE3o s\xF3 pode ser atualizada uma vez num or\xE7amento",
64745
+ "quotes.blockers.quote_draft_invoice_missing": "O or\xE7amento deve ter uma fatura em rascunho para ser finalizado",
64746
+ "quotes.blockers.quote_draft_subscription_missing": "O or\xE7amento deve ter uma subscri\xE7\xE3o em rascunho para ser finalizado",
64747
+ "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
64748
  };
63797
64749
 
63798
64750
  // ../hyperline-i18n/build/language.js
@@ -63973,16 +64925,19 @@ var REDACTED_KEY_NAMES = /* @__PURE__ */ new Set([
63973
64925
  "credentials",
63974
64926
  "iban",
63975
64927
  "idtoken",
64928
+ "launchticket",
63976
64929
  "privatekey",
63977
64930
  "publictoken",
63978
64931
  "refreshtoken",
64932
+ // A workflow secret's value (core/workflows secrets).
64933
+ "secretvalue",
63979
64934
  "sessiontoken",
63980
64935
  "token",
63981
64936
  "tokenid",
63982
64937
  "verificationcode"
63983
64938
  ]);
63984
64939
  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;
64940
+ var REDACTED_KEY_CANDIDATE_PATTERN = /token|ticket|key|secret|pass|assertion|verifier|credential|authorization|cookie|iban|cardnumber|code|connectionurl/i;
63986
64941
  var URL_ONLY_REDACTED_KEYS = /* @__PURE__ */ new Set(["key"]);
63987
64942
  var OAUTH_CODE_KEY = "code";
63988
64943
  var OAUTH_CODE_CONTEXT_KEYS = ["state", "grant_type"];
@@ -66744,69 +67699,6 @@ var Decimal = P.constructor = clone2(DEFAULTS);
66744
67699
  LN10 = new Decimal(LN10);
66745
67700
  PI = new Decimal(PI);
66746
67701
 
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
67702
  // ../hyperline-lib/build/utils/dates.js
66811
67703
  var import_shared2 = __toESM(require_shared(), 1);
66812
67704
  var PERIOD_BOUND_DRIFT_TOLERANCE_MS = 2 * 60 * 1e3;
@@ -66831,7 +67723,8 @@ var dateRealignmentModeSchema = external_exports.enum([
66831
67723
  "utc_midnight_import",
66832
67724
  "dst_hour_drift",
66833
67725
  "month_start_drift",
66834
- "manual_phase_end_midnight"
67726
+ "manual_phase_end_midnight",
67727
+ "customer_timezone_change"
66835
67728
  ]).default("utc_midnight_import");
66836
67729
  var DST_HOUR_SHIFT_BY_LOCAL_MILLISECOND_OF_DAY = /* @__PURE__ */ new Map([
66837
67730
  [23 * MILLISECONDS_PER_HOUR, MILLISECONDS_PER_HOUR],
@@ -66840,8 +67733,16 @@ var DST_HOUR_SHIFT_BY_LOCAL_MILLISECOND_OF_DAY = /* @__PURE__ */ new Map([
66840
67733
  [MILLISECONDS_PER_HOUR - 1, -MILLISECONDS_PER_HOUR]
66841
67734
  ]);
66842
67735
 
67736
+ // ../hyperline-lib/build/utils/overviewPeriods.js
67737
+ var OverviewPeriodSchema = external_exports.enum([
67738
+ "this_month",
67739
+ "last_month",
67740
+ "last_3_months"
67741
+ ]);
67742
+
66843
67743
  // ../hyperline-lib/build/utils/api/filterBuilder.js
66844
- var baseAuthorizedOperators = ["not", "isNull", "isNotNull"];
67744
+ var nullAuthorizedOperators = ["isNull", "isNotNull"];
67745
+ var baseAuthorizedOperators = ["not", ...nullAuthorizedOperators];
66845
67746
  var booleanAuthorizedOperators = [
66846
67747
  ...baseAuthorizedOperators,
66847
67748
  "equals"
@@ -66870,10 +67771,17 @@ var authorizedOperators = [
66870
67771
  ...arrayAuthorizedOperators,
66871
67772
  ...mapAuthorizedOperators
66872
67773
  ];
67774
+ var NullFilterValueSchema = BooleanSchema.or(external_exports.literal("")).optional();
66873
67775
 
66874
67776
  // ../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).",
67777
+ var StateSchema = external_exports.string().openapi({
67778
+ 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:
67779
+ - United States: state, see [ISO 3166-2:US](https://en.wikipedia.org/wiki/ISO_3166-2:US)
67780
+ - Canada: province or territory, see [ISO 3166-2:CA](https://en.wikipedia.org/wiki/ISO_3166-2:CA)
67781
+ - Italy: province, see [ISO 3166-2:IT](https://en.wikipedia.org/wiki/ISO_3166-2:IT)
67782
+ - Brazil: state, see [ISO 3166-2:BR](https://en.wikipedia.org/wiki/ISO_3166-2:BR)
67783
+
67784
+ 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
67785
  example: "CA"
66878
67786
  });
66879
67787
 
@@ -66987,9 +67895,10 @@ var toLogRequest = (config4) => {
66987
67895
  };
66988
67896
 
66989
67897
  // ../hyperline-lib/build/httpClient/publicUrlFetch.js
67898
+ import { lookup as lookupCallback } from "node:dns";
66990
67899
  import { lookup } from "node:dns/promises";
66991
67900
  import { isIP } from "node:net";
66992
- import { Agent } from "undici";
67901
+ import { Agent, fetch as fetch2 } from "undici";
66993
67902
  var PINNED_DISPATCHER_TTL_MS = 5 * 60 * 1e3;
66994
67903
  var DEFAULT_MAX_RESPONSE_BYTES = 2 * 1024 * 1024;
66995
67904
 
@@ -67009,10 +67918,15 @@ import { createHash as createHash4 } from "node:crypto";
67009
67918
  var TTL_MS = 5 * 6e4;
67010
67919
 
67011
67920
  // ../hyperline-mcp/build/requestBuilder.js
67012
- function buildRequestConfig(path2, args, method, queryParamKeys = []) {
67921
+ function buildRequestConfig({ path: path2, args, method, queryParamKeys = [], arrayBody = false }) {
67013
67922
  const { url: url2, usedKeys } = replacePathParams(path2, args);
67014
67923
  const remaining = removeUsedKeys(args, usedKeys);
67015
- const { params, data } = separateParamsAndBody(remaining, method, queryParamKeys);
67924
+ const { params, data } = separateParamsAndBody({
67925
+ args: remaining,
67926
+ method,
67927
+ queryParamKeys,
67928
+ arrayBody
67929
+ });
67016
67930
  return { url: url2, params, data };
67017
67931
  }
67018
67932
  function replacePathParams(path2, args) {
@@ -67043,7 +67957,7 @@ var PathParamError = class extends Error {
67043
67957
  function removeUsedKeys(args, usedKeys) {
67044
67958
  return Object.fromEntries(Object.entries(args).filter(([key]) => !usedKeys.has(key)));
67045
67959
  }
67046
- function separateParamsAndBody(args, method, queryParamKeys) {
67960
+ function separateParamsAndBody({ args, method, queryParamKeys, arrayBody }) {
67047
67961
  const isBodyMethod = ["POST", "PUT", "PATCH"].includes(method);
67048
67962
  if (!isBodyMethod) {
67049
67963
  return { params: args };
@@ -67051,8 +67965,7 @@ function separateParamsAndBody(args, method, queryParamKeys) {
67051
67965
  const queryKeySet = new Set(queryParamKeys);
67052
67966
  const params = Object.fromEntries(Object.entries(args).filter(([key]) => queryKeySet.has(key)));
67053
67967
  const data = Object.fromEntries(Object.entries(args).filter(([key]) => !queryKeySet.has(key)));
67054
- const dataKeys = Object.keys(data);
67055
- if (dataKeys.length === 1 && dataKeys[0] === "items" && Array.isArray(data.items)) {
67968
+ if (arrayBody && Array.isArray(data.items)) {
67056
67969
  return { params, data: data.items };
67057
67970
  }
67058
67971
  return { params, data };
@@ -67070,6 +67983,62 @@ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/
67070
67983
  // ../hyperline-mcp/build/server/server.js
67071
67984
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
67072
67985
 
67986
+ // build/multipart.js
67987
+ import { readFile as readFile2 } from "node:fs/promises";
67988
+ import { basename, extname } from "node:path";
67989
+ var MIMETYPES_BY_EXTENSION = {
67990
+ ".csv": "text/csv",
67991
+ ".doc": "application/msword",
67992
+ ".docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
67993
+ ".gif": "image/gif",
67994
+ ".jpeg": "image/jpeg",
67995
+ ".jpg": "image/jpeg",
67996
+ ".json": "application/json",
67997
+ ".pdf": "application/pdf",
67998
+ ".png": "image/png",
67999
+ ".svg": "image/svg+xml",
68000
+ ".txt": "text/plain",
68001
+ ".xls": "application/vnd.ms-excel",
68002
+ ".xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
68003
+ ".xml": "application/xml"
68004
+ };
68005
+ function getMimetypeFromPath(filePath) {
68006
+ return MIMETYPES_BY_EXTENSION[extname(filePath).toLowerCase()] ?? "application/octet-stream";
68007
+ }
68008
+ function appendFormValue({ formData, key, value }) {
68009
+ if (value === void 0) {
68010
+ return;
68011
+ }
68012
+ if (value === null) {
68013
+ formData.append(key, "");
68014
+ return;
68015
+ }
68016
+ if (Array.isArray(value)) {
68017
+ for (const [index, item] of value.entries()) {
68018
+ appendFormValue({ formData, key: `${key}[${index}]`, value: item });
68019
+ }
68020
+ return;
68021
+ }
68022
+ if (typeof value === "object") {
68023
+ throw new Error(`--${key} cannot be sent alongside files: a multipart request only carries scalar fields.`);
68024
+ }
68025
+ formData.append(key, String(value));
68026
+ }
68027
+ async function buildMultipartBody({ data, files }) {
68028
+ const formData = new FormData();
68029
+ for (const [key, value] of Object.entries(data)) {
68030
+ appendFormValue({ formData, key, value });
68031
+ }
68032
+ const fileUploads = Object.entries(files).flatMap(([fieldName, filePaths]) => filePaths.map((filePath) => ({ fieldName, filePath })));
68033
+ const fileContents = await Promise.all(fileUploads.map(({ filePath }) => readFile2(filePath)));
68034
+ for (const [index, { fieldName, filePath }] of fileUploads.entries()) {
68035
+ formData.append(fieldName, new Blob([new Uint8Array(fileContents[index])], {
68036
+ type: getMimetypeFromPath(filePath)
68037
+ }), basename(filePath));
68038
+ }
68039
+ return formData;
68040
+ }
68041
+
67073
68042
  // build/output.js
67074
68043
  function formatOutput({ data, format: format2 }) {
67075
68044
  if (format2 === "json") {
@@ -67129,16 +68098,25 @@ function createCLIContext({ apiKey, baseUrl, outputFormat, source, companyId })
67129
68098
  return {
67130
68099
  baseUrl,
67131
68100
  outputFormat,
67132
- async execute({ method, path: path2, args, queryParamKeys = [], body, baseUrlOverride }) {
67133
- const { url: url2, params, data } = buildRequestConfig(path2, args, method, queryParamKeys);
68101
+ async execute({ method, path: path2, args, queryParamKeys = [], body, files, baseUrlOverride }) {
68102
+ const { url: url2, params, data } = buildRequestConfig({
68103
+ path: path2,
68104
+ args,
68105
+ method,
68106
+ queryParamKeys
68107
+ });
67134
68108
  const requestData = body ?? data;
67135
68109
  const hasData = Array.isArray(requestData) ? requestData.length > 0 : requestData != null && Object.keys(requestData).length > 0;
68110
+ const hasFiles = Object.values(files ?? {}).some((filePaths) => filePaths.length > 0);
67136
68111
  try {
67137
68112
  const response = await httpClient.request({
67138
68113
  method,
67139
68114
  url: url2,
67140
68115
  params,
67141
- data: hasData ? requestData : void 0,
68116
+ data: hasFiles ? await buildMultipartBody({
68117
+ data: requestData ?? {},
68118
+ files: files ?? {}
68119
+ }) : hasData ? requestData : void 0,
67142
68120
  ...baseUrlOverride ? { baseURL: baseUrlOverride } : {},
67143
68121
  headers: {
67144
68122
  "Hyperline-Source": source,