@hyperline/cli 0.1.0-build.1.edf4831 → 0.1.0-build.1.ee01a0a

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.
@@ -38483,7 +38483,7 @@ Examples:
38483
38483
  queryParamKeys: []
38484
38484
  });
38485
38485
  });
38486
- resource.command("delete-ledger").description(`Delete an unused accounting ledger.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
38486
+ resource.command("delete-ledger").description(`Permanently delete a ledger with its accounts, rules, journal entries and revenue recognition schedules, and unlink the suppliers, supplier contracts and accounting settings that reference it.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
38487
38487
  Examples:
38488
38488
  hyperline accounting-ledgers delete-ledger --id <id>
38489
38489
  hyperline accounting-ledgers delete-ledger --id <id> --output json`).action(async (opts) => {
@@ -39524,7 +39524,7 @@ Examples:
39524
39524
 
39525
39525
  // build/commands/generated/ai-billing.js
39526
39526
  function registerAi_BillingCommands(parent) {
39527
- const resource = parent.command("ai-billing").description("Manage ai billing");
39527
+ const resource = parent.command("ai-billing").description("Manage ai > billing");
39528
39528
  resource.command("list-agent-plans").description(`List AI agent billing plans: workspace-level offers carrying a billing mode (wallet/credits/windows), rate card, allowance windows, markups and per-seat credit grants. Filter by mode; paginated with take/skip.`).option("--mode <value>", `Billing mode.
39529
39529
 
39530
39530
  - wallet: Charges a monetary wallet.
@@ -39547,7 +39547,7 @@ Examples:
39547
39547
  args.skip = Number(opts.skip);
39548
39548
  await ctx.execute({
39549
39549
  method: "GET",
39550
- path: "/v1/ai-billing/plans",
39550
+ path: "/v1/ai/billing/plans",
39551
39551
  args,
39552
39552
  queryParamKeys: ["mode", "take", "skip"]
39553
39553
  });
@@ -39598,39 +39598,32 @@ Examples:
39598
39598
  args.windows = JSON.parse(opts.windows);
39599
39599
  await ctx.execute({
39600
39600
  method: "POST",
39601
- path: "/v1/ai-billing/plans",
39601
+ path: "/v1/ai/billing/plans",
39602
39602
  args,
39603
39603
  queryParamKeys: []
39604
39604
  });
39605
39605
  });
39606
- resource.command("get-agent-plan").description(`Get one AI agent billing plan by id, with its embedded rate card, window definitions, markups, per-seat grants and minted catalog object ids.`).requiredOption("--plan-id <value>", `plan_id parameter`).addHelpText("after", `
39606
+ resource.command("get-agent-default-plan").description(`Get the workspace's default AI agent billing plan marker (plan id and auto_apply flag). 404 when none is set.`).addHelpText("after", `
39607
39607
  Examples:
39608
- hyperline ai-billing get-agent-plan --plan-id <plan_id>`).action(async (opts) => {
39608
+ hyperline ai-billing get-agent-default-plan`).action(async (_opts) => {
39609
39609
  const ctx = resource.parent?.opts()._ctx;
39610
39610
  if (!ctx) {
39611
39611
  process.stderr.write("Error: Not authenticated\n");
39612
39612
  process.exit(1);
39613
39613
  }
39614
39614
  const args = {};
39615
- if (opts.planId !== void 0)
39616
- args.plan_id = opts.planId;
39617
39615
  await ctx.execute({
39618
39616
  method: "GET",
39619
- path: "/v1/ai-billing/plans/{plan_id}",
39617
+ path: "/v1/ai/billing/plans/default",
39620
39618
  args,
39621
39619
  queryParamKeys: []
39622
39620
  });
39623
39621
  });
39624
- resource.command("replace-agent-plan").description(`Replace an AI agent billing plan (whole-row semantics). Changes take effect on the next call for every customer on the plan; mode is immutable. Overage is priced by overage_markup_percent or by overage_rate_card_id, never both.`).requiredOption("--plan-id <value>", `plan_id parameter`).requiredOption("--name <value>", `Human-readable resource name.`).option("--rate-card-id <value>", `Rate card reference. On policy writes, omission preserves the current reference and null detaches it; on plan replacement omission clears it.`).option("--overage-mode <value>", `Behavior when credits or an allowance are exhausted. Policy values may inherit the attached plan.
39625
-
39626
- - refuse: Rejects the call that crosses the boundary without deducting usage.
39627
- - metered: Prices the whole call as monetary overage, using the overage card or USD provider cost plus markup.`).option("--markup-percent <value>", `Percentage added to resolved cost. Null on writes means no override; an attached plan may supply the value.`).option("--overage-markup-percent <value>", `Percentage added to provider cost for overage. Mutually exclusive with overage_rate_card_id.`).option("--overage-rate-card-id <value>", `Currency rate card used to price overage directly. Null means provider cost plus the resolved overage markup.`).option("--windows <json>", `Rolling allowances. Required for windows plans; each window meters every call. A plan replacement replaces the entire array.`).option("--per-seat-credits <value>", `Credits granted per seat per billing period. Null grants no credits.`).option("--grant-rollover-enabled", `Whether granted credits survive renewal. Purchased credits always roll over.`).option("--settlement-interval-minutes <number>", `Settlement interval in minutes. Null means no interval override. Mutually exclusive with settlement_schedule.`).option("--settlement-schedule <value>", `Calendar settlement schedule. Null clears the override; mutually exclusive with settlement_interval_minutes.
39628
-
39629
- - calendar_month: Settles at the end of each UTC calendar month.`).addHelpText("after", `
39622
+ resource.command("set-agent-default-plan").description(`Mark one plan as the workspace's default AI agent billing plan (body: plan_id, optional auto_apply). Replaces the previous marker; 404 when the plan is not this workspace's.`).requiredOption("--plan-id <value>", `Billing plan reference. On policy writes, omission preserves the current plan and null detaches it.`).option("--auto-apply", `Whether eligible newly ingested customers receive the default plan automatically.`).addHelpText("after", `
39630
39623
  Examples:
39631
- hyperline ai-billing replace-agent-plan --plan-id <plan_id> --name <name>
39632
- hyperline ai-billing replace-agent-plan --plan-id <plan_id> --name <name> --rate-card-id <rate_card_id> --overage-mode <overage_mode>
39633
- hyperline ai-billing replace-agent-plan --plan-id <plan_id> --name <name> --output json`).action(async (opts) => {
39624
+ hyperline ai-billing set-agent-default-plan --plan-id <plan_id>
39625
+ hyperline ai-billing set-agent-default-plan --plan-id <plan_id> --auto-apply
39626
+ hyperline ai-billing set-agent-default-plan --plan-id <plan_id> --output json`).action(async (opts) => {
39634
39627
  const ctx = resource.parent?.opts()._ctx;
39635
39628
  if (!ctx) {
39636
39629
  process.stderr.write("Error: Not authenticated\n");
@@ -39639,47 +39632,25 @@ Examples:
39639
39632
  const args = {};
39640
39633
  if (opts.planId !== void 0)
39641
39634
  args.plan_id = opts.planId;
39642
- if (opts.name !== void 0)
39643
- args.name = opts.name;
39644
- if (opts.rateCardId !== void 0)
39645
- args.rate_card_id = opts.rateCardId;
39646
- if (opts.overageMode !== void 0)
39647
- args.overage_mode = opts.overageMode;
39648
- if (opts.markupPercent !== void 0)
39649
- args.markup_percent = opts.markupPercent;
39650
- if (opts.overageMarkupPercent !== void 0)
39651
- args.overage_markup_percent = opts.overageMarkupPercent;
39652
- if (opts.overageRateCardId !== void 0)
39653
- args.overage_rate_card_id = opts.overageRateCardId;
39654
- if (opts.perSeatCredits !== void 0)
39655
- args.per_seat_credits = opts.perSeatCredits;
39656
- if (opts.settlementSchedule !== void 0)
39657
- args.settlement_schedule = opts.settlementSchedule;
39658
- if (opts.settlementIntervalMinutes !== void 0)
39659
- args.settlement_interval_minutes = Number(opts.settlementIntervalMinutes);
39660
- if (opts.grantRolloverEnabled !== void 0)
39661
- args.grant_rollover_enabled = true;
39662
- if (opts.windows !== void 0)
39663
- args.windows = JSON.parse(opts.windows);
39635
+ if (opts.autoApply !== void 0)
39636
+ args.auto_apply = true;
39664
39637
  await ctx.execute({
39665
39638
  method: "PUT",
39666
- path: "/v1/ai-billing/plans/{plan_id}",
39639
+ path: "/v1/ai/billing/plans/default",
39667
39640
  args,
39668
39641
  queryParamKeys: []
39669
39642
  });
39670
39643
  });
39671
- resource.command("delete-agent-plan").description(`Delete an AI agent billing plan. Refused (409, plan_in_use) while any customer is still attached to it.`).requiredOption("--plan-id <value>", `plan_id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
39644
+ resource.command("clear-agent-default-plan").description(`Clear the workspace's default AI agent billing plan marker. The plan itself is untouched. 404 when none is set.`).option("--yes", "Skip confirmation").addHelpText("after", `
39672
39645
  Examples:
39673
- hyperline ai-billing delete-agent-plan --plan-id <plan_id>
39674
- hyperline ai-billing delete-agent-plan --plan-id <plan_id> --output json`).action(async (opts) => {
39646
+ hyperline ai-billing clear-agent-default-plan
39647
+ hyperline ai-billing clear-agent-default-plan --output json`).action(async (opts) => {
39675
39648
  const ctx = resource.parent?.opts()._ctx;
39676
39649
  if (!ctx) {
39677
39650
  process.stderr.write("Error: Not authenticated\n");
39678
39651
  process.exit(1);
39679
39652
  }
39680
39653
  const args = {};
39681
- if (opts.planId !== void 0)
39682
- args.plan_id = opts.planId;
39683
39654
  if (!opts.yes) {
39684
39655
  const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
39685
39656
  if (!confirmed) {
@@ -39689,59 +39660,88 @@ Examples:
39689
39660
  }
39690
39661
  await ctx.execute({
39691
39662
  method: "DELETE",
39692
- path: "/v1/ai-billing/plans/{plan_id}",
39663
+ path: "/v1/ai/billing/plans/default",
39693
39664
  args,
39694
39665
  queryParamKeys: []
39695
39666
  });
39696
39667
  });
39697
- resource.command("get-agent-default-plan").description(`Get the workspace's default AI agent billing plan marker (plan id and auto_apply flag). 404 when none is set.`).addHelpText("after", `
39668
+ resource.command("get-agent-plan").description(`Get one AI agent billing plan by id, with its embedded rate card, window definitions, markups, per-seat grants and minted catalog object ids.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
39698
39669
  Examples:
39699
- hyperline ai-billing get-agent-default-plan`).action(async (_opts) => {
39670
+ hyperline ai-billing get-agent-plan --id <id>`).action(async (opts) => {
39700
39671
  const ctx = resource.parent?.opts()._ctx;
39701
39672
  if (!ctx) {
39702
39673
  process.stderr.write("Error: Not authenticated\n");
39703
39674
  process.exit(1);
39704
39675
  }
39705
39676
  const args = {};
39677
+ if (opts.id !== void 0)
39678
+ args.id = opts.id;
39706
39679
  await ctx.execute({
39707
39680
  method: "GET",
39708
- path: "/v1/ai-billing/default-plan",
39681
+ path: "/v1/ai/billing/plans/{id}",
39709
39682
  args,
39710
39683
  queryParamKeys: []
39711
39684
  });
39712
39685
  });
39713
- resource.command("set-agent-default-plan").description(`Mark one plan as the workspace's default AI agent billing plan (body: plan_id, optional auto_apply). Replaces the previous marker; 404 when the plan is not this workspace's.`).requiredOption("--plan-id <value>", `Billing plan reference. On policy writes, omission preserves the current plan and null detaches it.`).option("--auto-apply", `Whether eligible newly ingested customers receive the default plan automatically.`).addHelpText("after", `
39686
+ resource.command("replace-agent-plan").description(`Replace an AI agent billing plan (whole-row semantics). Changes take effect on the next call for every customer on the plan; mode is immutable. Overage is priced by overage_markup_percent or by overage_rate_card_id, never both.`).requiredOption("--id <value>", `id parameter`).requiredOption("--name <value>", `Human-readable resource name.`).option("--rate-card-id <value>", `Rate card reference. On policy writes, omission preserves the current reference and null detaches it; on plan replacement omission clears it.`).option("--overage-mode <value>", `Behavior when credits or an allowance are exhausted. Policy values may inherit the attached plan.
39687
+
39688
+ - refuse: Rejects the call that crosses the boundary without deducting usage.
39689
+ - metered: Prices the whole call as monetary overage, using the overage card or USD provider cost plus markup.`).option("--markup-percent <value>", `Percentage added to resolved cost. Null on writes means no override; an attached plan may supply the value.`).option("--overage-markup-percent <value>", `Percentage added to provider cost for overage. Mutually exclusive with overage_rate_card_id.`).option("--overage-rate-card-id <value>", `Currency rate card used to price overage directly. Null means provider cost plus the resolved overage markup.`).option("--windows <json>", `Rolling allowances. Required for windows plans; each window meters every call. A plan replacement replaces the entire array.`).option("--per-seat-credits <value>", `Credits granted per seat per billing period. Null grants no credits.`).option("--grant-rollover-enabled", `Whether granted credits survive renewal. Purchased credits always roll over.`).option("--settlement-interval-minutes <number>", `Settlement interval in minutes. Null means no interval override. Mutually exclusive with settlement_schedule.`).option("--settlement-schedule <value>", `Calendar settlement schedule. Null clears the override; mutually exclusive with settlement_interval_minutes.
39690
+
39691
+ - calendar_month: Settles at the end of each UTC calendar month.`).addHelpText("after", `
39714
39692
  Examples:
39715
- hyperline ai-billing set-agent-default-plan --plan-id <plan_id>
39716
- hyperline ai-billing set-agent-default-plan --plan-id <plan_id> --auto-apply
39717
- hyperline ai-billing set-agent-default-plan --plan-id <plan_id> --output json`).action(async (opts) => {
39693
+ hyperline ai-billing replace-agent-plan --id <id> --name <name>
39694
+ hyperline ai-billing replace-agent-plan --id <id> --name <name> --rate-card-id <rate_card_id> --overage-mode <overage_mode>
39695
+ hyperline ai-billing replace-agent-plan --id <id> --name <name> --output json`).action(async (opts) => {
39718
39696
  const ctx = resource.parent?.opts()._ctx;
39719
39697
  if (!ctx) {
39720
39698
  process.stderr.write("Error: Not authenticated\n");
39721
39699
  process.exit(1);
39722
39700
  }
39723
39701
  const args = {};
39724
- if (opts.planId !== void 0)
39725
- args.plan_id = opts.planId;
39726
- if (opts.autoApply !== void 0)
39727
- args.auto_apply = true;
39702
+ if (opts.id !== void 0)
39703
+ args.id = opts.id;
39704
+ if (opts.name !== void 0)
39705
+ args.name = opts.name;
39706
+ if (opts.rateCardId !== void 0)
39707
+ args.rate_card_id = opts.rateCardId;
39708
+ if (opts.overageMode !== void 0)
39709
+ args.overage_mode = opts.overageMode;
39710
+ if (opts.markupPercent !== void 0)
39711
+ args.markup_percent = opts.markupPercent;
39712
+ if (opts.overageMarkupPercent !== void 0)
39713
+ args.overage_markup_percent = opts.overageMarkupPercent;
39714
+ if (opts.overageRateCardId !== void 0)
39715
+ args.overage_rate_card_id = opts.overageRateCardId;
39716
+ if (opts.perSeatCredits !== void 0)
39717
+ args.per_seat_credits = opts.perSeatCredits;
39718
+ if (opts.settlementSchedule !== void 0)
39719
+ args.settlement_schedule = opts.settlementSchedule;
39720
+ if (opts.settlementIntervalMinutes !== void 0)
39721
+ args.settlement_interval_minutes = Number(opts.settlementIntervalMinutes);
39722
+ if (opts.grantRolloverEnabled !== void 0)
39723
+ args.grant_rollover_enabled = true;
39724
+ if (opts.windows !== void 0)
39725
+ args.windows = JSON.parse(opts.windows);
39728
39726
  await ctx.execute({
39729
39727
  method: "PUT",
39730
- path: "/v1/ai-billing/default-plan",
39728
+ path: "/v1/ai/billing/plans/{id}",
39731
39729
  args,
39732
39730
  queryParamKeys: []
39733
39731
  });
39734
39732
  });
39735
- resource.command("clear-agent-default-plan").description(`Clear the workspace's default AI agent billing plan marker. The plan itself is untouched. 404 when none is set.`).option("--yes", "Skip confirmation").addHelpText("after", `
39733
+ resource.command("delete-agent-plan").description(`Delete an AI agent billing plan. Refused (409, plan_in_use) while any customer is still attached to it.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
39736
39734
  Examples:
39737
- hyperline ai-billing clear-agent-default-plan
39738
- hyperline ai-billing clear-agent-default-plan --output json`).action(async (opts) => {
39735
+ hyperline ai-billing delete-agent-plan --id <id>
39736
+ hyperline ai-billing delete-agent-plan --id <id> --output json`).action(async (opts) => {
39739
39737
  const ctx = resource.parent?.opts()._ctx;
39740
39738
  if (!ctx) {
39741
39739
  process.stderr.write("Error: Not authenticated\n");
39742
39740
  process.exit(1);
39743
39741
  }
39744
39742
  const args = {};
39743
+ if (opts.id !== void 0)
39744
+ args.id = opts.id;
39745
39745
  if (!opts.yes) {
39746
39746
  const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
39747
39747
  if (!confirmed) {
@@ -39751,7 +39751,7 @@ Examples:
39751
39751
  }
39752
39752
  await ctx.execute({
39753
39753
  method: "DELETE",
39754
- path: "/v1/ai-billing/default-plan",
39754
+ path: "/v1/ai/billing/plans/{id}",
39755
39755
  args,
39756
39756
  queryParamKeys: []
39757
39757
  });
@@ -39782,7 +39782,7 @@ Examples:
39782
39782
  args.skip = Number(opts.skip);
39783
39783
  await ctx.execute({
39784
39784
  method: "GET",
39785
- path: "/v1/ai-billing/rate-cards",
39785
+ path: "/v1/ai/billing/rate-cards",
39786
39786
  args,
39787
39787
  queryParamKeys: ["denomination", "currency", "search", "take", "skip"]
39788
39788
  });
@@ -39814,42 +39814,42 @@ Examples:
39814
39814
  args.rows = JSON.parse(opts.rows);
39815
39815
  await ctx.execute({
39816
39816
  method: "POST",
39817
- path: "/v1/ai-billing/rate-cards",
39817
+ path: "/v1/ai/billing/rate-cards",
39818
39818
  args,
39819
39819
  queryParamKeys: []
39820
39820
  });
39821
39821
  });
39822
- resource.command("get-agent-rate-card").description(`Get one AI rate card by id with all its pricing rows and usage counts (plans, policies, credit product).`).requiredOption("--rate-card-id <value>", `rate_card_id parameter`).addHelpText("after", `
39822
+ resource.command("get-agent-rate-card").description(`Get one AI rate card by id with all its pricing rows and usage counts (plans, policies, credit product).`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
39823
39823
  Examples:
39824
- hyperline ai-billing get-agent-rate-card --rate-card-id <rate_card_id>`).action(async (opts) => {
39824
+ hyperline ai-billing get-agent-rate-card --id <id>`).action(async (opts) => {
39825
39825
  const ctx = resource.parent?.opts()._ctx;
39826
39826
  if (!ctx) {
39827
39827
  process.stderr.write("Error: Not authenticated\n");
39828
39828
  process.exit(1);
39829
39829
  }
39830
39830
  const args = {};
39831
- if (opts.rateCardId !== void 0)
39832
- args.rate_card_id = opts.rateCardId;
39831
+ if (opts.id !== void 0)
39832
+ args.id = opts.id;
39833
39833
  await ctx.execute({
39834
39834
  method: "GET",
39835
- path: "/v1/ai-billing/rate-cards/{rate_card_id}",
39835
+ path: "/v1/ai/billing/rate-cards/{id}",
39836
39836
  args,
39837
39837
  queryParamKeys: []
39838
39838
  });
39839
39839
  });
39840
- resource.command("replace-agent-rate-card").description(`Replace an AI rate card's rows, name, description and USD fallback (whole-card semantics). Denomination and currency are immutable.`).requiredOption("--rate-card-id <value>", `rate_card_id parameter`).requiredOption("--name <value>", `Human-readable resource name.`).option("--fallback-per-usd <value>", `Credits, allowance units, or major currency units per USD of provider cost. Null leaves unmatched usage unpriced.`).requiredOption("--rows <json>", `All pricing rows on the card; replacement replaces the complete list.`).addHelpText("after", `
39840
+ resource.command("replace-agent-rate-card").description(`Replace an AI rate card's rows, name and USD fallback (whole-card semantics). Denomination and currency are immutable.`).requiredOption("--id <value>", `id parameter`).requiredOption("--name <value>", `Human-readable resource name.`).option("--fallback-per-usd <value>", `Credits, allowance units, or major currency units per USD of provider cost. Null leaves unmatched usage unpriced.`).requiredOption("--rows <json>", `All pricing rows on the card; replacement replaces the complete list.`).addHelpText("after", `
39841
39841
  Examples:
39842
- hyperline ai-billing replace-agent-rate-card --rate-card-id <rate_card_id> --name <name> --rows <rows>
39843
- hyperline ai-billing replace-agent-rate-card --rate-card-id <rate_card_id> --name <name> --rows <rows> --fallback-per-usd <fallback_per_usd>
39844
- hyperline ai-billing replace-agent-rate-card --rate-card-id <rate_card_id> --name <name> --rows <rows> --output json`).action(async (opts) => {
39842
+ hyperline ai-billing replace-agent-rate-card --id <id> --name <name> --rows <rows>
39843
+ hyperline ai-billing replace-agent-rate-card --id <id> --name <name> --rows <rows> --fallback-per-usd <fallback_per_usd>
39844
+ hyperline ai-billing replace-agent-rate-card --id <id> --name <name> --rows <rows> --output json`).action(async (opts) => {
39845
39845
  const ctx = resource.parent?.opts()._ctx;
39846
39846
  if (!ctx) {
39847
39847
  process.stderr.write("Error: Not authenticated\n");
39848
39848
  process.exit(1);
39849
39849
  }
39850
39850
  const args = {};
39851
- if (opts.rateCardId !== void 0)
39852
- args.rate_card_id = opts.rateCardId;
39851
+ if (opts.id !== void 0)
39852
+ args.id = opts.id;
39853
39853
  if (opts.name !== void 0)
39854
39854
  args.name = opts.name;
39855
39855
  if (opts.fallbackPerUsd !== void 0)
@@ -39858,23 +39858,23 @@ Examples:
39858
39858
  args.rows = JSON.parse(opts.rows);
39859
39859
  await ctx.execute({
39860
39860
  method: "PUT",
39861
- path: "/v1/ai-billing/rate-cards/{rate_card_id}",
39861
+ path: "/v1/ai/billing/rate-cards/{id}",
39862
39862
  args,
39863
39863
  queryParamKeys: []
39864
39864
  });
39865
39865
  });
39866
- resource.command("delete-agent-rate-card").description(`Delete an AI rate card. Refused (409, rate_card_in_use) while any plan, credit product or customer policy still uses it.`).requiredOption("--rate-card-id <value>", `rate_card_id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
39866
+ resource.command("delete-agent-rate-card").description(`Delete an AI rate card. Refused (409, rate_card_in_use) while any plan, credit product or customer policy still uses it.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
39867
39867
  Examples:
39868
- hyperline ai-billing delete-agent-rate-card --rate-card-id <rate_card_id>
39869
- hyperline ai-billing delete-agent-rate-card --rate-card-id <rate_card_id> --output json`).action(async (opts) => {
39868
+ hyperline ai-billing delete-agent-rate-card --id <id>
39869
+ hyperline ai-billing delete-agent-rate-card --id <id> --output json`).action(async (opts) => {
39870
39870
  const ctx = resource.parent?.opts()._ctx;
39871
39871
  if (!ctx) {
39872
39872
  process.stderr.write("Error: Not authenticated\n");
39873
39873
  process.exit(1);
39874
39874
  }
39875
39875
  const args = {};
39876
- if (opts.rateCardId !== void 0)
39877
- args.rate_card_id = opts.rateCardId;
39876
+ if (opts.id !== void 0)
39877
+ args.id = opts.id;
39878
39878
  if (!opts.yes) {
39879
39879
  const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
39880
39880
  if (!confirmed) {
@@ -39884,81 +39884,123 @@ Examples:
39884
39884
  }
39885
39885
  await ctx.execute({
39886
39886
  method: "DELETE",
39887
- path: "/v1/ai-billing/rate-cards/{rate_card_id}",
39887
+ path: "/v1/ai/billing/rate-cards/{id}",
39888
39888
  args,
39889
39889
  queryParamKeys: []
39890
39890
  });
39891
39891
  });
39892
- resource.command("list-agent-credit-products").description(`List the credit products AI agent usage can draw down, with their purchasable packs and default rate cards. Customer pot balances live on the customer credits endpoints.`).addHelpText("after", `
39892
+ resource.command("list-agent-customer-policies").description(`List all AI billing policies (scopes) for one customer: the default shared pool plus per-agent overrides. Accepts Hyperline or external customer ids.`).requiredOption("--id <value>", `id parameter`).option("--take <number>", `take`).option("--skip <number>", `skip`).addHelpText("after", `
39893
39893
  Examples:
39894
- hyperline ai-billing list-agent-credit-products`).action(async (_opts) => {
39894
+ hyperline ai-billing list-agent-customer-policies --id <id>
39895
+ hyperline ai-billing list-agent-customer-policies --id <id> --take <take>`).action(async (opts) => {
39895
39896
  const ctx = resource.parent?.opts()._ctx;
39896
39897
  if (!ctx) {
39897
39898
  process.stderr.write("Error: Not authenticated\n");
39898
39899
  process.exit(1);
39899
39900
  }
39900
39901
  const args = {};
39902
+ if (opts.id !== void 0)
39903
+ args.id = opts.id;
39904
+ if (opts.take !== void 0)
39905
+ args.take = Number(opts.take);
39906
+ if (opts.skip !== void 0)
39907
+ args.skip = Number(opts.skip);
39901
39908
  await ctx.execute({
39902
39909
  method: "GET",
39903
- path: "/v1/ai-billing/credit-products",
39910
+ path: "/v1/ai/billing/customers/{id}/policies",
39904
39911
  args,
39905
- queryParamKeys: []
39912
+ queryParamKeys: ["take", "skip"]
39906
39913
  });
39907
39914
  });
39908
- resource.command("list-agent-cost-catalog").description(`List the AI cost catalog: registry model prices merged with this workspace's negotiated overrides, its own custom cost items (source custom), and the unpriced pairs its telemetry has carried (source unlisted). Rates are USD decimal strings. Pass enabled_only=true for just the enabled catalog.`).option("--enabled-only <value>", `enabled_only`).addHelpText("after", `
39915
+ resource.command("get-default-customer-billing-policy").description(`Get the exact customer billing policy addressed by this resource; agent policies never fall back to the shared pool.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
39909
39916
  Examples:
39910
- hyperline ai-billing list-agent-cost-catalog
39911
- hyperline ai-billing list-agent-cost-catalog --enabled-only <enabled_only>`).action(async (opts) => {
39917
+ hyperline ai-billing get-default-customer-billing-policy --id <id>`).action(async (opts) => {
39912
39918
  const ctx = resource.parent?.opts()._ctx;
39913
39919
  if (!ctx) {
39914
39920
  process.stderr.write("Error: Not authenticated\n");
39915
39921
  process.exit(1);
39916
39922
  }
39917
39923
  const args = {};
39918
- if (opts.enabledOnly !== void 0)
39919
- args.enabled_only = opts.enabledOnly;
39924
+ if (opts.id !== void 0)
39925
+ args.id = opts.id;
39920
39926
  await ctx.execute({
39921
39927
  method: "GET",
39922
- path: "/v1/ai-billing/cost-catalog",
39928
+ path: "/v1/ai/billing/customers/{id}/policies/default",
39923
39929
  args,
39924
- queryParamKeys: ["enabled_only"]
39930
+ queryParamKeys: []
39925
39931
  });
39926
39932
  });
39927
- resource.command("create-agent-cost-catalog-item").description(`Create a custom AI cost item so a non-LLM vendor call is priced instead of landing unpriced at $0. provider/item must match hyperline.cost({ vendor, item }) verbatim and each dimensions[].key must match the unit the SDK sends. Re-creating an existing open item returns it unchanged (200); a pair the global registry already prices is refused \u2014 use the overrides endpoint for that.`).requiredOption("--provider <value>", `AI model provider, or the vendor of a custom cost item. This is not an integration connection.`).requiredOption("--item <value>", `Custom item name matching the usage payload.`).requiredOption("--dimensions <json>", `Additional billable dimensions; each key matches a usage_extra key and rates use the owning card's units or USD for cost-catalog dimensions.`).addHelpText("after", `
39933
+ resource.command("upsert-default-customer-billing-policy").description(`Replace customer billing settings while preserving omitted plan_id and rate_card_id references; null detaches them, and a shared policy enables automatic telemetry billing.`).requiredOption("--id <value>", `id parameter`).requiredOption("--mode <value>", `Billing mode.
39934
+
39935
+ - wallet: Charges a monetary wallet.
39936
+ - credits: Consumes a credit balance.
39937
+ - windows: Meters weighted units against rolling allowances.`).option("--wallet-id <value>", `Customer wallet identifier. Omit on wallet policy writes to provision or reuse the customer's wallet.`).option("--credit-product-id <value>", `Public credit product identifier whose balance this policy consumes.`).option("--markup-percent <value>", `Percentage added to resolved cost. Null on writes means no override; an attached plan may supply the value.`).option("--overage-mode <value>", `Behavior when credits or an allowance are exhausted. Policy values may inherit the attached plan.
39938
+
39939
+ - refuse: Rejects the call that crosses the boundary without deducting usage.
39940
+ - metered: Prices the whole call as monetary overage, using the overage card or USD provider cost plus markup.`).option("--overage-markup-percent <value>", `Percentage added to provider cost for overage. Mutually exclusive with overage_rate_card_id.`).option("--overage-rate-card-id <value>", `Currency rate card used to price overage directly. Null means provider cost plus the resolved overage markup.`).option("--overage-wallet-id <value>", `Wallet charged for overage. Null bills overage in arrears.`).option("--floor <value>", `Minimum available balance a spend check requires, in the policy's denomination.`).option("--settlement-interval-minutes <number>", `Settlement interval in minutes. Null means no interval override. Mutually exclusive with settlement_schedule.`).option("--settlement-schedule <value>", `Calendar settlement schedule. Null clears the override; mutually exclusive with settlement_interval_minutes.
39941
+
39942
+ - calendar_month: Settles at the end of each UTC calendar month.`).option("--windows <json>", `Rolling allowances. Required for windows plans; each window meters every call. A plan replacement replaces the entire array.`).option("--rate-card-id <value>", `Rate card reference. On policy writes, omission preserves the current reference and null detaches it; on plan replacement omission clears it.`).option("--plan-id <value>", `Billing plan reference. On policy writes, omission preserves the current plan and null detaches it.`).requiredOption("--blocked", `Whether spending is disabled for this billing scope.`).addHelpText("after", `
39928
39943
  Examples:
39929
- hyperline ai-billing create-agent-cost-catalog-item --provider <provider> --item <item> --dimensions <dimensions>
39930
- hyperline ai-billing create-agent-cost-catalog-item --provider <provider> --item <item> --dimensions <dimensions> --output json`).action(async (opts) => {
39944
+ hyperline ai-billing upsert-default-customer-billing-policy --id <id> --mode <mode> --blocked
39945
+ hyperline ai-billing upsert-default-customer-billing-policy --id <id> --mode <mode> --blocked --wallet-id <wallet_id> --credit-product-id <credit_product_id>
39946
+ hyperline ai-billing upsert-default-customer-billing-policy --id <id> --mode <mode> --blocked --output json`).action(async (opts) => {
39931
39947
  const ctx = resource.parent?.opts()._ctx;
39932
39948
  if (!ctx) {
39933
39949
  process.stderr.write("Error: Not authenticated\n");
39934
39950
  process.exit(1);
39935
39951
  }
39936
39952
  const args = {};
39937
- if (opts.provider !== void 0)
39938
- args.provider = opts.provider;
39939
- if (opts.item !== void 0)
39940
- args.item = opts.item;
39941
- if (opts.dimensions !== void 0)
39942
- args.dimensions = JSON.parse(opts.dimensions);
39953
+ if (opts.id !== void 0)
39954
+ args.id = opts.id;
39955
+ if (opts.mode !== void 0)
39956
+ args.mode = opts.mode;
39957
+ if (opts.walletId !== void 0)
39958
+ args.wallet_id = opts.walletId;
39959
+ if (opts.creditProductId !== void 0)
39960
+ args.credit_product_id = opts.creditProductId;
39961
+ if (opts.markupPercent !== void 0)
39962
+ args.markup_percent = opts.markupPercent;
39963
+ if (opts.overageMode !== void 0)
39964
+ args.overage_mode = opts.overageMode;
39965
+ if (opts.overageMarkupPercent !== void 0)
39966
+ args.overage_markup_percent = opts.overageMarkupPercent;
39967
+ if (opts.overageRateCardId !== void 0)
39968
+ args.overage_rate_card_id = opts.overageRateCardId;
39969
+ if (opts.overageWalletId !== void 0)
39970
+ args.overage_wallet_id = opts.overageWalletId;
39971
+ if (opts.floor !== void 0)
39972
+ args.floor = opts.floor;
39973
+ if (opts.settlementSchedule !== void 0)
39974
+ args.settlement_schedule = opts.settlementSchedule;
39975
+ if (opts.rateCardId !== void 0)
39976
+ args.rate_card_id = opts.rateCardId;
39977
+ if (opts.planId !== void 0)
39978
+ args.plan_id = opts.planId;
39979
+ if (opts.settlementIntervalMinutes !== void 0)
39980
+ args.settlement_interval_minutes = Number(opts.settlementIntervalMinutes);
39981
+ if (opts.blocked !== void 0)
39982
+ args.blocked = true;
39983
+ if (opts.windows !== void 0)
39984
+ args.windows = JSON.parse(opts.windows);
39943
39985
  await ctx.execute({
39944
- method: "POST",
39945
- path: "/v1/ai-billing/cost-catalog/items",
39986
+ method: "PUT",
39987
+ path: "/v1/ai/billing/customers/{id}/policies/default",
39946
39988
  args,
39947
39989
  queryParamKeys: []
39948
39990
  });
39949
39991
  });
39950
- resource.command("delete-agent-cost-catalog-item").description(`Close a custom AI cost item by its custom_item_id. History is kept; new calls on that pair go back to unpriced. An override id passed here is a 404.`).requiredOption("--item-id <value>", `item_id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
39992
+ resource.command("delete-default-customer-billing-policy").description(`Delete one customer's AI billing policy scope. Refused (409) while it owes unsettled consumption or while agent overrides still depend on it.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
39951
39993
  Examples:
39952
- hyperline ai-billing delete-agent-cost-catalog-item --item-id <item_id>
39953
- hyperline ai-billing delete-agent-cost-catalog-item --item-id <item_id> --output json`).action(async (opts) => {
39994
+ hyperline ai-billing delete-default-customer-billing-policy --id <id>
39995
+ hyperline ai-billing delete-default-customer-billing-policy --id <id> --output json`).action(async (opts) => {
39954
39996
  const ctx = resource.parent?.opts()._ctx;
39955
39997
  if (!ctx) {
39956
39998
  process.stderr.write("Error: Not authenticated\n");
39957
39999
  process.exit(1);
39958
40000
  }
39959
40001
  const args = {};
39960
- if (opts.itemId !== void 0)
39961
- args.item_id = opts.itemId;
40002
+ if (opts.id !== void 0)
40003
+ args.id = opts.id;
39962
40004
  if (!opts.yes) {
39963
40005
  const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
39964
40006
  if (!confirmed) {
@@ -39968,55 +40010,106 @@ Examples:
39968
40010
  }
39969
40011
  await ctx.execute({
39970
40012
  method: "DELETE",
39971
- path: "/v1/ai-billing/cost-catalog/items/{item_id}",
40013
+ path: "/v1/ai/billing/customers/{id}/policies/default",
39972
40014
  args,
39973
40015
  queryParamKeys: []
39974
40016
  });
39975
40017
  });
39976
- resource.command("upsert-agent-cost-catalog-override").description(`Set this workspace's negotiated price for a registry AI model (input/output/cached/cache-write USD per 1M tokens, plus optional dimensions). Replaces any open override immediately; historical calls keep their original rate. A pair the registry does not know is refused \u2014 create a custom cost item instead.`).requiredOption("--provider <value>", `AI model provider, or the vendor of a custom cost item. This is not an integration connection.`).requiredOption("--model <value>", `Model identifier, or custom item identifier. Null on wildcard pricing rows.`).requiredOption("--input-per-m-tokens <value>", `Provider cost in USD per million input tokens, as an exact decimal string.`).requiredOption("--output-per-m-tokens <value>", `Provider cost in USD per million output tokens, as an exact decimal string.`).option("--cached-input-per-m-tokens <value>", `Provider cost in USD per million cached input tokens, as an exact decimal string.`).option("--cache-write-per-m-tokens <value>", `Provider cost in USD per million cache write tokens, as an exact decimal string.`).option("--dimensions <json>", `Additional billable dimensions; each key matches a usage_extra key and rates use the owning card's units or USD for cost-catalog dimensions.`).addHelpText("after", `
40018
+ resource.command("get-agent-customer-billing-policy").description(`Get the exact customer billing policy addressed by this resource; agent policies never fall back to the shared pool.`).requiredOption("--id <value>", `id parameter`).requiredOption("--agent-slug <value>", `agent_slug parameter`).addHelpText("after", `
39977
40019
  Examples:
39978
- hyperline ai-billing upsert-agent-cost-catalog-override --provider <provider> --model <model> --input-per-m-tokens <input_per_m_tokens> --output-per-m-tokens <output_per_m_tokens>
39979
- hyperline ai-billing upsert-agent-cost-catalog-override --provider <provider> --model <model> --input-per-m-tokens <input_per_m_tokens> --output-per-m-tokens <output_per_m_tokens> --cached-input-per-m-tokens <cached_input_per_m_tokens> --cache-write-per-m-tokens <cache_write_per_m_tokens>
39980
- hyperline ai-billing upsert-agent-cost-catalog-override --provider <provider> --model <model> --input-per-m-tokens <input_per_m_tokens> --output-per-m-tokens <output_per_m_tokens> --output json`).action(async (opts) => {
40020
+ hyperline ai-billing get-agent-customer-billing-policy --id <id> --agent-slug <agent_slug>`).action(async (opts) => {
39981
40021
  const ctx = resource.parent?.opts()._ctx;
39982
40022
  if (!ctx) {
39983
40023
  process.stderr.write("Error: Not authenticated\n");
39984
40024
  process.exit(1);
39985
40025
  }
39986
40026
  const args = {};
39987
- if (opts.provider !== void 0)
39988
- args.provider = opts.provider;
39989
- if (opts.model !== void 0)
39990
- args.model = opts.model;
39991
- if (opts.inputPerMTokens !== void 0)
39992
- args.input_per_m_tokens = opts.inputPerMTokens;
39993
- if (opts.outputPerMTokens !== void 0)
39994
- args.output_per_m_tokens = opts.outputPerMTokens;
39995
- if (opts.cachedInputPerMTokens !== void 0)
39996
- args.cached_input_per_m_tokens = opts.cachedInputPerMTokens;
39997
- if (opts.cacheWritePerMTokens !== void 0)
39998
- args.cache_write_per_m_tokens = opts.cacheWritePerMTokens;
39999
- if (opts.dimensions !== void 0)
40000
- args.dimensions = JSON.parse(opts.dimensions);
40027
+ if (opts.id !== void 0)
40028
+ args.id = opts.id;
40029
+ if (opts.agentSlug !== void 0)
40030
+ args.agent_slug = opts.agentSlug;
40031
+ await ctx.execute({
40032
+ method: "GET",
40033
+ path: "/v1/ai/billing/customers/{id}/policies/agents/{agent_slug}",
40034
+ args,
40035
+ queryParamKeys: []
40036
+ });
40037
+ });
40038
+ resource.command("upsert-agent-customer-billing-policy").description(`Replace customer billing settings while preserving omitted plan_id and rate_card_id references; null detaches them, and a shared policy enables automatic telemetry billing.`).requiredOption("--id <value>", `id parameter`).requiredOption("--agent-slug <value>", `agent_slug parameter`).requiredOption("--mode <value>", `Billing mode.
40039
+
40040
+ - wallet: Charges a monetary wallet.
40041
+ - credits: Consumes a credit balance.
40042
+ - windows: Meters weighted units against rolling allowances.`).option("--wallet-id <value>", `Customer wallet identifier. Omit on wallet policy writes to provision or reuse the customer's wallet.`).option("--credit-product-id <value>", `Public credit product identifier whose balance this policy consumes.`).option("--markup-percent <value>", `Percentage added to resolved cost. Null on writes means no override; an attached plan may supply the value.`).option("--overage-mode <value>", `Behavior when credits or an allowance are exhausted. Policy values may inherit the attached plan.
40043
+
40044
+ - refuse: Rejects the call that crosses the boundary without deducting usage.
40045
+ - metered: Prices the whole call as monetary overage, using the overage card or USD provider cost plus markup.`).option("--overage-markup-percent <value>", `Percentage added to provider cost for overage. Mutually exclusive with overage_rate_card_id.`).option("--overage-rate-card-id <value>", `Currency rate card used to price overage directly. Null means provider cost plus the resolved overage markup.`).option("--overage-wallet-id <value>", `Wallet charged for overage. Null bills overage in arrears.`).option("--floor <value>", `Minimum available balance a spend check requires, in the policy's denomination.`).option("--settlement-interval-minutes <number>", `Settlement interval in minutes. Null means no interval override. Mutually exclusive with settlement_schedule.`).option("--settlement-schedule <value>", `Calendar settlement schedule. Null clears the override; mutually exclusive with settlement_interval_minutes.
40046
+
40047
+ - calendar_month: Settles at the end of each UTC calendar month.`).option("--windows <json>", `Rolling allowances. Required for windows plans; each window meters every call. A plan replacement replaces the entire array.`).option("--rate-card-id <value>", `Rate card reference. On policy writes, omission preserves the current reference and null detaches it; on plan replacement omission clears it.`).option("--plan-id <value>", `Billing plan reference. On policy writes, omission preserves the current plan and null detaches it.`).requiredOption("--blocked", `Whether spending is disabled for this billing scope.`).addHelpText("after", `
40048
+ Examples:
40049
+ hyperline ai-billing upsert-agent-customer-billing-policy --id <id> --agent-slug <agent_slug> --mode <mode> --blocked
40050
+ hyperline ai-billing upsert-agent-customer-billing-policy --id <id> --agent-slug <agent_slug> --mode <mode> --blocked --wallet-id <wallet_id> --credit-product-id <credit_product_id>
40051
+ hyperline ai-billing upsert-agent-customer-billing-policy --id <id> --agent-slug <agent_slug> --mode <mode> --blocked --output json`).action(async (opts) => {
40052
+ const ctx = resource.parent?.opts()._ctx;
40053
+ if (!ctx) {
40054
+ process.stderr.write("Error: Not authenticated\n");
40055
+ process.exit(1);
40056
+ }
40057
+ const args = {};
40058
+ if (opts.id !== void 0)
40059
+ args.id = opts.id;
40060
+ if (opts.agentSlug !== void 0)
40061
+ args.agent_slug = opts.agentSlug;
40062
+ if (opts.mode !== void 0)
40063
+ args.mode = opts.mode;
40064
+ if (opts.walletId !== void 0)
40065
+ args.wallet_id = opts.walletId;
40066
+ if (opts.creditProductId !== void 0)
40067
+ args.credit_product_id = opts.creditProductId;
40068
+ if (opts.markupPercent !== void 0)
40069
+ args.markup_percent = opts.markupPercent;
40070
+ if (opts.overageMode !== void 0)
40071
+ args.overage_mode = opts.overageMode;
40072
+ if (opts.overageMarkupPercent !== void 0)
40073
+ args.overage_markup_percent = opts.overageMarkupPercent;
40074
+ if (opts.overageRateCardId !== void 0)
40075
+ args.overage_rate_card_id = opts.overageRateCardId;
40076
+ if (opts.overageWalletId !== void 0)
40077
+ args.overage_wallet_id = opts.overageWalletId;
40078
+ if (opts.floor !== void 0)
40079
+ args.floor = opts.floor;
40080
+ if (opts.settlementSchedule !== void 0)
40081
+ args.settlement_schedule = opts.settlementSchedule;
40082
+ if (opts.rateCardId !== void 0)
40083
+ args.rate_card_id = opts.rateCardId;
40084
+ if (opts.planId !== void 0)
40085
+ args.plan_id = opts.planId;
40086
+ if (opts.settlementIntervalMinutes !== void 0)
40087
+ args.settlement_interval_minutes = Number(opts.settlementIntervalMinutes);
40088
+ if (opts.blocked !== void 0)
40089
+ args.blocked = true;
40090
+ if (opts.windows !== void 0)
40091
+ args.windows = JSON.parse(opts.windows);
40001
40092
  await ctx.execute({
40002
40093
  method: "PUT",
40003
- path: "/v1/ai-billing/cost-catalog/overrides",
40094
+ path: "/v1/ai/billing/customers/{id}/policies/agents/{agent_slug}",
40004
40095
  args,
40005
40096
  queryParamKeys: []
40006
40097
  });
40007
40098
  });
40008
- resource.command("delete-agent-cost-catalog-override").description(`Close this workspace's negotiated price override by its override.id; pricing falls back to the global registry rate. A custom cost item id passed here is a 404.`).requiredOption("--override-id <value>", `override_id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
40099
+ resource.command("delete-agent-customer-billing-policy").description(`Delete one customer's AI billing policy scope. Refused (409) while it owes unsettled consumption or while agent overrides still depend on it.`).requiredOption("--id <value>", `id parameter`).requiredOption("--agent-slug <value>", `agent_slug parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
40009
40100
  Examples:
40010
- hyperline ai-billing delete-agent-cost-catalog-override --override-id <override_id>
40011
- hyperline ai-billing delete-agent-cost-catalog-override --override-id <override_id> --output json`).action(async (opts) => {
40101
+ hyperline ai-billing delete-agent-customer-billing-policy --id <id> --agent-slug <agent_slug>
40102
+ hyperline ai-billing delete-agent-customer-billing-policy --id <id> --agent-slug <agent_slug> --output json`).action(async (opts) => {
40012
40103
  const ctx = resource.parent?.opts()._ctx;
40013
40104
  if (!ctx) {
40014
40105
  process.stderr.write("Error: Not authenticated\n");
40015
40106
  process.exit(1);
40016
40107
  }
40017
40108
  const args = {};
40018
- if (opts.overrideId !== void 0)
40019
- args.override_id = opts.overrideId;
40109
+ if (opts.id !== void 0)
40110
+ args.id = opts.id;
40111
+ if (opts.agentSlug !== void 0)
40112
+ args.agent_slug = opts.agentSlug;
40020
40113
  if (!opts.yes) {
40021
40114
  const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
40022
40115
  if (!confirmed) {
@@ -40025,129 +40118,156 @@ Examples:
40025
40118
  }
40026
40119
  }
40027
40120
  await ctx.execute({
40028
- method: "DELETE",
40029
- path: "/v1/ai-billing/cost-catalog/overrides/{override_id}",
40121
+ method: "DELETE",
40122
+ path: "/v1/ai/billing/customers/{id}/policies/agents/{agent_slug}",
40123
+ args,
40124
+ queryParamKeys: []
40125
+ });
40126
+ });
40127
+ resource.command("apply-agent-default-plan").description(`Apply the workspace's default AI agent billing plan to one customer (by id or external id). Idempotent; refuses (409) if the customer already has a different billing policy, 404 when no default plan is set.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
40128
+ Examples:
40129
+ hyperline ai-billing apply-agent-default-plan --id <id>
40130
+ hyperline ai-billing apply-agent-default-plan --id <id> --output json`).action(async (opts) => {
40131
+ const ctx = resource.parent?.opts()._ctx;
40132
+ if (!ctx) {
40133
+ process.stderr.write("Error: Not authenticated\n");
40134
+ process.exit(1);
40135
+ }
40136
+ const args = {};
40137
+ if (opts.id !== void 0)
40138
+ args.id = opts.id;
40139
+ await ctx.execute({
40140
+ method: "POST",
40141
+ path: "/v1/ai/billing/customers/{id}/apply-default-plan",
40142
+ args,
40143
+ queryParamKeys: []
40144
+ });
40145
+ });
40146
+ resource.command("get-agent-customer-balance").description(`Get one customer's live AI balance, shaped by their billing mode: wallet shadow balance, credit pot, or rolling window meters with reset times. Includes per-agent scopes and overage state.`).requiredOption("--id <value>", `id parameter`).option("--agent-slug <value>", `Agent scope identifier. Null is the customer's shared pool.`).addHelpText("after", `
40147
+ Examples:
40148
+ hyperline ai-billing get-agent-customer-balance --id <id>
40149
+ hyperline ai-billing get-agent-customer-balance --id <id> --agent-slug <agent_slug>`).action(async (opts) => {
40150
+ const ctx = resource.parent?.opts()._ctx;
40151
+ if (!ctx) {
40152
+ process.stderr.write("Error: Not authenticated\n");
40153
+ process.exit(1);
40154
+ }
40155
+ const args = {};
40156
+ if (opts.id !== void 0)
40157
+ args.id = opts.id;
40158
+ if (opts.agentSlug !== void 0)
40159
+ args.agent_slug = opts.agentSlug;
40160
+ await ctx.execute({
40161
+ method: "GET",
40162
+ path: "/v1/ai/billing/customers/{id}/balance",
40163
+ args,
40164
+ queryParamKeys: ["agent_slug"]
40165
+ });
40166
+ });
40167
+ resource.command("reset-agent-customer-windows").description(`Reset one customer's open AI allowance windows so their next call starts a fresh full allowance. Windows-mode scopes only.`).requiredOption("--id <value>", `id parameter`).option("--agent-slug <value>", `Agent scope identifier. Null is the customer's shared pool.`).addHelpText("after", `
40168
+ Examples:
40169
+ hyperline ai-billing reset-agent-customer-windows --id <id>
40170
+ hyperline ai-billing reset-agent-customer-windows --id <id> --agent-slug <agent_slug>
40171
+ hyperline ai-billing reset-agent-customer-windows --id <id> --output json`).action(async (opts) => {
40172
+ const ctx = resource.parent?.opts()._ctx;
40173
+ if (!ctx) {
40174
+ process.stderr.write("Error: Not authenticated\n");
40175
+ process.exit(1);
40176
+ }
40177
+ const args = {};
40178
+ if (opts.id !== void 0)
40179
+ args.id = opts.id;
40180
+ if (opts.agentSlug !== void 0)
40181
+ args.agent_slug = opts.agentSlug;
40182
+ await ctx.execute({
40183
+ method: "POST",
40184
+ path: "/v1/ai/billing/customers/{id}/windows/reset",
40030
40185
  args,
40031
- queryParamKeys: []
40186
+ queryParamKeys: ["agent_slug"]
40032
40187
  });
40033
40188
  });
40034
- resource.command("list-agent-customer-policies").description(`List all AI billing policies (scopes) for one customer: the default shared pool plus per-agent overrides. Accepts Hyperline or external customer ids.`).requiredOption("--customer-id <value>", `customer_id parameter`).addHelpText("after", `
40189
+ resource.command("list-agent-customer-consumption").description(`List one customer's AI consumption ledger entries, newest first, with amounts, denominations and overage flags. Filter by agent scope, overage, and from/to time range; paginated with take/skip.`).requiredOption("--id <value>", `id parameter`).option("--agent-slug <value>", `Billing scope: an empty string selects the shared pool; omission includes all scopes.`).option("--overage <value>", `Filter by overage status; omission includes both ordinary and overage entries.`).option("--from <value>", `UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.`).option("--to <value>", `UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.`).option("--take <number>", `take`).option("--skip <number>", `skip`).addHelpText("after", `
40035
40190
  Examples:
40036
- hyperline ai-billing list-agent-customer-policies --customer-id <customer_id>`).action(async (opts) => {
40191
+ hyperline ai-billing list-agent-customer-consumption --id <id>
40192
+ hyperline ai-billing list-agent-customer-consumption --id <id> --agent-slug <agent_slug> --overage <overage>`).action(async (opts) => {
40037
40193
  const ctx = resource.parent?.opts()._ctx;
40038
40194
  if (!ctx) {
40039
40195
  process.stderr.write("Error: Not authenticated\n");
40040
40196
  process.exit(1);
40041
40197
  }
40042
40198
  const args = {};
40043
- if (opts.customerId !== void 0)
40044
- args.customer_id = opts.customerId;
40199
+ if (opts.id !== void 0)
40200
+ args.id = opts.id;
40201
+ if (opts.agentSlug !== void 0)
40202
+ args.agent_slug = opts.agentSlug;
40203
+ if (opts.overage !== void 0)
40204
+ args.overage = opts.overage;
40205
+ if (opts.from !== void 0)
40206
+ args.from = opts.from;
40207
+ if (opts.to !== void 0)
40208
+ args.to = opts.to;
40209
+ if (opts.take !== void 0)
40210
+ args.take = Number(opts.take);
40211
+ if (opts.skip !== void 0)
40212
+ args.skip = Number(opts.skip);
40045
40213
  await ctx.execute({
40046
40214
  method: "GET",
40047
- path: "/v1/ai-billing/customers/{customer_id}/policies",
40215
+ path: "/v1/ai/billing/customers/{id}/consumption",
40048
40216
  args,
40049
- queryParamKeys: []
40217
+ queryParamKeys: ["agent_slug", "overage", "from", "to", "take", "skip"]
40050
40218
  });
40051
40219
  });
40052
- resource.command("get-agent-customer-policy").description(`Get one customer's AI billing policy \u2014 the default shared pool, or one agent's own scope via the agent query param.`).requiredOption("--customer-id <value>", `customer_id parameter`).option("--agent <value>", `Agent scope identifier. Null on scoped results denotes the customer's shared pool.`).addHelpText("after", `
40220
+ resource.command("get-product-ai-rate-card").description(`Get the default AI rate-card reference for a credit product, or 404 when none is attached.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
40053
40221
  Examples:
40054
- hyperline ai-billing get-agent-customer-policy --customer-id <customer_id>
40055
- hyperline ai-billing get-agent-customer-policy --customer-id <customer_id> --agent <agent>`).action(async (opts) => {
40222
+ hyperline ai-billing get-product-ai-rate-card --id <id>`).action(async (opts) => {
40056
40223
  const ctx = resource.parent?.opts()._ctx;
40057
40224
  if (!ctx) {
40058
40225
  process.stderr.write("Error: Not authenticated\n");
40059
40226
  process.exit(1);
40060
40227
  }
40061
40228
  const args = {};
40062
- if (opts.customerId !== void 0)
40063
- args.customer_id = opts.customerId;
40064
- if (opts.agent !== void 0)
40065
- args.agent = opts.agent;
40229
+ if (opts.id !== void 0)
40230
+ args.id = opts.id;
40066
40231
  await ctx.execute({
40067
40232
  method: "GET",
40068
- path: "/v1/ai-billing/customers/{customer_id}/policy",
40233
+ path: "/v1/ai/billing/products/{id}/rate-card",
40069
40234
  args,
40070
- queryParamKeys: ["agent"]
40235
+ queryParamKeys: []
40071
40236
  });
40072
40237
  });
40073
- resource.command("upsert-agent-customer-policy").description(`Create or replace one customer's AI billing policy (whole-row). Pass plan_id to attach the customer to a billing plan \u2014 this also attaches the plan's overage invoice container to their subscription. Past-limit usage is priced by overage_markup_percent over the base rates, or by overage_rate_card_id (a currency rate card whose rates ARE the overage price) \u2014 never both. Wallet/credit pots are auto-opened empty.`).requiredOption("--customer-id <value>", `customer_id parameter`).option("--agent <value>", `Agent scope identifier. Null on scoped results denotes the customer's shared pool.`).requiredOption("--mode <value>", `Billing mode.
40074
-
40075
- - wallet: Charges a monetary wallet.
40076
- - credits: Consumes a credit balance.
40077
- - windows: Meters weighted units against rolling allowances.`).option("--wallet-id <value>", `Customer wallet identifier. Omit on wallet policy writes to provision or reuse the customer's wallet.`).option("--credit-product-id <value>", `Public credit product identifier whose balance this policy consumes.`).option("--markup-percent <value>", `Percentage added to resolved cost. Null on writes means no override; an attached plan may supply the value.`).option("--overage-mode <value>", `Behavior when credits or an allowance are exhausted. Policy values may inherit the attached plan.
40078
-
40079
- - refuse: Rejects the call that crosses the boundary without deducting usage.
40080
- - metered: Prices the whole call as monetary overage, using the overage card or USD provider cost plus markup.`).option("--overage-markup-percent <value>", `Percentage added to provider cost for overage. Mutually exclusive with overage_rate_card_id.`).option("--overage-rate-card-id <value>", `Currency rate card used to price overage directly. Null means provider cost plus the resolved overage markup.`).option("--overage-wallet-id <value>", `Wallet charged for overage. Null bills overage in arrears.`).option("--floor <value>", `Minimum available balance a spend check requires, in the policy's denomination.`).option("--settlement-interval-minutes <number>", `Settlement interval in minutes. Null means no interval override. Mutually exclusive with settlement_schedule.`).option("--settlement-schedule <value>", `Calendar settlement schedule. Null clears the override; mutually exclusive with settlement_interval_minutes.
40081
-
40082
- - calendar_month: Settles at the end of each UTC calendar month.`).option("--credit-rates <json>", `Inline credit pricing. Mutually exclusive with rate_card_id. Omitted rates may be supplied by a plan or product default.`).option("--window-rates <json>", `Window definitions and optional inline unit rates. An attached plan may supply omitted definitions; rate_card_id may supply unit rates.`).option("--rate-card-id <value>", `Rate card reference. On policy writes, omission preserves the current reference and null detaches it; on plan replacement omission clears it.`).option("--plan-id <value>", `Billing plan reference. On policy writes, omission preserves the current plan and null detaches it.`).requiredOption("--blocked", `Whether spending is disabled for this billing scope.`).addHelpText("after", `
40238
+ resource.command("set-product-ai-rate-card").description(`Attach a credits-denominated AI rate card with complete fallback pricing as the credit product's default.`).requiredOption("--id <value>", `id parameter`).requiredOption("--rate-card-id <value>", `Rate card reference. On policy writes, omission preserves the current reference and null detaches it; on plan replacement omission clears it.`).addHelpText("after", `
40083
40239
  Examples:
40084
- hyperline ai-billing upsert-agent-customer-policy --customer-id <customer_id> --mode <mode> --blocked
40085
- hyperline ai-billing upsert-agent-customer-policy --customer-id <customer_id> --mode <mode> --blocked --agent <agent> --wallet-id <wallet_id>
40086
- hyperline ai-billing upsert-agent-customer-policy --customer-id <customer_id> --mode <mode> --blocked --output json`).action(async (opts) => {
40240
+ hyperline ai-billing set-product-ai-rate-card --id <id> --rate-card-id <rate_card_id>
40241
+ hyperline ai-billing set-product-ai-rate-card --id <id> --rate-card-id <rate_card_id> --output json`).action(async (opts) => {
40087
40242
  const ctx = resource.parent?.opts()._ctx;
40088
40243
  if (!ctx) {
40089
40244
  process.stderr.write("Error: Not authenticated\n");
40090
40245
  process.exit(1);
40091
40246
  }
40092
40247
  const args = {};
40093
- if (opts.customerId !== void 0)
40094
- args.customer_id = opts.customerId;
40095
- if (opts.agent !== void 0)
40096
- args.agent = opts.agent;
40097
- if (opts.mode !== void 0)
40098
- args.mode = opts.mode;
40099
- if (opts.walletId !== void 0)
40100
- args.wallet_id = opts.walletId;
40101
- if (opts.creditProductId !== void 0)
40102
- args.credit_product_id = opts.creditProductId;
40103
- if (opts.markupPercent !== void 0)
40104
- args.markup_percent = opts.markupPercent;
40105
- if (opts.overageMode !== void 0)
40106
- args.overage_mode = opts.overageMode;
40107
- if (opts.overageMarkupPercent !== void 0)
40108
- args.overage_markup_percent = opts.overageMarkupPercent;
40109
- if (opts.overageRateCardId !== void 0)
40110
- args.overage_rate_card_id = opts.overageRateCardId;
40111
- if (opts.overageWalletId !== void 0)
40112
- args.overage_wallet_id = opts.overageWalletId;
40113
- if (opts.floor !== void 0)
40114
- args.floor = opts.floor;
40115
- if (opts.settlementSchedule !== void 0)
40116
- args.settlement_schedule = opts.settlementSchedule;
40248
+ if (opts.id !== void 0)
40249
+ args.id = opts.id;
40117
40250
  if (opts.rateCardId !== void 0)
40118
40251
  args.rate_card_id = opts.rateCardId;
40119
- if (opts.planId !== void 0)
40120
- args.plan_id = opts.planId;
40121
- if (opts.settlementIntervalMinutes !== void 0)
40122
- args.settlement_interval_minutes = Number(opts.settlementIntervalMinutes);
40123
- if (opts.blocked !== void 0)
40124
- args.blocked = true;
40125
- if (opts.creditRates !== void 0)
40126
- args.credit_rates = JSON.parse(opts.creditRates);
40127
- if (opts.windowRates !== void 0)
40128
- args.window_rates = JSON.parse(opts.windowRates);
40129
40252
  await ctx.execute({
40130
40253
  method: "PUT",
40131
- path: "/v1/ai-billing/customers/{customer_id}/policy",
40254
+ path: "/v1/ai/billing/products/{id}/rate-card",
40132
40255
  args,
40133
- queryParamKeys: ["agent"]
40256
+ queryParamKeys: []
40134
40257
  });
40135
40258
  });
40136
- resource.command("delete-agent-customer-policy").description(`Delete one customer's AI billing policy scope. Refused (409) while it owes unsettled consumption or while agent overrides still depend on it.`).requiredOption("--customer-id <value>", `customer_id parameter`).option("--agent <value>", `Agent scope identifier. Null on scoped results denotes the customer's shared pool.`).option("--yes", "Skip confirmation").addHelpText("after", `
40259
+ resource.command("clear-product-ai-rate-card").description(`Detach a credit product's default AI rate card without deleting the card, or return 404 when none is attached.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
40137
40260
  Examples:
40138
- hyperline ai-billing delete-agent-customer-policy --customer-id <customer_id>
40139
- hyperline ai-billing delete-agent-customer-policy --customer-id <customer_id> --agent <agent>
40140
- hyperline ai-billing delete-agent-customer-policy --customer-id <customer_id> --output json`).action(async (opts) => {
40261
+ hyperline ai-billing clear-product-ai-rate-card --id <id>
40262
+ hyperline ai-billing clear-product-ai-rate-card --id <id> --output json`).action(async (opts) => {
40141
40263
  const ctx = resource.parent?.opts()._ctx;
40142
40264
  if (!ctx) {
40143
40265
  process.stderr.write("Error: Not authenticated\n");
40144
40266
  process.exit(1);
40145
40267
  }
40146
40268
  const args = {};
40147
- if (opts.customerId !== void 0)
40148
- args.customer_id = opts.customerId;
40149
- if (opts.agent !== void 0)
40150
- args.agent = opts.agent;
40269
+ if (opts.id !== void 0)
40270
+ args.id = opts.id;
40151
40271
  if (!opts.yes) {
40152
40272
  const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
40153
40273
  if (!confirmed) {
@@ -40157,118 +40277,167 @@ Examples:
40157
40277
  }
40158
40278
  await ctx.execute({
40159
40279
  method: "DELETE",
40160
- path: "/v1/ai-billing/customers/{customer_id}/policy",
40280
+ path: "/v1/ai/billing/products/{id}/rate-card",
40161
40281
  args,
40162
- queryParamKeys: ["agent"]
40282
+ queryParamKeys: []
40163
40283
  });
40164
40284
  });
40165
- resource.command("apply-agent-default-plan").description(`Apply the workspace's default AI agent billing plan to one customer (by id or external id). Idempotent; refuses (409) if the customer already has a different billing policy, 404 when no default plan is set.`).requiredOption("--customer-id <value>", `customer_id parameter`).addHelpText("after", `
40285
+ }
40286
+
40287
+ // build/commands/generated/ai-costs.js
40288
+ function registerAi_CostsCommands(parent) {
40289
+ const resource = parent.command("ai-costs").description("Manage ai > costs");
40290
+ resource.command("list-agent-cost-catalog").description(`List the AI cost catalog: registry model prices merged with this workspace's negotiated overrides, its own custom cost items (source custom), and the unpriced pairs its telemetry has carried (source unlisted). Rates are USD decimal strings. Pass enabled_only=true for just the enabled catalog.`).option("--take <number>", `Maximum catalog entries to return.`).option("--skip <number>", `skip`).option("--enabled-only <value>", `enabled_only`).addHelpText("after", `
40166
40291
  Examples:
40167
- hyperline ai-billing apply-agent-default-plan --customer-id <customer_id>
40168
- hyperline ai-billing apply-agent-default-plan --customer-id <customer_id> --output json`).action(async (opts) => {
40292
+ hyperline ai-costs list-agent-cost-catalog
40293
+ hyperline ai-costs list-agent-cost-catalog --take <take> --enabled-only <enabled_only>`).action(async (opts) => {
40169
40294
  const ctx = resource.parent?.opts()._ctx;
40170
40295
  if (!ctx) {
40171
40296
  process.stderr.write("Error: Not authenticated\n");
40172
40297
  process.exit(1);
40173
40298
  }
40174
40299
  const args = {};
40175
- if (opts.customerId !== void 0)
40176
- args.customer_id = opts.customerId;
40300
+ if (opts.enabledOnly !== void 0)
40301
+ args.enabled_only = opts.enabledOnly;
40302
+ if (opts.take !== void 0)
40303
+ args.take = Number(opts.take);
40304
+ if (opts.skip !== void 0)
40305
+ args.skip = Number(opts.skip);
40306
+ await ctx.execute({
40307
+ method: "GET",
40308
+ path: "/v1/ai/billing/costs",
40309
+ args,
40310
+ queryParamKeys: ["take", "skip", "enabled_only"]
40311
+ });
40312
+ });
40313
+ resource.command("create-agent-cost-catalog-item").description(`Create a custom provider/item cost; an existing pair returns 200 with its unchanged rates, so use PUT /v1/ai/billing/costs/items/:id to edit it.`).requiredOption("--provider <value>", `AI model provider, or the vendor of a custom cost item. This is not an integration connection.`).requiredOption("--item <value>", `Custom item name matching the usage payload.`).requiredOption("--dimensions <json>", `Additional billable dimensions; each key matches a usage_extra key and rates use the owning card's units or USD for cost-catalog dimensions.`).addHelpText("after", `
40314
+ Examples:
40315
+ hyperline ai-costs create-agent-cost-catalog-item --provider <provider> --item <item> --dimensions <dimensions>
40316
+ hyperline ai-costs create-agent-cost-catalog-item --provider <provider> --item <item> --dimensions <dimensions> --output json`).action(async (opts) => {
40317
+ const ctx = resource.parent?.opts()._ctx;
40318
+ if (!ctx) {
40319
+ process.stderr.write("Error: Not authenticated\n");
40320
+ process.exit(1);
40321
+ }
40322
+ const args = {};
40323
+ if (opts.provider !== void 0)
40324
+ args.provider = opts.provider;
40325
+ if (opts.item !== void 0)
40326
+ args.item = opts.item;
40327
+ if (opts.dimensions !== void 0)
40328
+ args.dimensions = JSON.parse(opts.dimensions);
40177
40329
  await ctx.execute({
40178
40330
  method: "POST",
40179
- path: "/v1/ai-billing/customers/{customer_id}/apply-default-plan",
40331
+ path: "/v1/ai/billing/costs/items",
40180
40332
  args,
40181
40333
  queryParamKeys: []
40182
40334
  });
40183
40335
  });
40184
- resource.command("get-agent-customer-balance").description(`Get one customer's live AI balance, shaped by their billing mode: wallet shadow balance, credit pot, or rolling window meters with reset times. Includes per-agent scopes and overage state.`).requiredOption("--customer-id <value>", `customer_id parameter`).option("--agent <value>", `Agent scope identifier. Null on scoped results denotes the customer's shared pool.`).addHelpText("after", `
40336
+ resource.command("delete-agent-cost-catalog-item").description(`Close a custom AI cost item by its custom_item_id. History is kept; new calls on that pair go back to unpriced. An override id passed here is a 404.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
40185
40337
  Examples:
40186
- hyperline ai-billing get-agent-customer-balance --customer-id <customer_id>
40187
- hyperline ai-billing get-agent-customer-balance --customer-id <customer_id> --agent <agent>`).action(async (opts) => {
40338
+ hyperline ai-costs delete-agent-cost-catalog-item --id <id>
40339
+ hyperline ai-costs delete-agent-cost-catalog-item --id <id> --output json`).action(async (opts) => {
40188
40340
  const ctx = resource.parent?.opts()._ctx;
40189
40341
  if (!ctx) {
40190
40342
  process.stderr.write("Error: Not authenticated\n");
40191
40343
  process.exit(1);
40192
40344
  }
40193
40345
  const args = {};
40194
- if (opts.customerId !== void 0)
40195
- args.customer_id = opts.customerId;
40196
- if (opts.agent !== void 0)
40197
- args.agent = opts.agent;
40346
+ if (opts.id !== void 0)
40347
+ args.id = opts.id;
40348
+ if (!opts.yes) {
40349
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
40350
+ if (!confirmed) {
40351
+ process.stdout.write("Aborted.\n");
40352
+ return;
40353
+ }
40354
+ }
40198
40355
  await ctx.execute({
40199
- method: "GET",
40200
- path: "/v1/ai-billing/customers/{customer_id}/balance",
40356
+ method: "DELETE",
40357
+ path: "/v1/ai/billing/costs/items/{id}",
40201
40358
  args,
40202
- queryParamKeys: ["agent"]
40359
+ queryParamKeys: []
40203
40360
  });
40204
40361
  });
40205
- resource.command("reset-agent-customer-windows").description(`Reset one customer's open AI allowance windows so their next call starts a fresh full allowance. Windows-mode scopes only.`).requiredOption("--customer-id <value>", `customer_id parameter`).option("--agent <value>", `Agent scope identifier. Null on scoped results denotes the customer's shared pool.`).addHelpText("after", `
40362
+ resource.command("upsert-agent-cost-catalog-override").description(`Set this workspace's negotiated price for a registry AI model (input/output/cached/cache-write USD per 1M tokens, plus optional dimensions). Replaces any open override immediately; historical calls keep their original rate. A pair the registry does not know is refused \u2014 create a custom cost item instead.`).requiredOption("--provider <value>", `AI model provider, or the vendor of a custom cost item. This is not an integration connection.`).requiredOption("--model <value>", `Model identifier, or custom item identifier. Null on wildcard pricing rows.`).requiredOption("--input-per-m-tokens <value>", `Provider cost in USD per million input tokens, as an exact decimal string.`).requiredOption("--output-per-m-tokens <value>", `Provider cost in USD per million output tokens, as an exact decimal string.`).option("--cached-input-per-m-tokens <value>", `Provider cost in USD per million cached input tokens, as an exact decimal string.`).option("--cache-write-per-m-tokens <value>", `Provider cost in USD per million cache write tokens, as an exact decimal string.`).option("--dimensions <json>", `Additional billable dimensions; each key matches a usage_extra key and rates use the owning card's units or USD for cost-catalog dimensions.`).addHelpText("after", `
40206
40363
  Examples:
40207
- hyperline ai-billing reset-agent-customer-windows --customer-id <customer_id>
40208
- hyperline ai-billing reset-agent-customer-windows --customer-id <customer_id> --agent <agent>
40209
- hyperline ai-billing reset-agent-customer-windows --customer-id <customer_id> --output json`).action(async (opts) => {
40364
+ hyperline ai-costs upsert-agent-cost-catalog-override --provider <provider> --model <model> --input-per-m-tokens <input_per_m_tokens> --output-per-m-tokens <output_per_m_tokens>
40365
+ hyperline ai-costs upsert-agent-cost-catalog-override --provider <provider> --model <model> --input-per-m-tokens <input_per_m_tokens> --output-per-m-tokens <output_per_m_tokens> --cached-input-per-m-tokens <cached_input_per_m_tokens> --cache-write-per-m-tokens <cache_write_per_m_tokens>
40366
+ hyperline ai-costs upsert-agent-cost-catalog-override --provider <provider> --model <model> --input-per-m-tokens <input_per_m_tokens> --output-per-m-tokens <output_per_m_tokens> --output json`).action(async (opts) => {
40210
40367
  const ctx = resource.parent?.opts()._ctx;
40211
40368
  if (!ctx) {
40212
40369
  process.stderr.write("Error: Not authenticated\n");
40213
40370
  process.exit(1);
40214
40371
  }
40215
40372
  const args = {};
40216
- if (opts.customerId !== void 0)
40217
- args.customer_id = opts.customerId;
40218
- if (opts.agent !== void 0)
40219
- args.agent = opts.agent;
40373
+ if (opts.provider !== void 0)
40374
+ args.provider = opts.provider;
40375
+ if (opts.model !== void 0)
40376
+ args.model = opts.model;
40377
+ if (opts.inputPerMTokens !== void 0)
40378
+ args.input_per_m_tokens = opts.inputPerMTokens;
40379
+ if (opts.outputPerMTokens !== void 0)
40380
+ args.output_per_m_tokens = opts.outputPerMTokens;
40381
+ if (opts.cachedInputPerMTokens !== void 0)
40382
+ args.cached_input_per_m_tokens = opts.cachedInputPerMTokens;
40383
+ if (opts.cacheWritePerMTokens !== void 0)
40384
+ args.cache_write_per_m_tokens = opts.cacheWritePerMTokens;
40385
+ if (opts.dimensions !== void 0)
40386
+ args.dimensions = JSON.parse(opts.dimensions);
40220
40387
  await ctx.execute({
40221
- method: "POST",
40222
- path: "/v1/ai-billing/customers/{customer_id}/windows/reset",
40388
+ method: "PUT",
40389
+ path: "/v1/ai/billing/costs/overrides",
40223
40390
  args,
40224
- queryParamKeys: ["agent"]
40391
+ queryParamKeys: []
40225
40392
  });
40226
40393
  });
40227
- resource.command("list-agent-customer-consumption").description(`List one customer's AI consumption ledger entries, newest first, with amounts, denominations and overage flags. Filter by agent scope, overage, and from/to time range; paginated with take/skip.`).requiredOption("--customer-id <value>", `customer_id parameter`).option("--agent <value>", `Agent slug. An empty string selects the shared pool; omission includes all scopes.`).option("--overage <value>", `Filter by overage status. Omit to include both ordinary and overage entries.`).option("--from <value>", `UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.`).option("--to <value>", `UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.`).option("--take <number>", `take`).option("--skip <number>", `skip`).addHelpText("after", `
40394
+ resource.command("delete-agent-cost-catalog-override").description(`Close this workspace's negotiated price override by its override.id; pricing falls back to the global registry rate. A custom cost item id passed here is a 404.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
40228
40395
  Examples:
40229
- hyperline ai-billing list-agent-customer-consumption --customer-id <customer_id>
40230
- hyperline ai-billing list-agent-customer-consumption --customer-id <customer_id> --agent <agent> --overage <overage>`).action(async (opts) => {
40396
+ hyperline ai-costs delete-agent-cost-catalog-override --id <id>
40397
+ hyperline ai-costs delete-agent-cost-catalog-override --id <id> --output json`).action(async (opts) => {
40231
40398
  const ctx = resource.parent?.opts()._ctx;
40232
40399
  if (!ctx) {
40233
40400
  process.stderr.write("Error: Not authenticated\n");
40234
40401
  process.exit(1);
40235
40402
  }
40236
40403
  const args = {};
40237
- if (opts.customerId !== void 0)
40238
- args.customer_id = opts.customerId;
40239
- if (opts.agent !== void 0)
40240
- args.agent = opts.agent;
40241
- if (opts.overage !== void 0)
40242
- args.overage = opts.overage;
40243
- if (opts.from !== void 0)
40244
- args.from = opts.from;
40245
- if (opts.to !== void 0)
40246
- args.to = opts.to;
40247
- if (opts.take !== void 0)
40248
- args.take = Number(opts.take);
40249
- if (opts.skip !== void 0)
40250
- args.skip = Number(opts.skip);
40404
+ if (opts.id !== void 0)
40405
+ args.id = opts.id;
40406
+ if (!opts.yes) {
40407
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
40408
+ if (!confirmed) {
40409
+ process.stdout.write("Aborted.\n");
40410
+ return;
40411
+ }
40412
+ }
40251
40413
  await ctx.execute({
40252
- method: "GET",
40253
- path: "/v1/ai-billing/customers/{customer_id}/consumption",
40414
+ method: "DELETE",
40415
+ path: "/v1/ai/billing/costs/overrides/{id}",
40254
40416
  args,
40255
- queryParamKeys: ["agent", "overage", "from", "to", "take", "skip"]
40417
+ queryParamKeys: []
40256
40418
  });
40257
40419
  });
40258
- resource.command("get-agent-customer-overview").description(`Get one customer's full AI billing overview: default policy, per-agent scopes, balances and billed consumption totals in one read.`).requiredOption("--customer-id <value>", `customer_id parameter`).addHelpText("after", `
40420
+ resource.command("replace-agent-cost-catalog-item").description(`Replace a custom item's provider, item and dimensions, preserving historical prices and returning the new active custom_item_id.`).requiredOption("--id <value>", `id parameter`).requiredOption("--provider <value>", `AI model provider, or the vendor of a custom cost item. This is not an integration connection.`).requiredOption("--item <value>", `Custom item name matching the usage payload.`).requiredOption("--dimensions <json>", `Additional billable dimensions; each key matches a usage_extra key and rates use the owning card's units or USD for cost-catalog dimensions.`).addHelpText("after", `
40259
40421
  Examples:
40260
- hyperline ai-billing get-agent-customer-overview --customer-id <customer_id>`).action(async (opts) => {
40422
+ hyperline ai-costs replace-agent-cost-catalog-item --id <id> --provider <provider> --item <item> --dimensions <dimensions>
40423
+ hyperline ai-costs replace-agent-cost-catalog-item --id <id> --provider <provider> --item <item> --dimensions <dimensions> --output json`).action(async (opts) => {
40261
40424
  const ctx = resource.parent?.opts()._ctx;
40262
40425
  if (!ctx) {
40263
40426
  process.stderr.write("Error: Not authenticated\n");
40264
40427
  process.exit(1);
40265
40428
  }
40266
40429
  const args = {};
40267
- if (opts.customerId !== void 0)
40268
- args.customer_id = opts.customerId;
40430
+ if (opts.id !== void 0)
40431
+ args.id = opts.id;
40432
+ if (opts.provider !== void 0)
40433
+ args.provider = opts.provider;
40434
+ if (opts.item !== void 0)
40435
+ args.item = opts.item;
40436
+ if (opts.dimensions !== void 0)
40437
+ args.dimensions = JSON.parse(opts.dimensions);
40269
40438
  await ctx.execute({
40270
- method: "GET",
40271
- path: "/v1/ai-billing/customers/{customer_id}/overview",
40439
+ method: "PUT",
40440
+ path: "/v1/ai/billing/costs/items/{id}",
40272
40441
  args,
40273
40442
  queryParamKeys: []
40274
40443
  });
@@ -42027,6 +42196,54 @@ Examples:
42027
42196
  queryParamKeys: []
42028
42197
  });
42029
42198
  });
42199
+ resource.command("get-customer-credit-portal-settings").description(`Get whether a customer can top up a credit product from the customer portal, at which price, and which prices can be selected.`).requiredOption("--id <value>", `id parameter`).requiredOption("--product-id <value>", `productId parameter`).addHelpText("after", `
42200
+ Examples:
42201
+ hyperline customers-credits get-customer-credit-portal-settings --id <id> --product-id <productId>`).action(async (opts) => {
42202
+ const ctx = resource.parent?.opts()._ctx;
42203
+ if (!ctx) {
42204
+ process.stderr.write("Error: Not authenticated\n");
42205
+ process.exit(1);
42206
+ }
42207
+ const args = {};
42208
+ if (opts.id !== void 0)
42209
+ args.id = opts.id;
42210
+ if (opts.productId !== void 0)
42211
+ args.productId = opts.productId;
42212
+ await ctx.execute({
42213
+ method: "GET",
42214
+ path: "/v1/customers/{id}/credits/{productId}/portal-settings",
42215
+ args,
42216
+ queryParamKeys: []
42217
+ });
42218
+ });
42219
+ resource.command("update-customer-credit-portal-settings").description(`Enable or disable customer portal credit top-ups for a customer and credit product, with the price configuration (or a custom price) the customer pays. Enabling requires the customer's credit balance for the product: create it first (createCustomerCredit, a 0 balance is fine).`).requiredOption("--id <value>", `id parameter`).requiredOption("--product-id <value>", `productId parameter`).requiredOption("--enabled", `Whether the customer can buy this credit product from the customer portal. Enabling requires a price: \`price_configuration_id\`, \`custom_price_configuration\`, or the price already set. Disabling clears the price and removes the customer's own price.`).option("--price-configuration-id <value>", `ID of one of the credit product's price configurations, in the customer's price book and currency, of type \`bundle\`, \`volume\` or \`bulk\`. Mutually exclusive with \`custom_price_configuration\`.`).option("--custom-price-configuration <json>", `A price of the customer's own, in the customer's currency, replacing any previous one. Same shape as a credit product price configuration. Mutually exclusive with \`price_configuration_id\`.`).addHelpText("after", `
42220
+ Examples:
42221
+ hyperline customers-credits update-customer-credit-portal-settings --id <id> --product-id <productId> --enabled
42222
+ hyperline customers-credits update-customer-credit-portal-settings --id <id> --product-id <productId> --enabled --price-configuration-id <price_configuration_id> --custom-price-configuration <custom_price_configuration>
42223
+ hyperline customers-credits update-customer-credit-portal-settings --id <id> --product-id <productId> --enabled --output json`).action(async (opts) => {
42224
+ const ctx = resource.parent?.opts()._ctx;
42225
+ if (!ctx) {
42226
+ process.stderr.write("Error: Not authenticated\n");
42227
+ process.exit(1);
42228
+ }
42229
+ const args = {};
42230
+ if (opts.id !== void 0)
42231
+ args.id = opts.id;
42232
+ if (opts.productId !== void 0)
42233
+ args.productId = opts.productId;
42234
+ if (opts.priceConfigurationId !== void 0)
42235
+ args.price_configuration_id = opts.priceConfigurationId;
42236
+ if (opts.enabled !== void 0)
42237
+ args.enabled = true;
42238
+ if (opts.customPriceConfiguration !== void 0)
42239
+ args.custom_price_configuration = JSON.parse(opts.customPriceConfiguration);
42240
+ await ctx.execute({
42241
+ method: "PUT",
42242
+ path: "/v1/customers/{id}/credits/{productId}/portal-settings",
42243
+ args,
42244
+ queryParamKeys: []
42245
+ });
42246
+ });
42030
42247
  }
42031
42248
 
42032
42249
  // build/commands/generated/customers-payment-methods.js
@@ -43465,7 +43682,7 @@ Examples:
43465
43682
  queryParamKeys: []
43466
43683
  });
43467
43684
  });
43468
- resource.command("create-invoicing-entity").description(`Create a new invoicing entity with company details, address, and tax configuration. Used as the sender on invoices.`).option("--is-default", `Flag to indicate if this is the default invoicing entity. If true, it will switch the other existing invoicing entities to non-default.`).requiredOption("--name <value>", `The name of the invoicing entity.`).option("--trade-name <value>", `The trade name of the invoicing entity.`).option("--timezone <value>", `The timezone the invoicing entity operates in.`).option("--language <value>", `The default language of the invoicing entity.`).option("--registration-number <value>", `The registration number of the invoicing entity.`).option("--tax-id <value>", `The tax identification number of the invoicing entity.`).option("--billing-email <value>", `The billing email address for the invoicing entity.`).option("--address-line1 <value>", `The first line of the address for the invoicing entity.`).option("--address-line2 <value>", `The second line of the address for the invoicing entity.`).option("--zip-code <value>", `The postal code for the invoicing entity's address.`).option("--state <value>", `The state or province of the invoicing entity.`).option("--city <value>", `The city of the invoicing entity.`).requiredOption("--country <value>", `The country in which the invoicing entity is registered. It cannot be changed after creation.`).requiredOption("--currency <value>", `The currency code that the invoicing entity operates in.`).requiredOption("--accounting-currency <value>", `The currency used for accounting purposes.`).option("--invoice-number-pattern <value>", `The pattern used for generating invoice numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--credit-note-number-pattern <value>", `The pattern used for generating credit note numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--document-number-pattern <value>", `The pattern used for generating document numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--next-invoice-number <number>", `The next invoice number to be used.`).option("--next-credit-note-number <number>", `The next credit note number to be used.`).option("--next-document-number <number>", `The next document number to be used.`).option("--default-payment-delay <number>", `The default payment term in days.`).option("--invoice-grace-period-duration <number>", `The grace period duration in days.`).option("--invoice-payment-initiation-delay <number>", `The payment initiation delay in days for the invoices.`).option("--document-payment-initiation-delay <number>", `The payment initiation delay in days for the custom documents.`).option("--invoice-late-fees <value>", `The late fees applicable to the invoices.`).option("--invoice-footer <value>", `The footer text to be used in invoices.`).option("--document-footer <value>", `The footer text to be used in documents. If not specified, the invoice footer will be used.`).option("--quote-footer <value>", `The footer text to be used in quotes.`).option("--logo-url <value>", `URL of the logo to be used in invoices.`).option("--favicon-url <value>", `URL of the logo to be used as favicon.`).option("--brand-color <value>", `Brand color to be used in invoices (hexadecimal color code).`).option("--forced-customer-type <value>", `Forces all customers created under this invoicing entity to have this type. Set to null to allow users to choose.`).option("--credit-note-wallet-refund-enabled", `When enabled and no \`refund_method\` is specified, credit note refunds default to the customer's wallet, including credit notes generated by subscription updates, cancellations, and transitions. An explicit \`refund_method\` always wins. Requires wallets to be enabled at the workspace level.`).option("--standalone-credit-note-creation-enabled", `Whether credit notes without an original invoice can be created under this invoicing entity.`).addHelpText("after", `
43685
+ resource.command("create-invoicing-entity").description(`Create a new invoicing entity with company details, address, and tax configuration. Used as the sender on invoices.`).option("--is-default", `Flag to indicate if this is the default invoicing entity. If true, it will switch the other existing invoicing entities to non-default.`).requiredOption("--name <value>", `The name of the invoicing entity.`).option("--trade-name <value>", `The trade name of the invoicing entity.`).option("--timezone <value>", `The timezone the invoicing entity operates in.`).option("--language <value>", `The default language of the invoicing entity.`).option("--registration-number <value>", `The registration number of the invoicing entity.`).option("--tax-id <value>", `The tax identification number of the invoicing entity.`).option("--billing-email <value>", `The billing email address for the invoicing entity.`).option("--address-line1 <value>", `The first line of the address for the invoicing entity.`).option("--address-line2 <value>", `The second line of the address for the invoicing entity.`).option("--zip-code <value>", `The postal code for the invoicing entity's address.`).option("--state <value>", `The state or province of the invoicing entity.`).option("--city <value>", `The city of the invoicing entity.`).requiredOption("--country <value>", `The country in which the invoicing entity is registered. It cannot be changed after creation.`).requiredOption("--currency <value>", `The currency code that the invoicing entity operates in.`).requiredOption("--accounting-currency <value>", `The currency used for accounting purposes.`).option("--invoice-number-pattern <value>", `The pattern used for generating invoice numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--credit-note-number-pattern <value>", `The pattern used for generating credit note numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--document-number-pattern <value>", `The pattern used for generating document numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--next-invoice-number <number>", `The next invoice number to be used.`).option("--next-credit-note-number <number>", `The next credit note number to be used.`).option("--next-document-number <number>", `The next document number to be used.`).option("--default-payment-delay <number>", `The default payment term in days.`).option("--invoice-grace-period-duration <number>", `The grace period duration in days.`).option("--invoice-payment-initiation-delay <number>", `The payment initiation delay in days for the invoices.`).option("--document-payment-initiation-delay <number>", `The payment initiation delay in days for the custom documents.`).option("--invoice-late-fees <value>", `The late fees applicable to the invoices.`).option("--invoice-footer <value>", `The footer text to be used in invoices.`).option("--document-footer <value>", `The footer text to be used in documents. If not specified, the invoice footer will be used.`).option("--quote-footer <value>", `The footer text to be used in quotes.`).option("--logo-url <value>", `URL of the logo to be used in invoices.`).option("--favicon-url <value>", `URL of the logo to be used as favicon.`).option("--brand-color <value>", `Brand color to be used in invoices (hexadecimal color code).`).option("--forced-customer-type <value>", `Forces all customers created under this invoicing entity to have this type. Set to null to allow users to choose.`).option("--credit-note-wallet-refund-enabled", `When enabled and no \`refund_method\` is specified, credit note refunds default to the customer's wallet, including credit notes generated by subscription updates, cancellations, and transitions. An explicit \`refund_method\` always wins. Requires wallets to be enabled at the workspace level.`).option("--standalone-credit-note-creation-enabled", `Whether credit notes without an original invoice can be created under this invoicing entity. Defaults to \`true\`.`).option("--fx-conversion-display-enabled", `Whether the exchange rate and converted amount in the accounting currency are displayed on the invoice PDF when the invoice currency differs from the accounting currency. The conversion data is still stored and returned by the API when disabled. Defaults to \`true\`.`).addHelpText("after", `
43469
43686
  Examples:
43470
43687
  hyperline invoicing-entities create-invoicing-entity --name <name> --country <country> --currency <currency> --accounting-currency <accounting_currency>
43471
43688
  hyperline invoicing-entities create-invoicing-entity --name <name> --country <country> --currency <currency> --accounting-currency <accounting_currency> --is-default --trade-name <trade_name>
@@ -43548,6 +43765,8 @@ Examples:
43548
43765
  args.credit_note_wallet_refund_enabled = true;
43549
43766
  if (opts.standaloneCreditNoteCreationEnabled !== void 0)
43550
43767
  args.standalone_credit_note_creation_enabled = true;
43768
+ if (opts.fxConversionDisplayEnabled !== void 0)
43769
+ args.fx_conversion_display_enabled = true;
43551
43770
  await ctx.execute({
43552
43771
  method: "POST",
43553
43772
  path: "/v1/invoicing-entities",
@@ -43555,7 +43774,7 @@ Examples:
43555
43774
  queryParamKeys: []
43556
43775
  });
43557
43776
  });
43558
- resource.command("update-invoicing-entity").description(`Update an existing invoicing entity's details (address, tax ID, branding, etc.).`).requiredOption("--id <value>", `id parameter`).option("--name <value>", `The name of the invoicing entity.`).option("--registration-number <value>", `The registration number of the invoicing entity.`).option("--tax-id <value>", `The tax identification number of the invoicing entity.`).option("--billing-email <value>", `The billing email address for the invoicing entity.`).option("--timezone <value>", `The timezone the invoicing entity operates in.`).option("--language <value>", `The default language of the invoicing entity.`).option("--is-default", `Flag to indicate if this is the default invoicing entity. If true, it will switch the other existing invoicing entities to non-default.`).option("--address-line1 <value>", `The first line of the address for the invoicing entity.`).option("--address-line2 <value>", `The second line of the address for the invoicing entity.`).option("--zip-code <value>", `The postal code for the invoicing entity's address.`).option("--state <value>", `The state or province of the invoicing entity.`).option("--city <value>", `The city of the invoicing entity.`).option("--country <value>", `The country in which the invoicing entity is registered. It cannot be changed after creation.`).option("--currency <value>", `The currency code that the invoicing entity operates in.`).option("--accounting-currency <value>", `The currency used for accounting purposes.`).option("--invoice-number-pattern <value>", `The pattern used for generating invoice numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--credit-note-number-pattern <value>", `The pattern used for generating credit note numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--document-number-pattern <value>", `The pattern used for generating document numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--default-payment-delay <number>", `The default payment term in days.`).option("--invoice-grace-period-duration <number>", `The grace period duration in days.`).option("--invoice-payment-initiation-delay <number>", `The payment initiation delay in days for the invoices.`).option("--document-payment-initiation-delay <number>", `The payment initiation delay in days for the custom documents.`).option("--invoice-late-fees <value>", `The late fees applicable to the invoices.`).option("--invoice-footer <value>", `The footer text to be used in invoices.`).option("--document-footer <value>", `The footer text to be used in documents. If not specified, the invoice footer will be used.`).option("--logo-url <value>", `URL of the logo to be used in invoices.`).option("--favicon-url <value>", `URL of the logo to be used as favicon.`).option("--brand-color <value>", `Brand color to be used in invoices (hexadecimal color code).`).option("--forced-customer-type <value>", `Forces all customers created under this invoicing entity to have this type. Set to null to allow users to choose.`).option("--credit-note-wallet-refund-enabled", `When enabled and no \`refund_method\` is specified, credit note refunds default to the customer's wallet, including credit notes generated by subscription updates, cancellations, and transitions. An explicit \`refund_method\` always wins. Requires wallets to be enabled at the workspace level.`).option("--standalone-credit-note-creation-enabled", `Whether credit notes without an original invoice can be created under this invoicing entity.`).addHelpText("after", `
43777
+ resource.command("update-invoicing-entity").description(`Update an existing invoicing entity's details (address, tax ID, branding, etc.).`).requiredOption("--id <value>", `id parameter`).option("--name <value>", `The name of the invoicing entity.`).option("--registration-number <value>", `The registration number of the invoicing entity.`).option("--tax-id <value>", `The tax identification number of the invoicing entity.`).option("--billing-email <value>", `The billing email address for the invoicing entity.`).option("--timezone <value>", `The timezone the invoicing entity operates in.`).option("--language <value>", `The default language of the invoicing entity.`).option("--is-default", `Flag to indicate if this is the default invoicing entity. If true, it will switch the other existing invoicing entities to non-default.`).option("--address-line1 <value>", `The first line of the address for the invoicing entity.`).option("--address-line2 <value>", `The second line of the address for the invoicing entity.`).option("--zip-code <value>", `The postal code for the invoicing entity's address.`).option("--state <value>", `The state or province of the invoicing entity.`).option("--city <value>", `The city of the invoicing entity.`).option("--country <value>", `The country in which the invoicing entity is registered. It cannot be changed after creation.`).option("--currency <value>", `The currency code that the invoicing entity operates in.`).option("--accounting-currency <value>", `The currency used for accounting purposes.`).option("--invoice-number-pattern <value>", `The pattern used for generating invoice numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--credit-note-number-pattern <value>", `The pattern used for generating credit note numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--document-number-pattern <value>", `The pattern used for generating document numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--default-payment-delay <number>", `The default payment term in days.`).option("--invoice-grace-period-duration <number>", `The grace period duration in days.`).option("--invoice-payment-initiation-delay <number>", `The payment initiation delay in days for the invoices.`).option("--document-payment-initiation-delay <number>", `The payment initiation delay in days for the custom documents.`).option("--invoice-late-fees <value>", `The late fees applicable to the invoices.`).option("--invoice-footer <value>", `The footer text to be used in invoices.`).option("--document-footer <value>", `The footer text to be used in documents. If not specified, the invoice footer will be used.`).option("--logo-url <value>", `URL of the logo to be used in invoices.`).option("--favicon-url <value>", `URL of the logo to be used as favicon.`).option("--brand-color <value>", `Brand color to be used in invoices (hexadecimal color code).`).option("--forced-customer-type <value>", `Forces all customers created under this invoicing entity to have this type. Set to null to allow users to choose.`).option("--credit-note-wallet-refund-enabled", `When enabled and no \`refund_method\` is specified, credit note refunds default to the customer's wallet, including credit notes generated by subscription updates, cancellations, and transitions. An explicit \`refund_method\` always wins. Requires wallets to be enabled at the workspace level.`).option("--standalone-credit-note-creation-enabled", `Whether credit notes without an original invoice can be created under this invoicing entity. Defaults to \`true\`.`).option("--fx-conversion-display-enabled", `Whether the exchange rate and converted amount in the accounting currency are displayed on the invoice PDF when the invoice currency differs from the accounting currency. The conversion data is still stored and returned by the API when disabled. Defaults to \`true\`.`).addHelpText("after", `
43559
43778
  Examples:
43560
43779
  hyperline invoicing-entities update-invoicing-entity --id <id>
43561
43780
  hyperline invoicing-entities update-invoicing-entity --id <id> --name <name> --registration-number <registration_number>
@@ -43630,17 +43849,88 @@ Examples:
43630
43849
  args.credit_note_wallet_refund_enabled = true;
43631
43850
  if (opts.standaloneCreditNoteCreationEnabled !== void 0)
43632
43851
  args.standalone_credit_note_creation_enabled = true;
43852
+ if (opts.fxConversionDisplayEnabled !== void 0)
43853
+ args.fx_conversion_display_enabled = true;
43854
+ await ctx.execute({
43855
+ method: "PUT",
43856
+ path: "/v1/invoicing-entities/{id}",
43857
+ args,
43858
+ queryParamKeys: []
43859
+ });
43860
+ });
43861
+ resource.command("delete-invoicing-entity").description(`Soft-delete an invoicing entity by ID. Existing invoices linked to it are preserved.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
43862
+ Examples:
43863
+ hyperline invoicing-entities delete-invoicing-entity --id <id>
43864
+ hyperline invoicing-entities delete-invoicing-entity --id <id> --output json`).action(async (opts) => {
43865
+ const ctx = resource.parent?.opts()._ctx;
43866
+ if (!ctx) {
43867
+ process.stderr.write("Error: Not authenticated\n");
43868
+ process.exit(1);
43869
+ }
43870
+ const args = {};
43871
+ if (opts.id !== void 0)
43872
+ args.id = opts.id;
43873
+ if (!opts.yes) {
43874
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
43875
+ if (!confirmed) {
43876
+ process.stdout.write("Aborted.\n");
43877
+ return;
43878
+ }
43879
+ }
43880
+ await ctx.execute({
43881
+ method: "DELETE",
43882
+ path: "/v1/invoicing-entities/{id}",
43883
+ args,
43884
+ queryParamKeys: []
43885
+ });
43886
+ });
43887
+ }
43888
+
43889
+ // build/commands/generated/monitoring.js
43890
+ function registerMonitoringCommands(parent) {
43891
+ const resource = parent.command("monitoring").description("Manage monitoring");
43892
+ 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", `
43893
+ Examples:
43894
+ hyperline monitoring list-monitoring-analyses
43895
+ hyperline monitoring list-monitoring-analyses --limit <limit> --cursor <cursor>`).action(async (opts) => {
43896
+ const ctx = resource.parent?.opts()._ctx;
43897
+ if (!ctx) {
43898
+ process.stderr.write("Error: Not authenticated\n");
43899
+ process.exit(1);
43900
+ }
43901
+ const args = {};
43902
+ if (opts.cursor !== void 0)
43903
+ args.cursor = opts.cursor;
43904
+ if (opts.includeTotal !== void 0)
43905
+ args.include_total = opts.includeTotal;
43906
+ if (opts.customerId !== void 0)
43907
+ args.customer_id = opts.customerId;
43908
+ if (opts.status !== void 0)
43909
+ args.status = opts.status;
43910
+ if (opts["createdAt.gte"] !== void 0)
43911
+ args.created_at__gte = opts["createdAt.gte"];
43912
+ if (opts["createdAt.lte"] !== void 0)
43913
+ args.created_at__lte = opts["createdAt.lte"];
43914
+ if (opts.limit !== void 0)
43915
+ args.limit = Number(opts.limit);
43633
43916
  await ctx.execute({
43634
- method: "PUT",
43635
- path: "/v1/invoicing-entities/{id}",
43917
+ method: "GET",
43918
+ path: "/v1/agents/monitoring/analyses",
43636
43919
  args,
43637
- queryParamKeys: []
43920
+ queryParamKeys: [
43921
+ "limit",
43922
+ "cursor",
43923
+ "include_total",
43924
+ "customer_id",
43925
+ "status",
43926
+ "created_at__gte",
43927
+ "created_at__lte"
43928
+ ]
43638
43929
  });
43639
43930
  });
43640
- resource.command("delete-invoicing-entity").description(`Soft-delete an invoicing entity by ID. Existing invoices linked to it are preserved.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
43931
+ resource.command("get-monitoring-analysis").description(`Get one customer health analysis by ID: health score (0-100), tier, summary, per-dimension scores, risk factors and positive signals.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
43641
43932
  Examples:
43642
- hyperline invoicing-entities delete-invoicing-entity --id <id>
43643
- hyperline invoicing-entities delete-invoicing-entity --id <id> --output json`).action(async (opts) => {
43933
+ hyperline monitoring get-monitoring-analysis --id <id>`).action(async (opts) => {
43644
43934
  const ctx = resource.parent?.opts()._ctx;
43645
43935
  if (!ctx) {
43646
43936
  process.stderr.write("Error: Not authenticated\n");
@@ -43649,16 +43939,9 @@ Examples:
43649
43939
  const args = {};
43650
43940
  if (opts.id !== void 0)
43651
43941
  args.id = opts.id;
43652
- if (!opts.yes) {
43653
- const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
43654
- if (!confirmed) {
43655
- process.stdout.write("Aborted.\n");
43656
- return;
43657
- }
43658
- }
43659
43942
  await ctx.execute({
43660
- method: "DELETE",
43661
- path: "/v1/invoicing-entities/{id}",
43943
+ method: "GET",
43944
+ path: "/v1/agents/monitoring/analyses/{id}",
43662
43945
  args,
43663
43946
  queryParamKeys: []
43664
43947
  });
@@ -43950,6 +44233,44 @@ Examples:
43950
44233
  queryParamKeys: []
43951
44234
  });
43952
44235
  });
44236
+ 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", `
44237
+ Examples:
44238
+ hyperline price-configurations create --currency <currency> --billing-interval <billing_interval> --type <type> --prices <prices> --product-id <product_id>
44239
+ 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>
44240
+ hyperline price-configurations create --currency <currency> --billing-interval <billing_interval> --type <type> --prices <prices> --product-id <product_id> --output json`).action(async (opts) => {
44241
+ const ctx = resource.parent?.opts()._ctx;
44242
+ if (!ctx) {
44243
+ process.stderr.write("Error: Not authenticated\n");
44244
+ process.exit(1);
44245
+ }
44246
+ const args = {};
44247
+ if (opts.currency !== void 0)
44248
+ args.currency = opts.currency;
44249
+ if (opts.priceBookId !== void 0)
44250
+ args.price_book_id = opts.priceBookId;
44251
+ if (opts.type !== void 0)
44252
+ args.type = opts.type;
44253
+ if (opts.productId !== void 0)
44254
+ args.product_id = opts.productId;
44255
+ if (opts.allowOnPortal !== void 0)
44256
+ args.allow_on_portal = true;
44257
+ if (opts.countries !== void 0)
44258
+ args.countries = JSON.parse(opts.countries);
44259
+ if (opts.billingInterval !== void 0)
44260
+ args.billing_interval = JSON.parse(opts.billingInterval);
44261
+ if (opts.commitmentInterval !== void 0)
44262
+ args.commitment_interval = JSON.parse(opts.commitmentInterval);
44263
+ if (opts.prices !== void 0)
44264
+ args.prices = JSON.parse(opts.prices);
44265
+ if (opts.meteringFilter !== void 0)
44266
+ args.metering_filter = JSON.parse(opts.meteringFilter);
44267
+ await ctx.execute({
44268
+ method: "POST",
44269
+ path: "/v1/price-configurations",
44270
+ args,
44271
+ queryParamKeys: []
44272
+ });
44273
+ });
43953
44274
  resource.command("update-prices").description(`Update the prices of an existing price configuration by ID. Allows changing tier thresholds, unit prices, and flat fees.`).requiredOption("--id <value>", `id parameter`).option("--stdin", `Read JSON array input from stdin`).addHelpText("after", `
43954
44275
  Examples:
43955
44276
  hyperline price-configurations update-prices --id <id>
@@ -44148,7 +44469,7 @@ How the periodic credit allowance is granted for partial billing periods.
44148
44469
 
44149
44470
  - \`prorated\` (default): the granted credits are prorated to the elapsed period.
44150
44471
  - \`full_allowance\`: the full allowance is always granted (the invoice remains prorated).
44151
- `).option("--credits-balance-auto-creation-enabled <value>", `Default for the \`credits_balance_auto_creation_enabled\` setting of subscription products using this credit product: whether the customer credit balance is created as soon as the product is added to a subscription. \`true\` when unset. A subscription product can override it.`).option("--portal-top-up-auto-activation-enabled <value>", `Whether portal top-ups are enabled for the customer when a credit balance of this product is created for them, from a subscription or manually. Portal top-ups must also be enabled in the hosted pages settings to show on the portal. \`false\` when unset.`).option("--display-mode <value>", `How bundle items are displayed on invoices.`).option("--exclusive-items-enabled", `When true, only one item in the bundle can be active at a time.`).option("--bundle-items <json>", `Products included in this bundle. Percentages must sum to 100.`).addHelpText("after", `
44472
+ `).option("--credits-balance-auto-creation-enabled <value>", `Default for the \`credits_balance_auto_creation_enabled\` setting of subscription products using this credit product: whether the customer credit balance is created as soon as the product is added to a subscription. \`true\` when unset. A subscription product can override it.`).option("--display-mode <value>", `How bundle items are displayed on invoices.`).option("--exclusive-items-enabled", `When true, only one item in the bundle can be active at a time.`).option("--bundle-items <json>", `Products included in this bundle. Percentages must sum to 100.`).addHelpText("after", `
44152
44473
  Examples:
44153
44474
  hyperline products create --name <name> --type <type> --price-configurations <price_configurations>
44154
44475
  hyperline products create --name <name> --type <type> --price-configurations <price_configurations> --description <description> --description-display-interval-dates
@@ -44175,8 +44496,6 @@ Examples:
44175
44496
  args.credits_grant_mode = opts.creditsGrantMode;
44176
44497
  if (opts.creditsBalanceAutoCreationEnabled !== void 0)
44177
44498
  args.credits_balance_auto_creation_enabled = opts.creditsBalanceAutoCreationEnabled;
44178
- if (opts.portalTopUpAutoActivationEnabled !== void 0)
44179
- args.portal_top_up_auto_activation_enabled = opts.portalTopUpAutoActivationEnabled;
44180
44499
  if (opts.displayMode !== void 0)
44181
44500
  args.display_mode = opts.displayMode;
44182
44501
  if (opts.lowCreditsThreshold !== void 0)
@@ -44346,7 +44665,7 @@ Quote status.
44346
44665
  - \`draft\`: The quote is a draft.
44347
44666
  - \`approved\`: The quote is approved and ready to be sent to the customer.
44348
44667
  - \`pending_signature\`: The quote is awaiting the customer's signature.
44349
- `).option("--owner-email <value>", `Email address of the Hyperline user acting as the quote owner. 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("--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.
44668
+ `).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("--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.
44350
44669
 
44351
44670
  - \`all\`: Display all pricing tiers.
44352
44671
  - \`matching\`: Only display the tiers used to compute the price based on quantity.
@@ -44638,7 +44957,7 @@ Examples:
44638
44957
  queryParamKeys: []
44639
44958
  });
44640
44959
  });
44641
- 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.`).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("--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.
44960
+ 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("--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.
44642
44961
 
44643
44962
  - \`all\`: Display all pricing tiers.
44644
44963
  - \`matching\`: Only display the tiers used to compute the price based on quantity.
@@ -44766,6 +45085,24 @@ Examples:
44766
45085
  queryParamKeys: []
44767
45086
  });
44768
45087
  });
45088
+ resource.command("get-quote-approvals").description(`Read quote approvals without submitting the quote. Returns a newest-first array, currently containing one element. Draft and changes-requested quotes return current approval routing in preview mode; other statuses return the recorded request, ordered steps and decisions in execution mode. A null request means no workflow execution was recorded, including automatic and legacy approval.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
45089
+ Examples:
45090
+ hyperline quotes get-quote-approvals --id <id>`).action(async (opts) => {
45091
+ const ctx = resource.parent?.opts()._ctx;
45092
+ if (!ctx) {
45093
+ process.stderr.write("Error: Not authenticated\n");
45094
+ process.exit(1);
45095
+ }
45096
+ const args = {};
45097
+ if (opts.id !== void 0)
45098
+ args.id = opts.id;
45099
+ await ctx.execute({
45100
+ method: "GET",
45101
+ path: "/v1/quotes/{id}/approvals",
45102
+ args,
45103
+ queryParamKeys: []
45104
+ });
45105
+ });
44769
45106
  resource.command("finalize").description(`Finalize a draft quote. The quote is submitted for approval when approval is required, otherwise it becomes approved and ready to be sent for signature.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
44770
45107
  Examples:
44771
45108
  hyperline quotes finalize --id <id>
@@ -44785,11 +45122,11 @@ Examples:
44785
45122
  queryParamKeys: []
44786
45123
  });
44787
45124
  });
44788
- resource.command("send").description(`Send a quote by email for customer signature. Requires the quote to be approved first.`).requiredOption("--id <value>", `id parameter`).requiredOption("--email <value>", `Email address to which the quote will be sent for signature.`).option("--message <value>", `Custom message used in the email content.`).addHelpText("after", `
45125
+ 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", `
44789
45126
  Examples:
44790
- hyperline quotes send --id <id> --email <email>
45127
+ hyperline quotes send --id <id>
44791
45128
  hyperline quotes send --id <id> --email <email> --message <message>
44792
- hyperline quotes send --id <id> --email <email> --output json`).action(async (opts) => {
45129
+ hyperline quotes send --id <id> --output json`).action(async (opts) => {
44793
45130
  const ctx = resource.parent?.opts()._ctx;
44794
45131
  if (!ctx) {
44795
45132
  process.stderr.write("Error: Not authenticated\n");
@@ -44809,6 +45146,51 @@ Examples:
44809
45146
  queryParamKeys: []
44810
45147
  });
44811
45148
  });
45149
+ resource.command("list-quote-signers").description(`List the signers of a quote in signing order, with each signer's status (pending, notified, viewed, signed, declined). An empty list means the quote uses the single-signer flow of \`send_quote\`.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
45150
+ Examples:
45151
+ hyperline quotes list-quote-signers --id <id>`).action(async (opts) => {
45152
+ const ctx = resource.parent?.opts()._ctx;
45153
+ if (!ctx) {
45154
+ process.stderr.write("Error: Not authenticated\n");
45155
+ process.exit(1);
45156
+ }
45157
+ const args = {};
45158
+ if (opts.id !== void 0)
45159
+ args.id = opts.id;
45160
+ await ctx.execute({
45161
+ method: "GET",
45162
+ path: "/v1/quotes/{id}/signers",
45163
+ args,
45164
+ queryParamKeys: []
45165
+ });
45166
+ });
45167
+ resource.command("set-quote-signers").description(`Replace the full list of signers of a quote. Signers with the same \`step_order\` sign in parallel; steps sign in ascending order. Requires at least one \`external\` signer, and a \`countersigner\` must sign after an external step. Set signers before calling \`send_quote\`, which then emails the signers of the first step and no longer needs \`email\`. Pass an empty list to go back to the single-signer flow.`).requiredOption("--id <value>", `id parameter`).requiredOption("--signers <json>", `
45168
+ Signature workflow of the quote, replaced as a whole.
45169
+
45170
+ Signers sign step by step, in ascending \`step_order\`. Signers sharing a step sign in parallel, and the next step opens once all of them have signed. The workflow needs at least one \`external\` signer, and a \`countersigner\` must sign after the first external step.
45171
+
45172
+ Signers who already signed cannot be removed or moved. Once the quote is out for signature at an electronic signature provider, the workflow can no longer be changed.
45173
+ `).addHelpText("after", `
45174
+ Examples:
45175
+ hyperline quotes set-quote-signers --id <id> --signers <signers>
45176
+ hyperline quotes set-quote-signers --id <id> --signers <signers> --output json`).action(async (opts) => {
45177
+ const ctx = resource.parent?.opts()._ctx;
45178
+ if (!ctx) {
45179
+ process.stderr.write("Error: Not authenticated\n");
45180
+ process.exit(1);
45181
+ }
45182
+ const args = {};
45183
+ if (opts.id !== void 0)
45184
+ args.id = opts.id;
45185
+ if (opts.signers !== void 0)
45186
+ args.signers = JSON.parse(opts.signers);
45187
+ await ctx.execute({
45188
+ method: "PUT",
45189
+ path: "/v1/quotes/{id}/signers",
45190
+ args,
45191
+ queryParamKeys: []
45192
+ });
45193
+ });
44812
45194
  resource.command("sign").description(`Manually mark a quote as signed externally. Optionally upload a signed PDF. Bypasses the built-in Hyperline signature flow.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
44813
45195
  Examples:
44814
45196
  hyperline quotes sign --id <id>
@@ -45091,7 +45473,7 @@ Examples:
45091
45473
  queryParamKeys: []
45092
45474
  });
45093
45475
  });
45094
- resource.command("cancel").description(`Cancel a subscription. Supports immediate or end-of-period cancellation. Optionally specify a cancellation reason.`).requiredOption("--id <value>", `id parameter`).option("--cancel-at <value>", `Subscription cancel date. UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.`).option("--reason <value>", `Reason for the cancellation.`).option("--pro-rata", `Indicates if the cancel should refund the customer using a pro rata strategy.`).option("--refund-method <value>", `Override the refund destination for the resulting credit note. When omitted, falls back to the invoicing entity's \`creditNoteWalletRefundEnabled\` setting.`).addHelpText("after", `
45476
+ resource.command("cancel").description(`Cancel a subscription. Supports immediate or end-of-period cancellation. Optionally specify a cancellation reason. On a cancelled subscription with a scheduled reinstatement, call it with an empty body to remove that reinstatement; the subscription stays cancelled.`).requiredOption("--id <value>", `id parameter`).option("--cancel-at <value>", `Subscription cancel date. UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.`).option("--reason <value>", `Reason for the cancellation.`).option("--pro-rata", `Indicates if the cancel should refund the customer using a pro rata strategy.`).option("--refund-method <value>", `Override the refund destination for the resulting credit note. When omitted, falls back to the invoicing entity's \`creditNoteWalletRefundEnabled\` setting.`).addHelpText("after", `
45095
45477
  Examples:
45096
45478
  hyperline subscriptions cancel --id <id>
45097
45479
  hyperline subscriptions cancel --id <id> --cancel-at <cancel_at> --reason <reason>
@@ -45119,9 +45501,10 @@ Examples:
45119
45501
  queryParamKeys: []
45120
45502
  });
45121
45503
  });
45122
- resource.command("reinstate").description(`Reinstate a subscription that is scheduled for cancellation, reverting it to active status.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
45504
+ resource.command("reinstate").description(`Reinstate a subscription, reverting it to active status. Works for a subscription scheduled for cancellation and for a fully-cancelled one. For a fully-cancelled subscription, optionally pass reactivate_at (may be in the past, after the cancellation date; a future date schedules it) and invoicing_mode (or charge_line_items for a custom charge) to control how the cancelled gap is invoiced.`).requiredOption("--id <value>", `id parameter`).option("--reactivate-at <value>", `Date a fully-cancelled subscription resumes from. May be in the past (after the cancellation date). Defaults to now. A future date schedules the reinstatement; calling again with another date reschedules it, and cancelling the subscription removes it. Ignored for scheduled-cancellation reinstatement.`).option("--invoicing-mode <value>", `How the paused/cancelled gap is invoiced when the subscription resumes. \`charge_full_period\`: bill the frozen periods as if never paused. \`prorate_remaining_period\`: skip the gap and bill the prorated remainder from the resume date. \`resume_at_next_cycle\` (default): skip the gap with no catch-up invoice.`).option("--charge-line-items <json>", `Custom charge: bill exactly these lines on an immediate resume instead of applying \`invoicing_mode\`. The lines cover the stopped period (pause or cancellation date to resume date). Requires the \`invoices_create\` permission. Fully-cancelled subscriptions only. Not allowed with a future \`reactivate_at\`.`).addHelpText("after", `
45123
45505
  Examples:
45124
45506
  hyperline subscriptions reinstate --id <id>
45507
+ hyperline subscriptions reinstate --id <id> --reactivate-at <reactivate_at> --invoicing-mode <invoicing_mode>
45125
45508
  hyperline subscriptions reinstate --id <id> --output json`).action(async (opts) => {
45126
45509
  const ctx = resource.parent?.opts()._ctx;
45127
45510
  if (!ctx) {
@@ -45131,6 +45514,12 @@ Examples:
45131
45514
  const args = {};
45132
45515
  if (opts.id !== void 0)
45133
45516
  args.id = opts.id;
45517
+ if (opts.reactivateAt !== void 0)
45518
+ args.reactivate_at = opts.reactivateAt;
45519
+ if (opts.invoicingMode !== void 0)
45520
+ args.invoicing_mode = opts.invoicingMode;
45521
+ if (opts.chargeLineItems !== void 0)
45522
+ args.charge_line_items = JSON.parse(opts.chargeLineItems);
45134
45523
  await ctx.execute({
45135
45524
  method: "POST",
45136
45525
  path: "/v1/subscriptions/{id}/reinstate",
@@ -45179,7 +45568,7 @@ Examples:
45179
45568
  queryParamKeys: []
45180
45569
  });
45181
45570
  });
45182
- resource.command("reactivate").description(`Resume a paused subscription. Optionally pass reactivate_at (may be in the past, after the pause date; a future date schedules it) and invoicing_mode to control how the paused gap is invoiced.`).requiredOption("--id <value>", `id parameter`).option("--reactivate-at <value>", `Date the subscription resumes from. May be in the past (after the pause date). Defaults to now. A future date schedules the reactivation.`).option("--invoicing-mode <value>", `How the paused/cancelled gap is invoiced when the subscription resumes. \`charge_full_period\`: bill the frozen periods as if never paused. \`prorate_remaining_period\`: skip the gap and bill the prorated remainder from the resume date. \`resume_at_next_cycle\` (default): skip the gap with no catch-up invoice.`).addHelpText("after", `
45571
+ resource.command("reactivate").description(`Resume a paused subscription. Optionally pass reactivate_at (may be in the past, after the pause date; a future date schedules it) and invoicing_mode (or charge_line_items for a custom charge) to control how the paused gap is invoiced.`).requiredOption("--id <value>", `id parameter`).option("--reactivate-at <value>", `Date the subscription resumes from. May be in the past (after the pause date). Defaults to now. A future date schedules the reactivation.`).option("--invoicing-mode <value>", `How the paused/cancelled gap is invoiced when the subscription resumes. \`charge_full_period\`: bill the frozen periods as if never paused. \`prorate_remaining_period\`: skip the gap and bill the prorated remainder from the resume date. \`resume_at_next_cycle\` (default): skip the gap with no catch-up invoice.`).option("--charge-line-items <json>", `Custom charge: bill exactly these lines on an immediate resume instead of applying \`invoicing_mode\`. The lines cover the stopped period (pause or cancellation date to resume date). Requires the \`invoices_create\` permission. Not allowed with a future \`reactivate_at\`.`).addHelpText("after", `
45183
45572
  Examples:
45184
45573
  hyperline subscriptions reactivate --id <id>
45185
45574
  hyperline subscriptions reactivate --id <id> --reactivate-at <reactivate_at> --invoicing-mode <invoicing_mode>
@@ -45196,6 +45585,8 @@ Examples:
45196
45585
  args.reactivate_at = opts.reactivateAt;
45197
45586
  if (opts.invoicingMode !== void 0)
45198
45587
  args.invoicing_mode = opts.invoicingMode;
45588
+ if (opts.chargeLineItems !== void 0)
45589
+ args.charge_line_items = JSON.parse(opts.chargeLineItems);
45199
45590
  await ctx.execute({
45200
45591
  method: "POST",
45201
45592
  path: "/v1/subscriptions/{id}/reactivate",
@@ -46783,6 +47174,7 @@ function registerAllCommands(program2) {
46783
47174
  registerAggregatorsCommands(program2);
46784
47175
  registerAggregators_UsageCommands(program2);
46785
47176
  registerAi_BillingCommands(program2);
47177
+ registerAi_CostsCommands(program2);
46786
47178
  registerAnalyticsCommands(program2);
46787
47179
  registerBank_AccountsCommands(program2);
46788
47180
  registerCompaniesCommands(program2);
@@ -46801,6 +47193,7 @@ function registerAllCommands(program2) {
46801
47193
  registerInvoicesCommands(program2);
46802
47194
  registerInvoices_TransactionsCommands(program2);
46803
47195
  registerInvoicing_EntitiesCommands(program2);
47196
+ registerMonitoringCommands(program2);
46804
47197
  registerPaymentsCommands(program2);
46805
47198
  registerProductsCommands(program2);
46806
47199
  registerPrice_ConfigurationsCommands(program2);
@@ -62816,17 +63209,17 @@ var languages = [
62816
63209
 
62817
63210
  // ../hyperline-i18n/build/locales/de.js
62818
63211
  var de = {
62819
- "accounting.invoicePosted.entryDescription": "Buchungseintrag f\xFCr Rechnung {{invoiceId}}",
62820
- "accounting.transactionSettled.entryDescription": "Zahlungsabwicklung f\xFCr Rechnung {{invoiceId}}",
62821
- "accounting.transactionRefunded.entryDescription": "R\xFCckerstattung f\xFCr Rechnung {{invoiceId}}",
62822
63212
  "accounting.creditNotePosted.entryDescription": "Gutschrift {{creditNoteId}} f\xFCr Rechnung {{invoiceId}}",
62823
- "accounting.standaloneCreditNotePosted.entryDescription": "Gutschrift {{creditNoteId}}",
63213
+ "accounting.invoicePosted.entryDescription": "Buchungseintrag f\xFCr Rechnung {{invoiceId}}",
63214
+ "accounting.revrec.closedPeriodFallbackNote": " (in die n\xE4chste offene Periode gebucht \u2013 Zielperiode geschlossen; urspr\xFCngliches Datum {{originalDate}})",
62824
63215
  "accounting.revrec.creditLineDescription": "Umsatz realisieren \u2013 Zeitplan {{scheduleId}}, Zeitraum {{periodDate}}",
62825
63216
  "accounting.revrec.debitLineDescription": "Abgrenzungsposten reduzieren \u2013 Zeitplan {{scheduleId}}, Zeitraum {{periodDate}}",
62826
63217
  "accounting.revrec.discountCreditLineDescription": "Erl\xF6sminderung (Rabatt) erfassen \u2013 Zeitplan {{scheduleId}}, Zeitraum {{periodDate}}",
62827
- "accounting.revrec.closedPeriodFallbackNote": " (in die n\xE4chste offene Periode gebucht \u2013 Zielperiode geschlossen; urspr\xFCngliches Datum {{originalDate}})",
62828
63218
  "accounting.revrec.discountDebitLineDescription": "Abgegrenzten Rabatt reduzieren \u2013 Zeitplan {{scheduleId}}, Zeitraum {{periodDate}}",
62829
63219
  "accounting.revrec.entryDescription": "Umsatzrealisierung f\xFCr Zeitplan {{scheduleId}}, Zeitraum {{periodStart}} - {{periodEnd}}",
63220
+ "accounting.standaloneCreditNotePosted.entryDescription": "Gutschrift {{creditNoteId}}",
63221
+ "accounting.transactionRefunded.entryDescription": "R\xFCckerstattung f\xFCr Rechnung {{invoiceId}}",
63222
+ "accounting.transactionSettled.entryDescription": "Zahlungsabwicklung f\xFCr Rechnung {{invoiceId}}",
62830
63223
  "creditNotes.refundChargeName": "R\xFCckerstattung f\xFCr die Rechnung",
62831
63224
  "credits.bundleOf": "{{productName}} - Paket mit {{creditCount}} Guthaben",
62832
63225
  "credits.unitsOf": "{{productName}} - {{creditCount}} Guthaben",
@@ -62840,9 +63233,9 @@ var de = {
62840
63233
  "invoices.prorata.paymentForItemFullPeriod": "Zahlung f\xFCr",
62841
63234
  "invoices.prorata.refundForItem": "Anteilig erstatteter Betrag f\xFCr",
62842
63235
  "invoices.prorata.refundForItemFullPeriod": "Erstattung f\xFCr",
62843
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 abgelaufenes Guthaben",
62844
63236
  "subscriptions.closingChargeName": "Abschlussgeb\xFChr f\xFCr das Abonnement",
62845
63237
  "subscriptions.correction": "Vorperiodische Anpassung",
63238
+ "subscriptions.reinstatementRechargeName": "Wiederherstellungsgeb\xFChr f\xFCr den stornierten Zeitraum",
62846
63239
  "subscriptions.updates.addCoupon": "Gutschein hinzuf\xFCgen {{couponName}}",
62847
63240
  "subscriptions.updates.addProduct": "{{productName}} hinzuf\xFCgen",
62848
63241
  "subscriptions.updates.removeCoupon": "Gutschein entfernen {{couponName}}",
@@ -62857,7 +63250,8 @@ var de = {
62857
63250
  "subscriptions.updates.updateCount.description.prorata.committed.not_invoiced": "Betrag von {{amount}} (mit einer minimal zugesicherten Anzahl von {{committedCount}}) f\xFCr den anteiligen Zeitraum nicht in Rechnung gestellt",
62858
63251
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Diese Position wurde f\xFCr den anteiligen Zeitraum in Rechnung gestellt",
62859
63252
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Betrag von {{amount}} f\xFCr den anteiligen Zeitraum nicht in Rechnung gestellt",
62860
- "subscriptions.updates.updatePrices": "Preise f\xFCr {{productName}} aktualisieren"
63253
+ "subscriptions.updates.updatePrices": "Preise f\xFCr {{productName}} aktualisieren",
63254
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 abgelaufenes Guthaben"
62861
63255
  };
62862
63256
 
62863
63257
  // ../hyperline-i18n/build/locales/en.js
@@ -62874,6 +63268,7 @@ var en = {
62874
63268
  "invoices.prorata.refundForItemFullPeriod": "Refund for",
62875
63269
  "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 expired balance",
62876
63270
  "subscriptions.closingChargeName": "Closing fee for subscription",
63271
+ "subscriptions.reinstatementRechargeName": "Reinstatement recharge of canceled period",
62877
63272
  "subscriptions.correction": "Adjustment previous period",
62878
63273
  "subscriptions.updates.addCoupon": "Add coupon {{couponName}}",
62879
63274
  "subscriptions.updates.addProduct": "Add {{productName}}",
@@ -62908,17 +63303,17 @@ var en = {
62908
63303
 
62909
63304
  // ../hyperline-i18n/build/locales/es.js
62910
63305
  var es = {
62911
- "accounting.invoicePosted.entryDescription": "Asiento contable para la factura {{invoiceId}}",
62912
- "accounting.transactionSettled.entryDescription": "Liquidaci\xF3n de pago para la factura {{invoiceId}}",
62913
- "accounting.transactionRefunded.entryDescription": "Reembolso de la factura {{invoiceId}}",
62914
63306
  "accounting.creditNotePosted.entryDescription": "Nota de cr\xE9dito {{creditNoteId}} para la factura {{invoiceId}}",
62915
- "accounting.standaloneCreditNotePosted.entryDescription": "Nota de cr\xE9dito {{creditNoteId}}",
63307
+ "accounting.invoicePosted.entryDescription": "Asiento contable para la factura {{invoiceId}}",
63308
+ "accounting.revrec.closedPeriodFallbackNote": " (registrado en el pr\xF3ximo per\xEDodo abierto \u2014 per\xEDodo contable de destino cerrado; fecha original {{originalDate}})",
62916
63309
  "accounting.revrec.creditLineDescription": "Reconocer ingresos \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
62917
63310
  "accounting.revrec.debitLineDescription": "Disminuci\xF3n de ingresos diferidos \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
62918
63311
  "accounting.revrec.discountCreditLineDescription": "Reconocer contra-ingresos (descuento) \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
62919
- "accounting.revrec.closedPeriodFallbackNote": " (registrado en el pr\xF3ximo per\xEDodo abierto \u2014 per\xEDodo contable de destino cerrado; fecha original {{originalDate}})",
62920
63312
  "accounting.revrec.discountDebitLineDescription": "Disminuci\xF3n de descuento diferido \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
62921
63313
  "accounting.revrec.entryDescription": "Reconocimiento de ingresos para el cronograma {{scheduleId}}, per\xEDodo {{periodStart}} - {{periodEnd}}",
63314
+ "accounting.standaloneCreditNotePosted.entryDescription": "Nota de cr\xE9dito {{creditNoteId}}",
63315
+ "accounting.transactionRefunded.entryDescription": "Reembolso de la factura {{invoiceId}}",
63316
+ "accounting.transactionSettled.entryDescription": "Liquidaci\xF3n de pago para la factura {{invoiceId}}",
62922
63317
  "creditNotes.refundChargeName": "Reembolso por factura",
62923
63318
  "credits.bundleOf": "{{productName}} - Paquete de {{creditCount}} cr\xE9ditos",
62924
63319
  "credits.unitsOf": "{{productName}} - {{creditCount}} cr\xE9ditos",
@@ -62932,9 +63327,9 @@ var es = {
62932
63327
  "invoices.prorata.paymentForItemFullPeriod": "Pago por",
62933
63328
  "invoices.prorata.refundForItem": "Reembolso prorrateado por",
62934
63329
  "invoices.prorata.refundForItemFullPeriod": "Reembolso por",
62935
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo caducado",
62936
63330
  "subscriptions.closingChargeName": "Cargo por cierre de suscripci\xF3n",
62937
63331
  "subscriptions.correction": "Ajuste del periodo anterior",
63332
+ "subscriptions.reinstatementRechargeName": "Recarga de reinstalaci\xF3n del per\xEDodo cancelado",
62938
63333
  "subscriptions.updates.addCoupon": "A\xF1adir cup\xF3n {{couponName}}",
62939
63334
  "subscriptions.updates.addProduct": "A\xF1adir {{productName}}",
62940
63335
  "subscriptions.updates.removeCoupon": "Eliminar cup\xF3n {{couponName}}",
@@ -62949,22 +63344,23 @@ var es = {
62949
63344
  "subscriptions.updates.updateCount.description.prorata.committed.not_invoiced": "Importe de {{amount}} (con un m\xEDnimo comprometido de {{committedCount}}) no facturado para el per\xEDodo prorrateado",
62950
63345
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Esta l\xEDnea ha sido facturada para el per\xEDodo prorrateado",
62951
63346
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Importe de {{amount}} no facturado para el per\xEDodo prorrateado",
62952
- "subscriptions.updates.updatePrices": "Actualizar precios para {{productName}}"
63347
+ "subscriptions.updates.updatePrices": "Actualizar precios para {{productName}}",
63348
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo caducado"
62953
63349
  };
62954
63350
 
62955
63351
  // ../hyperline-i18n/build/locales/fr.js
62956
63352
  var fr = {
63353
+ "accounting.creditNotePosted.entryDescription": "Avoir {{creditNoteId}} pour la facture {{invoiceId}}",
63354
+ "accounting.invoicePosted.entryDescription": "\xC9criture de comptabilisation pour la facture {{invoiceId}}",
63355
+ "accounting.revrec.closedPeriodFallbackNote": " (comptabilis\xE9 sur la prochaine p\xE9riode ouverte \u2014 p\xE9riode comptable cible cl\xF4tur\xE9e ; date d'origine {{originalDate}})",
62957
63356
  "accounting.revrec.creditLineDescription": "Reconnaissance du chiffre d'affaires \u2013 \xE9ch\xE9ancier {{scheduleId}}, p\xE9riode {{periodDate}}",
62958
63357
  "accounting.revrec.debitLineDescription": "Diminution des produits constat\xE9s d'avance \u2013 \xE9ch\xE9ancier {{scheduleId}}, p\xE9riode {{periodDate}}",
62959
63358
  "accounting.revrec.discountCreditLineDescription": "Reconnaissance du contre-revenu (remise) \u2013 \xE9ch\xE9ancier {{scheduleId}}, p\xE9riode {{periodDate}}",
62960
- "accounting.revrec.closedPeriodFallbackNote": " (comptabilis\xE9 sur la prochaine p\xE9riode ouverte \u2014 p\xE9riode comptable cible cl\xF4tur\xE9e ; date d'origine {{originalDate}})",
62961
63359
  "accounting.revrec.discountDebitLineDescription": "Diminution des remises diff\xE9r\xE9es \u2013 \xE9ch\xE9ancier {{scheduleId}}, p\xE9riode {{periodDate}}",
62962
- "accounting.invoicePosted.entryDescription": "\xC9criture de comptabilisation pour la facture {{invoiceId}}",
62963
- "accounting.transactionSettled.entryDescription": "R\xE8glement de la facture {{invoiceId}}",
62964
- "accounting.transactionRefunded.entryDescription": "Remboursement de la facture {{invoiceId}}",
62965
- "accounting.creditNotePosted.entryDescription": "Avoir {{creditNoteId}} pour la facture {{invoiceId}}",
62966
- "accounting.standaloneCreditNotePosted.entryDescription": "Avoir {{creditNoteId}}",
62967
63360
  "accounting.revrec.entryDescription": "Reconnaissance du chiffre d'affaires pour l'\xE9ch\xE9ancier {{scheduleId}}, p\xE9riode {{periodStart}} - {{periodEnd}}",
63361
+ "accounting.standaloneCreditNotePosted.entryDescription": "Avoir {{creditNoteId}}",
63362
+ "accounting.transactionRefunded.entryDescription": "Remboursement de la facture {{invoiceId}}",
63363
+ "accounting.transactionSettled.entryDescription": "R\xE8glement de la facture {{invoiceId}}",
62968
63364
  "creditNotes.refundChargeName": "Remboursement pour facture",
62969
63365
  "credits.bundleOf": "{{productName}} - Pack de {{creditCount}} cr\xE9dits",
62970
63366
  "credits.unitsOf": "{{productName}} - {{creditCount}} cr\xE9dits",
@@ -62978,9 +63374,9 @@ var fr = {
62978
63374
  "invoices.prorata.paymentForItemFullPeriod": "Paiement pour",
62979
63375
  "invoices.prorata.refundForItem": "Remboursement au prorata pour",
62980
63376
  "invoices.prorata.refundForItemFullPeriod": "Remboursement pour",
62981
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 solde expir\xE9",
62982
63377
  "subscriptions.closingChargeName": "Frais de cl\xF4ture pour abonnement",
62983
63378
  "subscriptions.correction": "Ajustement p\xE9riode pr\xE9c\xE9dente",
63379
+ "subscriptions.reinstatementRechargeName": "Recharge de r\xE9tablissement de la p\xE9riode annul\xE9e",
62984
63380
  "subscriptions.updates.addCoupon": "Ajout du coupon {{couponName}}",
62985
63381
  "subscriptions.updates.addProduct": "Ajout {{productName}}",
62986
63382
  "subscriptions.updates.removeCoupon": "Retrait du coupon {{couponName}}",
@@ -62995,22 +63391,23 @@ var fr = {
62995
63391
  "subscriptions.updates.updateCount.description.prorata.committed.not_invoiced": "Montant de {{amount}} (avec un minimum engag\xE9 de {{committedCount}}) non factur\xE9 pour la p\xE9riode proratis\xE9e",
62996
63392
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Cette ligne a \xE9t\xE9 factur\xE9e pour la p\xE9riode proratis\xE9e",
62997
63393
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Montant de {{amount}} non factur\xE9 pour la p\xE9riode proratis\xE9e",
62998
- "subscriptions.updates.updatePrices": "Mise \xE0 jour des prix pour {{productName}}"
63394
+ "subscriptions.updates.updatePrices": "Mise \xE0 jour des prix pour {{productName}}",
63395
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 solde expir\xE9"
62999
63396
  };
63000
63397
 
63001
63398
  // ../hyperline-i18n/build/locales/it.js
63002
63399
  var it = {
63003
- "accounting.invoicePosted.entryDescription": "Registrazione contabile per la fattura {{invoiceId}}",
63004
- "accounting.transactionSettled.entryDescription": "Regolamento pagamento per la fattura {{invoiceId}}",
63005
- "accounting.transactionRefunded.entryDescription": "Rimborso per la fattura {{invoiceId}}",
63006
63400
  "accounting.creditNotePosted.entryDescription": "Nota di credito {{creditNoteId}} per la fattura {{invoiceId}}",
63007
- "accounting.standaloneCreditNotePosted.entryDescription": "Nota di credito {{creditNoteId}}",
63401
+ "accounting.invoicePosted.entryDescription": "Registrazione contabile per la fattura {{invoiceId}}",
63402
+ "accounting.revrec.closedPeriodFallbackNote": " (registrato nel prossimo periodo aperto \u2014 periodo contabile di destinazione chiuso; data originale {{originalDate}})",
63008
63403
  "accounting.revrec.creditLineDescription": "Riconoscere i ricavi \u2013 programma {{scheduleId}}, periodo {{periodDate}}",
63009
63404
  "accounting.revrec.debitLineDescription": "Diminuzione dei ricavi differiti \u2013 programma {{scheduleId}}, periodo {{periodDate}}",
63010
63405
  "accounting.revrec.discountCreditLineDescription": "Riconoscere il contra-ricavo (sconto) \u2013 programma {{scheduleId}}, periodo {{periodDate}}",
63011
- "accounting.revrec.closedPeriodFallbackNote": " (registrato nel prossimo periodo aperto \u2014 periodo contabile di destinazione chiuso; data originale {{originalDate}})",
63012
63406
  "accounting.revrec.discountDebitLineDescription": "Diminuzione dello sconto differito \u2013 programma {{scheduleId}}, periodo {{periodDate}}",
63013
63407
  "accounting.revrec.entryDescription": "Riconoscimento dei ricavi per il programma {{scheduleId}}, periodo {{periodStart}} - {{periodEnd}}",
63408
+ "accounting.standaloneCreditNotePosted.entryDescription": "Nota di credito {{creditNoteId}}",
63409
+ "accounting.transactionRefunded.entryDescription": "Rimborso per la fattura {{invoiceId}}",
63410
+ "accounting.transactionSettled.entryDescription": "Regolamento pagamento per la fattura {{invoiceId}}",
63014
63411
  "creditNotes.refundChargeName": "Rimborso per fattura",
63015
63412
  "credits.bundleOf": "{{productName}} - Pacchetto di {{creditCount}} crediti",
63016
63413
  "credits.unitsOf": "{{productName}} - {{creditCount}} crediti",
@@ -63024,9 +63421,9 @@ var it = {
63024
63421
  "invoices.prorata.paymentForItemFullPeriod": "Pagamento per",
63025
63422
  "invoices.prorata.refundForItem": "Rimborso proporzionale per",
63026
63423
  "invoices.prorata.refundForItemFullPeriod": "Rimborso per",
63027
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo scaduto",
63028
63424
  "subscriptions.closingChargeName": "Costo di chiusura per abbonamento",
63029
63425
  "subscriptions.correction": "Correzione periodo precedente",
63426
+ "subscriptions.reinstatementRechargeName": "Ricarica di reintegrazione del periodo annullato",
63030
63427
  "subscriptions.updates.addCoupon": "Aggiungi coupon {{couponName}}",
63031
63428
  "subscriptions.updates.addProduct": "Aggiungi {{productName}}",
63032
63429
  "subscriptions.updates.removeCoupon": "Rimuovi coupon {{couponName}}",
@@ -63041,14 +63438,29 @@ var it = {
63041
63438
  "subscriptions.updates.updateCount.description.prorata.committed.not_invoiced": "Importo di {{amount}} (con un minimo impegnato di {{committedCount}}) non fatturato per il periodo proporzionato",
63042
63439
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Questa voce \xE8 stata fatturata per il periodo proporzionato",
63043
63440
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Importo di {{amount}} non fatturato per il periodo proporzionato",
63044
- "subscriptions.updates.updatePrices": "Aggiorna prezzi per {{productName}}"
63441
+ "subscriptions.updates.updatePrices": "Aggiorna prezzi per {{productName}}",
63442
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo scaduto"
63045
63443
  };
63046
63444
 
63047
63445
  // ../hyperline-i18n/build/locales/lt.js
63048
63446
  var lt = {
63447
+ "accounting.creditNotePosted.entryDescription": "Kreditin\u0117 s\u0105skaita {{creditNoteId}} s\u0105skaitai fakt\u016Brai {{invoiceId}}",
63448
+ "accounting.invoicePosted.entryDescription": "I\u0161ra\u0161ytos s\u0105skaitos fakt\u016Bros {{invoiceId}} registravimo \u012Fra\u0161as",
63449
+ "accounting.revrec.closedPeriodFallbackNote": " (u\u017Eregistruota kitame atvirame laikotarpyje, nes tikslinis apskaitos laikotarpis u\u017Edarytas; pradin\u0117 data {{originalDate}})",
63450
+ "accounting.revrec.creditLineDescription": "Pajam\u0173 pripa\u017Einimas \u2013 grafikas {{scheduleId}}, laikotarpis {{periodDate}}",
63451
+ "accounting.revrec.debitLineDescription": "Atid\u0117t\u0173j\u0173 pajam\u0173 suma\u017Einimas \u2013 grafikas {{scheduleId}}, laikotarpis {{periodDate}}",
63452
+ "accounting.revrec.discountCreditLineDescription": "Pajamas ma\u017Einan\u010Dios sumos (nuolaidos) pripa\u017Einimas \u2013 grafikas {{scheduleId}}, laikotarpis {{periodDate}}",
63453
+ "accounting.revrec.discountDebitLineDescription": "Atid\u0117tosios nuolaidos suma\u017Einimas \u2013 grafikas {{scheduleId}}, laikotarpis {{periodDate}}",
63454
+ "accounting.revrec.entryDescription": "Pajam\u0173 pripa\u017Einimas pagal grafik\u0105 {{scheduleId}}, laikotarpis {{periodStart}}\u2013{{periodEnd}}",
63455
+ "accounting.standaloneCreditNotePosted.entryDescription": "Kreditin\u0117 s\u0105skaita {{creditNoteId}}",
63456
+ "accounting.transactionRefunded.entryDescription": "S\u0105skaitos fakt\u016Bros {{invoiceId}} gr\u0105\u017Einimas",
63457
+ "accounting.transactionSettled.entryDescription": "S\u0105skaitos fakt\u016Bros {{invoiceId}} mok\u0117jimo sudengimas",
63049
63458
  "creditNotes.refundChargeName": "S\u0105skaitos fakt\u016Bros gr\u0105\u017Einimas",
63050
63459
  "credits.bundleOf": "{{productName}} \u2013 {{creditCount}} kredit\u0173 paketas",
63051
63460
  "credits.unitsOf": "{{productName}} \u2013 {{creditCount}} kredit\u0173",
63461
+ "einvoicing.paymentFromWallet": "Mok\u0117jimas i\u0161 pinigin\u0117s",
63462
+ "einvoicing.paymentProcessed": "Mok\u0117jimas apdorotas",
63463
+ "einvoicing.paymentReceived": "Mok\u0117jimas gautas",
63052
63464
  "invoices.outstandingProduct.description": "Neapmok\u0117ta {{date}} i\u0161ra\u0161ytos s\u0105skaitos fakt\u016Bros{{invoiceNumber}} suma",
63053
63465
  "invoices.outstandingProduct.descriptionPeriod": "Neapmok\u0117ta s\u0105skaitos fakt\u016Bros{{invoiceNumber}} suma u\u017E laikotarp\u012F nuo {{periodStart}} iki {{periodEnd}}",
63054
63466
  "invoices.outstandingProduct.name": "Neapmok\u0117tas likutis",
@@ -63056,53 +63468,40 @@ var lt = {
63056
63468
  "invoices.prorata.paymentForItemFullPeriod": "Mok\u0117jimas u\u017E",
63057
63469
  "invoices.prorata.refundForItem": "Proporcingas gr\u0105\u017Einimas u\u017E",
63058
63470
  "invoices.prorata.refundForItemFullPeriod": "Gr\u0105\u017Einimas u\u017E",
63059
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 nebegaliojantis likutis",
63060
63471
  "subscriptions.closingChargeName": "Prenumeratos u\u017Ebaigimo mokestis",
63061
63472
  "subscriptions.correction": "Ankstesnio laikotarpio koregavimas",
63473
+ "subscriptions.reinstatementRechargeName": "Atnaujinimo \u012Fmokos u\u017E nutraukt\u0105 laikotarp\u012F",
63062
63474
  "subscriptions.updates.addCoupon": "Prid\u0117ti kupon\u0105 {{couponName}}",
63063
63475
  "subscriptions.updates.addProduct": "Prid\u0117ti {{productName}}",
63064
63476
  "subscriptions.updates.removeCoupon": "Pa\u0161alinti kupon\u0105 {{couponName}}",
63065
63477
  "subscriptions.updates.removeProduct": "Pa\u0161alinti {{productName}}",
63066
63478
  "subscriptions.updates.unit": "vnt.",
63067
- "subscriptions.updates.updatePrices": "Atnaujinti {{productName}} kainas",
63068
63479
  "subscriptions.updates.updateCount": "Atnaujinti {{productName}} kiek\u012F ({{previousCount}} \u2192 {{newCount}} {{unit}})",
63069
- "subscriptions.updates.updateCount.description.prorata.committed.invoiced": "Pritaikytas minimalus \u012Fsipareigotas {{committedCount}} kiekis.",
63070
- "subscriptions.updates.updateCount.description.prorata.committed.not_invoiced": "Proporcingam laikotarpiui nei\u0161ra\u0161yta {{amount}} suma (minimalus \u012Fsipareigotas kiekis \u2013 {{committedCount}})",
63071
- "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "U\u017E \u0161i\u0105 eilut\u0119 proporcingam laikotarpiui s\u0105skaita fakt\u016Bra i\u0161ra\u0161yta",
63072
- "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Proporcingam laikotarpiui nei\u0161ra\u0161yta {{amount}} suma",
63073
63480
  "subscriptions.updates.updateCount.description.full.committed.invoiced": "Visam laikotarpiui pritaikytas minimalus \u012Fsipareigotas {{committedCount}} kiekis.",
63074
63481
  "subscriptions.updates.updateCount.description.full.committed.not_invoiced": "Visam laikotarpiui nei\u0161ra\u0161yta {{amount}} suma (minimalus \u012Fsipareigotas kiekis \u2013 {{committedCount}})",
63075
63482
  "subscriptions.updates.updateCount.description.full.not_committed.invoiced": "U\u017E \u0161i\u0105 eilut\u0119 visam laikotarpiui s\u0105skaita fakt\u016Bra i\u0161ra\u0161yta",
63076
63483
  "subscriptions.updates.updateCount.description.full.not_committed.not_invoiced": "Visam laikotarpiui nei\u0161ra\u0161yta {{amount}} suma",
63077
- "accounting.invoicePosted.entryDescription": "I\u0161ra\u0161ytos s\u0105skaitos fakt\u016Bros {{invoiceId}} registravimo \u012Fra\u0161as",
63078
- "accounting.transactionSettled.entryDescription": "S\u0105skaitos fakt\u016Bros {{invoiceId}} mok\u0117jimo sudengimas",
63079
- "accounting.transactionRefunded.entryDescription": "S\u0105skaitos fakt\u016Bros {{invoiceId}} gr\u0105\u017Einimas",
63080
- "accounting.creditNotePosted.entryDescription": "Kreditin\u0117 s\u0105skaita {{creditNoteId}} s\u0105skaitai fakt\u016Brai {{invoiceId}}",
63081
- "accounting.standaloneCreditNotePosted.entryDescription": "Kreditin\u0117 s\u0105skaita {{creditNoteId}}",
63082
- "accounting.revrec.entryDescription": "Pajam\u0173 pripa\u017Einimas pagal grafik\u0105 {{scheduleId}}, laikotarpis {{periodStart}}\u2013{{periodEnd}}",
63083
- "accounting.revrec.debitLineDescription": "Atid\u0117t\u0173j\u0173 pajam\u0173 suma\u017Einimas \u2013 grafikas {{scheduleId}}, laikotarpis {{periodDate}}",
63084
- "accounting.revrec.creditLineDescription": "Pajam\u0173 pripa\u017Einimas \u2013 grafikas {{scheduleId}}, laikotarpis {{periodDate}}",
63085
- "accounting.revrec.discountDebitLineDescription": "Atid\u0117tosios nuolaidos suma\u017Einimas \u2013 grafikas {{scheduleId}}, laikotarpis {{periodDate}}",
63086
- "accounting.revrec.discountCreditLineDescription": "Pajamas ma\u017Einan\u010Dios sumos (nuolaidos) pripa\u017Einimas \u2013 grafikas {{scheduleId}}, laikotarpis {{periodDate}}",
63087
- "accounting.revrec.closedPeriodFallbackNote": " (u\u017Eregistruota kitame atvirame laikotarpyje, nes tikslinis apskaitos laikotarpis u\u017Edarytas; pradin\u0117 data {{originalDate}})",
63088
- "einvoicing.paymentProcessed": "Mok\u0117jimas apdorotas",
63089
- "einvoicing.paymentReceived": "Mok\u0117jimas gautas",
63090
- "einvoicing.paymentFromWallet": "Mok\u0117jimas i\u0161 pinigin\u0117s"
63484
+ "subscriptions.updates.updateCount.description.prorata.committed.invoiced": "Pritaikytas minimalus \u012Fsipareigotas {{committedCount}} kiekis.",
63485
+ "subscriptions.updates.updateCount.description.prorata.committed.not_invoiced": "Proporcingam laikotarpiui nei\u0161ra\u0161yta {{amount}} suma (minimalus \u012Fsipareigotas kiekis \u2013 {{committedCount}})",
63486
+ "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "U\u017E \u0161i\u0105 eilut\u0119 proporcingam laikotarpiui s\u0105skaita fakt\u016Bra i\u0161ra\u0161yta",
63487
+ "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Proporcingam laikotarpiui nei\u0161ra\u0161yta {{amount}} suma",
63488
+ "subscriptions.updates.updatePrices": "Atnaujinti {{productName}} kainas",
63489
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 nebegaliojantis likutis"
63091
63490
  };
63092
63491
 
63093
63492
  // ../hyperline-i18n/build/locales/nl.js
63094
63493
  var nl = {
63095
- "accounting.invoicePosted.entryDescription": "Boekingsregel voor factuur {{invoiceId}}",
63096
- "accounting.transactionSettled.entryDescription": "Betalingsafwikkeling voor factuur {{invoiceId}}",
63097
- "accounting.transactionRefunded.entryDescription": "Terugbetaling voor factuur {{invoiceId}}",
63098
63494
  "accounting.creditNotePosted.entryDescription": "Creditnota {{creditNoteId}} voor factuur {{invoiceId}}",
63099
- "accounting.standaloneCreditNotePosted.entryDescription": "Creditnota {{creditNoteId}}",
63495
+ "accounting.invoicePosted.entryDescription": "Boekingsregel voor factuur {{invoiceId}}",
63496
+ "accounting.revrec.closedPeriodFallbackNote": " (geboekt in de volgende open periode \u2014 doelboekingsperiode gesloten; oorspronkelijke datum {{originalDate}})",
63100
63497
  "accounting.revrec.creditLineDescription": "Omzet erkennen \u2013 schema {{scheduleId}}, periode {{periodDate}}",
63101
63498
  "accounting.revrec.debitLineDescription": "Uitgestelde omzet verlagen \u2013 schema {{scheduleId}}, periode {{periodDate}}",
63102
63499
  "accounting.revrec.discountCreditLineDescription": "Omzetvermindering (korting) erkennen \u2013 schema {{scheduleId}}, periode {{periodDate}}",
63103
- "accounting.revrec.closedPeriodFallbackNote": " (geboekt in de volgende open periode \u2014 doelboekingsperiode gesloten; oorspronkelijke datum {{originalDate}})",
63104
63500
  "accounting.revrec.discountDebitLineDescription": "Uitgestelde korting verlagen \u2013 schema {{scheduleId}}, periode {{periodDate}}",
63105
63501
  "accounting.revrec.entryDescription": "Omzeterkenning voor schema {{scheduleId}}, periode {{periodStart}} - {{periodEnd}}",
63502
+ "accounting.standaloneCreditNotePosted.entryDescription": "Creditnota {{creditNoteId}}",
63503
+ "accounting.transactionRefunded.entryDescription": "Terugbetaling voor factuur {{invoiceId}}",
63504
+ "accounting.transactionSettled.entryDescription": "Betalingsafwikkeling voor factuur {{invoiceId}}",
63106
63505
  "creditNotes.refundChargeName": "Terugbetaling voor factuur",
63107
63506
  "credits.bundleOf": "{{productName}} - Bundel van {{creditCount}} credits",
63108
63507
  "credits.unitsOf": "{{productName}} - {{creditCount}} credits",
@@ -63116,9 +63515,9 @@ var nl = {
63116
63515
  "invoices.prorata.paymentForItemFullPeriod": "Betaling voor",
63117
63516
  "invoices.prorata.refundForItem": "Gedeeltelijke terugbetaling voor",
63118
63517
  "invoices.prorata.refundForItemFullPeriod": "Terugbetaling voor",
63119
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 verlopen saldo",
63120
63518
  "subscriptions.closingChargeName": "Afsluitkosten voor abonnement",
63121
63519
  "subscriptions.correction": "Aanpassing vorige periode",
63520
+ "subscriptions.reinstatementRechargeName": "Herstelkosten van geannuleerde periode",
63122
63521
  "subscriptions.updates.addCoupon": "Coupon toevoegen {{couponName}}",
63123
63522
  "subscriptions.updates.addProduct": "{{productName}} toevoegen",
63124
63523
  "subscriptions.updates.removeCoupon": "Coupon verwijderen {{couponName}}",
@@ -63133,22 +63532,23 @@ var nl = {
63133
63532
  "subscriptions.updates.updateCount.description.prorata.committed.not_invoiced": "Bedrag van {{amount}} (met een minimaal toegezegd aantal van {{committedCount}}) niet gefactureerd voor de geproportioneerde periode",
63134
63533
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Deze regel is gefactureerd voor de geproportioneerde periode",
63135
63534
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Bedrag van {{amount}} niet gefactureerd voor de geproportioneerde periode",
63136
- "subscriptions.updates.updatePrices": "Prijzen bijwerken voor {{productName}}"
63535
+ "subscriptions.updates.updatePrices": "Prijzen bijwerken voor {{productName}}",
63536
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 verlopen saldo"
63137
63537
  };
63138
63538
 
63139
63539
  // ../hyperline-i18n/build/locales/pl.js
63140
63540
  var pl = {
63141
- "accounting.invoicePosted.entryDescription": "Zapis ksi\u0119gowy dla faktury {{invoiceId}}",
63142
- "accounting.transactionSettled.entryDescription": "Rozliczenie p\u0142atno\u015Bci dla faktury {{invoiceId}}",
63143
- "accounting.transactionRefunded.entryDescription": "Zwrot za faktur\u0119 {{invoiceId}}",
63144
63541
  "accounting.creditNotePosted.entryDescription": "Nota kredytowa {{creditNoteId}} dla faktury {{invoiceId}}",
63145
- "accounting.standaloneCreditNotePosted.entryDescription": "Nota kredytowa {{creditNoteId}}",
63542
+ "accounting.invoicePosted.entryDescription": "Zapis ksi\u0119gowy dla faktury {{invoiceId}}",
63543
+ "accounting.revrec.closedPeriodFallbackNote": " (zaksi\u0119gowano w nast\u0119pnym otwartym okresie \u2014 docelowy okres ksi\u0119gowy zamkni\u0119ty; pierwotna data {{originalDate}})",
63146
63544
  "accounting.revrec.creditLineDescription": "Rozpoznanie przychodu \u2013 harmonogram {{scheduleId}}, okres {{periodDate}}",
63147
63545
  "accounting.revrec.debitLineDescription": "Zmniejszenie przychod\xF3w przysz\u0142ych okres\xF3w \u2013 harmonogram {{scheduleId}}, okres {{periodDate}}",
63148
63546
  "accounting.revrec.discountCreditLineDescription": "Rozpoznanie kontra-przychodu (rabat) \u2013 harmonogram {{scheduleId}}, okres {{periodDate}}",
63149
- "accounting.revrec.closedPeriodFallbackNote": " (zaksi\u0119gowano w nast\u0119pnym otwartym okresie \u2014 docelowy okres ksi\u0119gowy zamkni\u0119ty; pierwotna data {{originalDate}})",
63150
63547
  "accounting.revrec.discountDebitLineDescription": "Zmniejszenie odroczonego rabatu \u2013 harmonogram {{scheduleId}}, okres {{periodDate}}",
63151
63548
  "accounting.revrec.entryDescription": "Rozpoznanie przychodu dla harmonogramu {{scheduleId}}, okres {{periodStart}} - {{periodEnd}}",
63549
+ "accounting.standaloneCreditNotePosted.entryDescription": "Nota kredytowa {{creditNoteId}}",
63550
+ "accounting.transactionRefunded.entryDescription": "Zwrot za faktur\u0119 {{invoiceId}}",
63551
+ "accounting.transactionSettled.entryDescription": "Rozliczenie p\u0142atno\u015Bci dla faktury {{invoiceId}}",
63152
63552
  "creditNotes.refundChargeName": "Zwrot za faktur\u0119",
63153
63553
  "credits.bundleOf": "{{productName}} - Pakiet {{creditCount}} kredyt\xF3w",
63154
63554
  "credits.unitsOf": "{{productName}} - {{creditCount}} kredyt\xF3w",
@@ -63162,9 +63562,9 @@ var pl = {
63162
63562
  "invoices.prorata.paymentForItemFullPeriod": "P\u0142atno\u015B\u0107 za",
63163
63563
  "invoices.prorata.refundForItem": "Zwrot proporcjonalny za",
63164
63564
  "invoices.prorata.refundForItemFullPeriod": "Zwrot za",
63165
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 wygas\u0142e saldo",
63166
63565
  "subscriptions.closingChargeName": "Op\u0142ata za zamkni\u0119cie subskrypcji",
63167
63566
  "subscriptions.correction": "Korekta poprzedniego okresu",
63567
+ "subscriptions.reinstatementRechargeName": "Op\u0142ata za przywr\xF3cenie anulowanego okresu",
63168
63568
  "subscriptions.updates.addCoupon": "Dodaj kupon {{couponName}}",
63169
63569
  "subscriptions.updates.addProduct": "Dodaj {{productName}}",
63170
63570
  "subscriptions.updates.removeCoupon": "Usu\u0144 kupon {{couponName}}",
@@ -63179,22 +63579,23 @@ var pl = {
63179
63579
  "subscriptions.updates.updateCount.description.prorata.committed.not_invoiced": "Kwota {{amount}} (z minimaln\u0105 zobowi\u0105zan\u0105 ilo\u015Bci\u0105 {{committedCount}}) niefakturowana za okres proporcjonalny",
63180
63580
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Ta pozycja zosta\u0142a zafakturowana za okres proporcjonalny",
63181
63581
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Kwota {{amount}} niefakturowana za okres proporcjonalny",
63182
- "subscriptions.updates.updatePrices": "Aktualizuj ceny dla {{productName}}"
63582
+ "subscriptions.updates.updatePrices": "Aktualizuj ceny dla {{productName}}",
63583
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 wygas\u0142e saldo"
63183
63584
  };
63184
63585
 
63185
63586
  // ../hyperline-i18n/build/locales/pt.js
63186
63587
  var pt = {
63187
- "accounting.invoicePosted.entryDescription": "Lan\xE7amento cont\xE1bil para a fatura {{invoiceId}}",
63188
- "accounting.transactionSettled.entryDescription": "Liquida\xE7\xE3o de pagamento para a fatura {{invoiceId}}",
63189
- "accounting.transactionRefunded.entryDescription": "Reembolso da fatura {{invoiceId}}",
63190
63588
  "accounting.creditNotePosted.entryDescription": "Nota de cr\xE9dito {{creditNoteId}} para a fatura {{invoiceId}}",
63191
- "accounting.standaloneCreditNotePosted.entryDescription": "Nota de cr\xE9dito {{creditNoteId}}",
63589
+ "accounting.invoicePosted.entryDescription": "Lan\xE7amento cont\xE1bil para a fatura {{invoiceId}}",
63590
+ "accounting.revrec.closedPeriodFallbackNote": " (lan\xE7ado no pr\xF3ximo per\xEDodo aberto \u2014 per\xEDodo cont\xE1bil de destino fechado; data original {{originalDate}})",
63192
63591
  "accounting.revrec.creditLineDescription": "Reconhecer receita \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
63193
63592
  "accounting.revrec.debitLineDescription": "Diminui\xE7\xE3o da receita diferida \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
63194
63593
  "accounting.revrec.discountCreditLineDescription": "Reconhecer contra-receita (desconto) \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
63195
- "accounting.revrec.closedPeriodFallbackNote": " (lan\xE7ado no pr\xF3ximo per\xEDodo aberto \u2014 per\xEDodo cont\xE1bil de destino fechado; data original {{originalDate}})",
63196
63594
  "accounting.revrec.discountDebitLineDescription": "Diminui\xE7\xE3o do desconto diferido \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
63197
63595
  "accounting.revrec.entryDescription": "Reconhecimento de receita para o cronograma {{scheduleId}}, per\xEDodo {{periodStart}} - {{periodEnd}}",
63596
+ "accounting.standaloneCreditNotePosted.entryDescription": "Nota de cr\xE9dito {{creditNoteId}}",
63597
+ "accounting.transactionRefunded.entryDescription": "Reembolso da fatura {{invoiceId}}",
63598
+ "accounting.transactionSettled.entryDescription": "Liquida\xE7\xE3o de pagamento para a fatura {{invoiceId}}",
63198
63599
  "creditNotes.refundChargeName": "Reembolso pela fatura",
63199
63600
  "credits.bundleOf": "{{productName}} - Pacote de {{creditCount}} cr\xE9ditos",
63200
63601
  "credits.unitsOf": "{{productName}} - {{creditCount}} cr\xE9ditos",
@@ -63208,9 +63609,9 @@ var pt = {
63208
63609
  "invoices.prorata.paymentForItemFullPeriod": "Pagamento por",
63209
63610
  "invoices.prorata.refundForItem": "Reembolso proporcional por",
63210
63611
  "invoices.prorata.refundForItemFullPeriod": "Reembolso por",
63211
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo expirado",
63212
63612
  "subscriptions.closingChargeName": "Taxa de encerramento da assinatura",
63213
63613
  "subscriptions.correction": "Ajuste do per\xEDodo anterior",
63614
+ "subscriptions.reinstatementRechargeName": "Recarga de reintegra\xE7\xE3o do per\xEDodo cancelado",
63214
63615
  "subscriptions.updates.addCoupon": "Adicionar cupom {{couponName}}",
63215
63616
  "subscriptions.updates.addProduct": "Adicionar {{productName}}",
63216
63617
  "subscriptions.updates.removeCoupon": "Remover cupom {{couponName}}",
@@ -63225,7 +63626,8 @@ var pt = {
63225
63626
  "subscriptions.updates.updateCount.description.prorata.committed.not_invoiced": "Valor de {{amount}} (com um m\xEDnimo comprometido de {{committedCount}}) n\xE3o faturado para o per\xEDodo proporcional",
63226
63627
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Esta linha foi faturada para o per\xEDodo proporcional",
63227
63628
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Valor de {{amount}} n\xE3o faturado para o per\xEDodo proporcional",
63228
- "subscriptions.updates.updatePrices": "Atualizar pre\xE7os para {{productName}}"
63629
+ "subscriptions.updates.updatePrices": "Atualizar pre\xE7os para {{productName}}",
63630
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo expirado"
63229
63631
  };
63230
63632
 
63231
63633
  // ../hyperline-i18n/build/language.js
@@ -66004,6 +66406,150 @@ var isAxiosError = axios.isAxiosError;
66004
66406
  // ../hyperline-lib/build/httpClient/httpClient.js
66005
66407
  import axios2 from "axios";
66006
66408
  import axiosRetry, { isNetworkOrIdempotentRequestError, retryAfter } from "axios-retry";
66409
+
66410
+ // ../hyperline-lib/build/httpClient/logRedaction.js
66411
+ var REDACTED_KEY_NAMES = /* @__PURE__ */ new Set([
66412
+ "accesstoken",
66413
+ "apikey",
66414
+ "apitoken",
66415
+ "assertion",
66416
+ "authtoken",
66417
+ "clientassertion",
66418
+ "codeverifier",
66419
+ "credentials",
66420
+ "idtoken",
66421
+ "privatekey",
66422
+ "refreshtoken",
66423
+ "sessiontoken",
66424
+ "token"
66425
+ ]);
66426
+ var REDACTED_KEY_SUFFIX_PATTERN = /(secret|password)$/;
66427
+ var REDACTED_KEY_CANDIDATE_PATTERN = /token|key|secret|password|assertion|verifier|credentials/i;
66428
+ var REDACTED_VALUE = "<redacted>";
66429
+ var MAX_REDACTION_DEPTH = 10;
66430
+ var MAX_PARSED_STRING_LENGTH = 16384;
66431
+ var MAX_VISITED_NODES = 1e3;
66432
+ var MAX_CONTAINER_ENTRIES = MAX_VISITED_NODES;
66433
+ function redactLogBody({ body }) {
66434
+ return redactValue({
66435
+ value: body,
66436
+ depth: MAX_REDACTION_DEPTH,
66437
+ budget: { remainingNodes: MAX_VISITED_NODES }
66438
+ });
66439
+ }
66440
+ function redactLogUrl({ url: url2 }) {
66441
+ const queryIndex = url2.indexOf("?");
66442
+ if (queryIndex === -1 || url2.length > MAX_PARSED_STRING_LENGTH) {
66443
+ return url2;
66444
+ }
66445
+ const redactedQuery = redactFormEncoded({ text: url2.slice(queryIndex + 1) });
66446
+ return redactedQuery === void 0 ? url2 : `${url2.slice(0, queryIndex)}?${redactedQuery}`;
66447
+ }
66448
+ function redactValue({ value, depth, budget }) {
66449
+ if (depth <= 0 || budget.remainingNodes <= 0) {
66450
+ return value;
66451
+ }
66452
+ budget.remainingNodes -= 1;
66453
+ if (typeof value === "string") {
66454
+ return redactString({ text: value, budget });
66455
+ }
66456
+ if (value instanceof URLSearchParams) {
66457
+ return redactFormEncoded({ text: value.toString() }) ?? value;
66458
+ }
66459
+ if (Array.isArray(value)) {
66460
+ return redactArray({ items: value, depth, budget });
66461
+ }
66462
+ if (isPlainObject2(value)) {
66463
+ return redactObject({ record: value, depth, budget });
66464
+ }
66465
+ return value;
66466
+ }
66467
+ function redactArray({ items, depth, budget }) {
66468
+ if (items.length > MAX_CONTAINER_ENTRIES) {
66469
+ return items;
66470
+ }
66471
+ let redactedItems;
66472
+ for (const [index, item] of items.entries()) {
66473
+ if (budget.remainingNodes <= 0) {
66474
+ break;
66475
+ }
66476
+ const redactedItem = redactValue({ value: item, depth: depth - 1, budget });
66477
+ if (redactedItem !== item) {
66478
+ redactedItems ??= [...items];
66479
+ redactedItems[index] = redactedItem;
66480
+ }
66481
+ }
66482
+ return redactedItems ?? items;
66483
+ }
66484
+ function redactObject({ record: record2, depth, budget }) {
66485
+ const redactedEntries = /* @__PURE__ */ new Map();
66486
+ let entryCount = 0;
66487
+ for (const key in record2) {
66488
+ if (!Object.hasOwn(record2, key)) {
66489
+ continue;
66490
+ }
66491
+ entryCount += 1;
66492
+ if (entryCount > MAX_CONTAINER_ENTRIES) {
66493
+ return record2;
66494
+ }
66495
+ if (budget.remainingNodes <= 0) {
66496
+ break;
66497
+ }
66498
+ const nestedValue = record2[key];
66499
+ const redactedNestedValue = isRedactedKey({ key }) && nestedValue != null ? REDACTED_VALUE : redactValue({ value: nestedValue, depth: depth - 1, budget });
66500
+ if (redactedNestedValue !== nestedValue) {
66501
+ redactedEntries.set(key, redactedNestedValue);
66502
+ }
66503
+ }
66504
+ return redactedEntries.size === 0 ? record2 : { ...record2, ...Object.fromEntries(redactedEntries) };
66505
+ }
66506
+ function redactString({ text, budget }) {
66507
+ if (text.length > MAX_PARSED_STRING_LENGTH) {
66508
+ return text;
66509
+ }
66510
+ const trimmedText = text.trim();
66511
+ if (trimmedText.startsWith("{") || trimmedText.startsWith("[")) {
66512
+ try {
66513
+ const parsedValue = JSON.parse(trimmedText);
66514
+ const redactedValue = redactValue({
66515
+ value: parsedValue,
66516
+ depth: MAX_REDACTION_DEPTH,
66517
+ budget
66518
+ });
66519
+ return redactedValue === parsedValue ? text : JSON.stringify(redactedValue);
66520
+ } catch {
66521
+ return text;
66522
+ }
66523
+ }
66524
+ return redactFormEncoded({ text }) ?? text;
66525
+ }
66526
+ function redactFormEncoded({ text }) {
66527
+ if (!text.includes("=") || !REDACTED_KEY_CANDIDATE_PATTERN.test(text)) {
66528
+ return void 0;
66529
+ }
66530
+ const params = new URLSearchParams(text);
66531
+ let hasRedactedParam = false;
66532
+ for (const key of new Set(params.keys())) {
66533
+ if (isRedactedKey({ key })) {
66534
+ params.set(key, REDACTED_VALUE);
66535
+ hasRedactedParam = true;
66536
+ }
66537
+ }
66538
+ return hasRedactedParam ? params.toString() : void 0;
66539
+ }
66540
+ function isRedactedKey({ key }) {
66541
+ const normalizedKey = key.toLowerCase().replace(/[_-]/g, "");
66542
+ return REDACTED_KEY_NAMES.has(normalizedKey) || REDACTED_KEY_SUFFIX_PATTERN.test(normalizedKey);
66543
+ }
66544
+ function isPlainObject2(value) {
66545
+ if (typeof value !== "object" || value === null) {
66546
+ return false;
66547
+ }
66548
+ const prototype = Object.getPrototypeOf(value);
66549
+ return prototype === Object.prototype || prototype === null;
66550
+ }
66551
+
66552
+ // ../hyperline-lib/build/httpClient/httpClient.js
66007
66553
  import { AxiosError } from "axios";
66008
66554
  var recommendedRetryConfig = {
66009
66555
  retries: 3,
@@ -66071,13 +66617,14 @@ function isTooManyRequestsError(error48) {
66071
66617
  return error48.response?.status === 429;
66072
66618
  }
66073
66619
  var toLogRequest = (config4) => {
66620
+ const url2 = redactLogUrl({ url: config4.url ?? "" });
66074
66621
  return {
66075
66622
  method: config4.method ?? "",
66076
- url: config4.url ?? "",
66077
- path: config4.url ?? "",
66623
+ url: url2,
66624
+ path: url2,
66078
66625
  hostname: config4.baseURL ?? "",
66079
- originalUrl: `${config4.baseURL ?? ""}${config4.url}`,
66080
- body: config4.data,
66626
+ originalUrl: `${config4.baseURL ?? ""}${url2}`,
66627
+ body: redactLogBody({ body: config4.data }),
66081
66628
  headers: {}
66082
66629
  };
66083
66630
  };