@hyperline/cli 0.1.0-build.1.6640cc4 → 0.1.0-build.1.6671688

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -34985,10 +34985,10 @@ var require_shared = __commonJS({
34985
34985
  ZodId: () => ZodId,
34986
34986
  ZodTranslationsSchemaFn: () => ZodTranslationsSchemaFn
34987
34987
  });
34988
- var import_zod22 = require_lib();
34988
+ var import_zod24 = require_lib();
34989
34989
  var countryIds2 = ["all", ...countries.map(({ id }) => id)];
34990
- var ZodId = import_zod22.z.enum(countryIds2);
34991
- var ZodTranslationsSchemaFn = (schema) => import_zod22.z.record(import_zod22.z.string(), schema.optional());
34990
+ var ZodId = import_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_zod23 = require_lib();
36291
- var ZodCurrencyId = import_zod23.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_zod23.z.string().or(import_zod23.z.number().transform((number4) => number4)).transform((number4) => number4);
36295
- var ZodNumberCurrencyPositiveValue = import_zod23.z.number().min(0).transform((number4) => number4).transform((number4) => number4);
36296
- var ZodNumberCurrencyPositiveValueExcludingZero = import_zod23.z.number().gt(0).transform((number4) => number4).transform((number4) => number4);
36297
- var ZodCurrencyMap = import_zod23.z.record(ZodNumberCurrency).refine(
36294
+ var ZodNumberCurrency = import_zod25.z.string().or(import_zod25.z.number().transform((number4) => number4)).transform((number4) => number4);
36295
+ var ZodNumberCurrencyPositiveValue = import_zod25.z.number().min(0).transform((number4) => number4).transform((number4) => number4);
36296
+ var ZodNumberCurrencyPositiveValueExcludingZero = import_zod25.z.number().gt(0).transform((number4) => number4).transform((number4) => number4);
36297
+ var ZodCurrencyMap = import_zod25.z.record(ZodNumberCurrency).refine(
36298
36298
  (data) => Object.keys(data).every((key) => ZodCurrencyId.safeParse(key).success),
36299
36299
  {
36300
36300
  message: "Invalid currency key.",
@@ -38165,7 +38165,7 @@ Examples:
38165
38165
  // build/commands/generated/accounting-journal-entries.js
38166
38166
  function registerAccounting_Journal_EntriesCommands(parent) {
38167
38167
  const resource = parent.command("accounting-journal-entries").description("Manage accounting > journal entries");
38168
- resource.command("list-journal-entries").description(`List accounting journal entries with optional filters.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--entry-number <value>", `Filter by journal entry number.`).option("--status <value>", `Filter by journal entry status.`).option("--origin <value>", `Filter by automatic or manual origin.`).option("--ledger-id <value>", `Filter by ledger identifier.`).option("--invoicing-entity-id <value>", `Filter by invoicing entity identifier.`).option("--invoice-id <value>", `Filter by invoice identifier.`).option("--customer-id <value>", `Filter by customer identifier.`).option("--subscription-id <value>", `Filter by subscription identifier.`).option("--transaction-id <value>", `Filter by transaction identifier.`).option("--ledger-account-id <value>", `Filter entries containing a ledger account.`).option("--rule-id <value>", `Filter entries containing an accounting rule.`).option("--search <value>", `Search entry number, description, customer, or invoice.`).option("--year <number>", `Filter by entry year.`).option("--quarter <number>", `Filter by entry quarter.`).addHelpText("after", `
38168
+ resource.command("list-journal-entries").description(`List accounting journal entries with optional filters.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--entry-number <value>", `Filter by journal entry number.`).option("--status <value>", `Filter by journal entry status.`).option("--origin <value>", `Filter by automatic or manual origin.`).option("--ledger-id <value>", `Filter by ledger identifier.`).option("--invoicing-entity-id <value>", `Filter by invoicing entity identifier.`).option("--invoice-id <value>", `Filter by invoice identifier.`).option("--customer-id <value>", `Filter by customer identifier.`).option("--subscription-id <value>", `Filter by subscription identifier.`).option("--transaction-id <value>", `Filter by transaction identifier.`).option("--ledger-account-id <value>", `Filter entries containing a ledger account.`).option("--rule-id <value>", `Filter entries containing an accounting rule.`).option("--search <value>", `Search entry number, description, amount, invoice number or ID, customer name or ID, or subscription ID.`).option("--year <number>", `Filter by entry year.`).option("--quarter <number>", `Filter by entry quarter.`).addHelpText("after", `
38169
38169
  Examples:
38170
38170
  hyperline accounting-journal-entries list-journal-entries
38171
38171
  hyperline accounting-journal-entries list-journal-entries --take <take> --entry-number <entry_number>`).action(async (opts) => {
@@ -38409,9 +38409,10 @@ Examples:
38409
38409
  queryParamKeys: ["invoicing_entity_id"]
38410
38410
  });
38411
38411
  });
38412
- resource.command("create-ledger").description(`Create an accounting ledger for an invoicing entity.`).requiredOption("--invoicing-entity-id <value>", `Identifier of the invoicing entity that owns the ledger.`).requiredOption("--name <value>", `Display name of the ledger.`).requiredOption("--code <value>", `Optional accounting code of the ledger.`).requiredOption("--description <value>", `Optional description of the ledger.`).requiredOption("--type <value>", `Type of ledger.`).requiredOption("--currency <value>", `ISO 4217 currency used by the ledger.`).requiredOption("--entry-number-pattern <value>", `Entry numbering pattern containing \`{number}\`.`).requiredOption("--is-primary", `Whether this is the primary ledger for the invoicing entity.`).requiredOption("--is-inactive", `Whether the ledger is inactive.`).addHelpText("after", `
38412
+ resource.command("create-ledger").description(`Create an accounting ledger for an invoicing entity.`).requiredOption("--invoicing-entity-id <value>", `Identifier of the invoicing entity that owns the ledger.`).requiredOption("--name <value>", `Display name of the ledger.`).requiredOption("--code <value>", `Optional accounting code of the ledger.`).requiredOption("--description <value>", `Optional description of the ledger.`).requiredOption("--type <value>", `Type of ledger.`).requiredOption("--currency <value>", `ISO 4217 currency used by the ledger.`).option("--fiscal-year-end-month <number>", `Last month of the ledger's fiscal year, from 1 (January) to 12 (December). Reports split profit between past fiscal years and the current one from it. Defaults to 12. It cannot be changed after creation.`).requiredOption("--entry-number-pattern <value>", `Entry numbering pattern containing \`{number}\`.`).requiredOption("--is-primary", `Whether this is the primary ledger for the invoicing entity.`).requiredOption("--is-inactive", `Whether the ledger is inactive.`).addHelpText("after", `
38413
38413
  Examples:
38414
38414
  hyperline accounting-ledgers create-ledger --invoicing-entity-id <invoicing_entity_id> --name <name> --code <code> --description <description> --type <type> --currency <currency> --entry-number-pattern <entry_number_pattern> --is-primary --is-inactive
38415
+ hyperline accounting-ledgers create-ledger --invoicing-entity-id <invoicing_entity_id> --name <name> --code <code> --description <description> --type <type> --currency <currency> --entry-number-pattern <entry_number_pattern> --is-primary --is-inactive --fiscal-year-end-month <fiscal_year_end_month>
38415
38416
  hyperline accounting-ledgers create-ledger --invoicing-entity-id <invoicing_entity_id> --name <name> --code <code> --description <description> --type <type> --currency <currency> --entry-number-pattern <entry_number_pattern> --is-primary --is-inactive --output json`).action(async (opts) => {
38416
38417
  const ctx = resource.parent?.opts()._ctx;
38417
38418
  if (!ctx) {
@@ -38433,6 +38434,8 @@ Examples:
38433
38434
  args.currency = opts.currency;
38434
38435
  if (opts.entryNumberPattern !== void 0)
38435
38436
  args.entry_number_pattern = opts.entryNumberPattern;
38437
+ if (opts.fiscalYearEndMonth !== void 0)
38438
+ args.fiscal_year_end_month = Number(opts.fiscalYearEndMonth);
38436
38439
  if (opts.isPrimary !== void 0)
38437
38440
  args.is_primary = true;
38438
38441
  if (opts.isInactive !== void 0)
@@ -38504,6 +38507,94 @@ Examples:
38504
38507
  queryParamKeys: []
38505
38508
  });
38506
38509
  });
38510
+ resource.command("get-ledger-close-state").description(`Retrieve the last closed month of a ledger and the latest month that can be closed.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
38511
+ Examples:
38512
+ hyperline accounting-ledgers get-ledger-close-state --id <id>`).action(async (opts) => {
38513
+ const ctx = resource.parent?.opts()._ctx;
38514
+ if (!ctx) {
38515
+ process.stderr.write("Error: Not authenticated\n");
38516
+ process.exit(1);
38517
+ }
38518
+ const args = {};
38519
+ if (opts.id !== void 0)
38520
+ args.id = opts.id;
38521
+ await ctx.execute({
38522
+ method: "GET",
38523
+ path: "/v1/accounting/ledgers/{id}/close",
38524
+ args,
38525
+ queryParamKeys: []
38526
+ });
38527
+ });
38528
+ resource.command("list-ledger-close-events").description(`List the closes and reopens of a ledger, newest first, with who did them and why.`).requiredOption("--id <value>", `id parameter`).option("--take <number>", `take`).option("--skip <number>", `skip`).addHelpText("after", `
38529
+ Examples:
38530
+ hyperline accounting-ledgers list-ledger-close-events --id <id>
38531
+ hyperline accounting-ledgers list-ledger-close-events --id <id> --take <take>`).action(async (opts) => {
38532
+ const ctx = resource.parent?.opts()._ctx;
38533
+ if (!ctx) {
38534
+ process.stderr.write("Error: Not authenticated\n");
38535
+ process.exit(1);
38536
+ }
38537
+ const args = {};
38538
+ if (opts.id !== void 0)
38539
+ args.id = opts.id;
38540
+ if (opts.take !== void 0)
38541
+ args.take = Number(opts.take);
38542
+ if (opts.skip !== void 0)
38543
+ args.skip = Number(opts.skip);
38544
+ await ctx.execute({
38545
+ method: "GET",
38546
+ path: "/v1/accounting/ledgers/{id}/close-events",
38547
+ args,
38548
+ queryParamKeys: ["take", "skip"]
38549
+ });
38550
+ });
38551
+ resource.command("close-ledger-period").description(`Close every month of a ledger through an ended month, after posting the revenue recognition due by its end; a user token needs the accounting_close permission.`).requiredOption("--id <value>", `id parameter`).requiredOption("--through-month <value>", `Last month to close, formatted YYYY-MM: an ended month after the last closed month. Every earlier month is closed too.`).option("--reason <value>", `Why the months are closed, 1 to 500 characters.`).addHelpText("after", `
38552
+ Examples:
38553
+ hyperline accounting-ledgers close-ledger-period --id <id> --through-month <through_month>
38554
+ hyperline accounting-ledgers close-ledger-period --id <id> --through-month <through_month> --reason <reason>
38555
+ hyperline accounting-ledgers close-ledger-period --id <id> --through-month <through_month> --output json`).action(async (opts) => {
38556
+ const ctx = resource.parent?.opts()._ctx;
38557
+ if (!ctx) {
38558
+ process.stderr.write("Error: Not authenticated\n");
38559
+ process.exit(1);
38560
+ }
38561
+ const args = {};
38562
+ if (opts.id !== void 0)
38563
+ args.id = opts.id;
38564
+ if (opts.throughMonth !== void 0)
38565
+ args.through_month = opts.throughMonth;
38566
+ if (opts.reason !== void 0)
38567
+ args.reason = opts.reason;
38568
+ await ctx.execute({
38569
+ method: "POST",
38570
+ path: "/v1/accounting/ledgers/{id}/close",
38571
+ args,
38572
+ queryParamKeys: []
38573
+ });
38574
+ });
38575
+ resource.command("reopen-ledger-period").description(`Reopen a closed month of a ledger and every later month, with a mandatory reason; a user token needs the accounting_close permission.`).requiredOption("--id <value>", `id parameter`).requiredOption("--from-month <value>", `First month to reopen, formatted YYYY-MM: a closed month. Every later month is reopened too.`).requiredOption("--reason <value>", `Why the months are reopened, 1 to 500 characters.`).addHelpText("after", `
38576
+ Examples:
38577
+ hyperline accounting-ledgers reopen-ledger-period --id <id> --from-month <from_month> --reason <reason>
38578
+ hyperline accounting-ledgers reopen-ledger-period --id <id> --from-month <from_month> --reason <reason> --output json`).action(async (opts) => {
38579
+ const ctx = resource.parent?.opts()._ctx;
38580
+ if (!ctx) {
38581
+ process.stderr.write("Error: Not authenticated\n");
38582
+ process.exit(1);
38583
+ }
38584
+ const args = {};
38585
+ if (opts.id !== void 0)
38586
+ args.id = opts.id;
38587
+ if (opts.fromMonth !== void 0)
38588
+ args.from_month = opts.fromMonth;
38589
+ if (opts.reason !== void 0)
38590
+ args.reason = opts.reason;
38591
+ await ctx.execute({
38592
+ method: "POST",
38593
+ path: "/v1/accounting/ledgers/{id}/reopen",
38594
+ args,
38595
+ queryParamKeys: []
38596
+ });
38597
+ });
38507
38598
  }
38508
38599
 
38509
38600
  // build/commands/generated/accounting-reports.js
@@ -38864,7 +38955,7 @@ Examples:
38864
38955
  // build/commands/generated/accounting-rules.js
38865
38956
  function registerAccounting_RulesCommands(parent) {
38866
38957
  const resource = parent.command("accounting-rules").description("Manage accounting > rules");
38867
- resource.command("list").description(`Retrieve existing accounting rules with optional filtering.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--ledger-id <value>", `ledger_id`).option("--ledger-id.not <value>", `ledger_id__not`).option("--ledger-id.is-null <value>", `ledger_id__isNull`).option("--ledger-id.is-not-null <value>", `ledger_id__isNotNull`).option("--ledger-id.equals <value>", `ledger_id__equals`).option("--ledger-id.contains <value>", `ledger_id__contains`).option("--ledger-id.starts-with <value>", `ledger_id__startsWith`).option("--ledger-id.end-with <value>", `ledger_id__endWith`).option("--category <value>", `category`).option("--category.not <value>", `category__not`).option("--category.is-null <value>", `category__isNull`).option("--category.is-not-null <value>", `category__isNotNull`).option("--category.equals <value>", `category__equals`).option("--category.contains <value>", `category__contains`).option("--category.starts-with <value>", `category__startsWith`).option("--category.end-with <value>", `category__endWith`).addHelpText("after", `
38958
+ resource.command("list").description(`Retrieve existing accounting rules with optional filtering.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--ledger-id <value>", `ledger_id`).option("--ledger-id.not <value>", `ledger_id__not`).option("--ledger-id.equals <value>", `ledger_id__equals`).option("--ledger-id.contains <value>", `ledger_id__contains`).option("--ledger-id.starts-with <value>", `ledger_id__startsWith`).option("--ledger-id.end-with <value>", `ledger_id__endWith`).option("--category <value>", `category`).option("--category.not <value>", `category__not`).option("--category.equals <value>", `category__equals`).option("--category.contains <value>", `category__contains`).option("--category.starts-with <value>", `category__startsWith`).option("--category.end-with <value>", `category__endWith`).addHelpText("after", `
38868
38959
  Examples:
38869
38960
  hyperline accounting-rules list
38870
38961
  hyperline accounting-rules list --take <take> --ledger-id <ledger_id>`).action(async (opts) => {
@@ -38878,10 +38969,6 @@ Examples:
38878
38969
  args.ledger_id = opts.ledgerId;
38879
38970
  if (opts["ledgerId.not"] !== void 0)
38880
38971
  args.ledger_id__not = opts["ledgerId.not"];
38881
- if (opts["ledgerId.isNull"] !== void 0)
38882
- args.ledger_id__isNull = opts["ledgerId.isNull"];
38883
- if (opts["ledgerId.isNotNull"] !== void 0)
38884
- args.ledger_id__isNotNull = opts["ledgerId.isNotNull"];
38885
38972
  if (opts["ledgerId.equals"] !== void 0)
38886
38973
  args.ledger_id__equals = opts["ledgerId.equals"];
38887
38974
  if (opts["ledgerId.contains"] !== void 0)
@@ -38894,10 +38981,6 @@ Examples:
38894
38981
  args.category = opts.category;
38895
38982
  if (opts["category.not"] !== void 0)
38896
38983
  args.category__not = opts["category.not"];
38897
- if (opts["category.isNull"] !== void 0)
38898
- args.category__isNull = opts["category.isNull"];
38899
- if (opts["category.isNotNull"] !== void 0)
38900
- args.category__isNotNull = opts["category.isNotNull"];
38901
38984
  if (opts["category.equals"] !== void 0)
38902
38985
  args.category__equals = opts["category.equals"];
38903
38986
  if (opts["category.contains"] !== void 0)
@@ -38919,16 +39002,12 @@ Examples:
38919
39002
  "skip",
38920
39003
  "ledger_id",
38921
39004
  "ledger_id__not",
38922
- "ledger_id__isNull",
38923
- "ledger_id__isNotNull",
38924
39005
  "ledger_id__equals",
38925
39006
  "ledger_id__contains",
38926
39007
  "ledger_id__startsWith",
38927
39008
  "ledger_id__endWith",
38928
39009
  "category",
38929
39010
  "category__not",
38930
- "category__isNull",
38931
- "category__isNotNull",
38932
39011
  "category__equals",
38933
39012
  "category__contains",
38934
39013
  "category__startsWith",
@@ -40508,7 +40587,7 @@ Examples:
40508
40587
  // build/commands/generated/ai-monitoring.js
40509
40588
  function registerAi_MonitoringCommands(parent) {
40510
40589
  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", `
40590
+ 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
40591
  Examples:
40513
40592
  hyperline ai-monitoring list-monitoring-analyses
40514
40593
  hyperline ai-monitoring list-monitoring-analyses --limit <limit> --cursor <cursor>`).action(async (opts) => {
@@ -40524,6 +40603,8 @@ Examples:
40524
40603
  args.include_total = opts.includeTotal;
40525
40604
  if (opts.customerId !== void 0)
40526
40605
  args.customer_id = opts.customerId;
40606
+ if (opts["customerId.in"] !== void 0)
40607
+ args.customer_id__in = opts["customerId.in"];
40527
40608
  if (opts.status !== void 0)
40528
40609
  args.status = opts.status;
40529
40610
  if (opts["createdAt.gte"] !== void 0)
@@ -40541,6 +40622,7 @@ Examples:
40541
40622
  "cursor",
40542
40623
  "include_total",
40543
40624
  "customer_id",
40625
+ "customer_id__in",
40544
40626
  "status",
40545
40627
  "created_at__gte",
40546
40628
  "created_at__lte"
@@ -40660,6 +40742,84 @@ Examples:
40660
40742
  });
40661
40743
  }
40662
40744
 
40745
+ // build/commands/generated/catalog.js
40746
+ function registerCatalogCommands(parent) {
40747
+ const resource = parent.command("catalog").description("Manage catalog");
40748
+ 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", `
40749
+ Examples:
40750
+ hyperline catalog list-catalog-versions`).action(async (_opts) => {
40751
+ const ctx = resource.parent?.opts()._ctx;
40752
+ if (!ctx) {
40753
+ process.stderr.write("Error: Not authenticated\n");
40754
+ process.exit(1);
40755
+ }
40756
+ const args = {};
40757
+ await ctx.execute({
40758
+ method: "GET",
40759
+ path: "/v1/catalog/versions",
40760
+ args,
40761
+ queryParamKeys: []
40762
+ });
40763
+ });
40764
+ resource.command("get-catalog-draft").description(`Get the pending product catalog draft (null when there is none).`).addHelpText("after", `
40765
+ Examples:
40766
+ hyperline catalog get-catalog-draft`).action(async (_opts) => {
40767
+ const ctx = resource.parent?.opts()._ctx;
40768
+ if (!ctx) {
40769
+ process.stderr.write("Error: Not authenticated\n");
40770
+ process.exit(1);
40771
+ }
40772
+ const args = {};
40773
+ await ctx.execute({
40774
+ method: "GET",
40775
+ path: "/v1/catalog/versions/draft",
40776
+ args,
40777
+ queryParamKeys: []
40778
+ });
40779
+ });
40780
+ resource.command("publish-catalog-draft").description(`Publish the pending product catalog draft: its changes become the live catalog.`).addHelpText("after", `
40781
+ Examples:
40782
+ hyperline catalog publish-catalog-draft
40783
+ hyperline catalog publish-catalog-draft --output json`).action(async (_opts) => {
40784
+ const ctx = resource.parent?.opts()._ctx;
40785
+ if (!ctx) {
40786
+ process.stderr.write("Error: Not authenticated\n");
40787
+ process.exit(1);
40788
+ }
40789
+ const args = {};
40790
+ await ctx.execute({
40791
+ method: "POST",
40792
+ path: "/v1/catalog/versions/draft/publish",
40793
+ args,
40794
+ queryParamKeys: []
40795
+ });
40796
+ });
40797
+ resource.command("discard-catalog-draft").description(`Discard the pending product catalog draft without publishing it.`).option("--yes", "Skip confirmation").addHelpText("after", `
40798
+ Examples:
40799
+ hyperline catalog discard-catalog-draft
40800
+ hyperline catalog discard-catalog-draft --output json`).action(async (opts) => {
40801
+ const ctx = resource.parent?.opts()._ctx;
40802
+ if (!ctx) {
40803
+ process.stderr.write("Error: Not authenticated\n");
40804
+ process.exit(1);
40805
+ }
40806
+ const args = {};
40807
+ if (!opts.yes) {
40808
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
40809
+ if (!confirmed) {
40810
+ process.stdout.write("Aborted.\n");
40811
+ return;
40812
+ }
40813
+ }
40814
+ await ctx.execute({
40815
+ method: "DELETE",
40816
+ path: "/v1/catalog/versions/draft",
40817
+ args,
40818
+ queryParamKeys: []
40819
+ });
40820
+ });
40821
+ }
40822
+
40663
40823
  // build/commands/generated/companies.js
40664
40824
  function registerCompaniesCommands(parent) {
40665
40825
  const resource = parent.command("companies").description("Manage companies");
@@ -40726,7 +40886,7 @@ Examples:
40726
40886
  queryParamKeys: ["take", "skip"]
40727
40887
  });
40728
40888
  });
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", `
40889
+ 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
40890
  Examples:
40731
40891
  hyperline coupons create --name <name> --type <type>
40732
40892
  hyperline coupons create --name <name> --type <type> --description <description> --expiration-date <expiration_date>
@@ -40743,6 +40903,8 @@ Examples:
40743
40903
  args.description = opts.description;
40744
40904
  if (opts.expirationDate !== void 0)
40745
40905
  args.expiration_date = opts.expirationDate;
40906
+ if (opts.productScope !== void 0)
40907
+ args.product_scope = opts.productScope;
40746
40908
  if (opts.repeat !== void 0)
40747
40909
  args.repeat = opts.repeat;
40748
40910
  if (opts.type !== void 0)
@@ -40786,7 +40948,7 @@ Examples:
40786
40948
  queryParamKeys: []
40787
40949
  });
40788
40950
  });
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", `
40951
+ 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
40952
  Examples:
40791
40953
  hyperline coupons update --id <id> --name <name> --type <type>
40792
40954
  hyperline coupons update --id <id> --name <name> --type <type> --description <description> --expiration-date <expiration_date>
@@ -40805,6 +40967,8 @@ Examples:
40805
40967
  args.description = opts.description;
40806
40968
  if (opts.expirationDate !== void 0)
40807
40969
  args.expiration_date = opts.expirationDate;
40970
+ if (opts.productScope !== void 0)
40971
+ args.product_scope = opts.productScope;
40808
40972
  if (opts.repeat !== void 0)
40809
40973
  args.repeat = opts.repeat;
40810
40974
  if (opts.type !== void 0)
@@ -40861,7 +41025,7 @@ Examples:
40861
41025
  // build/commands/generated/coupons-promotion-codes.js
40862
41026
  function registerCoupons_Promotion_CodesCommands(parent) {
40863
41027
  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", `
41028
+ 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
41029
  Examples:
40866
41030
  hyperline coupons-promotion-codes list-promotion-codes
40867
41031
  hyperline coupons-promotion-codes list-promotion-codes --take <take> --coupon-id <coupon_id>`).action(async (opts) => {
@@ -40875,10 +41039,6 @@ Examples:
40875
41039
  args.coupon_id = opts.couponId;
40876
41040
  if (opts["couponId.not"] !== void 0)
40877
41041
  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
41042
  if (opts["couponId.equals"] !== void 0)
40883
41043
  args.coupon_id__equals = opts["couponId.equals"];
40884
41044
  if (opts["couponId.contains"] !== void 0)
@@ -40900,8 +41060,6 @@ Examples:
40900
41060
  "skip",
40901
41061
  "coupon_id",
40902
41062
  "coupon_id__not",
40903
- "coupon_id__isNull",
40904
- "coupon_id__isNotNull",
40905
41063
  "coupon_id__equals",
40906
41064
  "coupon_id__contains",
40907
41065
  "coupon_id__startsWith",
@@ -41155,7 +41313,15 @@ Examples:
41155
41313
  // build/commands/generated/customers.js
41156
41314
  function registerCustomersCommands(parent) {
41157
41315
  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", `
41316
+ 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>", `
41317
+ Verification status of the customer tax ID.
41318
+
41319
+ - \`valid\`: Tax ID has been verified and is valid.
41320
+ - \`invalid\`: Tax ID has been verified and is invalid.
41321
+ - \`mismatch\`: Tax ID is valid but is for a different country than the customer's country.
41322
+ - \`unverified\`: Tax ID has not been verified yet.
41323
+ - \`unsupported\`: Tax ID verification for this type not supported yet.
41324
+ `).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
41325
  Examples:
41160
41326
  hyperline customers list
41161
41327
  hyperline customers list --limit <limit> --cursor <cursor>`).action(async (opts) => {
@@ -41173,14 +41339,12 @@ Examples:
41173
41339
  args.order = opts.order;
41174
41340
  if (opts.sort !== void 0)
41175
41341
  args.sort = opts.sort;
41342
+ if (opts.taxIdStatus !== void 0)
41343
+ args.tax_id_status = opts.taxIdStatus;
41176
41344
  if (opts.name !== void 0)
41177
41345
  args.name = opts.name;
41178
41346
  if (opts["name.not"] !== void 0)
41179
41347
  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
41348
  if (opts["name.equals"] !== void 0)
41185
41349
  args.name__equals = opts["name.equals"];
41186
41350
  if (opts["name.contains"] !== void 0)
@@ -41201,10 +41365,6 @@ Examples:
41201
41365
  args.currency = opts.currency;
41202
41366
  if (opts["currency.not"] !== void 0)
41203
41367
  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
41368
  if (opts["currency.equals"] !== void 0)
41209
41369
  args.currency__equals = opts["currency.equals"];
41210
41370
  if (opts["currency.contains"] !== void 0)
@@ -41213,14 +41373,14 @@ Examples:
41213
41373
  args.currency__startsWith = opts["currency.startsWith"];
41214
41374
  if (opts["currency.endWith"] !== void 0)
41215
41375
  args.currency__endWith = opts["currency.endWith"];
41376
+ if (opts["currency.isNull"] !== void 0)
41377
+ args.currency__isNull = opts["currency.isNull"];
41378
+ if (opts["currency.isNotNull"] !== void 0)
41379
+ args.currency__isNotNull = opts["currency.isNotNull"];
41216
41380
  if (opts.country !== void 0)
41217
41381
  args.country = opts.country;
41218
41382
  if (opts["country.not"] !== void 0)
41219
41383
  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
41384
  if (opts["country.equals"] !== void 0)
41225
41385
  args.country__equals = opts["country.equals"];
41226
41386
  if (opts["country.contains"] !== void 0)
@@ -41229,14 +41389,14 @@ Examples:
41229
41389
  args.country__startsWith = opts["country.startsWith"];
41230
41390
  if (opts["country.endWith"] !== void 0)
41231
41391
  args.country__endWith = opts["country.endWith"];
41392
+ if (opts["country.isNull"] !== void 0)
41393
+ args.country__isNull = opts["country.isNull"];
41394
+ if (opts["country.isNotNull"] !== void 0)
41395
+ args.country__isNotNull = opts["country.isNotNull"];
41232
41396
  if (opts.externalId !== void 0)
41233
41397
  args.external_id = opts.externalId;
41234
41398
  if (opts["externalId.not"] !== void 0)
41235
41399
  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
41400
  if (opts["externalId.equals"] !== void 0)
41241
41401
  args.external_id__equals = opts["externalId.equals"];
41242
41402
  if (opts["externalId.contains"] !== void 0)
@@ -41245,14 +41405,14 @@ Examples:
41245
41405
  args.external_id__startsWith = opts["externalId.startsWith"];
41246
41406
  if (opts["externalId.endWith"] !== void 0)
41247
41407
  args.external_id__endWith = opts["externalId.endWith"];
41408
+ if (opts["externalId.isNull"] !== void 0)
41409
+ args.external_id__isNull = opts["externalId.isNull"];
41410
+ if (opts["externalId.isNotNull"] !== void 0)
41411
+ args.external_id__isNotNull = opts["externalId.isNotNull"];
41248
41412
  if (opts.billingEmail !== void 0)
41249
41413
  args.billing_email = opts.billingEmail;
41250
41414
  if (opts["billingEmail.not"] !== void 0)
41251
41415
  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
41416
  if (opts["billingEmail.equals"] !== void 0)
41257
41417
  args.billing_email__equals = opts["billingEmail.equals"];
41258
41418
  if (opts["billingEmail.contains"] !== void 0)
@@ -41261,16 +41421,16 @@ Examples:
41261
41421
  args.billing_email__startsWith = opts["billingEmail.startsWith"];
41262
41422
  if (opts["billingEmail.endWith"] !== void 0)
41263
41423
  args.billing_email__endWith = opts["billingEmail.endWith"];
41424
+ if (opts["billingEmail.isNull"] !== void 0)
41425
+ args.billing_email__isNull = opts["billingEmail.isNull"];
41426
+ if (opts["billingEmail.isNotNull"] !== void 0)
41427
+ args.billing_email__isNotNull = opts["billingEmail.isNotNull"];
41264
41428
  if (opts.search !== void 0)
41265
41429
  args.search = opts.search;
41266
41430
  if (opts.taxId !== void 0)
41267
41431
  args.tax_id = opts.taxId;
41268
41432
  if (opts["taxId.not"] !== void 0)
41269
41433
  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
41434
  if (opts["taxId.equals"] !== void 0)
41275
41435
  args.tax_id__equals = opts["taxId.equals"];
41276
41436
  if (opts["taxId.contains"] !== void 0)
@@ -41279,6 +41439,10 @@ Examples:
41279
41439
  args.tax_id__startsWith = opts["taxId.startsWith"];
41280
41440
  if (opts["taxId.endWith"] !== void 0)
41281
41441
  args.tax_id__endWith = opts["taxId.endWith"];
41442
+ if (opts["taxId.isNull"] !== void 0)
41443
+ args.tax_id__isNull = opts["taxId.isNull"];
41444
+ if (opts["taxId.isNotNull"] !== void 0)
41445
+ args.tax_id__isNotNull = opts["taxId.isNotNull"];
41282
41446
  if (opts.subscriptionStatus !== void 0)
41283
41447
  args.subscription_status = opts.subscriptionStatus;
41284
41448
  if (opts["subscriptionStatus.in"] !== void 0)
@@ -41287,10 +41451,6 @@ Examples:
41287
41451
  args.invoicing_entity_id = opts.invoicingEntityId;
41288
41452
  if (opts["invoicingEntityId.not"] !== void 0)
41289
41453
  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
41454
  if (opts["invoicingEntityId.equals"] !== void 0)
41295
41455
  args.invoicing_entity_id__equals = opts["invoicingEntityId.equals"];
41296
41456
  if (opts["invoicingEntityId.contains"] !== void 0)
@@ -41313,10 +41473,6 @@ Examples:
41313
41473
  args.created_at = opts.createdAt;
41314
41474
  if (opts["createdAt.not"] !== void 0)
41315
41475
  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
41476
  if (opts["createdAt.equals"] !== void 0)
41321
41477
  args.created_at__equals = opts["createdAt.equals"];
41322
41478
  if (opts["createdAt.lt"] !== void 0)
@@ -41331,10 +41487,6 @@ Examples:
41331
41487
  args.updated_at = opts.updatedAt;
41332
41488
  if (opts["updatedAt.not"] !== void 0)
41333
41489
  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
41490
  if (opts["updatedAt.equals"] !== void 0)
41339
41491
  args.updated_at__equals = opts["updatedAt.equals"];
41340
41492
  if (opts["updatedAt.lt"] !== void 0)
@@ -41357,10 +41509,9 @@ Examples:
41357
41509
  "include_total",
41358
41510
  "order",
41359
41511
  "sort",
41512
+ "tax_id_status",
41360
41513
  "name",
41361
41514
  "name__not",
41362
- "name__isNull",
41363
- "name__isNotNull",
41364
41515
  "name__equals",
41365
41516
  "name__contains",
41366
41517
  "name__startsWith",
@@ -41371,51 +41522,49 @@ Examples:
41371
41522
  "status__in",
41372
41523
  "currency",
41373
41524
  "currency__not",
41374
- "currency__isNull",
41375
- "currency__isNotNull",
41376
41525
  "currency__equals",
41377
41526
  "currency__contains",
41378
41527
  "currency__startsWith",
41379
41528
  "currency__endWith",
41529
+ "currency__isNull",
41530
+ "currency__isNotNull",
41380
41531
  "country",
41381
41532
  "country__not",
41382
- "country__isNull",
41383
- "country__isNotNull",
41384
41533
  "country__equals",
41385
41534
  "country__contains",
41386
41535
  "country__startsWith",
41387
41536
  "country__endWith",
41537
+ "country__isNull",
41538
+ "country__isNotNull",
41388
41539
  "external_id",
41389
41540
  "external_id__not",
41390
- "external_id__isNull",
41391
- "external_id__isNotNull",
41392
41541
  "external_id__equals",
41393
41542
  "external_id__contains",
41394
41543
  "external_id__startsWith",
41395
41544
  "external_id__endWith",
41545
+ "external_id__isNull",
41546
+ "external_id__isNotNull",
41396
41547
  "billing_email",
41397
41548
  "billing_email__not",
41398
- "billing_email__isNull",
41399
- "billing_email__isNotNull",
41400
41549
  "billing_email__equals",
41401
41550
  "billing_email__contains",
41402
41551
  "billing_email__startsWith",
41403
41552
  "billing_email__endWith",
41553
+ "billing_email__isNull",
41554
+ "billing_email__isNotNull",
41404
41555
  "search",
41405
41556
  "tax_id",
41406
41557
  "tax_id__not",
41407
- "tax_id__isNull",
41408
- "tax_id__isNotNull",
41409
41558
  "tax_id__equals",
41410
41559
  "tax_id__contains",
41411
41560
  "tax_id__startsWith",
41412
41561
  "tax_id__endWith",
41562
+ "tax_id__isNull",
41563
+ "tax_id__isNotNull",
41413
41564
  "subscription_status",
41414
41565
  "subscription_status__in",
41415
41566
  "invoicing_entity_id",
41416
41567
  "invoicing_entity_id__not",
41417
- "invoicing_entity_id__isNull",
41418
- "invoicing_entity_id__isNotNull",
41419
41568
  "invoicing_entity_id__equals",
41420
41569
  "invoicing_entity_id__contains",
41421
41570
  "invoicing_entity_id__startsWith",
@@ -41427,8 +41576,6 @@ Examples:
41427
41576
  "integration_entity_id",
41428
41577
  "created_at",
41429
41578
  "created_at__not",
41430
- "created_at__isNull",
41431
- "created_at__isNotNull",
41432
41579
  "created_at__equals",
41433
41580
  "created_at__lt",
41434
41581
  "created_at__lte",
@@ -41436,8 +41583,6 @@ Examples:
41436
41583
  "created_at__gte",
41437
41584
  "updated_at",
41438
41585
  "updated_at__not",
41439
- "updated_at__isNull",
41440
- "updated_at__isNotNull",
41441
41586
  "updated_at__equals",
41442
41587
  "updated_at__lt",
41443
41588
  "updated_at__lte",
@@ -42006,7 +42151,7 @@ Examples:
42006
42151
  // build/commands/generated/customers-credits.js
42007
42152
  function registerCustomers_CreditsCommands(parent) {
42008
42153
  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", `
42154
+ 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
42155
  Examples:
42011
42156
  hyperline customers-credits list
42012
42157
  hyperline customers-credits list --take <take> --product-id <product_id>`).action(async (opts) => {
@@ -42020,10 +42165,6 @@ Examples:
42020
42165
  args.product_id = opts.productId;
42021
42166
  if (opts["productId.not"] !== void 0)
42022
42167
  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
42168
  if (opts["productId.equals"] !== void 0)
42028
42169
  args.product_id__equals = opts["productId.equals"];
42029
42170
  if (opts["productId.contains"] !== void 0)
@@ -42036,10 +42177,6 @@ Examples:
42036
42177
  args.customer_id = opts.customerId;
42037
42178
  if (opts["customerId.not"] !== void 0)
42038
42179
  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
42180
  if (opts["customerId.equals"] !== void 0)
42044
42181
  args.customer_id__equals = opts["customerId.equals"];
42045
42182
  if (opts["customerId.contains"] !== void 0)
@@ -42052,10 +42189,6 @@ Examples:
42052
42189
  args.updated_at = opts.updatedAt;
42053
42190
  if (opts["updatedAt.not"] !== void 0)
42054
42191
  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
42192
  if (opts["updatedAt.equals"] !== void 0)
42060
42193
  args.updated_at__equals = opts["updatedAt.equals"];
42061
42194
  if (opts["updatedAt.lt"] !== void 0)
@@ -42079,24 +42212,18 @@ Examples:
42079
42212
  "skip",
42080
42213
  "product_id",
42081
42214
  "product_id__not",
42082
- "product_id__isNull",
42083
- "product_id__isNotNull",
42084
42215
  "product_id__equals",
42085
42216
  "product_id__contains",
42086
42217
  "product_id__startsWith",
42087
42218
  "product_id__endWith",
42088
42219
  "customer_id",
42089
42220
  "customer_id__not",
42090
- "customer_id__isNull",
42091
- "customer_id__isNotNull",
42092
42221
  "customer_id__equals",
42093
42222
  "customer_id__contains",
42094
42223
  "customer_id__startsWith",
42095
42224
  "customer_id__endWith",
42096
42225
  "updated_at",
42097
42226
  "updated_at__not",
42098
- "updated_at__isNull",
42099
- "updated_at__isNotNull",
42100
42227
  "updated_at__equals",
42101
42228
  "updated_at__lt",
42102
42229
  "updated_at__lte",
@@ -42369,12 +42496,13 @@ Examples:
42369
42496
  });
42370
42497
  }
42371
42498
 
42372
- // build/commands/generated/customers-payment-methods.js
42373
- function registerCustomers_Payment_MethodsCommands(parent) {
42374
- const resource = parent.command("customers-payment-methods").description("Manage customers > payment methods");
42375
- resource.command("list-customer-payment-methods").description(`List all payment methods attached to a specific customer (cards, SEPA mandates, etc.).`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
42499
+ // build/commands/generated/customers-features.js
42500
+ function registerCustomers_FeaturesCommands(parent) {
42501
+ const resource = parent.command("customers-features").description("Manage customers > features");
42502
+ resource.command("resolve-customer-features").description(`Resolve feature values for a customer.`).requiredOption("--id <value>", `id parameter`).option("--at <value>", `Resolution date.`).addHelpText("after", `
42376
42503
  Examples:
42377
- hyperline customers-payment-methods list-customer-payment-methods --id <id>`).action(async (opts) => {
42504
+ hyperline customers-features resolve-customer-features --id <id>
42505
+ hyperline customers-features resolve-customer-features --id <id> --at <at>`).action(async (opts) => {
42378
42506
  const ctx = resource.parent?.opts()._ctx;
42379
42507
  if (!ctx) {
42380
42508
  process.stderr.write("Error: Not authenticated\n");
@@ -42383,18 +42511,20 @@ Examples:
42383
42511
  const args = {};
42384
42512
  if (opts.id !== void 0)
42385
42513
  args.id = opts.id;
42514
+ if (opts.at !== void 0)
42515
+ args.at = opts.at;
42386
42516
  await ctx.execute({
42387
42517
  method: "GET",
42388
- path: "/v1/customers/{id}/payment-methods",
42518
+ path: "/v1/customers/{id}/features",
42389
42519
  args,
42390
- queryParamKeys: []
42520
+ queryParamKeys: ["at"]
42391
42521
  });
42392
42522
  });
42393
- resource.command("create-customer-payment-method").description(`Import an existing payment method from a connected payment provider (e.g. Stripe) for a customer.`).requiredOption("--id <value>", `id parameter`).requiredOption("--provider-name <value>", `Provider name.`).option("--provider-id <value>", `Provider ID. Required if multiple instances of the same provider are connected in Hyperline.`).requiredOption("--provider-payment-method-id <value>", `ID of the payment method on the provider's side.`).addHelpText("after", `
42523
+ 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", `
42394
42524
  Examples:
42395
- hyperline customers-payment-methods create-customer-payment-method --id <id> --provider-name <provider_name> --provider-payment-method-id <provider_payment_method_id>
42396
- hyperline customers-payment-methods create-customer-payment-method --id <id> --provider-name <provider_name> --provider-payment-method-id <provider_payment_method_id> --provider-id <provider_id>
42397
- hyperline customers-payment-methods create-customer-payment-method --id <id> --provider-name <provider_name> --provider-payment-method-id <provider_payment_method_id> --output json`).action(async (opts) => {
42525
+ hyperline customers-features set-customer-feature --id <id> --code <code> --value
42526
+ hyperline customers-features set-customer-feature --id <id> --code <code> --value --reason <reason> --expires-at <expires_at>
42527
+ hyperline customers-features set-customer-feature --id <id> --code <code> --value --output json`).action(async (opts) => {
42398
42528
  const ctx = resource.parent?.opts()._ctx;
42399
42529
  if (!ctx) {
42400
42530
  process.stderr.write("Error: Not authenticated\n");
@@ -42403,22 +42533,25 @@ Examples:
42403
42533
  const args = {};
42404
42534
  if (opts.id !== void 0)
42405
42535
  args.id = opts.id;
42406
- if (opts.providerName !== void 0)
42407
- args.provider_name = opts.providerName;
42408
- if (opts.providerId !== void 0)
42409
- args.provider_id = opts.providerId;
42410
- if (opts.providerPaymentMethodId !== void 0)
42411
- args.provider_payment_method_id = opts.providerPaymentMethodId;
42536
+ if (opts.code !== void 0)
42537
+ args.code = opts.code;
42538
+ if (opts.reason !== void 0)
42539
+ args.reason = opts.reason;
42540
+ if (opts.expiresAt !== void 0)
42541
+ args.expires_at = opts.expiresAt;
42542
+ if (opts.value !== void 0)
42543
+ args.value = true;
42412
42544
  await ctx.execute({
42413
- method: "POST",
42414
- path: "/v1/customers/{id}/payment-methods",
42545
+ method: "PUT",
42546
+ path: "/v1/customers/{id}/features/{code}",
42415
42547
  args,
42416
42548
  queryParamKeys: []
42417
42549
  });
42418
42550
  });
42419
- resource.command("get-customer-payment-method").description(`Retrieve details of a specific payment method by ID including type, last4, expiry, and default status.`).requiredOption("--id <value>", `id parameter`).requiredOption("--payment-method-id <value>", `paymentMethodId parameter`).addHelpText("after", `
42551
+ 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", `
42420
42552
  Examples:
42421
- hyperline customers-payment-methods get-customer-payment-method --id <id> --payment-method-id <paymentMethodId>`).action(async (opts) => {
42553
+ hyperline customers-features delete-customer-feature --id <id> --code <code>
42554
+ hyperline customers-features delete-customer-feature --id <id> --code <code> --output json`).action(async (opts) => {
42422
42555
  const ctx = resource.parent?.opts()._ctx;
42423
42556
  if (!ctx) {
42424
42557
  process.stderr.write("Error: Not authenticated\n");
@@ -42427,19 +42560,95 @@ Examples:
42427
42560
  const args = {};
42428
42561
  if (opts.id !== void 0)
42429
42562
  args.id = opts.id;
42430
- if (opts.paymentMethodId !== void 0)
42431
- args.paymentMethodId = opts.paymentMethodId;
42563
+ if (opts.code !== void 0)
42564
+ args.code = opts.code;
42565
+ if (!opts.yes) {
42566
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
42567
+ if (!confirmed) {
42568
+ process.stdout.write("Aborted.\n");
42569
+ return;
42570
+ }
42571
+ }
42432
42572
  await ctx.execute({
42433
- method: "GET",
42434
- path: "/v1/customers/{id}/payment-methods/{paymentMethodId}",
42573
+ method: "DELETE",
42574
+ path: "/v1/customers/{id}/features/{code}",
42435
42575
  args,
42436
42576
  queryParamKeys: []
42437
42577
  });
42438
42578
  });
42439
- resource.command("delete-customer-payment-method").description(`Remove a payment method from a customer. The payment method is deleted permanently.`).requiredOption("--id <value>", `id parameter`).requiredOption("--payment-method-id <value>", `paymentMethodId parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
42579
+ }
42580
+
42581
+ // build/commands/generated/customers-payment-methods.js
42582
+ function registerCustomers_Payment_MethodsCommands(parent) {
42583
+ const resource = parent.command("customers-payment-methods").description("Manage customers > payment methods");
42584
+ resource.command("list-customer-payment-methods").description(`List all payment methods attached to a specific customer (cards, SEPA mandates, etc.).`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
42440
42585
  Examples:
42441
- hyperline customers-payment-methods delete-customer-payment-method --id <id> --payment-method-id <paymentMethodId>
42442
- hyperline customers-payment-methods delete-customer-payment-method --id <id> --payment-method-id <paymentMethodId> --output json`).action(async (opts) => {
42586
+ hyperline customers-payment-methods list-customer-payment-methods --id <id>`).action(async (opts) => {
42587
+ const ctx = resource.parent?.opts()._ctx;
42588
+ if (!ctx) {
42589
+ process.stderr.write("Error: Not authenticated\n");
42590
+ process.exit(1);
42591
+ }
42592
+ const args = {};
42593
+ if (opts.id !== void 0)
42594
+ args.id = opts.id;
42595
+ await ctx.execute({
42596
+ method: "GET",
42597
+ path: "/v1/customers/{id}/payment-methods",
42598
+ args,
42599
+ queryParamKeys: []
42600
+ });
42601
+ });
42602
+ resource.command("create-customer-payment-method").description(`Import an existing payment method from a connected payment provider (e.g. Stripe) for a customer.`).requiredOption("--id <value>", `id parameter`).requiredOption("--provider-name <value>", `Provider name.`).option("--provider-id <value>", `Provider ID. Required if multiple instances of the same provider are connected in Hyperline.`).requiredOption("--provider-payment-method-id <value>", `ID of the payment method on the provider's side.`).addHelpText("after", `
42603
+ Examples:
42604
+ hyperline customers-payment-methods create-customer-payment-method --id <id> --provider-name <provider_name> --provider-payment-method-id <provider_payment_method_id>
42605
+ hyperline customers-payment-methods create-customer-payment-method --id <id> --provider-name <provider_name> --provider-payment-method-id <provider_payment_method_id> --provider-id <provider_id>
42606
+ hyperline customers-payment-methods create-customer-payment-method --id <id> --provider-name <provider_name> --provider-payment-method-id <provider_payment_method_id> --output json`).action(async (opts) => {
42607
+ const ctx = resource.parent?.opts()._ctx;
42608
+ if (!ctx) {
42609
+ process.stderr.write("Error: Not authenticated\n");
42610
+ process.exit(1);
42611
+ }
42612
+ const args = {};
42613
+ if (opts.id !== void 0)
42614
+ args.id = opts.id;
42615
+ if (opts.providerName !== void 0)
42616
+ args.provider_name = opts.providerName;
42617
+ if (opts.providerId !== void 0)
42618
+ args.provider_id = opts.providerId;
42619
+ if (opts.providerPaymentMethodId !== void 0)
42620
+ args.provider_payment_method_id = opts.providerPaymentMethodId;
42621
+ await ctx.execute({
42622
+ method: "POST",
42623
+ path: "/v1/customers/{id}/payment-methods",
42624
+ args,
42625
+ queryParamKeys: []
42626
+ });
42627
+ });
42628
+ resource.command("get-customer-payment-method").description(`Retrieve details of a specific payment method by ID including type, last4, expiry, and default status.`).requiredOption("--id <value>", `id parameter`).requiredOption("--payment-method-id <value>", `paymentMethodId parameter`).addHelpText("after", `
42629
+ Examples:
42630
+ hyperline customers-payment-methods get-customer-payment-method --id <id> --payment-method-id <paymentMethodId>`).action(async (opts) => {
42631
+ const ctx = resource.parent?.opts()._ctx;
42632
+ if (!ctx) {
42633
+ process.stderr.write("Error: Not authenticated\n");
42634
+ process.exit(1);
42635
+ }
42636
+ const args = {};
42637
+ if (opts.id !== void 0)
42638
+ args.id = opts.id;
42639
+ if (opts.paymentMethodId !== void 0)
42640
+ args.paymentMethodId = opts.paymentMethodId;
42641
+ await ctx.execute({
42642
+ method: "GET",
42643
+ path: "/v1/customers/{id}/payment-methods/{paymentMethodId}",
42644
+ args,
42645
+ queryParamKeys: []
42646
+ });
42647
+ });
42648
+ resource.command("delete-customer-payment-method").description(`Remove a payment method from a customer. The payment method is deleted permanently.`).requiredOption("--id <value>", `id parameter`).requiredOption("--payment-method-id <value>", `paymentMethodId parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
42649
+ Examples:
42650
+ hyperline customers-payment-methods delete-customer-payment-method --id <id> --payment-method-id <paymentMethodId>
42651
+ hyperline customers-payment-methods delete-customer-payment-method --id <id> --payment-method-id <paymentMethodId> --output json`).action(async (opts) => {
42443
42652
  const ctx = resource.parent?.opts()._ctx;
42444
42653
  if (!ctx) {
42445
42654
  process.stderr.write("Error: Not authenticated\n");
@@ -42818,6 +43027,222 @@ Examples:
42818
43027
  });
42819
43028
  }
42820
43029
 
43030
+ // build/commands/generated/features.js
43031
+ function registerFeaturesCommands(parent) {
43032
+ const resource = parent.command("features").description("Manage features");
43033
+ 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", `
43034
+ Examples:
43035
+ hyperline features list
43036
+ hyperline features list --take <take> --code <code>`).action(async (opts) => {
43037
+ const ctx = resource.parent?.opts()._ctx;
43038
+ if (!ctx) {
43039
+ process.stderr.write("Error: Not authenticated\n");
43040
+ process.exit(1);
43041
+ }
43042
+ const args = {};
43043
+ if (opts.code !== void 0)
43044
+ args.code = opts.code;
43045
+ if (opts["code.not"] !== void 0)
43046
+ args.code__not = opts["code.not"];
43047
+ if (opts["code.equals"] !== void 0)
43048
+ args.code__equals = opts["code.equals"];
43049
+ if (opts["code.contains"] !== void 0)
43050
+ args.code__contains = opts["code.contains"];
43051
+ if (opts["code.startsWith"] !== void 0)
43052
+ args.code__startsWith = opts["code.startsWith"];
43053
+ if (opts["code.endWith"] !== void 0)
43054
+ args.code__endWith = opts["code.endWith"];
43055
+ if (opts.name !== void 0)
43056
+ args.name = opts.name;
43057
+ if (opts["name.not"] !== void 0)
43058
+ args.name__not = opts["name.not"];
43059
+ if (opts["name.equals"] !== void 0)
43060
+ args.name__equals = opts["name.equals"];
43061
+ if (opts["name.contains"] !== void 0)
43062
+ args.name__contains = opts["name.contains"];
43063
+ if (opts["name.startsWith"] !== void 0)
43064
+ args.name__startsWith = opts["name.startsWith"];
43065
+ if (opts["name.endWith"] !== void 0)
43066
+ args.name__endWith = opts["name.endWith"];
43067
+ if (opts.status !== void 0)
43068
+ args.status = opts.status;
43069
+ if (opts["status.in"] !== void 0)
43070
+ args.status__in = opts["status.in"];
43071
+ if (opts.search !== void 0)
43072
+ args.search = opts.search;
43073
+ if (opts.take !== void 0)
43074
+ args.take = Number(opts.take);
43075
+ if (opts.skip !== void 0)
43076
+ args.skip = Number(opts.skip);
43077
+ await ctx.execute({
43078
+ method: "GET",
43079
+ path: "/v1/features",
43080
+ args,
43081
+ queryParamKeys: [
43082
+ "take",
43083
+ "skip",
43084
+ "code",
43085
+ "code__not",
43086
+ "code__equals",
43087
+ "code__contains",
43088
+ "code__startsWith",
43089
+ "code__endWith",
43090
+ "name",
43091
+ "name__not",
43092
+ "name__equals",
43093
+ "name__contains",
43094
+ "name__startsWith",
43095
+ "name__endWith",
43096
+ "status",
43097
+ "status__in",
43098
+ "search"
43099
+ ]
43100
+ });
43101
+ });
43102
+ 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", `
43103
+ Examples:
43104
+ hyperline features create --code <code> --name <name> --value-type <value_type> --default-value
43105
+ hyperline features create --code <code> --name <name> --value-type <value_type> --default-value --description <description> --resolution-strategy <resolution_strategy>
43106
+ hyperline features create --code <code> --name <name> --value-type <value_type> --default-value --output json`).action(async (opts) => {
43107
+ const ctx = resource.parent?.opts()._ctx;
43108
+ if (!ctx) {
43109
+ process.stderr.write("Error: Not authenticated\n");
43110
+ process.exit(1);
43111
+ }
43112
+ const args = {};
43113
+ if (opts.code !== void 0)
43114
+ args.code = opts.code;
43115
+ if (opts.name !== void 0)
43116
+ args.name = opts.name;
43117
+ if (opts.description !== void 0)
43118
+ args.description = opts.description;
43119
+ if (opts.valueType !== void 0)
43120
+ args.value_type = opts.valueType;
43121
+ if (opts.resolutionStrategy !== void 0)
43122
+ args.resolution_strategy = opts.resolutionStrategy;
43123
+ if (opts.defaultValue !== void 0)
43124
+ args.default_value = true;
43125
+ await ctx.execute({
43126
+ method: "POST",
43127
+ path: "/v1/features",
43128
+ args,
43129
+ queryParamKeys: []
43130
+ });
43131
+ });
43132
+ resource.command("get").description(`Retrieve a feature definition.`).requiredOption("--code <value>", `code parameter`).addHelpText("after", `
43133
+ Examples:
43134
+ hyperline features get --code <code>`).action(async (opts) => {
43135
+ const ctx = resource.parent?.opts()._ctx;
43136
+ if (!ctx) {
43137
+ process.stderr.write("Error: Not authenticated\n");
43138
+ process.exit(1);
43139
+ }
43140
+ const args = {};
43141
+ if (opts.code !== void 0)
43142
+ args.code = opts.code;
43143
+ await ctx.execute({
43144
+ method: "GET",
43145
+ path: "/v1/features/{code}",
43146
+ args,
43147
+ queryParamKeys: []
43148
+ });
43149
+ });
43150
+ 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", `
43151
+ Examples:
43152
+ hyperline features update --code <code>
43153
+ hyperline features update --code <code> --name <name> --description <description>
43154
+ hyperline features update --code <code> --output json`).action(async (opts) => {
43155
+ const ctx = resource.parent?.opts()._ctx;
43156
+ if (!ctx) {
43157
+ process.stderr.write("Error: Not authenticated\n");
43158
+ process.exit(1);
43159
+ }
43160
+ const args = {};
43161
+ if (opts.code !== void 0)
43162
+ args.code = opts.code;
43163
+ if (opts.name !== void 0)
43164
+ args.name = opts.name;
43165
+ if (opts.description !== void 0)
43166
+ args.description = opts.description;
43167
+ if (opts.valueType !== void 0)
43168
+ args.value_type = opts.valueType;
43169
+ if (opts.resolutionStrategy !== void 0)
43170
+ args.resolution_strategy = opts.resolutionStrategy;
43171
+ if (opts.defaultValue !== void 0)
43172
+ args.default_value = true;
43173
+ await ctx.execute({
43174
+ method: "PUT",
43175
+ path: "/v1/features/{code}",
43176
+ args,
43177
+ queryParamKeys: []
43178
+ });
43179
+ });
43180
+ resource.command("archive").description(`Archive a feature definition.`).requiredOption("--code <value>", `code parameter`).addHelpText("after", `
43181
+ Examples:
43182
+ hyperline features archive --code <code>
43183
+ hyperline features archive --code <code> --output json`).action(async (opts) => {
43184
+ const ctx = resource.parent?.opts()._ctx;
43185
+ if (!ctx) {
43186
+ process.stderr.write("Error: Not authenticated\n");
43187
+ process.exit(1);
43188
+ }
43189
+ const args = {};
43190
+ if (opts.code !== void 0)
43191
+ args.code = opts.code;
43192
+ await ctx.execute({
43193
+ method: "PUT",
43194
+ path: "/v1/features/{code}/archive",
43195
+ args,
43196
+ queryParamKeys: []
43197
+ });
43198
+ });
43199
+ 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", `
43200
+ Examples:
43201
+ hyperline features delete --code <code>
43202
+ hyperline features delete --code <code> --output json`).action(async (opts) => {
43203
+ const ctx = resource.parent?.opts()._ctx;
43204
+ if (!ctx) {
43205
+ process.stderr.write("Error: Not authenticated\n");
43206
+ process.exit(1);
43207
+ }
43208
+ const args = {};
43209
+ if (opts.code !== void 0)
43210
+ args.code = opts.code;
43211
+ if (!opts.yes) {
43212
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
43213
+ if (!confirmed) {
43214
+ process.stdout.write("Aborted.\n");
43215
+ return;
43216
+ }
43217
+ }
43218
+ await ctx.execute({
43219
+ method: "DELETE",
43220
+ path: "/v1/features/{code}",
43221
+ args,
43222
+ queryParamKeys: []
43223
+ });
43224
+ });
43225
+ resource.command("unarchive").description(`Unarchive a feature definition.`).requiredOption("--code <value>", `code parameter`).addHelpText("after", `
43226
+ Examples:
43227
+ hyperline features unarchive --code <code>
43228
+ hyperline features unarchive --code <code> --output json`).action(async (opts) => {
43229
+ const ctx = resource.parent?.opts()._ctx;
43230
+ if (!ctx) {
43231
+ process.stderr.write("Error: Not authenticated\n");
43232
+ process.exit(1);
43233
+ }
43234
+ const args = {};
43235
+ if (opts.code !== void 0)
43236
+ args.code = opts.code;
43237
+ await ctx.execute({
43238
+ method: "PUT",
43239
+ path: "/v1/features/{code}/unarchive",
43240
+ args,
43241
+ queryParamKeys: []
43242
+ });
43243
+ });
43244
+ }
43245
+
42821
43246
  // build/commands/generated/files.js
42822
43247
  function registerFilesCommands(parent) {
42823
43248
  const resource = parent.command("files").description("Manage files");
@@ -42839,7 +43264,7 @@ Examples:
42839
43264
  queryParamKeys: []
42840
43265
  });
42841
43266
  });
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", `
43267
+ 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", `
42843
43268
  Examples:
42844
43269
  hyperline files list
42845
43270
  hyperline files list --take <take> --name <name>`).action(async (opts) => {
@@ -42853,10 +43278,6 @@ Examples:
42853
43278
  args.name = opts.name;
42854
43279
  if (opts["name.not"] !== void 0)
42855
43280
  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
43281
  if (opts["name.equals"] !== void 0)
42861
43282
  args.name__equals = opts["name.equals"];
42862
43283
  if (opts["name.contains"] !== void 0)
@@ -42869,10 +43290,6 @@ Examples:
42869
43290
  args.customer_id = opts.customerId;
42870
43291
  if (opts["customerId.not"] !== void 0)
42871
43292
  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
43293
  if (opts["customerId.equals"] !== void 0)
42877
43294
  args.customer_id__equals = opts["customerId.equals"];
42878
43295
  if (opts["customerId.contains"] !== void 0)
@@ -42881,6 +43298,10 @@ Examples:
42881
43298
  args.customer_id__startsWith = opts["customerId.startsWith"];
42882
43299
  if (opts["customerId.endWith"] !== void 0)
42883
43300
  args.customer_id__endWith = opts["customerId.endWith"];
43301
+ if (opts["customerId.isNull"] !== void 0)
43302
+ args.customer_id__isNull = opts["customerId.isNull"];
43303
+ if (opts["customerId.isNotNull"] !== void 0)
43304
+ args.customer_id__isNotNull = opts["customerId.isNotNull"];
42884
43305
  if (opts.take !== void 0)
42885
43306
  args.take = Number(opts.take);
42886
43307
  if (opts.skip !== void 0)
@@ -42894,20 +43315,18 @@ Examples:
42894
43315
  "skip",
42895
43316
  "name",
42896
43317
  "name__not",
42897
- "name__isNull",
42898
- "name__isNotNull",
42899
43318
  "name__equals",
42900
43319
  "name__contains",
42901
43320
  "name__startsWith",
42902
43321
  "name__endWith",
42903
43322
  "customer_id",
42904
43323
  "customer_id__not",
42905
- "customer_id__isNull",
42906
- "customer_id__isNotNull",
42907
43324
  "customer_id__equals",
42908
43325
  "customer_id__contains",
42909
43326
  "customer_id__startsWith",
42910
- "customer_id__endWith"
43327
+ "customer_id__endWith",
43328
+ "customer_id__isNull",
43329
+ "customer_id__isNotNull"
42911
43330
  ]
42912
43331
  });
42913
43332
  });
@@ -42963,7 +43382,7 @@ Examples:
42963
43382
  // build/commands/generated/invoices.js
42964
43383
  function registerInvoicesCommands(parent) {
42965
43384
  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", `
43385
+ 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
43386
  Examples:
42968
43387
  hyperline invoices list
42969
43388
  hyperline invoices list --limit <limit> --cursor <cursor>`).action(async (opts) => {
@@ -42993,10 +43412,6 @@ Examples:
42993
43412
  args.customer_id = opts.customerId;
42994
43413
  if (opts["customerId.not"] !== void 0)
42995
43414
  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
43415
  if (opts["customerId.equals"] !== void 0)
43001
43416
  args.customer_id__equals = opts["customerId.equals"];
43002
43417
  if (opts["customerId.contains"] !== void 0)
@@ -43011,10 +43426,6 @@ Examples:
43011
43426
  args.subscription_id = opts.subscriptionId;
43012
43427
  if (opts["subscriptionId.not"] !== void 0)
43013
43428
  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
43429
  if (opts["subscriptionId.equals"] !== void 0)
43019
43430
  args.subscription_id__equals = opts["subscriptionId.equals"];
43020
43431
  if (opts["subscriptionId.contains"] !== void 0)
@@ -43023,14 +43434,14 @@ Examples:
43023
43434
  args.subscription_id__startsWith = opts["subscriptionId.startsWith"];
43024
43435
  if (opts["subscriptionId.endWith"] !== void 0)
43025
43436
  args.subscription_id__endWith = opts["subscriptionId.endWith"];
43437
+ if (opts["subscriptionId.isNull"] !== void 0)
43438
+ args.subscription_id__isNull = opts["subscriptionId.isNull"];
43439
+ if (opts["subscriptionId.isNotNull"] !== void 0)
43440
+ args.subscription_id__isNotNull = opts["subscriptionId.isNotNull"];
43026
43441
  if (opts.invoicingEntityId !== void 0)
43027
43442
  args.invoicing_entity_id = opts.invoicingEntityId;
43028
43443
  if (opts["invoicingEntityId.not"] !== void 0)
43029
43444
  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
43445
  if (opts["invoicingEntityId.equals"] !== void 0)
43035
43446
  args.invoicing_entity_id__equals = opts["invoicingEntityId.equals"];
43036
43447
  if (opts["invoicingEntityId.contains"] !== void 0)
@@ -43043,10 +43454,6 @@ Examples:
43043
43454
  args.invoice_number = opts.invoiceNumber;
43044
43455
  if (opts["invoiceNumber.not"] !== void 0)
43045
43456
  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
43457
  if (opts["invoiceNumber.equals"] !== void 0)
43051
43458
  args.invoice_number__equals = opts["invoiceNumber.equals"];
43052
43459
  if (opts["invoiceNumber.contains"] !== void 0)
@@ -43059,10 +43466,6 @@ Examples:
43059
43466
  args.original_invoice_id = opts.originalInvoiceId;
43060
43467
  if (opts["originalInvoiceId.not"] !== void 0)
43061
43468
  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
43469
  if (opts["originalInvoiceId.equals"] !== void 0)
43067
43470
  args.original_invoice_id__equals = opts["originalInvoiceId.equals"];
43068
43471
  if (opts["originalInvoiceId.contains"] !== void 0)
@@ -43071,14 +43474,14 @@ Examples:
43071
43474
  args.original_invoice_id__startsWith = opts["originalInvoiceId.startsWith"];
43072
43475
  if (opts["originalInvoiceId.endWith"] !== void 0)
43073
43476
  args.original_invoice_id__endWith = opts["originalInvoiceId.endWith"];
43477
+ if (opts["originalInvoiceId.isNull"] !== void 0)
43478
+ args.original_invoice_id__isNull = opts["originalInvoiceId.isNull"];
43479
+ if (opts["originalInvoiceId.isNotNull"] !== void 0)
43480
+ args.original_invoice_id__isNotNull = opts["originalInvoiceId.isNotNull"];
43074
43481
  if (opts.originalInvoiceNumber !== void 0)
43075
43482
  args.original_invoice_number = opts.originalInvoiceNumber;
43076
43483
  if (opts["originalInvoiceNumber.not"] !== void 0)
43077
43484
  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
43485
  if (opts["originalInvoiceNumber.equals"] !== void 0)
43083
43486
  args.original_invoice_number__equals = opts["originalInvoiceNumber.equals"];
43084
43487
  if (opts["originalInvoiceNumber.contains"] !== void 0)
@@ -43087,16 +43490,16 @@ Examples:
43087
43490
  args.original_invoice_number__startsWith = opts["originalInvoiceNumber.startsWith"];
43088
43491
  if (opts["originalInvoiceNumber.endWith"] !== void 0)
43089
43492
  args.original_invoice_number__endWith = opts["originalInvoiceNumber.endWith"];
43493
+ if (opts["originalInvoiceNumber.isNull"] !== void 0)
43494
+ args.original_invoice_number__isNull = opts["originalInvoiceNumber.isNull"];
43495
+ if (opts["originalInvoiceNumber.isNotNull"] !== void 0)
43496
+ args.original_invoice_number__isNotNull = opts["originalInvoiceNumber.isNotNull"];
43090
43497
  if (opts.lineItemId !== void 0)
43091
43498
  args.line_item_id = opts.lineItemId;
43092
43499
  if (opts.periodStart !== void 0)
43093
43500
  args.period_start = opts.periodStart;
43094
43501
  if (opts["periodStart.not"] !== void 0)
43095
43502
  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
43503
  if (opts["periodStart.equals"] !== void 0)
43101
43504
  args.period_start__equals = opts["periodStart.equals"];
43102
43505
  if (opts["periodStart.lt"] !== void 0)
@@ -43107,14 +43510,14 @@ Examples:
43107
43510
  args.period_start__gt = opts["periodStart.gt"];
43108
43511
  if (opts["periodStart.gte"] !== void 0)
43109
43512
  args.period_start__gte = opts["periodStart.gte"];
43513
+ if (opts["periodStart.isNull"] !== void 0)
43514
+ args.period_start__isNull = opts["periodStart.isNull"];
43515
+ if (opts["periodStart.isNotNull"] !== void 0)
43516
+ args.period_start__isNotNull = opts["periodStart.isNotNull"];
43110
43517
  if (opts.periodEnd !== void 0)
43111
43518
  args.period_end = opts.periodEnd;
43112
43519
  if (opts["periodEnd.not"] !== void 0)
43113
43520
  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
43521
  if (opts["periodEnd.equals"] !== void 0)
43119
43522
  args.period_end__equals = opts["periodEnd.equals"];
43120
43523
  if (opts["periodEnd.lt"] !== void 0)
@@ -43125,14 +43528,14 @@ Examples:
43125
43528
  args.period_end__gt = opts["periodEnd.gt"];
43126
43529
  if (opts["periodEnd.gte"] !== void 0)
43127
43530
  args.period_end__gte = opts["periodEnd.gte"];
43531
+ if (opts["periodEnd.isNull"] !== void 0)
43532
+ args.period_end__isNull = opts["periodEnd.isNull"];
43533
+ if (opts["periodEnd.isNotNull"] !== void 0)
43534
+ args.period_end__isNotNull = opts["periodEnd.isNotNull"];
43128
43535
  if (opts.issuedAt !== void 0)
43129
43536
  args.issued_at = opts.issuedAt;
43130
43537
  if (opts["issuedAt.not"] !== void 0)
43131
43538
  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
43539
  if (opts["issuedAt.equals"] !== void 0)
43137
43540
  args.issued_at__equals = opts["issuedAt.equals"];
43138
43541
  if (opts["issuedAt.lt"] !== void 0)
@@ -43147,10 +43550,6 @@ Examples:
43147
43550
  args.due_at = opts.dueAt;
43148
43551
  if (opts["dueAt.not"] !== void 0)
43149
43552
  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
43553
  if (opts["dueAt.equals"] !== void 0)
43155
43554
  args.due_at__equals = opts["dueAt.equals"];
43156
43555
  if (opts["dueAt.lt"] !== void 0)
@@ -43165,10 +43564,6 @@ Examples:
43165
43564
  args.updated_at = opts.updatedAt;
43166
43565
  if (opts["updatedAt.not"] !== void 0)
43167
43566
  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
43567
  if (opts["updatedAt.equals"] !== void 0)
43173
43568
  args.updated_at__equals = opts["updatedAt.equals"];
43174
43569
  if (opts["updatedAt.lt"] !== void 0)
@@ -43197,8 +43592,6 @@ Examples:
43197
43592
  "status__in",
43198
43593
  "customer_id",
43199
43594
  "customer_id__not",
43200
- "customer_id__isNull",
43201
- "customer_id__isNotNull",
43202
43595
  "customer_id__equals",
43203
43596
  "customer_id__contains",
43204
43597
  "customer_id__startsWith",
@@ -43206,67 +43599,61 @@ Examples:
43206
43599
  "customer_external_id",
43207
43600
  "subscription_id",
43208
43601
  "subscription_id__not",
43209
- "subscription_id__isNull",
43210
- "subscription_id__isNotNull",
43211
43602
  "subscription_id__equals",
43212
43603
  "subscription_id__contains",
43213
43604
  "subscription_id__startsWith",
43214
43605
  "subscription_id__endWith",
43606
+ "subscription_id__isNull",
43607
+ "subscription_id__isNotNull",
43215
43608
  "invoicing_entity_id",
43216
43609
  "invoicing_entity_id__not",
43217
- "invoicing_entity_id__isNull",
43218
- "invoicing_entity_id__isNotNull",
43219
43610
  "invoicing_entity_id__equals",
43220
43611
  "invoicing_entity_id__contains",
43221
43612
  "invoicing_entity_id__startsWith",
43222
43613
  "invoicing_entity_id__endWith",
43223
43614
  "invoice_number",
43224
43615
  "invoice_number__not",
43225
- "invoice_number__isNull",
43226
- "invoice_number__isNotNull",
43227
43616
  "invoice_number__equals",
43228
43617
  "invoice_number__contains",
43229
43618
  "invoice_number__startsWith",
43230
43619
  "invoice_number__endWith",
43231
43620
  "original_invoice_id",
43232
43621
  "original_invoice_id__not",
43233
- "original_invoice_id__isNull",
43234
- "original_invoice_id__isNotNull",
43235
43622
  "original_invoice_id__equals",
43236
43623
  "original_invoice_id__contains",
43237
43624
  "original_invoice_id__startsWith",
43238
43625
  "original_invoice_id__endWith",
43626
+ "original_invoice_id__isNull",
43627
+ "original_invoice_id__isNotNull",
43239
43628
  "original_invoice_number",
43240
43629
  "original_invoice_number__not",
43241
- "original_invoice_number__isNull",
43242
- "original_invoice_number__isNotNull",
43243
43630
  "original_invoice_number__equals",
43244
43631
  "original_invoice_number__contains",
43245
43632
  "original_invoice_number__startsWith",
43246
43633
  "original_invoice_number__endWith",
43634
+ "original_invoice_number__isNull",
43635
+ "original_invoice_number__isNotNull",
43247
43636
  "line_item_id",
43248
43637
  "period_start",
43249
43638
  "period_start__not",
43250
- "period_start__isNull",
43251
- "period_start__isNotNull",
43252
43639
  "period_start__equals",
43253
43640
  "period_start__lt",
43254
43641
  "period_start__lte",
43255
43642
  "period_start__gt",
43256
43643
  "period_start__gte",
43644
+ "period_start__isNull",
43645
+ "period_start__isNotNull",
43257
43646
  "period_end",
43258
43647
  "period_end__not",
43259
- "period_end__isNull",
43260
- "period_end__isNotNull",
43261
43648
  "period_end__equals",
43262
43649
  "period_end__lt",
43263
43650
  "period_end__lte",
43264
43651
  "period_end__gt",
43265
43652
  "period_end__gte",
43653
+ "period_end__isNull",
43654
+ "period_end__isNotNull",
43266
43655
  "issued_at",
43267
43656
  "issued_at__not",
43268
- "issued_at__isNull",
43269
- "issued_at__isNotNull",
43270
43657
  "issued_at__equals",
43271
43658
  "issued_at__lt",
43272
43659
  "issued_at__lte",
@@ -43274,8 +43661,6 @@ Examples:
43274
43661
  "issued_at__gte",
43275
43662
  "due_at",
43276
43663
  "due_at__not",
43277
- "due_at__isNull",
43278
- "due_at__isNotNull",
43279
43664
  "due_at__equals",
43280
43665
  "due_at__lt",
43281
43666
  "due_at__lte",
@@ -43283,8 +43668,6 @@ Examples:
43283
43668
  "due_at__gte",
43284
43669
  "updated_at",
43285
43670
  "updated_at__not",
43286
- "updated_at__isNull",
43287
- "updated_at__isNotNull",
43288
43671
  "updated_at__equals",
43289
43672
  "updated_at__lt",
43290
43673
  "updated_at__lte",
@@ -44012,7 +44395,7 @@ Examples:
44012
44395
  // build/commands/generated/organisations.js
44013
44396
  function registerOrganisationsCommands(parent) {
44014
44397
  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", `
44398
+ 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
44399
  Examples:
44017
44400
  hyperline organisations list
44018
44401
  hyperline organisations list --limit <limit> --cursor <cursor>`).action(async (opts) => {
@@ -44034,10 +44417,6 @@ Examples:
44034
44417
  args.created_at = opts.createdAt;
44035
44418
  if (opts["createdAt.not"] !== void 0)
44036
44419
  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
44420
  if (opts["createdAt.equals"] !== void 0)
44042
44421
  args.created_at__equals = opts["createdAt.equals"];
44043
44422
  if (opts["createdAt.lt"] !== void 0)
@@ -44052,10 +44431,6 @@ Examples:
44052
44431
  args.updated_at = opts.updatedAt;
44053
44432
  if (opts["updatedAt.not"] !== void 0)
44054
44433
  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
44434
  if (opts["updatedAt.equals"] !== void 0)
44060
44435
  args.updated_at__equals = opts["updatedAt.equals"];
44061
44436
  if (opts["updatedAt.lt"] !== void 0)
@@ -44080,8 +44455,6 @@ Examples:
44080
44455
  "sort",
44081
44456
  "created_at",
44082
44457
  "created_at__not",
44083
- "created_at__isNull",
44084
- "created_at__isNotNull",
44085
44458
  "created_at__equals",
44086
44459
  "created_at__lt",
44087
44460
  "created_at__lte",
@@ -44089,8 +44462,6 @@ Examples:
44089
44462
  "created_at__gte",
44090
44463
  "updated_at",
44091
44464
  "updated_at__not",
44092
- "updated_at__isNull",
44093
- "updated_at__isNotNull",
44094
44465
  "updated_at__equals",
44095
44466
  "updated_at__lt",
44096
44467
  "updated_at__lte",
@@ -44204,7 +44575,7 @@ Examples:
44204
44575
  // build/commands/generated/price-configurations.js
44205
44576
  function registerPrice_ConfigurationsCommands(parent) {
44206
44577
  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", `
44578
+ 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
44579
  Examples:
44209
44580
  hyperline price-configurations list
44210
44581
  hyperline price-configurations list --take <take> --product-id <product_id>`).action(async (opts) => {
@@ -44218,10 +44589,6 @@ Examples:
44218
44589
  args.product_id = opts.productId;
44219
44590
  if (opts["productId.not"] !== void 0)
44220
44591
  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
44592
  if (opts["productId.equals"] !== void 0)
44226
44593
  args.product_id__equals = opts["productId.equals"];
44227
44594
  if (opts["productId.contains"] !== void 0)
@@ -44234,10 +44601,6 @@ Examples:
44234
44601
  args.price_book_id = opts.priceBookId;
44235
44602
  if (opts["priceBookId.not"] !== void 0)
44236
44603
  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
44604
  if (opts["priceBookId.equals"] !== void 0)
44242
44605
  args.price_book_id__equals = opts["priceBookId.equals"];
44243
44606
  if (opts["priceBookId.contains"] !== void 0)
@@ -44246,6 +44609,10 @@ Examples:
44246
44609
  args.price_book_id__startsWith = opts["priceBookId.startsWith"];
44247
44610
  if (opts["priceBookId.endWith"] !== void 0)
44248
44611
  args.price_book_id__endWith = opts["priceBookId.endWith"];
44612
+ if (opts["priceBookId.isNull"] !== void 0)
44613
+ args.price_book_id__isNull = opts["priceBookId.isNull"];
44614
+ if (opts["priceBookId.isNotNull"] !== void 0)
44615
+ args.price_book_id__isNotNull = opts["priceBookId.isNotNull"];
44249
44616
  if (opts.take !== void 0)
44250
44617
  args.take = Number(opts.take);
44251
44618
  if (opts.skip !== void 0)
@@ -44259,20 +44626,18 @@ Examples:
44259
44626
  "skip",
44260
44627
  "product_id",
44261
44628
  "product_id__not",
44262
- "product_id__isNull",
44263
- "product_id__isNotNull",
44264
44629
  "product_id__equals",
44265
44630
  "product_id__contains",
44266
44631
  "product_id__startsWith",
44267
44632
  "product_id__endWith",
44268
44633
  "price_book_id",
44269
44634
  "price_book_id__not",
44270
- "price_book_id__isNull",
44271
- "price_book_id__isNotNull",
44272
44635
  "price_book_id__equals",
44273
44636
  "price_book_id__contains",
44274
44637
  "price_book_id__startsWith",
44275
- "price_book_id__endWith"
44638
+ "price_book_id__endWith",
44639
+ "price_book_id__isNull",
44640
+ "price_book_id__isNotNull"
44276
44641
  ]
44277
44642
  });
44278
44643
  });
@@ -44294,7 +44659,7 @@ Examples:
44294
44659
  queryParamKeys: []
44295
44660
  });
44296
44661
  });
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", `
44662
+ 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
44663
  Examples:
44299
44664
  hyperline price-configurations create --currency <currency> --billing-interval <billing_interval> --type <type> --prices <prices> --product-id <product_id>
44300
44665
  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 +44678,8 @@ Examples:
44313
44678
  args.type = opts.type;
44314
44679
  if (opts.productId !== void 0)
44315
44680
  args.product_id = opts.productId;
44681
+ if (opts.aggregatorFilterId !== void 0)
44682
+ args.aggregator_filter_id = opts.aggregatorFilterId;
44316
44683
  if (opts.allowOnPortal !== void 0)
44317
44684
  args.allow_on_portal = true;
44318
44685
  if (opts.countries !== void 0)
@@ -44396,7 +44763,7 @@ Examples:
44396
44763
  // build/commands/generated/products.js
44397
44764
  function registerProductsCommands(parent) {
44398
44765
  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", `
44766
+ 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
44767
  Examples:
44401
44768
  hyperline products list
44402
44769
  hyperline products list --take <take> --id <id>`).action(async (opts) => {
@@ -44410,10 +44777,6 @@ Examples:
44410
44777
  args.id = opts.id;
44411
44778
  if (opts["id.not"] !== void 0)
44412
44779
  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
44780
  if (opts["id.equals"] !== void 0)
44418
44781
  args.id__equals = opts["id.equals"];
44419
44782
  if (opts["id.contains"] !== void 0)
@@ -44430,10 +44793,6 @@ Examples:
44430
44793
  args.name = opts.name;
44431
44794
  if (opts["name.not"] !== void 0)
44432
44795
  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
44796
  if (opts["name.equals"] !== void 0)
44438
44797
  args.name__equals = opts["name.equals"];
44439
44798
  if (opts["name.contains"] !== void 0)
@@ -44446,10 +44805,6 @@ Examples:
44446
44805
  args.description = opts.description;
44447
44806
  if (opts["description.not"] !== void 0)
44448
44807
  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
44808
  if (opts["description.equals"] !== void 0)
44454
44809
  args.description__equals = opts["description.equals"];
44455
44810
  if (opts["description.contains"] !== void 0)
@@ -44458,14 +44813,14 @@ Examples:
44458
44813
  args.description__startsWith = opts["description.startsWith"];
44459
44814
  if (opts["description.endWith"] !== void 0)
44460
44815
  args.description__endWith = opts["description.endWith"];
44816
+ if (opts["description.isNull"] !== void 0)
44817
+ args.description__isNull = opts["description.isNull"];
44818
+ if (opts["description.isNotNull"] !== void 0)
44819
+ args.description__isNotNull = opts["description.isNotNull"];
44461
44820
  if (opts.type !== void 0)
44462
44821
  args.type = opts.type;
44463
44822
  if (opts["type.not"] !== void 0)
44464
44823
  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
44824
  if (opts["type.equals"] !== void 0)
44470
44825
  args.type__equals = opts["type.equals"];
44471
44826
  if (opts["type.contains"] !== void 0)
@@ -44489,8 +44844,6 @@ Examples:
44489
44844
  "skip",
44490
44845
  "id",
44491
44846
  "id__not",
44492
- "id__isNull",
44493
- "id__isNotNull",
44494
44847
  "id__equals",
44495
44848
  "id__contains",
44496
44849
  "id__startsWith",
@@ -44499,24 +44852,20 @@ Examples:
44499
44852
  "status__in",
44500
44853
  "name",
44501
44854
  "name__not",
44502
- "name__isNull",
44503
- "name__isNotNull",
44504
44855
  "name__equals",
44505
44856
  "name__contains",
44506
44857
  "name__startsWith",
44507
44858
  "name__endWith",
44508
44859
  "description",
44509
44860
  "description__not",
44510
- "description__isNull",
44511
- "description__isNotNull",
44512
44861
  "description__equals",
44513
44862
  "description__contains",
44514
44863
  "description__startsWith",
44515
44864
  "description__endWith",
44865
+ "description__isNull",
44866
+ "description__isNotNull",
44516
44867
  "type",
44517
44868
  "type__not",
44518
- "type__isNull",
44519
- "type__isNotNull",
44520
44869
  "type__equals",
44521
44870
  "type__contains",
44522
44871
  "type__startsWith",
@@ -44525,7 +44874,7 @@ Examples:
44525
44874
  ]
44526
44875
  });
44527
44876
  });
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>", `
44877
+ 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
44878
  How the periodic credit allowance is granted for partial billing periods.
44530
44879
 
44531
44880
  - \`prorated\` (default): the granted credits are prorated to the elapsed period.
@@ -44613,7 +44962,7 @@ Examples:
44613
44962
  queryParamKeys: ["price_book_id"]
44614
44963
  });
44615
44964
  });
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", `
44965
+ 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
44966
  Examples:
44618
44967
  hyperline products update --id <id> --name <name>
44619
44968
  hyperline products update --id <id> --name <name> --description <description> --public-description <public_description>
@@ -44717,6 +45066,80 @@ Examples:
44717
45066
  });
44718
45067
  }
44719
45068
 
45069
+ // build/commands/generated/products-features.js
45070
+ function registerProducts_FeaturesCommands(parent) {
45071
+ const resource = parent.command("products-features").description("Manage products > features");
45072
+ resource.command("list-product-features").description(`List feature values assigned to a product.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
45073
+ Examples:
45074
+ hyperline products-features list-product-features --id <id>`).action(async (opts) => {
45075
+ const ctx = resource.parent?.opts()._ctx;
45076
+ if (!ctx) {
45077
+ process.stderr.write("Error: Not authenticated\n");
45078
+ process.exit(1);
45079
+ }
45080
+ const args = {};
45081
+ if (opts.id !== void 0)
45082
+ args.id = opts.id;
45083
+ await ctx.execute({
45084
+ method: "GET",
45085
+ path: "/v1/products/{id}/features",
45086
+ args,
45087
+ queryParamKeys: []
45088
+ });
45089
+ });
45090
+ 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", `
45091
+ Examples:
45092
+ hyperline products-features set-product-feature --id <id> --code <code> --value
45093
+ hyperline products-features set-product-feature --id <id> --code <code> --value --output json`).action(async (opts) => {
45094
+ const ctx = resource.parent?.opts()._ctx;
45095
+ if (!ctx) {
45096
+ process.stderr.write("Error: Not authenticated\n");
45097
+ process.exit(1);
45098
+ }
45099
+ const args = {};
45100
+ if (opts.id !== void 0)
45101
+ args.id = opts.id;
45102
+ if (opts.code !== void 0)
45103
+ args.code = opts.code;
45104
+ if (opts.value !== void 0)
45105
+ args.value = true;
45106
+ await ctx.execute({
45107
+ method: "PUT",
45108
+ path: "/v1/products/{id}/features/{code}",
45109
+ args,
45110
+ queryParamKeys: []
45111
+ });
45112
+ });
45113
+ 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", `
45114
+ Examples:
45115
+ hyperline products-features delete-product-feature --id <id> --code <code>
45116
+ hyperline products-features delete-product-feature --id <id> --code <code> --output json`).action(async (opts) => {
45117
+ const ctx = resource.parent?.opts()._ctx;
45118
+ if (!ctx) {
45119
+ process.stderr.write("Error: Not authenticated\n");
45120
+ process.exit(1);
45121
+ }
45122
+ const args = {};
45123
+ if (opts.id !== void 0)
45124
+ args.id = opts.id;
45125
+ if (opts.code !== void 0)
45126
+ args.code = opts.code;
45127
+ if (!opts.yes) {
45128
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
45129
+ if (!confirmed) {
45130
+ process.stdout.write("Aborted.\n");
45131
+ return;
45132
+ }
45133
+ }
45134
+ await ctx.execute({
45135
+ method: "DELETE",
45136
+ path: "/v1/products/{id}/features/{code}",
45137
+ args,
45138
+ queryParamKeys: []
45139
+ });
45140
+ });
45141
+ }
45142
+
44720
45143
  // build/commands/generated/quotes.js
44721
45144
  function registerQuotesCommands(parent) {
44722
45145
  const resource = parent.command("quotes").description("Manage quotes");
@@ -44726,12 +45149,12 @@ Quote status.
44726
45149
  - \`draft\`: The quote is a draft.
44727
45150
  - \`approved\`: The quote is approved and ready to be sent to the customer.
44728
45151
  - \`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.
45152
+ `).option("--owner-email <value>", `Email address of the Hyperline user acting as the quote owner. The user must be a member of your Hyperline account. The owner requests approval when the quote is finalized using an API key or finalized during creation. If not specified, the Hyperline account owner will be assigned.`).requiredOption("--customer-id <value>", `ID of the customer.`).option("--invoicing-entity-id <value>", `ID of the invoicing entity attached to the quote.`).option("--catalog-version-id <value>", `ID of a published catalog version to price every product of the quote from, instead of the live products catalog. A product's own \`catalog_version_id\` takes precedence, and explicit \`prices\` always win over both.`).option("--comments <value>", `Custom comments displayed on the quote.`).option("--terms <value>", `Custom quotation terms.`).option("--amount <number>", `Estimated contract value. When computed, a subscription phase with neither an end date nor a fixed duration is counted over a conventional horizon: the contract's length for a single phase on a contract that has one, otherwise 12 months or the longest billing interval if longer. That horizon is not an end date: the subscription can run past it. Usage-based and connected seat lines are priced at their estimated quantity when it exceeds the committed quantity and, for seats, the live seat count. For subscription quotes, defaults to the computed subscription value if not specified. For one-off quotes, this field is ignored \u2014 the amount is always derived from the linked invoice's \`amount_excluding_tax\`.`).option("--contract-value <number>", `What the customer pays over the contract, each coupon counted on the invoices it applies to. Computed from the subscription for \`subscription\` and \`subscription_update\` quotes, unless set manually. Not set on \`one_off\` quotes. When specified, overrides the computed value.`).option("--collect-payment-details <value>", `Collect customer payment method mandate during signature flow or not.`).option("--collect-custom-property-ids <json>", `IDs of the customer custom properties required to be filled during the signature flow.`).option("--contract-clause-ids <json>", `IDs of the contract clauses used in the quote terms.`).option("--require-tax-id <value>", `Require the customer to provide a tax ID during the signature flow.`).option("--display-quote-value <value>", `Display the total quote value on the quote.`).option("--display-quote-value-with-tax <value>", `Display the total quote value including tax on the quote. Only applies to \`one_off\` quotes.`).option("--display-taxes <value>", `Display tax breakdown on the quote.`).option("--display-price-tiers <value>", `Controls which price tiers are displayed on the quote.
44730
45153
 
44731
45154
  - \`all\`: Display all pricing tiers.
44732
45155
  - \`matching\`: Only display the tiers used to compute the price based on quantity.
44733
45156
  - \`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", `
45157
+ `).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
45158
  Examples:
44736
45159
  hyperline quotes create --customer-id <customer_id>
44737
45160
  hyperline quotes create --customer-id <customer_id> --status <status> --owner-email <owner_email>
@@ -44770,6 +45193,8 @@ Examples:
44770
45193
  args.display_price_tiers = opts.displayPriceTiers;
44771
45194
  if (opts.displayPhaseValue !== void 0)
44772
45195
  args.display_phase_value = opts.displayPhaseValue;
45196
+ if (opts.displayDiscountsOnTotal !== void 0)
45197
+ args.display_discounts_on_total = opts.displayDiscountsOnTotal;
44773
45198
  if (opts.displayFirstInvoiceAmount !== void 0)
44774
45199
  args.display_first_invoice_amount = opts.displayFirstInvoiceAmount;
44775
45200
  if (opts.displayDocumentsInPreview !== void 0)
@@ -44801,7 +45226,7 @@ Examples:
44801
45226
  queryParamKeys: []
44802
45227
  });
44803
45228
  });
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", `
45229
+ 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
45230
  Examples:
44806
45231
  hyperline quotes list
44807
45232
  hyperline quotes list --take <take> --id <id>`).action(async (opts) => {
@@ -44815,10 +45240,6 @@ Examples:
44815
45240
  args.id = opts.id;
44816
45241
  if (opts["id.not"] !== void 0)
44817
45242
  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
45243
  if (opts["id.equals"] !== void 0)
44823
45244
  args.id__equals = opts["id.equals"];
44824
45245
  if (opts["id.contains"] !== void 0)
@@ -44831,10 +45252,6 @@ Examples:
44831
45252
  args.number = opts.number;
44832
45253
  if (opts["number.not"] !== void 0)
44833
45254
  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
45255
  if (opts["number.equals"] !== void 0)
44839
45256
  args.number__equals = opts["number.equals"];
44840
45257
  if (opts["number.contains"] !== void 0)
@@ -44851,10 +45268,6 @@ Examples:
44851
45268
  args.customer_id = opts.customerId;
44852
45269
  if (opts["customerId.not"] !== void 0)
44853
45270
  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
45271
  if (opts["customerId.equals"] !== void 0)
44859
45272
  args.customer_id__equals = opts["customerId.equals"];
44860
45273
  if (opts["customerId.contains"] !== void 0)
@@ -44867,10 +45280,6 @@ Examples:
44867
45280
  args.template_id = opts.templateId;
44868
45281
  if (opts["templateId.not"] !== void 0)
44869
45282
  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
45283
  if (opts["templateId.equals"] !== void 0)
44875
45284
  args.template_id__equals = opts["templateId.equals"];
44876
45285
  if (opts["templateId.contains"] !== void 0)
@@ -44879,14 +45288,14 @@ Examples:
44879
45288
  args.template_id__startsWith = opts["templateId.startsWith"];
44880
45289
  if (opts["templateId.endWith"] !== void 0)
44881
45290
  args.template_id__endWith = opts["templateId.endWith"];
45291
+ if (opts["templateId.isNull"] !== void 0)
45292
+ args.template_id__isNull = opts["templateId.isNull"];
45293
+ if (opts["templateId.isNotNull"] !== void 0)
45294
+ args.template_id__isNotNull = opts["templateId.isNotNull"];
44882
45295
  if (opts.crmOpportunityId !== void 0)
44883
45296
  args.crm_opportunity_id = opts.crmOpportunityId;
44884
45297
  if (opts["crmOpportunityId.not"] !== void 0)
44885
45298
  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
45299
  if (opts["crmOpportunityId.equals"] !== void 0)
44891
45300
  args.crm_opportunity_id__equals = opts["crmOpportunityId.equals"];
44892
45301
  if (opts["crmOpportunityId.contains"] !== void 0)
@@ -44895,30 +45304,16 @@ Examples:
44895
45304
  args.crm_opportunity_id__startsWith = opts["crmOpportunityId.startsWith"];
44896
45305
  if (opts["crmOpportunityId.endWith"] !== void 0)
44897
45306
  args.crm_opportunity_id__endWith = opts["crmOpportunityId.endWith"];
45307
+ if (opts["crmOpportunityId.isNull"] !== void 0)
45308
+ args.crm_opportunity_id__isNull = opts["crmOpportunityId.isNull"];
45309
+ if (opts["crmOpportunityId.isNotNull"] !== void 0)
45310
+ args.crm_opportunity_id__isNotNull = opts["crmOpportunityId.isNotNull"];
44898
45311
  if (opts.type !== void 0)
44899
45312
  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
45313
  if (opts.updatedAt !== void 0)
44915
45314
  args.updated_at = opts.updatedAt;
44916
45315
  if (opts["updatedAt.not"] !== void 0)
44917
45316
  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
45317
  if (opts["updatedAt.equals"] !== void 0)
44923
45318
  args.updated_at__equals = opts["updatedAt.equals"];
44924
45319
  if (opts["updatedAt.lt"] !== void 0)
@@ -44942,16 +45337,12 @@ Examples:
44942
45337
  "skip",
44943
45338
  "id",
44944
45339
  "id__not",
44945
- "id__isNull",
44946
- "id__isNotNull",
44947
45340
  "id__equals",
44948
45341
  "id__contains",
44949
45342
  "id__startsWith",
44950
45343
  "id__endWith",
44951
45344
  "number",
44952
45345
  "number__not",
44953
- "number__isNull",
44954
- "number__isNotNull",
44955
45346
  "number__equals",
44956
45347
  "number__contains",
44957
45348
  "number__startsWith",
@@ -44960,40 +45351,29 @@ Examples:
44960
45351
  "status__in",
44961
45352
  "customer_id",
44962
45353
  "customer_id__not",
44963
- "customer_id__isNull",
44964
- "customer_id__isNotNull",
44965
45354
  "customer_id__equals",
44966
45355
  "customer_id__contains",
44967
45356
  "customer_id__startsWith",
44968
45357
  "customer_id__endWith",
44969
45358
  "template_id",
44970
45359
  "template_id__not",
44971
- "template_id__isNull",
44972
- "template_id__isNotNull",
44973
45360
  "template_id__equals",
44974
45361
  "template_id__contains",
44975
45362
  "template_id__startsWith",
44976
45363
  "template_id__endWith",
45364
+ "template_id__isNull",
45365
+ "template_id__isNotNull",
44977
45366
  "crm_opportunity_id",
44978
45367
  "crm_opportunity_id__not",
44979
- "crm_opportunity_id__isNull",
44980
- "crm_opportunity_id__isNotNull",
44981
45368
  "crm_opportunity_id__equals",
44982
45369
  "crm_opportunity_id__contains",
44983
45370
  "crm_opportunity_id__startsWith",
44984
45371
  "crm_opportunity_id__endWith",
45372
+ "crm_opportunity_id__isNull",
45373
+ "crm_opportunity_id__isNotNull",
44985
45374
  "type",
44986
- "type__not",
44987
- "type__isNull",
44988
- "type__isNotNull",
44989
- "type__equals",
44990
- "type__contains",
44991
- "type__startsWith",
44992
- "type__endWith",
44993
45375
  "updated_at",
44994
45376
  "updated_at__not",
44995
- "updated_at__isNull",
44996
- "updated_at__isNotNull",
44997
45377
  "updated_at__equals",
44998
45378
  "updated_at__lt",
44999
45379
  "updated_at__lte",
@@ -45020,12 +45400,12 @@ Examples:
45020
45400
  queryParamKeys: []
45021
45401
  });
45022
45402
  });
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.
45403
+ resource.command("update").description(`Update quote-level fields before a quote is finalized. On draft quotes, pass \`subscription\` inline \u2014 the full configuration, not a reference to an existing subscription \u2014 to create or replace the draft subscription configuration, or pass \`invoice\` on a one-off quote to replace the linked draft invoice. For quotes created from \`template_id\`, use this tool for subscription overrides such as dates, contract terms, products, phases, coupons, discounts, prices, seats, and subscription custom properties. Omit \`terms\`, \`comments\`, and \`contract_clause_ids\` unless deliberately overriding template content. Discover product and price configuration IDs with \`get_catalog_context\`.`).requiredOption("--id <value>", `id parameter`).option("--owner-email <value>", `Email address of the Hyperline user acting as the quote owner. The user must be a member of your Hyperline account. The owner requests approval when the quote is finalized using an API key or finalized during creation.`).option("--catalog-version-id <value>", `ID of a published catalog version to price every product of the quote from, instead of the live products catalog. A product's own \`catalog_version_id\` takes precedence, and explicit \`prices\` always win over both.`).option("--comments <value>", `Custom comments displayed on the quote.`).option("--terms <value>", `Custom quotation terms.`).option("--amount <number>", `Estimated contract value. When computed, a subscription phase with neither an end date nor a fixed duration is counted over a conventional horizon: the contract's length for a single phase on a contract that has one, otherwise 12 months or the longest billing interval if longer. That horizon is not an end date: the subscription can run past it. Usage-based and connected seat lines are priced at their estimated quantity when it exceeds the committed quantity and, for seats, the live seat count. Set to \`null\` to clear the manually set value.`).option("--contract-value <number>", `What the customer pays over the contract, each coupon counted on the invoices it applies to. Computed from the subscription for \`subscription\` and \`subscription_update\` quotes, unless set manually. Not set on \`one_off\` quotes. When specified, overrides the computed value. Set to \`null\` to go back to the computed value.`).option("--collect-payment-details <value>", `Collect customer payment method mandate during signature flow or not.`).option("--collect-custom-property-ids <json>", `IDs of the customer custom properties required to be filled during the signature flow.`).option("--contract-clause-ids <json>", `IDs of the contract clauses used in the quote terms.`).option("--require-tax-id <value>", `Require the customer to provide a tax ID during the signature flow.`).option("--display-quote-value <value>", `Display the total quote value on the quote.`).option("--display-quote-value-with-tax <value>", `Display the total quote value including tax on the quote. Only applies to \`one_off\` quotes.`).option("--display-taxes <value>", `Display tax breakdown on the quote.`).option("--display-price-tiers <value>", `Controls which price tiers are displayed on the quote.
45024
45404
 
45025
45405
  - \`all\`: Display all pricing tiers.
45026
45406
  - \`matching\`: Only display the tiers used to compute the price based on quantity.
45027
45407
  - \`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", `
45408
+ `).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
45409
  Examples:
45030
45410
  hyperline quotes update --id <id>
45031
45411
  hyperline quotes update --id <id> --owner-email <owner_email> --catalog-version-id <catalog_version_id>
@@ -45060,6 +45440,8 @@ Examples:
45060
45440
  args.display_price_tiers = opts.displayPriceTiers;
45061
45441
  if (opts.displayPhaseValue !== void 0)
45062
45442
  args.display_phase_value = opts.displayPhaseValue;
45443
+ if (opts.displayDiscountsOnTotal !== void 0)
45444
+ args.display_discounts_on_total = opts.displayDiscountsOnTotal;
45063
45445
  if (opts.displayFirstInvoiceAmount !== void 0)
45064
45446
  args.display_first_invoice_amount = opts.displayFirstInvoiceAmount;
45065
45447
  if (opts.displayDocumentsInPreview !== void 0)
@@ -45153,6 +45535,25 @@ Examples:
45153
45535
  queryParamKeys: []
45154
45536
  });
45155
45537
  });
45538
+ 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", `
45539
+ Examples:
45540
+ hyperline quotes redraft --id <id>
45541
+ hyperline quotes redraft --id <id> --output json`).action(async (opts) => {
45542
+ const ctx = resource.parent?.opts()._ctx;
45543
+ if (!ctx) {
45544
+ process.stderr.write("Error: Not authenticated\n");
45545
+ process.exit(1);
45546
+ }
45547
+ const args = {};
45548
+ if (opts.id !== void 0)
45549
+ args.id = opts.id;
45550
+ await ctx.execute({
45551
+ method: "POST",
45552
+ path: "/v1/quotes/{id}/redraft",
45553
+ args,
45554
+ queryParamKeys: []
45555
+ });
45556
+ });
45156
45557
  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
45558
  Examples:
45158
45559
  hyperline quotes send --id <id>
@@ -45350,7 +45751,7 @@ Examples:
45350
45751
  // build/commands/generated/quotes-templates.js
45351
45752
  function registerQuotes_TemplatesCommands(parent) {
45352
45753
  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", `
45754
+ 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
45755
  Examples:
45355
45756
  hyperline quotes-templates list-quote-templates
45356
45757
  hyperline quotes-templates list-quote-templates --take <take> --id <id>`).action(async (opts) => {
@@ -45364,10 +45765,6 @@ Examples:
45364
45765
  args.id = opts.id;
45365
45766
  if (opts["id.not"] !== void 0)
45366
45767
  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
45768
  if (opts["id.equals"] !== void 0)
45372
45769
  args.id__equals = opts["id.equals"];
45373
45770
  if (opts["id.contains"] !== void 0)
@@ -45380,10 +45777,6 @@ Examples:
45380
45777
  args.name = opts.name;
45381
45778
  if (opts["name.not"] !== void 0)
45382
45779
  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
45780
  if (opts["name.equals"] !== void 0)
45388
45781
  args.name__equals = opts["name.equals"];
45389
45782
  if (opts["name.contains"] !== void 0)
@@ -45396,10 +45789,6 @@ Examples:
45396
45789
  args.subscription_template_id = opts.subscriptionTemplateId;
45397
45790
  if (opts["subscriptionTemplateId.not"] !== void 0)
45398
45791
  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
45792
  if (opts["subscriptionTemplateId.equals"] !== void 0)
45404
45793
  args.subscription_template_id__equals = opts["subscriptionTemplateId.equals"];
45405
45794
  if (opts["subscriptionTemplateId.contains"] !== void 0)
@@ -45408,6 +45797,10 @@ Examples:
45408
45797
  args.subscription_template_id__startsWith = opts["subscriptionTemplateId.startsWith"];
45409
45798
  if (opts["subscriptionTemplateId.endWith"] !== void 0)
45410
45799
  args.subscription_template_id__endWith = opts["subscriptionTemplateId.endWith"];
45800
+ if (opts["subscriptionTemplateId.isNull"] !== void 0)
45801
+ args.subscription_template_id__isNull = opts["subscriptionTemplateId.isNull"];
45802
+ if (opts["subscriptionTemplateId.isNotNull"] !== void 0)
45803
+ args.subscription_template_id__isNotNull = opts["subscriptionTemplateId.isNotNull"];
45411
45804
  if (opts.search !== void 0)
45412
45805
  args.search = opts.search;
45413
45806
  if (opts.take !== void 0)
@@ -45423,28 +45816,24 @@ Examples:
45423
45816
  "skip",
45424
45817
  "id",
45425
45818
  "id__not",
45426
- "id__isNull",
45427
- "id__isNotNull",
45428
45819
  "id__equals",
45429
45820
  "id__contains",
45430
45821
  "id__startsWith",
45431
45822
  "id__endWith",
45432
45823
  "name",
45433
45824
  "name__not",
45434
- "name__isNull",
45435
- "name__isNotNull",
45436
45825
  "name__equals",
45437
45826
  "name__contains",
45438
45827
  "name__startsWith",
45439
45828
  "name__endWith",
45440
45829
  "subscription_template_id",
45441
45830
  "subscription_template_id__not",
45442
- "subscription_template_id__isNull",
45443
- "subscription_template_id__isNotNull",
45444
45831
  "subscription_template_id__equals",
45445
45832
  "subscription_template_id__contains",
45446
45833
  "subscription_template_id__startsWith",
45447
45834
  "subscription_template_id__endWith",
45835
+ "subscription_template_id__isNull",
45836
+ "subscription_template_id__isNotNull",
45448
45837
  "search"
45449
45838
  ]
45450
45839
  });
@@ -45846,7 +46235,7 @@ Examples:
45846
46235
  queryParamKeys: []
45847
46236
  });
45848
46237
  });
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>", `
46238
+ 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
46239
  Subscription status filter.
45851
46240
 
45852
46241
  - \`active\`, \`pending\`, \`paused\`, \`errored\`, \`cancelled\`, \`draft\`, \`voided\`, \`archived\`: match that status.
@@ -45855,7 +46244,7 @@ Subscription status filter.
45855
46244
  - \`any\`: every status, no exclusion.
45856
46245
 
45857
46246
  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", `
46247
+ `).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
46248
  Examples:
45860
46249
  hyperline subscriptions list
45861
46250
  hyperline subscriptions list --take <take> --activation-strategy <activation_strategy>`).action(async (opts) => {
@@ -45877,10 +46266,6 @@ Examples:
45877
46266
  args.currency = opts.currency;
45878
46267
  if (opts["currency.not"] !== void 0)
45879
46268
  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
46269
  if (opts["currency.equals"] !== void 0)
45885
46270
  args.currency__equals = opts["currency.equals"];
45886
46271
  if (opts["currency.contains"] !== void 0)
@@ -45893,10 +46278,6 @@ Examples:
45893
46278
  args.plan_id = opts.planId;
45894
46279
  if (opts["planId.not"] !== void 0)
45895
46280
  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
46281
  if (opts["planId.equals"] !== void 0)
45901
46282
  args.plan_id__equals = opts["planId.equals"];
45902
46283
  if (opts["planId.contains"] !== void 0)
@@ -45905,14 +46286,14 @@ Examples:
45905
46286
  args.plan_id__startsWith = opts["planId.startsWith"];
45906
46287
  if (opts["planId.endWith"] !== void 0)
45907
46288
  args.plan_id__endWith = opts["planId.endWith"];
46289
+ if (opts["planId.isNull"] !== void 0)
46290
+ args.plan_id__isNull = opts["planId.isNull"];
46291
+ if (opts["planId.isNotNull"] !== void 0)
46292
+ args.plan_id__isNotNull = opts["planId.isNotNull"];
45908
46293
  if (opts.originalQuoteId !== void 0)
45909
46294
  args.original_quote_id = opts.originalQuoteId;
45910
46295
  if (opts["originalQuoteId.not"] !== void 0)
45911
46296
  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
46297
  if (opts["originalQuoteId.equals"] !== void 0)
45917
46298
  args.original_quote_id__equals = opts["originalQuoteId.equals"];
45918
46299
  if (opts["originalQuoteId.contains"] !== void 0)
@@ -45921,14 +46302,14 @@ Examples:
45921
46302
  args.original_quote_id__startsWith = opts["originalQuoteId.startsWith"];
45922
46303
  if (opts["originalQuoteId.endWith"] !== void 0)
45923
46304
  args.original_quote_id__endWith = opts["originalQuoteId.endWith"];
46305
+ if (opts["originalQuoteId.isNull"] !== void 0)
46306
+ args.original_quote_id__isNull = opts["originalQuoteId.isNull"];
46307
+ if (opts["originalQuoteId.isNotNull"] !== void 0)
46308
+ args.original_quote_id__isNotNull = opts["originalQuoteId.isNotNull"];
45924
46309
  if (opts.customerId !== void 0)
45925
46310
  args.customer_id = opts.customerId;
45926
46311
  if (opts["customerId.not"] !== void 0)
45927
46312
  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
46313
  if (opts["customerId.equals"] !== void 0)
45933
46314
  args.customer_id__equals = opts["customerId.equals"];
45934
46315
  if (opts["customerId.contains"] !== void 0)
@@ -45937,16 +46318,16 @@ Examples:
45937
46318
  args.customer_id__startsWith = opts["customerId.startsWith"];
45938
46319
  if (opts["customerId.endWith"] !== void 0)
45939
46320
  args.customer_id__endWith = opts["customerId.endWith"];
46321
+ if (opts["customerId.isNull"] !== void 0)
46322
+ args.customer_id__isNull = opts["customerId.isNull"];
46323
+ if (opts["customerId.isNotNull"] !== void 0)
46324
+ args.customer_id__isNotNull = opts["customerId.isNotNull"];
45940
46325
  if (opts.invoicingEntityId !== void 0)
45941
46326
  args.invoicing_entity_id = opts.invoicingEntityId;
45942
46327
  if (opts.purchaseOrder !== void 0)
45943
46328
  args.purchase_order = opts.purchaseOrder;
45944
46329
  if (opts["purchaseOrder.not"] !== void 0)
45945
46330
  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
46331
  if (opts["purchaseOrder.equals"] !== void 0)
45951
46332
  args.purchase_order__equals = opts["purchaseOrder.equals"];
45952
46333
  if (opts["purchaseOrder.contains"] !== void 0)
@@ -45955,6 +46336,10 @@ Examples:
45955
46336
  args.purchase_order__startsWith = opts["purchaseOrder.startsWith"];
45956
46337
  if (opts["purchaseOrder.endWith"] !== void 0)
45957
46338
  args.purchase_order__endWith = opts["purchaseOrder.endWith"];
46339
+ if (opts["purchaseOrder.isNull"] !== void 0)
46340
+ args.purchase_order__isNull = opts["purchaseOrder.isNull"];
46341
+ if (opts["purchaseOrder.isNotNull"] !== void 0)
46342
+ args.purchase_order__isNotNull = opts["purchaseOrder.isNotNull"];
45958
46343
  if (opts.customProperties !== void 0)
45959
46344
  args.custom_properties = opts.customProperties;
45960
46345
  if (opts.invoiceDrafts !== void 0)
@@ -45965,10 +46350,6 @@ Examples:
45965
46350
  args.updated_at = opts.updatedAt;
45966
46351
  if (opts["updatedAt.not"] !== void 0)
45967
46352
  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
46353
  if (opts["updatedAt.equals"] !== void 0)
45973
46354
  args.updated_at__equals = opts["updatedAt.equals"];
45974
46355
  if (opts["updatedAt.lt"] !== void 0)
@@ -45979,6 +46360,34 @@ Examples:
45979
46360
  args.updated_at__gt = opts["updatedAt.gt"];
45980
46361
  if (opts["updatedAt.gte"] !== void 0)
45981
46362
  args.updated_at__gte = opts["updatedAt.gte"];
46363
+ if (opts.cancelAt !== void 0)
46364
+ args.cancel_at = opts.cancelAt;
46365
+ if (opts["cancelAt.not"] !== void 0)
46366
+ args.cancel_at__not = opts["cancelAt.not"];
46367
+ if (opts["cancelAt.equals"] !== void 0)
46368
+ args.cancel_at__equals = opts["cancelAt.equals"];
46369
+ if (opts["cancelAt.lt"] !== void 0)
46370
+ args.cancel_at__lt = opts["cancelAt.lt"];
46371
+ if (opts["cancelAt.lte"] !== void 0)
46372
+ args.cancel_at__lte = opts["cancelAt.lte"];
46373
+ if (opts["cancelAt.gt"] !== void 0)
46374
+ args.cancel_at__gt = opts["cancelAt.gt"];
46375
+ if (opts["cancelAt.gte"] !== void 0)
46376
+ args.cancel_at__gte = opts["cancelAt.gte"];
46377
+ if (opts["cancelAt.isNull"] !== void 0)
46378
+ args.cancel_at__isNull = opts["cancelAt.isNull"];
46379
+ if (opts["cancelAt.isNotNull"] !== void 0)
46380
+ args.cancel_at__isNotNull = opts["cancelAt.isNotNull"];
46381
+ if (opts["contractStart.gte"] !== void 0)
46382
+ args.contract_start__gte = opts["contractStart.gte"];
46383
+ if (opts["contractStart.lte"] !== void 0)
46384
+ args.contract_start__lte = opts["contractStart.lte"];
46385
+ if (opts["contractEnd.gte"] !== void 0)
46386
+ args.contract_end__gte = opts["contractEnd.gte"];
46387
+ if (opts["contractEnd.lte"] !== void 0)
46388
+ args.contract_end__lte = opts["contractEnd.lte"];
46389
+ if (opts.renewAutomatically !== void 0)
46390
+ args.renew_automatically = opts.renewAutomatically;
45982
46391
  if (opts.take !== void 0)
45983
46392
  args.take = Number(opts.take);
45984
46393
  if (opts.skip !== void 0)
@@ -45996,57 +46405,67 @@ Examples:
45996
46405
  "status__in",
45997
46406
  "currency",
45998
46407
  "currency__not",
45999
- "currency__isNull",
46000
- "currency__isNotNull",
46001
46408
  "currency__equals",
46002
46409
  "currency__contains",
46003
46410
  "currency__startsWith",
46004
46411
  "currency__endWith",
46005
46412
  "plan_id",
46006
46413
  "plan_id__not",
46007
- "plan_id__isNull",
46008
- "plan_id__isNotNull",
46009
46414
  "plan_id__equals",
46010
46415
  "plan_id__contains",
46011
46416
  "plan_id__startsWith",
46012
46417
  "plan_id__endWith",
46418
+ "plan_id__isNull",
46419
+ "plan_id__isNotNull",
46013
46420
  "original_quote_id",
46014
46421
  "original_quote_id__not",
46015
- "original_quote_id__isNull",
46016
- "original_quote_id__isNotNull",
46017
46422
  "original_quote_id__equals",
46018
46423
  "original_quote_id__contains",
46019
46424
  "original_quote_id__startsWith",
46020
46425
  "original_quote_id__endWith",
46426
+ "original_quote_id__isNull",
46427
+ "original_quote_id__isNotNull",
46021
46428
  "customer_id",
46022
46429
  "customer_id__not",
46023
- "customer_id__isNull",
46024
- "customer_id__isNotNull",
46025
46430
  "customer_id__equals",
46026
46431
  "customer_id__contains",
46027
46432
  "customer_id__startsWith",
46028
46433
  "customer_id__endWith",
46434
+ "customer_id__isNull",
46435
+ "customer_id__isNotNull",
46029
46436
  "invoicing_entity_id",
46030
46437
  "purchase_order",
46031
46438
  "purchase_order__not",
46032
- "purchase_order__isNull",
46033
- "purchase_order__isNotNull",
46034
46439
  "purchase_order__equals",
46035
46440
  "purchase_order__contains",
46036
46441
  "purchase_order__startsWith",
46037
46442
  "purchase_order__endWith",
46443
+ "purchase_order__isNull",
46444
+ "purchase_order__isNotNull",
46038
46445
  "custom_properties",
46039
46446
  "invoice_drafts",
46040
46447
  "integration_entity_id",
46041
46448
  "updated_at",
46042
46449
  "updated_at__not",
46043
- "updated_at__isNull",
46044
- "updated_at__isNotNull",
46045
46450
  "updated_at__equals",
46046
46451
  "updated_at__lt",
46047
46452
  "updated_at__lte",
46048
46453
  "updated_at__gt",
46049
- "updated_at__gte"
46454
+ "updated_at__gte",
46455
+ "cancel_at",
46456
+ "cancel_at__not",
46457
+ "cancel_at__equals",
46458
+ "cancel_at__lt",
46459
+ "cancel_at__lte",
46460
+ "cancel_at__gt",
46461
+ "cancel_at__gte",
46462
+ "cancel_at__isNull",
46463
+ "cancel_at__isNotNull",
46464
+ "contract_start__gte",
46465
+ "contract_start__lte",
46466
+ "contract_end__gte",
46467
+ "contract_end__lte",
46468
+ "renew_automatically"
46050
46469
  ]
46051
46470
  });
46052
46471
  });
@@ -46328,7 +46747,7 @@ Examples:
46328
46747
  // build/commands/generated/subscriptions-transitions.js
46329
46748
  function registerSubscriptions_TransitionsCommands(parent) {
46330
46749
  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", `
46750
+ 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
46751
  Examples:
46333
46752
  hyperline subscriptions-transitions list-subscription-transitions
46334
46753
  hyperline subscriptions-transitions list-subscription-transitions --take <take> --status <status>`).action(async (opts) => {
@@ -46346,10 +46765,6 @@ Examples:
46346
46765
  args.source_subscription_id = opts.sourceSubscriptionId;
46347
46766
  if (opts["sourceSubscriptionId.not"] !== void 0)
46348
46767
  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
46768
  if (opts["sourceSubscriptionId.equals"] !== void 0)
46354
46769
  args.source_subscription_id__equals = opts["sourceSubscriptionId.equals"];
46355
46770
  if (opts["sourceSubscriptionId.contains"] !== void 0)
@@ -46362,10 +46777,6 @@ Examples:
46362
46777
  args.base_subscription_id = opts.baseSubscriptionId;
46363
46778
  if (opts["baseSubscriptionId.not"] !== void 0)
46364
46779
  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
46780
  if (opts["baseSubscriptionId.equals"] !== void 0)
46370
46781
  args.base_subscription_id__equals = opts["baseSubscriptionId.equals"];
46371
46782
  if (opts["baseSubscriptionId.contains"] !== void 0)
@@ -46378,10 +46789,6 @@ Examples:
46378
46789
  args.target_subscription_id = opts.targetSubscriptionId;
46379
46790
  if (opts["targetSubscriptionId.not"] !== void 0)
46380
46791
  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
46792
  if (opts["targetSubscriptionId.equals"] !== void 0)
46386
46793
  args.target_subscription_id__equals = opts["targetSubscriptionId.equals"];
46387
46794
  if (opts["targetSubscriptionId.contains"] !== void 0)
@@ -46390,14 +46797,14 @@ Examples:
46390
46797
  args.target_subscription_id__startsWith = opts["targetSubscriptionId.startsWith"];
46391
46798
  if (opts["targetSubscriptionId.endWith"] !== void 0)
46392
46799
  args.target_subscription_id__endWith = opts["targetSubscriptionId.endWith"];
46800
+ if (opts["targetSubscriptionId.isNull"] !== void 0)
46801
+ args.target_subscription_id__isNull = opts["targetSubscriptionId.isNull"];
46802
+ if (opts["targetSubscriptionId.isNotNull"] !== void 0)
46803
+ args.target_subscription_id__isNotNull = opts["targetSubscriptionId.isNotNull"];
46393
46804
  if (opts.transitionDate !== void 0)
46394
- args.transition_date = opts.transitionDate;
46395
- if (opts["transitionDate.not"] !== void 0)
46396
- 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"];
46805
+ args.transition_date = opts.transitionDate;
46806
+ if (opts["transitionDate.not"] !== void 0)
46807
+ args.transition_date__not = opts["transitionDate.not"];
46401
46808
  if (opts["transitionDate.equals"] !== void 0)
46402
46809
  args.transition_date__equals = opts["transitionDate.equals"];
46403
46810
  if (opts["transitionDate.lt"] !== void 0)
@@ -46408,14 +46815,14 @@ Examples:
46408
46815
  args.transition_date__gt = opts["transitionDate.gt"];
46409
46816
  if (opts["transitionDate.gte"] !== void 0)
46410
46817
  args.transition_date__gte = opts["transitionDate.gte"];
46818
+ if (opts["transitionDate.isNull"] !== void 0)
46819
+ args.transition_date__isNull = opts["transitionDate.isNull"];
46820
+ if (opts["transitionDate.isNotNull"] !== void 0)
46821
+ args.transition_date__isNotNull = opts["transitionDate.isNotNull"];
46411
46822
  if (opts.transitionedAt !== void 0)
46412
46823
  args.transitioned_at = opts.transitionedAt;
46413
46824
  if (opts["transitionedAt.not"] !== void 0)
46414
46825
  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
46826
  if (opts["transitionedAt.equals"] !== void 0)
46420
46827
  args.transitioned_at__equals = opts["transitionedAt.equals"];
46421
46828
  if (opts["transitionedAt.lt"] !== void 0)
@@ -46426,6 +46833,10 @@ Examples:
46426
46833
  args.transitioned_at__gt = opts["transitionedAt.gt"];
46427
46834
  if (opts["transitionedAt.gte"] !== void 0)
46428
46835
  args.transitioned_at__gte = opts["transitionedAt.gte"];
46836
+ if (opts["transitionedAt.isNull"] !== void 0)
46837
+ args.transitioned_at__isNull = opts["transitionedAt.isNull"];
46838
+ if (opts["transitionedAt.isNotNull"] !== void 0)
46839
+ args.transitioned_at__isNotNull = opts["transitionedAt.isNotNull"];
46429
46840
  if (opts.take !== void 0)
46430
46841
  args.take = Number(opts.take);
46431
46842
  if (opts.skip !== void 0)
@@ -46441,46 +46852,42 @@ Examples:
46441
46852
  "status__in",
46442
46853
  "source_subscription_id",
46443
46854
  "source_subscription_id__not",
46444
- "source_subscription_id__isNull",
46445
- "source_subscription_id__isNotNull",
46446
46855
  "source_subscription_id__equals",
46447
46856
  "source_subscription_id__contains",
46448
46857
  "source_subscription_id__startsWith",
46449
46858
  "source_subscription_id__endWith",
46450
46859
  "base_subscription_id",
46451
46860
  "base_subscription_id__not",
46452
- "base_subscription_id__isNull",
46453
- "base_subscription_id__isNotNull",
46454
46861
  "base_subscription_id__equals",
46455
46862
  "base_subscription_id__contains",
46456
46863
  "base_subscription_id__startsWith",
46457
46864
  "base_subscription_id__endWith",
46458
46865
  "target_subscription_id",
46459
46866
  "target_subscription_id__not",
46460
- "target_subscription_id__isNull",
46461
- "target_subscription_id__isNotNull",
46462
46867
  "target_subscription_id__equals",
46463
46868
  "target_subscription_id__contains",
46464
46869
  "target_subscription_id__startsWith",
46465
46870
  "target_subscription_id__endWith",
46871
+ "target_subscription_id__isNull",
46872
+ "target_subscription_id__isNotNull",
46466
46873
  "transition_date",
46467
46874
  "transition_date__not",
46468
- "transition_date__isNull",
46469
- "transition_date__isNotNull",
46470
46875
  "transition_date__equals",
46471
46876
  "transition_date__lt",
46472
46877
  "transition_date__lte",
46473
46878
  "transition_date__gt",
46474
46879
  "transition_date__gte",
46880
+ "transition_date__isNull",
46881
+ "transition_date__isNotNull",
46475
46882
  "transitioned_at",
46476
46883
  "transitioned_at__not",
46477
- "transitioned_at__isNull",
46478
- "transitioned_at__isNotNull",
46479
46884
  "transitioned_at__equals",
46480
46885
  "transitioned_at__lt",
46481
46886
  "transitioned_at__lte",
46482
46887
  "transitioned_at__gt",
46483
- "transitioned_at__gte"
46888
+ "transitioned_at__gte",
46889
+ "transitioned_at__isNull",
46890
+ "transitioned_at__isNotNull"
46484
46891
  ]
46485
46892
  });
46486
46893
  });
@@ -46558,7 +46965,7 @@ Examples:
46558
46965
  // build/commands/generated/taxes.js
46559
46966
  function registerTaxesCommands(parent) {
46560
46967
  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", `
46968
+ 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
46969
  Examples:
46563
46970
  hyperline taxes list-tax-rates
46564
46971
  hyperline taxes list-tax-rates --take <take> --id <id>`).action(async (opts) => {
@@ -46572,10 +46979,6 @@ Examples:
46572
46979
  args.id = opts.id;
46573
46980
  if (opts["id.not"] !== void 0)
46574
46981
  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
46982
  if (opts["id.equals"] !== void 0)
46580
46983
  args.id__equals = opts["id.equals"];
46581
46984
  if (opts["id.contains"] !== void 0)
@@ -46588,10 +46991,6 @@ Examples:
46588
46991
  args.name = opts.name;
46589
46992
  if (opts["name.not"] !== void 0)
46590
46993
  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
46994
  if (opts["name.equals"] !== void 0)
46596
46995
  args.name__equals = opts["name.equals"];
46597
46996
  if (opts["name.contains"] !== void 0)
@@ -46600,14 +46999,14 @@ Examples:
46600
46999
  args.name__startsWith = opts["name.startsWith"];
46601
47000
  if (opts["name.endWith"] !== void 0)
46602
47001
  args.name__endWith = opts["name.endWith"];
47002
+ if (opts["name.isNull"] !== void 0)
47003
+ args.name__isNull = opts["name.isNull"];
47004
+ if (opts["name.isNotNull"] !== void 0)
47005
+ args.name__isNotNull = opts["name.isNotNull"];
46603
47006
  if (opts.description !== void 0)
46604
47007
  args.description = opts.description;
46605
47008
  if (opts["description.not"] !== void 0)
46606
47009
  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
47010
  if (opts["description.equals"] !== void 0)
46612
47011
  args.description__equals = opts["description.equals"];
46613
47012
  if (opts["description.contains"] !== void 0)
@@ -46616,14 +47015,14 @@ Examples:
46616
47015
  args.description__startsWith = opts["description.startsWith"];
46617
47016
  if (opts["description.endWith"] !== void 0)
46618
47017
  args.description__endWith = opts["description.endWith"];
47018
+ if (opts["description.isNull"] !== void 0)
47019
+ args.description__isNull = opts["description.isNull"];
47020
+ if (opts["description.isNotNull"] !== void 0)
47021
+ args.description__isNotNull = opts["description.isNotNull"];
46619
47022
  if (opts.invoicingEntityId !== void 0)
46620
47023
  args.invoicing_entity_id = opts.invoicingEntityId;
46621
47024
  if (opts["invoicingEntityId.not"] !== void 0)
46622
47025
  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
47026
  if (opts["invoicingEntityId.equals"] !== void 0)
46628
47027
  args.invoicing_entity_id__equals = opts["invoicingEntityId.equals"];
46629
47028
  if (opts["invoicingEntityId.contains"] !== void 0)
@@ -46645,32 +47044,28 @@ Examples:
46645
47044
  "skip",
46646
47045
  "id",
46647
47046
  "id__not",
46648
- "id__isNull",
46649
- "id__isNotNull",
46650
47047
  "id__equals",
46651
47048
  "id__contains",
46652
47049
  "id__startsWith",
46653
47050
  "id__endWith",
46654
47051
  "name",
46655
47052
  "name__not",
46656
- "name__isNull",
46657
- "name__isNotNull",
46658
47053
  "name__equals",
46659
47054
  "name__contains",
46660
47055
  "name__startsWith",
46661
47056
  "name__endWith",
47057
+ "name__isNull",
47058
+ "name__isNotNull",
46662
47059
  "description",
46663
47060
  "description__not",
46664
- "description__isNull",
46665
- "description__isNotNull",
46666
47061
  "description__equals",
46667
47062
  "description__contains",
46668
47063
  "description__startsWith",
46669
47064
  "description__endWith",
47065
+ "description__isNull",
47066
+ "description__isNotNull",
46670
47067
  "invoicing_entity_id",
46671
47068
  "invoicing_entity_id__not",
46672
- "invoicing_entity_id__isNull",
46673
- "invoicing_entity_id__isNotNull",
46674
47069
  "invoicing_entity_id__equals",
46675
47070
  "invoicing_entity_id__contains",
46676
47071
  "invoicing_entity_id__startsWith",
@@ -47250,10 +47645,12 @@ function registerAllCommands(program2) {
47250
47645
  registerAi_CostsCommands(program2);
47251
47646
  registerAnalyticsCommands(program2);
47252
47647
  registerBank_AccountsCommands(program2);
47648
+ registerCatalogCommands(program2);
47253
47649
  registerCompaniesCommands(program2);
47254
47650
  registerCouponsCommands(program2);
47255
47651
  registerCoupons_Promotion_CodesCommands(program2);
47256
47652
  registerCustomers_CreditsCommands(program2);
47653
+ registerCustomers_FeaturesCommands(program2);
47257
47654
  registerCustomers_Payment_MethodsCommands(program2);
47258
47655
  registerCustomers_AddressCommands(program2);
47259
47656
  registerCustomers_ShippingCommands(program2);
@@ -47262,12 +47659,14 @@ function registerAllCommands(program2) {
47262
47659
  registerOrganisationsCommands(program2);
47263
47660
  registerCustomers_SegmentsCommands(program2);
47264
47661
  registerExportsCommands(program2);
47662
+ registerFeaturesCommands(program2);
47265
47663
  registerFilesCommands(program2);
47266
47664
  registerInvoicesCommands(program2);
47267
47665
  registerInvoices_TransactionsCommands(program2);
47268
47666
  registerInvoicing_EntitiesCommands(program2);
47269
47667
  registerAi_MonitoringCommands(program2);
47270
47668
  registerPaymentsCommands(program2);
47669
+ registerProducts_FeaturesCommands(program2);
47271
47670
  registerProductsCommands(program2);
47272
47671
  registerPrice_ConfigurationsCommands(program2);
47273
47672
  registerQuotesCommands(program2);
@@ -63301,6 +63700,8 @@ var de = {
63301
63700
  "einvoicing.paymentFromWallet": "Zahlung aus Guthaben",
63302
63701
  "einvoicing.paymentProcessed": "Zahlung verarbeitet",
63303
63702
  "einvoicing.paymentReceived": "Zahlung erhalten",
63703
+ "invoices.minimumFee.adjustmentName": "Anpassung der Mindestgeb\xFChr",
63704
+ "invoices.minimumFee.name": "Mindestgeb\xFChr",
63304
63705
  "invoices.outstandingProduct.description": "Unbezahlter Betrag der Rechnung{{invoiceNumber}} vom {{date}}",
63305
63706
  "invoices.outstandingProduct.descriptionPeriod": "Unbezahlter Betrag der Rechnung{{invoiceNumber}} vom {{periodStart}} bis {{periodEnd}}",
63306
63707
  "invoices.outstandingProduct.name": "Offener Saldo",
@@ -63326,7 +63727,25 @@ var de = {
63326
63727
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Diese Position wurde f\xFCr den anteiligen Zeitraum in Rechnung gestellt",
63327
63728
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Betrag von {{amount}} f\xFCr den anteiligen Zeitraum nicht in Rechnung gestellt",
63328
63729
  "subscriptions.updates.updatePrices": "Preise f\xFCr {{productName}} aktualisieren",
63329
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 abgelaufenes Guthaben"
63730
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 abgelaufenes Guthaben",
63731
+ "quotes.blockers.quote_not_draft": "Setzen Sie das Angebot auf Entwurf zur\xFCck, bevor Sie seine Konfigurationen \xE4ndern",
63732
+ "quotes.blockers.quote_expiration_date_missing": "Das Angebot muss ein Ablaufdatum haben, um zur Genehmigung gesendet zu werden",
63733
+ "quotes.blockers.quote_configuration_missing": "F\xFCgen Sie mindestens eine Konfiguration hinzu, bevor Sie das Angebot einreichen",
63734
+ "quotes.blockers.quote_configuration_subscription_update_customer": "Abonnement\xE4nderungen m\xFCssen den Kunden des Angebots verwenden",
63735
+ "quotes.blockers.quote_configuration_multiple_configurations_disabled": "Aktivieren Sie mehrere Konfigurationen, bevor Sie einen untergeordneten Kunden zuweisen",
63736
+ "quotes.blockers.quote_configuration_customer_not_child": "W\xE4hlen Sie einen untergeordneten Kunden des Angebotskunden",
63737
+ "quotes.blockers.quote_configuration_type_mismatch": "Die verkn\xFCpfte Konfiguration entspricht nicht dem Konfigurationstyp",
63738
+ "quotes.blockers.quote_configuration_not_draft": "W\xE4hlen Sie eine Konfiguration im Entwurf",
63739
+ "quotes.blockers.quote_configuration_customer_mismatch": "Die Konfiguration muss zum Kunden der Konfiguration geh\xF6ren",
63740
+ "quotes.blockers.quote_configuration_currency_mismatch": "Die Konfiguration muss die W\xE4hrung des Angebots verwenden",
63741
+ "quotes.blockers.quote_configuration_invoicing_entity_mismatch": "Die Rechnung muss die Rechnungsstellungseinheit des Angebots verwenden",
63742
+ "quotes.blockers.quote_configuration_already_linked": "Die Konfiguration ist bereits mit einer Angebotskonfiguration verkn\xFCpft",
63743
+ "quotes.blockers.quote_configuration_not_subscription_update": "W\xE4hlen Sie eine Konfiguration f\xFCr eine Abonnement\xE4nderung",
63744
+ "quotes.blockers.quote_configuration_not_new_subscription": "W\xE4hlen Sie eine Konfiguration f\xFCr ein neues Abonnement",
63745
+ "quotes.blockers.quote_configuration_duplicate_subscription_update": "Ein Abonnement kann in einem Angebot nur einmal ge\xE4ndert werden",
63746
+ "quotes.blockers.quote_draft_invoice_missing": "Das Angebot muss eine Rechnung im Entwurf haben, um abgeschlossen zu werden",
63747
+ "quotes.blockers.quote_draft_subscription_missing": "Das Angebot muss ein Abonnement im Entwurf haben, um abgeschlossen zu werden",
63748
+ "quotes.blockers.quote_expiry_after_transition_date": "Das Ablaufdatum des Angebots muss sp\xE4testens am Ende des aktuellen Abrechnungszeitraums liegen, oder am geplanten \xDCbergangsdatum, wenn dieses sp\xE4ter liegt"
63330
63749
  };
63331
63750
 
63332
63751
  // ../hyperline-i18n/build/locales/en.js
@@ -63334,6 +63753,8 @@ var en = {
63334
63753
  "creditNotes.refundChargeName": "Refund for invoice",
63335
63754
  "credits.bundleOf": "{{productName}} - Pack of {{creditCount}} credits",
63336
63755
  "credits.unitsOf": "{{productName}} - {{creditCount}} credits",
63756
+ "invoices.minimumFee.adjustmentName": "Minimum fee adjustment",
63757
+ "invoices.minimumFee.name": "Minimum fee",
63337
63758
  "invoices.outstandingProduct.description": "Unpaid amount from the invoice{{invoiceNumber}} emitted on {{date}}",
63338
63759
  "invoices.outstandingProduct.descriptionPeriod": "Unpaid amount from the invoice{{invoiceNumber}} from {{periodStart}} to {{periodEnd}}",
63339
63760
  "invoices.outstandingProduct.name": "Outstanding balance",
@@ -63374,7 +63795,25 @@ var en = {
63374
63795
  "accounting.revrec.closedPeriodFallbackNote": " (posted to next open period \u2014 target accounting period closed; original date {{originalDate}})",
63375
63796
  "einvoicing.paymentProcessed": "Payment processed",
63376
63797
  "einvoicing.paymentReceived": "Payment received",
63377
- "einvoicing.paymentFromWallet": "Payment from wallet"
63798
+ "einvoicing.paymentFromWallet": "Payment from wallet",
63799
+ "quotes.blockers.quote_not_draft": "Redraft the quote before changing its configurations",
63800
+ "quotes.blockers.quote_expiration_date_missing": "Quote must have an expiration date to be sent for approval",
63801
+ "quotes.blockers.quote_configuration_missing": "Add at least one configuration before submitting the quote",
63802
+ "quotes.blockers.quote_configuration_subscription_update_customer": "Subscription updates must use the quote customer",
63803
+ "quotes.blockers.quote_configuration_multiple_configurations_disabled": "Enable multiple configurations before assigning a child customer",
63804
+ "quotes.blockers.quote_configuration_customer_not_child": "Select a child customer of the quote customer",
63805
+ "quotes.blockers.quote_configuration_type_mismatch": "The linked configuration does not match the configuration type",
63806
+ "quotes.blockers.quote_configuration_not_draft": "Select a draft configuration",
63807
+ "quotes.blockers.quote_configuration_customer_mismatch": "The configuration must belong to the configuration customer",
63808
+ "quotes.blockers.quote_configuration_currency_mismatch": "The configuration must use the quote currency",
63809
+ "quotes.blockers.quote_configuration_invoicing_entity_mismatch": "The invoice must use the quote invoicing entity",
63810
+ "quotes.blockers.quote_configuration_already_linked": "The configuration is already linked to a quote configuration",
63811
+ "quotes.blockers.quote_configuration_not_subscription_update": "Select a subscription update configuration",
63812
+ "quotes.blockers.quote_configuration_not_new_subscription": "Select a new subscription configuration",
63813
+ "quotes.blockers.quote_configuration_duplicate_subscription_update": "A subscription can only be updated once in a quote",
63814
+ "quotes.blockers.quote_draft_invoice_missing": "Quote must have a draft invoice to be finalized",
63815
+ "quotes.blockers.quote_draft_subscription_missing": "Quote must have a draft subscription to be finalized",
63816
+ "quotes.blockers.quote_expiry_after_transition_date": "The quote expiration date must be on or before the end of the current billing period, or the scheduled transition date when it falls later"
63378
63817
  };
63379
63818
 
63380
63819
  // ../hyperline-i18n/build/locales/es.js
@@ -63397,6 +63836,8 @@ var es = {
63397
63836
  "einvoicing.paymentFromWallet": "Pago desde el monedero",
63398
63837
  "einvoicing.paymentProcessed": "Pago procesado",
63399
63838
  "einvoicing.paymentReceived": "Pago recibido",
63839
+ "invoices.minimumFee.adjustmentName": "Ajuste del cargo m\xEDnimo",
63840
+ "invoices.minimumFee.name": "Cargo m\xEDnimo",
63400
63841
  "invoices.outstandingProduct.description": "Monto pendiente de la factura{{invoiceNumber}} emitida el {{date}}",
63401
63842
  "invoices.outstandingProduct.descriptionPeriod": "Monto pendiente de la factura{{invoiceNumber}} del {{periodStart}} al {{periodEnd}}",
63402
63843
  "invoices.outstandingProduct.name": "Saldo pendiente",
@@ -63422,7 +63863,25 @@ var es = {
63422
63863
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Esta l\xEDnea ha sido facturada para el per\xEDodo prorrateado",
63423
63864
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Importe de {{amount}} no facturado para el per\xEDodo prorrateado",
63424
63865
  "subscriptions.updates.updatePrices": "Actualizar precios para {{productName}}",
63425
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo caducado"
63866
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo caducado",
63867
+ "quotes.blockers.quote_not_draft": "Vuelve a poner el presupuesto en borrador antes de cambiar sus configuraciones",
63868
+ "quotes.blockers.quote_expiration_date_missing": "El presupuesto debe tener una fecha de vencimiento para enviarse a aprobaci\xF3n",
63869
+ "quotes.blockers.quote_configuration_missing": "A\xF1ade al menos una configuraci\xF3n antes de enviar el presupuesto",
63870
+ "quotes.blockers.quote_configuration_subscription_update_customer": "Las actualizaciones de suscripci\xF3n deben usar el cliente del presupuesto",
63871
+ "quotes.blockers.quote_configuration_multiple_configurations_disabled": "Activa las configuraciones m\xFAltiples antes de asignar un cliente hijo",
63872
+ "quotes.blockers.quote_configuration_customer_not_child": "Selecciona un cliente hijo del cliente del presupuesto",
63873
+ "quotes.blockers.quote_configuration_type_mismatch": "La configuraci\xF3n vinculada no coincide con el tipo de configuraci\xF3n",
63874
+ "quotes.blockers.quote_configuration_not_draft": "Selecciona una configuraci\xF3n en borrador",
63875
+ "quotes.blockers.quote_configuration_customer_mismatch": "La configuraci\xF3n debe pertenecer al cliente de la configuraci\xF3n",
63876
+ "quotes.blockers.quote_configuration_currency_mismatch": "La configuraci\xF3n debe usar la moneda del presupuesto",
63877
+ "quotes.blockers.quote_configuration_invoicing_entity_mismatch": "La factura debe usar la entidad de facturaci\xF3n del presupuesto",
63878
+ "quotes.blockers.quote_configuration_already_linked": "La configuraci\xF3n ya est\xE1 vinculada a una configuraci\xF3n de presupuesto",
63879
+ "quotes.blockers.quote_configuration_not_subscription_update": "Selecciona una configuraci\xF3n de actualizaci\xF3n de suscripci\xF3n",
63880
+ "quotes.blockers.quote_configuration_not_new_subscription": "Selecciona una configuraci\xF3n de nueva suscripci\xF3n",
63881
+ "quotes.blockers.quote_configuration_duplicate_subscription_update": "Una suscripci\xF3n solo puede actualizarse una vez en un presupuesto",
63882
+ "quotes.blockers.quote_draft_invoice_missing": "El presupuesto debe tener una factura en borrador para finalizarse",
63883
+ "quotes.blockers.quote_draft_subscription_missing": "El presupuesto debe tener una suscripci\xF3n en borrador para finalizarse",
63884
+ "quotes.blockers.quote_expiry_after_transition_date": "La fecha de vencimiento del presupuesto debe ser, como m\xE1ximo, el final del periodo de facturaci\xF3n actual, o la fecha de transici\xF3n programada si es posterior"
63426
63885
  };
63427
63886
 
63428
63887
  // ../hyperline-i18n/build/locales/fr.js
@@ -63445,6 +63904,8 @@ var fr = {
63445
63904
  "einvoicing.paymentFromWallet": "Paiement depuis le portefeuille",
63446
63905
  "einvoicing.paymentProcessed": "Paiement effectu\xE9",
63447
63906
  "einvoicing.paymentReceived": "Paiement re\xE7u",
63907
+ "invoices.minimumFee.adjustmentName": "Ajustement des frais minimums",
63908
+ "invoices.minimumFee.name": "Frais minimums",
63448
63909
  "invoices.outstandingProduct.description": "Montant impay\xE9 de la facture{{invoiceNumber}} \xE9mise le {{date}}",
63449
63910
  "invoices.outstandingProduct.descriptionPeriod": "Montant impay\xE9 de la facture{{invoiceNumber}} du {{periodStart}} au {{periodEnd}}",
63450
63911
  "invoices.outstandingProduct.name": "Solde impay\xE9",
@@ -63470,7 +63931,25 @@ var fr = {
63470
63931
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Cette ligne a \xE9t\xE9 factur\xE9e pour la p\xE9riode proratis\xE9e",
63471
63932
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Montant de {{amount}} non factur\xE9 pour la p\xE9riode proratis\xE9e",
63472
63933
  "subscriptions.updates.updatePrices": "Mise \xE0 jour des prix pour {{productName}}",
63473
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 solde expir\xE9"
63934
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 solde expir\xE9",
63935
+ "quotes.blockers.quote_not_draft": "Repassez le devis en brouillon avant de modifier ses configurations",
63936
+ "quotes.blockers.quote_expiration_date_missing": "Le devis doit avoir une date d'expiration pour \xEAtre envoy\xE9 en validation",
63937
+ "quotes.blockers.quote_configuration_missing": "Ajoutez au moins une configuration avant de soumettre le devis",
63938
+ "quotes.blockers.quote_configuration_subscription_update_customer": "Les mises \xE0 jour d'abonnement doivent utiliser le client du devis",
63939
+ "quotes.blockers.quote_configuration_multiple_configurations_disabled": "Activez les configurations multiples avant d'assigner un client enfant",
63940
+ "quotes.blockers.quote_configuration_customer_not_child": "S\xE9lectionnez un client enfant du client du devis",
63941
+ "quotes.blockers.quote_configuration_type_mismatch": "La configuration li\xE9e ne correspond pas au type de configuration",
63942
+ "quotes.blockers.quote_configuration_not_draft": "S\xE9lectionnez une configuration en brouillon",
63943
+ "quotes.blockers.quote_configuration_customer_mismatch": "La configuration doit appartenir au client de la configuration",
63944
+ "quotes.blockers.quote_configuration_currency_mismatch": "La configuration doit utiliser la devise du devis",
63945
+ "quotes.blockers.quote_configuration_invoicing_entity_mismatch": "La facture doit utiliser l'entit\xE9 de facturation du devis",
63946
+ "quotes.blockers.quote_configuration_already_linked": "La configuration est d\xE9j\xE0 li\xE9e \xE0 une configuration de devis",
63947
+ "quotes.blockers.quote_configuration_not_subscription_update": "S\xE9lectionnez une configuration de mise \xE0 jour d'abonnement",
63948
+ "quotes.blockers.quote_configuration_not_new_subscription": "S\xE9lectionnez une configuration de nouvel abonnement",
63949
+ "quotes.blockers.quote_configuration_duplicate_subscription_update": "Un abonnement ne peut \xEAtre mis \xE0 jour qu'une seule fois dans un devis",
63950
+ "quotes.blockers.quote_draft_invoice_missing": "Le devis doit avoir une facture en brouillon pour \xEAtre finalis\xE9",
63951
+ "quotes.blockers.quote_draft_subscription_missing": "Le devis doit avoir un abonnement en brouillon pour \xEAtre finalis\xE9",
63952
+ "quotes.blockers.quote_expiry_after_transition_date": "La date d'expiration du devis doit \xEAtre au plus tard la fin de la p\xE9riode de facturation en cours, ou la date de transition planifi\xE9e si elle est post\xE9rieure"
63474
63953
  };
63475
63954
 
63476
63955
  // ../hyperline-i18n/build/locales/it.js
@@ -63493,6 +63972,8 @@ var it = {
63493
63972
  "einvoicing.paymentFromWallet": "Pagamento dal portafoglio",
63494
63973
  "einvoicing.paymentProcessed": "Pagamento elaborato",
63495
63974
  "einvoicing.paymentReceived": "Pagamento ricevuto",
63975
+ "invoices.minimumFee.adjustmentName": "Adeguamento all\u2019importo minimo",
63976
+ "invoices.minimumFee.name": "Importo minimo",
63496
63977
  "invoices.outstandingProduct.description": "Importo insoluto della fattura{{invoiceNumber}} emessa il {{date}}",
63497
63978
  "invoices.outstandingProduct.descriptionPeriod": "Importo insoluto della fattura{{invoiceNumber}} dal {{periodStart}} al {{periodEnd}}",
63498
63979
  "invoices.outstandingProduct.name": "Saldo insoluto",
@@ -63518,7 +63999,25 @@ var it = {
63518
63999
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Questa voce \xE8 stata fatturata per il periodo proporzionato",
63519
64000
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Importo di {{amount}} non fatturato per il periodo proporzionato",
63520
64001
  "subscriptions.updates.updatePrices": "Aggiorna prezzi per {{productName}}",
63521
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo scaduto"
64002
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo scaduto",
64003
+ "quotes.blockers.quote_not_draft": "Riporta il preventivo in bozza prima di modificarne le configurazioni",
64004
+ "quotes.blockers.quote_expiration_date_missing": "Il preventivo deve avere una data di scadenza per essere inviato per approvazione",
64005
+ "quotes.blockers.quote_configuration_missing": "Aggiungi almeno una configurazione prima di inviare il preventivo",
64006
+ "quotes.blockers.quote_configuration_subscription_update_customer": "Gli aggiornamenti dell'abbonamento devono usare il cliente del preventivo",
64007
+ "quotes.blockers.quote_configuration_multiple_configurations_disabled": "Attiva le configurazioni multiple prima di assegnare un cliente figlio",
64008
+ "quotes.blockers.quote_configuration_customer_not_child": "Seleziona un cliente figlio del cliente del preventivo",
64009
+ "quotes.blockers.quote_configuration_type_mismatch": "La configurazione collegata non corrisponde al tipo di configurazione",
64010
+ "quotes.blockers.quote_configuration_not_draft": "Seleziona una configurazione in bozza",
64011
+ "quotes.blockers.quote_configuration_customer_mismatch": "La configurazione deve appartenere al cliente della configurazione",
64012
+ "quotes.blockers.quote_configuration_currency_mismatch": "La configurazione deve usare la valuta del preventivo",
64013
+ "quotes.blockers.quote_configuration_invoicing_entity_mismatch": "La fattura deve usare l'entit\xE0 di fatturazione del preventivo",
64014
+ "quotes.blockers.quote_configuration_already_linked": "La configurazione \xE8 gi\xE0 collegata a una configurazione del preventivo",
64015
+ "quotes.blockers.quote_configuration_not_subscription_update": "Seleziona una configurazione di aggiornamento dell'abbonamento",
64016
+ "quotes.blockers.quote_configuration_not_new_subscription": "Seleziona una configurazione di nuovo abbonamento",
64017
+ "quotes.blockers.quote_configuration_duplicate_subscription_update": "Un abbonamento pu\xF2 essere aggiornato una sola volta in un preventivo",
64018
+ "quotes.blockers.quote_draft_invoice_missing": "Il preventivo deve avere una fattura in bozza per essere finalizzato",
64019
+ "quotes.blockers.quote_draft_subscription_missing": "Il preventivo deve avere un abbonamento in bozza per essere finalizzato",
64020
+ "quotes.blockers.quote_expiry_after_transition_date": "La data di scadenza del preventivo deve essere entro la fine del periodo di fatturazione corrente, o la data di transizione pianificata se successiva"
63522
64021
  };
63523
64022
 
63524
64023
  // ../hyperline-i18n/build/locales/lt.js
@@ -63541,6 +64040,8 @@ var lt = {
63541
64040
  "einvoicing.paymentFromWallet": "Mok\u0117jimas i\u0161 pinigin\u0117s",
63542
64041
  "einvoicing.paymentProcessed": "Mok\u0117jimas apdorotas",
63543
64042
  "einvoicing.paymentReceived": "Mok\u0117jimas gautas",
64043
+ "invoices.minimumFee.adjustmentName": "Minimalaus mokes\u010Dio koregavimas",
64044
+ "invoices.minimumFee.name": "Minimalus mokestis",
63544
64045
  "invoices.outstandingProduct.description": "Neapmok\u0117ta {{date}} i\u0161ra\u0161ytos s\u0105skaitos fakt\u016Bros{{invoiceNumber}} suma",
63545
64046
  "invoices.outstandingProduct.descriptionPeriod": "Neapmok\u0117ta s\u0105skaitos fakt\u016Bros{{invoiceNumber}} suma u\u017E laikotarp\u012F nuo {{periodStart}} iki {{periodEnd}}",
63546
64047
  "invoices.outstandingProduct.name": "Neapmok\u0117tas likutis",
@@ -63566,7 +64067,25 @@ var lt = {
63566
64067
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "U\u017E \u0161i\u0105 eilut\u0119 proporcingam laikotarpiui s\u0105skaita fakt\u016Bra i\u0161ra\u0161yta",
63567
64068
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Proporcingam laikotarpiui nei\u0161ra\u0161yta {{amount}} suma",
63568
64069
  "subscriptions.updates.updatePrices": "Atnaujinti {{productName}} kainas",
63569
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 nebegaliojantis likutis"
64070
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 nebegaliojantis likutis",
64071
+ "quotes.blockers.quote_not_draft": "Prie\u0161 keisdami pasi\u016Blymo konfig\u016Bracijas, gr\u0105\u017Einkite j\u012F \u012F juodra\u0161t\u012F",
64072
+ "quotes.blockers.quote_expiration_date_missing": "Pasi\u016Blymas turi tur\u0117ti galiojimo pabaigos dat\u0105, kad b\u016Bt\u0173 i\u0161si\u0173stas tvirtinti",
64073
+ "quotes.blockers.quote_configuration_missing": "Prie\u0161 pateikdami pasi\u016Blym\u0105, prid\u0117kite bent vien\u0105 konfig\u016Bracij\u0105",
64074
+ "quotes.blockers.quote_configuration_subscription_update_customer": "Prenumeratos atnaujinimai turi naudoti pasi\u016Blymo klient\u0105",
64075
+ "quotes.blockers.quote_configuration_multiple_configurations_disabled": "Prie\u0161 priskirdami antrin\u012F klient\u0105, \u012Fjunkite kelias konfig\u016Bracijas",
64076
+ "quotes.blockers.quote_configuration_customer_not_child": "Pasirinkite pasi\u016Blymo kliento antrin\u012F klient\u0105",
64077
+ "quotes.blockers.quote_configuration_type_mismatch": "Susieta konfig\u016Bracija neatitinka konfig\u016Bracijos tipo",
64078
+ "quotes.blockers.quote_configuration_not_draft": "Pasirinkite konfig\u016Bracijos juodra\u0161t\u012F",
64079
+ "quotes.blockers.quote_configuration_customer_mismatch": "Konfig\u016Bracija turi priklausyti konfig\u016Bracijos klientui",
64080
+ "quotes.blockers.quote_configuration_currency_mismatch": "Konfig\u016Bracija turi naudoti pasi\u016Blymo valiut\u0105",
64081
+ "quotes.blockers.quote_configuration_invoicing_entity_mismatch": "S\u0105skaita fakt\u016Bra turi naudoti pasi\u016Blymo s\u0105skait\u0173 i\u0161ra\u0161ymo subjekt\u0105",
64082
+ "quotes.blockers.quote_configuration_already_linked": "Konfig\u016Bracija jau susieta su pasi\u016Blymo konfig\u016Bracija",
64083
+ "quotes.blockers.quote_configuration_not_subscription_update": "Pasirinkite prenumeratos atnaujinimo konfig\u016Bracij\u0105",
64084
+ "quotes.blockers.quote_configuration_not_new_subscription": "Pasirinkite naujos prenumeratos konfig\u016Bracij\u0105",
64085
+ "quotes.blockers.quote_configuration_duplicate_subscription_update": "Prenumerat\u0105 pasi\u016Blyme galima atnaujinti tik vien\u0105 kart\u0105",
64086
+ "quotes.blockers.quote_draft_invoice_missing": "Pasi\u016Blymas turi tur\u0117ti s\u0105skaitos fakt\u016Bros juodra\u0161t\u012F, kad b\u016Bt\u0173 u\u017Ebaigtas",
64087
+ "quotes.blockers.quote_draft_subscription_missing": "Pasi\u016Blymas turi tur\u0117ti prenumeratos juodra\u0161t\u012F, kad b\u016Bt\u0173 u\u017Ebaigtas",
64088
+ "quotes.blockers.quote_expiry_after_transition_date": "Pasi\u016Blymo galiojimo pabaigos data turi b\u016Bti ne v\u0117lesn\u0117 nei dabartinio atsiskaitymo laikotarpio pabaiga arba suplanuota per\u0117jimo data, jei ji v\u0117lesn\u0117"
63570
64089
  };
63571
64090
 
63572
64091
  // ../hyperline-i18n/build/locales/nl.js
@@ -63589,6 +64108,8 @@ var nl = {
63589
64108
  "einvoicing.paymentFromWallet": "Betaling uit tegoed",
63590
64109
  "einvoicing.paymentProcessed": "Betaling verwerkt",
63591
64110
  "einvoicing.paymentReceived": "Betaling ontvangen",
64111
+ "invoices.minimumFee.adjustmentName": "Aanpassing minimumbedrag",
64112
+ "invoices.minimumFee.name": "Minimumbedrag",
63592
64113
  "invoices.outstandingProduct.description": "Onbetaald bedrag van de factuur{{invoiceNumber}} uitgegeven op {{date}}",
63593
64114
  "invoices.outstandingProduct.descriptionPeriod": "Onbetaald bedrag van de factuur{{invoiceNumber}} van {{periodStart}} tot {{periodEnd}}",
63594
64115
  "invoices.outstandingProduct.name": "Openstaand saldo",
@@ -63614,7 +64135,25 @@ var nl = {
63614
64135
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Deze regel is gefactureerd voor de geproportioneerde periode",
63615
64136
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Bedrag van {{amount}} niet gefactureerd voor de geproportioneerde periode",
63616
64137
  "subscriptions.updates.updatePrices": "Prijzen bijwerken voor {{productName}}",
63617
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 verlopen saldo"
64138
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 verlopen saldo",
64139
+ "quotes.blockers.quote_not_draft": "Zet de offerte terug naar concept voordat u de configuraties wijzigt",
64140
+ "quotes.blockers.quote_expiration_date_missing": "De offerte moet een vervaldatum hebben om ter goedkeuring te worden verzonden",
64141
+ "quotes.blockers.quote_configuration_missing": "Voeg ten minste \xE9\xE9n configuratie toe voordat u de offerte indient",
64142
+ "quotes.blockers.quote_configuration_subscription_update_customer": "Abonnementswijzigingen moeten de klant van de offerte gebruiken",
64143
+ "quotes.blockers.quote_configuration_multiple_configurations_disabled": "Schakel meerdere configuraties in voordat u een onderliggende klant toewijst",
64144
+ "quotes.blockers.quote_configuration_customer_not_child": "Selecteer een onderliggende klant van de offerteklant",
64145
+ "quotes.blockers.quote_configuration_type_mismatch": "De gekoppelde configuratie komt niet overeen met het configuratietype",
64146
+ "quotes.blockers.quote_configuration_not_draft": "Selecteer een conceptconfiguratie",
64147
+ "quotes.blockers.quote_configuration_customer_mismatch": "De configuratie moet bij de klant van de configuratie horen",
64148
+ "quotes.blockers.quote_configuration_currency_mismatch": "De configuratie moet de valuta van de offerte gebruiken",
64149
+ "quotes.blockers.quote_configuration_invoicing_entity_mismatch": "De factuur moet de facturatie-entiteit van de offerte gebruiken",
64150
+ "quotes.blockers.quote_configuration_already_linked": "De configuratie is al gekoppeld aan een offerteconfiguratie",
64151
+ "quotes.blockers.quote_configuration_not_subscription_update": "Selecteer een configuratie voor een abonnementswijziging",
64152
+ "quotes.blockers.quote_configuration_not_new_subscription": "Selecteer een configuratie voor een nieuw abonnement",
64153
+ "quotes.blockers.quote_configuration_duplicate_subscription_update": "Een abonnement kan maar \xE9\xE9n keer per offerte worden gewijzigd",
64154
+ "quotes.blockers.quote_draft_invoice_missing": "De offerte moet een conceptfactuur hebben om te worden afgerond",
64155
+ "quotes.blockers.quote_draft_subscription_missing": "De offerte moet een conceptabonnement hebben om te worden afgerond",
64156
+ "quotes.blockers.quote_expiry_after_transition_date": "De vervaldatum van de offerte moet uiterlijk het einde van de huidige factuurperiode zijn, of de geplande overgangsdatum als die later valt"
63618
64157
  };
63619
64158
 
63620
64159
  // ../hyperline-i18n/build/locales/pl.js
@@ -63637,6 +64176,8 @@ var pl = {
63637
64176
  "einvoicing.paymentFromWallet": "P\u0142atno\u015B\u0107 z portfela",
63638
64177
  "einvoicing.paymentProcessed": "P\u0142atno\u015B\u0107 przetworzona",
63639
64178
  "einvoicing.paymentReceived": "P\u0142atno\u015B\u0107 otrzymana",
64179
+ "invoices.minimumFee.adjustmentName": "Wyr\xF3wnanie do op\u0142aty minimalnej",
64180
+ "invoices.minimumFee.name": "Op\u0142ata minimalna",
63640
64181
  "invoices.outstandingProduct.description": "Nieop\u0142acona kwota z faktury{{invoiceNumber}} wystawionej {{date}}",
63641
64182
  "invoices.outstandingProduct.descriptionPeriod": "Nieop\u0142acona kwota z faktury{{invoiceNumber}} od {{periodStart}} do {{periodEnd}}",
63642
64183
  "invoices.outstandingProduct.name": "Niezap\u0142acone saldo",
@@ -63662,7 +64203,25 @@ var pl = {
63662
64203
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Ta pozycja zosta\u0142a zafakturowana za okres proporcjonalny",
63663
64204
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Kwota {{amount}} niefakturowana za okres proporcjonalny",
63664
64205
  "subscriptions.updates.updatePrices": "Aktualizuj ceny dla {{productName}}",
63665
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 wygas\u0142e saldo"
64206
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 wygas\u0142e saldo",
64207
+ "quotes.blockers.quote_not_draft": "Przywr\xF3\u0107 ofert\u0119 do wersji roboczej przed zmian\u0105 jej konfiguracji",
64208
+ "quotes.blockers.quote_expiration_date_missing": "Oferta musi mie\u0107 dat\u0119 wyga\u015Bni\u0119cia, aby zosta\u0142a wys\u0142ana do zatwierdzenia",
64209
+ "quotes.blockers.quote_configuration_missing": "Dodaj co najmniej jedn\u0105 konfiguracj\u0119 przed przes\u0142aniem oferty",
64210
+ "quotes.blockers.quote_configuration_subscription_update_customer": "Aktualizacje subskrypcji musz\u0105 u\u017Cywa\u0107 klienta oferty",
64211
+ "quotes.blockers.quote_configuration_multiple_configurations_disabled": "W\u0142\u0105cz wiele konfiguracji przed przypisaniem klienta podrz\u0119dnego",
64212
+ "quotes.blockers.quote_configuration_customer_not_child": "Wybierz klienta podrz\u0119dnego klienta oferty",
64213
+ "quotes.blockers.quote_configuration_type_mismatch": "Powi\u0105zana konfiguracja nie odpowiada typowi konfiguracji",
64214
+ "quotes.blockers.quote_configuration_not_draft": "Wybierz konfiguracj\u0119 w wersji roboczej",
64215
+ "quotes.blockers.quote_configuration_customer_mismatch": "Konfiguracja musi nale\u017Ce\u0107 do klienta konfiguracji",
64216
+ "quotes.blockers.quote_configuration_currency_mismatch": "Konfiguracja musi u\u017Cywa\u0107 waluty oferty",
64217
+ "quotes.blockers.quote_configuration_invoicing_entity_mismatch": "Faktura musi u\u017Cywa\u0107 podmiotu fakturuj\u0105cego oferty",
64218
+ "quotes.blockers.quote_configuration_already_linked": "Konfiguracja jest ju\u017C powi\u0105zana z konfiguracj\u0105 oferty",
64219
+ "quotes.blockers.quote_configuration_not_subscription_update": "Wybierz konfiguracj\u0119 aktualizacji subskrypcji",
64220
+ "quotes.blockers.quote_configuration_not_new_subscription": "Wybierz konfiguracj\u0119 nowej subskrypcji",
64221
+ "quotes.blockers.quote_configuration_duplicate_subscription_update": "Subskrypcj\u0119 mo\u017Cna zaktualizowa\u0107 w ofercie tylko raz",
64222
+ "quotes.blockers.quote_draft_invoice_missing": "Oferta musi mie\u0107 faktur\u0119 w wersji roboczej, aby zosta\u0142a sfinalizowana",
64223
+ "quotes.blockers.quote_draft_subscription_missing": "Oferta musi mie\u0107 subskrypcj\u0119 w wersji roboczej, aby zosta\u0142a sfinalizowana",
64224
+ "quotes.blockers.quote_expiry_after_transition_date": "Data wyga\u015Bni\u0119cia oferty musi przypada\u0107 najp\xF3\u017Aniej na koniec bie\u017C\u0105cego okresu rozliczeniowego lub na zaplanowan\u0105 dat\u0119 przej\u015Bcia, je\u015Bli jest p\xF3\u017Aniejsza"
63666
64225
  };
63667
64226
 
63668
64227
  // ../hyperline-i18n/build/locales/pt.js
@@ -63685,6 +64244,8 @@ var pt = {
63685
64244
  "einvoicing.paymentFromWallet": "Pagamento da carteira",
63686
64245
  "einvoicing.paymentProcessed": "Pagamento processado",
63687
64246
  "einvoicing.paymentReceived": "Pagamento recebido",
64247
+ "invoices.minimumFee.adjustmentName": "Ajuste do valor m\xEDnimo",
64248
+ "invoices.minimumFee.name": "Valor m\xEDnimo",
63688
64249
  "invoices.outstandingProduct.description": "Valor em aberto da fatura{{invoiceNumber}} emitida em {{date}}",
63689
64250
  "invoices.outstandingProduct.descriptionPeriod": "Valor em aberto da fatura{{invoiceNumber}} de {{periodStart}} a {{periodEnd}}",
63690
64251
  "invoices.outstandingProduct.name": "Saldo em aberto",
@@ -63710,7 +64271,25 @@ var pt = {
63710
64271
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Esta linha foi faturada para o per\xEDodo proporcional",
63711
64272
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Valor de {{amount}} n\xE3o faturado para o per\xEDodo proporcional",
63712
64273
  "subscriptions.updates.updatePrices": "Atualizar pre\xE7os para {{productName}}",
63713
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo expirado"
64274
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo expirado",
64275
+ "quotes.blockers.quote_not_draft": "Volte a colocar o or\xE7amento em rascunho antes de alterar as suas configura\xE7\xF5es",
64276
+ "quotes.blockers.quote_expiration_date_missing": "O or\xE7amento deve ter uma data de expira\xE7\xE3o para ser enviado para aprova\xE7\xE3o",
64277
+ "quotes.blockers.quote_configuration_missing": "Adicione pelo menos uma configura\xE7\xE3o antes de submeter o or\xE7amento",
64278
+ "quotes.blockers.quote_configuration_subscription_update_customer": "As atualiza\xE7\xF5es de subscri\xE7\xE3o devem usar o cliente do or\xE7amento",
64279
+ "quotes.blockers.quote_configuration_multiple_configurations_disabled": "Ative as configura\xE7\xF5es m\xFAltiplas antes de atribuir um cliente filho",
64280
+ "quotes.blockers.quote_configuration_customer_not_child": "Selecione um cliente filho do cliente do or\xE7amento",
64281
+ "quotes.blockers.quote_configuration_type_mismatch": "A configura\xE7\xE3o associada n\xE3o corresponde ao tipo de configura\xE7\xE3o",
64282
+ "quotes.blockers.quote_configuration_not_draft": "Selecione uma configura\xE7\xE3o em rascunho",
64283
+ "quotes.blockers.quote_configuration_customer_mismatch": "A configura\xE7\xE3o deve pertencer ao cliente da configura\xE7\xE3o",
64284
+ "quotes.blockers.quote_configuration_currency_mismatch": "A configura\xE7\xE3o deve usar a moeda do or\xE7amento",
64285
+ "quotes.blockers.quote_configuration_invoicing_entity_mismatch": "A fatura deve usar a entidade de fatura\xE7\xE3o do or\xE7amento",
64286
+ "quotes.blockers.quote_configuration_already_linked": "A configura\xE7\xE3o j\xE1 est\xE1 associada a uma configura\xE7\xE3o de or\xE7amento",
64287
+ "quotes.blockers.quote_configuration_not_subscription_update": "Selecione uma configura\xE7\xE3o de atualiza\xE7\xE3o de subscri\xE7\xE3o",
64288
+ "quotes.blockers.quote_configuration_not_new_subscription": "Selecione uma configura\xE7\xE3o de nova subscri\xE7\xE3o",
64289
+ "quotes.blockers.quote_configuration_duplicate_subscription_update": "Uma subscri\xE7\xE3o s\xF3 pode ser atualizada uma vez num or\xE7amento",
64290
+ "quotes.blockers.quote_draft_invoice_missing": "O or\xE7amento deve ter uma fatura em rascunho para ser finalizado",
64291
+ "quotes.blockers.quote_draft_subscription_missing": "O or\xE7amento deve ter uma subscri\xE7\xE3o em rascunho para ser finalizado",
64292
+ "quotes.blockers.quote_expiry_after_transition_date": "A data de expira\xE7\xE3o do or\xE7amento deve ser, no m\xE1ximo, o fim do per\xEDodo de fatura\xE7\xE3o atual, ou a data de transi\xE7\xE3o agendada se for posterior"
63714
64293
  };
63715
64294
 
63716
64295
  // ../hyperline-i18n/build/language.js
@@ -63782,97 +64361,315 @@ var executionContextStorage = new AsyncLocalStorage();
63782
64361
  function getExecutionContext() {
63783
64362
  return executionContextStorage.getStore();
63784
64363
  }
63785
-
63786
- // ../hyperline-monitoring/build/context/correlationId.js
63787
- import { AsyncLocalStorage as AsyncLocalStorage2 } from "node:async_hooks";
63788
- var correlationIdStorage = new AsyncLocalStorage2();
63789
- function getCorrelationId() {
63790
- return correlationIdStorage.getStore();
64364
+
64365
+ // ../hyperline-monitoring/build/context/correlationId.js
64366
+ import { AsyncLocalStorage as AsyncLocalStorage2 } from "node:async_hooks";
64367
+ var correlationIdStorage = new AsyncLocalStorage2();
64368
+ function getCorrelationId() {
64369
+ return correlationIdStorage.getStore();
64370
+ }
64371
+
64372
+ // ../hyperline-config/build/index.js
64373
+ import "dotenv/config";
64374
+ import * as stackTraceParser from "stacktrace-parser";
64375
+ function coerceBoolean() {
64376
+ return external_exports.any().refine((value) => ["true", "false"].includes(value), {
64377
+ message: "Expected boolean"
64378
+ }).transform((value) => (
64379
+ // biome-ignore lint/complexity/noUselessTernary: ignore
64380
+ value === "true" ? true : false
64381
+ ));
64382
+ }
64383
+ var types = {
64384
+ string: external_exports.coerce.string,
64385
+ number: external_exports.coerce.number,
64386
+ boolean: coerceBoolean,
64387
+ enum: external_exports.enum
64388
+ };
64389
+ function getConfig(schema, testValues) {
64390
+ const validator = external_exports.object(Object.fromEntries(Object.entries(schema).map(([key, zodType]) => {
64391
+ if (zodType instanceof ZodOptional) {
64392
+ return [key, external_exports.string().optional()];
64393
+ }
64394
+ return [key, external_exports.string()];
64395
+ })));
64396
+ const processEnv = process.env;
64397
+ const isTestMode = processEnv.NODE_ENV === "test";
64398
+ const envVariables = {
64399
+ ...processEnv,
64400
+ ...isTestMode && testValues ? Object.fromEntries(Object.entries(testValues).map(([key, value]) => [key, String(value)])) : {}
64401
+ };
64402
+ const packageName = envVariables.npm_package_name;
64403
+ const parseProcessEnvResult = validator.safeParse(envVariables);
64404
+ if (!parseProcessEnvResult.success) {
64405
+ const parsedStackTrace = stackTraceParser.parse(parseProcessEnvResult.error.stack ?? "");
64406
+ const getConfigCallLine = parsedStackTrace.find((line) => {
64407
+ return !line.file?.includes("hyperline-config") && (line.file?.includes("apps/") || line.file?.includes("core/") || line.file?.includes("packages/"));
64408
+ });
64409
+ const callerFile = getConfigCallLine?.file;
64410
+ console.error(`Invalid environment variables for service \`${packageName}\`: \`${callerFile}\``);
64411
+ console.error(parseProcessEnvResult.error.format());
64412
+ process.exit(1);
64413
+ }
64414
+ const coercion = external_exports.object(schema);
64415
+ return coercion.parse(parseProcessEnvResult.data);
64416
+ }
64417
+
64418
+ // ../hyperline-monitoring/build/config.js
64419
+ var config2 = getConfig({
64420
+ // config
64421
+ APP_VERSION: types.string().optional(),
64422
+ // Deployment environment for log tagging, when it cannot be read off
64423
+ // NODE_ENV. Set only by the PDF render worker pools, which must run with
64424
+ // NODE_ENV="production" to get the production React build regardless of which
64425
+ // environment the pod is actually in (see core/invoicing/services/pdf/index.ts).
64426
+ // Unset everywhere else, so the NODE_ENV fallback keeps current behaviour.
64427
+ APP_ENV: types.string().optional(),
64428
+ DD_SERVICE: types.string().optional(),
64429
+ LOGGER_CONSOLE_ENABLED: types.boolean().optional(),
64430
+ LOGGER_STDOUT_ENABLED: types.boolean().optional(),
64431
+ NODE_ENV: types.enum(["local", "test", "staging", "sandbox", "production"]),
64432
+ EVENT_LOOP_MONITORING_ENABLED: types.boolean().optional(),
64433
+ MEMORY_MONITORING_ENABLED: types.boolean().optional(),
64434
+ MEMORY_MONITORING_INTERVAL_MS: types.number().optional()
64435
+ // secrets
64436
+ }, {
64437
+ APP_VERSION: void 0,
64438
+ APP_ENV: void 0,
64439
+ DD_SERVICE: void 0,
64440
+ LOGGER_CONSOLE_ENABLED: false,
64441
+ LOGGER_STDOUT_ENABLED: false,
64442
+ EVENT_LOOP_MONITORING_ENABLED: false,
64443
+ MEMORY_MONITORING_ENABLED: false,
64444
+ MEMORY_MONITORING_INTERVAL_MS: 3e4,
64445
+ NODE_ENV: "test"
64446
+ });
64447
+
64448
+ // ../hyperline-monitoring/build/logger/logger.js
64449
+ import * as util from "node:util";
64450
+ import prune2 from "json-prune";
64451
+ import * as winston from "winston";
64452
+
64453
+ // ../hyperline-monitoring/build/logger/formatting/format.js
64454
+ import prune from "json-prune";
64455
+
64456
+ // ../hyperline-monitoring/build/logger/formatting/logRedaction.js
64457
+ var REDACTED_KEY_NAMES = /* @__PURE__ */ new Set([
64458
+ "accesstoken",
64459
+ "apitoken",
64460
+ "assertion",
64461
+ "authorization",
64462
+ "authtoken",
64463
+ "cardnumber",
64464
+ "clientassertion",
64465
+ "codeverifier",
64466
+ "connectionurl",
64467
+ "consumerkey",
64468
+ "cookie",
64469
+ "credential",
64470
+ "credentials",
64471
+ "iban",
64472
+ "idtoken",
64473
+ "launchticket",
64474
+ "privatekey",
64475
+ "publictoken",
64476
+ "refreshtoken",
64477
+ "sessiontoken",
64478
+ "token",
64479
+ "tokenid",
64480
+ "verificationcode"
64481
+ ]);
64482
+ var REDACTED_KEY_SUFFIX_PATTERN = /(secret|password|passphrase|apikey)$/;
64483
+ var REDACTED_KEY_CANDIDATE_PATTERN = /token|ticket|key|secret|pass|assertion|verifier|credential|authorization|cookie|iban|cardnumber|code|connectionurl/i;
64484
+ var URL_ONLY_REDACTED_KEYS = /* @__PURE__ */ new Set(["key"]);
64485
+ var OAUTH_CODE_KEY = "code";
64486
+ var OAUTH_CODE_CONTEXT_KEYS = ["state", "grant_type"];
64487
+ var REDACTED_VALUE = "<redacted>";
64488
+ var TRUNCATED_VALUE = "[TRUNCATED: not redacted]";
64489
+ var TRUNCATED_KEY = "[TRUNCATED]";
64490
+ var MAX_REDACTION_DEPTH = 6;
64491
+ var MAX_ARRAY_ENTRIES = 50;
64492
+ var MAX_PARSED_STRING_LENGTH = 16384;
64493
+ var MAX_VISITED_NODES = 5e3;
64494
+ var MAX_CONTAINER_ENTRIES = 1e3;
64495
+ var MAX_STRING_CHARACTERS = 256e3;
64496
+ function redactLogBody({ body }) {
64497
+ return redactValue({
64498
+ value: body,
64499
+ depth: MAX_REDACTION_DEPTH,
64500
+ budget: {
64501
+ remainingNodes: MAX_VISITED_NODES,
64502
+ remainingChars: MAX_STRING_CHARACTERS
64503
+ }
64504
+ });
64505
+ }
64506
+ function redactLogUrl({ url: url2 }) {
64507
+ const queryIndex = url2.indexOf("?");
64508
+ if (queryIndex === -1) {
64509
+ return url2;
64510
+ }
64511
+ if (url2.length > MAX_PARSED_STRING_LENGTH) {
64512
+ return `${url2.slice(0, queryIndex)}?${TRUNCATED_VALUE}`;
64513
+ }
64514
+ const redactedQuery = redactFormEncoded({
64515
+ text: url2.slice(queryIndex + 1),
64516
+ extraRedactedKeys: URL_ONLY_REDACTED_KEYS
64517
+ });
64518
+ return redactedQuery === void 0 ? url2 : `${url2.slice(0, queryIndex)}?${redactedQuery}`;
64519
+ }
64520
+ function redactValue({ value, depth, budget }) {
64521
+ if (isOpaqueObject({ value })) {
64522
+ return replaceOpaqueObject({ value });
64523
+ }
64524
+ if (typeof value === "string") {
64525
+ if (value.length > budget.remainingChars) {
64526
+ return TRUNCATED_VALUE;
64527
+ }
64528
+ budget.remainingChars -= value.length;
64529
+ }
64530
+ if (depth <= 0 || budget.remainingNodes <= 0) {
64531
+ return isInspectable({ value }) ? TRUNCATED_VALUE : value;
64532
+ }
64533
+ budget.remainingNodes -= 1;
64534
+ if (typeof value === "string") {
64535
+ return redactString({ text: value, budget });
64536
+ }
64537
+ if (value instanceof URLSearchParams) {
64538
+ return redactValue({ value: value.toString(), depth, budget });
64539
+ }
64540
+ if (Array.isArray(value)) {
64541
+ return redactArray({ items: value, depth, budget });
64542
+ }
64543
+ if (isPlainObject2(value)) {
64544
+ return redactObject({ record: value, depth, budget });
64545
+ }
64546
+ return value;
64547
+ }
64548
+ function isOpaqueObject({ value }) {
64549
+ return typeof value === "object" && value !== null && !Array.isArray(value) && !isPlainObject2(value) && !(value instanceof URLSearchParams);
64550
+ }
64551
+ function replaceOpaqueObject({ value }) {
64552
+ if (typeof value !== "object" || value === null || value instanceof Date) {
64553
+ return value;
64554
+ }
64555
+ if (value instanceof ArrayBuffer || ArrayBuffer.isView(value)) {
64556
+ return `[BINARY ${value.byteLength} bytes]`;
64557
+ }
64558
+ if (value instanceof Blob) {
64559
+ return `[BINARY ${value.size} bytes]`;
64560
+ }
64561
+ if (value instanceof FormData || typeof Reflect.get(value, "pipe") === "function") {
64562
+ return "[BINARY stream]";
64563
+ }
64564
+ return TRUNCATED_VALUE;
64565
+ }
64566
+ function redactArray({ items, depth, budget }) {
64567
+ const isTruncated = items.length > MAX_ARRAY_ENTRIES;
64568
+ const keptItems = isTruncated ? items.slice(0, MAX_ARRAY_ENTRIES) : items;
64569
+ let redactedItems;
64570
+ for (const [index, item] of keptItems.entries()) {
64571
+ const redactedItem = redactValue({ value: item, depth: depth - 1, budget });
64572
+ if (redactedItem !== item) {
64573
+ redactedItems ??= [...keptItems];
64574
+ redactedItems[index] = redactedItem;
64575
+ }
64576
+ }
64577
+ const result = redactedItems ?? keptItems;
64578
+ return isTruncated ? [...result, TRUNCATED_VALUE] : result;
64579
+ }
64580
+ function redactObject({ record: record2, depth, budget }) {
64581
+ const redactedEntries = /* @__PURE__ */ new Map();
64582
+ const carriesOAuthCode = OAUTH_CODE_CONTEXT_KEYS.some((contextKey) => Object.hasOwn(record2, contextKey));
64583
+ const keptKeys = [];
64584
+ let isTruncated = false;
64585
+ for (const key in record2) {
64586
+ if (!Object.hasOwn(record2, key)) {
64587
+ continue;
64588
+ }
64589
+ if (keptKeys.length >= MAX_CONTAINER_ENTRIES || key.length > budget.remainingChars) {
64590
+ isTruncated = true;
64591
+ break;
64592
+ }
64593
+ budget.remainingChars -= key.length;
64594
+ keptKeys.push(key);
64595
+ const nestedValue = record2[key];
64596
+ const isSensitiveKey = isRedactedKey({ key }) || carriesOAuthCode && key === OAUTH_CODE_KEY;
64597
+ const shouldRedact = isSensitiveKey && nestedValue != null && typeof nestedValue !== "boolean";
64598
+ if (shouldRedact) {
64599
+ budget.remainingNodes -= 1;
64600
+ }
64601
+ const redactedNestedValue = shouldRedact ? REDACTED_VALUE : redactValue({ value: nestedValue, depth: depth - 1, budget });
64602
+ if (redactedNestedValue !== nestedValue) {
64603
+ redactedEntries.set(key, redactedNestedValue);
64604
+ }
64605
+ }
64606
+ if (isTruncated) {
64607
+ const keptRecord = {};
64608
+ for (const key of keptKeys) {
64609
+ keptRecord[key] = redactedEntries.has(key) ? redactedEntries.get(key) : record2[key];
64610
+ }
64611
+ keptRecord[TRUNCATED_KEY] = TRUNCATED_VALUE;
64612
+ return keptRecord;
64613
+ }
64614
+ return redactedEntries.size === 0 ? record2 : { ...record2, ...Object.fromEntries(redactedEntries) };
64615
+ }
64616
+ function redactString({ text, budget }) {
64617
+ if (text.length > MAX_PARSED_STRING_LENGTH) {
64618
+ return TRUNCATED_VALUE;
64619
+ }
64620
+ if (!isInspectable({ value: text })) {
64621
+ return text;
64622
+ }
64623
+ const trimmedText = text.trim();
64624
+ if (trimmedText.startsWith("{") || trimmedText.startsWith("[")) {
64625
+ try {
64626
+ const parsedValue = JSON.parse(trimmedText);
64627
+ const redactedValue = redactValue({
64628
+ value: parsedValue,
64629
+ depth: MAX_REDACTION_DEPTH,
64630
+ budget
64631
+ });
64632
+ return redactedValue === parsedValue ? text : JSON.stringify(redactedValue);
64633
+ } catch {
64634
+ return REDACTED_KEY_CANDIDATE_PATTERN.test(text) ? TRUNCATED_VALUE : redactFormEncoded({ text }) ?? text;
64635
+ }
64636
+ }
64637
+ return redactFormEncoded({ text }) ?? text;
64638
+ }
64639
+ function redactFormEncoded({ text, extraRedactedKeys }) {
64640
+ if (!text.includes("=") || !REDACTED_KEY_CANDIDATE_PATTERN.test(text)) {
64641
+ return void 0;
64642
+ }
64643
+ const params = new URLSearchParams(text);
64644
+ const carriesOAuthCode = OAUTH_CODE_CONTEXT_KEYS.some((contextKey) => params.has(contextKey));
64645
+ let hasRedactedParam = false;
64646
+ for (const key of new Set(params.keys())) {
64647
+ if (isRedactedKey({ key }) || extraRedactedKeys?.has(key.toLowerCase()) || carriesOAuthCode && key === OAUTH_CODE_KEY) {
64648
+ params.set(key, REDACTED_VALUE);
64649
+ hasRedactedParam = true;
64650
+ }
64651
+ }
64652
+ return hasRedactedParam ? params.toString() : void 0;
64653
+ }
64654
+ function isRedactedKey({ key }) {
64655
+ const normalizedKey = key.toLowerCase().replace(/[_-]/g, "");
64656
+ return REDACTED_KEY_NAMES.has(normalizedKey) || REDACTED_KEY_SUFFIX_PATTERN.test(normalizedKey);
63791
64657
  }
63792
-
63793
- // ../hyperline-config/build/index.js
63794
- import "dotenv/config";
63795
- import * as stackTraceParser from "stacktrace-parser";
63796
- function coerceBoolean() {
63797
- return external_exports.any().refine((value) => ["true", "false"].includes(value), {
63798
- message: "Expected boolean"
63799
- }).transform((value) => (
63800
- // biome-ignore lint/complexity/noUselessTernary: ignore
63801
- value === "true" ? true : false
63802
- ));
64658
+ function isInspectable({ value }) {
64659
+ if (typeof value === "string") {
64660
+ return value.length > MAX_PARSED_STRING_LENGTH || /^\s*[{[]/.test(value) || value.includes("=") && REDACTED_KEY_CANDIDATE_PATTERN.test(value);
64661
+ }
64662
+ return value instanceof URLSearchParams || Array.isArray(value) || isPlainObject2(value);
63803
64663
  }
63804
- var types = {
63805
- string: external_exports.coerce.string,
63806
- number: external_exports.coerce.number,
63807
- boolean: coerceBoolean,
63808
- enum: external_exports.enum
63809
- };
63810
- function getConfig(schema, testValues) {
63811
- const validator = external_exports.object(Object.fromEntries(Object.entries(schema).map(([key, zodType]) => {
63812
- if (zodType instanceof ZodOptional) {
63813
- return [key, external_exports.string().optional()];
63814
- }
63815
- return [key, external_exports.string()];
63816
- })));
63817
- const processEnv = process.env;
63818
- const isTestMode = processEnv.NODE_ENV === "test";
63819
- const envVariables = {
63820
- ...processEnv,
63821
- ...isTestMode && testValues ? Object.fromEntries(Object.entries(testValues).map(([key, value]) => [key, String(value)])) : {}
63822
- };
63823
- const packageName = envVariables.npm_package_name;
63824
- const parseProcessEnvResult = validator.safeParse(envVariables);
63825
- if (!parseProcessEnvResult.success) {
63826
- const parsedStackTrace = stackTraceParser.parse(parseProcessEnvResult.error.stack ?? "");
63827
- const getConfigCallLine = parsedStackTrace.find((line) => {
63828
- return !line.file?.includes("hyperline-config") && (line.file?.includes("apps/") || line.file?.includes("core/") || line.file?.includes("packages/"));
63829
- });
63830
- const callerFile = getConfigCallLine?.file;
63831
- console.error(`Invalid environment variables for service \`${packageName}\`: \`${callerFile}\``);
63832
- console.error(parseProcessEnvResult.error.format());
63833
- process.exit(1);
64664
+ function isPlainObject2(value) {
64665
+ if (typeof value !== "object" || value === null) {
64666
+ return false;
63834
64667
  }
63835
- const coercion = external_exports.object(schema);
63836
- return coercion.parse(parseProcessEnvResult.data);
64668
+ const prototype = Object.getPrototypeOf(value);
64669
+ return prototype === Object.prototype || prototype === null;
63837
64670
  }
63838
64671
 
63839
- // ../hyperline-monitoring/build/config.js
63840
- var config2 = getConfig({
63841
- // config
63842
- APP_VERSION: types.string().optional(),
63843
- // Deployment environment for log tagging, when it cannot be read off
63844
- // NODE_ENV. Set only by the PDF render worker pools, which must run with
63845
- // NODE_ENV="production" to get the production React build regardless of which
63846
- // environment the pod is actually in (see core/invoicing/services/pdf/index.ts).
63847
- // Unset everywhere else, so the NODE_ENV fallback keeps current behaviour.
63848
- APP_ENV: types.string().optional(),
63849
- DD_SERVICE: types.string().optional(),
63850
- LOGGER_CONSOLE_ENABLED: types.boolean().optional(),
63851
- LOGGER_STDOUT_ENABLED: types.boolean().optional(),
63852
- NODE_ENV: types.enum(["local", "test", "staging", "sandbox", "production"]),
63853
- EVENT_LOOP_MONITORING_ENABLED: types.boolean().optional(),
63854
- MEMORY_MONITORING_ENABLED: types.boolean().optional(),
63855
- MEMORY_MONITORING_INTERVAL_MS: types.number().optional()
63856
- // secrets
63857
- }, {
63858
- APP_VERSION: void 0,
63859
- APP_ENV: void 0,
63860
- DD_SERVICE: void 0,
63861
- LOGGER_CONSOLE_ENABLED: false,
63862
- LOGGER_STDOUT_ENABLED: false,
63863
- EVENT_LOOP_MONITORING_ENABLED: false,
63864
- MEMORY_MONITORING_ENABLED: false,
63865
- MEMORY_MONITORING_INTERVAL_MS: 3e4,
63866
- NODE_ENV: "test"
63867
- });
63868
-
63869
- // ../hyperline-monitoring/build/logger/logger.js
63870
- import * as util from "node:util";
63871
- import prune2 from "json-prune";
63872
- import * as winston from "winston";
63873
-
63874
64672
  // ../hyperline-monitoring/build/logger/formatting/format.js
63875
- import prune from "json-prune";
63876
64673
  var REDACTED_HEADER_KEY_PATTERN = /authorization|authenticate|cookie|secret|token|credential|signature|jwt|api[_-]?key|access[_-]?token|refresh[_-]?token|private[_-]?key/i;
63877
64674
  function jsonFormat(info) {
63878
64675
  const prunedInfo = JSON.parse(prune(info));
@@ -63933,14 +64730,106 @@ function transformPrune(info) {
63933
64730
  });
63934
64731
  return info;
63935
64732
  }
64733
+ var MAX_AXIOS_ERROR_DEPTH = 5;
64734
+ var MAX_AXIOS_ERROR_CONTAINER_ENTRIES = 1e3;
64735
+ var MAX_AXIOS_ERROR_VISITED_NODES = 5e3;
64736
+ var REDACTED_BODY_KEYS = /* @__PURE__ */ new Set(["requestBody", "responseBody"]);
63936
64737
  function transformAxiosError(info) {
63937
- Object.entries(info).forEach(([key, value]) => {
63938
- if (typeof value === "object" && value?.name === "AxiosError") {
63939
- info[key] = formatAxiosError(value);
64738
+ let walk;
64739
+ for (const [key, value] of Object.entries(info)) {
64740
+ if (typeof value !== "object" || value === null || REDACTED_BODY_KEYS.has(key)) {
64741
+ continue;
63940
64742
  }
63941
- });
64743
+ walk ??= {
64744
+ formatted: /* @__PURE__ */ new Map(),
64745
+ remainingNodes: MAX_AXIOS_ERROR_VISITED_NODES
64746
+ };
64747
+ const formattedValue = formatNestedAxiosErrors({
64748
+ value,
64749
+ depth: MAX_AXIOS_ERROR_DEPTH,
64750
+ walk
64751
+ });
64752
+ if (formattedValue !== value) {
64753
+ info[key] = formattedValue;
64754
+ }
64755
+ }
63942
64756
  return info;
63943
64757
  }
64758
+ function formatNestedAxiosErrors({ value, depth, walk }) {
64759
+ if (typeof value !== "object" || value === null) {
64760
+ return value;
64761
+ }
64762
+ if (walk.formatted.has(value)) {
64763
+ return walk.formatted.get(value);
64764
+ }
64765
+ if (Reflect.get(value, "name") === "AxiosError") {
64766
+ const formattedError = walk.remainingNodes > 0 ? formatAxiosError(value) : summarizeAxiosError({ error: value });
64767
+ walk.remainingNodes -= 1;
64768
+ walk.formatted.set(value, formattedError);
64769
+ return formattedError;
64770
+ }
64771
+ const isWalkable = Array.isArray(value) || value instanceof Error || isPlainRecord(value);
64772
+ if (!isWalkable || depth <= 0 || walk.remainingNodes <= 0) {
64773
+ return value;
64774
+ }
64775
+ walk.formatted.set(value, "[Circular]");
64776
+ walk.remainingNodes -= 1;
64777
+ const formattedValue = formatWalkableValue({ value, depth, walk });
64778
+ walk.formatted.set(value, formattedValue);
64779
+ return formattedValue;
64780
+ }
64781
+ function summarizeAxiosError({ error: error48 }) {
64782
+ return {
64783
+ name: Reflect.get(error48, "name"),
64784
+ message: Reflect.get(error48, "message"),
64785
+ code: Reflect.get(error48, "code")
64786
+ };
64787
+ }
64788
+ function formatWalkableValue({ value, depth, walk }) {
64789
+ if (Array.isArray(value)) {
64790
+ if (value.length > MAX_AXIOS_ERROR_CONTAINER_ENTRIES) {
64791
+ return value;
64792
+ }
64793
+ let formattedItems;
64794
+ for (const [index, item] of value.entries()) {
64795
+ const formattedItem = formatNestedAxiosErrors({
64796
+ value: item,
64797
+ depth: depth - 1,
64798
+ walk
64799
+ });
64800
+ if (formattedItem !== item) {
64801
+ formattedItems ??= [...value];
64802
+ formattedItems[index] = formattedItem;
64803
+ }
64804
+ }
64805
+ return formattedItems ?? value;
64806
+ }
64807
+ const keys = Object.keys(value);
64808
+ if (keys.length > MAX_AXIOS_ERROR_CONTAINER_ENTRIES) {
64809
+ return value;
64810
+ }
64811
+ const formattedEntries = /* @__PURE__ */ new Map();
64812
+ for (const key of keys) {
64813
+ const nestedValue = Reflect.get(value, key);
64814
+ const formattedNestedValue = formatNestedAxiosErrors({
64815
+ value: nestedValue,
64816
+ depth: depth - 1,
64817
+ walk
64818
+ });
64819
+ if (formattedNestedValue !== nestedValue) {
64820
+ formattedEntries.set(key, formattedNestedValue);
64821
+ }
64822
+ }
64823
+ if (formattedEntries.size === 0) {
64824
+ return value;
64825
+ }
64826
+ return {
64827
+ ...value,
64828
+ // Error properties are not enumerable, so the spread would drop them.
64829
+ ...value instanceof Error ? { name: value.name, message: value.message, stack: value.stack } : {},
64830
+ ...Object.fromEntries(formattedEntries)
64831
+ };
64832
+ }
63944
64833
  function formatAxiosError(error48) {
63945
64834
  if (!isRecord(error48) || error48.name !== "AxiosError") {
63946
64835
  return error48;
@@ -63953,9 +64842,9 @@ function formatAxiosError(error48) {
63953
64842
  code: error48.code,
63954
64843
  request: {
63955
64844
  method: request?.method,
63956
- url: request?.url,
64845
+ url: typeof request?.url === "string" ? redactLogUrl({ url: request.url }) : request?.url,
63957
64846
  baseURL: request?.baseURL,
63958
- params: request?.params,
64847
+ params: redactLogBody({ body: request?.params }),
63959
64848
  headers: redactHeaders({ headers: request?.headers }),
63960
64849
  "axios-retry": request?.["axios-retry"]
63961
64850
  },
@@ -63963,7 +64852,7 @@ function formatAxiosError(error48) {
63963
64852
  status: response?.status,
63964
64853
  statusText: response?.statusText,
63965
64854
  headers: redactHeaders({ headers: response?.headers }),
63966
- data: response?.data
64855
+ data: redactLogBody({ body: response?.data })
63967
64856
  }
63968
64857
  };
63969
64858
  }
@@ -63976,6 +64865,10 @@ function redactHeaders({ headers }) {
63976
64865
  REDACTED_HEADER_KEY_PATTERN.test(headerKey) ? "<redacted>" : headerValue
63977
64866
  ]));
63978
64867
  }
64868
+ function isPlainRecord(value) {
64869
+ const prototype = Object.getPrototypeOf(value);
64870
+ return prototype === Object.prototype || prototype === null;
64871
+ }
63979
64872
  function isRecord(value) {
63980
64873
  return typeof value === "object" && value !== null && !Array.isArray(value);
63981
64874
  }
@@ -64005,7 +64898,7 @@ function logHttpResponse(logger2, response, responseTime, extra) {
64005
64898
  const responseMetadata = {
64006
64899
  statusCode,
64007
64900
  responseTime,
64008
- responseBody,
64901
+ responseBody: redactLogBody({ body: responseBody }),
64009
64902
  // Redacted so secrets (authorization/cookie/token/…) never reach the logs
64010
64903
  // while diagnostic headers (e.g. rate-limit headers on a 429) stay visible.
64011
64904
  responseHeaders: responseHeaders === void 0 ? void 0 : redactHeaders({ headers: responseHeaders })
@@ -64018,14 +64911,15 @@ function logHttpResponse(logger2, response, responseTime, extra) {
64018
64911
  }
64019
64912
  function transform2(request) {
64020
64913
  const method = request.method.toUpperCase();
64021
- const message = `${method} ${request.originalUrl}`;
64914
+ const originalUrl = redactLogUrl({ url: request.originalUrl });
64915
+ const message = `${method} ${originalUrl}`;
64022
64916
  const metadata = {};
64023
64917
  metadata.method = method;
64024
- metadata.url = request.url;
64025
- metadata.path = request.path;
64918
+ metadata.url = redactLogUrl({ url: request.url });
64919
+ metadata.path = redactLogUrl({ url: request.path });
64026
64920
  metadata.hostname = request.hostname;
64027
- metadata.originalUrl = request.originalUrl;
64028
- metadata.requestBody = request.body && typeof request.body === "object" && "apiKey" in request.body ? { ...request.body, apiKey: "<redacted>" } : request.body;
64921
+ metadata.originalUrl = originalUrl;
64922
+ metadata.requestBody = redactLogBody({ body: request.body });
64029
64923
  metadata.routePath = transformUrlIntoRoutePath(request);
64030
64924
  metadata.apiKeyEnd = request.headers["authorization"]?.slice(-6);
64031
64925
  return { message, metadata };
@@ -64072,7 +64966,16 @@ function buildLoggerFactory({ config: config4, context }) {
64072
64966
  const internalLogger = winston.createLogger({
64073
64967
  transports: transports2,
64074
64968
  defaultMeta,
64075
- 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()),
64969
+ format: winston.format.combine(
64970
+ winston.format.splat(),
64971
+ winston.format(addMetadata({ getCorrelationId, getExecutionContext }))(),
64972
+ // Before pruning: json-prune would otherwise serialize a binary
64973
+ // `response.data` byte by byte before it is summarised (#6006).
64974
+ winston.format(transformAxiosError)(),
64975
+ winston.format(transformErrorEnrich)({ depth: 5 }),
64976
+ winston.format(transformPrune)(),
64977
+ winston.format.timestamp()
64978
+ ),
64076
64979
  exitOnError: false
64077
64980
  });
64078
64981
  function createLogger3({ serviceName }) {
@@ -66419,11 +67322,32 @@ import { deepEqual } from "fast-equals";
66419
67322
 
66420
67323
  // ../hyperline-lib/build/utils/realignDatesToTimezone.js
66421
67324
  var import_shared4 = __toESM(require_shared(), 1);
66422
- var MILLISECONDS_PER_DAY = 24 * 60 * 60 * 1e3;
67325
+ var MILLISECONDS_PER_HOUR = 60 * 60 * 1e3;
67326
+ var MILLISECONDS_PER_DAY = 24 * MILLISECONDS_PER_HOUR;
66423
67327
  var LAST_MILLISECOND_OF_DAY = MILLISECONDS_PER_DAY - 1;
67328
+ var dateRealignmentModeSchema = external_exports.enum([
67329
+ "utc_midnight_import",
67330
+ "dst_hour_drift",
67331
+ "month_start_drift",
67332
+ "manual_phase_end_midnight"
67333
+ ]).default("utc_midnight_import");
67334
+ var DST_HOUR_SHIFT_BY_LOCAL_MILLISECOND_OF_DAY = /* @__PURE__ */ new Map([
67335
+ [23 * MILLISECONDS_PER_HOUR, MILLISECONDS_PER_HOUR],
67336
+ [LAST_MILLISECOND_OF_DAY - MILLISECONDS_PER_HOUR, MILLISECONDS_PER_HOUR],
67337
+ [MILLISECONDS_PER_HOUR, -MILLISECONDS_PER_HOUR],
67338
+ [MILLISECONDS_PER_HOUR - 1, -MILLISECONDS_PER_HOUR]
67339
+ ]);
67340
+
67341
+ // ../hyperline-lib/build/utils/overviewPeriods.js
67342
+ var OverviewPeriodSchema = external_exports.enum([
67343
+ "this_month",
67344
+ "last_month",
67345
+ "last_3_months"
67346
+ ]);
66424
67347
 
66425
67348
  // ../hyperline-lib/build/utils/api/filterBuilder.js
66426
- var baseAuthorizedOperators = ["not", "isNull", "isNotNull"];
67349
+ var nullAuthorizedOperators = ["isNull", "isNotNull"];
67350
+ var baseAuthorizedOperators = ["not", ...nullAuthorizedOperators];
66427
67351
  var booleanAuthorizedOperators = [
66428
67352
  ...baseAuthorizedOperators,
66429
67353
  "equals"
@@ -66452,6 +67376,7 @@ var authorizedOperators = [
66452
67376
  ...arrayAuthorizedOperators,
66453
67377
  ...mapAuthorizedOperators
66454
67378
  ];
67379
+ var NullFilterValueSchema = BooleanSchema.or(external_exports.literal("")).optional();
66455
67380
 
66456
67381
  // ../hyperline-lib/build/http/dto/state.js
66457
67382
  var StateSchema = external_exports.enum(usStates).openapi({
@@ -66489,150 +67414,6 @@ var isAxiosError = axios.isAxiosError;
66489
67414
  // ../hyperline-lib/build/httpClient/httpClient.js
66490
67415
  import axios2 from "axios";
66491
67416
  import axiosRetry, { isNetworkOrIdempotentRequestError, retryAfter } from "axios-retry";
66492
-
66493
- // ../hyperline-lib/build/httpClient/logRedaction.js
66494
- var REDACTED_KEY_NAMES = /* @__PURE__ */ new Set([
66495
- "accesstoken",
66496
- "apikey",
66497
- "apitoken",
66498
- "assertion",
66499
- "authtoken",
66500
- "clientassertion",
66501
- "codeverifier",
66502
- "credentials",
66503
- "idtoken",
66504
- "privatekey",
66505
- "refreshtoken",
66506
- "sessiontoken",
66507
- "token"
66508
- ]);
66509
- var REDACTED_KEY_SUFFIX_PATTERN = /(secret|password)$/;
66510
- var REDACTED_KEY_CANDIDATE_PATTERN = /token|key|secret|password|assertion|verifier|credentials/i;
66511
- var REDACTED_VALUE = "<redacted>";
66512
- var MAX_REDACTION_DEPTH = 10;
66513
- var MAX_PARSED_STRING_LENGTH = 16384;
66514
- var MAX_VISITED_NODES = 1e3;
66515
- var MAX_CONTAINER_ENTRIES = MAX_VISITED_NODES;
66516
- function redactLogBody({ body }) {
66517
- return redactValue({
66518
- value: body,
66519
- depth: MAX_REDACTION_DEPTH,
66520
- budget: { remainingNodes: MAX_VISITED_NODES }
66521
- });
66522
- }
66523
- function redactLogUrl({ url: url2 }) {
66524
- const queryIndex = url2.indexOf("?");
66525
- if (queryIndex === -1 || url2.length > MAX_PARSED_STRING_LENGTH) {
66526
- return url2;
66527
- }
66528
- const redactedQuery = redactFormEncoded({ text: url2.slice(queryIndex + 1) });
66529
- return redactedQuery === void 0 ? url2 : `${url2.slice(0, queryIndex)}?${redactedQuery}`;
66530
- }
66531
- function redactValue({ value, depth, budget }) {
66532
- if (depth <= 0 || budget.remainingNodes <= 0) {
66533
- return value;
66534
- }
66535
- budget.remainingNodes -= 1;
66536
- if (typeof value === "string") {
66537
- return redactString({ text: value, budget });
66538
- }
66539
- if (value instanceof URLSearchParams) {
66540
- return redactFormEncoded({ text: value.toString() }) ?? value;
66541
- }
66542
- if (Array.isArray(value)) {
66543
- return redactArray({ items: value, depth, budget });
66544
- }
66545
- if (isPlainObject2(value)) {
66546
- return redactObject({ record: value, depth, budget });
66547
- }
66548
- return value;
66549
- }
66550
- function redactArray({ items, depth, budget }) {
66551
- if (items.length > MAX_CONTAINER_ENTRIES) {
66552
- return items;
66553
- }
66554
- let redactedItems;
66555
- for (const [index, item] of items.entries()) {
66556
- if (budget.remainingNodes <= 0) {
66557
- break;
66558
- }
66559
- const redactedItem = redactValue({ value: item, depth: depth - 1, budget });
66560
- if (redactedItem !== item) {
66561
- redactedItems ??= [...items];
66562
- redactedItems[index] = redactedItem;
66563
- }
66564
- }
66565
- return redactedItems ?? items;
66566
- }
66567
- function redactObject({ record: record2, depth, budget }) {
66568
- const redactedEntries = /* @__PURE__ */ new Map();
66569
- let entryCount = 0;
66570
- for (const key in record2) {
66571
- if (!Object.hasOwn(record2, key)) {
66572
- continue;
66573
- }
66574
- entryCount += 1;
66575
- if (entryCount > MAX_CONTAINER_ENTRIES) {
66576
- return record2;
66577
- }
66578
- if (budget.remainingNodes <= 0) {
66579
- break;
66580
- }
66581
- const nestedValue = record2[key];
66582
- const redactedNestedValue = isRedactedKey({ key }) && nestedValue != null ? REDACTED_VALUE : redactValue({ value: nestedValue, depth: depth - 1, budget });
66583
- if (redactedNestedValue !== nestedValue) {
66584
- redactedEntries.set(key, redactedNestedValue);
66585
- }
66586
- }
66587
- return redactedEntries.size === 0 ? record2 : { ...record2, ...Object.fromEntries(redactedEntries) };
66588
- }
66589
- function redactString({ text, budget }) {
66590
- if (text.length > MAX_PARSED_STRING_LENGTH) {
66591
- return text;
66592
- }
66593
- const trimmedText = text.trim();
66594
- if (trimmedText.startsWith("{") || trimmedText.startsWith("[")) {
66595
- try {
66596
- const parsedValue = JSON.parse(trimmedText);
66597
- const redactedValue = redactValue({
66598
- value: parsedValue,
66599
- depth: MAX_REDACTION_DEPTH,
66600
- budget
66601
- });
66602
- return redactedValue === parsedValue ? text : JSON.stringify(redactedValue);
66603
- } catch {
66604
- return text;
66605
- }
66606
- }
66607
- return redactFormEncoded({ text }) ?? text;
66608
- }
66609
- function redactFormEncoded({ text }) {
66610
- if (!text.includes("=") || !REDACTED_KEY_CANDIDATE_PATTERN.test(text)) {
66611
- return void 0;
66612
- }
66613
- const params = new URLSearchParams(text);
66614
- let hasRedactedParam = false;
66615
- for (const key of new Set(params.keys())) {
66616
- if (isRedactedKey({ key })) {
66617
- params.set(key, REDACTED_VALUE);
66618
- hasRedactedParam = true;
66619
- }
66620
- }
66621
- return hasRedactedParam ? params.toString() : void 0;
66622
- }
66623
- function isRedactedKey({ key }) {
66624
- const normalizedKey = key.toLowerCase().replace(/[_-]/g, "");
66625
- return REDACTED_KEY_NAMES.has(normalizedKey) || REDACTED_KEY_SUFFIX_PATTERN.test(normalizedKey);
66626
- }
66627
- function isPlainObject2(value) {
66628
- if (typeof value !== "object" || value === null) {
66629
- return false;
66630
- }
66631
- const prototype = Object.getPrototypeOf(value);
66632
- return prototype === Object.prototype || prototype === null;
66633
- }
66634
-
66635
- // ../hyperline-lib/build/httpClient/httpClient.js
66636
67417
  import { AxiosError } from "axios";
66637
67418
  var recommendedRetryConfig = {
66638
67419
  retries: 3,
@@ -66700,14 +67481,14 @@ function isTooManyRequestsError(error48) {
66700
67481
  return error48.response?.status === 429;
66701
67482
  }
66702
67483
  var toLogRequest = (config4) => {
66703
- const url2 = redactLogUrl({ url: config4.url ?? "" });
67484
+ const url2 = config4.url ?? "";
66704
67485
  return {
66705
67486
  method: config4.method ?? "",
66706
67487
  url: url2,
66707
67488
  path: url2,
66708
67489
  hostname: config4.baseURL ?? "",
66709
67490
  originalUrl: `${config4.baseURL ?? ""}${url2}`,
66710
- body: redactLogBody({ body: config4.data }),
67491
+ body: config4.data,
66711
67492
  headers: {}
66712
67493
  };
66713
67494
  };
@@ -66727,9 +67508,13 @@ import multer2 from "multer";
66727
67508
  // ../hyperline-lib/build/httpRouter/file.js
66728
67509
  import helmet from "helmet";
66729
67510
 
66730
- // ../hyperline-lib/build/publicApi/auth/index.js
67511
+ // ../hyperline-lib/build/publicApi/auth/apiKey.js
66731
67512
  import { randomBytes as randomBytes2, scryptSync } from "node:crypto";
66732
67513
 
67514
+ // ../hyperline-lib/build/publicApi/auth/apiKeyHashCache.js
67515
+ import { createHash as createHash4 } from "node:crypto";
67516
+ var TTL_MS = 5 * 6e4;
67517
+
66733
67518
  // ../hyperline-mcp/build/requestBuilder.js
66734
67519
  function buildRequestConfig(path2, args, method, queryParamKeys = []) {
66735
67520
  const { url: url2, usedKeys } = replacePathParams(path2, args);