@hyperline/cli 0.1.0-build.1.c0125f1 → 0.1.0-build.1.c03f6dd

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.",
@@ -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.`).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)
@@ -38444,7 +38447,7 @@ Examples:
38444
38447
  queryParamKeys: []
38445
38448
  });
38446
38449
  });
38447
- resource.command("update-ledger").description(`Update an existing accounting ledger.`).requiredOption("--id <value>", `id parameter`).option("--name <value>", `Display name of the ledger.`).option("--code <value>", `Optional accounting code of the ledger.`).option("--description <value>", `Optional description of the ledger.`).option("--type <value>", `Type of ledger.`).option("--currency <value>", `ISO 4217 currency used by the ledger.`).option("--entry-number-pattern <value>", `Entry numbering pattern containing \`{number}\`.`).option("--next-entry-number <number>", `Next sequence number assigned to an entry.`).addHelpText("after", `
38450
+ resource.command("update-ledger").description(`Update an existing accounting ledger.`).requiredOption("--id <value>", `id parameter`).option("--name <value>", `Display name of the ledger.`).option("--code <value>", `Optional accounting code of the ledger.`).option("--description <value>", `Optional description of the ledger.`).option("--type <value>", `Type of ledger.`).option("--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.`).option("--entry-number-pattern <value>", `Entry numbering pattern containing \`{number}\`.`).option("--next-entry-number <number>", `Next sequence number assigned to an entry.`).addHelpText("after", `
38448
38451
  Examples:
38449
38452
  hyperline accounting-ledgers update-ledger --id <id>
38450
38453
  hyperline accounting-ledgers update-ledger --id <id> --name <name> --code <code>
@@ -38469,6 +38472,8 @@ Examples:
38469
38472
  args.currency = opts.currency;
38470
38473
  if (opts.entryNumberPattern !== void 0)
38471
38474
  args.entry_number_pattern = opts.entryNumberPattern;
38475
+ if (opts.fiscalYearEndMonth !== void 0)
38476
+ args.fiscal_year_end_month = Number(opts.fiscalYearEndMonth);
38472
38477
  if (opts.nextEntryNumber !== void 0)
38473
38478
  args.next_entry_number = Number(opts.nextEntryNumber);
38474
38479
  await ctx.execute({
@@ -38864,7 +38869,7 @@ Examples:
38864
38869
  // build/commands/generated/accounting-rules.js
38865
38870
  function registerAccounting_RulesCommands(parent) {
38866
38871
  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", `
38872
+ 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
38873
  Examples:
38869
38874
  hyperline accounting-rules list
38870
38875
  hyperline accounting-rules list --take <take> --ledger-id <ledger_id>`).action(async (opts) => {
@@ -38878,10 +38883,6 @@ Examples:
38878
38883
  args.ledger_id = opts.ledgerId;
38879
38884
  if (opts["ledgerId.not"] !== void 0)
38880
38885
  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
38886
  if (opts["ledgerId.equals"] !== void 0)
38886
38887
  args.ledger_id__equals = opts["ledgerId.equals"];
38887
38888
  if (opts["ledgerId.contains"] !== void 0)
@@ -38894,10 +38895,6 @@ Examples:
38894
38895
  args.category = opts.category;
38895
38896
  if (opts["category.not"] !== void 0)
38896
38897
  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
38898
  if (opts["category.equals"] !== void 0)
38902
38899
  args.category__equals = opts["category.equals"];
38903
38900
  if (opts["category.contains"] !== void 0)
@@ -38919,16 +38916,12 @@ Examples:
38919
38916
  "skip",
38920
38917
  "ledger_id",
38921
38918
  "ledger_id__not",
38922
- "ledger_id__isNull",
38923
- "ledger_id__isNotNull",
38924
38919
  "ledger_id__equals",
38925
38920
  "ledger_id__contains",
38926
38921
  "ledger_id__startsWith",
38927
38922
  "ledger_id__endWith",
38928
38923
  "category",
38929
38924
  "category__not",
38930
- "category__isNull",
38931
- "category__isNotNull",
38932
38925
  "category__equals",
38933
38926
  "category__contains",
38934
38927
  "category__startsWith",
@@ -40508,7 +40501,7 @@ Examples:
40508
40501
  // build/commands/generated/ai-monitoring.js
40509
40502
  function registerAi_MonitoringCommands(parent) {
40510
40503
  const resource = parent.command("ai-monitoring").description("Manage ai > monitoring");
40511
- resource.command("list-monitoring-analyses").description(`List customer health analyses from the monitoring agent, newest first: health score (0-100), tier, summary, per-dimension scores, risk factors and positive signals. Filter by customer (Hyperline or external ID) with limit=1 to get a customer's current health score. Only completed analyses unless status is set.`).option("--limit <number>", `Maximum number of items to return (1-100).`).option("--cursor <value>", `Opaque cursor returned in the previous response's \`next_cursor\`. Omit to fetch the first page.`).option("--include-total <value>", `Set to \`true\` to include \`total\` in the response.`).option("--customer-id <value>", `Return only analyses of this customer. Accepts the Hyperline ID or your own external ID.`).option("--status <value>", `Return only analyses with this status. Defaults to \`completed\`, the analyses that carry a score.`).option("--created-at.gte <value>", `Return only analyses created at or after this date.`).option("--created-at.lte <value>", `Return only analyses created at or before this date.`).addHelpText("after", `
40504
+ resource.command("list-monitoring-analyses").description(`List customer health analyses from the monitoring agent, newest first: health score (0-100), tier, summary, per-dimension scores, risk factors and positive signals. Filter by customer (Hyperline or external ID) with limit=1 to get a customer's current health score, or by customer_id__in (up to 100 Hyperline IDs) for several customers; the first analysis per customer is its latest. Only completed analyses unless status is set.`).option("--limit <number>", `Maximum number of items to return (1-100).`).option("--cursor <value>", `Opaque cursor returned in the previous response's \`next_cursor\`. Omit to fetch the first page.`).option("--include-total <value>", `Set to \`true\` to include \`total\` in the response.`).option("--customer-id <value>", `Return only analyses of this customer. Accepts the Hyperline ID or your own external ID.`).option("--customer-id.in <value>", `Comma-separated list of up to 100 Hyperline customer IDs. Return only analyses of these customers. Cannot be combined with \`customer_id\`.`).option("--status <value>", `Return only analyses with this status. Defaults to \`completed\`, the analyses that carry a score.`).option("--created-at.gte <value>", `Return only analyses created at or after this date.`).option("--created-at.lte <value>", `Return only analyses created at or before this date.`).addHelpText("after", `
40512
40505
  Examples:
40513
40506
  hyperline ai-monitoring list-monitoring-analyses
40514
40507
  hyperline ai-monitoring list-monitoring-analyses --limit <limit> --cursor <cursor>`).action(async (opts) => {
@@ -40524,6 +40517,8 @@ Examples:
40524
40517
  args.include_total = opts.includeTotal;
40525
40518
  if (opts.customerId !== void 0)
40526
40519
  args.customer_id = opts.customerId;
40520
+ if (opts["customerId.in"] !== void 0)
40521
+ args.customer_id__in = opts["customerId.in"];
40527
40522
  if (opts.status !== void 0)
40528
40523
  args.status = opts.status;
40529
40524
  if (opts["createdAt.gte"] !== void 0)
@@ -40541,6 +40536,7 @@ Examples:
40541
40536
  "cursor",
40542
40537
  "include_total",
40543
40538
  "customer_id",
40539
+ "customer_id__in",
40544
40540
  "status",
40545
40541
  "created_at__gte",
40546
40542
  "created_at__lte"
@@ -40660,6 +40656,84 @@ Examples:
40660
40656
  });
40661
40657
  }
40662
40658
 
40659
+ // build/commands/generated/catalog.js
40660
+ function registerCatalogCommands(parent) {
40661
+ const resource = parent.command("catalog").description("Manage catalog");
40662
+ 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", `
40663
+ Examples:
40664
+ hyperline catalog list-catalog-versions`).action(async (_opts) => {
40665
+ const ctx = resource.parent?.opts()._ctx;
40666
+ if (!ctx) {
40667
+ process.stderr.write("Error: Not authenticated\n");
40668
+ process.exit(1);
40669
+ }
40670
+ const args = {};
40671
+ await ctx.execute({
40672
+ method: "GET",
40673
+ path: "/v1/catalog/versions",
40674
+ args,
40675
+ queryParamKeys: []
40676
+ });
40677
+ });
40678
+ resource.command("get-catalog-draft").description(`Get the pending product catalog draft (null when there is none).`).addHelpText("after", `
40679
+ Examples:
40680
+ hyperline catalog get-catalog-draft`).action(async (_opts) => {
40681
+ const ctx = resource.parent?.opts()._ctx;
40682
+ if (!ctx) {
40683
+ process.stderr.write("Error: Not authenticated\n");
40684
+ process.exit(1);
40685
+ }
40686
+ const args = {};
40687
+ await ctx.execute({
40688
+ method: "GET",
40689
+ path: "/v1/catalog/versions/draft",
40690
+ args,
40691
+ queryParamKeys: []
40692
+ });
40693
+ });
40694
+ resource.command("publish-catalog-draft").description(`Publish the pending product catalog draft: its changes become the live catalog.`).addHelpText("after", `
40695
+ Examples:
40696
+ hyperline catalog publish-catalog-draft
40697
+ hyperline catalog publish-catalog-draft --output json`).action(async (_opts) => {
40698
+ const ctx = resource.parent?.opts()._ctx;
40699
+ if (!ctx) {
40700
+ process.stderr.write("Error: Not authenticated\n");
40701
+ process.exit(1);
40702
+ }
40703
+ const args = {};
40704
+ await ctx.execute({
40705
+ method: "POST",
40706
+ path: "/v1/catalog/versions/draft/publish",
40707
+ args,
40708
+ queryParamKeys: []
40709
+ });
40710
+ });
40711
+ resource.command("discard-catalog-draft").description(`Discard the pending product catalog draft without publishing it.`).option("--yes", "Skip confirmation").addHelpText("after", `
40712
+ Examples:
40713
+ hyperline catalog discard-catalog-draft
40714
+ hyperline catalog discard-catalog-draft --output json`).action(async (opts) => {
40715
+ const ctx = resource.parent?.opts()._ctx;
40716
+ if (!ctx) {
40717
+ process.stderr.write("Error: Not authenticated\n");
40718
+ process.exit(1);
40719
+ }
40720
+ const args = {};
40721
+ if (!opts.yes) {
40722
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
40723
+ if (!confirmed) {
40724
+ process.stdout.write("Aborted.\n");
40725
+ return;
40726
+ }
40727
+ }
40728
+ await ctx.execute({
40729
+ method: "DELETE",
40730
+ path: "/v1/catalog/versions/draft",
40731
+ args,
40732
+ queryParamKeys: []
40733
+ });
40734
+ });
40735
+ }
40736
+
40663
40737
  // build/commands/generated/companies.js
40664
40738
  function registerCompaniesCommands(parent) {
40665
40739
  const resource = parent.command("companies").description("Manage companies");
@@ -40726,7 +40800,7 @@ Examples:
40726
40800
  queryParamKeys: ["take", "skip"]
40727
40801
  });
40728
40802
  });
40729
- resource.command("create").description(`Create a new coupon with discount rules. Supports percentage or fixed amount discounts, duration limits, and redemption restrictions.`).requiredOption("--name <value>", `Coupon name.`).option("--description <value>", `Coupon description.`).option("--expiration-date <value>", `Date corresponding to the expiration of the coupon.`).option("--redemption-limit <number>", `Maximum number of subscriptions to which a single coupon can be applied.`).option("--product-ids <json>", `List of product IDs the coupon can be applied to. If empty, the coupon can be applied to any product.`).option("--repeat <value>", `Default repeat behaviour applied when the coupon is attached to a subscription. Valid values: \`once\`, \`forever\`, \`duration\`. Can be overridden at attach time.`).option("--duration <json>", `Default duration applied when \`repeat\` is \`duration\`. Required when \`repeat\` is \`duration\`, must be null otherwise.`).option("--properties <json>", `Key/value pairs to store any metadata useful in your context.`).requiredOption("--type <value>", `type`).option("--discount-amount <number>", `Amount to apply as a discount on the total amount (excluding taxes) of a subscription. Expressed in the currency's smallest unit.`).option("--currency <value>", `Currency code. See [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217#List_of_ISO_4217_currency_codes).`).option("--discount-percent <number>", `Percentage to apply as a discount on the amount (excluding taxes) of a product.`).addHelpText("after", `
40803
+ 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", `
40730
40804
  Examples:
40731
40805
  hyperline coupons create --name <name> --type <type>
40732
40806
  hyperline coupons create --name <name> --type <type> --description <description> --expiration-date <expiration_date>
@@ -40743,6 +40817,8 @@ Examples:
40743
40817
  args.description = opts.description;
40744
40818
  if (opts.expirationDate !== void 0)
40745
40819
  args.expiration_date = opts.expirationDate;
40820
+ if (opts.productScope !== void 0)
40821
+ args.product_scope = opts.productScope;
40746
40822
  if (opts.repeat !== void 0)
40747
40823
  args.repeat = opts.repeat;
40748
40824
  if (opts.type !== void 0)
@@ -40786,7 +40862,7 @@ Examples:
40786
40862
  queryParamKeys: []
40787
40863
  });
40788
40864
  });
40789
- resource.command("update").description(`Update an existing coupon's name, discount rules, or restrictions.`).requiredOption("--id <value>", `id parameter`).requiredOption("--name <value>", `Coupon name.`).option("--description <value>", `Coupon description.`).option("--expiration-date <value>", `Date corresponding to the expiration of the coupon.`).option("--redemption-limit <number>", `Maximum number of subscriptions to which a single coupon can be applied.`).option("--product-ids <json>", `List of product IDs the coupon can be applied to. If empty, the coupon can be applied to any product.`).option("--repeat <value>", `Default repeat behaviour applied when the coupon is attached to a subscription. Valid values: \`once\`, \`forever\`, \`duration\`. Can be overridden at attach time.`).option("--duration <json>", `Default duration applied when \`repeat\` is \`duration\`. Required when \`repeat\` is \`duration\`, must be null otherwise.`).option("--properties <json>", `Key/value pairs to store any metadata useful in your context.`).requiredOption("--type <value>", `type`).option("--discount-amount <number>", `Amount to apply as a discount on the total amount (excluding taxes) of a subscription. Expressed in the currency's smallest unit.`).option("--currency <value>", `Currency code. See [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217#List_of_ISO_4217_currency_codes).`).option("--discount-percent <number>", `Percentage to apply as a discount on the amount (excluding taxes) of a product.`).addHelpText("after", `
40865
+ 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", `
40790
40866
  Examples:
40791
40867
  hyperline coupons update --id <id> --name <name> --type <type>
40792
40868
  hyperline coupons update --id <id> --name <name> --type <type> --description <description> --expiration-date <expiration_date>
@@ -40805,6 +40881,8 @@ Examples:
40805
40881
  args.description = opts.description;
40806
40882
  if (opts.expirationDate !== void 0)
40807
40883
  args.expiration_date = opts.expirationDate;
40884
+ if (opts.productScope !== void 0)
40885
+ args.product_scope = opts.productScope;
40808
40886
  if (opts.repeat !== void 0)
40809
40887
  args.repeat = opts.repeat;
40810
40888
  if (opts.type !== void 0)
@@ -40861,7 +40939,7 @@ Examples:
40861
40939
  // build/commands/generated/coupons-promotion-codes.js
40862
40940
  function registerCoupons_Promotion_CodesCommands(parent) {
40863
40941
  const resource = parent.command("coupons-promotion-codes").description("Manage coupons > promotion codes");
40864
- 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", `
40942
+ 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", `
40865
40943
  Examples:
40866
40944
  hyperline coupons-promotion-codes list-promotion-codes
40867
40945
  hyperline coupons-promotion-codes list-promotion-codes --take <take> --coupon-id <coupon_id>`).action(async (opts) => {
@@ -40875,10 +40953,6 @@ Examples:
40875
40953
  args.coupon_id = opts.couponId;
40876
40954
  if (opts["couponId.not"] !== void 0)
40877
40955
  args.coupon_id__not = opts["couponId.not"];
40878
- if (opts["couponId.isNull"] !== void 0)
40879
- args.coupon_id__isNull = opts["couponId.isNull"];
40880
- if (opts["couponId.isNotNull"] !== void 0)
40881
- args.coupon_id__isNotNull = opts["couponId.isNotNull"];
40882
40956
  if (opts["couponId.equals"] !== void 0)
40883
40957
  args.coupon_id__equals = opts["couponId.equals"];
40884
40958
  if (opts["couponId.contains"] !== void 0)
@@ -40900,8 +40974,6 @@ Examples:
40900
40974
  "skip",
40901
40975
  "coupon_id",
40902
40976
  "coupon_id__not",
40903
- "coupon_id__isNull",
40904
- "coupon_id__isNotNull",
40905
40977
  "coupon_id__equals",
40906
40978
  "coupon_id__contains",
40907
40979
  "coupon_id__startsWith",
@@ -41155,7 +41227,15 @@ Examples:
41155
41227
  // build/commands/generated/customers.js
41156
41228
  function registerCustomersCommands(parent) {
41157
41229
  const resource = parent.command("customers").description("Manage customers");
41158
- resource.command("list").description(`List customers with optional filters for name, type, status, currency, country, external_id, billing_email, search, tax_id, subscription_status, invoicing_entity_id, segment_id, custom_properties, payment_method_type, integration_entity_id, created_at, and updated_at. Sortable by created_at or updated_at. Paginated with limit/cursor.`).option("--limit <number>", `Maximum number of items to return (1-100).`).option("--cursor <value>", `Opaque cursor returned in the previous response's \`next_cursor\`. Omit to fetch the first page.`).option("--include-total <value>", `Set to \`true\` to include \`total\` in the response.`).option("--order <value>", `Sort direction.`).option("--sort <value>", `Field used to sort the results.`).option("--name <value>", `name`).option("--name.not <value>", `name__not`).option("--name.is-null <value>", `name__isNull`).option("--name.is-not-null <value>", `name__isNotNull`).option("--name.equals <value>", `name__equals`).option("--name.contains <value>", `name__contains`).option("--name.starts-with <value>", `name__startsWith`).option("--name.end-with <value>", `name__endWith`).option("--type <value>", `type`).option("--type.in <value>", `type__in`).option("--status <value>", `status`).option("--status.in <value>", `status__in`).option("--currency <value>", `currency`).option("--currency.not <value>", `currency__not`).option("--currency.is-null <value>", `currency__isNull`).option("--currency.is-not-null <value>", `currency__isNotNull`).option("--currency.equals <value>", `currency__equals`).option("--currency.contains <value>", `currency__contains`).option("--currency.starts-with <value>", `currency__startsWith`).option("--currency.end-with <value>", `currency__endWith`).option("--country <value>", `country`).option("--country.not <value>", `country__not`).option("--country.is-null <value>", `country__isNull`).option("--country.is-not-null <value>", `country__isNotNull`).option("--country.equals <value>", `country__equals`).option("--country.contains <value>", `country__contains`).option("--country.starts-with <value>", `country__startsWith`).option("--country.end-with <value>", `country__endWith`).option("--external-id <value>", `external_id`).option("--external-id.not <value>", `external_id__not`).option("--external-id.is-null <value>", `external_id__isNull`).option("--external-id.is-not-null <value>", `external_id__isNotNull`).option("--external-id.equals <value>", `external_id__equals`).option("--external-id.contains <value>", `external_id__contains`).option("--external-id.starts-with <value>", `external_id__startsWith`).option("--external-id.end-with <value>", `external_id__endWith`).option("--billing-email <value>", `billing_email`).option("--billing-email.not <value>", `billing_email__not`).option("--billing-email.is-null <value>", `billing_email__isNull`).option("--billing-email.is-not-null <value>", `billing_email__isNotNull`).option("--billing-email.equals <value>", `billing_email__equals`).option("--billing-email.contains <value>", `billing_email__contains`).option("--billing-email.starts-with <value>", `billing_email__startsWith`).option("--billing-email.end-with <value>", `billing_email__endWith`).option("--search <value>", `search`).option("--tax-id <value>", `tax_id`).option("--tax-id.not <value>", `tax_id__not`).option("--tax-id.is-null <value>", `tax_id__isNull`).option("--tax-id.is-not-null <value>", `tax_id__isNotNull`).option("--tax-id.equals <value>", `tax_id__equals`).option("--tax-id.contains <value>", `tax_id__contains`).option("--tax-id.starts-with <value>", `tax_id__startsWith`).option("--tax-id.end-with <value>", `tax_id__endWith`).option("--subscription-status <value>", `subscription_status`).option("--subscription-status.in <value>", `subscription_status__in`).option("--invoicing-entity-id <value>", `invoicing_entity_id`).option("--invoicing-entity-id.not <value>", `invoicing_entity_id__not`).option("--invoicing-entity-id.is-null <value>", `invoicing_entity_id__isNull`).option("--invoicing-entity-id.is-not-null <value>", `invoicing_entity_id__isNotNull`).option("--invoicing-entity-id.equals <value>", `invoicing_entity_id__equals`).option("--invoicing-entity-id.contains <value>", `invoicing_entity_id__contains`).option("--invoicing-entity-id.starts-with <value>", `invoicing_entity_id__startsWith`).option("--invoicing-entity-id.end-with <value>", `invoicing_entity_id__endWith`).option("--segment-id <value>", `segment_id`).option("--custom-properties <value>", `custom_properties`).option("--payment-method-type <value>", `payment_method_type`).option("--payment-method-type.in <value>", `payment_method_type__in`).option("--integration-entity-id <value>", `integration_entity_id`).option("--created-at <value>", `created_at`).option("--created-at.not <value>", `created_at__not`).option("--created-at.is-null <value>", `created_at__isNull`).option("--created-at.is-not-null <value>", `created_at__isNotNull`).option("--created-at.equals <value>", `created_at__equals`).option("--created-at.lt <value>", `created_at__lt`).option("--created-at.lte <value>", `created_at__lte`).option("--created-at.gt <value>", `created_at__gt`).option("--created-at.gte <value>", `created_at__gte`).option("--updated-at <value>", `updated_at`).option("--updated-at.not <value>", `updated_at__not`).option("--updated-at.is-null <value>", `updated_at__isNull`).option("--updated-at.is-not-null <value>", `updated_at__isNotNull`).option("--updated-at.equals <value>", `updated_at__equals`).option("--updated-at.lt <value>", `updated_at__lt`).option("--updated-at.lte <value>", `updated_at__lte`).option("--updated-at.gt <value>", `updated_at__gt`).option("--updated-at.gte <value>", `updated_at__gte`).addHelpText("after", `
41230
+ 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>", `
41231
+ Verification status of the customer tax ID.
41232
+
41233
+ - \`valid\`: Tax ID has been verified and is valid.
41234
+ - \`invalid\`: Tax ID has been verified and is invalid.
41235
+ - \`mismatch\`: Tax ID is valid but is for a different country than the customer's country.
41236
+ - \`unverified\`: Tax ID has not been verified yet.
41237
+ - \`unsupported\`: Tax ID verification for this type not supported yet.
41238
+ `).option("--name <value>", `name`).option("--name.not <value>", `name__not`).option("--name.equals <value>", `name__equals`).option("--name.contains <value>", `name__contains`).option("--name.starts-with <value>", `name__startsWith`).option("--name.end-with <value>", `name__endWith`).option("--type <value>", `type`).option("--type.in <value>", `type__in`).option("--status <value>", `status`).option("--status.in <value>", `status__in`).option("--currency <value>", `currency`).option("--currency.not <value>", `currency__not`).option("--currency.equals <value>", `currency__equals`).option("--currency.contains <value>", `currency__contains`).option("--currency.starts-with <value>", `currency__startsWith`).option("--currency.end-with <value>", `currency__endWith`).option("--currency.is-null <value>", `currency__isNull`).option("--currency.is-not-null <value>", `currency__isNotNull`).option("--country <value>", `country`).option("--country.not <value>", `country__not`).option("--country.equals <value>", `country__equals`).option("--country.contains <value>", `country__contains`).option("--country.starts-with <value>", `country__startsWith`).option("--country.end-with <value>", `country__endWith`).option("--country.is-null <value>", `country__isNull`).option("--country.is-not-null <value>", `country__isNotNull`).option("--external-id <value>", `external_id`).option("--external-id.not <value>", `external_id__not`).option("--external-id.equals <value>", `external_id__equals`).option("--external-id.contains <value>", `external_id__contains`).option("--external-id.starts-with <value>", `external_id__startsWith`).option("--external-id.end-with <value>", `external_id__endWith`).option("--external-id.is-null <value>", `external_id__isNull`).option("--external-id.is-not-null <value>", `external_id__isNotNull`).option("--billing-email <value>", `billing_email`).option("--billing-email.not <value>", `billing_email__not`).option("--billing-email.equals <value>", `billing_email__equals`).option("--billing-email.contains <value>", `billing_email__contains`).option("--billing-email.starts-with <value>", `billing_email__startsWith`).option("--billing-email.end-with <value>", `billing_email__endWith`).option("--billing-email.is-null <value>", `billing_email__isNull`).option("--billing-email.is-not-null <value>", `billing_email__isNotNull`).option("--search <value>", `search`).option("--tax-id <value>", `tax_id`).option("--tax-id.not <value>", `tax_id__not`).option("--tax-id.equals <value>", `tax_id__equals`).option("--tax-id.contains <value>", `tax_id__contains`).option("--tax-id.starts-with <value>", `tax_id__startsWith`).option("--tax-id.end-with <value>", `tax_id__endWith`).option("--tax-id.is-null <value>", `tax_id__isNull`).option("--tax-id.is-not-null <value>", `tax_id__isNotNull`).option("--subscription-status <value>", `subscription_status`).option("--subscription-status.in <value>", `subscription_status__in`).option("--invoicing-entity-id <value>", `invoicing_entity_id`).option("--invoicing-entity-id.not <value>", `invoicing_entity_id__not`).option("--invoicing-entity-id.equals <value>", `invoicing_entity_id__equals`).option("--invoicing-entity-id.contains <value>", `invoicing_entity_id__contains`).option("--invoicing-entity-id.starts-with <value>", `invoicing_entity_id__startsWith`).option("--invoicing-entity-id.end-with <value>", `invoicing_entity_id__endWith`).option("--segment-id <value>", `segment_id`).option("--custom-properties <value>", `custom_properties`).option("--payment-method-type <value>", `payment_method_type`).option("--payment-method-type.in <value>", `payment_method_type__in`).option("--integration-entity-id <value>", `integration_entity_id`).option("--created-at <value>", `created_at`).option("--created-at.not <value>", `created_at__not`).option("--created-at.equals <value>", `created_at__equals`).option("--created-at.lt <value>", `created_at__lt`).option("--created-at.lte <value>", `created_at__lte`).option("--created-at.gt <value>", `created_at__gt`).option("--created-at.gte <value>", `created_at__gte`).option("--updated-at <value>", `updated_at`).option("--updated-at.not <value>", `updated_at__not`).option("--updated-at.equals <value>", `updated_at__equals`).option("--updated-at.lt <value>", `updated_at__lt`).option("--updated-at.lte <value>", `updated_at__lte`).option("--updated-at.gt <value>", `updated_at__gt`).option("--updated-at.gte <value>", `updated_at__gte`).addHelpText("after", `
41159
41239
  Examples:
41160
41240
  hyperline customers list
41161
41241
  hyperline customers list --limit <limit> --cursor <cursor>`).action(async (opts) => {
@@ -41173,14 +41253,12 @@ Examples:
41173
41253
  args.order = opts.order;
41174
41254
  if (opts.sort !== void 0)
41175
41255
  args.sort = opts.sort;
41256
+ if (opts.taxIdStatus !== void 0)
41257
+ args.tax_id_status = opts.taxIdStatus;
41176
41258
  if (opts.name !== void 0)
41177
41259
  args.name = opts.name;
41178
41260
  if (opts["name.not"] !== void 0)
41179
41261
  args.name__not = opts["name.not"];
41180
- if (opts["name.isNull"] !== void 0)
41181
- args.name__isNull = opts["name.isNull"];
41182
- if (opts["name.isNotNull"] !== void 0)
41183
- args.name__isNotNull = opts["name.isNotNull"];
41184
41262
  if (opts["name.equals"] !== void 0)
41185
41263
  args.name__equals = opts["name.equals"];
41186
41264
  if (opts["name.contains"] !== void 0)
@@ -41201,10 +41279,6 @@ Examples:
41201
41279
  args.currency = opts.currency;
41202
41280
  if (opts["currency.not"] !== void 0)
41203
41281
  args.currency__not = opts["currency.not"];
41204
- if (opts["currency.isNull"] !== void 0)
41205
- args.currency__isNull = opts["currency.isNull"];
41206
- if (opts["currency.isNotNull"] !== void 0)
41207
- args.currency__isNotNull = opts["currency.isNotNull"];
41208
41282
  if (opts["currency.equals"] !== void 0)
41209
41283
  args.currency__equals = opts["currency.equals"];
41210
41284
  if (opts["currency.contains"] !== void 0)
@@ -41213,14 +41287,14 @@ Examples:
41213
41287
  args.currency__startsWith = opts["currency.startsWith"];
41214
41288
  if (opts["currency.endWith"] !== void 0)
41215
41289
  args.currency__endWith = opts["currency.endWith"];
41290
+ if (opts["currency.isNull"] !== void 0)
41291
+ args.currency__isNull = opts["currency.isNull"];
41292
+ if (opts["currency.isNotNull"] !== void 0)
41293
+ args.currency__isNotNull = opts["currency.isNotNull"];
41216
41294
  if (opts.country !== void 0)
41217
41295
  args.country = opts.country;
41218
41296
  if (opts["country.not"] !== void 0)
41219
41297
  args.country__not = opts["country.not"];
41220
- if (opts["country.isNull"] !== void 0)
41221
- args.country__isNull = opts["country.isNull"];
41222
- if (opts["country.isNotNull"] !== void 0)
41223
- args.country__isNotNull = opts["country.isNotNull"];
41224
41298
  if (opts["country.equals"] !== void 0)
41225
41299
  args.country__equals = opts["country.equals"];
41226
41300
  if (opts["country.contains"] !== void 0)
@@ -41229,14 +41303,14 @@ Examples:
41229
41303
  args.country__startsWith = opts["country.startsWith"];
41230
41304
  if (opts["country.endWith"] !== void 0)
41231
41305
  args.country__endWith = opts["country.endWith"];
41306
+ if (opts["country.isNull"] !== void 0)
41307
+ args.country__isNull = opts["country.isNull"];
41308
+ if (opts["country.isNotNull"] !== void 0)
41309
+ args.country__isNotNull = opts["country.isNotNull"];
41232
41310
  if (opts.externalId !== void 0)
41233
41311
  args.external_id = opts.externalId;
41234
41312
  if (opts["externalId.not"] !== void 0)
41235
41313
  args.external_id__not = opts["externalId.not"];
41236
- if (opts["externalId.isNull"] !== void 0)
41237
- args.external_id__isNull = opts["externalId.isNull"];
41238
- if (opts["externalId.isNotNull"] !== void 0)
41239
- args.external_id__isNotNull = opts["externalId.isNotNull"];
41240
41314
  if (opts["externalId.equals"] !== void 0)
41241
41315
  args.external_id__equals = opts["externalId.equals"];
41242
41316
  if (opts["externalId.contains"] !== void 0)
@@ -41245,14 +41319,14 @@ Examples:
41245
41319
  args.external_id__startsWith = opts["externalId.startsWith"];
41246
41320
  if (opts["externalId.endWith"] !== void 0)
41247
41321
  args.external_id__endWith = opts["externalId.endWith"];
41322
+ if (opts["externalId.isNull"] !== void 0)
41323
+ args.external_id__isNull = opts["externalId.isNull"];
41324
+ if (opts["externalId.isNotNull"] !== void 0)
41325
+ args.external_id__isNotNull = opts["externalId.isNotNull"];
41248
41326
  if (opts.billingEmail !== void 0)
41249
41327
  args.billing_email = opts.billingEmail;
41250
41328
  if (opts["billingEmail.not"] !== void 0)
41251
41329
  args.billing_email__not = opts["billingEmail.not"];
41252
- if (opts["billingEmail.isNull"] !== void 0)
41253
- args.billing_email__isNull = opts["billingEmail.isNull"];
41254
- if (opts["billingEmail.isNotNull"] !== void 0)
41255
- args.billing_email__isNotNull = opts["billingEmail.isNotNull"];
41256
41330
  if (opts["billingEmail.equals"] !== void 0)
41257
41331
  args.billing_email__equals = opts["billingEmail.equals"];
41258
41332
  if (opts["billingEmail.contains"] !== void 0)
@@ -41261,16 +41335,16 @@ Examples:
41261
41335
  args.billing_email__startsWith = opts["billingEmail.startsWith"];
41262
41336
  if (opts["billingEmail.endWith"] !== void 0)
41263
41337
  args.billing_email__endWith = opts["billingEmail.endWith"];
41338
+ if (opts["billingEmail.isNull"] !== void 0)
41339
+ args.billing_email__isNull = opts["billingEmail.isNull"];
41340
+ if (opts["billingEmail.isNotNull"] !== void 0)
41341
+ args.billing_email__isNotNull = opts["billingEmail.isNotNull"];
41264
41342
  if (opts.search !== void 0)
41265
41343
  args.search = opts.search;
41266
41344
  if (opts.taxId !== void 0)
41267
41345
  args.tax_id = opts.taxId;
41268
41346
  if (opts["taxId.not"] !== void 0)
41269
41347
  args.tax_id__not = opts["taxId.not"];
41270
- if (opts["taxId.isNull"] !== void 0)
41271
- args.tax_id__isNull = opts["taxId.isNull"];
41272
- if (opts["taxId.isNotNull"] !== void 0)
41273
- args.tax_id__isNotNull = opts["taxId.isNotNull"];
41274
41348
  if (opts["taxId.equals"] !== void 0)
41275
41349
  args.tax_id__equals = opts["taxId.equals"];
41276
41350
  if (opts["taxId.contains"] !== void 0)
@@ -41279,6 +41353,10 @@ Examples:
41279
41353
  args.tax_id__startsWith = opts["taxId.startsWith"];
41280
41354
  if (opts["taxId.endWith"] !== void 0)
41281
41355
  args.tax_id__endWith = opts["taxId.endWith"];
41356
+ if (opts["taxId.isNull"] !== void 0)
41357
+ args.tax_id__isNull = opts["taxId.isNull"];
41358
+ if (opts["taxId.isNotNull"] !== void 0)
41359
+ args.tax_id__isNotNull = opts["taxId.isNotNull"];
41282
41360
  if (opts.subscriptionStatus !== void 0)
41283
41361
  args.subscription_status = opts.subscriptionStatus;
41284
41362
  if (opts["subscriptionStatus.in"] !== void 0)
@@ -41287,10 +41365,6 @@ Examples:
41287
41365
  args.invoicing_entity_id = opts.invoicingEntityId;
41288
41366
  if (opts["invoicingEntityId.not"] !== void 0)
41289
41367
  args.invoicing_entity_id__not = opts["invoicingEntityId.not"];
41290
- if (opts["invoicingEntityId.isNull"] !== void 0)
41291
- args.invoicing_entity_id__isNull = opts["invoicingEntityId.isNull"];
41292
- if (opts["invoicingEntityId.isNotNull"] !== void 0)
41293
- args.invoicing_entity_id__isNotNull = opts["invoicingEntityId.isNotNull"];
41294
41368
  if (opts["invoicingEntityId.equals"] !== void 0)
41295
41369
  args.invoicing_entity_id__equals = opts["invoicingEntityId.equals"];
41296
41370
  if (opts["invoicingEntityId.contains"] !== void 0)
@@ -41313,10 +41387,6 @@ Examples:
41313
41387
  args.created_at = opts.createdAt;
41314
41388
  if (opts["createdAt.not"] !== void 0)
41315
41389
  args.created_at__not = opts["createdAt.not"];
41316
- if (opts["createdAt.isNull"] !== void 0)
41317
- args.created_at__isNull = opts["createdAt.isNull"];
41318
- if (opts["createdAt.isNotNull"] !== void 0)
41319
- args.created_at__isNotNull = opts["createdAt.isNotNull"];
41320
41390
  if (opts["createdAt.equals"] !== void 0)
41321
41391
  args.created_at__equals = opts["createdAt.equals"];
41322
41392
  if (opts["createdAt.lt"] !== void 0)
@@ -41331,10 +41401,6 @@ Examples:
41331
41401
  args.updated_at = opts.updatedAt;
41332
41402
  if (opts["updatedAt.not"] !== void 0)
41333
41403
  args.updated_at__not = opts["updatedAt.not"];
41334
- if (opts["updatedAt.isNull"] !== void 0)
41335
- args.updated_at__isNull = opts["updatedAt.isNull"];
41336
- if (opts["updatedAt.isNotNull"] !== void 0)
41337
- args.updated_at__isNotNull = opts["updatedAt.isNotNull"];
41338
41404
  if (opts["updatedAt.equals"] !== void 0)
41339
41405
  args.updated_at__equals = opts["updatedAt.equals"];
41340
41406
  if (opts["updatedAt.lt"] !== void 0)
@@ -41357,10 +41423,9 @@ Examples:
41357
41423
  "include_total",
41358
41424
  "order",
41359
41425
  "sort",
41426
+ "tax_id_status",
41360
41427
  "name",
41361
41428
  "name__not",
41362
- "name__isNull",
41363
- "name__isNotNull",
41364
41429
  "name__equals",
41365
41430
  "name__contains",
41366
41431
  "name__startsWith",
@@ -41371,51 +41436,49 @@ Examples:
41371
41436
  "status__in",
41372
41437
  "currency",
41373
41438
  "currency__not",
41374
- "currency__isNull",
41375
- "currency__isNotNull",
41376
41439
  "currency__equals",
41377
41440
  "currency__contains",
41378
41441
  "currency__startsWith",
41379
41442
  "currency__endWith",
41443
+ "currency__isNull",
41444
+ "currency__isNotNull",
41380
41445
  "country",
41381
41446
  "country__not",
41382
- "country__isNull",
41383
- "country__isNotNull",
41384
41447
  "country__equals",
41385
41448
  "country__contains",
41386
41449
  "country__startsWith",
41387
41450
  "country__endWith",
41451
+ "country__isNull",
41452
+ "country__isNotNull",
41388
41453
  "external_id",
41389
41454
  "external_id__not",
41390
- "external_id__isNull",
41391
- "external_id__isNotNull",
41392
41455
  "external_id__equals",
41393
41456
  "external_id__contains",
41394
41457
  "external_id__startsWith",
41395
41458
  "external_id__endWith",
41459
+ "external_id__isNull",
41460
+ "external_id__isNotNull",
41396
41461
  "billing_email",
41397
41462
  "billing_email__not",
41398
- "billing_email__isNull",
41399
- "billing_email__isNotNull",
41400
41463
  "billing_email__equals",
41401
41464
  "billing_email__contains",
41402
41465
  "billing_email__startsWith",
41403
41466
  "billing_email__endWith",
41467
+ "billing_email__isNull",
41468
+ "billing_email__isNotNull",
41404
41469
  "search",
41405
41470
  "tax_id",
41406
41471
  "tax_id__not",
41407
- "tax_id__isNull",
41408
- "tax_id__isNotNull",
41409
41472
  "tax_id__equals",
41410
41473
  "tax_id__contains",
41411
41474
  "tax_id__startsWith",
41412
41475
  "tax_id__endWith",
41476
+ "tax_id__isNull",
41477
+ "tax_id__isNotNull",
41413
41478
  "subscription_status",
41414
41479
  "subscription_status__in",
41415
41480
  "invoicing_entity_id",
41416
41481
  "invoicing_entity_id__not",
41417
- "invoicing_entity_id__isNull",
41418
- "invoicing_entity_id__isNotNull",
41419
41482
  "invoicing_entity_id__equals",
41420
41483
  "invoicing_entity_id__contains",
41421
41484
  "invoicing_entity_id__startsWith",
@@ -41427,8 +41490,6 @@ Examples:
41427
41490
  "integration_entity_id",
41428
41491
  "created_at",
41429
41492
  "created_at__not",
41430
- "created_at__isNull",
41431
- "created_at__isNotNull",
41432
41493
  "created_at__equals",
41433
41494
  "created_at__lt",
41434
41495
  "created_at__lte",
@@ -41436,8 +41497,6 @@ Examples:
41436
41497
  "created_at__gte",
41437
41498
  "updated_at",
41438
41499
  "updated_at__not",
41439
- "updated_at__isNull",
41440
- "updated_at__isNotNull",
41441
41500
  "updated_at__equals",
41442
41501
  "updated_at__lt",
41443
41502
  "updated_at__lte",
@@ -42006,7 +42065,7 @@ Examples:
42006
42065
  // build/commands/generated/customers-credits.js
42007
42066
  function registerCustomers_CreditsCommands(parent) {
42008
42067
  const resource = parent.command("customers-credits").description("Manage customers > credits");
42009
- 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", `
42068
+ 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", `
42010
42069
  Examples:
42011
42070
  hyperline customers-credits list
42012
42071
  hyperline customers-credits list --take <take> --product-id <product_id>`).action(async (opts) => {
@@ -42020,10 +42079,6 @@ Examples:
42020
42079
  args.product_id = opts.productId;
42021
42080
  if (opts["productId.not"] !== void 0)
42022
42081
  args.product_id__not = opts["productId.not"];
42023
- if (opts["productId.isNull"] !== void 0)
42024
- args.product_id__isNull = opts["productId.isNull"];
42025
- if (opts["productId.isNotNull"] !== void 0)
42026
- args.product_id__isNotNull = opts["productId.isNotNull"];
42027
42082
  if (opts["productId.equals"] !== void 0)
42028
42083
  args.product_id__equals = opts["productId.equals"];
42029
42084
  if (opts["productId.contains"] !== void 0)
@@ -42036,10 +42091,6 @@ Examples:
42036
42091
  args.customer_id = opts.customerId;
42037
42092
  if (opts["customerId.not"] !== void 0)
42038
42093
  args.customer_id__not = opts["customerId.not"];
42039
- if (opts["customerId.isNull"] !== void 0)
42040
- args.customer_id__isNull = opts["customerId.isNull"];
42041
- if (opts["customerId.isNotNull"] !== void 0)
42042
- args.customer_id__isNotNull = opts["customerId.isNotNull"];
42043
42094
  if (opts["customerId.equals"] !== void 0)
42044
42095
  args.customer_id__equals = opts["customerId.equals"];
42045
42096
  if (opts["customerId.contains"] !== void 0)
@@ -42052,10 +42103,6 @@ Examples:
42052
42103
  args.updated_at = opts.updatedAt;
42053
42104
  if (opts["updatedAt.not"] !== void 0)
42054
42105
  args.updated_at__not = opts["updatedAt.not"];
42055
- if (opts["updatedAt.isNull"] !== void 0)
42056
- args.updated_at__isNull = opts["updatedAt.isNull"];
42057
- if (opts["updatedAt.isNotNull"] !== void 0)
42058
- args.updated_at__isNotNull = opts["updatedAt.isNotNull"];
42059
42106
  if (opts["updatedAt.equals"] !== void 0)
42060
42107
  args.updated_at__equals = opts["updatedAt.equals"];
42061
42108
  if (opts["updatedAt.lt"] !== void 0)
@@ -42079,24 +42126,18 @@ Examples:
42079
42126
  "skip",
42080
42127
  "product_id",
42081
42128
  "product_id__not",
42082
- "product_id__isNull",
42083
- "product_id__isNotNull",
42084
42129
  "product_id__equals",
42085
42130
  "product_id__contains",
42086
42131
  "product_id__startsWith",
42087
42132
  "product_id__endWith",
42088
42133
  "customer_id",
42089
42134
  "customer_id__not",
42090
- "customer_id__isNull",
42091
- "customer_id__isNotNull",
42092
42135
  "customer_id__equals",
42093
42136
  "customer_id__contains",
42094
42137
  "customer_id__startsWith",
42095
42138
  "customer_id__endWith",
42096
42139
  "updated_at",
42097
42140
  "updated_at__not",
42098
- "updated_at__isNull",
42099
- "updated_at__isNotNull",
42100
42141
  "updated_at__equals",
42101
42142
  "updated_at__lt",
42102
42143
  "updated_at__lte",
@@ -42369,6 +42410,88 @@ Examples:
42369
42410
  });
42370
42411
  }
42371
42412
 
42413
+ // build/commands/generated/customers-features.js
42414
+ function registerCustomers_FeaturesCommands(parent) {
42415
+ const resource = parent.command("customers-features").description("Manage customers > features");
42416
+ resource.command("resolve-customer-features").description(`Resolve feature values for a customer.`).requiredOption("--id <value>", `id parameter`).option("--at <value>", `Resolution date.`).addHelpText("after", `
42417
+ Examples:
42418
+ hyperline customers-features resolve-customer-features --id <id>
42419
+ hyperline customers-features resolve-customer-features --id <id> --at <at>`).action(async (opts) => {
42420
+ const ctx = resource.parent?.opts()._ctx;
42421
+ if (!ctx) {
42422
+ process.stderr.write("Error: Not authenticated\n");
42423
+ process.exit(1);
42424
+ }
42425
+ const args = {};
42426
+ if (opts.id !== void 0)
42427
+ args.id = opts.id;
42428
+ if (opts.at !== void 0)
42429
+ args.at = opts.at;
42430
+ await ctx.execute({
42431
+ method: "GET",
42432
+ path: "/v1/customers/{id}/features",
42433
+ args,
42434
+ queryParamKeys: ["at"]
42435
+ });
42436
+ });
42437
+ 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", `
42438
+ Examples:
42439
+ hyperline customers-features set-customer-feature --id <id> --code <code> --value
42440
+ hyperline customers-features set-customer-feature --id <id> --code <code> --value --reason <reason> --expires-at <expires_at>
42441
+ hyperline customers-features set-customer-feature --id <id> --code <code> --value --output json`).action(async (opts) => {
42442
+ const ctx = resource.parent?.opts()._ctx;
42443
+ if (!ctx) {
42444
+ process.stderr.write("Error: Not authenticated\n");
42445
+ process.exit(1);
42446
+ }
42447
+ const args = {};
42448
+ if (opts.id !== void 0)
42449
+ args.id = opts.id;
42450
+ if (opts.code !== void 0)
42451
+ args.code = opts.code;
42452
+ if (opts.reason !== void 0)
42453
+ args.reason = opts.reason;
42454
+ if (opts.expiresAt !== void 0)
42455
+ args.expires_at = opts.expiresAt;
42456
+ if (opts.value !== void 0)
42457
+ args.value = true;
42458
+ await ctx.execute({
42459
+ method: "PUT",
42460
+ path: "/v1/customers/{id}/features/{code}",
42461
+ args,
42462
+ queryParamKeys: []
42463
+ });
42464
+ });
42465
+ 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", `
42466
+ Examples:
42467
+ hyperline customers-features delete-customer-feature --id <id> --code <code>
42468
+ hyperline customers-features delete-customer-feature --id <id> --code <code> --output json`).action(async (opts) => {
42469
+ const ctx = resource.parent?.opts()._ctx;
42470
+ if (!ctx) {
42471
+ process.stderr.write("Error: Not authenticated\n");
42472
+ process.exit(1);
42473
+ }
42474
+ const args = {};
42475
+ if (opts.id !== void 0)
42476
+ args.id = opts.id;
42477
+ if (opts.code !== void 0)
42478
+ args.code = opts.code;
42479
+ if (!opts.yes) {
42480
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
42481
+ if (!confirmed) {
42482
+ process.stdout.write("Aborted.\n");
42483
+ return;
42484
+ }
42485
+ }
42486
+ await ctx.execute({
42487
+ method: "DELETE",
42488
+ path: "/v1/customers/{id}/features/{code}",
42489
+ args,
42490
+ queryParamKeys: []
42491
+ });
42492
+ });
42493
+ }
42494
+
42372
42495
  // build/commands/generated/customers-payment-methods.js
42373
42496
  function registerCustomers_Payment_MethodsCommands(parent) {
42374
42497
  const resource = parent.command("customers-payment-methods").description("Manage customers > payment methods");
@@ -42818,45 +42941,35 @@ Examples:
42818
42941
  });
42819
42942
  }
42820
42943
 
42821
- // build/commands/generated/files.js
42822
- function registerFilesCommands(parent) {
42823
- const resource = parent.command("files").description("Manage files");
42824
- resource.command("download").description(`Download the raw content of a file by ID. Returns the file binary with appropriate content type.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
42825
- Examples:
42826
- hyperline files download --id <id>`).action(async (opts) => {
42827
- const ctx = resource.parent?.opts()._ctx;
42828
- if (!ctx) {
42829
- process.stderr.write("Error: Not authenticated\n");
42830
- process.exit(1);
42831
- }
42832
- const args = {};
42833
- if (opts.id !== void 0)
42834
- args.id = opts.id;
42835
- await ctx.execute({
42836
- method: "GET",
42837
- path: "/v1/files/{id}/download",
42838
- args,
42839
- queryParamKeys: []
42840
- });
42841
- });
42842
- 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", `
42944
+ // build/commands/generated/features.js
42945
+ function registerFeaturesCommands(parent) {
42946
+ const resource = parent.command("features").description("Manage features");
42947
+ 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", `
42843
42948
  Examples:
42844
- hyperline files list
42845
- hyperline files list --take <take> --name <name>`).action(async (opts) => {
42949
+ hyperline features list
42950
+ hyperline features list --take <take> --code <code>`).action(async (opts) => {
42846
42951
  const ctx = resource.parent?.opts()._ctx;
42847
42952
  if (!ctx) {
42848
42953
  process.stderr.write("Error: Not authenticated\n");
42849
42954
  process.exit(1);
42850
42955
  }
42851
42956
  const args = {};
42957
+ if (opts.code !== void 0)
42958
+ args.code = opts.code;
42959
+ if (opts["code.not"] !== void 0)
42960
+ args.code__not = opts["code.not"];
42961
+ if (opts["code.equals"] !== void 0)
42962
+ args.code__equals = opts["code.equals"];
42963
+ if (opts["code.contains"] !== void 0)
42964
+ args.code__contains = opts["code.contains"];
42965
+ if (opts["code.startsWith"] !== void 0)
42966
+ args.code__startsWith = opts["code.startsWith"];
42967
+ if (opts["code.endWith"] !== void 0)
42968
+ args.code__endWith = opts["code.endWith"];
42852
42969
  if (opts.name !== void 0)
42853
42970
  args.name = opts.name;
42854
42971
  if (opts["name.not"] !== void 0)
42855
42972
  args.name__not = opts["name.not"];
42856
- if (opts["name.isNull"] !== void 0)
42857
- args.name__isNull = opts["name.isNull"];
42858
- if (opts["name.isNotNull"] !== void 0)
42859
- args.name__isNotNull = opts["name.isNotNull"];
42860
42973
  if (opts["name.equals"] !== void 0)
42861
42974
  args.name__equals = opts["name.equals"];
42862
42975
  if (opts["name.contains"] !== void 0)
@@ -42865,49 +42978,269 @@ Examples:
42865
42978
  args.name__startsWith = opts["name.startsWith"];
42866
42979
  if (opts["name.endWith"] !== void 0)
42867
42980
  args.name__endWith = opts["name.endWith"];
42868
- if (opts.customerId !== void 0)
42869
- args.customer_id = opts.customerId;
42870
- if (opts["customerId.not"] !== void 0)
42871
- args.customer_id__not = opts["customerId.not"];
42872
- if (opts["customerId.isNull"] !== void 0)
42873
- args.customer_id__isNull = opts["customerId.isNull"];
42874
- if (opts["customerId.isNotNull"] !== void 0)
42875
- args.customer_id__isNotNull = opts["customerId.isNotNull"];
42876
- if (opts["customerId.equals"] !== void 0)
42877
- args.customer_id__equals = opts["customerId.equals"];
42878
- if (opts["customerId.contains"] !== void 0)
42879
- args.customer_id__contains = opts["customerId.contains"];
42880
- if (opts["customerId.startsWith"] !== void 0)
42881
- args.customer_id__startsWith = opts["customerId.startsWith"];
42882
- if (opts["customerId.endWith"] !== void 0)
42883
- args.customer_id__endWith = opts["customerId.endWith"];
42981
+ if (opts.status !== void 0)
42982
+ args.status = opts.status;
42983
+ if (opts["status.in"] !== void 0)
42984
+ args.status__in = opts["status.in"];
42985
+ if (opts.search !== void 0)
42986
+ args.search = opts.search;
42884
42987
  if (opts.take !== void 0)
42885
42988
  args.take = Number(opts.take);
42886
42989
  if (opts.skip !== void 0)
42887
42990
  args.skip = Number(opts.skip);
42888
42991
  await ctx.execute({
42889
42992
  method: "GET",
42890
- path: "/v1/files",
42993
+ path: "/v1/features",
42891
42994
  args,
42892
42995
  queryParamKeys: [
42893
42996
  "take",
42894
42997
  "skip",
42998
+ "code",
42999
+ "code__not",
43000
+ "code__equals",
43001
+ "code__contains",
43002
+ "code__startsWith",
43003
+ "code__endWith",
42895
43004
  "name",
42896
43005
  "name__not",
42897
- "name__isNull",
42898
- "name__isNotNull",
42899
43006
  "name__equals",
42900
43007
  "name__contains",
42901
43008
  "name__startsWith",
42902
43009
  "name__endWith",
42903
- "customer_id",
42904
- "customer_id__not",
42905
- "customer_id__isNull",
42906
- "customer_id__isNotNull",
43010
+ "status",
43011
+ "status__in",
43012
+ "search"
43013
+ ]
43014
+ });
43015
+ });
43016
+ 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", `
43017
+ Examples:
43018
+ hyperline features create --code <code> --name <name> --value-type <value_type> --default-value
43019
+ hyperline features create --code <code> --name <name> --value-type <value_type> --default-value --description <description> --resolution-strategy <resolution_strategy>
43020
+ hyperline features create --code <code> --name <name> --value-type <value_type> --default-value --output json`).action(async (opts) => {
43021
+ const ctx = resource.parent?.opts()._ctx;
43022
+ if (!ctx) {
43023
+ process.stderr.write("Error: Not authenticated\n");
43024
+ process.exit(1);
43025
+ }
43026
+ const args = {};
43027
+ if (opts.code !== void 0)
43028
+ args.code = opts.code;
43029
+ if (opts.name !== void 0)
43030
+ args.name = opts.name;
43031
+ if (opts.description !== void 0)
43032
+ args.description = opts.description;
43033
+ if (opts.valueType !== void 0)
43034
+ args.value_type = opts.valueType;
43035
+ if (opts.resolutionStrategy !== void 0)
43036
+ args.resolution_strategy = opts.resolutionStrategy;
43037
+ if (opts.defaultValue !== void 0)
43038
+ args.default_value = true;
43039
+ await ctx.execute({
43040
+ method: "POST",
43041
+ path: "/v1/features",
43042
+ args,
43043
+ queryParamKeys: []
43044
+ });
43045
+ });
43046
+ resource.command("get").description(`Retrieve a feature definition.`).requiredOption("--code <value>", `code parameter`).addHelpText("after", `
43047
+ Examples:
43048
+ hyperline features get --code <code>`).action(async (opts) => {
43049
+ const ctx = resource.parent?.opts()._ctx;
43050
+ if (!ctx) {
43051
+ process.stderr.write("Error: Not authenticated\n");
43052
+ process.exit(1);
43053
+ }
43054
+ const args = {};
43055
+ if (opts.code !== void 0)
43056
+ args.code = opts.code;
43057
+ await ctx.execute({
43058
+ method: "GET",
43059
+ path: "/v1/features/{code}",
43060
+ args,
43061
+ queryParamKeys: []
43062
+ });
43063
+ });
43064
+ 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", `
43065
+ Examples:
43066
+ hyperline features update --code <code>
43067
+ hyperline features update --code <code> --name <name> --description <description>
43068
+ hyperline features update --code <code> --output json`).action(async (opts) => {
43069
+ const ctx = resource.parent?.opts()._ctx;
43070
+ if (!ctx) {
43071
+ process.stderr.write("Error: Not authenticated\n");
43072
+ process.exit(1);
43073
+ }
43074
+ const args = {};
43075
+ if (opts.code !== void 0)
43076
+ args.code = opts.code;
43077
+ if (opts.name !== void 0)
43078
+ args.name = opts.name;
43079
+ if (opts.description !== void 0)
43080
+ args.description = opts.description;
43081
+ if (opts.valueType !== void 0)
43082
+ args.value_type = opts.valueType;
43083
+ if (opts.resolutionStrategy !== void 0)
43084
+ args.resolution_strategy = opts.resolutionStrategy;
43085
+ if (opts.defaultValue !== void 0)
43086
+ args.default_value = true;
43087
+ await ctx.execute({
43088
+ method: "PUT",
43089
+ path: "/v1/features/{code}",
43090
+ args,
43091
+ queryParamKeys: []
43092
+ });
43093
+ });
43094
+ resource.command("archive").description(`Archive a feature definition.`).requiredOption("--code <value>", `code parameter`).addHelpText("after", `
43095
+ Examples:
43096
+ hyperline features archive --code <code>
43097
+ hyperline features archive --code <code> --output json`).action(async (opts) => {
43098
+ const ctx = resource.parent?.opts()._ctx;
43099
+ if (!ctx) {
43100
+ process.stderr.write("Error: Not authenticated\n");
43101
+ process.exit(1);
43102
+ }
43103
+ const args = {};
43104
+ if (opts.code !== void 0)
43105
+ args.code = opts.code;
43106
+ await ctx.execute({
43107
+ method: "PUT",
43108
+ path: "/v1/features/{code}/archive",
43109
+ args,
43110
+ queryParamKeys: []
43111
+ });
43112
+ });
43113
+ 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", `
43114
+ Examples:
43115
+ hyperline features delete --code <code>
43116
+ hyperline features delete --code <code> --output json`).action(async (opts) => {
43117
+ const ctx = resource.parent?.opts()._ctx;
43118
+ if (!ctx) {
43119
+ process.stderr.write("Error: Not authenticated\n");
43120
+ process.exit(1);
43121
+ }
43122
+ const args = {};
43123
+ if (opts.code !== void 0)
43124
+ args.code = opts.code;
43125
+ if (!opts.yes) {
43126
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
43127
+ if (!confirmed) {
43128
+ process.stdout.write("Aborted.\n");
43129
+ return;
43130
+ }
43131
+ }
43132
+ await ctx.execute({
43133
+ method: "DELETE",
43134
+ path: "/v1/features/{code}",
43135
+ args,
43136
+ queryParamKeys: []
43137
+ });
43138
+ });
43139
+ resource.command("unarchive").description(`Unarchive a feature definition.`).requiredOption("--code <value>", `code parameter`).addHelpText("after", `
43140
+ Examples:
43141
+ hyperline features unarchive --code <code>
43142
+ hyperline features unarchive --code <code> --output json`).action(async (opts) => {
43143
+ const ctx = resource.parent?.opts()._ctx;
43144
+ if (!ctx) {
43145
+ process.stderr.write("Error: Not authenticated\n");
43146
+ process.exit(1);
43147
+ }
43148
+ const args = {};
43149
+ if (opts.code !== void 0)
43150
+ args.code = opts.code;
43151
+ await ctx.execute({
43152
+ method: "PUT",
43153
+ path: "/v1/features/{code}/unarchive",
43154
+ args,
43155
+ queryParamKeys: []
43156
+ });
43157
+ });
43158
+ }
43159
+
43160
+ // build/commands/generated/files.js
43161
+ function registerFilesCommands(parent) {
43162
+ const resource = parent.command("files").description("Manage files");
43163
+ resource.command("download").description(`Download the raw content of a file by ID. Returns the file binary with appropriate content type.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
43164
+ Examples:
43165
+ hyperline files download --id <id>`).action(async (opts) => {
43166
+ const ctx = resource.parent?.opts()._ctx;
43167
+ if (!ctx) {
43168
+ process.stderr.write("Error: Not authenticated\n");
43169
+ process.exit(1);
43170
+ }
43171
+ const args = {};
43172
+ if (opts.id !== void 0)
43173
+ args.id = opts.id;
43174
+ await ctx.execute({
43175
+ method: "GET",
43176
+ path: "/v1/files/{id}/download",
43177
+ args,
43178
+ queryParamKeys: []
43179
+ });
43180
+ });
43181
+ 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", `
43182
+ Examples:
43183
+ hyperline files list
43184
+ hyperline files list --take <take> --name <name>`).action(async (opts) => {
43185
+ const ctx = resource.parent?.opts()._ctx;
43186
+ if (!ctx) {
43187
+ process.stderr.write("Error: Not authenticated\n");
43188
+ process.exit(1);
43189
+ }
43190
+ const args = {};
43191
+ if (opts.name !== void 0)
43192
+ args.name = opts.name;
43193
+ if (opts["name.not"] !== void 0)
43194
+ args.name__not = opts["name.not"];
43195
+ if (opts["name.equals"] !== void 0)
43196
+ args.name__equals = opts["name.equals"];
43197
+ if (opts["name.contains"] !== void 0)
43198
+ args.name__contains = opts["name.contains"];
43199
+ if (opts["name.startsWith"] !== void 0)
43200
+ args.name__startsWith = opts["name.startsWith"];
43201
+ if (opts["name.endWith"] !== void 0)
43202
+ args.name__endWith = opts["name.endWith"];
43203
+ if (opts.customerId !== void 0)
43204
+ args.customer_id = opts.customerId;
43205
+ if (opts["customerId.not"] !== void 0)
43206
+ args.customer_id__not = opts["customerId.not"];
43207
+ if (opts["customerId.equals"] !== void 0)
43208
+ args.customer_id__equals = opts["customerId.equals"];
43209
+ if (opts["customerId.contains"] !== void 0)
43210
+ args.customer_id__contains = opts["customerId.contains"];
43211
+ if (opts["customerId.startsWith"] !== void 0)
43212
+ args.customer_id__startsWith = opts["customerId.startsWith"];
43213
+ if (opts["customerId.endWith"] !== void 0)
43214
+ args.customer_id__endWith = opts["customerId.endWith"];
43215
+ if (opts["customerId.isNull"] !== void 0)
43216
+ args.customer_id__isNull = opts["customerId.isNull"];
43217
+ if (opts["customerId.isNotNull"] !== void 0)
43218
+ args.customer_id__isNotNull = opts["customerId.isNotNull"];
43219
+ if (opts.take !== void 0)
43220
+ args.take = Number(opts.take);
43221
+ if (opts.skip !== void 0)
43222
+ args.skip = Number(opts.skip);
43223
+ await ctx.execute({
43224
+ method: "GET",
43225
+ path: "/v1/files",
43226
+ args,
43227
+ queryParamKeys: [
43228
+ "take",
43229
+ "skip",
43230
+ "name",
43231
+ "name__not",
43232
+ "name__equals",
43233
+ "name__contains",
43234
+ "name__startsWith",
43235
+ "name__endWith",
43236
+ "customer_id",
43237
+ "customer_id__not",
42907
43238
  "customer_id__equals",
42908
43239
  "customer_id__contains",
42909
43240
  "customer_id__startsWith",
42910
- "customer_id__endWith"
43241
+ "customer_id__endWith",
43242
+ "customer_id__isNull",
43243
+ "customer_id__isNotNull"
42911
43244
  ]
42912
43245
  });
42913
43246
  });
@@ -42963,7 +43296,7 @@ Examples:
42963
43296
  // build/commands/generated/invoices.js
42964
43297
  function registerInvoicesCommands(parent) {
42965
43298
  const resource = parent.command("invoices").description("Manage invoices");
42966
- 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", `
43299
+ 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", `
42967
43300
  Examples:
42968
43301
  hyperline invoices list
42969
43302
  hyperline invoices list --limit <limit> --cursor <cursor>`).action(async (opts) => {
@@ -42993,10 +43326,6 @@ Examples:
42993
43326
  args.customer_id = opts.customerId;
42994
43327
  if (opts["customerId.not"] !== void 0)
42995
43328
  args.customer_id__not = opts["customerId.not"];
42996
- if (opts["customerId.isNull"] !== void 0)
42997
- args.customer_id__isNull = opts["customerId.isNull"];
42998
- if (opts["customerId.isNotNull"] !== void 0)
42999
- args.customer_id__isNotNull = opts["customerId.isNotNull"];
43000
43329
  if (opts["customerId.equals"] !== void 0)
43001
43330
  args.customer_id__equals = opts["customerId.equals"];
43002
43331
  if (opts["customerId.contains"] !== void 0)
@@ -43011,10 +43340,6 @@ Examples:
43011
43340
  args.subscription_id = opts.subscriptionId;
43012
43341
  if (opts["subscriptionId.not"] !== void 0)
43013
43342
  args.subscription_id__not = opts["subscriptionId.not"];
43014
- if (opts["subscriptionId.isNull"] !== void 0)
43015
- args.subscription_id__isNull = opts["subscriptionId.isNull"];
43016
- if (opts["subscriptionId.isNotNull"] !== void 0)
43017
- args.subscription_id__isNotNull = opts["subscriptionId.isNotNull"];
43018
43343
  if (opts["subscriptionId.equals"] !== void 0)
43019
43344
  args.subscription_id__equals = opts["subscriptionId.equals"];
43020
43345
  if (opts["subscriptionId.contains"] !== void 0)
@@ -43023,14 +43348,14 @@ Examples:
43023
43348
  args.subscription_id__startsWith = opts["subscriptionId.startsWith"];
43024
43349
  if (opts["subscriptionId.endWith"] !== void 0)
43025
43350
  args.subscription_id__endWith = opts["subscriptionId.endWith"];
43351
+ if (opts["subscriptionId.isNull"] !== void 0)
43352
+ args.subscription_id__isNull = opts["subscriptionId.isNull"];
43353
+ if (opts["subscriptionId.isNotNull"] !== void 0)
43354
+ args.subscription_id__isNotNull = opts["subscriptionId.isNotNull"];
43026
43355
  if (opts.invoicingEntityId !== void 0)
43027
43356
  args.invoicing_entity_id = opts.invoicingEntityId;
43028
43357
  if (opts["invoicingEntityId.not"] !== void 0)
43029
43358
  args.invoicing_entity_id__not = opts["invoicingEntityId.not"];
43030
- if (opts["invoicingEntityId.isNull"] !== void 0)
43031
- args.invoicing_entity_id__isNull = opts["invoicingEntityId.isNull"];
43032
- if (opts["invoicingEntityId.isNotNull"] !== void 0)
43033
- args.invoicing_entity_id__isNotNull = opts["invoicingEntityId.isNotNull"];
43034
43359
  if (opts["invoicingEntityId.equals"] !== void 0)
43035
43360
  args.invoicing_entity_id__equals = opts["invoicingEntityId.equals"];
43036
43361
  if (opts["invoicingEntityId.contains"] !== void 0)
@@ -43043,10 +43368,6 @@ Examples:
43043
43368
  args.invoice_number = opts.invoiceNumber;
43044
43369
  if (opts["invoiceNumber.not"] !== void 0)
43045
43370
  args.invoice_number__not = opts["invoiceNumber.not"];
43046
- if (opts["invoiceNumber.isNull"] !== void 0)
43047
- args.invoice_number__isNull = opts["invoiceNumber.isNull"];
43048
- if (opts["invoiceNumber.isNotNull"] !== void 0)
43049
- args.invoice_number__isNotNull = opts["invoiceNumber.isNotNull"];
43050
43371
  if (opts["invoiceNumber.equals"] !== void 0)
43051
43372
  args.invoice_number__equals = opts["invoiceNumber.equals"];
43052
43373
  if (opts["invoiceNumber.contains"] !== void 0)
@@ -43059,10 +43380,6 @@ Examples:
43059
43380
  args.original_invoice_id = opts.originalInvoiceId;
43060
43381
  if (opts["originalInvoiceId.not"] !== void 0)
43061
43382
  args.original_invoice_id__not = opts["originalInvoiceId.not"];
43062
- if (opts["originalInvoiceId.isNull"] !== void 0)
43063
- args.original_invoice_id__isNull = opts["originalInvoiceId.isNull"];
43064
- if (opts["originalInvoiceId.isNotNull"] !== void 0)
43065
- args.original_invoice_id__isNotNull = opts["originalInvoiceId.isNotNull"];
43066
43383
  if (opts["originalInvoiceId.equals"] !== void 0)
43067
43384
  args.original_invoice_id__equals = opts["originalInvoiceId.equals"];
43068
43385
  if (opts["originalInvoiceId.contains"] !== void 0)
@@ -43071,14 +43388,14 @@ Examples:
43071
43388
  args.original_invoice_id__startsWith = opts["originalInvoiceId.startsWith"];
43072
43389
  if (opts["originalInvoiceId.endWith"] !== void 0)
43073
43390
  args.original_invoice_id__endWith = opts["originalInvoiceId.endWith"];
43391
+ if (opts["originalInvoiceId.isNull"] !== void 0)
43392
+ args.original_invoice_id__isNull = opts["originalInvoiceId.isNull"];
43393
+ if (opts["originalInvoiceId.isNotNull"] !== void 0)
43394
+ args.original_invoice_id__isNotNull = opts["originalInvoiceId.isNotNull"];
43074
43395
  if (opts.originalInvoiceNumber !== void 0)
43075
43396
  args.original_invoice_number = opts.originalInvoiceNumber;
43076
43397
  if (opts["originalInvoiceNumber.not"] !== void 0)
43077
43398
  args.original_invoice_number__not = opts["originalInvoiceNumber.not"];
43078
- if (opts["originalInvoiceNumber.isNull"] !== void 0)
43079
- args.original_invoice_number__isNull = opts["originalInvoiceNumber.isNull"];
43080
- if (opts["originalInvoiceNumber.isNotNull"] !== void 0)
43081
- args.original_invoice_number__isNotNull = opts["originalInvoiceNumber.isNotNull"];
43082
43399
  if (opts["originalInvoiceNumber.equals"] !== void 0)
43083
43400
  args.original_invoice_number__equals = opts["originalInvoiceNumber.equals"];
43084
43401
  if (opts["originalInvoiceNumber.contains"] !== void 0)
@@ -43087,16 +43404,16 @@ Examples:
43087
43404
  args.original_invoice_number__startsWith = opts["originalInvoiceNumber.startsWith"];
43088
43405
  if (opts["originalInvoiceNumber.endWith"] !== void 0)
43089
43406
  args.original_invoice_number__endWith = opts["originalInvoiceNumber.endWith"];
43407
+ if (opts["originalInvoiceNumber.isNull"] !== void 0)
43408
+ args.original_invoice_number__isNull = opts["originalInvoiceNumber.isNull"];
43409
+ if (opts["originalInvoiceNumber.isNotNull"] !== void 0)
43410
+ args.original_invoice_number__isNotNull = opts["originalInvoiceNumber.isNotNull"];
43090
43411
  if (opts.lineItemId !== void 0)
43091
43412
  args.line_item_id = opts.lineItemId;
43092
43413
  if (opts.periodStart !== void 0)
43093
43414
  args.period_start = opts.periodStart;
43094
43415
  if (opts["periodStart.not"] !== void 0)
43095
43416
  args.period_start__not = opts["periodStart.not"];
43096
- if (opts["periodStart.isNull"] !== void 0)
43097
- args.period_start__isNull = opts["periodStart.isNull"];
43098
- if (opts["periodStart.isNotNull"] !== void 0)
43099
- args.period_start__isNotNull = opts["periodStart.isNotNull"];
43100
43417
  if (opts["periodStart.equals"] !== void 0)
43101
43418
  args.period_start__equals = opts["periodStart.equals"];
43102
43419
  if (opts["periodStart.lt"] !== void 0)
@@ -43107,14 +43424,14 @@ Examples:
43107
43424
  args.period_start__gt = opts["periodStart.gt"];
43108
43425
  if (opts["periodStart.gte"] !== void 0)
43109
43426
  args.period_start__gte = opts["periodStart.gte"];
43427
+ if (opts["periodStart.isNull"] !== void 0)
43428
+ args.period_start__isNull = opts["periodStart.isNull"];
43429
+ if (opts["periodStart.isNotNull"] !== void 0)
43430
+ args.period_start__isNotNull = opts["periodStart.isNotNull"];
43110
43431
  if (opts.periodEnd !== void 0)
43111
43432
  args.period_end = opts.periodEnd;
43112
43433
  if (opts["periodEnd.not"] !== void 0)
43113
43434
  args.period_end__not = opts["periodEnd.not"];
43114
- if (opts["periodEnd.isNull"] !== void 0)
43115
- args.period_end__isNull = opts["periodEnd.isNull"];
43116
- if (opts["periodEnd.isNotNull"] !== void 0)
43117
- args.period_end__isNotNull = opts["periodEnd.isNotNull"];
43118
43435
  if (opts["periodEnd.equals"] !== void 0)
43119
43436
  args.period_end__equals = opts["periodEnd.equals"];
43120
43437
  if (opts["periodEnd.lt"] !== void 0)
@@ -43125,14 +43442,14 @@ Examples:
43125
43442
  args.period_end__gt = opts["periodEnd.gt"];
43126
43443
  if (opts["periodEnd.gte"] !== void 0)
43127
43444
  args.period_end__gte = opts["periodEnd.gte"];
43445
+ if (opts["periodEnd.isNull"] !== void 0)
43446
+ args.period_end__isNull = opts["periodEnd.isNull"];
43447
+ if (opts["periodEnd.isNotNull"] !== void 0)
43448
+ args.period_end__isNotNull = opts["periodEnd.isNotNull"];
43128
43449
  if (opts.issuedAt !== void 0)
43129
43450
  args.issued_at = opts.issuedAt;
43130
43451
  if (opts["issuedAt.not"] !== void 0)
43131
43452
  args.issued_at__not = opts["issuedAt.not"];
43132
- if (opts["issuedAt.isNull"] !== void 0)
43133
- args.issued_at__isNull = opts["issuedAt.isNull"];
43134
- if (opts["issuedAt.isNotNull"] !== void 0)
43135
- args.issued_at__isNotNull = opts["issuedAt.isNotNull"];
43136
43453
  if (opts["issuedAt.equals"] !== void 0)
43137
43454
  args.issued_at__equals = opts["issuedAt.equals"];
43138
43455
  if (opts["issuedAt.lt"] !== void 0)
@@ -43147,10 +43464,6 @@ Examples:
43147
43464
  args.due_at = opts.dueAt;
43148
43465
  if (opts["dueAt.not"] !== void 0)
43149
43466
  args.due_at__not = opts["dueAt.not"];
43150
- if (opts["dueAt.isNull"] !== void 0)
43151
- args.due_at__isNull = opts["dueAt.isNull"];
43152
- if (opts["dueAt.isNotNull"] !== void 0)
43153
- args.due_at__isNotNull = opts["dueAt.isNotNull"];
43154
43467
  if (opts["dueAt.equals"] !== void 0)
43155
43468
  args.due_at__equals = opts["dueAt.equals"];
43156
43469
  if (opts["dueAt.lt"] !== void 0)
@@ -43165,10 +43478,6 @@ Examples:
43165
43478
  args.updated_at = opts.updatedAt;
43166
43479
  if (opts["updatedAt.not"] !== void 0)
43167
43480
  args.updated_at__not = opts["updatedAt.not"];
43168
- if (opts["updatedAt.isNull"] !== void 0)
43169
- args.updated_at__isNull = opts["updatedAt.isNull"];
43170
- if (opts["updatedAt.isNotNull"] !== void 0)
43171
- args.updated_at__isNotNull = opts["updatedAt.isNotNull"];
43172
43481
  if (opts["updatedAt.equals"] !== void 0)
43173
43482
  args.updated_at__equals = opts["updatedAt.equals"];
43174
43483
  if (opts["updatedAt.lt"] !== void 0)
@@ -43197,8 +43506,6 @@ Examples:
43197
43506
  "status__in",
43198
43507
  "customer_id",
43199
43508
  "customer_id__not",
43200
- "customer_id__isNull",
43201
- "customer_id__isNotNull",
43202
43509
  "customer_id__equals",
43203
43510
  "customer_id__contains",
43204
43511
  "customer_id__startsWith",
@@ -43206,67 +43513,61 @@ Examples:
43206
43513
  "customer_external_id",
43207
43514
  "subscription_id",
43208
43515
  "subscription_id__not",
43209
- "subscription_id__isNull",
43210
- "subscription_id__isNotNull",
43211
43516
  "subscription_id__equals",
43212
43517
  "subscription_id__contains",
43213
43518
  "subscription_id__startsWith",
43214
43519
  "subscription_id__endWith",
43520
+ "subscription_id__isNull",
43521
+ "subscription_id__isNotNull",
43215
43522
  "invoicing_entity_id",
43216
43523
  "invoicing_entity_id__not",
43217
- "invoicing_entity_id__isNull",
43218
- "invoicing_entity_id__isNotNull",
43219
43524
  "invoicing_entity_id__equals",
43220
43525
  "invoicing_entity_id__contains",
43221
43526
  "invoicing_entity_id__startsWith",
43222
43527
  "invoicing_entity_id__endWith",
43223
43528
  "invoice_number",
43224
43529
  "invoice_number__not",
43225
- "invoice_number__isNull",
43226
- "invoice_number__isNotNull",
43227
43530
  "invoice_number__equals",
43228
43531
  "invoice_number__contains",
43229
43532
  "invoice_number__startsWith",
43230
43533
  "invoice_number__endWith",
43231
43534
  "original_invoice_id",
43232
43535
  "original_invoice_id__not",
43233
- "original_invoice_id__isNull",
43234
- "original_invoice_id__isNotNull",
43235
43536
  "original_invoice_id__equals",
43236
43537
  "original_invoice_id__contains",
43237
43538
  "original_invoice_id__startsWith",
43238
43539
  "original_invoice_id__endWith",
43540
+ "original_invoice_id__isNull",
43541
+ "original_invoice_id__isNotNull",
43239
43542
  "original_invoice_number",
43240
43543
  "original_invoice_number__not",
43241
- "original_invoice_number__isNull",
43242
- "original_invoice_number__isNotNull",
43243
43544
  "original_invoice_number__equals",
43244
43545
  "original_invoice_number__contains",
43245
43546
  "original_invoice_number__startsWith",
43246
43547
  "original_invoice_number__endWith",
43548
+ "original_invoice_number__isNull",
43549
+ "original_invoice_number__isNotNull",
43247
43550
  "line_item_id",
43248
43551
  "period_start",
43249
43552
  "period_start__not",
43250
- "period_start__isNull",
43251
- "period_start__isNotNull",
43252
43553
  "period_start__equals",
43253
43554
  "period_start__lt",
43254
43555
  "period_start__lte",
43255
43556
  "period_start__gt",
43256
43557
  "period_start__gte",
43558
+ "period_start__isNull",
43559
+ "period_start__isNotNull",
43257
43560
  "period_end",
43258
43561
  "period_end__not",
43259
- "period_end__isNull",
43260
- "period_end__isNotNull",
43261
43562
  "period_end__equals",
43262
43563
  "period_end__lt",
43263
43564
  "period_end__lte",
43264
43565
  "period_end__gt",
43265
43566
  "period_end__gte",
43567
+ "period_end__isNull",
43568
+ "period_end__isNotNull",
43266
43569
  "issued_at",
43267
43570
  "issued_at__not",
43268
- "issued_at__isNull",
43269
- "issued_at__isNotNull",
43270
43571
  "issued_at__equals",
43271
43572
  "issued_at__lt",
43272
43573
  "issued_at__lte",
@@ -43274,8 +43575,6 @@ Examples:
43274
43575
  "issued_at__gte",
43275
43576
  "due_at",
43276
43577
  "due_at__not",
43277
- "due_at__isNull",
43278
- "due_at__isNotNull",
43279
43578
  "due_at__equals",
43280
43579
  "due_at__lt",
43281
43580
  "due_at__lte",
@@ -43283,8 +43582,6 @@ Examples:
43283
43582
  "due_at__gte",
43284
43583
  "updated_at",
43285
43584
  "updated_at__not",
43286
- "updated_at__isNull",
43287
- "updated_at__isNotNull",
43288
43585
  "updated_at__equals",
43289
43586
  "updated_at__lt",
43290
43587
  "updated_at__lte",
@@ -44012,7 +44309,7 @@ Examples:
44012
44309
  // build/commands/generated/organisations.js
44013
44310
  function registerOrganisationsCommands(parent) {
44014
44311
  const resource = parent.command("organisations").description("Manage organisations");
44015
- resource.command("list").description(`Retrieve organisations with their billing details and child customer IDs.`).option("--limit <number>", `Maximum number of items to return (1-100).`).option("--cursor <value>", `Opaque cursor returned in the previous response's \`next_cursor\`. Omit to fetch the first page.`).option("--include-total <value>", `Set to \`true\` to include \`total\` in the response.`).option("--order <value>", `Sort direction.`).option("--sort <value>", `Field used to sort the results.`).option("--created-at <value>", `created_at`).option("--created-at.not <value>", `created_at__not`).option("--created-at.is-null <value>", `created_at__isNull`).option("--created-at.is-not-null <value>", `created_at__isNotNull`).option("--created-at.equals <value>", `created_at__equals`).option("--created-at.lt <value>", `created_at__lt`).option("--created-at.lte <value>", `created_at__lte`).option("--created-at.gt <value>", `created_at__gt`).option("--created-at.gte <value>", `created_at__gte`).option("--updated-at <value>", `updated_at`).option("--updated-at.not <value>", `updated_at__not`).option("--updated-at.is-null <value>", `updated_at__isNull`).option("--updated-at.is-not-null <value>", `updated_at__isNotNull`).option("--updated-at.equals <value>", `updated_at__equals`).option("--updated-at.lt <value>", `updated_at__lt`).option("--updated-at.lte <value>", `updated_at__lte`).option("--updated-at.gt <value>", `updated_at__gt`).option("--updated-at.gte <value>", `updated_at__gte`).addHelpText("after", `
44312
+ resource.command("list").description(`Retrieve organisations with their billing details and child customer IDs.`).option("--limit <number>", `Maximum number of items to return (1-100).`).option("--cursor <value>", `Opaque cursor returned in the previous response's \`next_cursor\`. Omit to fetch the first page.`).option("--include-total <value>", `Set to \`true\` to include \`total\` in the response.`).option("--order <value>", `Sort direction.`).option("--sort <value>", `Field used to sort the results.`).option("--created-at <value>", `created_at`).option("--created-at.not <value>", `created_at__not`).option("--created-at.equals <value>", `created_at__equals`).option("--created-at.lt <value>", `created_at__lt`).option("--created-at.lte <value>", `created_at__lte`).option("--created-at.gt <value>", `created_at__gt`).option("--created-at.gte <value>", `created_at__gte`).option("--updated-at <value>", `updated_at`).option("--updated-at.not <value>", `updated_at__not`).option("--updated-at.equals <value>", `updated_at__equals`).option("--updated-at.lt <value>", `updated_at__lt`).option("--updated-at.lte <value>", `updated_at__lte`).option("--updated-at.gt <value>", `updated_at__gt`).option("--updated-at.gte <value>", `updated_at__gte`).addHelpText("after", `
44016
44313
  Examples:
44017
44314
  hyperline organisations list
44018
44315
  hyperline organisations list --limit <limit> --cursor <cursor>`).action(async (opts) => {
@@ -44034,10 +44331,6 @@ Examples:
44034
44331
  args.created_at = opts.createdAt;
44035
44332
  if (opts["createdAt.not"] !== void 0)
44036
44333
  args.created_at__not = opts["createdAt.not"];
44037
- if (opts["createdAt.isNull"] !== void 0)
44038
- args.created_at__isNull = opts["createdAt.isNull"];
44039
- if (opts["createdAt.isNotNull"] !== void 0)
44040
- args.created_at__isNotNull = opts["createdAt.isNotNull"];
44041
44334
  if (opts["createdAt.equals"] !== void 0)
44042
44335
  args.created_at__equals = opts["createdAt.equals"];
44043
44336
  if (opts["createdAt.lt"] !== void 0)
@@ -44052,10 +44345,6 @@ Examples:
44052
44345
  args.updated_at = opts.updatedAt;
44053
44346
  if (opts["updatedAt.not"] !== void 0)
44054
44347
  args.updated_at__not = opts["updatedAt.not"];
44055
- if (opts["updatedAt.isNull"] !== void 0)
44056
- args.updated_at__isNull = opts["updatedAt.isNull"];
44057
- if (opts["updatedAt.isNotNull"] !== void 0)
44058
- args.updated_at__isNotNull = opts["updatedAt.isNotNull"];
44059
44348
  if (opts["updatedAt.equals"] !== void 0)
44060
44349
  args.updated_at__equals = opts["updatedAt.equals"];
44061
44350
  if (opts["updatedAt.lt"] !== void 0)
@@ -44080,8 +44369,6 @@ Examples:
44080
44369
  "sort",
44081
44370
  "created_at",
44082
44371
  "created_at__not",
44083
- "created_at__isNull",
44084
- "created_at__isNotNull",
44085
44372
  "created_at__equals",
44086
44373
  "created_at__lt",
44087
44374
  "created_at__lte",
@@ -44089,8 +44376,6 @@ Examples:
44089
44376
  "created_at__gte",
44090
44377
  "updated_at",
44091
44378
  "updated_at__not",
44092
- "updated_at__isNull",
44093
- "updated_at__isNotNull",
44094
44379
  "updated_at__equals",
44095
44380
  "updated_at__lt",
44096
44381
  "updated_at__lte",
@@ -44204,7 +44489,7 @@ Examples:
44204
44489
  // build/commands/generated/price-configurations.js
44205
44490
  function registerPrice_ConfigurationsCommands(parent) {
44206
44491
  const resource = parent.command("price-configurations").description("Manage price configurations");
44207
- resource.command("list").description(`List price configurations with optional filters for product_id and price_book_id. Price configurations define how a product is priced (tiers, volume, graduated, etc.). Paginated with take/skip.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--product-id <value>", `product_id`).option("--product-id.not <value>", `product_id__not`).option("--product-id.is-null <value>", `product_id__isNull`).option("--product-id.is-not-null <value>", `product_id__isNotNull`).option("--product-id.equals <value>", `product_id__equals`).option("--product-id.contains <value>", `product_id__contains`).option("--product-id.starts-with <value>", `product_id__startsWith`).option("--product-id.end-with <value>", `product_id__endWith`).option("--price-book-id <value>", `price_book_id`).option("--price-book-id.not <value>", `price_book_id__not`).option("--price-book-id.is-null <value>", `price_book_id__isNull`).option("--price-book-id.is-not-null <value>", `price_book_id__isNotNull`).option("--price-book-id.equals <value>", `price_book_id__equals`).option("--price-book-id.contains <value>", `price_book_id__contains`).option("--price-book-id.starts-with <value>", `price_book_id__startsWith`).option("--price-book-id.end-with <value>", `price_book_id__endWith`).addHelpText("after", `
44492
+ resource.command("list").description(`List price configurations with optional filters for product_id and price_book_id. Price configurations define how a product is priced (tiers, volume, graduated, etc.). Paginated with take/skip.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--product-id <value>", `product_id`).option("--product-id.not <value>", `product_id__not`).option("--product-id.equals <value>", `product_id__equals`).option("--product-id.contains <value>", `product_id__contains`).option("--product-id.starts-with <value>", `product_id__startsWith`).option("--product-id.end-with <value>", `product_id__endWith`).option("--price-book-id <value>", `price_book_id`).option("--price-book-id.not <value>", `price_book_id__not`).option("--price-book-id.equals <value>", `price_book_id__equals`).option("--price-book-id.contains <value>", `price_book_id__contains`).option("--price-book-id.starts-with <value>", `price_book_id__startsWith`).option("--price-book-id.end-with <value>", `price_book_id__endWith`).option("--price-book-id.is-null <value>", `price_book_id__isNull`).option("--price-book-id.is-not-null <value>", `price_book_id__isNotNull`).addHelpText("after", `
44208
44493
  Examples:
44209
44494
  hyperline price-configurations list
44210
44495
  hyperline price-configurations list --take <take> --product-id <product_id>`).action(async (opts) => {
@@ -44218,10 +44503,6 @@ Examples:
44218
44503
  args.product_id = opts.productId;
44219
44504
  if (opts["productId.not"] !== void 0)
44220
44505
  args.product_id__not = opts["productId.not"];
44221
- if (opts["productId.isNull"] !== void 0)
44222
- args.product_id__isNull = opts["productId.isNull"];
44223
- if (opts["productId.isNotNull"] !== void 0)
44224
- args.product_id__isNotNull = opts["productId.isNotNull"];
44225
44506
  if (opts["productId.equals"] !== void 0)
44226
44507
  args.product_id__equals = opts["productId.equals"];
44227
44508
  if (opts["productId.contains"] !== void 0)
@@ -44234,10 +44515,6 @@ Examples:
44234
44515
  args.price_book_id = opts.priceBookId;
44235
44516
  if (opts["priceBookId.not"] !== void 0)
44236
44517
  args.price_book_id__not = opts["priceBookId.not"];
44237
- if (opts["priceBookId.isNull"] !== void 0)
44238
- args.price_book_id__isNull = opts["priceBookId.isNull"];
44239
- if (opts["priceBookId.isNotNull"] !== void 0)
44240
- args.price_book_id__isNotNull = opts["priceBookId.isNotNull"];
44241
44518
  if (opts["priceBookId.equals"] !== void 0)
44242
44519
  args.price_book_id__equals = opts["priceBookId.equals"];
44243
44520
  if (opts["priceBookId.contains"] !== void 0)
@@ -44246,6 +44523,10 @@ Examples:
44246
44523
  args.price_book_id__startsWith = opts["priceBookId.startsWith"];
44247
44524
  if (opts["priceBookId.endWith"] !== void 0)
44248
44525
  args.price_book_id__endWith = opts["priceBookId.endWith"];
44526
+ if (opts["priceBookId.isNull"] !== void 0)
44527
+ args.price_book_id__isNull = opts["priceBookId.isNull"];
44528
+ if (opts["priceBookId.isNotNull"] !== void 0)
44529
+ args.price_book_id__isNotNull = opts["priceBookId.isNotNull"];
44249
44530
  if (opts.take !== void 0)
44250
44531
  args.take = Number(opts.take);
44251
44532
  if (opts.skip !== void 0)
@@ -44259,20 +44540,18 @@ Examples:
44259
44540
  "skip",
44260
44541
  "product_id",
44261
44542
  "product_id__not",
44262
- "product_id__isNull",
44263
- "product_id__isNotNull",
44264
44543
  "product_id__equals",
44265
44544
  "product_id__contains",
44266
44545
  "product_id__startsWith",
44267
44546
  "product_id__endWith",
44268
44547
  "price_book_id",
44269
44548
  "price_book_id__not",
44270
- "price_book_id__isNull",
44271
- "price_book_id__isNotNull",
44272
44549
  "price_book_id__equals",
44273
44550
  "price_book_id__contains",
44274
44551
  "price_book_id__startsWith",
44275
- "price_book_id__endWith"
44552
+ "price_book_id__endWith",
44553
+ "price_book_id__isNull",
44554
+ "price_book_id__isNotNull"
44276
44555
  ]
44277
44556
  });
44278
44557
  });
@@ -44294,7 +44573,7 @@ Examples:
44294
44573
  queryParamKeys: []
44295
44574
  });
44296
44575
  });
44297
- resource.command("create").description(`Create a new price configuration on an existing product. Specify the product_id, pricing type (fee, volume, bulk, packaged, bps, bundle), currency, billing interval, and price tiers. Supports metering_filter for dynamic products.`).requiredOption("--currency <value>", `Currency code. See [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217#List_of_ISO_4217_currency_codes).`).option("--countries <json>", `Countries this price configuration is eligible in. Omit or send \`null\` to make it eligible in every country. An empty array restricts it to customers that have no country set.`).option("--price-book-id <value>", `ID of the price book to which this price configuration belongs to. If null, the price configuration belongs to the default price book.`).requiredOption("--billing-interval <json>", `Billing interval on which the price configuration is eligible.`).option("--commitment-interval <json>", `Commitment interval on which the price configuration is eligible.`).requiredOption("--type <value>", `type`).requiredOption("--prices <json>", `Price tiers of the price configuration. If fixed amount, only one price is available.`).requiredOption("--product-id <value>", `ID of the product to add the price configuration to.`).option("--metering-filter <json>", `Filter to scope which billable events are eligible for this price configuration.`).option("--allow-on-portal", `allow_on_portal`).addHelpText("after", `
44576
+ resource.command("create").description(`Create a new price configuration on an existing product. Specify the product_id, pricing type (fee, volume, bulk, packaged, bps, bundle), currency, billing interval, and price tiers. Supports metering_filter for dynamic products.`).requiredOption("--currency <value>", `Currency code. See [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217#List_of_ISO_4217_currency_codes).`).option("--countries <json>", `Countries this price configuration is eligible in. Omit or send \`null\` to make it eligible in every country. An empty array restricts it to customers that have no country set.`).option("--price-book-id <value>", `ID of the price book to which this price configuration belongs to. If null, the price configuration belongs to the default price book.`).requiredOption("--billing-interval <json>", `Billing interval on which the price configuration is eligible.`).option("--commitment-interval <json>", `Commitment interval on which the price configuration is eligible.`).requiredOption("--type <value>", `type`).requiredOption("--prices <json>", `Price tiers of the price configuration. If fixed amount, only one price is available.`).requiredOption("--product-id <value>", `ID of the product to add the price configuration to.`).option("--metering-filter <json>", `Filter to scope which billable events are eligible for this price configuration.`).option("--aggregator-filter-id <value>", `ID of an existing metering filter of the product's aggregator to attach to this price configuration, instead of creating a new one with \`metering_filter\`.`).option("--allow-on-portal", `allow_on_portal`).addHelpText("after", `
44298
44577
  Examples:
44299
44578
  hyperline price-configurations create --currency <currency> --billing-interval <billing_interval> --type <type> --prices <prices> --product-id <product_id>
44300
44579
  hyperline price-configurations create --currency <currency> --billing-interval <billing_interval> --type <type> --prices <prices> --product-id <product_id> --countries <countries> --price-book-id <price_book_id>
@@ -44313,6 +44592,8 @@ Examples:
44313
44592
  args.type = opts.type;
44314
44593
  if (opts.productId !== void 0)
44315
44594
  args.product_id = opts.productId;
44595
+ if (opts.aggregatorFilterId !== void 0)
44596
+ args.aggregator_filter_id = opts.aggregatorFilterId;
44316
44597
  if (opts.allowOnPortal !== void 0)
44317
44598
  args.allow_on_portal = true;
44318
44599
  if (opts.countries !== void 0)
@@ -44396,7 +44677,7 @@ Examples:
44396
44677
  // build/commands/generated/products.js
44397
44678
  function registerProductsCommands(parent) {
44398
44679
  const resource = parent.command("products").description("Manage products");
44399
- resource.command("list").description(`List products with optional filters for id, status, name, description, type, and price_book_id. Products define what is being sold (flat fee, per-unit, usage-based, etc.). Paginated with take/skip.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--id <value>", `id`).option("--id.not <value>", `id__not`).option("--id.is-null <value>", `id__isNull`).option("--id.is-not-null <value>", `id__isNotNull`).option("--id.equals <value>", `id__equals`).option("--id.contains <value>", `id__contains`).option("--id.starts-with <value>", `id__startsWith`).option("--id.end-with <value>", `id__endWith`).option("--status <value>", `status`).option("--status.in <value>", `status__in`).option("--name <value>", `name`).option("--name.not <value>", `name__not`).option("--name.is-null <value>", `name__isNull`).option("--name.is-not-null <value>", `name__isNotNull`).option("--name.equals <value>", `name__equals`).option("--name.contains <value>", `name__contains`).option("--name.starts-with <value>", `name__startsWith`).option("--name.end-with <value>", `name__endWith`).option("--description <value>", `description`).option("--description.not <value>", `description__not`).option("--description.is-null <value>", `description__isNull`).option("--description.is-not-null <value>", `description__isNotNull`).option("--description.equals <value>", `description__equals`).option("--description.contains <value>", `description__contains`).option("--description.starts-with <value>", `description__startsWith`).option("--description.end-with <value>", `description__endWith`).option("--type <value>", `type`).option("--type.not <value>", `type__not`).option("--type.is-null <value>", `type__isNull`).option("--type.is-not-null <value>", `type__isNotNull`).option("--type.equals <value>", `type__equals`).option("--type.contains <value>", `type__contains`).option("--type.starts-with <value>", `type__startsWith`).option("--type.end-with <value>", `type__endWith`).option("--price-book-id <value>", `price_book_id`).addHelpText("after", `
44680
+ resource.command("list").description(`List products with optional filters for id, status, name, description, type, and price_book_id. Products define what is being sold (flat fee, per-unit, usage-based, etc.). Paginated with take/skip.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--id <value>", `id`).option("--id.not <value>", `id__not`).option("--id.equals <value>", `id__equals`).option("--id.contains <value>", `id__contains`).option("--id.starts-with <value>", `id__startsWith`).option("--id.end-with <value>", `id__endWith`).option("--status <value>", `status`).option("--status.in <value>", `status__in`).option("--name <value>", `name`).option("--name.not <value>", `name__not`).option("--name.equals <value>", `name__equals`).option("--name.contains <value>", `name__contains`).option("--name.starts-with <value>", `name__startsWith`).option("--name.end-with <value>", `name__endWith`).option("--description <value>", `description`).option("--description.not <value>", `description__not`).option("--description.equals <value>", `description__equals`).option("--description.contains <value>", `description__contains`).option("--description.starts-with <value>", `description__startsWith`).option("--description.end-with <value>", `description__endWith`).option("--description.is-null <value>", `description__isNull`).option("--description.is-not-null <value>", `description__isNotNull`).option("--type <value>", `type`).option("--type.not <value>", `type__not`).option("--type.equals <value>", `type__equals`).option("--type.contains <value>", `type__contains`).option("--type.starts-with <value>", `type__startsWith`).option("--type.end-with <value>", `type__endWith`).option("--price-book-id <value>", `price_book_id`).addHelpText("after", `
44400
44681
  Examples:
44401
44682
  hyperline products list
44402
44683
  hyperline products list --take <take> --id <id>`).action(async (opts) => {
@@ -44410,10 +44691,6 @@ Examples:
44410
44691
  args.id = opts.id;
44411
44692
  if (opts["id.not"] !== void 0)
44412
44693
  args.id__not = opts["id.not"];
44413
- if (opts["id.isNull"] !== void 0)
44414
- args.id__isNull = opts["id.isNull"];
44415
- if (opts["id.isNotNull"] !== void 0)
44416
- args.id__isNotNull = opts["id.isNotNull"];
44417
44694
  if (opts["id.equals"] !== void 0)
44418
44695
  args.id__equals = opts["id.equals"];
44419
44696
  if (opts["id.contains"] !== void 0)
@@ -44430,10 +44707,6 @@ Examples:
44430
44707
  args.name = opts.name;
44431
44708
  if (opts["name.not"] !== void 0)
44432
44709
  args.name__not = opts["name.not"];
44433
- if (opts["name.isNull"] !== void 0)
44434
- args.name__isNull = opts["name.isNull"];
44435
- if (opts["name.isNotNull"] !== void 0)
44436
- args.name__isNotNull = opts["name.isNotNull"];
44437
44710
  if (opts["name.equals"] !== void 0)
44438
44711
  args.name__equals = opts["name.equals"];
44439
44712
  if (opts["name.contains"] !== void 0)
@@ -44446,10 +44719,6 @@ Examples:
44446
44719
  args.description = opts.description;
44447
44720
  if (opts["description.not"] !== void 0)
44448
44721
  args.description__not = opts["description.not"];
44449
- if (opts["description.isNull"] !== void 0)
44450
- args.description__isNull = opts["description.isNull"];
44451
- if (opts["description.isNotNull"] !== void 0)
44452
- args.description__isNotNull = opts["description.isNotNull"];
44453
44722
  if (opts["description.equals"] !== void 0)
44454
44723
  args.description__equals = opts["description.equals"];
44455
44724
  if (opts["description.contains"] !== void 0)
@@ -44458,14 +44727,14 @@ Examples:
44458
44727
  args.description__startsWith = opts["description.startsWith"];
44459
44728
  if (opts["description.endWith"] !== void 0)
44460
44729
  args.description__endWith = opts["description.endWith"];
44730
+ if (opts["description.isNull"] !== void 0)
44731
+ args.description__isNull = opts["description.isNull"];
44732
+ if (opts["description.isNotNull"] !== void 0)
44733
+ args.description__isNotNull = opts["description.isNotNull"];
44461
44734
  if (opts.type !== void 0)
44462
44735
  args.type = opts.type;
44463
44736
  if (opts["type.not"] !== void 0)
44464
44737
  args.type__not = opts["type.not"];
44465
- if (opts["type.isNull"] !== void 0)
44466
- args.type__isNull = opts["type.isNull"];
44467
- if (opts["type.isNotNull"] !== void 0)
44468
- args.type__isNotNull = opts["type.isNotNull"];
44469
44738
  if (opts["type.equals"] !== void 0)
44470
44739
  args.type__equals = opts["type.equals"];
44471
44740
  if (opts["type.contains"] !== void 0)
@@ -44489,8 +44758,6 @@ Examples:
44489
44758
  "skip",
44490
44759
  "id",
44491
44760
  "id__not",
44492
- "id__isNull",
44493
- "id__isNotNull",
44494
44761
  "id__equals",
44495
44762
  "id__contains",
44496
44763
  "id__startsWith",
@@ -44499,24 +44766,20 @@ Examples:
44499
44766
  "status__in",
44500
44767
  "name",
44501
44768
  "name__not",
44502
- "name__isNull",
44503
- "name__isNotNull",
44504
44769
  "name__equals",
44505
44770
  "name__contains",
44506
44771
  "name__startsWith",
44507
44772
  "name__endWith",
44508
44773
  "description",
44509
44774
  "description__not",
44510
- "description__isNull",
44511
- "description__isNotNull",
44512
44775
  "description__equals",
44513
44776
  "description__contains",
44514
44777
  "description__startsWith",
44515
44778
  "description__endWith",
44779
+ "description__isNull",
44780
+ "description__isNotNull",
44516
44781
  "type",
44517
44782
  "type__not",
44518
- "type__isNull",
44519
- "type__isNotNull",
44520
44783
  "type__equals",
44521
44784
  "type__contains",
44522
44785
  "type__startsWith",
@@ -44525,7 +44788,7 @@ Examples:
44525
44788
  ]
44526
44789
  });
44527
44790
  });
44528
- 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>", `
44791
+ 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>", `
44529
44792
  How the periodic credit allowance is granted for partial billing periods.
44530
44793
 
44531
44794
  - \`prorated\` (default): the granted credits are prorated to the elapsed period.
@@ -44613,7 +44876,7 @@ Examples:
44613
44876
  queryParamKeys: ["price_book_id"]
44614
44877
  });
44615
44878
  });
44616
- 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", `
44879
+ 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", `
44617
44880
  Examples:
44618
44881
  hyperline products update --id <id> --name <name>
44619
44882
  hyperline products update --id <id> --name <name> --description <description> --public-description <public_description>
@@ -44717,6 +44980,80 @@ Examples:
44717
44980
  });
44718
44981
  }
44719
44982
 
44983
+ // build/commands/generated/products-features.js
44984
+ function registerProducts_FeaturesCommands(parent) {
44985
+ const resource = parent.command("products-features").description("Manage products > features");
44986
+ resource.command("list-product-features").description(`List feature values assigned to a product.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
44987
+ Examples:
44988
+ hyperline products-features list-product-features --id <id>`).action(async (opts) => {
44989
+ const ctx = resource.parent?.opts()._ctx;
44990
+ if (!ctx) {
44991
+ process.stderr.write("Error: Not authenticated\n");
44992
+ process.exit(1);
44993
+ }
44994
+ const args = {};
44995
+ if (opts.id !== void 0)
44996
+ args.id = opts.id;
44997
+ await ctx.execute({
44998
+ method: "GET",
44999
+ path: "/v1/products/{id}/features",
45000
+ args,
45001
+ queryParamKeys: []
45002
+ });
45003
+ });
45004
+ 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", `
45005
+ Examples:
45006
+ hyperline products-features set-product-feature --id <id> --code <code> --value
45007
+ hyperline products-features set-product-feature --id <id> --code <code> --value --output json`).action(async (opts) => {
45008
+ const ctx = resource.parent?.opts()._ctx;
45009
+ if (!ctx) {
45010
+ process.stderr.write("Error: Not authenticated\n");
45011
+ process.exit(1);
45012
+ }
45013
+ const args = {};
45014
+ if (opts.id !== void 0)
45015
+ args.id = opts.id;
45016
+ if (opts.code !== void 0)
45017
+ args.code = opts.code;
45018
+ if (opts.value !== void 0)
45019
+ args.value = true;
45020
+ await ctx.execute({
45021
+ method: "PUT",
45022
+ path: "/v1/products/{id}/features/{code}",
45023
+ args,
45024
+ queryParamKeys: []
45025
+ });
45026
+ });
45027
+ 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", `
45028
+ Examples:
45029
+ hyperline products-features delete-product-feature --id <id> --code <code>
45030
+ hyperline products-features delete-product-feature --id <id> --code <code> --output json`).action(async (opts) => {
45031
+ const ctx = resource.parent?.opts()._ctx;
45032
+ if (!ctx) {
45033
+ process.stderr.write("Error: Not authenticated\n");
45034
+ process.exit(1);
45035
+ }
45036
+ const args = {};
45037
+ if (opts.id !== void 0)
45038
+ args.id = opts.id;
45039
+ if (opts.code !== void 0)
45040
+ args.code = opts.code;
45041
+ if (!opts.yes) {
45042
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
45043
+ if (!confirmed) {
45044
+ process.stdout.write("Aborted.\n");
45045
+ return;
45046
+ }
45047
+ }
45048
+ await ctx.execute({
45049
+ method: "DELETE",
45050
+ path: "/v1/products/{id}/features/{code}",
45051
+ args,
45052
+ queryParamKeys: []
45053
+ });
45054
+ });
45055
+ }
45056
+
44720
45057
  // build/commands/generated/quotes.js
44721
45058
  function registerQuotesCommands(parent) {
44722
45059
  const resource = parent.command("quotes").description("Manage quotes");
@@ -44726,12 +45063,12 @@ Quote status.
44726
45063
  - \`draft\`: The quote is a draft.
44727
45064
  - \`approved\`: The quote is approved and ready to be sent to the customer.
44728
45065
  - \`pending_signature\`: The quote is awaiting the customer's signature.
44729
- `).option("--owner-email <value>", `Email address of the Hyperline user acting as the quote owner. The owner requests approval when the quote is finalized using an API key or finalized during creation. If not specified, the Hyperline account owner will be assigned.`).requiredOption("--customer-id <value>", `ID of the customer.`).option("--invoicing-entity-id <value>", `ID of the invoicing entity attached to the quote.`).option("--catalog-version-id <value>", `ID of a published catalog version to price every product of the quote from, instead of the live products catalog. A product's own \`catalog_version_id\` takes precedence, and explicit \`prices\` always win over both.`).option("--comments <value>", `Custom comments displayed on the quote.`).option("--terms <value>", `Custom quotation terms.`).option("--amount <number>", `Estimated contract value. For subscription quotes, defaults to the computed subscription value if not specified. For one-off quotes, this field is ignored \u2014 the amount is always derived from the linked invoice's \`amount_excluding_tax\`.`).option("--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.
45066
+ `).option("--owner-email <value>", `Email address of the Hyperline user acting as the quote owner. The owner requests approval when the quote is finalized using an API key or finalized during creation. If not specified, the Hyperline account owner will be assigned.`).requiredOption("--customer-id <value>", `ID of the customer.`).option("--invoicing-entity-id <value>", `ID of the invoicing entity attached to the quote.`).option("--catalog-version-id <value>", `ID of a published catalog version to price every product of the quote from, instead of the live products catalog. A product's own \`catalog_version_id\` takes precedence, and explicit \`prices\` always win over both.`).option("--comments <value>", `Custom comments displayed on the quote.`).option("--terms <value>", `Custom quotation terms.`).option("--amount <number>", `Estimated contract value. When computed, a subscription phase with neither an end date nor a fixed duration is counted over a conventional horizon: the contract's length for a single phase on a contract that has one, otherwise 12 months or the longest billing interval if longer. That horizon is not an end date: the subscription can run past it. Usage-based and connected seat lines are priced at their estimated quantity when it exceeds the committed quantity and, for seats, the live seat count. For subscription quotes, defaults to the computed subscription value if not specified. For one-off quotes, this field is ignored \u2014 the amount is always derived from the linked invoice's \`amount_excluding_tax\`.`).option("--contract-value <number>", `What the customer pays over the contract, each coupon counted on the invoices it applies to. Computed from the subscription for \`subscription\` and \`subscription_update\` quotes, unless set manually. Not set on \`one_off\` quotes. When specified, overrides the computed value.`).option("--collect-payment-details <value>", `Collect customer payment method mandate during signature flow or not.`).option("--collect-custom-property-ids <json>", `IDs of the customer custom properties required to be filled during the signature flow.`).option("--contract-clause-ids <json>", `IDs of the contract clauses used in the quote terms.`).option("--require-tax-id <value>", `Require the customer to provide a tax ID during the signature flow.`).option("--display-quote-value <value>", `Display the total quote value on the quote.`).option("--display-quote-value-with-tax <value>", `Display the total quote value including tax on the quote. Only applies to \`one_off\` quotes.`).option("--display-taxes <value>", `Display tax breakdown on the quote.`).option("--display-price-tiers <value>", `Controls which price tiers are displayed on the quote.
44730
45067
 
44731
45068
  - \`all\`: Display all pricing tiers.
44732
45069
  - \`matching\`: Only display the tiers used to compute the price based on quantity.
44733
45070
  - \`none\`: Hide all pricing tiers.
44734
- `).option("--display-phase-value <value>", `Display per-phase value breakdown on the quote.`).option("--display-first-invoice-amount <value>", `Display the first invoice amount on the quote.`).option("--display-documents-in-preview <value>", `Display attached documents in the quote preview.`).option("--subscription-update-display <value>", `Sections displayed on subscription update quotes: quote_update_details, subscription_details, or both. Takes precedence over display_subscription_on_update.`).option("--generate-draft-invoices <value>", `When \`true\`, the invoice issued after signature stays in \`draft\` status instead of being emitted for payment. Use this when you want to review the final invoice manually before sending it. Defaults to \`false\`.`).option("--template-id <value>", `ID of the quote template. If not specified, a subscription configuration or an \`invoice\` payload must be defined.`).option("--expires-at <value>", `Quote expiration date. UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.`).option("--subscription <json>", `Subscription configuration constituting the quote.`).option("--invoice <json>", `Invoice configuration constituting the one-off quote. When provided, a draft invoice is created and linked to the quote. Cannot be combined with \`subscription\` or \`template_id\`.`).addHelpText("after", `
45071
+ `).option("--display-phase-value <value>", `Display per-phase value breakdown on the quote.`).option("--display-discounts-on-total <value>", `Display discounts on the totals, with product prices before discount. Totals then follow the contract value, so discounts with a limited duration are included.`).option("--display-first-invoice-amount <value>", `Display the first invoice amount on the quote.`).option("--display-documents-in-preview <value>", `Display attached documents in the quote preview.`).option("--subscription-update-display <value>", `Sections displayed on subscription update quotes: quote_update_details, subscription_details, or both. Takes precedence over display_subscription_on_update.`).option("--generate-draft-invoices <value>", `When \`true\`, the invoice issued after signature stays in \`draft\` status instead of being emitted for payment. Use this when you want to review the final invoice manually before sending it. Defaults to \`false\`.`).option("--template-id <value>", `ID of the quote template. If not specified, a subscription configuration or an \`invoice\` payload must be defined.`).option("--expires-at <value>", `Quote expiration date. UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.`).option("--subscription <json>", `Subscription configuration constituting the quote.`).option("--invoice <json>", `Invoice configuration constituting the one-off quote. When provided, a draft invoice is created and linked to the quote. Cannot be combined with \`subscription\` or \`template_id\`.`).addHelpText("after", `
44735
45072
  Examples:
44736
45073
  hyperline quotes create --customer-id <customer_id>
44737
45074
  hyperline quotes create --customer-id <customer_id> --status <status> --owner-email <owner_email>
@@ -44770,6 +45107,8 @@ Examples:
44770
45107
  args.display_price_tiers = opts.displayPriceTiers;
44771
45108
  if (opts.displayPhaseValue !== void 0)
44772
45109
  args.display_phase_value = opts.displayPhaseValue;
45110
+ if (opts.displayDiscountsOnTotal !== void 0)
45111
+ args.display_discounts_on_total = opts.displayDiscountsOnTotal;
44773
45112
  if (opts.displayFirstInvoiceAmount !== void 0)
44774
45113
  args.display_first_invoice_amount = opts.displayFirstInvoiceAmount;
44775
45114
  if (opts.displayDocumentsInPreview !== void 0)
@@ -44801,7 +45140,7 @@ Examples:
44801
45140
  queryParamKeys: []
44802
45141
  });
44803
45142
  });
44804
- 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", `
45143
+ 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", `
44805
45144
  Examples:
44806
45145
  hyperline quotes list
44807
45146
  hyperline quotes list --take <take> --id <id>`).action(async (opts) => {
@@ -44815,10 +45154,6 @@ Examples:
44815
45154
  args.id = opts.id;
44816
45155
  if (opts["id.not"] !== void 0)
44817
45156
  args.id__not = opts["id.not"];
44818
- if (opts["id.isNull"] !== void 0)
44819
- args.id__isNull = opts["id.isNull"];
44820
- if (opts["id.isNotNull"] !== void 0)
44821
- args.id__isNotNull = opts["id.isNotNull"];
44822
45157
  if (opts["id.equals"] !== void 0)
44823
45158
  args.id__equals = opts["id.equals"];
44824
45159
  if (opts["id.contains"] !== void 0)
@@ -44831,10 +45166,6 @@ Examples:
44831
45166
  args.number = opts.number;
44832
45167
  if (opts["number.not"] !== void 0)
44833
45168
  args.number__not = opts["number.not"];
44834
- if (opts["number.isNull"] !== void 0)
44835
- args.number__isNull = opts["number.isNull"];
44836
- if (opts["number.isNotNull"] !== void 0)
44837
- args.number__isNotNull = opts["number.isNotNull"];
44838
45169
  if (opts["number.equals"] !== void 0)
44839
45170
  args.number__equals = opts["number.equals"];
44840
45171
  if (opts["number.contains"] !== void 0)
@@ -44851,10 +45182,6 @@ Examples:
44851
45182
  args.customer_id = opts.customerId;
44852
45183
  if (opts["customerId.not"] !== void 0)
44853
45184
  args.customer_id__not = opts["customerId.not"];
44854
- if (opts["customerId.isNull"] !== void 0)
44855
- args.customer_id__isNull = opts["customerId.isNull"];
44856
- if (opts["customerId.isNotNull"] !== void 0)
44857
- args.customer_id__isNotNull = opts["customerId.isNotNull"];
44858
45185
  if (opts["customerId.equals"] !== void 0)
44859
45186
  args.customer_id__equals = opts["customerId.equals"];
44860
45187
  if (opts["customerId.contains"] !== void 0)
@@ -44867,10 +45194,6 @@ Examples:
44867
45194
  args.template_id = opts.templateId;
44868
45195
  if (opts["templateId.not"] !== void 0)
44869
45196
  args.template_id__not = opts["templateId.not"];
44870
- if (opts["templateId.isNull"] !== void 0)
44871
- args.template_id__isNull = opts["templateId.isNull"];
44872
- if (opts["templateId.isNotNull"] !== void 0)
44873
- args.template_id__isNotNull = opts["templateId.isNotNull"];
44874
45197
  if (opts["templateId.equals"] !== void 0)
44875
45198
  args.template_id__equals = opts["templateId.equals"];
44876
45199
  if (opts["templateId.contains"] !== void 0)
@@ -44879,14 +45202,14 @@ Examples:
44879
45202
  args.template_id__startsWith = opts["templateId.startsWith"];
44880
45203
  if (opts["templateId.endWith"] !== void 0)
44881
45204
  args.template_id__endWith = opts["templateId.endWith"];
45205
+ if (opts["templateId.isNull"] !== void 0)
45206
+ args.template_id__isNull = opts["templateId.isNull"];
45207
+ if (opts["templateId.isNotNull"] !== void 0)
45208
+ args.template_id__isNotNull = opts["templateId.isNotNull"];
44882
45209
  if (opts.crmOpportunityId !== void 0)
44883
45210
  args.crm_opportunity_id = opts.crmOpportunityId;
44884
45211
  if (opts["crmOpportunityId.not"] !== void 0)
44885
45212
  args.crm_opportunity_id__not = opts["crmOpportunityId.not"];
44886
- if (opts["crmOpportunityId.isNull"] !== void 0)
44887
- args.crm_opportunity_id__isNull = opts["crmOpportunityId.isNull"];
44888
- if (opts["crmOpportunityId.isNotNull"] !== void 0)
44889
- args.crm_opportunity_id__isNotNull = opts["crmOpportunityId.isNotNull"];
44890
45213
  if (opts["crmOpportunityId.equals"] !== void 0)
44891
45214
  args.crm_opportunity_id__equals = opts["crmOpportunityId.equals"];
44892
45215
  if (opts["crmOpportunityId.contains"] !== void 0)
@@ -44895,30 +45218,16 @@ Examples:
44895
45218
  args.crm_opportunity_id__startsWith = opts["crmOpportunityId.startsWith"];
44896
45219
  if (opts["crmOpportunityId.endWith"] !== void 0)
44897
45220
  args.crm_opportunity_id__endWith = opts["crmOpportunityId.endWith"];
45221
+ if (opts["crmOpportunityId.isNull"] !== void 0)
45222
+ args.crm_opportunity_id__isNull = opts["crmOpportunityId.isNull"];
45223
+ if (opts["crmOpportunityId.isNotNull"] !== void 0)
45224
+ args.crm_opportunity_id__isNotNull = opts["crmOpportunityId.isNotNull"];
44898
45225
  if (opts.type !== void 0)
44899
45226
  args.type = opts.type;
44900
- if (opts["type.not"] !== void 0)
44901
- args.type__not = opts["type.not"];
44902
- if (opts["type.isNull"] !== void 0)
44903
- args.type__isNull = opts["type.isNull"];
44904
- if (opts["type.isNotNull"] !== void 0)
44905
- args.type__isNotNull = opts["type.isNotNull"];
44906
- if (opts["type.equals"] !== void 0)
44907
- args.type__equals = opts["type.equals"];
44908
- if (opts["type.contains"] !== void 0)
44909
- args.type__contains = opts["type.contains"];
44910
- if (opts["type.startsWith"] !== void 0)
44911
- args.type__startsWith = opts["type.startsWith"];
44912
- if (opts["type.endWith"] !== void 0)
44913
- args.type__endWith = opts["type.endWith"];
44914
45227
  if (opts.updatedAt !== void 0)
44915
45228
  args.updated_at = opts.updatedAt;
44916
45229
  if (opts["updatedAt.not"] !== void 0)
44917
45230
  args.updated_at__not = opts["updatedAt.not"];
44918
- if (opts["updatedAt.isNull"] !== void 0)
44919
- args.updated_at__isNull = opts["updatedAt.isNull"];
44920
- if (opts["updatedAt.isNotNull"] !== void 0)
44921
- args.updated_at__isNotNull = opts["updatedAt.isNotNull"];
44922
45231
  if (opts["updatedAt.equals"] !== void 0)
44923
45232
  args.updated_at__equals = opts["updatedAt.equals"];
44924
45233
  if (opts["updatedAt.lt"] !== void 0)
@@ -44942,16 +45251,12 @@ Examples:
44942
45251
  "skip",
44943
45252
  "id",
44944
45253
  "id__not",
44945
- "id__isNull",
44946
- "id__isNotNull",
44947
45254
  "id__equals",
44948
45255
  "id__contains",
44949
45256
  "id__startsWith",
44950
45257
  "id__endWith",
44951
45258
  "number",
44952
45259
  "number__not",
44953
- "number__isNull",
44954
- "number__isNotNull",
44955
45260
  "number__equals",
44956
45261
  "number__contains",
44957
45262
  "number__startsWith",
@@ -44960,40 +45265,29 @@ Examples:
44960
45265
  "status__in",
44961
45266
  "customer_id",
44962
45267
  "customer_id__not",
44963
- "customer_id__isNull",
44964
- "customer_id__isNotNull",
44965
45268
  "customer_id__equals",
44966
45269
  "customer_id__contains",
44967
45270
  "customer_id__startsWith",
44968
45271
  "customer_id__endWith",
44969
45272
  "template_id",
44970
45273
  "template_id__not",
44971
- "template_id__isNull",
44972
- "template_id__isNotNull",
44973
45274
  "template_id__equals",
44974
45275
  "template_id__contains",
44975
45276
  "template_id__startsWith",
44976
45277
  "template_id__endWith",
45278
+ "template_id__isNull",
45279
+ "template_id__isNotNull",
44977
45280
  "crm_opportunity_id",
44978
45281
  "crm_opportunity_id__not",
44979
- "crm_opportunity_id__isNull",
44980
- "crm_opportunity_id__isNotNull",
44981
45282
  "crm_opportunity_id__equals",
44982
45283
  "crm_opportunity_id__contains",
44983
45284
  "crm_opportunity_id__startsWith",
44984
45285
  "crm_opportunity_id__endWith",
45286
+ "crm_opportunity_id__isNull",
45287
+ "crm_opportunity_id__isNotNull",
44985
45288
  "type",
44986
- "type__not",
44987
- "type__isNull",
44988
- "type__isNotNull",
44989
- "type__equals",
44990
- "type__contains",
44991
- "type__startsWith",
44992
- "type__endWith",
44993
45289
  "updated_at",
44994
45290
  "updated_at__not",
44995
- "updated_at__isNull",
44996
- "updated_at__isNotNull",
44997
45291
  "updated_at__equals",
44998
45292
  "updated_at__lt",
44999
45293
  "updated_at__lte",
@@ -45020,12 +45314,12 @@ Examples:
45020
45314
  queryParamKeys: []
45021
45315
  });
45022
45316
  });
45023
- 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.
45317
+ resource.command("update").description(`Update quote-level fields before a quote is finalized. On draft quotes, pass \`subscription\` inline \u2014 the full configuration, not a reference to an existing subscription \u2014 to create or replace the draft subscription configuration, or pass \`invoice\` on a one-off quote to replace the linked draft invoice. For quotes created from \`template_id\`, use this tool for subscription overrides such as dates, contract terms, products, phases, coupons, discounts, prices, seats, and subscription custom properties. Omit \`terms\`, \`comments\`, and \`contract_clause_ids\` unless deliberately overriding template content. Discover product and price configuration IDs with \`get_catalog_context\`.`).requiredOption("--id <value>", `id parameter`).option("--owner-email <value>", `Email address of the Hyperline user acting as the quote owner. The owner requests approval when the quote is finalized using an API key or finalized during creation.`).option("--catalog-version-id <value>", `ID of a published catalog version to price every product of the quote from, instead of the live products catalog. A product's own \`catalog_version_id\` takes precedence, and explicit \`prices\` always win over both.`).option("--comments <value>", `Custom comments displayed on the quote.`).option("--terms <value>", `Custom quotation terms.`).option("--amount <number>", `Estimated contract value. When computed, a subscription phase with neither an end date nor a fixed duration is counted over a conventional horizon: the contract's length for a single phase on a contract that has one, otherwise 12 months or the longest billing interval if longer. That horizon is not an end date: the subscription can run past it. Usage-based and connected seat lines are priced at their estimated quantity when it exceeds the committed quantity and, for seats, the live seat count. Set to \`null\` to clear the manually set value.`).option("--contract-value <number>", `What the customer pays over the contract, each coupon counted on the invoices it applies to. Computed from the subscription for \`subscription\` and \`subscription_update\` quotes, unless set manually. Not set on \`one_off\` quotes. When specified, overrides the computed value. Set to \`null\` to go back to the computed value.`).option("--collect-payment-details <value>", `Collect customer payment method mandate during signature flow or not.`).option("--collect-custom-property-ids <json>", `IDs of the customer custom properties required to be filled during the signature flow.`).option("--contract-clause-ids <json>", `IDs of the contract clauses used in the quote terms.`).option("--require-tax-id <value>", `Require the customer to provide a tax ID during the signature flow.`).option("--display-quote-value <value>", `Display the total quote value on the quote.`).option("--display-quote-value-with-tax <value>", `Display the total quote value including tax on the quote. Only applies to \`one_off\` quotes.`).option("--display-taxes <value>", `Display tax breakdown on the quote.`).option("--display-price-tiers <value>", `Controls which price tiers are displayed on the quote.
45024
45318
 
45025
45319
  - \`all\`: Display all pricing tiers.
45026
45320
  - \`matching\`: Only display the tiers used to compute the price based on quantity.
45027
45321
  - \`none\`: Hide all pricing tiers.
45028
- `).option("--display-phase-value <value>", `Display per-phase value breakdown on the quote.`).option("--display-first-invoice-amount <value>", `Display the first invoice amount on the quote.`).option("--display-documents-in-preview <value>", `Display attached documents in the quote preview.`).option("--subscription-update-display <value>", `Sections displayed on subscription update quotes: quote_update_details, subscription_details, or both. Takes precedence over display_subscription_on_update.`).option("--generate-draft-invoices <value>", `When \`true\`, the invoice issued after signature stays in \`draft\` status instead of being emitted for payment. Use this when you want to review the final invoice manually before sending it. Defaults to \`false\`.`).option("--crm-opportunity-id <value>", `ID of the related opportunity/deal in the connected CRM.`).option("--expires-at <value>", `Quote expiration date. UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format. Set to \`null\` to clear the expiration.`).option("--subscription <json>", `Subscription configuration constituting the quote. When provided on a draft quote, it creates or replaces the draft subscription attached to the quote.`).option("--invoice <json>", `Invoice configuration constituting the one-off quote. When provided on a draft one-off quote, it deletes the previous draft invoice and creates a fresh one linked to the quote. \`invoice.invoicing_entity_id\` is ignored on update \u2014 the quote's existing invoicing entity is reused.`).addHelpText("after", `
45322
+ `).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", `
45029
45323
  Examples:
45030
45324
  hyperline quotes update --id <id>
45031
45325
  hyperline quotes update --id <id> --owner-email <owner_email> --catalog-version-id <catalog_version_id>
@@ -45060,6 +45354,8 @@ Examples:
45060
45354
  args.display_price_tiers = opts.displayPriceTiers;
45061
45355
  if (opts.displayPhaseValue !== void 0)
45062
45356
  args.display_phase_value = opts.displayPhaseValue;
45357
+ if (opts.displayDiscountsOnTotal !== void 0)
45358
+ args.display_discounts_on_total = opts.displayDiscountsOnTotal;
45063
45359
  if (opts.displayFirstInvoiceAmount !== void 0)
45064
45360
  args.display_first_invoice_amount = opts.displayFirstInvoiceAmount;
45065
45361
  if (opts.displayDocumentsInPreview !== void 0)
@@ -45153,6 +45449,25 @@ Examples:
45153
45449
  queryParamKeys: []
45154
45450
  });
45155
45451
  });
45452
+ resource.command("redraft").description(`Switch a quote back to draft so its subscription or invoice configuration can be updated. Works on quotes pending approval, with changes requested, approved, or awaiting signature. Cancels pending approval requests and the signature request; the quote must then be finalized again.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
45453
+ Examples:
45454
+ hyperline quotes redraft --id <id>
45455
+ hyperline quotes redraft --id <id> --output json`).action(async (opts) => {
45456
+ const ctx = resource.parent?.opts()._ctx;
45457
+ if (!ctx) {
45458
+ process.stderr.write("Error: Not authenticated\n");
45459
+ process.exit(1);
45460
+ }
45461
+ const args = {};
45462
+ if (opts.id !== void 0)
45463
+ args.id = opts.id;
45464
+ await ctx.execute({
45465
+ method: "POST",
45466
+ path: "/v1/quotes/{id}/redraft",
45467
+ args,
45468
+ queryParamKeys: []
45469
+ });
45470
+ });
45156
45471
  resource.command("send").description(`Send a quote by email for customer signature. Requires the quote to be approved first.`).requiredOption("--id <value>", `id parameter`).option("--email <value>", `Email address to which the quote will be sent for signature. Required unless the quote has signers, in which case the email goes to the signers of the current step and this field is ignored.`).option("--message <value>", `Custom message used in the email content.`).addHelpText("after", `
45157
45472
  Examples:
45158
45473
  hyperline quotes send --id <id>
@@ -45350,7 +45665,7 @@ Examples:
45350
45665
  // build/commands/generated/quotes-templates.js
45351
45666
  function registerQuotes_TemplatesCommands(parent) {
45352
45667
  const resource = parent.command("quotes-templates").description("Manage quotes > templates");
45353
- 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", `
45668
+ 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", `
45354
45669
  Examples:
45355
45670
  hyperline quotes-templates list-quote-templates
45356
45671
  hyperline quotes-templates list-quote-templates --take <take> --id <id>`).action(async (opts) => {
@@ -45364,10 +45679,6 @@ Examples:
45364
45679
  args.id = opts.id;
45365
45680
  if (opts["id.not"] !== void 0)
45366
45681
  args.id__not = opts["id.not"];
45367
- if (opts["id.isNull"] !== void 0)
45368
- args.id__isNull = opts["id.isNull"];
45369
- if (opts["id.isNotNull"] !== void 0)
45370
- args.id__isNotNull = opts["id.isNotNull"];
45371
45682
  if (opts["id.equals"] !== void 0)
45372
45683
  args.id__equals = opts["id.equals"];
45373
45684
  if (opts["id.contains"] !== void 0)
@@ -45380,10 +45691,6 @@ Examples:
45380
45691
  args.name = opts.name;
45381
45692
  if (opts["name.not"] !== void 0)
45382
45693
  args.name__not = opts["name.not"];
45383
- if (opts["name.isNull"] !== void 0)
45384
- args.name__isNull = opts["name.isNull"];
45385
- if (opts["name.isNotNull"] !== void 0)
45386
- args.name__isNotNull = opts["name.isNotNull"];
45387
45694
  if (opts["name.equals"] !== void 0)
45388
45695
  args.name__equals = opts["name.equals"];
45389
45696
  if (opts["name.contains"] !== void 0)
@@ -45396,10 +45703,6 @@ Examples:
45396
45703
  args.subscription_template_id = opts.subscriptionTemplateId;
45397
45704
  if (opts["subscriptionTemplateId.not"] !== void 0)
45398
45705
  args.subscription_template_id__not = opts["subscriptionTemplateId.not"];
45399
- if (opts["subscriptionTemplateId.isNull"] !== void 0)
45400
- args.subscription_template_id__isNull = opts["subscriptionTemplateId.isNull"];
45401
- if (opts["subscriptionTemplateId.isNotNull"] !== void 0)
45402
- args.subscription_template_id__isNotNull = opts["subscriptionTemplateId.isNotNull"];
45403
45706
  if (opts["subscriptionTemplateId.equals"] !== void 0)
45404
45707
  args.subscription_template_id__equals = opts["subscriptionTemplateId.equals"];
45405
45708
  if (opts["subscriptionTemplateId.contains"] !== void 0)
@@ -45408,6 +45711,10 @@ Examples:
45408
45711
  args.subscription_template_id__startsWith = opts["subscriptionTemplateId.startsWith"];
45409
45712
  if (opts["subscriptionTemplateId.endWith"] !== void 0)
45410
45713
  args.subscription_template_id__endWith = opts["subscriptionTemplateId.endWith"];
45714
+ if (opts["subscriptionTemplateId.isNull"] !== void 0)
45715
+ args.subscription_template_id__isNull = opts["subscriptionTemplateId.isNull"];
45716
+ if (opts["subscriptionTemplateId.isNotNull"] !== void 0)
45717
+ args.subscription_template_id__isNotNull = opts["subscriptionTemplateId.isNotNull"];
45411
45718
  if (opts.search !== void 0)
45412
45719
  args.search = opts.search;
45413
45720
  if (opts.take !== void 0)
@@ -45423,28 +45730,24 @@ Examples:
45423
45730
  "skip",
45424
45731
  "id",
45425
45732
  "id__not",
45426
- "id__isNull",
45427
- "id__isNotNull",
45428
45733
  "id__equals",
45429
45734
  "id__contains",
45430
45735
  "id__startsWith",
45431
45736
  "id__endWith",
45432
45737
  "name",
45433
45738
  "name__not",
45434
- "name__isNull",
45435
- "name__isNotNull",
45436
45739
  "name__equals",
45437
45740
  "name__contains",
45438
45741
  "name__startsWith",
45439
45742
  "name__endWith",
45440
45743
  "subscription_template_id",
45441
45744
  "subscription_template_id__not",
45442
- "subscription_template_id__isNull",
45443
- "subscription_template_id__isNotNull",
45444
45745
  "subscription_template_id__equals",
45445
45746
  "subscription_template_id__contains",
45446
45747
  "subscription_template_id__startsWith",
45447
45748
  "subscription_template_id__endWith",
45749
+ "subscription_template_id__isNull",
45750
+ "subscription_template_id__isNotNull",
45448
45751
  "search"
45449
45752
  ]
45450
45753
  });
@@ -45846,7 +46149,7 @@ Examples:
45846
46149
  queryParamKeys: []
45847
46150
  });
45848
46151
  });
45849
- 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>", `
46152
+ resource.command("list").description(`List subscriptions with filters for activation_strategy, status, currency, plan_id, original_quote_id, integration_entity_id, customer_id, invoicing_entity_id, purchase_order, updated_at, cancel_at, custom_properties, and the active contract: contract_start__gte/__lte, contract_end__gte/__lte, renew_automatically. For upcoming renewals, combine contract_end__gte/__lte with renew_automatically, plus cancel_at for scheduled cancellations. Draft, voided, cancelled and archived excluded by default (status=all applies the same exclusion); status=any returns every status. Paginated with take/skip.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--activation-strategy <value>", `activation_strategy`).option("--activation-strategy.in <value>", `activation_strategy__in`).option("--status <value>", `
45850
46153
  Subscription status filter.
45851
46154
 
45852
46155
  - \`active\`, \`pending\`, \`paused\`, \`errored\`, \`cancelled\`, \`draft\`, \`voided\`, \`archived\`: match that status.
@@ -45855,7 +46158,7 @@ Subscription status filter.
45855
46158
  - \`any\`: every status, no exclusion.
45856
46159
 
45857
46160
  Use \`status__in\` with comma-separated values to combine statuses. When the filter is omitted, \`draft\`, \`voided\`, \`cancelled\` and \`archived\` subscriptions are excluded.
45858
- `).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", `
46161
+ `).option("--status.in <value>", `Comma-separated list of subscription statuses to include. Same values as \`status\`.`).option("--currency <value>", `currency`).option("--currency.not <value>", `currency__not`).option("--currency.equals <value>", `currency__equals`).option("--currency.contains <value>", `currency__contains`).option("--currency.starts-with <value>", `currency__startsWith`).option("--currency.end-with <value>", `currency__endWith`).option("--plan-id <value>", `plan_id`).option("--plan-id.not <value>", `plan_id__not`).option("--plan-id.equals <value>", `plan_id__equals`).option("--plan-id.contains <value>", `plan_id__contains`).option("--plan-id.starts-with <value>", `plan_id__startsWith`).option("--plan-id.end-with <value>", `plan_id__endWith`).option("--plan-id.is-null <value>", `plan_id__isNull`).option("--plan-id.is-not-null <value>", `plan_id__isNotNull`).option("--original-quote-id <value>", `original_quote_id`).option("--original-quote-id.not <value>", `original_quote_id__not`).option("--original-quote-id.equals <value>", `original_quote_id__equals`).option("--original-quote-id.contains <value>", `original_quote_id__contains`).option("--original-quote-id.starts-with <value>", `original_quote_id__startsWith`).option("--original-quote-id.end-with <value>", `original_quote_id__endWith`).option("--original-quote-id.is-null <value>", `original_quote_id__isNull`).option("--original-quote-id.is-not-null <value>", `original_quote_id__isNotNull`).option("--customer-id <value>", `customer_id`).option("--customer-id.not <value>", `customer_id__not`).option("--customer-id.equals <value>", `customer_id__equals`).option("--customer-id.contains <value>", `customer_id__contains`).option("--customer-id.starts-with <value>", `customer_id__startsWith`).option("--customer-id.end-with <value>", `customer_id__endWith`).option("--customer-id.is-null <value>", `customer_id__isNull`).option("--customer-id.is-not-null <value>", `customer_id__isNotNull`).option("--invoicing-entity-id <value>", `invoicing_entity_id`).option("--purchase-order <value>", `purchase_order`).option("--purchase-order.not <value>", `purchase_order__not`).option("--purchase-order.equals <value>", `purchase_order__equals`).option("--purchase-order.contains <value>", `purchase_order__contains`).option("--purchase-order.starts-with <value>", `purchase_order__startsWith`).option("--purchase-order.end-with <value>", `purchase_order__endWith`).option("--purchase-order.is-null <value>", `purchase_order__isNull`).option("--purchase-order.is-not-null <value>", `purchase_order__isNotNull`).option("--custom-properties <value>", `custom_properties`).option("--invoice-drafts <value>", `invoice_drafts`).option("--integration-entity-id <value>", `integration_entity_id`).option("--updated-at <value>", `updated_at`).option("--updated-at.not <value>", `updated_at__not`).option("--updated-at.equals <value>", `updated_at__equals`).option("--updated-at.lt <value>", `updated_at__lt`).option("--updated-at.lte <value>", `updated_at__lte`).option("--updated-at.gt <value>", `updated_at__gt`).option("--updated-at.gte <value>", `updated_at__gte`).option("--cancel-at <value>", `cancel_at`).option("--cancel-at.not <value>", `cancel_at__not`).option("--cancel-at.equals <value>", `cancel_at__equals`).option("--cancel-at.lt <value>", `cancel_at__lt`).option("--cancel-at.lte <value>", `cancel_at__lte`).option("--cancel-at.gt <value>", `cancel_at__gt`).option("--cancel-at.gte <value>", `cancel_at__gte`).option("--cancel-at.is-null <value>", `cancel_at__isNull`).option("--cancel-at.is-not-null <value>", `cancel_at__isNotNull`).option("--contract-start.gte <value>", `Return only subscriptions whose active contract starts on or after this date.`).option("--contract-start.lte <value>", `Return only subscriptions whose active contract starts on or before this date.`).option("--contract-end.gte <value>", `Return only subscriptions whose active contract ends on or after this date.`).option("--contract-end.lte <value>", `Return only subscriptions whose active contract ends on or before this date.`).option("--renew-automatically <value>", `Return only subscriptions whose active contract renews automatically (\`true\`) or not (\`false\`).`).addHelpText("after", `
45859
46162
  Examples:
45860
46163
  hyperline subscriptions list
45861
46164
  hyperline subscriptions list --take <take> --activation-strategy <activation_strategy>`).action(async (opts) => {
@@ -45877,10 +46180,6 @@ Examples:
45877
46180
  args.currency = opts.currency;
45878
46181
  if (opts["currency.not"] !== void 0)
45879
46182
  args.currency__not = opts["currency.not"];
45880
- if (opts["currency.isNull"] !== void 0)
45881
- args.currency__isNull = opts["currency.isNull"];
45882
- if (opts["currency.isNotNull"] !== void 0)
45883
- args.currency__isNotNull = opts["currency.isNotNull"];
45884
46183
  if (opts["currency.equals"] !== void 0)
45885
46184
  args.currency__equals = opts["currency.equals"];
45886
46185
  if (opts["currency.contains"] !== void 0)
@@ -45893,10 +46192,6 @@ Examples:
45893
46192
  args.plan_id = opts.planId;
45894
46193
  if (opts["planId.not"] !== void 0)
45895
46194
  args.plan_id__not = opts["planId.not"];
45896
- if (opts["planId.isNull"] !== void 0)
45897
- args.plan_id__isNull = opts["planId.isNull"];
45898
- if (opts["planId.isNotNull"] !== void 0)
45899
- args.plan_id__isNotNull = opts["planId.isNotNull"];
45900
46195
  if (opts["planId.equals"] !== void 0)
45901
46196
  args.plan_id__equals = opts["planId.equals"];
45902
46197
  if (opts["planId.contains"] !== void 0)
@@ -45905,14 +46200,14 @@ Examples:
45905
46200
  args.plan_id__startsWith = opts["planId.startsWith"];
45906
46201
  if (opts["planId.endWith"] !== void 0)
45907
46202
  args.plan_id__endWith = opts["planId.endWith"];
46203
+ if (opts["planId.isNull"] !== void 0)
46204
+ args.plan_id__isNull = opts["planId.isNull"];
46205
+ if (opts["planId.isNotNull"] !== void 0)
46206
+ args.plan_id__isNotNull = opts["planId.isNotNull"];
45908
46207
  if (opts.originalQuoteId !== void 0)
45909
46208
  args.original_quote_id = opts.originalQuoteId;
45910
46209
  if (opts["originalQuoteId.not"] !== void 0)
45911
46210
  args.original_quote_id__not = opts["originalQuoteId.not"];
45912
- if (opts["originalQuoteId.isNull"] !== void 0)
45913
- args.original_quote_id__isNull = opts["originalQuoteId.isNull"];
45914
- if (opts["originalQuoteId.isNotNull"] !== void 0)
45915
- args.original_quote_id__isNotNull = opts["originalQuoteId.isNotNull"];
45916
46211
  if (opts["originalQuoteId.equals"] !== void 0)
45917
46212
  args.original_quote_id__equals = opts["originalQuoteId.equals"];
45918
46213
  if (opts["originalQuoteId.contains"] !== void 0)
@@ -45921,14 +46216,14 @@ Examples:
45921
46216
  args.original_quote_id__startsWith = opts["originalQuoteId.startsWith"];
45922
46217
  if (opts["originalQuoteId.endWith"] !== void 0)
45923
46218
  args.original_quote_id__endWith = opts["originalQuoteId.endWith"];
46219
+ if (opts["originalQuoteId.isNull"] !== void 0)
46220
+ args.original_quote_id__isNull = opts["originalQuoteId.isNull"];
46221
+ if (opts["originalQuoteId.isNotNull"] !== void 0)
46222
+ args.original_quote_id__isNotNull = opts["originalQuoteId.isNotNull"];
45924
46223
  if (opts.customerId !== void 0)
45925
46224
  args.customer_id = opts.customerId;
45926
46225
  if (opts["customerId.not"] !== void 0)
45927
46226
  args.customer_id__not = opts["customerId.not"];
45928
- if (opts["customerId.isNull"] !== void 0)
45929
- args.customer_id__isNull = opts["customerId.isNull"];
45930
- if (opts["customerId.isNotNull"] !== void 0)
45931
- args.customer_id__isNotNull = opts["customerId.isNotNull"];
45932
46227
  if (opts["customerId.equals"] !== void 0)
45933
46228
  args.customer_id__equals = opts["customerId.equals"];
45934
46229
  if (opts["customerId.contains"] !== void 0)
@@ -45937,16 +46232,16 @@ Examples:
45937
46232
  args.customer_id__startsWith = opts["customerId.startsWith"];
45938
46233
  if (opts["customerId.endWith"] !== void 0)
45939
46234
  args.customer_id__endWith = opts["customerId.endWith"];
46235
+ if (opts["customerId.isNull"] !== void 0)
46236
+ args.customer_id__isNull = opts["customerId.isNull"];
46237
+ if (opts["customerId.isNotNull"] !== void 0)
46238
+ args.customer_id__isNotNull = opts["customerId.isNotNull"];
45940
46239
  if (opts.invoicingEntityId !== void 0)
45941
46240
  args.invoicing_entity_id = opts.invoicingEntityId;
45942
46241
  if (opts.purchaseOrder !== void 0)
45943
46242
  args.purchase_order = opts.purchaseOrder;
45944
46243
  if (opts["purchaseOrder.not"] !== void 0)
45945
46244
  args.purchase_order__not = opts["purchaseOrder.not"];
45946
- if (opts["purchaseOrder.isNull"] !== void 0)
45947
- args.purchase_order__isNull = opts["purchaseOrder.isNull"];
45948
- if (opts["purchaseOrder.isNotNull"] !== void 0)
45949
- args.purchase_order__isNotNull = opts["purchaseOrder.isNotNull"];
45950
46245
  if (opts["purchaseOrder.equals"] !== void 0)
45951
46246
  args.purchase_order__equals = opts["purchaseOrder.equals"];
45952
46247
  if (opts["purchaseOrder.contains"] !== void 0)
@@ -45955,6 +46250,10 @@ Examples:
45955
46250
  args.purchase_order__startsWith = opts["purchaseOrder.startsWith"];
45956
46251
  if (opts["purchaseOrder.endWith"] !== void 0)
45957
46252
  args.purchase_order__endWith = opts["purchaseOrder.endWith"];
46253
+ if (opts["purchaseOrder.isNull"] !== void 0)
46254
+ args.purchase_order__isNull = opts["purchaseOrder.isNull"];
46255
+ if (opts["purchaseOrder.isNotNull"] !== void 0)
46256
+ args.purchase_order__isNotNull = opts["purchaseOrder.isNotNull"];
45958
46257
  if (opts.customProperties !== void 0)
45959
46258
  args.custom_properties = opts.customProperties;
45960
46259
  if (opts.invoiceDrafts !== void 0)
@@ -45965,10 +46264,6 @@ Examples:
45965
46264
  args.updated_at = opts.updatedAt;
45966
46265
  if (opts["updatedAt.not"] !== void 0)
45967
46266
  args.updated_at__not = opts["updatedAt.not"];
45968
- if (opts["updatedAt.isNull"] !== void 0)
45969
- args.updated_at__isNull = opts["updatedAt.isNull"];
45970
- if (opts["updatedAt.isNotNull"] !== void 0)
45971
- args.updated_at__isNotNull = opts["updatedAt.isNotNull"];
45972
46267
  if (opts["updatedAt.equals"] !== void 0)
45973
46268
  args.updated_at__equals = opts["updatedAt.equals"];
45974
46269
  if (opts["updatedAt.lt"] !== void 0)
@@ -45979,6 +46274,34 @@ Examples:
45979
46274
  args.updated_at__gt = opts["updatedAt.gt"];
45980
46275
  if (opts["updatedAt.gte"] !== void 0)
45981
46276
  args.updated_at__gte = opts["updatedAt.gte"];
46277
+ if (opts.cancelAt !== void 0)
46278
+ args.cancel_at = opts.cancelAt;
46279
+ if (opts["cancelAt.not"] !== void 0)
46280
+ args.cancel_at__not = opts["cancelAt.not"];
46281
+ if (opts["cancelAt.equals"] !== void 0)
46282
+ args.cancel_at__equals = opts["cancelAt.equals"];
46283
+ if (opts["cancelAt.lt"] !== void 0)
46284
+ args.cancel_at__lt = opts["cancelAt.lt"];
46285
+ if (opts["cancelAt.lte"] !== void 0)
46286
+ args.cancel_at__lte = opts["cancelAt.lte"];
46287
+ if (opts["cancelAt.gt"] !== void 0)
46288
+ args.cancel_at__gt = opts["cancelAt.gt"];
46289
+ if (opts["cancelAt.gte"] !== void 0)
46290
+ args.cancel_at__gte = opts["cancelAt.gte"];
46291
+ if (opts["cancelAt.isNull"] !== void 0)
46292
+ args.cancel_at__isNull = opts["cancelAt.isNull"];
46293
+ if (opts["cancelAt.isNotNull"] !== void 0)
46294
+ args.cancel_at__isNotNull = opts["cancelAt.isNotNull"];
46295
+ if (opts["contractStart.gte"] !== void 0)
46296
+ args.contract_start__gte = opts["contractStart.gte"];
46297
+ if (opts["contractStart.lte"] !== void 0)
46298
+ args.contract_start__lte = opts["contractStart.lte"];
46299
+ if (opts["contractEnd.gte"] !== void 0)
46300
+ args.contract_end__gte = opts["contractEnd.gte"];
46301
+ if (opts["contractEnd.lte"] !== void 0)
46302
+ args.contract_end__lte = opts["contractEnd.lte"];
46303
+ if (opts.renewAutomatically !== void 0)
46304
+ args.renew_automatically = opts.renewAutomatically;
45982
46305
  if (opts.take !== void 0)
45983
46306
  args.take = Number(opts.take);
45984
46307
  if (opts.skip !== void 0)
@@ -45996,57 +46319,67 @@ Examples:
45996
46319
  "status__in",
45997
46320
  "currency",
45998
46321
  "currency__not",
45999
- "currency__isNull",
46000
- "currency__isNotNull",
46001
46322
  "currency__equals",
46002
46323
  "currency__contains",
46003
46324
  "currency__startsWith",
46004
46325
  "currency__endWith",
46005
46326
  "plan_id",
46006
46327
  "plan_id__not",
46007
- "plan_id__isNull",
46008
- "plan_id__isNotNull",
46009
46328
  "plan_id__equals",
46010
46329
  "plan_id__contains",
46011
46330
  "plan_id__startsWith",
46012
46331
  "plan_id__endWith",
46332
+ "plan_id__isNull",
46333
+ "plan_id__isNotNull",
46013
46334
  "original_quote_id",
46014
46335
  "original_quote_id__not",
46015
- "original_quote_id__isNull",
46016
- "original_quote_id__isNotNull",
46017
46336
  "original_quote_id__equals",
46018
46337
  "original_quote_id__contains",
46019
46338
  "original_quote_id__startsWith",
46020
46339
  "original_quote_id__endWith",
46340
+ "original_quote_id__isNull",
46341
+ "original_quote_id__isNotNull",
46021
46342
  "customer_id",
46022
46343
  "customer_id__not",
46023
- "customer_id__isNull",
46024
- "customer_id__isNotNull",
46025
46344
  "customer_id__equals",
46026
46345
  "customer_id__contains",
46027
46346
  "customer_id__startsWith",
46028
46347
  "customer_id__endWith",
46348
+ "customer_id__isNull",
46349
+ "customer_id__isNotNull",
46029
46350
  "invoicing_entity_id",
46030
46351
  "purchase_order",
46031
46352
  "purchase_order__not",
46032
- "purchase_order__isNull",
46033
- "purchase_order__isNotNull",
46034
46353
  "purchase_order__equals",
46035
46354
  "purchase_order__contains",
46036
46355
  "purchase_order__startsWith",
46037
46356
  "purchase_order__endWith",
46357
+ "purchase_order__isNull",
46358
+ "purchase_order__isNotNull",
46038
46359
  "custom_properties",
46039
46360
  "invoice_drafts",
46040
46361
  "integration_entity_id",
46041
46362
  "updated_at",
46042
46363
  "updated_at__not",
46043
- "updated_at__isNull",
46044
- "updated_at__isNotNull",
46045
46364
  "updated_at__equals",
46046
46365
  "updated_at__lt",
46047
46366
  "updated_at__lte",
46048
46367
  "updated_at__gt",
46049
- "updated_at__gte"
46368
+ "updated_at__gte",
46369
+ "cancel_at",
46370
+ "cancel_at__not",
46371
+ "cancel_at__equals",
46372
+ "cancel_at__lt",
46373
+ "cancel_at__lte",
46374
+ "cancel_at__gt",
46375
+ "cancel_at__gte",
46376
+ "cancel_at__isNull",
46377
+ "cancel_at__isNotNull",
46378
+ "contract_start__gte",
46379
+ "contract_start__lte",
46380
+ "contract_end__gte",
46381
+ "contract_end__lte",
46382
+ "renew_automatically"
46050
46383
  ]
46051
46384
  });
46052
46385
  });
@@ -46328,7 +46661,7 @@ Examples:
46328
46661
  // build/commands/generated/subscriptions-transitions.js
46329
46662
  function registerSubscriptions_TransitionsCommands(parent) {
46330
46663
  const resource = parent.command("subscriptions-transitions").description("Manage subscriptions > transitions");
46331
- 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", `
46664
+ 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", `
46332
46665
  Examples:
46333
46666
  hyperline subscriptions-transitions list-subscription-transitions
46334
46667
  hyperline subscriptions-transitions list-subscription-transitions --take <take> --status <status>`).action(async (opts) => {
@@ -46346,10 +46679,6 @@ Examples:
46346
46679
  args.source_subscription_id = opts.sourceSubscriptionId;
46347
46680
  if (opts["sourceSubscriptionId.not"] !== void 0)
46348
46681
  args.source_subscription_id__not = opts["sourceSubscriptionId.not"];
46349
- if (opts["sourceSubscriptionId.isNull"] !== void 0)
46350
- args.source_subscription_id__isNull = opts["sourceSubscriptionId.isNull"];
46351
- if (opts["sourceSubscriptionId.isNotNull"] !== void 0)
46352
- args.source_subscription_id__isNotNull = opts["sourceSubscriptionId.isNotNull"];
46353
46682
  if (opts["sourceSubscriptionId.equals"] !== void 0)
46354
46683
  args.source_subscription_id__equals = opts["sourceSubscriptionId.equals"];
46355
46684
  if (opts["sourceSubscriptionId.contains"] !== void 0)
@@ -46362,10 +46691,6 @@ Examples:
46362
46691
  args.base_subscription_id = opts.baseSubscriptionId;
46363
46692
  if (opts["baseSubscriptionId.not"] !== void 0)
46364
46693
  args.base_subscription_id__not = opts["baseSubscriptionId.not"];
46365
- if (opts["baseSubscriptionId.isNull"] !== void 0)
46366
- args.base_subscription_id__isNull = opts["baseSubscriptionId.isNull"];
46367
- if (opts["baseSubscriptionId.isNotNull"] !== void 0)
46368
- args.base_subscription_id__isNotNull = opts["baseSubscriptionId.isNotNull"];
46369
46694
  if (opts["baseSubscriptionId.equals"] !== void 0)
46370
46695
  args.base_subscription_id__equals = opts["baseSubscriptionId.equals"];
46371
46696
  if (opts["baseSubscriptionId.contains"] !== void 0)
@@ -46378,10 +46703,6 @@ Examples:
46378
46703
  args.target_subscription_id = opts.targetSubscriptionId;
46379
46704
  if (opts["targetSubscriptionId.not"] !== void 0)
46380
46705
  args.target_subscription_id__not = opts["targetSubscriptionId.not"];
46381
- if (opts["targetSubscriptionId.isNull"] !== void 0)
46382
- args.target_subscription_id__isNull = opts["targetSubscriptionId.isNull"];
46383
- if (opts["targetSubscriptionId.isNotNull"] !== void 0)
46384
- args.target_subscription_id__isNotNull = opts["targetSubscriptionId.isNotNull"];
46385
46706
  if (opts["targetSubscriptionId.equals"] !== void 0)
46386
46707
  args.target_subscription_id__equals = opts["targetSubscriptionId.equals"];
46387
46708
  if (opts["targetSubscriptionId.contains"] !== void 0)
@@ -46390,14 +46711,14 @@ Examples:
46390
46711
  args.target_subscription_id__startsWith = opts["targetSubscriptionId.startsWith"];
46391
46712
  if (opts["targetSubscriptionId.endWith"] !== void 0)
46392
46713
  args.target_subscription_id__endWith = opts["targetSubscriptionId.endWith"];
46714
+ if (opts["targetSubscriptionId.isNull"] !== void 0)
46715
+ args.target_subscription_id__isNull = opts["targetSubscriptionId.isNull"];
46716
+ if (opts["targetSubscriptionId.isNotNull"] !== void 0)
46717
+ args.target_subscription_id__isNotNull = opts["targetSubscriptionId.isNotNull"];
46393
46718
  if (opts.transitionDate !== void 0)
46394
46719
  args.transition_date = opts.transitionDate;
46395
46720
  if (opts["transitionDate.not"] !== void 0)
46396
46721
  args.transition_date__not = opts["transitionDate.not"];
46397
- if (opts["transitionDate.isNull"] !== void 0)
46398
- args.transition_date__isNull = opts["transitionDate.isNull"];
46399
- if (opts["transitionDate.isNotNull"] !== void 0)
46400
- args.transition_date__isNotNull = opts["transitionDate.isNotNull"];
46401
46722
  if (opts["transitionDate.equals"] !== void 0)
46402
46723
  args.transition_date__equals = opts["transitionDate.equals"];
46403
46724
  if (opts["transitionDate.lt"] !== void 0)
@@ -46408,14 +46729,14 @@ Examples:
46408
46729
  args.transition_date__gt = opts["transitionDate.gt"];
46409
46730
  if (opts["transitionDate.gte"] !== void 0)
46410
46731
  args.transition_date__gte = opts["transitionDate.gte"];
46732
+ if (opts["transitionDate.isNull"] !== void 0)
46733
+ args.transition_date__isNull = opts["transitionDate.isNull"];
46734
+ if (opts["transitionDate.isNotNull"] !== void 0)
46735
+ args.transition_date__isNotNull = opts["transitionDate.isNotNull"];
46411
46736
  if (opts.transitionedAt !== void 0)
46412
46737
  args.transitioned_at = opts.transitionedAt;
46413
46738
  if (opts["transitionedAt.not"] !== void 0)
46414
46739
  args.transitioned_at__not = opts["transitionedAt.not"];
46415
- if (opts["transitionedAt.isNull"] !== void 0)
46416
- args.transitioned_at__isNull = opts["transitionedAt.isNull"];
46417
- if (opts["transitionedAt.isNotNull"] !== void 0)
46418
- args.transitioned_at__isNotNull = opts["transitionedAt.isNotNull"];
46419
46740
  if (opts["transitionedAt.equals"] !== void 0)
46420
46741
  args.transitioned_at__equals = opts["transitionedAt.equals"];
46421
46742
  if (opts["transitionedAt.lt"] !== void 0)
@@ -46426,6 +46747,10 @@ Examples:
46426
46747
  args.transitioned_at__gt = opts["transitionedAt.gt"];
46427
46748
  if (opts["transitionedAt.gte"] !== void 0)
46428
46749
  args.transitioned_at__gte = opts["transitionedAt.gte"];
46750
+ if (opts["transitionedAt.isNull"] !== void 0)
46751
+ args.transitioned_at__isNull = opts["transitionedAt.isNull"];
46752
+ if (opts["transitionedAt.isNotNull"] !== void 0)
46753
+ args.transitioned_at__isNotNull = opts["transitionedAt.isNotNull"];
46429
46754
  if (opts.take !== void 0)
46430
46755
  args.take = Number(opts.take);
46431
46756
  if (opts.skip !== void 0)
@@ -46441,46 +46766,42 @@ Examples:
46441
46766
  "status__in",
46442
46767
  "source_subscription_id",
46443
46768
  "source_subscription_id__not",
46444
- "source_subscription_id__isNull",
46445
- "source_subscription_id__isNotNull",
46446
46769
  "source_subscription_id__equals",
46447
46770
  "source_subscription_id__contains",
46448
46771
  "source_subscription_id__startsWith",
46449
46772
  "source_subscription_id__endWith",
46450
46773
  "base_subscription_id",
46451
46774
  "base_subscription_id__not",
46452
- "base_subscription_id__isNull",
46453
- "base_subscription_id__isNotNull",
46454
46775
  "base_subscription_id__equals",
46455
46776
  "base_subscription_id__contains",
46456
46777
  "base_subscription_id__startsWith",
46457
46778
  "base_subscription_id__endWith",
46458
46779
  "target_subscription_id",
46459
46780
  "target_subscription_id__not",
46460
- "target_subscription_id__isNull",
46461
- "target_subscription_id__isNotNull",
46462
46781
  "target_subscription_id__equals",
46463
46782
  "target_subscription_id__contains",
46464
46783
  "target_subscription_id__startsWith",
46465
46784
  "target_subscription_id__endWith",
46785
+ "target_subscription_id__isNull",
46786
+ "target_subscription_id__isNotNull",
46466
46787
  "transition_date",
46467
46788
  "transition_date__not",
46468
- "transition_date__isNull",
46469
- "transition_date__isNotNull",
46470
46789
  "transition_date__equals",
46471
46790
  "transition_date__lt",
46472
46791
  "transition_date__lte",
46473
46792
  "transition_date__gt",
46474
46793
  "transition_date__gte",
46794
+ "transition_date__isNull",
46795
+ "transition_date__isNotNull",
46475
46796
  "transitioned_at",
46476
46797
  "transitioned_at__not",
46477
- "transitioned_at__isNull",
46478
- "transitioned_at__isNotNull",
46479
46798
  "transitioned_at__equals",
46480
46799
  "transitioned_at__lt",
46481
46800
  "transitioned_at__lte",
46482
46801
  "transitioned_at__gt",
46483
- "transitioned_at__gte"
46802
+ "transitioned_at__gte",
46803
+ "transitioned_at__isNull",
46804
+ "transitioned_at__isNotNull"
46484
46805
  ]
46485
46806
  });
46486
46807
  });
@@ -46558,7 +46879,7 @@ Examples:
46558
46879
  // build/commands/generated/taxes.js
46559
46880
  function registerTaxesCommands(parent) {
46560
46881
  const resource = parent.command("taxes").description("Manage taxes");
46561
- 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", `
46882
+ 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", `
46562
46883
  Examples:
46563
46884
  hyperline taxes list-tax-rates
46564
46885
  hyperline taxes list-tax-rates --take <take> --id <id>`).action(async (opts) => {
@@ -46572,10 +46893,6 @@ Examples:
46572
46893
  args.id = opts.id;
46573
46894
  if (opts["id.not"] !== void 0)
46574
46895
  args.id__not = opts["id.not"];
46575
- if (opts["id.isNull"] !== void 0)
46576
- args.id__isNull = opts["id.isNull"];
46577
- if (opts["id.isNotNull"] !== void 0)
46578
- args.id__isNotNull = opts["id.isNotNull"];
46579
46896
  if (opts["id.equals"] !== void 0)
46580
46897
  args.id__equals = opts["id.equals"];
46581
46898
  if (opts["id.contains"] !== void 0)
@@ -46588,10 +46905,6 @@ Examples:
46588
46905
  args.name = opts.name;
46589
46906
  if (opts["name.not"] !== void 0)
46590
46907
  args.name__not = opts["name.not"];
46591
- if (opts["name.isNull"] !== void 0)
46592
- args.name__isNull = opts["name.isNull"];
46593
- if (opts["name.isNotNull"] !== void 0)
46594
- args.name__isNotNull = opts["name.isNotNull"];
46595
46908
  if (opts["name.equals"] !== void 0)
46596
46909
  args.name__equals = opts["name.equals"];
46597
46910
  if (opts["name.contains"] !== void 0)
@@ -46600,14 +46913,14 @@ Examples:
46600
46913
  args.name__startsWith = opts["name.startsWith"];
46601
46914
  if (opts["name.endWith"] !== void 0)
46602
46915
  args.name__endWith = opts["name.endWith"];
46916
+ if (opts["name.isNull"] !== void 0)
46917
+ args.name__isNull = opts["name.isNull"];
46918
+ if (opts["name.isNotNull"] !== void 0)
46919
+ args.name__isNotNull = opts["name.isNotNull"];
46603
46920
  if (opts.description !== void 0)
46604
46921
  args.description = opts.description;
46605
46922
  if (opts["description.not"] !== void 0)
46606
46923
  args.description__not = opts["description.not"];
46607
- if (opts["description.isNull"] !== void 0)
46608
- args.description__isNull = opts["description.isNull"];
46609
- if (opts["description.isNotNull"] !== void 0)
46610
- args.description__isNotNull = opts["description.isNotNull"];
46611
46924
  if (opts["description.equals"] !== void 0)
46612
46925
  args.description__equals = opts["description.equals"];
46613
46926
  if (opts["description.contains"] !== void 0)
@@ -46616,14 +46929,14 @@ Examples:
46616
46929
  args.description__startsWith = opts["description.startsWith"];
46617
46930
  if (opts["description.endWith"] !== void 0)
46618
46931
  args.description__endWith = opts["description.endWith"];
46932
+ if (opts["description.isNull"] !== void 0)
46933
+ args.description__isNull = opts["description.isNull"];
46934
+ if (opts["description.isNotNull"] !== void 0)
46935
+ args.description__isNotNull = opts["description.isNotNull"];
46619
46936
  if (opts.invoicingEntityId !== void 0)
46620
46937
  args.invoicing_entity_id = opts.invoicingEntityId;
46621
46938
  if (opts["invoicingEntityId.not"] !== void 0)
46622
46939
  args.invoicing_entity_id__not = opts["invoicingEntityId.not"];
46623
- if (opts["invoicingEntityId.isNull"] !== void 0)
46624
- args.invoicing_entity_id__isNull = opts["invoicingEntityId.isNull"];
46625
- if (opts["invoicingEntityId.isNotNull"] !== void 0)
46626
- args.invoicing_entity_id__isNotNull = opts["invoicingEntityId.isNotNull"];
46627
46940
  if (opts["invoicingEntityId.equals"] !== void 0)
46628
46941
  args.invoicing_entity_id__equals = opts["invoicingEntityId.equals"];
46629
46942
  if (opts["invoicingEntityId.contains"] !== void 0)
@@ -46645,32 +46958,28 @@ Examples:
46645
46958
  "skip",
46646
46959
  "id",
46647
46960
  "id__not",
46648
- "id__isNull",
46649
- "id__isNotNull",
46650
46961
  "id__equals",
46651
46962
  "id__contains",
46652
46963
  "id__startsWith",
46653
46964
  "id__endWith",
46654
46965
  "name",
46655
46966
  "name__not",
46656
- "name__isNull",
46657
- "name__isNotNull",
46658
46967
  "name__equals",
46659
46968
  "name__contains",
46660
46969
  "name__startsWith",
46661
46970
  "name__endWith",
46971
+ "name__isNull",
46972
+ "name__isNotNull",
46662
46973
  "description",
46663
46974
  "description__not",
46664
- "description__isNull",
46665
- "description__isNotNull",
46666
46975
  "description__equals",
46667
46976
  "description__contains",
46668
46977
  "description__startsWith",
46669
46978
  "description__endWith",
46979
+ "description__isNull",
46980
+ "description__isNotNull",
46670
46981
  "invoicing_entity_id",
46671
46982
  "invoicing_entity_id__not",
46672
- "invoicing_entity_id__isNull",
46673
- "invoicing_entity_id__isNotNull",
46674
46983
  "invoicing_entity_id__equals",
46675
46984
  "invoicing_entity_id__contains",
46676
46985
  "invoicing_entity_id__startsWith",
@@ -47250,10 +47559,12 @@ function registerAllCommands(program2) {
47250
47559
  registerAi_CostsCommands(program2);
47251
47560
  registerAnalyticsCommands(program2);
47252
47561
  registerBank_AccountsCommands(program2);
47562
+ registerCatalogCommands(program2);
47253
47563
  registerCompaniesCommands(program2);
47254
47564
  registerCouponsCommands(program2);
47255
47565
  registerCoupons_Promotion_CodesCommands(program2);
47256
47566
  registerCustomers_CreditsCommands(program2);
47567
+ registerCustomers_FeaturesCommands(program2);
47257
47568
  registerCustomers_Payment_MethodsCommands(program2);
47258
47569
  registerCustomers_AddressCommands(program2);
47259
47570
  registerCustomers_ShippingCommands(program2);
@@ -47262,12 +47573,14 @@ function registerAllCommands(program2) {
47262
47573
  registerOrganisationsCommands(program2);
47263
47574
  registerCustomers_SegmentsCommands(program2);
47264
47575
  registerExportsCommands(program2);
47576
+ registerFeaturesCommands(program2);
47265
47577
  registerFilesCommands(program2);
47266
47578
  registerInvoicesCommands(program2);
47267
47579
  registerInvoices_TransactionsCommands(program2);
47268
47580
  registerInvoicing_EntitiesCommands(program2);
47269
47581
  registerAi_MonitoringCommands(program2);
47270
47582
  registerPaymentsCommands(program2);
47583
+ registerProducts_FeaturesCommands(program2);
47271
47584
  registerProductsCommands(program2);
47272
47585
  registerPrice_ConfigurationsCommands(program2);
47273
47586
  registerQuotesCommands(program2);
@@ -63800,97 +64113,314 @@ var executionContextStorage = new AsyncLocalStorage();
63800
64113
  function getExecutionContext() {
63801
64114
  return executionContextStorage.getStore();
63802
64115
  }
63803
-
63804
- // ../hyperline-monitoring/build/context/correlationId.js
63805
- import { AsyncLocalStorage as AsyncLocalStorage2 } from "node:async_hooks";
63806
- var correlationIdStorage = new AsyncLocalStorage2();
63807
- function getCorrelationId() {
63808
- return correlationIdStorage.getStore();
64116
+
64117
+ // ../hyperline-monitoring/build/context/correlationId.js
64118
+ import { AsyncLocalStorage as AsyncLocalStorage2 } from "node:async_hooks";
64119
+ var correlationIdStorage = new AsyncLocalStorage2();
64120
+ function getCorrelationId() {
64121
+ return correlationIdStorage.getStore();
64122
+ }
64123
+
64124
+ // ../hyperline-config/build/index.js
64125
+ import "dotenv/config";
64126
+ import * as stackTraceParser from "stacktrace-parser";
64127
+ function coerceBoolean() {
64128
+ return external_exports.any().refine((value) => ["true", "false"].includes(value), {
64129
+ message: "Expected boolean"
64130
+ }).transform((value) => (
64131
+ // biome-ignore lint/complexity/noUselessTernary: ignore
64132
+ value === "true" ? true : false
64133
+ ));
64134
+ }
64135
+ var types = {
64136
+ string: external_exports.coerce.string,
64137
+ number: external_exports.coerce.number,
64138
+ boolean: coerceBoolean,
64139
+ enum: external_exports.enum
64140
+ };
64141
+ function getConfig(schema, testValues) {
64142
+ const validator = external_exports.object(Object.fromEntries(Object.entries(schema).map(([key, zodType]) => {
64143
+ if (zodType instanceof ZodOptional) {
64144
+ return [key, external_exports.string().optional()];
64145
+ }
64146
+ return [key, external_exports.string()];
64147
+ })));
64148
+ const processEnv = process.env;
64149
+ const isTestMode = processEnv.NODE_ENV === "test";
64150
+ const envVariables = {
64151
+ ...processEnv,
64152
+ ...isTestMode && testValues ? Object.fromEntries(Object.entries(testValues).map(([key, value]) => [key, String(value)])) : {}
64153
+ };
64154
+ const packageName = envVariables.npm_package_name;
64155
+ const parseProcessEnvResult = validator.safeParse(envVariables);
64156
+ if (!parseProcessEnvResult.success) {
64157
+ const parsedStackTrace = stackTraceParser.parse(parseProcessEnvResult.error.stack ?? "");
64158
+ const getConfigCallLine = parsedStackTrace.find((line) => {
64159
+ return !line.file?.includes("hyperline-config") && (line.file?.includes("apps/") || line.file?.includes("core/") || line.file?.includes("packages/"));
64160
+ });
64161
+ const callerFile = getConfigCallLine?.file;
64162
+ console.error(`Invalid environment variables for service \`${packageName}\`: \`${callerFile}\``);
64163
+ console.error(parseProcessEnvResult.error.format());
64164
+ process.exit(1);
64165
+ }
64166
+ const coercion = external_exports.object(schema);
64167
+ return coercion.parse(parseProcessEnvResult.data);
64168
+ }
64169
+
64170
+ // ../hyperline-monitoring/build/config.js
64171
+ var config2 = getConfig({
64172
+ // config
64173
+ APP_VERSION: types.string().optional(),
64174
+ // Deployment environment for log tagging, when it cannot be read off
64175
+ // NODE_ENV. Set only by the PDF render worker pools, which must run with
64176
+ // NODE_ENV="production" to get the production React build regardless of which
64177
+ // environment the pod is actually in (see core/invoicing/services/pdf/index.ts).
64178
+ // Unset everywhere else, so the NODE_ENV fallback keeps current behaviour.
64179
+ APP_ENV: types.string().optional(),
64180
+ DD_SERVICE: types.string().optional(),
64181
+ LOGGER_CONSOLE_ENABLED: types.boolean().optional(),
64182
+ LOGGER_STDOUT_ENABLED: types.boolean().optional(),
64183
+ NODE_ENV: types.enum(["local", "test", "staging", "sandbox", "production"]),
64184
+ EVENT_LOOP_MONITORING_ENABLED: types.boolean().optional(),
64185
+ MEMORY_MONITORING_ENABLED: types.boolean().optional(),
64186
+ MEMORY_MONITORING_INTERVAL_MS: types.number().optional()
64187
+ // secrets
64188
+ }, {
64189
+ APP_VERSION: void 0,
64190
+ APP_ENV: void 0,
64191
+ DD_SERVICE: void 0,
64192
+ LOGGER_CONSOLE_ENABLED: false,
64193
+ LOGGER_STDOUT_ENABLED: false,
64194
+ EVENT_LOOP_MONITORING_ENABLED: false,
64195
+ MEMORY_MONITORING_ENABLED: false,
64196
+ MEMORY_MONITORING_INTERVAL_MS: 3e4,
64197
+ NODE_ENV: "test"
64198
+ });
64199
+
64200
+ // ../hyperline-monitoring/build/logger/logger.js
64201
+ import * as util from "node:util";
64202
+ import prune2 from "json-prune";
64203
+ import * as winston from "winston";
64204
+
64205
+ // ../hyperline-monitoring/build/logger/formatting/format.js
64206
+ import prune from "json-prune";
64207
+
64208
+ // ../hyperline-monitoring/build/logger/formatting/logRedaction.js
64209
+ var REDACTED_KEY_NAMES = /* @__PURE__ */ new Set([
64210
+ "accesstoken",
64211
+ "apitoken",
64212
+ "assertion",
64213
+ "authorization",
64214
+ "authtoken",
64215
+ "cardnumber",
64216
+ "clientassertion",
64217
+ "codeverifier",
64218
+ "connectionurl",
64219
+ "consumerkey",
64220
+ "cookie",
64221
+ "credential",
64222
+ "credentials",
64223
+ "iban",
64224
+ "idtoken",
64225
+ "privatekey",
64226
+ "publictoken",
64227
+ "refreshtoken",
64228
+ "sessiontoken",
64229
+ "token",
64230
+ "tokenid",
64231
+ "verificationcode"
64232
+ ]);
64233
+ var REDACTED_KEY_SUFFIX_PATTERN = /(secret|password|passphrase|apikey)$/;
64234
+ var REDACTED_KEY_CANDIDATE_PATTERN = /token|key|secret|pass|assertion|verifier|credential|authorization|cookie|iban|cardnumber|code|connectionurl/i;
64235
+ var URL_ONLY_REDACTED_KEYS = /* @__PURE__ */ new Set(["key"]);
64236
+ var OAUTH_CODE_KEY = "code";
64237
+ var OAUTH_CODE_CONTEXT_KEYS = ["state", "grant_type"];
64238
+ var REDACTED_VALUE = "<redacted>";
64239
+ var TRUNCATED_VALUE = "[TRUNCATED: not redacted]";
64240
+ var TRUNCATED_KEY = "[TRUNCATED]";
64241
+ var MAX_REDACTION_DEPTH = 6;
64242
+ var MAX_ARRAY_ENTRIES = 50;
64243
+ var MAX_PARSED_STRING_LENGTH = 16384;
64244
+ var MAX_VISITED_NODES = 5e3;
64245
+ var MAX_CONTAINER_ENTRIES = 1e3;
64246
+ var MAX_STRING_CHARACTERS = 256e3;
64247
+ function redactLogBody({ body }) {
64248
+ return redactValue({
64249
+ value: body,
64250
+ depth: MAX_REDACTION_DEPTH,
64251
+ budget: {
64252
+ remainingNodes: MAX_VISITED_NODES,
64253
+ remainingChars: MAX_STRING_CHARACTERS
64254
+ }
64255
+ });
64256
+ }
64257
+ function redactLogUrl({ url: url2 }) {
64258
+ const queryIndex = url2.indexOf("?");
64259
+ if (queryIndex === -1) {
64260
+ return url2;
64261
+ }
64262
+ if (url2.length > MAX_PARSED_STRING_LENGTH) {
64263
+ return `${url2.slice(0, queryIndex)}?${TRUNCATED_VALUE}`;
64264
+ }
64265
+ const redactedQuery = redactFormEncoded({
64266
+ text: url2.slice(queryIndex + 1),
64267
+ extraRedactedKeys: URL_ONLY_REDACTED_KEYS
64268
+ });
64269
+ return redactedQuery === void 0 ? url2 : `${url2.slice(0, queryIndex)}?${redactedQuery}`;
64270
+ }
64271
+ function redactValue({ value, depth, budget }) {
64272
+ if (isOpaqueObject({ value })) {
64273
+ return replaceOpaqueObject({ value });
64274
+ }
64275
+ if (typeof value === "string") {
64276
+ if (value.length > budget.remainingChars) {
64277
+ return TRUNCATED_VALUE;
64278
+ }
64279
+ budget.remainingChars -= value.length;
64280
+ }
64281
+ if (depth <= 0 || budget.remainingNodes <= 0) {
64282
+ return isInspectable({ value }) ? TRUNCATED_VALUE : value;
64283
+ }
64284
+ budget.remainingNodes -= 1;
64285
+ if (typeof value === "string") {
64286
+ return redactString({ text: value, budget });
64287
+ }
64288
+ if (value instanceof URLSearchParams) {
64289
+ return redactValue({ value: value.toString(), depth, budget });
64290
+ }
64291
+ if (Array.isArray(value)) {
64292
+ return redactArray({ items: value, depth, budget });
64293
+ }
64294
+ if (isPlainObject2(value)) {
64295
+ return redactObject({ record: value, depth, budget });
64296
+ }
64297
+ return value;
64298
+ }
64299
+ function isOpaqueObject({ value }) {
64300
+ return typeof value === "object" && value !== null && !Array.isArray(value) && !isPlainObject2(value) && !(value instanceof URLSearchParams);
64301
+ }
64302
+ function replaceOpaqueObject({ value }) {
64303
+ if (typeof value !== "object" || value === null || value instanceof Date) {
64304
+ return value;
64305
+ }
64306
+ if (value instanceof ArrayBuffer || ArrayBuffer.isView(value)) {
64307
+ return `[BINARY ${value.byteLength} bytes]`;
64308
+ }
64309
+ if (value instanceof Blob) {
64310
+ return `[BINARY ${value.size} bytes]`;
64311
+ }
64312
+ if (value instanceof FormData || typeof Reflect.get(value, "pipe") === "function") {
64313
+ return "[BINARY stream]";
64314
+ }
64315
+ return TRUNCATED_VALUE;
64316
+ }
64317
+ function redactArray({ items, depth, budget }) {
64318
+ const isTruncated = items.length > MAX_ARRAY_ENTRIES;
64319
+ const keptItems = isTruncated ? items.slice(0, MAX_ARRAY_ENTRIES) : items;
64320
+ let redactedItems;
64321
+ for (const [index, item] of keptItems.entries()) {
64322
+ const redactedItem = redactValue({ value: item, depth: depth - 1, budget });
64323
+ if (redactedItem !== item) {
64324
+ redactedItems ??= [...keptItems];
64325
+ redactedItems[index] = redactedItem;
64326
+ }
64327
+ }
64328
+ const result = redactedItems ?? keptItems;
64329
+ return isTruncated ? [...result, TRUNCATED_VALUE] : result;
64330
+ }
64331
+ function redactObject({ record: record2, depth, budget }) {
64332
+ const redactedEntries = /* @__PURE__ */ new Map();
64333
+ const carriesOAuthCode = OAUTH_CODE_CONTEXT_KEYS.some((contextKey) => Object.hasOwn(record2, contextKey));
64334
+ const keptKeys = [];
64335
+ let isTruncated = false;
64336
+ for (const key in record2) {
64337
+ if (!Object.hasOwn(record2, key)) {
64338
+ continue;
64339
+ }
64340
+ if (keptKeys.length >= MAX_CONTAINER_ENTRIES || key.length > budget.remainingChars) {
64341
+ isTruncated = true;
64342
+ break;
64343
+ }
64344
+ budget.remainingChars -= key.length;
64345
+ keptKeys.push(key);
64346
+ const nestedValue = record2[key];
64347
+ const isSensitiveKey = isRedactedKey({ key }) || carriesOAuthCode && key === OAUTH_CODE_KEY;
64348
+ const shouldRedact = isSensitiveKey && nestedValue != null && typeof nestedValue !== "boolean";
64349
+ if (shouldRedact) {
64350
+ budget.remainingNodes -= 1;
64351
+ }
64352
+ const redactedNestedValue = shouldRedact ? REDACTED_VALUE : redactValue({ value: nestedValue, depth: depth - 1, budget });
64353
+ if (redactedNestedValue !== nestedValue) {
64354
+ redactedEntries.set(key, redactedNestedValue);
64355
+ }
64356
+ }
64357
+ if (isTruncated) {
64358
+ const keptRecord = {};
64359
+ for (const key of keptKeys) {
64360
+ keptRecord[key] = redactedEntries.has(key) ? redactedEntries.get(key) : record2[key];
64361
+ }
64362
+ keptRecord[TRUNCATED_KEY] = TRUNCATED_VALUE;
64363
+ return keptRecord;
64364
+ }
64365
+ return redactedEntries.size === 0 ? record2 : { ...record2, ...Object.fromEntries(redactedEntries) };
64366
+ }
64367
+ function redactString({ text, budget }) {
64368
+ if (text.length > MAX_PARSED_STRING_LENGTH) {
64369
+ return TRUNCATED_VALUE;
64370
+ }
64371
+ if (!isInspectable({ value: text })) {
64372
+ return text;
64373
+ }
64374
+ const trimmedText = text.trim();
64375
+ if (trimmedText.startsWith("{") || trimmedText.startsWith("[")) {
64376
+ try {
64377
+ const parsedValue = JSON.parse(trimmedText);
64378
+ const redactedValue = redactValue({
64379
+ value: parsedValue,
64380
+ depth: MAX_REDACTION_DEPTH,
64381
+ budget
64382
+ });
64383
+ return redactedValue === parsedValue ? text : JSON.stringify(redactedValue);
64384
+ } catch {
64385
+ return REDACTED_KEY_CANDIDATE_PATTERN.test(text) ? TRUNCATED_VALUE : redactFormEncoded({ text }) ?? text;
64386
+ }
64387
+ }
64388
+ return redactFormEncoded({ text }) ?? text;
64389
+ }
64390
+ function redactFormEncoded({ text, extraRedactedKeys }) {
64391
+ if (!text.includes("=") || !REDACTED_KEY_CANDIDATE_PATTERN.test(text)) {
64392
+ return void 0;
64393
+ }
64394
+ const params = new URLSearchParams(text);
64395
+ const carriesOAuthCode = OAUTH_CODE_CONTEXT_KEYS.some((contextKey) => params.has(contextKey));
64396
+ let hasRedactedParam = false;
64397
+ for (const key of new Set(params.keys())) {
64398
+ if (isRedactedKey({ key }) || extraRedactedKeys?.has(key.toLowerCase()) || carriesOAuthCode && key === OAUTH_CODE_KEY) {
64399
+ params.set(key, REDACTED_VALUE);
64400
+ hasRedactedParam = true;
64401
+ }
64402
+ }
64403
+ return hasRedactedParam ? params.toString() : void 0;
64404
+ }
64405
+ function isRedactedKey({ key }) {
64406
+ const normalizedKey = key.toLowerCase().replace(/[_-]/g, "");
64407
+ return REDACTED_KEY_NAMES.has(normalizedKey) || REDACTED_KEY_SUFFIX_PATTERN.test(normalizedKey);
63809
64408
  }
63810
-
63811
- // ../hyperline-config/build/index.js
63812
- import "dotenv/config";
63813
- import * as stackTraceParser from "stacktrace-parser";
63814
- function coerceBoolean() {
63815
- return external_exports.any().refine((value) => ["true", "false"].includes(value), {
63816
- message: "Expected boolean"
63817
- }).transform((value) => (
63818
- // biome-ignore lint/complexity/noUselessTernary: ignore
63819
- value === "true" ? true : false
63820
- ));
64409
+ function isInspectable({ value }) {
64410
+ if (typeof value === "string") {
64411
+ return value.length > MAX_PARSED_STRING_LENGTH || /^\s*[{[]/.test(value) || value.includes("=") && REDACTED_KEY_CANDIDATE_PATTERN.test(value);
64412
+ }
64413
+ return value instanceof URLSearchParams || Array.isArray(value) || isPlainObject2(value);
63821
64414
  }
63822
- var types = {
63823
- string: external_exports.coerce.string,
63824
- number: external_exports.coerce.number,
63825
- boolean: coerceBoolean,
63826
- enum: external_exports.enum
63827
- };
63828
- function getConfig(schema, testValues) {
63829
- const validator = external_exports.object(Object.fromEntries(Object.entries(schema).map(([key, zodType]) => {
63830
- if (zodType instanceof ZodOptional) {
63831
- return [key, external_exports.string().optional()];
63832
- }
63833
- return [key, external_exports.string()];
63834
- })));
63835
- const processEnv = process.env;
63836
- const isTestMode = processEnv.NODE_ENV === "test";
63837
- const envVariables = {
63838
- ...processEnv,
63839
- ...isTestMode && testValues ? Object.fromEntries(Object.entries(testValues).map(([key, value]) => [key, String(value)])) : {}
63840
- };
63841
- const packageName = envVariables.npm_package_name;
63842
- const parseProcessEnvResult = validator.safeParse(envVariables);
63843
- if (!parseProcessEnvResult.success) {
63844
- const parsedStackTrace = stackTraceParser.parse(parseProcessEnvResult.error.stack ?? "");
63845
- const getConfigCallLine = parsedStackTrace.find((line) => {
63846
- return !line.file?.includes("hyperline-config") && (line.file?.includes("apps/") || line.file?.includes("core/") || line.file?.includes("packages/"));
63847
- });
63848
- const callerFile = getConfigCallLine?.file;
63849
- console.error(`Invalid environment variables for service \`${packageName}\`: \`${callerFile}\``);
63850
- console.error(parseProcessEnvResult.error.format());
63851
- process.exit(1);
64415
+ function isPlainObject2(value) {
64416
+ if (typeof value !== "object" || value === null) {
64417
+ return false;
63852
64418
  }
63853
- const coercion = external_exports.object(schema);
63854
- return coercion.parse(parseProcessEnvResult.data);
64419
+ const prototype = Object.getPrototypeOf(value);
64420
+ return prototype === Object.prototype || prototype === null;
63855
64421
  }
63856
64422
 
63857
- // ../hyperline-monitoring/build/config.js
63858
- var config2 = getConfig({
63859
- // config
63860
- APP_VERSION: types.string().optional(),
63861
- // Deployment environment for log tagging, when it cannot be read off
63862
- // NODE_ENV. Set only by the PDF render worker pools, which must run with
63863
- // NODE_ENV="production" to get the production React build regardless of which
63864
- // environment the pod is actually in (see core/invoicing/services/pdf/index.ts).
63865
- // Unset everywhere else, so the NODE_ENV fallback keeps current behaviour.
63866
- APP_ENV: types.string().optional(),
63867
- DD_SERVICE: types.string().optional(),
63868
- LOGGER_CONSOLE_ENABLED: types.boolean().optional(),
63869
- LOGGER_STDOUT_ENABLED: types.boolean().optional(),
63870
- NODE_ENV: types.enum(["local", "test", "staging", "sandbox", "production"]),
63871
- EVENT_LOOP_MONITORING_ENABLED: types.boolean().optional(),
63872
- MEMORY_MONITORING_ENABLED: types.boolean().optional(),
63873
- MEMORY_MONITORING_INTERVAL_MS: types.number().optional()
63874
- // secrets
63875
- }, {
63876
- APP_VERSION: void 0,
63877
- APP_ENV: void 0,
63878
- DD_SERVICE: void 0,
63879
- LOGGER_CONSOLE_ENABLED: false,
63880
- LOGGER_STDOUT_ENABLED: false,
63881
- EVENT_LOOP_MONITORING_ENABLED: false,
63882
- MEMORY_MONITORING_ENABLED: false,
63883
- MEMORY_MONITORING_INTERVAL_MS: 3e4,
63884
- NODE_ENV: "test"
63885
- });
63886
-
63887
- // ../hyperline-monitoring/build/logger/logger.js
63888
- import * as util from "node:util";
63889
- import prune2 from "json-prune";
63890
- import * as winston from "winston";
63891
-
63892
64423
  // ../hyperline-monitoring/build/logger/formatting/format.js
63893
- import prune from "json-prune";
63894
64424
  var REDACTED_HEADER_KEY_PATTERN = /authorization|authenticate|cookie|secret|token|credential|signature|jwt|api[_-]?key|access[_-]?token|refresh[_-]?token|private[_-]?key/i;
63895
64425
  function jsonFormat(info) {
63896
64426
  const prunedInfo = JSON.parse(prune(info));
@@ -63951,14 +64481,106 @@ function transformPrune(info) {
63951
64481
  });
63952
64482
  return info;
63953
64483
  }
64484
+ var MAX_AXIOS_ERROR_DEPTH = 5;
64485
+ var MAX_AXIOS_ERROR_CONTAINER_ENTRIES = 1e3;
64486
+ var MAX_AXIOS_ERROR_VISITED_NODES = 5e3;
64487
+ var REDACTED_BODY_KEYS = /* @__PURE__ */ new Set(["requestBody", "responseBody"]);
63954
64488
  function transformAxiosError(info) {
63955
- Object.entries(info).forEach(([key, value]) => {
63956
- if (typeof value === "object" && value?.name === "AxiosError") {
63957
- info[key] = formatAxiosError(value);
64489
+ let walk;
64490
+ for (const [key, value] of Object.entries(info)) {
64491
+ if (typeof value !== "object" || value === null || REDACTED_BODY_KEYS.has(key)) {
64492
+ continue;
63958
64493
  }
63959
- });
64494
+ walk ??= {
64495
+ formatted: /* @__PURE__ */ new Map(),
64496
+ remainingNodes: MAX_AXIOS_ERROR_VISITED_NODES
64497
+ };
64498
+ const formattedValue = formatNestedAxiosErrors({
64499
+ value,
64500
+ depth: MAX_AXIOS_ERROR_DEPTH,
64501
+ walk
64502
+ });
64503
+ if (formattedValue !== value) {
64504
+ info[key] = formattedValue;
64505
+ }
64506
+ }
63960
64507
  return info;
63961
64508
  }
64509
+ function formatNestedAxiosErrors({ value, depth, walk }) {
64510
+ if (typeof value !== "object" || value === null) {
64511
+ return value;
64512
+ }
64513
+ if (walk.formatted.has(value)) {
64514
+ return walk.formatted.get(value);
64515
+ }
64516
+ if (Reflect.get(value, "name") === "AxiosError") {
64517
+ const formattedError = walk.remainingNodes > 0 ? formatAxiosError(value) : summarizeAxiosError({ error: value });
64518
+ walk.remainingNodes -= 1;
64519
+ walk.formatted.set(value, formattedError);
64520
+ return formattedError;
64521
+ }
64522
+ const isWalkable = Array.isArray(value) || value instanceof Error || isPlainRecord(value);
64523
+ if (!isWalkable || depth <= 0 || walk.remainingNodes <= 0) {
64524
+ return value;
64525
+ }
64526
+ walk.formatted.set(value, "[Circular]");
64527
+ walk.remainingNodes -= 1;
64528
+ const formattedValue = formatWalkableValue({ value, depth, walk });
64529
+ walk.formatted.set(value, formattedValue);
64530
+ return formattedValue;
64531
+ }
64532
+ function summarizeAxiosError({ error: error48 }) {
64533
+ return {
64534
+ name: Reflect.get(error48, "name"),
64535
+ message: Reflect.get(error48, "message"),
64536
+ code: Reflect.get(error48, "code")
64537
+ };
64538
+ }
64539
+ function formatWalkableValue({ value, depth, walk }) {
64540
+ if (Array.isArray(value)) {
64541
+ if (value.length > MAX_AXIOS_ERROR_CONTAINER_ENTRIES) {
64542
+ return value;
64543
+ }
64544
+ let formattedItems;
64545
+ for (const [index, item] of value.entries()) {
64546
+ const formattedItem = formatNestedAxiosErrors({
64547
+ value: item,
64548
+ depth: depth - 1,
64549
+ walk
64550
+ });
64551
+ if (formattedItem !== item) {
64552
+ formattedItems ??= [...value];
64553
+ formattedItems[index] = formattedItem;
64554
+ }
64555
+ }
64556
+ return formattedItems ?? value;
64557
+ }
64558
+ const keys = Object.keys(value);
64559
+ if (keys.length > MAX_AXIOS_ERROR_CONTAINER_ENTRIES) {
64560
+ return value;
64561
+ }
64562
+ const formattedEntries = /* @__PURE__ */ new Map();
64563
+ for (const key of keys) {
64564
+ const nestedValue = Reflect.get(value, key);
64565
+ const formattedNestedValue = formatNestedAxiosErrors({
64566
+ value: nestedValue,
64567
+ depth: depth - 1,
64568
+ walk
64569
+ });
64570
+ if (formattedNestedValue !== nestedValue) {
64571
+ formattedEntries.set(key, formattedNestedValue);
64572
+ }
64573
+ }
64574
+ if (formattedEntries.size === 0) {
64575
+ return value;
64576
+ }
64577
+ return {
64578
+ ...value,
64579
+ // Error properties are not enumerable, so the spread would drop them.
64580
+ ...value instanceof Error ? { name: value.name, message: value.message, stack: value.stack } : {},
64581
+ ...Object.fromEntries(formattedEntries)
64582
+ };
64583
+ }
63962
64584
  function formatAxiosError(error48) {
63963
64585
  if (!isRecord(error48) || error48.name !== "AxiosError") {
63964
64586
  return error48;
@@ -63971,9 +64593,9 @@ function formatAxiosError(error48) {
63971
64593
  code: error48.code,
63972
64594
  request: {
63973
64595
  method: request?.method,
63974
- url: request?.url,
64596
+ url: typeof request?.url === "string" ? redactLogUrl({ url: request.url }) : request?.url,
63975
64597
  baseURL: request?.baseURL,
63976
- params: request?.params,
64598
+ params: redactLogBody({ body: request?.params }),
63977
64599
  headers: redactHeaders({ headers: request?.headers }),
63978
64600
  "axios-retry": request?.["axios-retry"]
63979
64601
  },
@@ -63981,7 +64603,7 @@ function formatAxiosError(error48) {
63981
64603
  status: response?.status,
63982
64604
  statusText: response?.statusText,
63983
64605
  headers: redactHeaders({ headers: response?.headers }),
63984
- data: response?.data
64606
+ data: redactLogBody({ body: response?.data })
63985
64607
  }
63986
64608
  };
63987
64609
  }
@@ -63994,6 +64616,10 @@ function redactHeaders({ headers }) {
63994
64616
  REDACTED_HEADER_KEY_PATTERN.test(headerKey) ? "<redacted>" : headerValue
63995
64617
  ]));
63996
64618
  }
64619
+ function isPlainRecord(value) {
64620
+ const prototype = Object.getPrototypeOf(value);
64621
+ return prototype === Object.prototype || prototype === null;
64622
+ }
63997
64623
  function isRecord(value) {
63998
64624
  return typeof value === "object" && value !== null && !Array.isArray(value);
63999
64625
  }
@@ -64023,7 +64649,7 @@ function logHttpResponse(logger2, response, responseTime, extra) {
64023
64649
  const responseMetadata = {
64024
64650
  statusCode,
64025
64651
  responseTime,
64026
- responseBody,
64652
+ responseBody: redactLogBody({ body: responseBody }),
64027
64653
  // Redacted so secrets (authorization/cookie/token/…) never reach the logs
64028
64654
  // while diagnostic headers (e.g. rate-limit headers on a 429) stay visible.
64029
64655
  responseHeaders: responseHeaders === void 0 ? void 0 : redactHeaders({ headers: responseHeaders })
@@ -64036,14 +64662,15 @@ function logHttpResponse(logger2, response, responseTime, extra) {
64036
64662
  }
64037
64663
  function transform2(request) {
64038
64664
  const method = request.method.toUpperCase();
64039
- const message = `${method} ${request.originalUrl}`;
64665
+ const originalUrl = redactLogUrl({ url: request.originalUrl });
64666
+ const message = `${method} ${originalUrl}`;
64040
64667
  const metadata = {};
64041
64668
  metadata.method = method;
64042
- metadata.url = request.url;
64043
- metadata.path = request.path;
64669
+ metadata.url = redactLogUrl({ url: request.url });
64670
+ metadata.path = redactLogUrl({ url: request.path });
64044
64671
  metadata.hostname = request.hostname;
64045
- metadata.originalUrl = request.originalUrl;
64046
- metadata.requestBody = request.body && typeof request.body === "object" && "apiKey" in request.body ? { ...request.body, apiKey: "<redacted>" } : request.body;
64672
+ metadata.originalUrl = originalUrl;
64673
+ metadata.requestBody = redactLogBody({ body: request.body });
64047
64674
  metadata.routePath = transformUrlIntoRoutePath(request);
64048
64675
  metadata.apiKeyEnd = request.headers["authorization"]?.slice(-6);
64049
64676
  return { message, metadata };
@@ -64090,7 +64717,16 @@ function buildLoggerFactory({ config: config4, context }) {
64090
64717
  const internalLogger = winston.createLogger({
64091
64718
  transports: transports2,
64092
64719
  defaultMeta,
64093
- format: winston.format.combine(winston.format.splat(), winston.format(addMetadata({ getCorrelationId, getExecutionContext }))(), winston.format(transformErrorEnrich)({ depth: 5 }), winston.format(transformPrune)(), winston.format(transformAxiosError)(), winston.format.timestamp()),
64720
+ format: winston.format.combine(
64721
+ winston.format.splat(),
64722
+ winston.format(addMetadata({ getCorrelationId, getExecutionContext }))(),
64723
+ // Before pruning: json-prune would otherwise serialize a binary
64724
+ // `response.data` byte by byte before it is summarised (#6006).
64725
+ winston.format(transformAxiosError)(),
64726
+ winston.format(transformErrorEnrich)({ depth: 5 }),
64727
+ winston.format(transformPrune)(),
64728
+ winston.format.timestamp()
64729
+ ),
64094
64730
  exitOnError: false
64095
64731
  });
64096
64732
  function createLogger3({ serviceName }) {
@@ -66440,7 +67076,12 @@ var import_shared4 = __toESM(require_shared(), 1);
66440
67076
  var MILLISECONDS_PER_HOUR = 60 * 60 * 1e3;
66441
67077
  var MILLISECONDS_PER_DAY = 24 * MILLISECONDS_PER_HOUR;
66442
67078
  var LAST_MILLISECOND_OF_DAY = MILLISECONDS_PER_DAY - 1;
66443
- var dateRealignmentModeSchema = external_exports.enum(["utc_midnight_import", "dst_hour_drift", "month_start_drift"]).default("utc_midnight_import");
67079
+ var dateRealignmentModeSchema = external_exports.enum([
67080
+ "utc_midnight_import",
67081
+ "dst_hour_drift",
67082
+ "month_start_drift",
67083
+ "manual_phase_end_midnight"
67084
+ ]).default("utc_midnight_import");
66444
67085
  var DST_HOUR_SHIFT_BY_LOCAL_MILLISECOND_OF_DAY = /* @__PURE__ */ new Map([
66445
67086
  [23 * MILLISECONDS_PER_HOUR, MILLISECONDS_PER_HOUR],
66446
67087
  [LAST_MILLISECOND_OF_DAY - MILLISECONDS_PER_HOUR, MILLISECONDS_PER_HOUR],
@@ -66448,8 +67089,16 @@ var DST_HOUR_SHIFT_BY_LOCAL_MILLISECOND_OF_DAY = /* @__PURE__ */ new Map([
66448
67089
  [MILLISECONDS_PER_HOUR - 1, -MILLISECONDS_PER_HOUR]
66449
67090
  ]);
66450
67091
 
67092
+ // ../hyperline-lib/build/utils/overviewPeriods.js
67093
+ var OverviewPeriodSchema = external_exports.enum([
67094
+ "this_month",
67095
+ "last_month",
67096
+ "last_3_months"
67097
+ ]);
67098
+
66451
67099
  // ../hyperline-lib/build/utils/api/filterBuilder.js
66452
- var baseAuthorizedOperators = ["not", "isNull", "isNotNull"];
67100
+ var nullAuthorizedOperators = ["isNull", "isNotNull"];
67101
+ var baseAuthorizedOperators = ["not", ...nullAuthorizedOperators];
66453
67102
  var booleanAuthorizedOperators = [
66454
67103
  ...baseAuthorizedOperators,
66455
67104
  "equals"
@@ -66478,6 +67127,7 @@ var authorizedOperators = [
66478
67127
  ...arrayAuthorizedOperators,
66479
67128
  ...mapAuthorizedOperators
66480
67129
  ];
67130
+ var NullFilterValueSchema = BooleanSchema.or(external_exports.literal("")).optional();
66481
67131
 
66482
67132
  // ../hyperline-lib/build/http/dto/state.js
66483
67133
  var StateSchema = external_exports.enum(usStates).openapi({
@@ -66515,150 +67165,6 @@ var isAxiosError = axios.isAxiosError;
66515
67165
  // ../hyperline-lib/build/httpClient/httpClient.js
66516
67166
  import axios2 from "axios";
66517
67167
  import axiosRetry, { isNetworkOrIdempotentRequestError, retryAfter } from "axios-retry";
66518
-
66519
- // ../hyperline-lib/build/httpClient/logRedaction.js
66520
- var REDACTED_KEY_NAMES = /* @__PURE__ */ new Set([
66521
- "accesstoken",
66522
- "apikey",
66523
- "apitoken",
66524
- "assertion",
66525
- "authtoken",
66526
- "clientassertion",
66527
- "codeverifier",
66528
- "credentials",
66529
- "idtoken",
66530
- "privatekey",
66531
- "refreshtoken",
66532
- "sessiontoken",
66533
- "token"
66534
- ]);
66535
- var REDACTED_KEY_SUFFIX_PATTERN = /(secret|password)$/;
66536
- var REDACTED_KEY_CANDIDATE_PATTERN = /token|key|secret|password|assertion|verifier|credentials/i;
66537
- var REDACTED_VALUE = "<redacted>";
66538
- var MAX_REDACTION_DEPTH = 10;
66539
- var MAX_PARSED_STRING_LENGTH = 16384;
66540
- var MAX_VISITED_NODES = 1e3;
66541
- var MAX_CONTAINER_ENTRIES = MAX_VISITED_NODES;
66542
- function redactLogBody({ body }) {
66543
- return redactValue({
66544
- value: body,
66545
- depth: MAX_REDACTION_DEPTH,
66546
- budget: { remainingNodes: MAX_VISITED_NODES }
66547
- });
66548
- }
66549
- function redactLogUrl({ url: url2 }) {
66550
- const queryIndex = url2.indexOf("?");
66551
- if (queryIndex === -1 || url2.length > MAX_PARSED_STRING_LENGTH) {
66552
- return url2;
66553
- }
66554
- const redactedQuery = redactFormEncoded({ text: url2.slice(queryIndex + 1) });
66555
- return redactedQuery === void 0 ? url2 : `${url2.slice(0, queryIndex)}?${redactedQuery}`;
66556
- }
66557
- function redactValue({ value, depth, budget }) {
66558
- if (depth <= 0 || budget.remainingNodes <= 0) {
66559
- return value;
66560
- }
66561
- budget.remainingNodes -= 1;
66562
- if (typeof value === "string") {
66563
- return redactString({ text: value, budget });
66564
- }
66565
- if (value instanceof URLSearchParams) {
66566
- return redactFormEncoded({ text: value.toString() }) ?? value;
66567
- }
66568
- if (Array.isArray(value)) {
66569
- return redactArray({ items: value, depth, budget });
66570
- }
66571
- if (isPlainObject2(value)) {
66572
- return redactObject({ record: value, depth, budget });
66573
- }
66574
- return value;
66575
- }
66576
- function redactArray({ items, depth, budget }) {
66577
- if (items.length > MAX_CONTAINER_ENTRIES) {
66578
- return items;
66579
- }
66580
- let redactedItems;
66581
- for (const [index, item] of items.entries()) {
66582
- if (budget.remainingNodes <= 0) {
66583
- break;
66584
- }
66585
- const redactedItem = redactValue({ value: item, depth: depth - 1, budget });
66586
- if (redactedItem !== item) {
66587
- redactedItems ??= [...items];
66588
- redactedItems[index] = redactedItem;
66589
- }
66590
- }
66591
- return redactedItems ?? items;
66592
- }
66593
- function redactObject({ record: record2, depth, budget }) {
66594
- const redactedEntries = /* @__PURE__ */ new Map();
66595
- let entryCount = 0;
66596
- for (const key in record2) {
66597
- if (!Object.hasOwn(record2, key)) {
66598
- continue;
66599
- }
66600
- entryCount += 1;
66601
- if (entryCount > MAX_CONTAINER_ENTRIES) {
66602
- return record2;
66603
- }
66604
- if (budget.remainingNodes <= 0) {
66605
- break;
66606
- }
66607
- const nestedValue = record2[key];
66608
- const redactedNestedValue = isRedactedKey({ key }) && nestedValue != null ? REDACTED_VALUE : redactValue({ value: nestedValue, depth: depth - 1, budget });
66609
- if (redactedNestedValue !== nestedValue) {
66610
- redactedEntries.set(key, redactedNestedValue);
66611
- }
66612
- }
66613
- return redactedEntries.size === 0 ? record2 : { ...record2, ...Object.fromEntries(redactedEntries) };
66614
- }
66615
- function redactString({ text, budget }) {
66616
- if (text.length > MAX_PARSED_STRING_LENGTH) {
66617
- return text;
66618
- }
66619
- const trimmedText = text.trim();
66620
- if (trimmedText.startsWith("{") || trimmedText.startsWith("[")) {
66621
- try {
66622
- const parsedValue = JSON.parse(trimmedText);
66623
- const redactedValue = redactValue({
66624
- value: parsedValue,
66625
- depth: MAX_REDACTION_DEPTH,
66626
- budget
66627
- });
66628
- return redactedValue === parsedValue ? text : JSON.stringify(redactedValue);
66629
- } catch {
66630
- return text;
66631
- }
66632
- }
66633
- return redactFormEncoded({ text }) ?? text;
66634
- }
66635
- function redactFormEncoded({ text }) {
66636
- if (!text.includes("=") || !REDACTED_KEY_CANDIDATE_PATTERN.test(text)) {
66637
- return void 0;
66638
- }
66639
- const params = new URLSearchParams(text);
66640
- let hasRedactedParam = false;
66641
- for (const key of new Set(params.keys())) {
66642
- if (isRedactedKey({ key })) {
66643
- params.set(key, REDACTED_VALUE);
66644
- hasRedactedParam = true;
66645
- }
66646
- }
66647
- return hasRedactedParam ? params.toString() : void 0;
66648
- }
66649
- function isRedactedKey({ key }) {
66650
- const normalizedKey = key.toLowerCase().replace(/[_-]/g, "");
66651
- return REDACTED_KEY_NAMES.has(normalizedKey) || REDACTED_KEY_SUFFIX_PATTERN.test(normalizedKey);
66652
- }
66653
- function isPlainObject2(value) {
66654
- if (typeof value !== "object" || value === null) {
66655
- return false;
66656
- }
66657
- const prototype = Object.getPrototypeOf(value);
66658
- return prototype === Object.prototype || prototype === null;
66659
- }
66660
-
66661
- // ../hyperline-lib/build/httpClient/httpClient.js
66662
67168
  import { AxiosError } from "axios";
66663
67169
  var recommendedRetryConfig = {
66664
67170
  retries: 3,
@@ -66726,14 +67232,14 @@ function isTooManyRequestsError(error48) {
66726
67232
  return error48.response?.status === 429;
66727
67233
  }
66728
67234
  var toLogRequest = (config4) => {
66729
- const url2 = redactLogUrl({ url: config4.url ?? "" });
67235
+ const url2 = config4.url ?? "";
66730
67236
  return {
66731
67237
  method: config4.method ?? "",
66732
67238
  url: url2,
66733
67239
  path: url2,
66734
67240
  hostname: config4.baseURL ?? "",
66735
67241
  originalUrl: `${config4.baseURL ?? ""}${url2}`,
66736
- body: redactLogBody({ body: config4.data }),
67242
+ body: config4.data,
66737
67243
  headers: {}
66738
67244
  };
66739
67245
  };
@@ -66753,9 +67259,13 @@ import multer2 from "multer";
66753
67259
  // ../hyperline-lib/build/httpRouter/file.js
66754
67260
  import helmet from "helmet";
66755
67261
 
66756
- // ../hyperline-lib/build/publicApi/auth/index.js
67262
+ // ../hyperline-lib/build/publicApi/auth/apiKey.js
66757
67263
  import { randomBytes as randomBytes2, scryptSync } from "node:crypto";
66758
67264
 
67265
+ // ../hyperline-lib/build/publicApi/auth/apiKeyHashCache.js
67266
+ import { createHash as createHash4 } from "node:crypto";
67267
+ var TTL_MS = 5 * 6e4;
67268
+
66759
67269
  // ../hyperline-mcp/build/requestBuilder.js
66760
67270
  function buildRequestConfig(path2, args, method, queryParamKeys = []) {
66761
67271
  const { url: url2, usedKeys } = replacePathParams(path2, args);