@hyperline/cli 0.1.0-build.1.d0ce810 → 0.1.0-build.1.d20f57b

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");
@@ -42758,78 +43333,294 @@ Export file type.
42758
43333
  - \`xlsx\`: The export will be generated in XLSX format.
42759
43334
  - \`json\`: The export will be generated in JSON format.`).addHelpText("after", `
42760
43335
  Examples:
42761
- hyperline exports create --name <name> --file-type <file_type>
42762
- hyperline exports create --name <name> --file-type <file_type> --output json`).action(async (opts) => {
43336
+ hyperline exports create --name <name> --file-type <file_type>
43337
+ hyperline exports create --name <name> --file-type <file_type> --output json`).action(async (opts) => {
43338
+ const ctx = resource.parent?.opts()._ctx;
43339
+ if (!ctx) {
43340
+ process.stderr.write("Error: Not authenticated\n");
43341
+ process.exit(1);
43342
+ }
43343
+ const args = {};
43344
+ if (opts.name !== void 0)
43345
+ args.name = opts.name;
43346
+ if (opts.fileType !== void 0)
43347
+ args.file_type = opts.fileType;
43348
+ await ctx.execute({
43349
+ method: "POST",
43350
+ path: "/v1/exports",
43351
+ args,
43352
+ queryParamKeys: []
43353
+ });
43354
+ });
43355
+ resource.command("list").description(`List the client's data exports (customers, invoices, etc.) with pagination. Use take/skip to page through results.`).option("--take <number>", `take`).option("--skip <number>", `skip`).addHelpText("after", `
43356
+ Examples:
43357
+ hyperline exports list
43358
+ hyperline exports list --take <take>`).action(async (opts) => {
43359
+ const ctx = resource.parent?.opts()._ctx;
43360
+ if (!ctx) {
43361
+ process.stderr.write("Error: Not authenticated\n");
43362
+ process.exit(1);
43363
+ }
43364
+ const args = {};
43365
+ if (opts.take !== void 0)
43366
+ args.take = Number(opts.take);
43367
+ if (opts.skip !== void 0)
43368
+ args.skip = Number(opts.skip);
43369
+ await ctx.execute({
43370
+ method: "GET",
43371
+ path: "/v1/exports",
43372
+ args,
43373
+ queryParamKeys: ["take", "skip"]
43374
+ });
43375
+ });
43376
+ resource.command("get").description(`Check the status of an export by ID. Status can be pending, processing, or completed. Use download_export to get the file once completed.`).requiredOption("--export-id <value>", `exportId parameter`).addHelpText("after", `
43377
+ Examples:
43378
+ hyperline exports get --export-id <exportId>`).action(async (opts) => {
43379
+ const ctx = resource.parent?.opts()._ctx;
43380
+ if (!ctx) {
43381
+ process.stderr.write("Error: Not authenticated\n");
43382
+ process.exit(1);
43383
+ }
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) => {
42763
43539
  const ctx = resource.parent?.opts()._ctx;
42764
43540
  if (!ctx) {
42765
43541
  process.stderr.write("Error: Not authenticated\n");
42766
43542
  process.exit(1);
42767
43543
  }
42768
43544
  const args = {};
43545
+ if (opts.code !== void 0)
43546
+ args.code = opts.code;
42769
43547
  if (opts.name !== void 0)
42770
43548
  args.name = opts.name;
42771
- if (opts.fileType !== void 0)
42772
- args.file_type = opts.fileType;
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;
42773
43557
  await ctx.execute({
42774
- method: "POST",
42775
- path: "/v1/exports",
43558
+ method: "PUT",
43559
+ path: "/v1/features/{code}",
42776
43560
  args,
42777
43561
  queryParamKeys: []
42778
43562
  });
42779
43563
  });
42780
- resource.command("list").description(`List the client's data exports (customers, invoices, etc.) with pagination. Use take/skip to page through results.`).option("--take <number>", `take`).option("--skip <number>", `skip`).addHelpText("after", `
43564
+ resource.command("archive").description(`Archive a feature definition.`).requiredOption("--code <value>", `code parameter`).addHelpText("after", `
42781
43565
  Examples:
42782
- hyperline exports list
42783
- hyperline exports list --take <take>`).action(async (opts) => {
43566
+ hyperline features archive --code <code>
43567
+ hyperline features archive --code <code> --output json`).action(async (opts) => {
42784
43568
  const ctx = resource.parent?.opts()._ctx;
42785
43569
  if (!ctx) {
42786
43570
  process.stderr.write("Error: Not authenticated\n");
42787
43571
  process.exit(1);
42788
43572
  }
42789
43573
  const args = {};
42790
- if (opts.take !== void 0)
42791
- args.take = Number(opts.take);
42792
- if (opts.skip !== void 0)
42793
- args.skip = Number(opts.skip);
43574
+ if (opts.code !== void 0)
43575
+ args.code = opts.code;
42794
43576
  await ctx.execute({
42795
- method: "GET",
42796
- path: "/v1/exports",
43577
+ method: "PUT",
43578
+ path: "/v1/features/{code}/archive",
42797
43579
  args,
42798
- queryParamKeys: ["take", "skip"]
43580
+ queryParamKeys: []
42799
43581
  });
42800
43582
  });
42801
- resource.command("get").description(`Check the status of an export by ID. Status can be pending, processing, or completed. Use download_export to get the file once completed.`).requiredOption("--export-id <value>", `exportId parameter`).addHelpText("after", `
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", `
42802
43584
  Examples:
42803
- hyperline exports get --export-id <exportId>`).action(async (opts) => {
43585
+ hyperline features delete --code <code>
43586
+ hyperline features delete --code <code> --output json`).action(async (opts) => {
42804
43587
  const ctx = resource.parent?.opts()._ctx;
42805
43588
  if (!ctx) {
42806
43589
  process.stderr.write("Error: Not authenticated\n");
42807
43590
  process.exit(1);
42808
43591
  }
42809
43592
  const args = {};
42810
- if (opts.exportId !== void 0)
42811
- args.exportId = opts.exportId;
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",
@@ -44222,7 +45009,7 @@ Examples:
44222
45009
  // build/commands/generated/price-configurations.js
44223
45010
  function registerPrice_ConfigurationsCommands(parent) {
44224
45011
  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", `
45012
+ 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
45013
  Examples:
44227
45014
  hyperline price-configurations list
44228
45015
  hyperline price-configurations list --take <take> --product-id <product_id>`).action(async (opts) => {
@@ -44236,10 +45023,6 @@ Examples:
44236
45023
  args.product_id = opts.productId;
44237
45024
  if (opts["productId.not"] !== void 0)
44238
45025
  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
45026
  if (opts["productId.equals"] !== void 0)
44244
45027
  args.product_id__equals = opts["productId.equals"];
44245
45028
  if (opts["productId.contains"] !== void 0)
@@ -44252,10 +45035,6 @@ Examples:
44252
45035
  args.price_book_id = opts.priceBookId;
44253
45036
  if (opts["priceBookId.not"] !== void 0)
44254
45037
  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
45038
  if (opts["priceBookId.equals"] !== void 0)
44260
45039
  args.price_book_id__equals = opts["priceBookId.equals"];
44261
45040
  if (opts["priceBookId.contains"] !== void 0)
@@ -44264,6 +45043,10 @@ Examples:
44264
45043
  args.price_book_id__startsWith = opts["priceBookId.startsWith"];
44265
45044
  if (opts["priceBookId.endWith"] !== void 0)
44266
45045
  args.price_book_id__endWith = opts["priceBookId.endWith"];
45046
+ if (opts["priceBookId.isNull"] !== void 0)
45047
+ args.price_book_id__isNull = opts["priceBookId.isNull"];
45048
+ if (opts["priceBookId.isNotNull"] !== void 0)
45049
+ args.price_book_id__isNotNull = opts["priceBookId.isNotNull"];
44267
45050
  if (opts.take !== void 0)
44268
45051
  args.take = Number(opts.take);
44269
45052
  if (opts.skip !== void 0)
@@ -44277,20 +45060,18 @@ Examples:
44277
45060
  "skip",
44278
45061
  "product_id",
44279
45062
  "product_id__not",
44280
- "product_id__isNull",
44281
- "product_id__isNotNull",
44282
45063
  "product_id__equals",
44283
45064
  "product_id__contains",
44284
45065
  "product_id__startsWith",
44285
45066
  "product_id__endWith",
44286
45067
  "price_book_id",
44287
45068
  "price_book_id__not",
44288
- "price_book_id__isNull",
44289
- "price_book_id__isNotNull",
44290
45069
  "price_book_id__equals",
44291
45070
  "price_book_id__contains",
44292
45071
  "price_book_id__startsWith",
44293
- "price_book_id__endWith"
45072
+ "price_book_id__endWith",
45073
+ "price_book_id__isNull",
45074
+ "price_book_id__isNotNull"
44294
45075
  ]
44295
45076
  });
44296
45077
  });
@@ -44416,7 +45197,7 @@ Examples:
44416
45197
  // build/commands/generated/products.js
44417
45198
  function registerProductsCommands(parent) {
44418
45199
  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", `
45200
+ 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.`).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
45201
  Examples:
44421
45202
  hyperline products list
44422
45203
  hyperline products list --take <take> --id <id>`).action(async (opts) => {
@@ -44430,10 +45211,6 @@ Examples:
44430
45211
  args.id = opts.id;
44431
45212
  if (opts["id.not"] !== void 0)
44432
45213
  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
45214
  if (opts["id.equals"] !== void 0)
44438
45215
  args.id__equals = opts["id.equals"];
44439
45216
  if (opts["id.contains"] !== void 0)
@@ -44450,10 +45227,6 @@ Examples:
44450
45227
  args.name = opts.name;
44451
45228
  if (opts["name.not"] !== void 0)
44452
45229
  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
45230
  if (opts["name.equals"] !== void 0)
44458
45231
  args.name__equals = opts["name.equals"];
44459
45232
  if (opts["name.contains"] !== void 0)
@@ -44466,10 +45239,6 @@ Examples:
44466
45239
  args.description = opts.description;
44467
45240
  if (opts["description.not"] !== void 0)
44468
45241
  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
45242
  if (opts["description.equals"] !== void 0)
44474
45243
  args.description__equals = opts["description.equals"];
44475
45244
  if (opts["description.contains"] !== void 0)
@@ -44478,14 +45247,14 @@ Examples:
44478
45247
  args.description__startsWith = opts["description.startsWith"];
44479
45248
  if (opts["description.endWith"] !== void 0)
44480
45249
  args.description__endWith = opts["description.endWith"];
45250
+ if (opts["description.isNull"] !== void 0)
45251
+ args.description__isNull = opts["description.isNull"];
45252
+ if (opts["description.isNotNull"] !== void 0)
45253
+ args.description__isNotNull = opts["description.isNotNull"];
44481
45254
  if (opts.type !== void 0)
44482
45255
  args.type = opts.type;
44483
45256
  if (opts["type.not"] !== void 0)
44484
45257
  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
45258
  if (opts["type.equals"] !== void 0)
44490
45259
  args.type__equals = opts["type.equals"];
44491
45260
  if (opts["type.contains"] !== void 0)
@@ -44496,6 +45265,8 @@ Examples:
44496
45265
  args.type__endWith = opts["type.endWith"];
44497
45266
  if (opts.priceBookId !== void 0)
44498
45267
  args.price_book_id = opts.priceBookId;
45268
+ if (opts.customProperties !== void 0)
45269
+ args.custom_properties = opts.customProperties;
44499
45270
  if (opts.take !== void 0)
44500
45271
  args.take = Number(opts.take);
44501
45272
  if (opts.skip !== void 0)
@@ -44509,8 +45280,6 @@ Examples:
44509
45280
  "skip",
44510
45281
  "id",
44511
45282
  "id__not",
44512
- "id__isNull",
44513
- "id__isNotNull",
44514
45283
  "id__equals",
44515
45284
  "id__contains",
44516
45285
  "id__startsWith",
@@ -44519,33 +45288,30 @@ Examples:
44519
45288
  "status__in",
44520
45289
  "name",
44521
45290
  "name__not",
44522
- "name__isNull",
44523
- "name__isNotNull",
44524
45291
  "name__equals",
44525
45292
  "name__contains",
44526
45293
  "name__startsWith",
44527
45294
  "name__endWith",
44528
45295
  "description",
44529
45296
  "description__not",
44530
- "description__isNull",
44531
- "description__isNotNull",
44532
45297
  "description__equals",
44533
45298
  "description__contains",
44534
45299
  "description__startsWith",
44535
45300
  "description__endWith",
45301
+ "description__isNull",
45302
+ "description__isNotNull",
44536
45303
  "type",
44537
45304
  "type__not",
44538
- "type__isNull",
44539
- "type__isNotNull",
44540
45305
  "type__equals",
44541
45306
  "type__contains",
44542
45307
  "type__startsWith",
44543
45308
  "type__endWith",
44544
- "price_book_id"
45309
+ "price_book_id",
45310
+ "custom_properties"
44545
45311
  ]
44546
45312
  });
44547
45313
  });
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>", `
45314
+ 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
45315
  How the periodic credit allowance is granted for partial billing periods.
44550
45316
 
44551
45317
  - \`prorated\` (default): the granted credits are prorated to the elapsed period.
@@ -44633,7 +45399,7 @@ Examples:
44633
45399
  queryParamKeys: ["price_book_id"]
44634
45400
  });
44635
45401
  });
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", `
45402
+ 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", `
44637
45403
  Examples:
44638
45404
  hyperline products update --id <id> --name <name>
44639
45405
  hyperline products update --id <id> --name <name> --description <description> --public-description <public_description>
@@ -44666,15 +45432,83 @@ Examples:
44666
45432
  args.accounting = JSON.parse(opts.accounting);
44667
45433
  await ctx.execute({
44668
45434
  method: "PUT",
44669
- path: "/v1/products/{id}",
45435
+ path: "/v1/products/{id}",
45436
+ args,
45437
+ queryParamKeys: []
45438
+ });
45439
+ });
45440
+ 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", `
45441
+ Examples:
45442
+ hyperline products archive --id <id>
45443
+ hyperline products archive --id <id> --output json`).action(async (opts) => {
45444
+ const ctx = resource.parent?.opts()._ctx;
45445
+ if (!ctx) {
45446
+ process.stderr.write("Error: Not authenticated\n");
45447
+ process.exit(1);
45448
+ }
45449
+ const args = {};
45450
+ if (opts.id !== void 0)
45451
+ args.id = opts.id;
45452
+ await ctx.execute({
45453
+ method: "PUT",
45454
+ path: "/v1/products/{id}/archive",
45455
+ args,
45456
+ queryParamKeys: []
45457
+ });
45458
+ });
45459
+ 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", `
45460
+ Examples:
45461
+ hyperline products delete --id <id>
45462
+ hyperline products delete --id <id> --output json`).action(async (opts) => {
45463
+ const ctx = resource.parent?.opts()._ctx;
45464
+ if (!ctx) {
45465
+ process.stderr.write("Error: Not authenticated\n");
45466
+ process.exit(1);
45467
+ }
45468
+ const args = {};
45469
+ if (opts.id !== void 0)
45470
+ args.id = opts.id;
45471
+ if (!opts.yes) {
45472
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
45473
+ if (!confirmed) {
45474
+ process.stdout.write("Aborted.\n");
45475
+ return;
45476
+ }
45477
+ }
45478
+ await ctx.execute({
45479
+ method: "DELETE",
45480
+ path: "/v1/products/{id}",
45481
+ args,
45482
+ queryParamKeys: []
45483
+ });
45484
+ });
45485
+ resource.command("unarchive").description(`Restore a previously archived product, making it available for new subscriptions again.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
45486
+ Examples:
45487
+ hyperline products unarchive --id <id>
45488
+ hyperline products unarchive --id <id> --output json`).action(async (opts) => {
45489
+ const ctx = resource.parent?.opts()._ctx;
45490
+ if (!ctx) {
45491
+ process.stderr.write("Error: Not authenticated\n");
45492
+ process.exit(1);
45493
+ }
45494
+ const args = {};
45495
+ if (opts.id !== void 0)
45496
+ args.id = opts.id;
45497
+ await ctx.execute({
45498
+ method: "PUT",
45499
+ path: "/v1/products/{id}/unarchive",
44670
45500
  args,
44671
45501
  queryParamKeys: []
44672
45502
  });
44673
45503
  });
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", `
45504
+ }
45505
+
45506
+ // build/commands/generated/products-features.js
45507
+ function registerProducts_FeaturesCommands(parent) {
45508
+ const resource = parent.command("products-features").description("Manage products > features");
45509
+ resource.command("list-product-features").description(`List feature values assigned to a product.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
44675
45510
  Examples:
44676
- hyperline products archive --id <id>
44677
- hyperline products archive --id <id> --output json`).action(async (opts) => {
45511
+ hyperline products-features list-product-features --id <id>`).action(async (opts) => {
44678
45512
  const ctx = resource.parent?.opts()._ctx;
44679
45513
  if (!ctx) {
44680
45514
  process.stderr.write("Error: Not authenticated\n");
@@ -44684,16 +45518,16 @@ Examples:
44684
45518
  if (opts.id !== void 0)
44685
45519
  args.id = opts.id;
44686
45520
  await ctx.execute({
44687
- method: "PUT",
44688
- path: "/v1/products/{id}/archive",
45521
+ method: "GET",
45522
+ path: "/v1/products/{id}/features",
44689
45523
  args,
44690
45524
  queryParamKeys: []
44691
45525
  });
44692
45526
  });
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", `
45527
+ 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", `
44694
45528
  Examples:
44695
- hyperline products delete --id <id>
44696
- hyperline products delete --id <id> --output json`).action(async (opts) => {
45529
+ hyperline products-features set-product-feature --id <id> --code <code> --value
45530
+ hyperline products-features set-product-feature --id <id> --code <code> --value --output json`).action(async (opts) => {
44697
45531
  const ctx = resource.parent?.opts()._ctx;
44698
45532
  if (!ctx) {
44699
45533
  process.stderr.write("Error: Not authenticated\n");
@@ -44702,24 +45536,21 @@ Examples:
44702
45536
  const args = {};
44703
45537
  if (opts.id !== void 0)
44704
45538
  args.id = opts.id;
44705
- if (!opts.yes) {
44706
- const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
44707
- if (!confirmed) {
44708
- process.stdout.write("Aborted.\n");
44709
- return;
44710
- }
44711
- }
45539
+ if (opts.code !== void 0)
45540
+ args.code = opts.code;
45541
+ if (opts.value !== void 0)
45542
+ args.value = true;
44712
45543
  await ctx.execute({
44713
- method: "DELETE",
44714
- path: "/v1/products/{id}",
45544
+ method: "PUT",
45545
+ path: "/v1/products/{id}/features/{code}",
44715
45546
  args,
44716
45547
  queryParamKeys: []
44717
45548
  });
44718
45549
  });
44719
- resource.command("unarchive").description(`Restore a previously archived product, making it available for new subscriptions again.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
45550
+ 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", `
44720
45551
  Examples:
44721
- hyperline products unarchive --id <id>
44722
- hyperline products unarchive --id <id> --output json`).action(async (opts) => {
45552
+ hyperline products-features delete-product-feature --id <id> --code <code>
45553
+ hyperline products-features delete-product-feature --id <id> --code <code> --output json`).action(async (opts) => {
44723
45554
  const ctx = resource.parent?.opts()._ctx;
44724
45555
  if (!ctx) {
44725
45556
  process.stderr.write("Error: Not authenticated\n");
@@ -44728,9 +45559,18 @@ Examples:
44728
45559
  const args = {};
44729
45560
  if (opts.id !== void 0)
44730
45561
  args.id = opts.id;
45562
+ if (opts.code !== void 0)
45563
+ args.code = opts.code;
45564
+ if (!opts.yes) {
45565
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
45566
+ if (!confirmed) {
45567
+ process.stdout.write("Aborted.\n");
45568
+ return;
45569
+ }
45570
+ }
44731
45571
  await ctx.execute({
44732
- method: "PUT",
44733
- path: "/v1/products/{id}/unarchive",
45572
+ method: "DELETE",
45573
+ path: "/v1/products/{id}/features/{code}",
44734
45574
  args,
44735
45575
  queryParamKeys: []
44736
45576
  });
@@ -44746,12 +45586,12 @@ Quote status.
44746
45586
  - \`draft\`: The quote is a draft.
44747
45587
  - \`approved\`: The quote is approved and ready to be sent to the customer.
44748
45588
  - \`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.
45589
+ `).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
45590
 
44751
45591
  - \`all\`: Display all pricing tiers.
44752
45592
  - \`matching\`: Only display the tiers used to compute the price based on quantity.
44753
45593
  - \`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", `
45594
+ `).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
45595
  Examples:
44756
45596
  hyperline quotes create --customer-id <customer_id>
44757
45597
  hyperline quotes create --customer-id <customer_id> --status <status> --owner-email <owner_email>
@@ -44816,14 +45656,18 @@ Examples:
44816
45656
  args.subscription = JSON.parse(opts.subscription);
44817
45657
  if (opts.invoice !== void 0)
44818
45658
  args.invoice = JSON.parse(opts.invoice);
45659
+ const files = {};
45660
+ if (opts.attachments !== void 0)
45661
+ files.attachments = [opts.attachments].flat();
44819
45662
  await ctx.execute({
44820
45663
  method: "POST",
44821
45664
  path: "/v1/quotes",
44822
45665
  args,
44823
- queryParamKeys: []
45666
+ queryParamKeys: [],
45667
+ files
44824
45668
  });
44825
45669
  });
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("--type.not <value>", `type__not`).option("--type.is-null <value>", `type__isNull`).option("--type.is-not-null <value>", `type__isNotNull`).option("--type.equals <value>", `type__equals`).option("--type.contains <value>", `type__contains`).option("--type.starts-with <value>", `type__startsWith`).option("--type.end-with <value>", `type__endWith`).option("--updated-at <value>", `updated_at`).option("--updated-at.not <value>", `updated_at__not`).option("--updated-at.is-null <value>", `updated_at__isNull`).option("--updated-at.is-not-null <value>", `updated_at__isNotNull`).option("--updated-at.equals <value>", `updated_at__equals`).option("--updated-at.lt <value>", `updated_at__lt`).option("--updated-at.lte <value>", `updated_at__lte`).option("--updated-at.gt <value>", `updated_at__gt`).option("--updated-at.gte <value>", `updated_at__gte`).addHelpText("after", `
45670
+ 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
45671
  Examples:
44828
45672
  hyperline quotes list
44829
45673
  hyperline quotes list --take <take> --id <id>`).action(async (opts) => {
@@ -44837,10 +45681,6 @@ Examples:
44837
45681
  args.id = opts.id;
44838
45682
  if (opts["id.not"] !== void 0)
44839
45683
  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
45684
  if (opts["id.equals"] !== void 0)
44845
45685
  args.id__equals = opts["id.equals"];
44846
45686
  if (opts["id.contains"] !== void 0)
@@ -44853,10 +45693,6 @@ Examples:
44853
45693
  args.number = opts.number;
44854
45694
  if (opts["number.not"] !== void 0)
44855
45695
  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
45696
  if (opts["number.equals"] !== void 0)
44861
45697
  args.number__equals = opts["number.equals"];
44862
45698
  if (opts["number.contains"] !== void 0)
@@ -44873,10 +45709,6 @@ Examples:
44873
45709
  args.customer_id = opts.customerId;
44874
45710
  if (opts["customerId.not"] !== void 0)
44875
45711
  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
45712
  if (opts["customerId.equals"] !== void 0)
44881
45713
  args.customer_id__equals = opts["customerId.equals"];
44882
45714
  if (opts["customerId.contains"] !== void 0)
@@ -44889,10 +45721,6 @@ Examples:
44889
45721
  args.template_id = opts.templateId;
44890
45722
  if (opts["templateId.not"] !== void 0)
44891
45723
  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
45724
  if (opts["templateId.equals"] !== void 0)
44897
45725
  args.template_id__equals = opts["templateId.equals"];
44898
45726
  if (opts["templateId.contains"] !== void 0)
@@ -44901,14 +45729,14 @@ Examples:
44901
45729
  args.template_id__startsWith = opts["templateId.startsWith"];
44902
45730
  if (opts["templateId.endWith"] !== void 0)
44903
45731
  args.template_id__endWith = opts["templateId.endWith"];
45732
+ if (opts["templateId.isNull"] !== void 0)
45733
+ args.template_id__isNull = opts["templateId.isNull"];
45734
+ if (opts["templateId.isNotNull"] !== void 0)
45735
+ args.template_id__isNotNull = opts["templateId.isNotNull"];
44904
45736
  if (opts.crmOpportunityId !== void 0)
44905
45737
  args.crm_opportunity_id = opts.crmOpportunityId;
44906
45738
  if (opts["crmOpportunityId.not"] !== void 0)
44907
45739
  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
45740
  if (opts["crmOpportunityId.equals"] !== void 0)
44913
45741
  args.crm_opportunity_id__equals = opts["crmOpportunityId.equals"];
44914
45742
  if (opts["crmOpportunityId.contains"] !== void 0)
@@ -44917,30 +45745,16 @@ Examples:
44917
45745
  args.crm_opportunity_id__startsWith = opts["crmOpportunityId.startsWith"];
44918
45746
  if (opts["crmOpportunityId.endWith"] !== void 0)
44919
45747
  args.crm_opportunity_id__endWith = opts["crmOpportunityId.endWith"];
45748
+ if (opts["crmOpportunityId.isNull"] !== void 0)
45749
+ args.crm_opportunity_id__isNull = opts["crmOpportunityId.isNull"];
45750
+ if (opts["crmOpportunityId.isNotNull"] !== void 0)
45751
+ args.crm_opportunity_id__isNotNull = opts["crmOpportunityId.isNotNull"];
44920
45752
  if (opts.type !== void 0)
44921
45753
  args.type = opts.type;
44922
- if (opts["type.not"] !== void 0)
44923
- args.type__not = opts["type.not"];
44924
- if (opts["type.isNull"] !== void 0)
44925
- args.type__isNull = opts["type.isNull"];
44926
- if (opts["type.isNotNull"] !== void 0)
44927
- args.type__isNotNull = opts["type.isNotNull"];
44928
- if (opts["type.equals"] !== void 0)
44929
- args.type__equals = opts["type.equals"];
44930
- if (opts["type.contains"] !== void 0)
44931
- args.type__contains = opts["type.contains"];
44932
- if (opts["type.startsWith"] !== void 0)
44933
- args.type__startsWith = opts["type.startsWith"];
44934
- if (opts["type.endWith"] !== void 0)
44935
- args.type__endWith = opts["type.endWith"];
44936
45754
  if (opts.updatedAt !== void 0)
44937
45755
  args.updated_at = opts.updatedAt;
44938
45756
  if (opts["updatedAt.not"] !== void 0)
44939
45757
  args.updated_at__not = opts["updatedAt.not"];
44940
- if (opts["updatedAt.isNull"] !== void 0)
44941
- args.updated_at__isNull = opts["updatedAt.isNull"];
44942
- if (opts["updatedAt.isNotNull"] !== void 0)
44943
- args.updated_at__isNotNull = opts["updatedAt.isNotNull"];
44944
45758
  if (opts["updatedAt.equals"] !== void 0)
44945
45759
  args.updated_at__equals = opts["updatedAt.equals"];
44946
45760
  if (opts["updatedAt.lt"] !== void 0)
@@ -44964,16 +45778,12 @@ Examples:
44964
45778
  "skip",
44965
45779
  "id",
44966
45780
  "id__not",
44967
- "id__isNull",
44968
- "id__isNotNull",
44969
45781
  "id__equals",
44970
45782
  "id__contains",
44971
45783
  "id__startsWith",
44972
45784
  "id__endWith",
44973
45785
  "number",
44974
45786
  "number__not",
44975
- "number__isNull",
44976
- "number__isNotNull",
44977
45787
  "number__equals",
44978
45788
  "number__contains",
44979
45789
  "number__startsWith",
@@ -44982,40 +45792,29 @@ Examples:
44982
45792
  "status__in",
44983
45793
  "customer_id",
44984
45794
  "customer_id__not",
44985
- "customer_id__isNull",
44986
- "customer_id__isNotNull",
44987
45795
  "customer_id__equals",
44988
45796
  "customer_id__contains",
44989
45797
  "customer_id__startsWith",
44990
45798
  "customer_id__endWith",
44991
45799
  "template_id",
44992
45800
  "template_id__not",
44993
- "template_id__isNull",
44994
- "template_id__isNotNull",
44995
45801
  "template_id__equals",
44996
45802
  "template_id__contains",
44997
45803
  "template_id__startsWith",
44998
45804
  "template_id__endWith",
45805
+ "template_id__isNull",
45806
+ "template_id__isNotNull",
44999
45807
  "crm_opportunity_id",
45000
45808
  "crm_opportunity_id__not",
45001
- "crm_opportunity_id__isNull",
45002
- "crm_opportunity_id__isNotNull",
45003
45809
  "crm_opportunity_id__equals",
45004
45810
  "crm_opportunity_id__contains",
45005
45811
  "crm_opportunity_id__startsWith",
45006
45812
  "crm_opportunity_id__endWith",
45813
+ "crm_opportunity_id__isNull",
45814
+ "crm_opportunity_id__isNotNull",
45007
45815
  "type",
45008
- "type__not",
45009
- "type__isNull",
45010
- "type__isNotNull",
45011
- "type__equals",
45012
- "type__contains",
45013
- "type__startsWith",
45014
- "type__endWith",
45015
45816
  "updated_at",
45016
45817
  "updated_at__not",
45017
- "updated_at__isNull",
45018
- "updated_at__isNotNull",
45019
45818
  "updated_at__equals",
45020
45819
  "updated_at__lt",
45021
45820
  "updated_at__lte",
@@ -45042,12 +45841,12 @@ Examples:
45042
45841
  queryParamKeys: []
45043
45842
  });
45044
45843
  });
45045
- 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.
45844
+ 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.
45046
45845
 
45047
45846
  - \`all\`: Display all pricing tiers.
45048
45847
  - \`matching\`: Only display the tiers used to compute the price based on quantity.
45049
45848
  - \`none\`: Hide all pricing tiers.
45050
- `).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", `
45849
+ `).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", `
45051
45850
  Examples:
45052
45851
  hyperline quotes update --id <id>
45053
45852
  hyperline quotes update --id <id> --owner-email <owner_email> --catalog-version-id <catalog_version_id>
@@ -45108,11 +45907,15 @@ Examples:
45108
45907
  args.subscription = JSON.parse(opts.subscription);
45109
45908
  if (opts.invoice !== void 0)
45110
45909
  args.invoice = JSON.parse(opts.invoice);
45910
+ const files = {};
45911
+ if (opts.attachments !== void 0)
45912
+ files.attachments = [opts.attachments].flat();
45111
45913
  await ctx.execute({
45112
45914
  method: "PATCH",
45113
45915
  path: "/v1/quotes/{id}",
45114
45916
  args,
45115
- queryParamKeys: []
45917
+ queryParamKeys: [],
45918
+ files
45116
45919
  });
45117
45920
  });
45118
45921
  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", `
@@ -45265,9 +46068,10 @@ Examples:
45265
46068
  queryParamKeys: []
45266
46069
  });
45267
46070
  });
45268
- 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", `
46071
+ 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", `
45269
46072
  Examples:
45270
46073
  hyperline quotes sign --id <id>
46074
+ hyperline quotes sign --id <id> --signed-quote <path>
45271
46075
  hyperline quotes sign --id <id> --output json`).action(async (opts) => {
45272
46076
  const ctx = resource.parent?.opts()._ctx;
45273
46077
  if (!ctx) {
@@ -45277,11 +46081,15 @@ Examples:
45277
46081
  const args = {};
45278
46082
  if (opts.id !== void 0)
45279
46083
  args.id = opts.id;
46084
+ const files = {};
46085
+ if (opts.signedQuote !== void 0)
46086
+ files.signed_quote = [opts.signedQuote].flat();
45280
46087
  await ctx.execute({
45281
46088
  method: "POST",
45282
46089
  path: "/v1/quotes/{id}/sign",
45283
46090
  args,
45284
- queryParamKeys: []
46091
+ queryParamKeys: [],
46092
+ files
45285
46093
  });
45286
46094
  });
45287
46095
  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", `
@@ -45393,7 +46201,7 @@ Examples:
45393
46201
  // build/commands/generated/quotes-templates.js
45394
46202
  function registerQuotes_TemplatesCommands(parent) {
45395
46203
  const resource = parent.command("quotes-templates").description("Manage quotes > templates");
45396
- 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", `
46204
+ 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", `
45397
46205
  Examples:
45398
46206
  hyperline quotes-templates list-quote-templates
45399
46207
  hyperline quotes-templates list-quote-templates --take <take> --id <id>`).action(async (opts) => {
@@ -45407,10 +46215,6 @@ Examples:
45407
46215
  args.id = opts.id;
45408
46216
  if (opts["id.not"] !== void 0)
45409
46217
  args.id__not = opts["id.not"];
45410
- if (opts["id.isNull"] !== void 0)
45411
- args.id__isNull = opts["id.isNull"];
45412
- if (opts["id.isNotNull"] !== void 0)
45413
- args.id__isNotNull = opts["id.isNotNull"];
45414
46218
  if (opts["id.equals"] !== void 0)
45415
46219
  args.id__equals = opts["id.equals"];
45416
46220
  if (opts["id.contains"] !== void 0)
@@ -45423,10 +46227,6 @@ Examples:
45423
46227
  args.name = opts.name;
45424
46228
  if (opts["name.not"] !== void 0)
45425
46229
  args.name__not = opts["name.not"];
45426
- if (opts["name.isNull"] !== void 0)
45427
- args.name__isNull = opts["name.isNull"];
45428
- if (opts["name.isNotNull"] !== void 0)
45429
- args.name__isNotNull = opts["name.isNotNull"];
45430
46230
  if (opts["name.equals"] !== void 0)
45431
46231
  args.name__equals = opts["name.equals"];
45432
46232
  if (opts["name.contains"] !== void 0)
@@ -45439,10 +46239,6 @@ Examples:
45439
46239
  args.subscription_template_id = opts.subscriptionTemplateId;
45440
46240
  if (opts["subscriptionTemplateId.not"] !== void 0)
45441
46241
  args.subscription_template_id__not = opts["subscriptionTemplateId.not"];
45442
- if (opts["subscriptionTemplateId.isNull"] !== void 0)
45443
- args.subscription_template_id__isNull = opts["subscriptionTemplateId.isNull"];
45444
- if (opts["subscriptionTemplateId.isNotNull"] !== void 0)
45445
- args.subscription_template_id__isNotNull = opts["subscriptionTemplateId.isNotNull"];
45446
46242
  if (opts["subscriptionTemplateId.equals"] !== void 0)
45447
46243
  args.subscription_template_id__equals = opts["subscriptionTemplateId.equals"];
45448
46244
  if (opts["subscriptionTemplateId.contains"] !== void 0)
@@ -45451,6 +46247,10 @@ Examples:
45451
46247
  args.subscription_template_id__startsWith = opts["subscriptionTemplateId.startsWith"];
45452
46248
  if (opts["subscriptionTemplateId.endWith"] !== void 0)
45453
46249
  args.subscription_template_id__endWith = opts["subscriptionTemplateId.endWith"];
46250
+ if (opts["subscriptionTemplateId.isNull"] !== void 0)
46251
+ args.subscription_template_id__isNull = opts["subscriptionTemplateId.isNull"];
46252
+ if (opts["subscriptionTemplateId.isNotNull"] !== void 0)
46253
+ args.subscription_template_id__isNotNull = opts["subscriptionTemplateId.isNotNull"];
45454
46254
  if (opts.search !== void 0)
45455
46255
  args.search = opts.search;
45456
46256
  if (opts.take !== void 0)
@@ -45466,28 +46266,24 @@ Examples:
45466
46266
  "skip",
45467
46267
  "id",
45468
46268
  "id__not",
45469
- "id__isNull",
45470
- "id__isNotNull",
45471
46269
  "id__equals",
45472
46270
  "id__contains",
45473
46271
  "id__startsWith",
45474
46272
  "id__endWith",
45475
46273
  "name",
45476
46274
  "name__not",
45477
- "name__isNull",
45478
- "name__isNotNull",
45479
46275
  "name__equals",
45480
46276
  "name__contains",
45481
46277
  "name__startsWith",
45482
46278
  "name__endWith",
45483
46279
  "subscription_template_id",
45484
46280
  "subscription_template_id__not",
45485
- "subscription_template_id__isNull",
45486
- "subscription_template_id__isNotNull",
45487
46281
  "subscription_template_id__equals",
45488
46282
  "subscription_template_id__contains",
45489
46283
  "subscription_template_id__startsWith",
45490
46284
  "subscription_template_id__endWith",
46285
+ "subscription_template_id__isNull",
46286
+ "subscription_template_id__isNotNull",
45491
46287
  "search"
45492
46288
  ]
45493
46289
  });
@@ -45889,7 +46685,7 @@ Examples:
45889
46685
  queryParamKeys: []
45890
46686
  });
45891
46687
  });
45892
- resource.command("list").description(`List subscriptions with filters for activation_strategy, status, currency, plan_id, original_quote_id, integration_entity_id, customer_id, invoicing_entity_id, purchase_order, updated_at, custom_properties. Draft, voided, cancelled and archived excluded by default (status=all applies the same exclusion); status=any returns every status. Paginated with take/skip.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--activation-strategy <value>", `activation_strategy`).option("--activation-strategy.in <value>", `activation_strategy__in`).option("--status <value>", `
46688
+ 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>", `
45893
46689
  Subscription status filter.
45894
46690
 
45895
46691
  - \`active\`, \`pending\`, \`paused\`, \`errored\`, \`cancelled\`, \`draft\`, \`voided\`, \`archived\`: match that status.
@@ -45898,7 +46694,7 @@ Subscription status filter.
45898
46694
  - \`any\`: every status, no exclusion.
45899
46695
 
45900
46696
  Use \`status__in\` with comma-separated values to combine statuses. When the filter is omitted, \`draft\`, \`voided\`, \`cancelled\` and \`archived\` subscriptions are excluded.
45901
- `).option("--status.in <value>", `Comma-separated list of subscription statuses to include. Same values as \`status\`.`).option("--currency <value>", `currency`).option("--currency.not <value>", `currency__not`).option("--currency.is-null <value>", `currency__isNull`).option("--currency.is-not-null <value>", `currency__isNotNull`).option("--currency.equals <value>", `currency__equals`).option("--currency.contains <value>", `currency__contains`).option("--currency.starts-with <value>", `currency__startsWith`).option("--currency.end-with <value>", `currency__endWith`).option("--plan-id <value>", `plan_id`).option("--plan-id.not <value>", `plan_id__not`).option("--plan-id.is-null <value>", `plan_id__isNull`).option("--plan-id.is-not-null <value>", `plan_id__isNotNull`).option("--plan-id.equals <value>", `plan_id__equals`).option("--plan-id.contains <value>", `plan_id__contains`).option("--plan-id.starts-with <value>", `plan_id__startsWith`).option("--plan-id.end-with <value>", `plan_id__endWith`).option("--original-quote-id <value>", `original_quote_id`).option("--original-quote-id.not <value>", `original_quote_id__not`).option("--original-quote-id.is-null <value>", `original_quote_id__isNull`).option("--original-quote-id.is-not-null <value>", `original_quote_id__isNotNull`).option("--original-quote-id.equals <value>", `original_quote_id__equals`).option("--original-quote-id.contains <value>", `original_quote_id__contains`).option("--original-quote-id.starts-with <value>", `original_quote_id__startsWith`).option("--original-quote-id.end-with <value>", `original_quote_id__endWith`).option("--customer-id <value>", `customer_id`).option("--customer-id.not <value>", `customer_id__not`).option("--customer-id.is-null <value>", `customer_id__isNull`).option("--customer-id.is-not-null <value>", `customer_id__isNotNull`).option("--customer-id.equals <value>", `customer_id__equals`).option("--customer-id.contains <value>", `customer_id__contains`).option("--customer-id.starts-with <value>", `customer_id__startsWith`).option("--customer-id.end-with <value>", `customer_id__endWith`).option("--invoicing-entity-id <value>", `invoicing_entity_id`).option("--purchase-order <value>", `purchase_order`).option("--purchase-order.not <value>", `purchase_order__not`).option("--purchase-order.is-null <value>", `purchase_order__isNull`).option("--purchase-order.is-not-null <value>", `purchase_order__isNotNull`).option("--purchase-order.equals <value>", `purchase_order__equals`).option("--purchase-order.contains <value>", `purchase_order__contains`).option("--purchase-order.starts-with <value>", `purchase_order__startsWith`).option("--purchase-order.end-with <value>", `purchase_order__endWith`).option("--custom-properties <value>", `custom_properties`).option("--invoice-drafts <value>", `invoice_drafts`).option("--integration-entity-id <value>", `integration_entity_id`).option("--updated-at <value>", `updated_at`).option("--updated-at.not <value>", `updated_at__not`).option("--updated-at.is-null <value>", `updated_at__isNull`).option("--updated-at.is-not-null <value>", `updated_at__isNotNull`).option("--updated-at.equals <value>", `updated_at__equals`).option("--updated-at.lt <value>", `updated_at__lt`).option("--updated-at.lte <value>", `updated_at__lte`).option("--updated-at.gt <value>", `updated_at__gt`).option("--updated-at.gte <value>", `updated_at__gte`).addHelpText("after", `
46697
+ `).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", `
45902
46698
  Examples:
45903
46699
  hyperline subscriptions list
45904
46700
  hyperline subscriptions list --take <take> --activation-strategy <activation_strategy>`).action(async (opts) => {
@@ -45920,10 +46716,6 @@ Examples:
45920
46716
  args.currency = opts.currency;
45921
46717
  if (opts["currency.not"] !== void 0)
45922
46718
  args.currency__not = opts["currency.not"];
45923
- if (opts["currency.isNull"] !== void 0)
45924
- args.currency__isNull = opts["currency.isNull"];
45925
- if (opts["currency.isNotNull"] !== void 0)
45926
- args.currency__isNotNull = opts["currency.isNotNull"];
45927
46719
  if (opts["currency.equals"] !== void 0)
45928
46720
  args.currency__equals = opts["currency.equals"];
45929
46721
  if (opts["currency.contains"] !== void 0)
@@ -45936,10 +46728,6 @@ Examples:
45936
46728
  args.plan_id = opts.planId;
45937
46729
  if (opts["planId.not"] !== void 0)
45938
46730
  args.plan_id__not = opts["planId.not"];
45939
- if (opts["planId.isNull"] !== void 0)
45940
- args.plan_id__isNull = opts["planId.isNull"];
45941
- if (opts["planId.isNotNull"] !== void 0)
45942
- args.plan_id__isNotNull = opts["planId.isNotNull"];
45943
46731
  if (opts["planId.equals"] !== void 0)
45944
46732
  args.plan_id__equals = opts["planId.equals"];
45945
46733
  if (opts["planId.contains"] !== void 0)
@@ -45948,14 +46736,14 @@ Examples:
45948
46736
  args.plan_id__startsWith = opts["planId.startsWith"];
45949
46737
  if (opts["planId.endWith"] !== void 0)
45950
46738
  args.plan_id__endWith = opts["planId.endWith"];
46739
+ if (opts["planId.isNull"] !== void 0)
46740
+ args.plan_id__isNull = opts["planId.isNull"];
46741
+ if (opts["planId.isNotNull"] !== void 0)
46742
+ args.plan_id__isNotNull = opts["planId.isNotNull"];
45951
46743
  if (opts.originalQuoteId !== void 0)
45952
46744
  args.original_quote_id = opts.originalQuoteId;
45953
46745
  if (opts["originalQuoteId.not"] !== void 0)
45954
46746
  args.original_quote_id__not = opts["originalQuoteId.not"];
45955
- if (opts["originalQuoteId.isNull"] !== void 0)
45956
- args.original_quote_id__isNull = opts["originalQuoteId.isNull"];
45957
- if (opts["originalQuoteId.isNotNull"] !== void 0)
45958
- args.original_quote_id__isNotNull = opts["originalQuoteId.isNotNull"];
45959
46747
  if (opts["originalQuoteId.equals"] !== void 0)
45960
46748
  args.original_quote_id__equals = opts["originalQuoteId.equals"];
45961
46749
  if (opts["originalQuoteId.contains"] !== void 0)
@@ -45964,14 +46752,14 @@ Examples:
45964
46752
  args.original_quote_id__startsWith = opts["originalQuoteId.startsWith"];
45965
46753
  if (opts["originalQuoteId.endWith"] !== void 0)
45966
46754
  args.original_quote_id__endWith = opts["originalQuoteId.endWith"];
46755
+ if (opts["originalQuoteId.isNull"] !== void 0)
46756
+ args.original_quote_id__isNull = opts["originalQuoteId.isNull"];
46757
+ if (opts["originalQuoteId.isNotNull"] !== void 0)
46758
+ args.original_quote_id__isNotNull = opts["originalQuoteId.isNotNull"];
45967
46759
  if (opts.customerId !== void 0)
45968
46760
  args.customer_id = opts.customerId;
45969
46761
  if (opts["customerId.not"] !== void 0)
45970
46762
  args.customer_id__not = opts["customerId.not"];
45971
- if (opts["customerId.isNull"] !== void 0)
45972
- args.customer_id__isNull = opts["customerId.isNull"];
45973
- if (opts["customerId.isNotNull"] !== void 0)
45974
- args.customer_id__isNotNull = opts["customerId.isNotNull"];
45975
46763
  if (opts["customerId.equals"] !== void 0)
45976
46764
  args.customer_id__equals = opts["customerId.equals"];
45977
46765
  if (opts["customerId.contains"] !== void 0)
@@ -45980,16 +46768,16 @@ Examples:
45980
46768
  args.customer_id__startsWith = opts["customerId.startsWith"];
45981
46769
  if (opts["customerId.endWith"] !== void 0)
45982
46770
  args.customer_id__endWith = opts["customerId.endWith"];
46771
+ if (opts["customerId.isNull"] !== void 0)
46772
+ args.customer_id__isNull = opts["customerId.isNull"];
46773
+ if (opts["customerId.isNotNull"] !== void 0)
46774
+ args.customer_id__isNotNull = opts["customerId.isNotNull"];
45983
46775
  if (opts.invoicingEntityId !== void 0)
45984
46776
  args.invoicing_entity_id = opts.invoicingEntityId;
45985
46777
  if (opts.purchaseOrder !== void 0)
45986
46778
  args.purchase_order = opts.purchaseOrder;
45987
46779
  if (opts["purchaseOrder.not"] !== void 0)
45988
46780
  args.purchase_order__not = opts["purchaseOrder.not"];
45989
- if (opts["purchaseOrder.isNull"] !== void 0)
45990
- args.purchase_order__isNull = opts["purchaseOrder.isNull"];
45991
- if (opts["purchaseOrder.isNotNull"] !== void 0)
45992
- args.purchase_order__isNotNull = opts["purchaseOrder.isNotNull"];
45993
46781
  if (opts["purchaseOrder.equals"] !== void 0)
45994
46782
  args.purchase_order__equals = opts["purchaseOrder.equals"];
45995
46783
  if (opts["purchaseOrder.contains"] !== void 0)
@@ -45998,6 +46786,10 @@ Examples:
45998
46786
  args.purchase_order__startsWith = opts["purchaseOrder.startsWith"];
45999
46787
  if (opts["purchaseOrder.endWith"] !== void 0)
46000
46788
  args.purchase_order__endWith = opts["purchaseOrder.endWith"];
46789
+ if (opts["purchaseOrder.isNull"] !== void 0)
46790
+ args.purchase_order__isNull = opts["purchaseOrder.isNull"];
46791
+ if (opts["purchaseOrder.isNotNull"] !== void 0)
46792
+ args.purchase_order__isNotNull = opts["purchaseOrder.isNotNull"];
46001
46793
  if (opts.customProperties !== void 0)
46002
46794
  args.custom_properties = opts.customProperties;
46003
46795
  if (opts.invoiceDrafts !== void 0)
@@ -46008,10 +46800,6 @@ Examples:
46008
46800
  args.updated_at = opts.updatedAt;
46009
46801
  if (opts["updatedAt.not"] !== void 0)
46010
46802
  args.updated_at__not = opts["updatedAt.not"];
46011
- if (opts["updatedAt.isNull"] !== void 0)
46012
- args.updated_at__isNull = opts["updatedAt.isNull"];
46013
- if (opts["updatedAt.isNotNull"] !== void 0)
46014
- args.updated_at__isNotNull = opts["updatedAt.isNotNull"];
46015
46803
  if (opts["updatedAt.equals"] !== void 0)
46016
46804
  args.updated_at__equals = opts["updatedAt.equals"];
46017
46805
  if (opts["updatedAt.lt"] !== void 0)
@@ -46022,6 +46810,34 @@ Examples:
46022
46810
  args.updated_at__gt = opts["updatedAt.gt"];
46023
46811
  if (opts["updatedAt.gte"] !== void 0)
46024
46812
  args.updated_at__gte = opts["updatedAt.gte"];
46813
+ if (opts.cancelAt !== void 0)
46814
+ args.cancel_at = opts.cancelAt;
46815
+ if (opts["cancelAt.not"] !== void 0)
46816
+ args.cancel_at__not = opts["cancelAt.not"];
46817
+ if (opts["cancelAt.equals"] !== void 0)
46818
+ args.cancel_at__equals = opts["cancelAt.equals"];
46819
+ if (opts["cancelAt.lt"] !== void 0)
46820
+ args.cancel_at__lt = opts["cancelAt.lt"];
46821
+ if (opts["cancelAt.lte"] !== void 0)
46822
+ args.cancel_at__lte = opts["cancelAt.lte"];
46823
+ if (opts["cancelAt.gt"] !== void 0)
46824
+ args.cancel_at__gt = opts["cancelAt.gt"];
46825
+ if (opts["cancelAt.gte"] !== void 0)
46826
+ args.cancel_at__gte = opts["cancelAt.gte"];
46827
+ if (opts["cancelAt.isNull"] !== void 0)
46828
+ args.cancel_at__isNull = opts["cancelAt.isNull"];
46829
+ if (opts["cancelAt.isNotNull"] !== void 0)
46830
+ args.cancel_at__isNotNull = opts["cancelAt.isNotNull"];
46831
+ if (opts["contractStart.gte"] !== void 0)
46832
+ args.contract_start__gte = opts["contractStart.gte"];
46833
+ if (opts["contractStart.lte"] !== void 0)
46834
+ args.contract_start__lte = opts["contractStart.lte"];
46835
+ if (opts["contractEnd.gte"] !== void 0)
46836
+ args.contract_end__gte = opts["contractEnd.gte"];
46837
+ if (opts["contractEnd.lte"] !== void 0)
46838
+ args.contract_end__lte = opts["contractEnd.lte"];
46839
+ if (opts.renewAutomatically !== void 0)
46840
+ args.renew_automatically = opts.renewAutomatically;
46025
46841
  if (opts.take !== void 0)
46026
46842
  args.take = Number(opts.take);
46027
46843
  if (opts.skip !== void 0)
@@ -46039,57 +46855,67 @@ Examples:
46039
46855
  "status__in",
46040
46856
  "currency",
46041
46857
  "currency__not",
46042
- "currency__isNull",
46043
- "currency__isNotNull",
46044
46858
  "currency__equals",
46045
46859
  "currency__contains",
46046
46860
  "currency__startsWith",
46047
46861
  "currency__endWith",
46048
46862
  "plan_id",
46049
46863
  "plan_id__not",
46050
- "plan_id__isNull",
46051
- "plan_id__isNotNull",
46052
46864
  "plan_id__equals",
46053
46865
  "plan_id__contains",
46054
46866
  "plan_id__startsWith",
46055
46867
  "plan_id__endWith",
46868
+ "plan_id__isNull",
46869
+ "plan_id__isNotNull",
46056
46870
  "original_quote_id",
46057
46871
  "original_quote_id__not",
46058
- "original_quote_id__isNull",
46059
- "original_quote_id__isNotNull",
46060
46872
  "original_quote_id__equals",
46061
46873
  "original_quote_id__contains",
46062
46874
  "original_quote_id__startsWith",
46063
46875
  "original_quote_id__endWith",
46876
+ "original_quote_id__isNull",
46877
+ "original_quote_id__isNotNull",
46064
46878
  "customer_id",
46065
46879
  "customer_id__not",
46066
- "customer_id__isNull",
46067
- "customer_id__isNotNull",
46068
46880
  "customer_id__equals",
46069
46881
  "customer_id__contains",
46070
46882
  "customer_id__startsWith",
46071
46883
  "customer_id__endWith",
46884
+ "customer_id__isNull",
46885
+ "customer_id__isNotNull",
46072
46886
  "invoicing_entity_id",
46073
46887
  "purchase_order",
46074
46888
  "purchase_order__not",
46075
- "purchase_order__isNull",
46076
- "purchase_order__isNotNull",
46077
46889
  "purchase_order__equals",
46078
46890
  "purchase_order__contains",
46079
46891
  "purchase_order__startsWith",
46080
46892
  "purchase_order__endWith",
46893
+ "purchase_order__isNull",
46894
+ "purchase_order__isNotNull",
46081
46895
  "custom_properties",
46082
46896
  "invoice_drafts",
46083
46897
  "integration_entity_id",
46084
46898
  "updated_at",
46085
46899
  "updated_at__not",
46086
- "updated_at__isNull",
46087
- "updated_at__isNotNull",
46088
46900
  "updated_at__equals",
46089
46901
  "updated_at__lt",
46090
46902
  "updated_at__lte",
46091
46903
  "updated_at__gt",
46092
- "updated_at__gte"
46904
+ "updated_at__gte",
46905
+ "cancel_at",
46906
+ "cancel_at__not",
46907
+ "cancel_at__equals",
46908
+ "cancel_at__lt",
46909
+ "cancel_at__lte",
46910
+ "cancel_at__gt",
46911
+ "cancel_at__gte",
46912
+ "cancel_at__isNull",
46913
+ "cancel_at__isNotNull",
46914
+ "contract_start__gte",
46915
+ "contract_start__lte",
46916
+ "contract_end__gte",
46917
+ "contract_end__lte",
46918
+ "renew_automatically"
46093
46919
  ]
46094
46920
  });
46095
46921
  });
@@ -46371,7 +47197,7 @@ Examples:
46371
47197
  // build/commands/generated/subscriptions-transitions.js
46372
47198
  function registerSubscriptions_TransitionsCommands(parent) {
46373
47199
  const resource = parent.command("subscriptions-transitions").description("Manage subscriptions > transitions");
46374
- 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", `
47200
+ 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", `
46375
47201
  Examples:
46376
47202
  hyperline subscriptions-transitions list-subscription-transitions
46377
47203
  hyperline subscriptions-transitions list-subscription-transitions --take <take> --status <status>`).action(async (opts) => {
@@ -46389,10 +47215,6 @@ Examples:
46389
47215
  args.source_subscription_id = opts.sourceSubscriptionId;
46390
47216
  if (opts["sourceSubscriptionId.not"] !== void 0)
46391
47217
  args.source_subscription_id__not = opts["sourceSubscriptionId.not"];
46392
- if (opts["sourceSubscriptionId.isNull"] !== void 0)
46393
- args.source_subscription_id__isNull = opts["sourceSubscriptionId.isNull"];
46394
- if (opts["sourceSubscriptionId.isNotNull"] !== void 0)
46395
- args.source_subscription_id__isNotNull = opts["sourceSubscriptionId.isNotNull"];
46396
47218
  if (opts["sourceSubscriptionId.equals"] !== void 0)
46397
47219
  args.source_subscription_id__equals = opts["sourceSubscriptionId.equals"];
46398
47220
  if (opts["sourceSubscriptionId.contains"] !== void 0)
@@ -46405,10 +47227,6 @@ Examples:
46405
47227
  args.base_subscription_id = opts.baseSubscriptionId;
46406
47228
  if (opts["baseSubscriptionId.not"] !== void 0)
46407
47229
  args.base_subscription_id__not = opts["baseSubscriptionId.not"];
46408
- if (opts["baseSubscriptionId.isNull"] !== void 0)
46409
- args.base_subscription_id__isNull = opts["baseSubscriptionId.isNull"];
46410
- if (opts["baseSubscriptionId.isNotNull"] !== void 0)
46411
- args.base_subscription_id__isNotNull = opts["baseSubscriptionId.isNotNull"];
46412
47230
  if (opts["baseSubscriptionId.equals"] !== void 0)
46413
47231
  args.base_subscription_id__equals = opts["baseSubscriptionId.equals"];
46414
47232
  if (opts["baseSubscriptionId.contains"] !== void 0)
@@ -46421,10 +47239,6 @@ Examples:
46421
47239
  args.target_subscription_id = opts.targetSubscriptionId;
46422
47240
  if (opts["targetSubscriptionId.not"] !== void 0)
46423
47241
  args.target_subscription_id__not = opts["targetSubscriptionId.not"];
46424
- if (opts["targetSubscriptionId.isNull"] !== void 0)
46425
- args.target_subscription_id__isNull = opts["targetSubscriptionId.isNull"];
46426
- if (opts["targetSubscriptionId.isNotNull"] !== void 0)
46427
- args.target_subscription_id__isNotNull = opts["targetSubscriptionId.isNotNull"];
46428
47242
  if (opts["targetSubscriptionId.equals"] !== void 0)
46429
47243
  args.target_subscription_id__equals = opts["targetSubscriptionId.equals"];
46430
47244
  if (opts["targetSubscriptionId.contains"] !== void 0)
@@ -46433,14 +47247,14 @@ Examples:
46433
47247
  args.target_subscription_id__startsWith = opts["targetSubscriptionId.startsWith"];
46434
47248
  if (opts["targetSubscriptionId.endWith"] !== void 0)
46435
47249
  args.target_subscription_id__endWith = opts["targetSubscriptionId.endWith"];
47250
+ if (opts["targetSubscriptionId.isNull"] !== void 0)
47251
+ args.target_subscription_id__isNull = opts["targetSubscriptionId.isNull"];
47252
+ if (opts["targetSubscriptionId.isNotNull"] !== void 0)
47253
+ args.target_subscription_id__isNotNull = opts["targetSubscriptionId.isNotNull"];
46436
47254
  if (opts.transitionDate !== void 0)
46437
47255
  args.transition_date = opts.transitionDate;
46438
47256
  if (opts["transitionDate.not"] !== void 0)
46439
47257
  args.transition_date__not = opts["transitionDate.not"];
46440
- if (opts["transitionDate.isNull"] !== void 0)
46441
- args.transition_date__isNull = opts["transitionDate.isNull"];
46442
- if (opts["transitionDate.isNotNull"] !== void 0)
46443
- args.transition_date__isNotNull = opts["transitionDate.isNotNull"];
46444
47258
  if (opts["transitionDate.equals"] !== void 0)
46445
47259
  args.transition_date__equals = opts["transitionDate.equals"];
46446
47260
  if (opts["transitionDate.lt"] !== void 0)
@@ -46451,14 +47265,14 @@ Examples:
46451
47265
  args.transition_date__gt = opts["transitionDate.gt"];
46452
47266
  if (opts["transitionDate.gte"] !== void 0)
46453
47267
  args.transition_date__gte = opts["transitionDate.gte"];
47268
+ if (opts["transitionDate.isNull"] !== void 0)
47269
+ args.transition_date__isNull = opts["transitionDate.isNull"];
47270
+ if (opts["transitionDate.isNotNull"] !== void 0)
47271
+ args.transition_date__isNotNull = opts["transitionDate.isNotNull"];
46454
47272
  if (opts.transitionedAt !== void 0)
46455
47273
  args.transitioned_at = opts.transitionedAt;
46456
47274
  if (opts["transitionedAt.not"] !== void 0)
46457
47275
  args.transitioned_at__not = opts["transitionedAt.not"];
46458
- if (opts["transitionedAt.isNull"] !== void 0)
46459
- args.transitioned_at__isNull = opts["transitionedAt.isNull"];
46460
- if (opts["transitionedAt.isNotNull"] !== void 0)
46461
- args.transitioned_at__isNotNull = opts["transitionedAt.isNotNull"];
46462
47276
  if (opts["transitionedAt.equals"] !== void 0)
46463
47277
  args.transitioned_at__equals = opts["transitionedAt.equals"];
46464
47278
  if (opts["transitionedAt.lt"] !== void 0)
@@ -46469,6 +47283,10 @@ Examples:
46469
47283
  args.transitioned_at__gt = opts["transitionedAt.gt"];
46470
47284
  if (opts["transitionedAt.gte"] !== void 0)
46471
47285
  args.transitioned_at__gte = opts["transitionedAt.gte"];
47286
+ if (opts["transitionedAt.isNull"] !== void 0)
47287
+ args.transitioned_at__isNull = opts["transitionedAt.isNull"];
47288
+ if (opts["transitionedAt.isNotNull"] !== void 0)
47289
+ args.transitioned_at__isNotNull = opts["transitionedAt.isNotNull"];
46472
47290
  if (opts.take !== void 0)
46473
47291
  args.take = Number(opts.take);
46474
47292
  if (opts.skip !== void 0)
@@ -46484,46 +47302,42 @@ Examples:
46484
47302
  "status__in",
46485
47303
  "source_subscription_id",
46486
47304
  "source_subscription_id__not",
46487
- "source_subscription_id__isNull",
46488
- "source_subscription_id__isNotNull",
46489
47305
  "source_subscription_id__equals",
46490
47306
  "source_subscription_id__contains",
46491
47307
  "source_subscription_id__startsWith",
46492
47308
  "source_subscription_id__endWith",
46493
47309
  "base_subscription_id",
46494
47310
  "base_subscription_id__not",
46495
- "base_subscription_id__isNull",
46496
- "base_subscription_id__isNotNull",
46497
47311
  "base_subscription_id__equals",
46498
47312
  "base_subscription_id__contains",
46499
47313
  "base_subscription_id__startsWith",
46500
47314
  "base_subscription_id__endWith",
46501
47315
  "target_subscription_id",
46502
47316
  "target_subscription_id__not",
46503
- "target_subscription_id__isNull",
46504
- "target_subscription_id__isNotNull",
46505
47317
  "target_subscription_id__equals",
46506
47318
  "target_subscription_id__contains",
46507
47319
  "target_subscription_id__startsWith",
46508
47320
  "target_subscription_id__endWith",
47321
+ "target_subscription_id__isNull",
47322
+ "target_subscription_id__isNotNull",
46509
47323
  "transition_date",
46510
47324
  "transition_date__not",
46511
- "transition_date__isNull",
46512
- "transition_date__isNotNull",
46513
47325
  "transition_date__equals",
46514
47326
  "transition_date__lt",
46515
47327
  "transition_date__lte",
46516
47328
  "transition_date__gt",
46517
47329
  "transition_date__gte",
47330
+ "transition_date__isNull",
47331
+ "transition_date__isNotNull",
46518
47332
  "transitioned_at",
46519
47333
  "transitioned_at__not",
46520
- "transitioned_at__isNull",
46521
- "transitioned_at__isNotNull",
46522
47334
  "transitioned_at__equals",
46523
47335
  "transitioned_at__lt",
46524
47336
  "transitioned_at__lte",
46525
47337
  "transitioned_at__gt",
46526
- "transitioned_at__gte"
47338
+ "transitioned_at__gte",
47339
+ "transitioned_at__isNull",
47340
+ "transitioned_at__isNotNull"
46527
47341
  ]
46528
47342
  });
46529
47343
  });
@@ -46601,7 +47415,7 @@ Examples:
46601
47415
  // build/commands/generated/taxes.js
46602
47416
  function registerTaxesCommands(parent) {
46603
47417
  const resource = parent.command("taxes").description("Manage taxes");
46604
- 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", `
47418
+ 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", `
46605
47419
  Examples:
46606
47420
  hyperline taxes list-tax-rates
46607
47421
  hyperline taxes list-tax-rates --take <take> --id <id>`).action(async (opts) => {
@@ -46615,10 +47429,6 @@ Examples:
46615
47429
  args.id = opts.id;
46616
47430
  if (opts["id.not"] !== void 0)
46617
47431
  args.id__not = opts["id.not"];
46618
- if (opts["id.isNull"] !== void 0)
46619
- args.id__isNull = opts["id.isNull"];
46620
- if (opts["id.isNotNull"] !== void 0)
46621
- args.id__isNotNull = opts["id.isNotNull"];
46622
47432
  if (opts["id.equals"] !== void 0)
46623
47433
  args.id__equals = opts["id.equals"];
46624
47434
  if (opts["id.contains"] !== void 0)
@@ -46631,10 +47441,6 @@ Examples:
46631
47441
  args.name = opts.name;
46632
47442
  if (opts["name.not"] !== void 0)
46633
47443
  args.name__not = opts["name.not"];
46634
- if (opts["name.isNull"] !== void 0)
46635
- args.name__isNull = opts["name.isNull"];
46636
- if (opts["name.isNotNull"] !== void 0)
46637
- args.name__isNotNull = opts["name.isNotNull"];
46638
47444
  if (opts["name.equals"] !== void 0)
46639
47445
  args.name__equals = opts["name.equals"];
46640
47446
  if (opts["name.contains"] !== void 0)
@@ -46643,14 +47449,14 @@ Examples:
46643
47449
  args.name__startsWith = opts["name.startsWith"];
46644
47450
  if (opts["name.endWith"] !== void 0)
46645
47451
  args.name__endWith = opts["name.endWith"];
47452
+ if (opts["name.isNull"] !== void 0)
47453
+ args.name__isNull = opts["name.isNull"];
47454
+ if (opts["name.isNotNull"] !== void 0)
47455
+ args.name__isNotNull = opts["name.isNotNull"];
46646
47456
  if (opts.description !== void 0)
46647
47457
  args.description = opts.description;
46648
47458
  if (opts["description.not"] !== void 0)
46649
47459
  args.description__not = opts["description.not"];
46650
- if (opts["description.isNull"] !== void 0)
46651
- args.description__isNull = opts["description.isNull"];
46652
- if (opts["description.isNotNull"] !== void 0)
46653
- args.description__isNotNull = opts["description.isNotNull"];
46654
47460
  if (opts["description.equals"] !== void 0)
46655
47461
  args.description__equals = opts["description.equals"];
46656
47462
  if (opts["description.contains"] !== void 0)
@@ -46659,14 +47465,14 @@ Examples:
46659
47465
  args.description__startsWith = opts["description.startsWith"];
46660
47466
  if (opts["description.endWith"] !== void 0)
46661
47467
  args.description__endWith = opts["description.endWith"];
47468
+ if (opts["description.isNull"] !== void 0)
47469
+ args.description__isNull = opts["description.isNull"];
47470
+ if (opts["description.isNotNull"] !== void 0)
47471
+ args.description__isNotNull = opts["description.isNotNull"];
46662
47472
  if (opts.invoicingEntityId !== void 0)
46663
47473
  args.invoicing_entity_id = opts.invoicingEntityId;
46664
47474
  if (opts["invoicingEntityId.not"] !== void 0)
46665
47475
  args.invoicing_entity_id__not = opts["invoicingEntityId.not"];
46666
- if (opts["invoicingEntityId.isNull"] !== void 0)
46667
- args.invoicing_entity_id__isNull = opts["invoicingEntityId.isNull"];
46668
- if (opts["invoicingEntityId.isNotNull"] !== void 0)
46669
- args.invoicing_entity_id__isNotNull = opts["invoicingEntityId.isNotNull"];
46670
47476
  if (opts["invoicingEntityId.equals"] !== void 0)
46671
47477
  args.invoicing_entity_id__equals = opts["invoicingEntityId.equals"];
46672
47478
  if (opts["invoicingEntityId.contains"] !== void 0)
@@ -46688,32 +47494,28 @@ Examples:
46688
47494
  "skip",
46689
47495
  "id",
46690
47496
  "id__not",
46691
- "id__isNull",
46692
- "id__isNotNull",
46693
47497
  "id__equals",
46694
47498
  "id__contains",
46695
47499
  "id__startsWith",
46696
47500
  "id__endWith",
46697
47501
  "name",
46698
47502
  "name__not",
46699
- "name__isNull",
46700
- "name__isNotNull",
46701
47503
  "name__equals",
46702
47504
  "name__contains",
46703
47505
  "name__startsWith",
46704
47506
  "name__endWith",
47507
+ "name__isNull",
47508
+ "name__isNotNull",
46705
47509
  "description",
46706
47510
  "description__not",
46707
- "description__isNull",
46708
- "description__isNotNull",
46709
47511
  "description__equals",
46710
47512
  "description__contains",
46711
47513
  "description__startsWith",
46712
47514
  "description__endWith",
47515
+ "description__isNull",
47516
+ "description__isNotNull",
46713
47517
  "invoicing_entity_id",
46714
47518
  "invoicing_entity_id__not",
46715
- "invoicing_entity_id__isNull",
46716
- "invoicing_entity_id__isNotNull",
46717
47519
  "invoicing_entity_id__equals",
46718
47520
  "invoicing_entity_id__contains",
46719
47521
  "invoicing_entity_id__startsWith",
@@ -47292,11 +48094,16 @@ function registerAllCommands(program2) {
47292
48094
  registerAi_BillingCommands(program2);
47293
48095
  registerAi_CostsCommands(program2);
47294
48096
  registerAnalyticsCommands(program2);
48097
+ registerApproval_WorkflowsCommands(program2);
47295
48098
  registerBank_AccountsCommands(program2);
48099
+ registerCatalogCommands(program2);
47296
48100
  registerCompaniesCommands(program2);
48101
+ registerContracts_ClausesCommands(program2);
48102
+ registerContracts_DocumentsCommands(program2);
47297
48103
  registerCouponsCommands(program2);
47298
48104
  registerCoupons_Promotion_CodesCommands(program2);
47299
48105
  registerCustomers_CreditsCommands(program2);
48106
+ registerCustomers_FeaturesCommands(program2);
47300
48107
  registerCustomers_Payment_MethodsCommands(program2);
47301
48108
  registerCustomers_AddressCommands(program2);
47302
48109
  registerCustomers_ShippingCommands(program2);
@@ -47305,12 +48112,14 @@ function registerAllCommands(program2) {
47305
48112
  registerOrganisationsCommands(program2);
47306
48113
  registerCustomers_SegmentsCommands(program2);
47307
48114
  registerExportsCommands(program2);
48115
+ registerFeaturesCommands(program2);
47308
48116
  registerFilesCommands(program2);
47309
48117
  registerInvoicesCommands(program2);
47310
48118
  registerInvoices_TransactionsCommands(program2);
47311
48119
  registerInvoicing_EntitiesCommands(program2);
47312
48120
  registerAi_MonitoringCommands(program2);
47313
48121
  registerPaymentsCommands(program2);
48122
+ registerProducts_FeaturesCommands(program2);
47314
48123
  registerProductsCommands(program2);
47315
48124
  registerPrice_ConfigurationsCommands(program2);
47316
48125
  registerQuotesCommands(program2);
@@ -63371,7 +64180,25 @@ var de = {
63371
64180
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Diese Position wurde f\xFCr den anteiligen Zeitraum in Rechnung gestellt",
63372
64181
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Betrag von {{amount}} f\xFCr den anteiligen Zeitraum nicht in Rechnung gestellt",
63373
64182
  "subscriptions.updates.updatePrices": "Preise f\xFCr {{productName}} aktualisieren",
63374
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 abgelaufenes Guthaben"
64183
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 abgelaufenes Guthaben",
64184
+ "quotes.blockers.quote_not_draft": "Setzen Sie das Angebot auf Entwurf zur\xFCck, bevor Sie seine Konfigurationen \xE4ndern",
64185
+ "quotes.blockers.quote_expiration_date_missing": "Das Angebot muss ein Ablaufdatum haben, um zur Genehmigung gesendet zu werden",
64186
+ "quotes.blockers.quote_configuration_missing": "F\xFCgen Sie mindestens eine Konfiguration hinzu, bevor Sie das Angebot einreichen",
64187
+ "quotes.blockers.quote_configuration_subscription_update_customer": "Abonnement\xE4nderungen m\xFCssen den Kunden des Angebots verwenden",
64188
+ "quotes.blockers.quote_configuration_multiple_configurations_disabled": "Aktivieren Sie mehrere Konfigurationen, bevor Sie einen untergeordneten Kunden zuweisen",
64189
+ "quotes.blockers.quote_configuration_customer_not_child": "W\xE4hlen Sie einen untergeordneten Kunden des Angebotskunden",
64190
+ "quotes.blockers.quote_configuration_type_mismatch": "Die verkn\xFCpfte Konfiguration entspricht nicht dem Konfigurationstyp",
64191
+ "quotes.blockers.quote_configuration_not_draft": "W\xE4hlen Sie eine Konfiguration im Entwurf",
64192
+ "quotes.blockers.quote_configuration_customer_mismatch": "Die Konfiguration muss zum Kunden der Konfiguration geh\xF6ren",
64193
+ "quotes.blockers.quote_configuration_currency_mismatch": "Die Konfiguration muss die W\xE4hrung des Angebots verwenden",
64194
+ "quotes.blockers.quote_configuration_invoicing_entity_mismatch": "Die Rechnung muss die Rechnungsstellungseinheit des Angebots verwenden",
64195
+ "quotes.blockers.quote_configuration_already_linked": "Die Konfiguration ist bereits mit einer Angebotskonfiguration verkn\xFCpft",
64196
+ "quotes.blockers.quote_configuration_not_subscription_update": "W\xE4hlen Sie eine Konfiguration f\xFCr eine Abonnement\xE4nderung",
64197
+ "quotes.blockers.quote_configuration_not_new_subscription": "W\xE4hlen Sie eine Konfiguration f\xFCr ein neues Abonnement",
64198
+ "quotes.blockers.quote_configuration_duplicate_subscription_update": "Ein Abonnement kann in einem Angebot nur einmal ge\xE4ndert werden",
64199
+ "quotes.blockers.quote_draft_invoice_missing": "Das Angebot muss eine Rechnung im Entwurf haben, um abgeschlossen zu werden",
64200
+ "quotes.blockers.quote_draft_subscription_missing": "Das Angebot muss ein Abonnement im Entwurf haben, um abgeschlossen zu werden",
64201
+ "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"
63375
64202
  };
63376
64203
 
63377
64204
  // ../hyperline-i18n/build/locales/en.js
@@ -63421,7 +64248,25 @@ var en = {
63421
64248
  "accounting.revrec.closedPeriodFallbackNote": " (posted to next open period \u2014 target accounting period closed; original date {{originalDate}})",
63422
64249
  "einvoicing.paymentProcessed": "Payment processed",
63423
64250
  "einvoicing.paymentReceived": "Payment received",
63424
- "einvoicing.paymentFromWallet": "Payment from wallet"
64251
+ "einvoicing.paymentFromWallet": "Payment from wallet",
64252
+ "quotes.blockers.quote_not_draft": "Redraft the quote before changing its configurations",
64253
+ "quotes.blockers.quote_expiration_date_missing": "Quote must have an expiration date to be sent for approval",
64254
+ "quotes.blockers.quote_configuration_missing": "Add at least one configuration before submitting the quote",
64255
+ "quotes.blockers.quote_configuration_subscription_update_customer": "Subscription updates must use the quote customer",
64256
+ "quotes.blockers.quote_configuration_multiple_configurations_disabled": "Enable multiple configurations before assigning a child customer",
64257
+ "quotes.blockers.quote_configuration_customer_not_child": "Select a child customer of the quote customer",
64258
+ "quotes.blockers.quote_configuration_type_mismatch": "The linked configuration does not match the configuration type",
64259
+ "quotes.blockers.quote_configuration_not_draft": "Select a draft configuration",
64260
+ "quotes.blockers.quote_configuration_customer_mismatch": "The configuration must belong to the configuration customer",
64261
+ "quotes.blockers.quote_configuration_currency_mismatch": "The configuration must use the quote currency",
64262
+ "quotes.blockers.quote_configuration_invoicing_entity_mismatch": "The invoice must use the quote invoicing entity",
64263
+ "quotes.blockers.quote_configuration_already_linked": "The configuration is already linked to a quote configuration",
64264
+ "quotes.blockers.quote_configuration_not_subscription_update": "Select a subscription update configuration",
64265
+ "quotes.blockers.quote_configuration_not_new_subscription": "Select a new subscription configuration",
64266
+ "quotes.blockers.quote_configuration_duplicate_subscription_update": "A subscription can only be updated once in a quote",
64267
+ "quotes.blockers.quote_draft_invoice_missing": "Quote must have a draft invoice to be finalized",
64268
+ "quotes.blockers.quote_draft_subscription_missing": "Quote must have a draft subscription to be finalized",
64269
+ "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"
63425
64270
  };
63426
64271
 
63427
64272
  // ../hyperline-i18n/build/locales/es.js
@@ -63471,7 +64316,25 @@ var es = {
63471
64316
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Esta l\xEDnea ha sido facturada para el per\xEDodo prorrateado",
63472
64317
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Importe de {{amount}} no facturado para el per\xEDodo prorrateado",
63473
64318
  "subscriptions.updates.updatePrices": "Actualizar precios para {{productName}}",
63474
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo caducado"
64319
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo caducado",
64320
+ "quotes.blockers.quote_not_draft": "Vuelve a poner el presupuesto en borrador antes de cambiar sus configuraciones",
64321
+ "quotes.blockers.quote_expiration_date_missing": "El presupuesto debe tener una fecha de vencimiento para enviarse a aprobaci\xF3n",
64322
+ "quotes.blockers.quote_configuration_missing": "A\xF1ade al menos una configuraci\xF3n antes de enviar el presupuesto",
64323
+ "quotes.blockers.quote_configuration_subscription_update_customer": "Las actualizaciones de suscripci\xF3n deben usar el cliente del presupuesto",
64324
+ "quotes.blockers.quote_configuration_multiple_configurations_disabled": "Activa las configuraciones m\xFAltiples antes de asignar un cliente hijo",
64325
+ "quotes.blockers.quote_configuration_customer_not_child": "Selecciona un cliente hijo del cliente del presupuesto",
64326
+ "quotes.blockers.quote_configuration_type_mismatch": "La configuraci\xF3n vinculada no coincide con el tipo de configuraci\xF3n",
64327
+ "quotes.blockers.quote_configuration_not_draft": "Selecciona una configuraci\xF3n en borrador",
64328
+ "quotes.blockers.quote_configuration_customer_mismatch": "La configuraci\xF3n debe pertenecer al cliente de la configuraci\xF3n",
64329
+ "quotes.blockers.quote_configuration_currency_mismatch": "La configuraci\xF3n debe usar la moneda del presupuesto",
64330
+ "quotes.blockers.quote_configuration_invoicing_entity_mismatch": "La factura debe usar la entidad de facturaci\xF3n del presupuesto",
64331
+ "quotes.blockers.quote_configuration_already_linked": "La configuraci\xF3n ya est\xE1 vinculada a una configuraci\xF3n de presupuesto",
64332
+ "quotes.blockers.quote_configuration_not_subscription_update": "Selecciona una configuraci\xF3n de actualizaci\xF3n de suscripci\xF3n",
64333
+ "quotes.blockers.quote_configuration_not_new_subscription": "Selecciona una configuraci\xF3n de nueva suscripci\xF3n",
64334
+ "quotes.blockers.quote_configuration_duplicate_subscription_update": "Una suscripci\xF3n solo puede actualizarse una vez en un presupuesto",
64335
+ "quotes.blockers.quote_draft_invoice_missing": "El presupuesto debe tener una factura en borrador para finalizarse",
64336
+ "quotes.blockers.quote_draft_subscription_missing": "El presupuesto debe tener una suscripci\xF3n en borrador para finalizarse",
64337
+ "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"
63475
64338
  };
63476
64339
 
63477
64340
  // ../hyperline-i18n/build/locales/fr.js
@@ -63521,7 +64384,25 @@ var fr = {
63521
64384
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Cette ligne a \xE9t\xE9 factur\xE9e pour la p\xE9riode proratis\xE9e",
63522
64385
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Montant de {{amount}} non factur\xE9 pour la p\xE9riode proratis\xE9e",
63523
64386
  "subscriptions.updates.updatePrices": "Mise \xE0 jour des prix pour {{productName}}",
63524
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 solde expir\xE9"
64387
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 solde expir\xE9",
64388
+ "quotes.blockers.quote_not_draft": "Repassez le devis en brouillon avant de modifier ses configurations",
64389
+ "quotes.blockers.quote_expiration_date_missing": "Le devis doit avoir une date d'expiration pour \xEAtre envoy\xE9 en validation",
64390
+ "quotes.blockers.quote_configuration_missing": "Ajoutez au moins une configuration avant de soumettre le devis",
64391
+ "quotes.blockers.quote_configuration_subscription_update_customer": "Les mises \xE0 jour d'abonnement doivent utiliser le client du devis",
64392
+ "quotes.blockers.quote_configuration_multiple_configurations_disabled": "Activez les configurations multiples avant d'assigner un client enfant",
64393
+ "quotes.blockers.quote_configuration_customer_not_child": "S\xE9lectionnez un client enfant du client du devis",
64394
+ "quotes.blockers.quote_configuration_type_mismatch": "La configuration li\xE9e ne correspond pas au type de configuration",
64395
+ "quotes.blockers.quote_configuration_not_draft": "S\xE9lectionnez une configuration en brouillon",
64396
+ "quotes.blockers.quote_configuration_customer_mismatch": "La configuration doit appartenir au client de la configuration",
64397
+ "quotes.blockers.quote_configuration_currency_mismatch": "La configuration doit utiliser la devise du devis",
64398
+ "quotes.blockers.quote_configuration_invoicing_entity_mismatch": "La facture doit utiliser l'entit\xE9 de facturation du devis",
64399
+ "quotes.blockers.quote_configuration_already_linked": "La configuration est d\xE9j\xE0 li\xE9e \xE0 une configuration de devis",
64400
+ "quotes.blockers.quote_configuration_not_subscription_update": "S\xE9lectionnez une configuration de mise \xE0 jour d'abonnement",
64401
+ "quotes.blockers.quote_configuration_not_new_subscription": "S\xE9lectionnez une configuration de nouvel abonnement",
64402
+ "quotes.blockers.quote_configuration_duplicate_subscription_update": "Un abonnement ne peut \xEAtre mis \xE0 jour qu'une seule fois dans un devis",
64403
+ "quotes.blockers.quote_draft_invoice_missing": "Le devis doit avoir une facture en brouillon pour \xEAtre finalis\xE9",
64404
+ "quotes.blockers.quote_draft_subscription_missing": "Le devis doit avoir un abonnement en brouillon pour \xEAtre finalis\xE9",
64405
+ "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"
63525
64406
  };
63526
64407
 
63527
64408
  // ../hyperline-i18n/build/locales/it.js
@@ -63571,7 +64452,25 @@ var it = {
63571
64452
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Questa voce \xE8 stata fatturata per il periodo proporzionato",
63572
64453
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Importo di {{amount}} non fatturato per il periodo proporzionato",
63573
64454
  "subscriptions.updates.updatePrices": "Aggiorna prezzi per {{productName}}",
63574
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo scaduto"
64455
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo scaduto",
64456
+ "quotes.blockers.quote_not_draft": "Riporta il preventivo in bozza prima di modificarne le configurazioni",
64457
+ "quotes.blockers.quote_expiration_date_missing": "Il preventivo deve avere una data di scadenza per essere inviato per approvazione",
64458
+ "quotes.blockers.quote_configuration_missing": "Aggiungi almeno una configurazione prima di inviare il preventivo",
64459
+ "quotes.blockers.quote_configuration_subscription_update_customer": "Gli aggiornamenti dell'abbonamento devono usare il cliente del preventivo",
64460
+ "quotes.blockers.quote_configuration_multiple_configurations_disabled": "Attiva le configurazioni multiple prima di assegnare un cliente figlio",
64461
+ "quotes.blockers.quote_configuration_customer_not_child": "Seleziona un cliente figlio del cliente del preventivo",
64462
+ "quotes.blockers.quote_configuration_type_mismatch": "La configurazione collegata non corrisponde al tipo di configurazione",
64463
+ "quotes.blockers.quote_configuration_not_draft": "Seleziona una configurazione in bozza",
64464
+ "quotes.blockers.quote_configuration_customer_mismatch": "La configurazione deve appartenere al cliente della configurazione",
64465
+ "quotes.blockers.quote_configuration_currency_mismatch": "La configurazione deve usare la valuta del preventivo",
64466
+ "quotes.blockers.quote_configuration_invoicing_entity_mismatch": "La fattura deve usare l'entit\xE0 di fatturazione del preventivo",
64467
+ "quotes.blockers.quote_configuration_already_linked": "La configurazione \xE8 gi\xE0 collegata a una configurazione del preventivo",
64468
+ "quotes.blockers.quote_configuration_not_subscription_update": "Seleziona una configurazione di aggiornamento dell'abbonamento",
64469
+ "quotes.blockers.quote_configuration_not_new_subscription": "Seleziona una configurazione di nuovo abbonamento",
64470
+ "quotes.blockers.quote_configuration_duplicate_subscription_update": "Un abbonamento pu\xF2 essere aggiornato una sola volta in un preventivo",
64471
+ "quotes.blockers.quote_draft_invoice_missing": "Il preventivo deve avere una fattura in bozza per essere finalizzato",
64472
+ "quotes.blockers.quote_draft_subscription_missing": "Il preventivo deve avere un abbonamento in bozza per essere finalizzato",
64473
+ "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"
63575
64474
  };
63576
64475
 
63577
64476
  // ../hyperline-i18n/build/locales/lt.js
@@ -63621,7 +64520,25 @@ var lt = {
63621
64520
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "U\u017E \u0161i\u0105 eilut\u0119 proporcingam laikotarpiui s\u0105skaita fakt\u016Bra i\u0161ra\u0161yta",
63622
64521
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Proporcingam laikotarpiui nei\u0161ra\u0161yta {{amount}} suma",
63623
64522
  "subscriptions.updates.updatePrices": "Atnaujinti {{productName}} kainas",
63624
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 nebegaliojantis likutis"
64523
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 nebegaliojantis likutis",
64524
+ "quotes.blockers.quote_not_draft": "Prie\u0161 keisdami pasi\u016Blymo konfig\u016Bracijas, gr\u0105\u017Einkite j\u012F \u012F juodra\u0161t\u012F",
64525
+ "quotes.blockers.quote_expiration_date_missing": "Pasi\u016Blymas turi tur\u0117ti galiojimo pabaigos dat\u0105, kad b\u016Bt\u0173 i\u0161si\u0173stas tvirtinti",
64526
+ "quotes.blockers.quote_configuration_missing": "Prie\u0161 pateikdami pasi\u016Blym\u0105, prid\u0117kite bent vien\u0105 konfig\u016Bracij\u0105",
64527
+ "quotes.blockers.quote_configuration_subscription_update_customer": "Prenumeratos atnaujinimai turi naudoti pasi\u016Blymo klient\u0105",
64528
+ "quotes.blockers.quote_configuration_multiple_configurations_disabled": "Prie\u0161 priskirdami antrin\u012F klient\u0105, \u012Fjunkite kelias konfig\u016Bracijas",
64529
+ "quotes.blockers.quote_configuration_customer_not_child": "Pasirinkite pasi\u016Blymo kliento antrin\u012F klient\u0105",
64530
+ "quotes.blockers.quote_configuration_type_mismatch": "Susieta konfig\u016Bracija neatitinka konfig\u016Bracijos tipo",
64531
+ "quotes.blockers.quote_configuration_not_draft": "Pasirinkite konfig\u016Bracijos juodra\u0161t\u012F",
64532
+ "quotes.blockers.quote_configuration_customer_mismatch": "Konfig\u016Bracija turi priklausyti konfig\u016Bracijos klientui",
64533
+ "quotes.blockers.quote_configuration_currency_mismatch": "Konfig\u016Bracija turi naudoti pasi\u016Blymo valiut\u0105",
64534
+ "quotes.blockers.quote_configuration_invoicing_entity_mismatch": "S\u0105skaita fakt\u016Bra turi naudoti pasi\u016Blymo s\u0105skait\u0173 i\u0161ra\u0161ymo subjekt\u0105",
64535
+ "quotes.blockers.quote_configuration_already_linked": "Konfig\u016Bracija jau susieta su pasi\u016Blymo konfig\u016Bracija",
64536
+ "quotes.blockers.quote_configuration_not_subscription_update": "Pasirinkite prenumeratos atnaujinimo konfig\u016Bracij\u0105",
64537
+ "quotes.blockers.quote_configuration_not_new_subscription": "Pasirinkite naujos prenumeratos konfig\u016Bracij\u0105",
64538
+ "quotes.blockers.quote_configuration_duplicate_subscription_update": "Prenumerat\u0105 pasi\u016Blyme galima atnaujinti tik vien\u0105 kart\u0105",
64539
+ "quotes.blockers.quote_draft_invoice_missing": "Pasi\u016Blymas turi tur\u0117ti s\u0105skaitos fakt\u016Bros juodra\u0161t\u012F, kad b\u016Bt\u0173 u\u017Ebaigtas",
64540
+ "quotes.blockers.quote_draft_subscription_missing": "Pasi\u016Blymas turi tur\u0117ti prenumeratos juodra\u0161t\u012F, kad b\u016Bt\u0173 u\u017Ebaigtas",
64541
+ "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"
63625
64542
  };
63626
64543
 
63627
64544
  // ../hyperline-i18n/build/locales/nl.js
@@ -63671,7 +64588,25 @@ var nl = {
63671
64588
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Deze regel is gefactureerd voor de geproportioneerde periode",
63672
64589
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Bedrag van {{amount}} niet gefactureerd voor de geproportioneerde periode",
63673
64590
  "subscriptions.updates.updatePrices": "Prijzen bijwerken voor {{productName}}",
63674
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 verlopen saldo"
64591
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 verlopen saldo",
64592
+ "quotes.blockers.quote_not_draft": "Zet de offerte terug naar concept voordat u de configuraties wijzigt",
64593
+ "quotes.blockers.quote_expiration_date_missing": "De offerte moet een vervaldatum hebben om ter goedkeuring te worden verzonden",
64594
+ "quotes.blockers.quote_configuration_missing": "Voeg ten minste \xE9\xE9n configuratie toe voordat u de offerte indient",
64595
+ "quotes.blockers.quote_configuration_subscription_update_customer": "Abonnementswijzigingen moeten de klant van de offerte gebruiken",
64596
+ "quotes.blockers.quote_configuration_multiple_configurations_disabled": "Schakel meerdere configuraties in voordat u een onderliggende klant toewijst",
64597
+ "quotes.blockers.quote_configuration_customer_not_child": "Selecteer een onderliggende klant van de offerteklant",
64598
+ "quotes.blockers.quote_configuration_type_mismatch": "De gekoppelde configuratie komt niet overeen met het configuratietype",
64599
+ "quotes.blockers.quote_configuration_not_draft": "Selecteer een conceptconfiguratie",
64600
+ "quotes.blockers.quote_configuration_customer_mismatch": "De configuratie moet bij de klant van de configuratie horen",
64601
+ "quotes.blockers.quote_configuration_currency_mismatch": "De configuratie moet de valuta van de offerte gebruiken",
64602
+ "quotes.blockers.quote_configuration_invoicing_entity_mismatch": "De factuur moet de facturatie-entiteit van de offerte gebruiken",
64603
+ "quotes.blockers.quote_configuration_already_linked": "De configuratie is al gekoppeld aan een offerteconfiguratie",
64604
+ "quotes.blockers.quote_configuration_not_subscription_update": "Selecteer een configuratie voor een abonnementswijziging",
64605
+ "quotes.blockers.quote_configuration_not_new_subscription": "Selecteer een configuratie voor een nieuw abonnement",
64606
+ "quotes.blockers.quote_configuration_duplicate_subscription_update": "Een abonnement kan maar \xE9\xE9n keer per offerte worden gewijzigd",
64607
+ "quotes.blockers.quote_draft_invoice_missing": "De offerte moet een conceptfactuur hebben om te worden afgerond",
64608
+ "quotes.blockers.quote_draft_subscription_missing": "De offerte moet een conceptabonnement hebben om te worden afgerond",
64609
+ "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"
63675
64610
  };
63676
64611
 
63677
64612
  // ../hyperline-i18n/build/locales/pl.js
@@ -63721,7 +64656,25 @@ var pl = {
63721
64656
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Ta pozycja zosta\u0142a zafakturowana za okres proporcjonalny",
63722
64657
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Kwota {{amount}} niefakturowana za okres proporcjonalny",
63723
64658
  "subscriptions.updates.updatePrices": "Aktualizuj ceny dla {{productName}}",
63724
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 wygas\u0142e saldo"
64659
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 wygas\u0142e saldo",
64660
+ "quotes.blockers.quote_not_draft": "Przywr\xF3\u0107 ofert\u0119 do wersji roboczej przed zmian\u0105 jej konfiguracji",
64661
+ "quotes.blockers.quote_expiration_date_missing": "Oferta musi mie\u0107 dat\u0119 wyga\u015Bni\u0119cia, aby zosta\u0142a wys\u0142ana do zatwierdzenia",
64662
+ "quotes.blockers.quote_configuration_missing": "Dodaj co najmniej jedn\u0105 konfiguracj\u0119 przed przes\u0142aniem oferty",
64663
+ "quotes.blockers.quote_configuration_subscription_update_customer": "Aktualizacje subskrypcji musz\u0105 u\u017Cywa\u0107 klienta oferty",
64664
+ "quotes.blockers.quote_configuration_multiple_configurations_disabled": "W\u0142\u0105cz wiele konfiguracji przed przypisaniem klienta podrz\u0119dnego",
64665
+ "quotes.blockers.quote_configuration_customer_not_child": "Wybierz klienta podrz\u0119dnego klienta oferty",
64666
+ "quotes.blockers.quote_configuration_type_mismatch": "Powi\u0105zana konfiguracja nie odpowiada typowi konfiguracji",
64667
+ "quotes.blockers.quote_configuration_not_draft": "Wybierz konfiguracj\u0119 w wersji roboczej",
64668
+ "quotes.blockers.quote_configuration_customer_mismatch": "Konfiguracja musi nale\u017Ce\u0107 do klienta konfiguracji",
64669
+ "quotes.blockers.quote_configuration_currency_mismatch": "Konfiguracja musi u\u017Cywa\u0107 waluty oferty",
64670
+ "quotes.blockers.quote_configuration_invoicing_entity_mismatch": "Faktura musi u\u017Cywa\u0107 podmiotu fakturuj\u0105cego oferty",
64671
+ "quotes.blockers.quote_configuration_already_linked": "Konfiguracja jest ju\u017C powi\u0105zana z konfiguracj\u0105 oferty",
64672
+ "quotes.blockers.quote_configuration_not_subscription_update": "Wybierz konfiguracj\u0119 aktualizacji subskrypcji",
64673
+ "quotes.blockers.quote_configuration_not_new_subscription": "Wybierz konfiguracj\u0119 nowej subskrypcji",
64674
+ "quotes.blockers.quote_configuration_duplicate_subscription_update": "Subskrypcj\u0119 mo\u017Cna zaktualizowa\u0107 w ofercie tylko raz",
64675
+ "quotes.blockers.quote_draft_invoice_missing": "Oferta musi mie\u0107 faktur\u0119 w wersji roboczej, aby zosta\u0142a sfinalizowana",
64676
+ "quotes.blockers.quote_draft_subscription_missing": "Oferta musi mie\u0107 subskrypcj\u0119 w wersji roboczej, aby zosta\u0142a sfinalizowana",
64677
+ "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"
63725
64678
  };
63726
64679
 
63727
64680
  // ../hyperline-i18n/build/locales/pt.js
@@ -63771,7 +64724,25 @@ var pt = {
63771
64724
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Esta linha foi faturada para o per\xEDodo proporcional",
63772
64725
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Valor de {{amount}} n\xE3o faturado para o per\xEDodo proporcional",
63773
64726
  "subscriptions.updates.updatePrices": "Atualizar pre\xE7os para {{productName}}",
63774
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo expirado"
64727
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo expirado",
64728
+ "quotes.blockers.quote_not_draft": "Volte a colocar o or\xE7amento em rascunho antes de alterar as suas configura\xE7\xF5es",
64729
+ "quotes.blockers.quote_expiration_date_missing": "O or\xE7amento deve ter uma data de expira\xE7\xE3o para ser enviado para aprova\xE7\xE3o",
64730
+ "quotes.blockers.quote_configuration_missing": "Adicione pelo menos uma configura\xE7\xE3o antes de submeter o or\xE7amento",
64731
+ "quotes.blockers.quote_configuration_subscription_update_customer": "As atualiza\xE7\xF5es de subscri\xE7\xE3o devem usar o cliente do or\xE7amento",
64732
+ "quotes.blockers.quote_configuration_multiple_configurations_disabled": "Ative as configura\xE7\xF5es m\xFAltiplas antes de atribuir um cliente filho",
64733
+ "quotes.blockers.quote_configuration_customer_not_child": "Selecione um cliente filho do cliente do or\xE7amento",
64734
+ "quotes.blockers.quote_configuration_type_mismatch": "A configura\xE7\xE3o associada n\xE3o corresponde ao tipo de configura\xE7\xE3o",
64735
+ "quotes.blockers.quote_configuration_not_draft": "Selecione uma configura\xE7\xE3o em rascunho",
64736
+ "quotes.blockers.quote_configuration_customer_mismatch": "A configura\xE7\xE3o deve pertencer ao cliente da configura\xE7\xE3o",
64737
+ "quotes.blockers.quote_configuration_currency_mismatch": "A configura\xE7\xE3o deve usar a moeda do or\xE7amento",
64738
+ "quotes.blockers.quote_configuration_invoicing_entity_mismatch": "A fatura deve usar a entidade de fatura\xE7\xE3o do or\xE7amento",
64739
+ "quotes.blockers.quote_configuration_already_linked": "A configura\xE7\xE3o j\xE1 est\xE1 associada a uma configura\xE7\xE3o de or\xE7amento",
64740
+ "quotes.blockers.quote_configuration_not_subscription_update": "Selecione uma configura\xE7\xE3o de atualiza\xE7\xE3o de subscri\xE7\xE3o",
64741
+ "quotes.blockers.quote_configuration_not_new_subscription": "Selecione uma configura\xE7\xE3o de nova subscri\xE7\xE3o",
64742
+ "quotes.blockers.quote_configuration_duplicate_subscription_update": "Uma subscri\xE7\xE3o s\xF3 pode ser atualizada uma vez num or\xE7amento",
64743
+ "quotes.blockers.quote_draft_invoice_missing": "O or\xE7amento deve ter uma fatura em rascunho para ser finalizado",
64744
+ "quotes.blockers.quote_draft_subscription_missing": "O or\xE7amento deve ter uma subscri\xE7\xE3o em rascunho para ser finalizado",
64745
+ "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"
63775
64746
  };
63776
64747
 
63777
64748
  // ../hyperline-i18n/build/language.js
@@ -63952,16 +64923,19 @@ var REDACTED_KEY_NAMES = /* @__PURE__ */ new Set([
63952
64923
  "credentials",
63953
64924
  "iban",
63954
64925
  "idtoken",
64926
+ "launchticket",
63955
64927
  "privatekey",
63956
64928
  "publictoken",
63957
64929
  "refreshtoken",
64930
+ // A workflow secret's value (core/workflows secrets).
64931
+ "secretvalue",
63958
64932
  "sessiontoken",
63959
64933
  "token",
63960
64934
  "tokenid",
63961
64935
  "verificationcode"
63962
64936
  ]);
63963
64937
  var REDACTED_KEY_SUFFIX_PATTERN = /(secret|password|passphrase|apikey)$/;
63964
- var REDACTED_KEY_CANDIDATE_PATTERN = /token|key|secret|pass|assertion|verifier|credential|authorization|cookie|iban|cardnumber|code|connectionurl/i;
64938
+ var REDACTED_KEY_CANDIDATE_PATTERN = /token|ticket|key|secret|pass|assertion|verifier|credential|authorization|cookie|iban|cardnumber|code|connectionurl/i;
63965
64939
  var URL_ONLY_REDACTED_KEYS = /* @__PURE__ */ new Set(["key"]);
63966
64940
  var OAUTH_CODE_KEY = "code";
63967
64941
  var OAUTH_CODE_CONTEXT_KEYS = ["state", "grant_type"];
@@ -66723,69 +67697,6 @@ var Decimal = P.constructor = clone2(DEFAULTS);
66723
67697
  LN10 = new Decimal(LN10);
66724
67698
  PI = new Decimal(PI);
66725
67699
 
66726
- // ../hyperline-lib/build/utils/config/usStates.js
66727
- var usStates = [
66728
- "AA",
66729
- "AE",
66730
- "AK",
66731
- "AL",
66732
- "AP",
66733
- "AR",
66734
- "AS",
66735
- "AZ",
66736
- "CA",
66737
- "CO",
66738
- "CT",
66739
- "DC",
66740
- "DE",
66741
- "FL",
66742
- "GA",
66743
- "GU",
66744
- "HI",
66745
- "IA",
66746
- "ID",
66747
- "IL",
66748
- "IN",
66749
- "KS",
66750
- "KY",
66751
- "LA",
66752
- "MA",
66753
- "MD",
66754
- "ME",
66755
- "MI",
66756
- "MN",
66757
- "MO",
66758
- "MP",
66759
- "MS",
66760
- "MT",
66761
- "NC",
66762
- "ND",
66763
- "NE",
66764
- "NH",
66765
- "NJ",
66766
- "NM",
66767
- "NV",
66768
- "NY",
66769
- "OH",
66770
- "OK",
66771
- "OR",
66772
- "PA",
66773
- "PR",
66774
- "RI",
66775
- "SC",
66776
- "SD",
66777
- "TN",
66778
- "TX",
66779
- "UT",
66780
- "VA",
66781
- "VI",
66782
- "VT",
66783
- "WA",
66784
- "WI",
66785
- "WV",
66786
- "WY"
66787
- ];
66788
-
66789
67700
  // ../hyperline-lib/build/utils/dates.js
66790
67701
  var import_shared2 = __toESM(require_shared(), 1);
66791
67702
  var PERIOD_BOUND_DRIFT_TOLERANCE_MS = 2 * 60 * 1e3;
@@ -66810,7 +67721,8 @@ var dateRealignmentModeSchema = external_exports.enum([
66810
67721
  "utc_midnight_import",
66811
67722
  "dst_hour_drift",
66812
67723
  "month_start_drift",
66813
- "manual_phase_end_midnight"
67724
+ "manual_phase_end_midnight",
67725
+ "customer_timezone_change"
66814
67726
  ]).default("utc_midnight_import");
66815
67727
  var DST_HOUR_SHIFT_BY_LOCAL_MILLISECOND_OF_DAY = /* @__PURE__ */ new Map([
66816
67728
  [23 * MILLISECONDS_PER_HOUR, MILLISECONDS_PER_HOUR],
@@ -66819,8 +67731,16 @@ var DST_HOUR_SHIFT_BY_LOCAL_MILLISECOND_OF_DAY = /* @__PURE__ */ new Map([
66819
67731
  [MILLISECONDS_PER_HOUR - 1, -MILLISECONDS_PER_HOUR]
66820
67732
  ]);
66821
67733
 
67734
+ // ../hyperline-lib/build/utils/overviewPeriods.js
67735
+ var OverviewPeriodSchema = external_exports.enum([
67736
+ "this_month",
67737
+ "last_month",
67738
+ "last_3_months"
67739
+ ]);
67740
+
66822
67741
  // ../hyperline-lib/build/utils/api/filterBuilder.js
66823
- var baseAuthorizedOperators = ["not", "isNull", "isNotNull"];
67742
+ var nullAuthorizedOperators = ["isNull", "isNotNull"];
67743
+ var baseAuthorizedOperators = ["not", ...nullAuthorizedOperators];
66824
67744
  var booleanAuthorizedOperators = [
66825
67745
  ...baseAuthorizedOperators,
66826
67746
  "equals"
@@ -66849,10 +67769,17 @@ var authorizedOperators = [
66849
67769
  ...arrayAuthorizedOperators,
66850
67770
  ...mapAuthorizedOperators
66851
67771
  ];
67772
+ var NullFilterValueSchema = BooleanSchema.or(external_exports.literal("")).optional();
66852
67773
 
66853
67774
  // ../hyperline-lib/build/http/dto/state.js
66854
- var StateSchema = external_exports.enum(usStates).openapi({
66855
- 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).",
67775
+ var StateSchema = external_exports.string().openapi({
67776
+ 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:
67777
+ - United States: state, see [ISO 3166-2:US](https://en.wikipedia.org/wiki/ISO_3166-2:US)
67778
+ - Canada: province or territory, see [ISO 3166-2:CA](https://en.wikipedia.org/wiki/ISO_3166-2:CA)
67779
+ - Italy: province, see [ISO 3166-2:IT](https://en.wikipedia.org/wiki/ISO_3166-2:IT)
67780
+ - Brazil: state, see [ISO 3166-2:BR](https://en.wikipedia.org/wiki/ISO_3166-2:BR)
67781
+
67782
+ 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.`,
66856
67783
  example: "CA"
66857
67784
  });
66858
67785
 
@@ -66966,9 +67893,10 @@ var toLogRequest = (config4) => {
66966
67893
  };
66967
67894
 
66968
67895
  // ../hyperline-lib/build/httpClient/publicUrlFetch.js
67896
+ import { lookup as lookupCallback } from "node:dns";
66969
67897
  import { lookup } from "node:dns/promises";
66970
67898
  import { isIP } from "node:net";
66971
- import { Agent } from "undici";
67899
+ import { Agent, fetch as fetch2 } from "undici";
66972
67900
  var PINNED_DISPATCHER_TTL_MS = 5 * 60 * 1e3;
66973
67901
  var DEFAULT_MAX_RESPONSE_BYTES = 2 * 1024 * 1024;
66974
67902
 
@@ -66980,14 +67908,23 @@ import multer2 from "multer";
66980
67908
  // ../hyperline-lib/build/httpRouter/file.js
66981
67909
  import helmet from "helmet";
66982
67910
 
66983
- // ../hyperline-lib/build/publicApi/auth/index.js
67911
+ // ../hyperline-lib/build/publicApi/auth/apiKey.js
66984
67912
  import { randomBytes as randomBytes2, scryptSync } from "node:crypto";
66985
67913
 
67914
+ // ../hyperline-lib/build/publicApi/auth/apiKeyHashCache.js
67915
+ import { createHash as createHash4 } from "node:crypto";
67916
+ var TTL_MS = 5 * 6e4;
67917
+
66986
67918
  // ../hyperline-mcp/build/requestBuilder.js
66987
- function buildRequestConfig(path2, args, method, queryParamKeys = []) {
67919
+ function buildRequestConfig({ path: path2, args, method, queryParamKeys = [], arrayBody = false }) {
66988
67920
  const { url: url2, usedKeys } = replacePathParams(path2, args);
66989
67921
  const remaining = removeUsedKeys(args, usedKeys);
66990
- const { params, data } = separateParamsAndBody(remaining, method, queryParamKeys);
67922
+ const { params, data } = separateParamsAndBody({
67923
+ args: remaining,
67924
+ method,
67925
+ queryParamKeys,
67926
+ arrayBody
67927
+ });
66991
67928
  return { url: url2, params, data };
66992
67929
  }
66993
67930
  function replacePathParams(path2, args) {
@@ -67018,7 +67955,7 @@ var PathParamError = class extends Error {
67018
67955
  function removeUsedKeys(args, usedKeys) {
67019
67956
  return Object.fromEntries(Object.entries(args).filter(([key]) => !usedKeys.has(key)));
67020
67957
  }
67021
- function separateParamsAndBody(args, method, queryParamKeys) {
67958
+ function separateParamsAndBody({ args, method, queryParamKeys, arrayBody }) {
67022
67959
  const isBodyMethod = ["POST", "PUT", "PATCH"].includes(method);
67023
67960
  if (!isBodyMethod) {
67024
67961
  return { params: args };
@@ -67026,8 +67963,7 @@ function separateParamsAndBody(args, method, queryParamKeys) {
67026
67963
  const queryKeySet = new Set(queryParamKeys);
67027
67964
  const params = Object.fromEntries(Object.entries(args).filter(([key]) => queryKeySet.has(key)));
67028
67965
  const data = Object.fromEntries(Object.entries(args).filter(([key]) => !queryKeySet.has(key)));
67029
- const dataKeys = Object.keys(data);
67030
- if (dataKeys.length === 1 && dataKeys[0] === "items" && Array.isArray(data.items)) {
67966
+ if (arrayBody && Array.isArray(data.items)) {
67031
67967
  return { params, data: data.items };
67032
67968
  }
67033
67969
  return { params, data };
@@ -67045,6 +67981,62 @@ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/
67045
67981
  // ../hyperline-mcp/build/server/server.js
67046
67982
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
67047
67983
 
67984
+ // build/multipart.js
67985
+ import { readFile as readFile2 } from "node:fs/promises";
67986
+ import { basename, extname } from "node:path";
67987
+ var MIMETYPES_BY_EXTENSION = {
67988
+ ".csv": "text/csv",
67989
+ ".doc": "application/msword",
67990
+ ".docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
67991
+ ".gif": "image/gif",
67992
+ ".jpeg": "image/jpeg",
67993
+ ".jpg": "image/jpeg",
67994
+ ".json": "application/json",
67995
+ ".pdf": "application/pdf",
67996
+ ".png": "image/png",
67997
+ ".svg": "image/svg+xml",
67998
+ ".txt": "text/plain",
67999
+ ".xls": "application/vnd.ms-excel",
68000
+ ".xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
68001
+ ".xml": "application/xml"
68002
+ };
68003
+ function getMimetypeFromPath(filePath) {
68004
+ return MIMETYPES_BY_EXTENSION[extname(filePath).toLowerCase()] ?? "application/octet-stream";
68005
+ }
68006
+ function appendFormValue({ formData, key, value }) {
68007
+ if (value === void 0) {
68008
+ return;
68009
+ }
68010
+ if (value === null) {
68011
+ formData.append(key, "");
68012
+ return;
68013
+ }
68014
+ if (Array.isArray(value)) {
68015
+ for (const [index, item] of value.entries()) {
68016
+ appendFormValue({ formData, key: `${key}[${index}]`, value: item });
68017
+ }
68018
+ return;
68019
+ }
68020
+ if (typeof value === "object") {
68021
+ throw new Error(`--${key} cannot be sent alongside files: a multipart request only carries scalar fields.`);
68022
+ }
68023
+ formData.append(key, String(value));
68024
+ }
68025
+ async function buildMultipartBody({ data, files }) {
68026
+ const formData = new FormData();
68027
+ for (const [key, value] of Object.entries(data)) {
68028
+ appendFormValue({ formData, key, value });
68029
+ }
68030
+ const fileUploads = Object.entries(files).flatMap(([fieldName, filePaths]) => filePaths.map((filePath) => ({ fieldName, filePath })));
68031
+ const fileContents = await Promise.all(fileUploads.map(({ filePath }) => readFile2(filePath)));
68032
+ for (const [index, { fieldName, filePath }] of fileUploads.entries()) {
68033
+ formData.append(fieldName, new Blob([new Uint8Array(fileContents[index])], {
68034
+ type: getMimetypeFromPath(filePath)
68035
+ }), basename(filePath));
68036
+ }
68037
+ return formData;
68038
+ }
68039
+
67048
68040
  // build/output.js
67049
68041
  function formatOutput({ data, format: format2 }) {
67050
68042
  if (format2 === "json") {
@@ -67104,16 +68096,25 @@ function createCLIContext({ apiKey, baseUrl, outputFormat, source, companyId })
67104
68096
  return {
67105
68097
  baseUrl,
67106
68098
  outputFormat,
67107
- async execute({ method, path: path2, args, queryParamKeys = [], body, baseUrlOverride }) {
67108
- const { url: url2, params, data } = buildRequestConfig(path2, args, method, queryParamKeys);
68099
+ async execute({ method, path: path2, args, queryParamKeys = [], body, files, baseUrlOverride }) {
68100
+ const { url: url2, params, data } = buildRequestConfig({
68101
+ path: path2,
68102
+ args,
68103
+ method,
68104
+ queryParamKeys
68105
+ });
67109
68106
  const requestData = body ?? data;
67110
68107
  const hasData = Array.isArray(requestData) ? requestData.length > 0 : requestData != null && Object.keys(requestData).length > 0;
68108
+ const hasFiles = Object.values(files ?? {}).some((filePaths) => filePaths.length > 0);
67111
68109
  try {
67112
68110
  const response = await httpClient.request({
67113
68111
  method,
67114
68112
  url: url2,
67115
68113
  params,
67116
- data: hasData ? requestData : void 0,
68114
+ data: hasFiles ? await buildMultipartBody({
68115
+ data: requestData ?? {},
68116
+ files: files ?? {}
68117
+ }) : hasData ? requestData : void 0,
67117
68118
  ...baseUrlOverride ? { baseURL: baseUrlOverride } : {},
67118
68119
  headers: {
67119
68120
  "Hyperline-Source": source,