@hyperline/cli 0.1.0-build.1.d6bc3c8 → 0.1.0-build.1.d6f41d9

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.
@@ -39229,164 +39229,158 @@ Examples:
39229
39229
  });
39230
39230
  }
39231
39231
 
39232
- // build/commands/generated/agents.js
39233
- function registerAgentsCommands(parent) {
39234
- const resource = parent.command("agents").description("Manage agents");
39235
- 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.
39236
-
39237
- - wallet: Charges a monetary wallet.
39238
- - credits: Consumes a credit balance.
39239
- - windows: Meters weighted units against rolling allowances.`).option("--take <number>", `take`).option("--skip <number>", `skip`).addHelpText("after", `
39232
+ // build/commands/generated/aggregators.js
39233
+ function registerAggregatorsCommands(parent) {
39234
+ const resource = parent.command("aggregators").description("Manage aggregators");
39235
+ resource.command("list").description(`List all aggregators with pagination. Aggregators define how billable events are counted or summed to compute usage.`).option("--take <number>", `take`).option("--skip <number>", `skip`).addHelpText("after", `
39240
39236
  Examples:
39241
- hyperline agents list-agent-plans
39242
- hyperline agents list-agent-plans --mode <mode> --take <take>`).action(async (opts) => {
39237
+ hyperline aggregators list
39238
+ hyperline aggregators list --take <take>`).action(async (opts) => {
39243
39239
  const ctx = resource.parent?.opts()._ctx;
39244
39240
  if (!ctx) {
39245
39241
  process.stderr.write("Error: Not authenticated\n");
39246
39242
  process.exit(1);
39247
39243
  }
39248
39244
  const args = {};
39249
- if (opts.mode !== void 0)
39250
- args.mode = opts.mode;
39251
39245
  if (opts.take !== void 0)
39252
39246
  args.take = Number(opts.take);
39253
39247
  if (opts.skip !== void 0)
39254
39248
  args.skip = Number(opts.skip);
39255
39249
  await ctx.execute({
39256
39250
  method: "GET",
39257
- path: "/v1/agents/plans",
39251
+ path: "/v1/aggregators",
39258
39252
  args,
39259
- queryParamKeys: ["mode", "take", "skip"]
39253
+ queryParamKeys: ["take", "skip"]
39260
39254
  });
39261
39255
  });
39262
- resource.command("create-agent-plan").description(`Create an AI agent billing plan: name, billing mode (wallet/credits/windows), rate card reference, allowance windows, markups, per-seat credit grants and overage stance. Past-limit usage is priced EITHER by overage_markup_percent over the base rates OR by overage_rate_card_id, a currency rate card whose own rates are the overage price \u2014 never both. Metered overage mints the plan's invoice container.`).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.
39263
-
39264
- - refuse: Rejects the call that crosses the boundary without deducting usage.
39265
- - 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.
39266
-
39267
- - calendar_month: Settles at the end of each UTC calendar month.`).requiredOption("--mode <value>", `Billing mode.
39268
-
39269
- - wallet: Charges a monetary wallet.
39270
- - credits: Consumes a credit balance.
39271
- - windows: Meters weighted units against rolling allowances.`).addHelpText("after", `
39256
+ resource.command("create").description(`Create a new aggregator that counts or sums billable events. Aggregators can then be linked to products via aggregator_id.`).requiredOption("--entity <value>", `The billable event entity to aggregate.`).option("--type <value>", `The type of aggregator.`).option("--where <json>", `Filter conditions for the aggregation.`).option("--name <value>", `Name of the aggregator.`).option("--description <value>", `Description of the aggregator.`).option("--allow-negative-values", `Whether the aggregator can produce negative values.`).option("--aggregate-on-customers-enabled", `Whether the aggregator should aggregate on customers.`).option("--custom-event-name <value>", `Custom event name for the aggregator.`).option("--exposed-event-keys <json>", `Event keys exposed by the aggregator.`).option("--unit-name <value>", `Display name of the unit being measured (e.g. 'user', 'request'). Used as fallback for products attached to this aggregator.`).option("--default-interval-count <number>", `Default interval count for usage periods.`).option("--default-interval-period <value>", `Default interval period for usage periods.`).option("--thresholds <json>", `Thresholds for the aggregator.`).requiredOption("--operation <value>", `The aggregation operation to perform.`).option("--property <value>", `The property to sum.`).addHelpText("after", `
39272
39257
  Examples:
39273
- hyperline agents create-agent-plan --name <name> --mode <mode>
39274
- hyperline agents create-agent-plan --name <name> --mode <mode> --rate-card-id <rate_card_id> --overage-mode <overage_mode>
39275
- hyperline agents create-agent-plan --name <name> --mode <mode> --output json`).action(async (opts) => {
39258
+ hyperline aggregators create --entity <entity> --operation <operation>
39259
+ hyperline aggregators create --entity <entity> --operation <operation> --type <type> --where <where>
39260
+ hyperline aggregators create --entity <entity> --operation <operation> --output json`).action(async (opts) => {
39276
39261
  const ctx = resource.parent?.opts()._ctx;
39277
39262
  if (!ctx) {
39278
39263
  process.stderr.write("Error: Not authenticated\n");
39279
39264
  process.exit(1);
39280
39265
  }
39281
39266
  const args = {};
39267
+ if (opts.entity !== void 0)
39268
+ args.entity = opts.entity;
39269
+ if (opts.type !== void 0)
39270
+ args.type = opts.type;
39282
39271
  if (opts.name !== void 0)
39283
39272
  args.name = opts.name;
39284
- if (opts.rateCardId !== void 0)
39285
- args.rate_card_id = opts.rateCardId;
39286
- if (opts.overageMode !== void 0)
39287
- args.overage_mode = opts.overageMode;
39288
- if (opts.markupPercent !== void 0)
39289
- args.markup_percent = opts.markupPercent;
39290
- if (opts.overageMarkupPercent !== void 0)
39291
- args.overage_markup_percent = opts.overageMarkupPercent;
39292
- if (opts.overageRateCardId !== void 0)
39293
- args.overage_rate_card_id = opts.overageRateCardId;
39294
- if (opts.perSeatCredits !== void 0)
39295
- args.per_seat_credits = opts.perSeatCredits;
39296
- if (opts.settlementSchedule !== void 0)
39297
- args.settlement_schedule = opts.settlementSchedule;
39298
- if (opts.mode !== void 0)
39299
- args.mode = opts.mode;
39300
- if (opts.settlementIntervalMinutes !== void 0)
39301
- args.settlement_interval_minutes = Number(opts.settlementIntervalMinutes);
39302
- if (opts.grantRolloverEnabled !== void 0)
39303
- args.grant_rollover_enabled = true;
39304
- if (opts.windows !== void 0)
39305
- args.windows = JSON.parse(opts.windows);
39273
+ if (opts.description !== void 0)
39274
+ args.description = opts.description;
39275
+ if (opts.customEventName !== void 0)
39276
+ args.custom_event_name = opts.customEventName;
39277
+ if (opts.unitName !== void 0)
39278
+ args.unit_name = opts.unitName;
39279
+ if (opts.defaultIntervalPeriod !== void 0)
39280
+ args.default_interval_period = opts.defaultIntervalPeriod;
39281
+ if (opts.operation !== void 0)
39282
+ args.operation = opts.operation;
39283
+ if (opts.property !== void 0)
39284
+ args.property = opts.property;
39285
+ if (opts.defaultIntervalCount !== void 0)
39286
+ args.default_interval_count = Number(opts.defaultIntervalCount);
39287
+ if (opts.allowNegativeValues !== void 0)
39288
+ args.allow_negative_values = true;
39289
+ if (opts.aggregateOnCustomersEnabled !== void 0)
39290
+ args.aggregate_on_customers_enabled = true;
39291
+ if (opts.where !== void 0)
39292
+ args.where = JSON.parse(opts.where);
39293
+ if (opts.exposedEventKeys !== void 0)
39294
+ args.exposed_event_keys = JSON.parse(opts.exposedEventKeys);
39295
+ if (opts.thresholds !== void 0)
39296
+ args.thresholds = JSON.parse(opts.thresholds);
39306
39297
  await ctx.execute({
39307
39298
  method: "POST",
39308
- path: "/v1/agents/plans",
39299
+ path: "/v1/aggregators",
39309
39300
  args,
39310
39301
  queryParamKeys: []
39311
39302
  });
39312
39303
  });
39313
- 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", `
39304
+ resource.command("get").description(`Retrieve a specific aggregator by ID.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
39314
39305
  Examples:
39315
- hyperline agents get-agent-plan --plan-id <plan_id>`).action(async (opts) => {
39306
+ hyperline aggregators get --id <id>`).action(async (opts) => {
39316
39307
  const ctx = resource.parent?.opts()._ctx;
39317
39308
  if (!ctx) {
39318
39309
  process.stderr.write("Error: Not authenticated\n");
39319
39310
  process.exit(1);
39320
39311
  }
39321
39312
  const args = {};
39322
- if (opts.planId !== void 0)
39323
- args.plan_id = opts.planId;
39313
+ if (opts.id !== void 0)
39314
+ args.id = opts.id;
39324
39315
  await ctx.execute({
39325
39316
  method: "GET",
39326
- path: "/v1/agents/plans/{plan_id}",
39317
+ path: "/v1/aggregators/{id}",
39327
39318
  args,
39328
39319
  queryParamKeys: []
39329
39320
  });
39330
39321
  });
39331
- 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.
39332
-
39333
- - refuse: Rejects the call that crosses the boundary without deducting usage.
39334
- - 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.
39335
-
39336
- - calendar_month: Settles at the end of each UTC calendar month.`).addHelpText("after", `
39322
+ resource.command("update").description(`Update an existing aggregator's configuration.`).requiredOption("--id <value>", `id parameter`).option("--entity <value>", `The billable event entity to aggregate.`).option("--type <value>", `The type of aggregator.`).option("--where <json>", `Filter conditions for the aggregation.`).option("--name <value>", `Name of the aggregator.`).option("--description <value>", `Description of the aggregator.`).option("--allow-negative-values", `Whether the aggregator can produce negative values.`).option("--aggregate-on-customers-enabled", `Whether the aggregator should aggregate on customers.`).option("--custom-event-name <value>", `Custom event name for the aggregator.`).option("--exposed-event-keys <json>", `Event keys exposed by the aggregator.`).option("--unit-name <value>", `Display name of the unit being measured (e.g. 'user', 'request'). Used as fallback for products attached to this aggregator.`).option("--default-interval-count <number>", `Default interval count for usage periods.`).option("--default-interval-period <value>", `Default interval period for usage periods.`).option("--thresholds <json>", `Thresholds for the aggregator. Replaces existing thresholds.`).option("--operation <value>", `The aggregation operation to perform.`).option("--property <value>", `The property to sum. Required when operation is 'sum'.`).addHelpText("after", `
39337
39323
  Examples:
39338
- hyperline agents replace-agent-plan --plan-id <plan_id> --name <name>
39339
- hyperline agents replace-agent-plan --plan-id <plan_id> --name <name> --rate-card-id <rate_card_id> --overage-mode <overage_mode>
39340
- hyperline agents replace-agent-plan --plan-id <plan_id> --name <name> --output json`).action(async (opts) => {
39324
+ hyperline aggregators update --id <id>
39325
+ hyperline aggregators update --id <id> --entity <entity> --type <type>
39326
+ hyperline aggregators update --id <id> --output json`).action(async (opts) => {
39341
39327
  const ctx = resource.parent?.opts()._ctx;
39342
39328
  if (!ctx) {
39343
39329
  process.stderr.write("Error: Not authenticated\n");
39344
39330
  process.exit(1);
39345
39331
  }
39346
39332
  const args = {};
39347
- if (opts.planId !== void 0)
39348
- args.plan_id = opts.planId;
39333
+ if (opts.id !== void 0)
39334
+ args.id = opts.id;
39335
+ if (opts.entity !== void 0)
39336
+ args.entity = opts.entity;
39337
+ if (opts.type !== void 0)
39338
+ args.type = opts.type;
39349
39339
  if (opts.name !== void 0)
39350
39340
  args.name = opts.name;
39351
- if (opts.rateCardId !== void 0)
39352
- args.rate_card_id = opts.rateCardId;
39353
- if (opts.overageMode !== void 0)
39354
- args.overage_mode = opts.overageMode;
39355
- if (opts.markupPercent !== void 0)
39356
- args.markup_percent = opts.markupPercent;
39357
- if (opts.overageMarkupPercent !== void 0)
39358
- args.overage_markup_percent = opts.overageMarkupPercent;
39359
- if (opts.overageRateCardId !== void 0)
39360
- args.overage_rate_card_id = opts.overageRateCardId;
39361
- if (opts.perSeatCredits !== void 0)
39362
- args.per_seat_credits = opts.perSeatCredits;
39363
- if (opts.settlementSchedule !== void 0)
39364
- args.settlement_schedule = opts.settlementSchedule;
39365
- if (opts.settlementIntervalMinutes !== void 0)
39366
- args.settlement_interval_minutes = Number(opts.settlementIntervalMinutes);
39367
- if (opts.grantRolloverEnabled !== void 0)
39368
- args.grant_rollover_enabled = true;
39369
- if (opts.windows !== void 0)
39370
- args.windows = JSON.parse(opts.windows);
39341
+ if (opts.description !== void 0)
39342
+ args.description = opts.description;
39343
+ if (opts.customEventName !== void 0)
39344
+ args.custom_event_name = opts.customEventName;
39345
+ if (opts.unitName !== void 0)
39346
+ args.unit_name = opts.unitName;
39347
+ if (opts.defaultIntervalPeriod !== void 0)
39348
+ args.default_interval_period = opts.defaultIntervalPeriod;
39349
+ if (opts.operation !== void 0)
39350
+ args.operation = opts.operation;
39351
+ if (opts.property !== void 0)
39352
+ args.property = opts.property;
39353
+ if (opts.defaultIntervalCount !== void 0)
39354
+ args.default_interval_count = Number(opts.defaultIntervalCount);
39355
+ if (opts.allowNegativeValues !== void 0)
39356
+ args.allow_negative_values = true;
39357
+ if (opts.aggregateOnCustomersEnabled !== void 0)
39358
+ args.aggregate_on_customers_enabled = true;
39359
+ if (opts.where !== void 0)
39360
+ args.where = JSON.parse(opts.where);
39361
+ if (opts.exposedEventKeys !== void 0)
39362
+ args.exposed_event_keys = JSON.parse(opts.exposedEventKeys);
39363
+ if (opts.thresholds !== void 0)
39364
+ args.thresholds = JSON.parse(opts.thresholds);
39371
39365
  await ctx.execute({
39372
39366
  method: "PUT",
39373
- path: "/v1/agents/plans/{plan_id}",
39367
+ path: "/v1/aggregators/{id}",
39374
39368
  args,
39375
39369
  queryParamKeys: []
39376
39370
  });
39377
39371
  });
39378
- 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", `
39372
+ resource.command("delete").description(`Delete an aggregator by ID. Will fail if the aggregator is linked to a product.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
39379
39373
  Examples:
39380
- hyperline agents delete-agent-plan --plan-id <plan_id>
39381
- hyperline agents delete-agent-plan --plan-id <plan_id> --output json`).action(async (opts) => {
39374
+ hyperline aggregators delete --id <id>
39375
+ hyperline aggregators delete --id <id> --output json`).action(async (opts) => {
39382
39376
  const ctx = resource.parent?.opts()._ctx;
39383
39377
  if (!ctx) {
39384
39378
  process.stderr.write("Error: Not authenticated\n");
39385
39379
  process.exit(1);
39386
39380
  }
39387
39381
  const args = {};
39388
- if (opts.planId !== void 0)
39389
- args.plan_id = opts.planId;
39382
+ if (opts.id !== void 0)
39383
+ args.id = opts.id;
39390
39384
  if (!opts.yes) {
39391
39385
  const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
39392
39386
  if (!confirmed) {
@@ -39396,100 +39390,399 @@ Examples:
39396
39390
  }
39397
39391
  await ctx.execute({
39398
39392
  method: "DELETE",
39399
- path: "/v1/agents/plans/{plan_id}",
39393
+ path: "/v1/aggregators/{id}",
39400
39394
  args,
39401
39395
  queryParamKeys: []
39402
39396
  });
39403
39397
  });
39404
- 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", `
39398
+ }
39399
+
39400
+ // build/commands/generated/aggregators-usage.js
39401
+ function registerAggregators_UsageCommands(parent) {
39402
+ const resource = parent.command("aggregators-usage").description("Manage aggregators > usage");
39403
+ resource.command("get-aggregator-usage").description(`Retrieve a usage row for an aggregator. Use the timeseries, group-by-customer or events endpoints to query metering data.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
39405
39404
  Examples:
39406
- hyperline agents get-agent-default-plan`).action(async (_opts) => {
39405
+ hyperline aggregators-usage get-aggregator-usage --id <id>`).action(async (opts) => {
39407
39406
  const ctx = resource.parent?.opts()._ctx;
39408
39407
  if (!ctx) {
39409
39408
  process.stderr.write("Error: Not authenticated\n");
39410
39409
  process.exit(1);
39411
39410
  }
39412
39411
  const args = {};
39412
+ if (opts.id !== void 0)
39413
+ args.id = opts.id;
39413
39414
  await ctx.execute({
39414
39415
  method: "GET",
39415
- path: "/v1/agents/default-plan",
39416
+ path: "/v1/aggregators/{id}/usage",
39416
39417
  args,
39417
39418
  queryParamKeys: []
39418
39419
  });
39419
39420
  });
39420
- 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", `
39421
+ resource.command("get-aggregator-usage-timeseries").description(`Get client-wide usage for an aggregator bucketed by month/day/hour over a period.`).requiredOption("--id <value>", `id parameter`).option("--start-date <value>", `ISO-8601 date string.`).option("--end-date <value>", `ISO-8601 date string.`).option("--aggregator-filter-id <value>", `Optional aggregator filter ID. When set, restricts the result to events matching that filter's config. Must belong to the aggregator in the path.`).option("--group-by <value>", `Bucket size for the timeseries.`).addHelpText("after", `
39421
39422
  Examples:
39422
- hyperline agents set-agent-default-plan --plan-id <plan_id>
39423
- hyperline agents set-agent-default-plan --plan-id <plan_id> --auto-apply
39424
- hyperline agents set-agent-default-plan --plan-id <plan_id> --output json`).action(async (opts) => {
39423
+ hyperline aggregators-usage get-aggregator-usage-timeseries --id <id>
39424
+ hyperline aggregators-usage get-aggregator-usage-timeseries --id <id> --start-date <start_date> --end-date <end_date>`).action(async (opts) => {
39425
39425
  const ctx = resource.parent?.opts()._ctx;
39426
39426
  if (!ctx) {
39427
39427
  process.stderr.write("Error: Not authenticated\n");
39428
39428
  process.exit(1);
39429
39429
  }
39430
39430
  const args = {};
39431
- if (opts.planId !== void 0)
39432
- args.plan_id = opts.planId;
39433
- if (opts.autoApply !== void 0)
39434
- args.auto_apply = true;
39431
+ if (opts.id !== void 0)
39432
+ args.id = opts.id;
39433
+ if (opts.startDate !== void 0)
39434
+ args.start_date = opts.startDate;
39435
+ if (opts.endDate !== void 0)
39436
+ args.end_date = opts.endDate;
39437
+ if (opts.aggregatorFilterId !== void 0)
39438
+ args.aggregator_filter_id = opts.aggregatorFilterId;
39439
+ if (opts.groupBy !== void 0)
39440
+ args.group_by = opts.groupBy;
39435
39441
  await ctx.execute({
39436
- method: "PUT",
39437
- path: "/v1/agents/default-plan",
39442
+ method: "GET",
39443
+ path: "/v1/aggregators/{id}/usage/timeseries",
39438
39444
  args,
39439
- queryParamKeys: []
39445
+ queryParamKeys: [
39446
+ "start_date",
39447
+ "end_date",
39448
+ "aggregator_filter_id",
39449
+ "group_by"
39450
+ ]
39440
39451
  });
39441
39452
  });
39442
- 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", `
39453
+ resource.command("get-aggregator-usage-group-by-customer").description(`Per-customer total usage for an aggregator over a period, ranked by total. Paginated with take/skip.`).requiredOption("--id <value>", `id parameter`).option("--start-date <value>", `ISO-8601 date string.`).option("--end-date <value>", `ISO-8601 date string.`).option("--aggregator-filter-id <value>", `Optional aggregator filter ID. When set, restricts the result to events matching that filter's config. Must belong to the aggregator in the path.`).option("--take <number>", `take`).option("--skip <number>", `skip`).addHelpText("after", `
39443
39454
  Examples:
39444
- hyperline agents clear-agent-default-plan
39445
- hyperline agents clear-agent-default-plan --output json`).action(async (opts) => {
39455
+ hyperline aggregators-usage get-aggregator-usage-group-by-customer --id <id>
39456
+ hyperline aggregators-usage get-aggregator-usage-group-by-customer --id <id> --start-date <start_date> --end-date <end_date>`).action(async (opts) => {
39446
39457
  const ctx = resource.parent?.opts()._ctx;
39447
39458
  if (!ctx) {
39448
39459
  process.stderr.write("Error: Not authenticated\n");
39449
39460
  process.exit(1);
39450
39461
  }
39451
39462
  const args = {};
39452
- if (!opts.yes) {
39453
- const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
39454
- if (!confirmed) {
39455
- process.stdout.write("Aborted.\n");
39456
- return;
39457
- }
39458
- }
39463
+ if (opts.id !== void 0)
39464
+ args.id = opts.id;
39465
+ if (opts.startDate !== void 0)
39466
+ args.start_date = opts.startDate;
39467
+ if (opts.endDate !== void 0)
39468
+ args.end_date = opts.endDate;
39469
+ if (opts.aggregatorFilterId !== void 0)
39470
+ args.aggregator_filter_id = opts.aggregatorFilterId;
39471
+ if (opts.take !== void 0)
39472
+ args.take = Number(opts.take);
39473
+ if (opts.skip !== void 0)
39474
+ args.skip = Number(opts.skip);
39459
39475
  await ctx.execute({
39460
- method: "DELETE",
39461
- path: "/v1/agents/default-plan",
39476
+ method: "GET",
39477
+ path: "/v1/aggregators/{id}/usage/group-by-customer",
39462
39478
  args,
39463
- queryParamKeys: []
39479
+ queryParamKeys: [
39480
+ "start_date",
39481
+ "end_date",
39482
+ "aggregator_filter_id",
39483
+ "take",
39484
+ "skip"
39485
+ ]
39464
39486
  });
39465
39487
  });
39466
- resource.command("list-agent-rate-cards").description(`List AI rate cards: named pricing row sets in credits, window units or currency. Shows what plans/policies/products depend on each. Filter by denomination, currency or name search; paginated with take/skip.`).option("--denomination <value>", `Unit in which rate-card prices are expressed.
39467
-
39468
- - credits: Credit counts.
39469
- - units: Weighted rolling-allowance units.
39470
- - currency: Major units of the specified currency.`).option("--currency <value>", `Currency code. See [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217#List_of_ISO_4217_currency_codes).`).option("--search <value>", `search`).option("--take <number>", `take`).option("--skip <number>", `skip`).addHelpText("after", `
39488
+ resource.command("get-aggregator-usage-events").description(`List raw billable events for an aggregator across every customer of the client. Paginated with take/skip.`).requiredOption("--id <value>", `id parameter`).option("--start-date <value>", `ISO-8601 date string.`).option("--end-date <value>", `ISO-8601 date string.`).option("--aggregator-filter-id <value>", `Optional aggregator filter ID. When set, restricts the result to events matching that filter's config. Must belong to the aggregator in the path.`).option("--take <number>", `take`).option("--skip <number>", `skip`).addHelpText("after", `
39471
39489
  Examples:
39472
- hyperline agents list-agent-rate-cards
39473
- hyperline agents list-agent-rate-cards --denomination <denomination> --currency <currency>`).action(async (opts) => {
39490
+ hyperline aggregators-usage get-aggregator-usage-events --id <id>
39491
+ hyperline aggregators-usage get-aggregator-usage-events --id <id> --start-date <start_date> --end-date <end_date>`).action(async (opts) => {
39474
39492
  const ctx = resource.parent?.opts()._ctx;
39475
39493
  if (!ctx) {
39476
39494
  process.stderr.write("Error: Not authenticated\n");
39477
39495
  process.exit(1);
39478
39496
  }
39479
39497
  const args = {};
39480
- if (opts.denomination !== void 0)
39481
- args.denomination = opts.denomination;
39482
- if (opts.currency !== void 0)
39483
- args.currency = opts.currency;
39484
- if (opts.search !== void 0)
39485
- args.search = opts.search;
39498
+ if (opts.id !== void 0)
39499
+ args.id = opts.id;
39500
+ if (opts.startDate !== void 0)
39501
+ args.start_date = opts.startDate;
39502
+ if (opts.endDate !== void 0)
39503
+ args.end_date = opts.endDate;
39504
+ if (opts.aggregatorFilterId !== void 0)
39505
+ args.aggregator_filter_id = opts.aggregatorFilterId;
39486
39506
  if (opts.take !== void 0)
39487
39507
  args.take = Number(opts.take);
39488
39508
  if (opts.skip !== void 0)
39489
39509
  args.skip = Number(opts.skip);
39490
39510
  await ctx.execute({
39491
39511
  method: "GET",
39492
- path: "/v1/agents/rate-cards",
39512
+ path: "/v1/aggregators/{id}/usage/events",
39513
+ args,
39514
+ queryParamKeys: [
39515
+ "start_date",
39516
+ "end_date",
39517
+ "aggregator_filter_id",
39518
+ "take",
39519
+ "skip"
39520
+ ]
39521
+ });
39522
+ });
39523
+ }
39524
+
39525
+ // build/commands/generated/ai-billing.js
39526
+ function registerAi_BillingCommands(parent) {
39527
+ const resource = parent.command("ai-billing").description("Manage ai billing");
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
+
39530
+ - wallet: Charges a monetary wallet.
39531
+ - credits: Consumes a credit balance.
39532
+ - windows: Meters weighted units against rolling allowances.`).option("--take <number>", `take`).option("--skip <number>", `skip`).addHelpText("after", `
39533
+ Examples:
39534
+ hyperline ai-billing list-agent-plans
39535
+ hyperline ai-billing list-agent-plans --mode <mode> --take <take>`).action(async (opts) => {
39536
+ const ctx = resource.parent?.opts()._ctx;
39537
+ if (!ctx) {
39538
+ process.stderr.write("Error: Not authenticated\n");
39539
+ process.exit(1);
39540
+ }
39541
+ const args = {};
39542
+ if (opts.mode !== void 0)
39543
+ args.mode = opts.mode;
39544
+ if (opts.take !== void 0)
39545
+ args.take = Number(opts.take);
39546
+ if (opts.skip !== void 0)
39547
+ args.skip = Number(opts.skip);
39548
+ await ctx.execute({
39549
+ method: "GET",
39550
+ path: "/v1/ai-billing/plans",
39551
+ args,
39552
+ queryParamKeys: ["mode", "take", "skip"]
39553
+ });
39554
+ });
39555
+ resource.command("create-agent-plan").description(`Create an AI agent billing plan: name, billing mode (wallet/credits/windows), rate card reference, allowance windows, markups, per-seat credit grants and overage stance. Past-limit usage is priced EITHER by overage_markup_percent over the base rates OR by overage_rate_card_id, a currency rate card whose own rates are the overage price \u2014 never both. Metered overage mints the plan's invoice container.`).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.
39556
+
39557
+ - refuse: Rejects the call that crosses the boundary without deducting usage.
39558
+ - 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.
39559
+
39560
+ - calendar_month: Settles at the end of each UTC calendar month.`).requiredOption("--mode <value>", `Billing mode.
39561
+
39562
+ - wallet: Charges a monetary wallet.
39563
+ - credits: Consumes a credit balance.
39564
+ - windows: Meters weighted units against rolling allowances.`).addHelpText("after", `
39565
+ Examples:
39566
+ hyperline ai-billing create-agent-plan --name <name> --mode <mode>
39567
+ hyperline ai-billing create-agent-plan --name <name> --mode <mode> --rate-card-id <rate_card_id> --overage-mode <overage_mode>
39568
+ hyperline ai-billing create-agent-plan --name <name> --mode <mode> --output json`).action(async (opts) => {
39569
+ const ctx = resource.parent?.opts()._ctx;
39570
+ if (!ctx) {
39571
+ process.stderr.write("Error: Not authenticated\n");
39572
+ process.exit(1);
39573
+ }
39574
+ const args = {};
39575
+ if (opts.name !== void 0)
39576
+ args.name = opts.name;
39577
+ if (opts.rateCardId !== void 0)
39578
+ args.rate_card_id = opts.rateCardId;
39579
+ if (opts.overageMode !== void 0)
39580
+ args.overage_mode = opts.overageMode;
39581
+ if (opts.markupPercent !== void 0)
39582
+ args.markup_percent = opts.markupPercent;
39583
+ if (opts.overageMarkupPercent !== void 0)
39584
+ args.overage_markup_percent = opts.overageMarkupPercent;
39585
+ if (opts.overageRateCardId !== void 0)
39586
+ args.overage_rate_card_id = opts.overageRateCardId;
39587
+ if (opts.perSeatCredits !== void 0)
39588
+ args.per_seat_credits = opts.perSeatCredits;
39589
+ if (opts.settlementSchedule !== void 0)
39590
+ args.settlement_schedule = opts.settlementSchedule;
39591
+ if (opts.mode !== void 0)
39592
+ args.mode = opts.mode;
39593
+ if (opts.settlementIntervalMinutes !== void 0)
39594
+ args.settlement_interval_minutes = Number(opts.settlementIntervalMinutes);
39595
+ if (opts.grantRolloverEnabled !== void 0)
39596
+ args.grant_rollover_enabled = true;
39597
+ if (opts.windows !== void 0)
39598
+ args.windows = JSON.parse(opts.windows);
39599
+ await ctx.execute({
39600
+ method: "POST",
39601
+ path: "/v1/ai-billing/plans",
39602
+ args,
39603
+ queryParamKeys: []
39604
+ });
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", `
39607
+ Examples:
39608
+ hyperline ai-billing get-agent-plan --plan-id <plan_id>`).action(async (opts) => {
39609
+ const ctx = resource.parent?.opts()._ctx;
39610
+ if (!ctx) {
39611
+ process.stderr.write("Error: Not authenticated\n");
39612
+ process.exit(1);
39613
+ }
39614
+ const args = {};
39615
+ if (opts.planId !== void 0)
39616
+ args.plan_id = opts.planId;
39617
+ await ctx.execute({
39618
+ method: "GET",
39619
+ path: "/v1/ai-billing/plans/{plan_id}",
39620
+ args,
39621
+ queryParamKeys: []
39622
+ });
39623
+ });
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", `
39630
+ 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) => {
39634
+ const ctx = resource.parent?.opts()._ctx;
39635
+ if (!ctx) {
39636
+ process.stderr.write("Error: Not authenticated\n");
39637
+ process.exit(1);
39638
+ }
39639
+ const args = {};
39640
+ if (opts.planId !== void 0)
39641
+ 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);
39664
+ await ctx.execute({
39665
+ method: "PUT",
39666
+ path: "/v1/ai-billing/plans/{plan_id}",
39667
+ args,
39668
+ queryParamKeys: []
39669
+ });
39670
+ });
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", `
39672
+ 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) => {
39675
+ const ctx = resource.parent?.opts()._ctx;
39676
+ if (!ctx) {
39677
+ process.stderr.write("Error: Not authenticated\n");
39678
+ process.exit(1);
39679
+ }
39680
+ const args = {};
39681
+ if (opts.planId !== void 0)
39682
+ args.plan_id = opts.planId;
39683
+ if (!opts.yes) {
39684
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
39685
+ if (!confirmed) {
39686
+ process.stdout.write("Aborted.\n");
39687
+ return;
39688
+ }
39689
+ }
39690
+ await ctx.execute({
39691
+ method: "DELETE",
39692
+ path: "/v1/ai-billing/plans/{plan_id}",
39693
+ args,
39694
+ queryParamKeys: []
39695
+ });
39696
+ });
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", `
39698
+ Examples:
39699
+ hyperline ai-billing get-agent-default-plan`).action(async (_opts) => {
39700
+ const ctx = resource.parent?.opts()._ctx;
39701
+ if (!ctx) {
39702
+ process.stderr.write("Error: Not authenticated\n");
39703
+ process.exit(1);
39704
+ }
39705
+ const args = {};
39706
+ await ctx.execute({
39707
+ method: "GET",
39708
+ path: "/v1/ai-billing/default-plan",
39709
+ args,
39710
+ queryParamKeys: []
39711
+ });
39712
+ });
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", `
39714
+ 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) => {
39718
+ const ctx = resource.parent?.opts()._ctx;
39719
+ if (!ctx) {
39720
+ process.stderr.write("Error: Not authenticated\n");
39721
+ process.exit(1);
39722
+ }
39723
+ 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;
39728
+ await ctx.execute({
39729
+ method: "PUT",
39730
+ path: "/v1/ai-billing/default-plan",
39731
+ args,
39732
+ queryParamKeys: []
39733
+ });
39734
+ });
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", `
39736
+ Examples:
39737
+ hyperline ai-billing clear-agent-default-plan
39738
+ hyperline ai-billing clear-agent-default-plan --output json`).action(async (opts) => {
39739
+ const ctx = resource.parent?.opts()._ctx;
39740
+ if (!ctx) {
39741
+ process.stderr.write("Error: Not authenticated\n");
39742
+ process.exit(1);
39743
+ }
39744
+ const args = {};
39745
+ if (!opts.yes) {
39746
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
39747
+ if (!confirmed) {
39748
+ process.stdout.write("Aborted.\n");
39749
+ return;
39750
+ }
39751
+ }
39752
+ await ctx.execute({
39753
+ method: "DELETE",
39754
+ path: "/v1/ai-billing/default-plan",
39755
+ args,
39756
+ queryParamKeys: []
39757
+ });
39758
+ });
39759
+ resource.command("list-agent-rate-cards").description(`List AI rate cards: named pricing row sets in credits, window units or currency. Shows what plans/policies/products depend on each. Filter by denomination, currency or name search; paginated with take/skip.`).option("--denomination <value>", `Unit in which rate-card prices are expressed.
39760
+
39761
+ - credits: Credit counts.
39762
+ - units: Weighted rolling-allowance units.
39763
+ - currency: Major units of the specified currency.`).option("--currency <value>", `Currency code. See [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217#List_of_ISO_4217_currency_codes).`).option("--search <value>", `search`).option("--take <number>", `take`).option("--skip <number>", `skip`).addHelpText("after", `
39764
+ Examples:
39765
+ hyperline ai-billing list-agent-rate-cards
39766
+ hyperline ai-billing list-agent-rate-cards --denomination <denomination> --currency <currency>`).action(async (opts) => {
39767
+ const ctx = resource.parent?.opts()._ctx;
39768
+ if (!ctx) {
39769
+ process.stderr.write("Error: Not authenticated\n");
39770
+ process.exit(1);
39771
+ }
39772
+ const args = {};
39773
+ if (opts.denomination !== void 0)
39774
+ args.denomination = opts.denomination;
39775
+ if (opts.currency !== void 0)
39776
+ args.currency = opts.currency;
39777
+ if (opts.search !== void 0)
39778
+ args.search = opts.search;
39779
+ if (opts.take !== void 0)
39780
+ args.take = Number(opts.take);
39781
+ if (opts.skip !== void 0)
39782
+ args.skip = Number(opts.skip);
39783
+ await ctx.execute({
39784
+ method: "GET",
39785
+ path: "/v1/ai-billing/rate-cards",
39493
39786
  args,
39494
39787
  queryParamKeys: ["denomination", "currency", "search", "take", "skip"]
39495
39788
  });
@@ -39500,9 +39793,9 @@ Examples:
39500
39793
  - units: Weighted rolling-allowance units.
39501
39794
  - currency: Major units of the specified currency.`).option("--currency <value>", `ISO 4217 currency code for monetary values. Null for counts or historical amounts without recorded currency.`).addHelpText("after", `
39502
39795
  Examples:
39503
- hyperline agents create-agent-rate-card --name <name> --rows <rows> --denomination <denomination>
39504
- hyperline agents create-agent-rate-card --name <name> --rows <rows> --denomination <denomination> --fallback-per-usd <fallback_per_usd> --currency <currency>
39505
- hyperline agents create-agent-rate-card --name <name> --rows <rows> --denomination <denomination> --output json`).action(async (opts) => {
39796
+ hyperline ai-billing create-agent-rate-card --name <name> --rows <rows> --denomination <denomination>
39797
+ hyperline ai-billing create-agent-rate-card --name <name> --rows <rows> --denomination <denomination> --fallback-per-usd <fallback_per_usd> --currency <currency>
39798
+ hyperline ai-billing create-agent-rate-card --name <name> --rows <rows> --denomination <denomination> --output json`).action(async (opts) => {
39506
39799
  const ctx = resource.parent?.opts()._ctx;
39507
39800
  if (!ctx) {
39508
39801
  process.stderr.write("Error: Not authenticated\n");
@@ -39521,14 +39814,14 @@ Examples:
39521
39814
  args.rows = JSON.parse(opts.rows);
39522
39815
  await ctx.execute({
39523
39816
  method: "POST",
39524
- path: "/v1/agents/rate-cards",
39817
+ path: "/v1/ai-billing/rate-cards",
39525
39818
  args,
39526
39819
  queryParamKeys: []
39527
39820
  });
39528
39821
  });
39529
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", `
39530
39823
  Examples:
39531
- hyperline agents get-agent-rate-card --rate-card-id <rate_card_id>`).action(async (opts) => {
39824
+ hyperline ai-billing get-agent-rate-card --rate-card-id <rate_card_id>`).action(async (opts) => {
39532
39825
  const ctx = resource.parent?.opts()._ctx;
39533
39826
  if (!ctx) {
39534
39827
  process.stderr.write("Error: Not authenticated\n");
@@ -39539,16 +39832,16 @@ Examples:
39539
39832
  args.rate_card_id = opts.rateCardId;
39540
39833
  await ctx.execute({
39541
39834
  method: "GET",
39542
- path: "/v1/agents/rate-cards/{rate_card_id}",
39835
+ path: "/v1/ai-billing/rate-cards/{rate_card_id}",
39543
39836
  args,
39544
39837
  queryParamKeys: []
39545
39838
  });
39546
39839
  });
39547
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", `
39548
39841
  Examples:
39549
- hyperline agents replace-agent-rate-card --rate-card-id <rate_card_id> --name <name> --rows <rows>
39550
- hyperline agents replace-agent-rate-card --rate-card-id <rate_card_id> --name <name> --rows <rows> --fallback-per-usd <fallback_per_usd>
39551
- hyperline agents 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 --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) => {
39552
39845
  const ctx = resource.parent?.opts()._ctx;
39553
39846
  if (!ctx) {
39554
39847
  process.stderr.write("Error: Not authenticated\n");
@@ -39565,15 +39858,15 @@ Examples:
39565
39858
  args.rows = JSON.parse(opts.rows);
39566
39859
  await ctx.execute({
39567
39860
  method: "PUT",
39568
- path: "/v1/agents/rate-cards/{rate_card_id}",
39861
+ path: "/v1/ai-billing/rate-cards/{rate_card_id}",
39569
39862
  args,
39570
39863
  queryParamKeys: []
39571
39864
  });
39572
39865
  });
39573
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", `
39574
39867
  Examples:
39575
- hyperline agents delete-agent-rate-card --rate-card-id <rate_card_id>
39576
- hyperline agents delete-agent-rate-card --rate-card-id <rate_card_id> --output json`).action(async (opts) => {
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) => {
39577
39870
  const ctx = resource.parent?.opts()._ctx;
39578
39871
  if (!ctx) {
39579
39872
  process.stderr.write("Error: Not authenticated\n");
@@ -39591,14 +39884,14 @@ Examples:
39591
39884
  }
39592
39885
  await ctx.execute({
39593
39886
  method: "DELETE",
39594
- path: "/v1/agents/rate-cards/{rate_card_id}",
39887
+ path: "/v1/ai-billing/rate-cards/{rate_card_id}",
39595
39888
  args,
39596
39889
  queryParamKeys: []
39597
39890
  });
39598
39891
  });
39599
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", `
39600
39893
  Examples:
39601
- hyperline agents list-agent-credit-products`).action(async (_opts) => {
39894
+ hyperline ai-billing list-agent-credit-products`).action(async (_opts) => {
39602
39895
  const ctx = resource.parent?.opts()._ctx;
39603
39896
  if (!ctx) {
39604
39897
  process.stderr.write("Error: Not authenticated\n");
@@ -39607,15 +39900,15 @@ Examples:
39607
39900
  const args = {};
39608
39901
  await ctx.execute({
39609
39902
  method: "GET",
39610
- path: "/v1/agents/credit-products",
39903
+ path: "/v1/ai-billing/credit-products",
39611
39904
  args,
39612
39905
  queryParamKeys: []
39613
39906
  });
39614
39907
  });
39615
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", `
39616
39909
  Examples:
39617
- hyperline agents list-agent-cost-catalog
39618
- hyperline agents list-agent-cost-catalog --enabled-only <enabled_only>`).action(async (opts) => {
39910
+ hyperline ai-billing list-agent-cost-catalog
39911
+ hyperline ai-billing list-agent-cost-catalog --enabled-only <enabled_only>`).action(async (opts) => {
39619
39912
  const ctx = resource.parent?.opts()._ctx;
39620
39913
  if (!ctx) {
39621
39914
  process.stderr.write("Error: Not authenticated\n");
@@ -39626,15 +39919,15 @@ Examples:
39626
39919
  args.enabled_only = opts.enabledOnly;
39627
39920
  await ctx.execute({
39628
39921
  method: "GET",
39629
- path: "/v1/agents/cost-catalog",
39922
+ path: "/v1/ai-billing/cost-catalog",
39630
39923
  args,
39631
39924
  queryParamKeys: ["enabled_only"]
39632
39925
  });
39633
39926
  });
39634
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", `
39635
39928
  Examples:
39636
- hyperline agents create-agent-cost-catalog-item --provider <provider> --item <item> --dimensions <dimensions>
39637
- hyperline agents create-agent-cost-catalog-item --provider <provider> --item <item> --dimensions <dimensions> --output json`).action(async (opts) => {
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) => {
39638
39931
  const ctx = resource.parent?.opts()._ctx;
39639
39932
  if (!ctx) {
39640
39933
  process.stderr.write("Error: Not authenticated\n");
@@ -39649,15 +39942,15 @@ Examples:
39649
39942
  args.dimensions = JSON.parse(opts.dimensions);
39650
39943
  await ctx.execute({
39651
39944
  method: "POST",
39652
- path: "/v1/agents/cost-catalog/items",
39945
+ path: "/v1/ai-billing/cost-catalog/items",
39653
39946
  args,
39654
39947
  queryParamKeys: []
39655
39948
  });
39656
39949
  });
39657
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", `
39658
39951
  Examples:
39659
- hyperline agents delete-agent-cost-catalog-item --item-id <item_id>
39660
- hyperline agents delete-agent-cost-catalog-item --item-id <item_id> --output json`).action(async (opts) => {
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) => {
39661
39954
  const ctx = resource.parent?.opts()._ctx;
39662
39955
  if (!ctx) {
39663
39956
  process.stderr.write("Error: Not authenticated\n");
@@ -39675,16 +39968,16 @@ Examples:
39675
39968
  }
39676
39969
  await ctx.execute({
39677
39970
  method: "DELETE",
39678
- path: "/v1/agents/cost-catalog/items/{item_id}",
39971
+ path: "/v1/ai-billing/cost-catalog/items/{item_id}",
39679
39972
  args,
39680
39973
  queryParamKeys: []
39681
39974
  });
39682
39975
  });
39683
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", `
39684
39977
  Examples:
39685
- hyperline agents 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>
39686
- hyperline agents 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>
39687
- hyperline agents 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) => {
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) => {
39688
39981
  const ctx = resource.parent?.opts()._ctx;
39689
39982
  if (!ctx) {
39690
39983
  process.stderr.write("Error: Not authenticated\n");
@@ -39707,15 +40000,15 @@ Examples:
39707
40000
  args.dimensions = JSON.parse(opts.dimensions);
39708
40001
  await ctx.execute({
39709
40002
  method: "PUT",
39710
- path: "/v1/agents/cost-catalog/overrides",
40003
+ path: "/v1/ai-billing/cost-catalog/overrides",
39711
40004
  args,
39712
40005
  queryParamKeys: []
39713
40006
  });
39714
40007
  });
39715
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", `
39716
40009
  Examples:
39717
- hyperline agents delete-agent-cost-catalog-override --override-id <override_id>
39718
- hyperline agents delete-agent-cost-catalog-override --override-id <override_id> --output json`).action(async (opts) => {
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) => {
39719
40012
  const ctx = resource.parent?.opts()._ctx;
39720
40013
  if (!ctx) {
39721
40014
  process.stderr.write("Error: Not authenticated\n");
@@ -39733,14 +40026,14 @@ Examples:
39733
40026
  }
39734
40027
  await ctx.execute({
39735
40028
  method: "DELETE",
39736
- path: "/v1/agents/cost-catalog/overrides/{override_id}",
40029
+ path: "/v1/ai-billing/cost-catalog/overrides/{override_id}",
39737
40030
  args,
39738
40031
  queryParamKeys: []
39739
40032
  });
39740
40033
  });
39741
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", `
39742
40035
  Examples:
39743
- hyperline agents list-agent-customer-policies --customer-id <customer_id>`).action(async (opts) => {
40036
+ hyperline ai-billing list-agent-customer-policies --customer-id <customer_id>`).action(async (opts) => {
39744
40037
  const ctx = resource.parent?.opts()._ctx;
39745
40038
  if (!ctx) {
39746
40039
  process.stderr.write("Error: Not authenticated\n");
@@ -39751,15 +40044,15 @@ Examples:
39751
40044
  args.customer_id = opts.customerId;
39752
40045
  await ctx.execute({
39753
40046
  method: "GET",
39754
- path: "/v1/agents/customers/{customer_id}/policies",
40047
+ path: "/v1/ai-billing/customers/{customer_id}/policies",
39755
40048
  args,
39756
40049
  queryParamKeys: []
39757
40050
  });
39758
40051
  });
39759
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", `
39760
40053
  Examples:
39761
- hyperline agents get-agent-customer-policy --customer-id <customer_id>
39762
- hyperline agents get-agent-customer-policy --customer-id <customer_id> --agent <agent>`).action(async (opts) => {
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) => {
39763
40056
  const ctx = resource.parent?.opts()._ctx;
39764
40057
  if (!ctx) {
39765
40058
  process.stderr.write("Error: Not authenticated\n");
@@ -39772,7 +40065,7 @@ Examples:
39772
40065
  args.agent = opts.agent;
39773
40066
  await ctx.execute({
39774
40067
  method: "GET",
39775
- path: "/v1/agents/customers/{customer_id}/policy",
40068
+ path: "/v1/ai-billing/customers/{customer_id}/policy",
39776
40069
  args,
39777
40070
  queryParamKeys: ["agent"]
39778
40071
  });
@@ -39788,9 +40081,9 @@ Examples:
39788
40081
 
39789
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", `
39790
40083
  Examples:
39791
- hyperline agents upsert-agent-customer-policy --customer-id <customer_id> --mode <mode> --blocked
39792
- hyperline agents upsert-agent-customer-policy --customer-id <customer_id> --mode <mode> --blocked --agent <agent> --wallet-id <wallet_id>
39793
- hyperline agents upsert-agent-customer-policy --customer-id <customer_id> --mode <mode> --blocked --output json`).action(async (opts) => {
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) => {
39794
40087
  const ctx = resource.parent?.opts()._ctx;
39795
40088
  if (!ctx) {
39796
40089
  process.stderr.write("Error: Not authenticated\n");
@@ -39835,16 +40128,16 @@ Examples:
39835
40128
  args.window_rates = JSON.parse(opts.windowRates);
39836
40129
  await ctx.execute({
39837
40130
  method: "PUT",
39838
- path: "/v1/agents/customers/{customer_id}/policy",
40131
+ path: "/v1/ai-billing/customers/{customer_id}/policy",
39839
40132
  args,
39840
40133
  queryParamKeys: ["agent"]
39841
40134
  });
39842
40135
  });
39843
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", `
39844
40137
  Examples:
39845
- hyperline agents delete-agent-customer-policy --customer-id <customer_id>
39846
- hyperline agents delete-agent-customer-policy --customer-id <customer_id> --agent <agent>
39847
- hyperline agents delete-agent-customer-policy --customer-id <customer_id> --output json`).action(async (opts) => {
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) => {
39848
40141
  const ctx = resource.parent?.opts()._ctx;
39849
40142
  if (!ctx) {
39850
40143
  process.stderr.write("Error: Not authenticated\n");
@@ -39864,15 +40157,15 @@ Examples:
39864
40157
  }
39865
40158
  await ctx.execute({
39866
40159
  method: "DELETE",
39867
- path: "/v1/agents/customers/{customer_id}/policy",
40160
+ path: "/v1/ai-billing/customers/{customer_id}/policy",
39868
40161
  args,
39869
40162
  queryParamKeys: ["agent"]
39870
40163
  });
39871
40164
  });
39872
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", `
39873
40166
  Examples:
39874
- hyperline agents apply-agent-default-plan --customer-id <customer_id>
39875
- hyperline agents apply-agent-default-plan --customer-id <customer_id> --output json`).action(async (opts) => {
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) => {
39876
40169
  const ctx = resource.parent?.opts()._ctx;
39877
40170
  if (!ctx) {
39878
40171
  process.stderr.write("Error: Not authenticated\n");
@@ -39883,15 +40176,15 @@ Examples:
39883
40176
  args.customer_id = opts.customerId;
39884
40177
  await ctx.execute({
39885
40178
  method: "POST",
39886
- path: "/v1/agents/customers/{customer_id}/apply-default-plan",
40179
+ path: "/v1/ai-billing/customers/{customer_id}/apply-default-plan",
39887
40180
  args,
39888
40181
  queryParamKeys: []
39889
40182
  });
39890
40183
  });
39891
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", `
39892
40185
  Examples:
39893
- hyperline agents get-agent-customer-balance --customer-id <customer_id>
39894
- hyperline agents get-agent-customer-balance --customer-id <customer_id> --agent <agent>`).action(async (opts) => {
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) => {
39895
40188
  const ctx = resource.parent?.opts()._ctx;
39896
40189
  if (!ctx) {
39897
40190
  process.stderr.write("Error: Not authenticated\n");
@@ -39904,16 +40197,16 @@ Examples:
39904
40197
  args.agent = opts.agent;
39905
40198
  await ctx.execute({
39906
40199
  method: "GET",
39907
- path: "/v1/agents/customers/{customer_id}/balance",
40200
+ path: "/v1/ai-billing/customers/{customer_id}/balance",
39908
40201
  args,
39909
40202
  queryParamKeys: ["agent"]
39910
40203
  });
39911
40204
  });
39912
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", `
39913
40206
  Examples:
39914
- hyperline agents reset-agent-customer-windows --customer-id <customer_id>
39915
- hyperline agents reset-agent-customer-windows --customer-id <customer_id> --agent <agent>
39916
- hyperline agents reset-agent-customer-windows --customer-id <customer_id> --output json`).action(async (opts) => {
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) => {
39917
40210
  const ctx = resource.parent?.opts()._ctx;
39918
40211
  if (!ctx) {
39919
40212
  process.stderr.write("Error: Not authenticated\n");
@@ -39926,15 +40219,15 @@ Examples:
39926
40219
  args.agent = opts.agent;
39927
40220
  await ctx.execute({
39928
40221
  method: "POST",
39929
- path: "/v1/agents/customers/{customer_id}/windows/reset",
40222
+ path: "/v1/ai-billing/customers/{customer_id}/windows/reset",
39930
40223
  args,
39931
40224
  queryParamKeys: ["agent"]
39932
40225
  });
39933
40226
  });
39934
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", `
39935
40228
  Examples:
39936
- hyperline agents list-agent-customer-consumption --customer-id <customer_id>
39937
- hyperline agents list-agent-customer-consumption --customer-id <customer_id> --agent <agent> --overage <overage>`).action(async (opts) => {
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) => {
39938
40231
  const ctx = resource.parent?.opts()._ctx;
39939
40232
  if (!ctx) {
39940
40233
  process.stderr.write("Error: Not authenticated\n");
@@ -39957,320 +40250,27 @@ Examples:
39957
40250
  args.skip = Number(opts.skip);
39958
40251
  await ctx.execute({
39959
40252
  method: "GET",
39960
- path: "/v1/agents/customers/{customer_id}/consumption",
40253
+ path: "/v1/ai-billing/customers/{customer_id}/consumption",
39961
40254
  args,
39962
40255
  queryParamKeys: ["agent", "overage", "from", "to", "take", "skip"]
39963
40256
  });
39964
40257
  });
39965
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", `
39966
40259
  Examples:
39967
- hyperline agents get-agent-customer-overview --customer-id <customer_id>`).action(async (opts) => {
39968
- const ctx = resource.parent?.opts()._ctx;
39969
- if (!ctx) {
39970
- process.stderr.write("Error: Not authenticated\n");
39971
- process.exit(1);
39972
- }
39973
- const args = {};
39974
- if (opts.customerId !== void 0)
39975
- args.customer_id = opts.customerId;
39976
- await ctx.execute({
39977
- method: "GET",
39978
- path: "/v1/agents/customers/{customer_id}/overview",
39979
- args,
39980
- queryParamKeys: []
39981
- });
39982
- });
39983
- }
39984
-
39985
- // build/commands/generated/aggregators.js
39986
- function registerAggregatorsCommands(parent) {
39987
- const resource = parent.command("aggregators").description("Manage aggregators");
39988
- resource.command("list").description(`List all aggregators with pagination. Aggregators define how billable events are counted or summed to compute usage.`).option("--take <number>", `take`).option("--skip <number>", `skip`).addHelpText("after", `
39989
- Examples:
39990
- hyperline aggregators list
39991
- hyperline aggregators list --take <take>`).action(async (opts) => {
39992
- const ctx = resource.parent?.opts()._ctx;
39993
- if (!ctx) {
39994
- process.stderr.write("Error: Not authenticated\n");
39995
- process.exit(1);
39996
- }
39997
- const args = {};
39998
- if (opts.take !== void 0)
39999
- args.take = Number(opts.take);
40000
- if (opts.skip !== void 0)
40001
- args.skip = Number(opts.skip);
40002
- await ctx.execute({
40003
- method: "GET",
40004
- path: "/v1/aggregators",
40005
- args,
40006
- queryParamKeys: ["take", "skip"]
40007
- });
40008
- });
40009
- resource.command("create").description(`Create a new aggregator that counts or sums billable events. Aggregators can then be linked to products via aggregator_id.`).requiredOption("--entity <value>", `The billable event entity to aggregate.`).option("--type <value>", `The type of aggregator.`).option("--where <json>", `Filter conditions for the aggregation.`).option("--name <value>", `Name of the aggregator.`).option("--description <value>", `Description of the aggregator.`).option("--allow-negative-values", `Whether the aggregator can produce negative values.`).option("--aggregate-on-customers-enabled", `Whether the aggregator should aggregate on customers.`).option("--custom-event-name <value>", `Custom event name for the aggregator.`).option("--exposed-event-keys <json>", `Event keys exposed by the aggregator.`).option("--unit-name <value>", `Display name of the unit being measured (e.g. 'user', 'request'). Used as fallback for products attached to this aggregator.`).option("--default-interval-count <number>", `Default interval count for usage periods.`).option("--default-interval-period <value>", `Default interval period for usage periods.`).option("--thresholds <json>", `Thresholds for the aggregator.`).requiredOption("--operation <value>", `The aggregation operation to perform.`).option("--property <value>", `The property to sum.`).addHelpText("after", `
40010
- Examples:
40011
- hyperline aggregators create --entity <entity> --operation <operation>
40012
- hyperline aggregators create --entity <entity> --operation <operation> --type <type> --where <where>
40013
- hyperline aggregators create --entity <entity> --operation <operation> --output json`).action(async (opts) => {
40014
- const ctx = resource.parent?.opts()._ctx;
40015
- if (!ctx) {
40016
- process.stderr.write("Error: Not authenticated\n");
40017
- process.exit(1);
40018
- }
40019
- const args = {};
40020
- if (opts.entity !== void 0)
40021
- args.entity = opts.entity;
40022
- if (opts.type !== void 0)
40023
- args.type = opts.type;
40024
- if (opts.name !== void 0)
40025
- args.name = opts.name;
40026
- if (opts.description !== void 0)
40027
- args.description = opts.description;
40028
- if (opts.customEventName !== void 0)
40029
- args.custom_event_name = opts.customEventName;
40030
- if (opts.unitName !== void 0)
40031
- args.unit_name = opts.unitName;
40032
- if (opts.defaultIntervalPeriod !== void 0)
40033
- args.default_interval_period = opts.defaultIntervalPeriod;
40034
- if (opts.operation !== void 0)
40035
- args.operation = opts.operation;
40036
- if (opts.property !== void 0)
40037
- args.property = opts.property;
40038
- if (opts.defaultIntervalCount !== void 0)
40039
- args.default_interval_count = Number(opts.defaultIntervalCount);
40040
- if (opts.allowNegativeValues !== void 0)
40041
- args.allow_negative_values = true;
40042
- if (opts.aggregateOnCustomersEnabled !== void 0)
40043
- args.aggregate_on_customers_enabled = true;
40044
- if (opts.where !== void 0)
40045
- args.where = JSON.parse(opts.where);
40046
- if (opts.exposedEventKeys !== void 0)
40047
- args.exposed_event_keys = JSON.parse(opts.exposedEventKeys);
40048
- if (opts.thresholds !== void 0)
40049
- args.thresholds = JSON.parse(opts.thresholds);
40050
- await ctx.execute({
40051
- method: "POST",
40052
- path: "/v1/aggregators",
40053
- args,
40054
- queryParamKeys: []
40055
- });
40056
- });
40057
- resource.command("get").description(`Retrieve a specific aggregator by ID.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
40058
- Examples:
40059
- hyperline aggregators get --id <id>`).action(async (opts) => {
40060
- const ctx = resource.parent?.opts()._ctx;
40061
- if (!ctx) {
40062
- process.stderr.write("Error: Not authenticated\n");
40063
- process.exit(1);
40064
- }
40065
- const args = {};
40066
- if (opts.id !== void 0)
40067
- args.id = opts.id;
40068
- await ctx.execute({
40069
- method: "GET",
40070
- path: "/v1/aggregators/{id}",
40071
- args,
40072
- queryParamKeys: []
40073
- });
40074
- });
40075
- resource.command("update").description(`Update an existing aggregator's configuration.`).requiredOption("--id <value>", `id parameter`).option("--entity <value>", `The billable event entity to aggregate.`).option("--type <value>", `The type of aggregator.`).option("--where <json>", `Filter conditions for the aggregation.`).option("--name <value>", `Name of the aggregator.`).option("--description <value>", `Description of the aggregator.`).option("--allow-negative-values", `Whether the aggregator can produce negative values.`).option("--aggregate-on-customers-enabled", `Whether the aggregator should aggregate on customers.`).option("--custom-event-name <value>", `Custom event name for the aggregator.`).option("--exposed-event-keys <json>", `Event keys exposed by the aggregator.`).option("--unit-name <value>", `Display name of the unit being measured (e.g. 'user', 'request'). Used as fallback for products attached to this aggregator.`).option("--default-interval-count <number>", `Default interval count for usage periods.`).option("--default-interval-period <value>", `Default interval period for usage periods.`).option("--thresholds <json>", `Thresholds for the aggregator. Replaces existing thresholds.`).option("--operation <value>", `The aggregation operation to perform.`).option("--property <value>", `The property to sum. Required when operation is 'sum'.`).addHelpText("after", `
40076
- Examples:
40077
- hyperline aggregators update --id <id>
40078
- hyperline aggregators update --id <id> --entity <entity> --type <type>
40079
- hyperline aggregators update --id <id> --output json`).action(async (opts) => {
40080
- const ctx = resource.parent?.opts()._ctx;
40081
- if (!ctx) {
40082
- process.stderr.write("Error: Not authenticated\n");
40083
- process.exit(1);
40084
- }
40085
- const args = {};
40086
- if (opts.id !== void 0)
40087
- args.id = opts.id;
40088
- if (opts.entity !== void 0)
40089
- args.entity = opts.entity;
40090
- if (opts.type !== void 0)
40091
- args.type = opts.type;
40092
- if (opts.name !== void 0)
40093
- args.name = opts.name;
40094
- if (opts.description !== void 0)
40095
- args.description = opts.description;
40096
- if (opts.customEventName !== void 0)
40097
- args.custom_event_name = opts.customEventName;
40098
- if (opts.unitName !== void 0)
40099
- args.unit_name = opts.unitName;
40100
- if (opts.defaultIntervalPeriod !== void 0)
40101
- args.default_interval_period = opts.defaultIntervalPeriod;
40102
- if (opts.operation !== void 0)
40103
- args.operation = opts.operation;
40104
- if (opts.property !== void 0)
40105
- args.property = opts.property;
40106
- if (opts.defaultIntervalCount !== void 0)
40107
- args.default_interval_count = Number(opts.defaultIntervalCount);
40108
- if (opts.allowNegativeValues !== void 0)
40109
- args.allow_negative_values = true;
40110
- if (opts.aggregateOnCustomersEnabled !== void 0)
40111
- args.aggregate_on_customers_enabled = true;
40112
- if (opts.where !== void 0)
40113
- args.where = JSON.parse(opts.where);
40114
- if (opts.exposedEventKeys !== void 0)
40115
- args.exposed_event_keys = JSON.parse(opts.exposedEventKeys);
40116
- if (opts.thresholds !== void 0)
40117
- args.thresholds = JSON.parse(opts.thresholds);
40118
- await ctx.execute({
40119
- method: "PUT",
40120
- path: "/v1/aggregators/{id}",
40121
- args,
40122
- queryParamKeys: []
40123
- });
40124
- });
40125
- resource.command("delete").description(`Delete an aggregator by ID. Will fail if the aggregator is linked to a product.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
40126
- Examples:
40127
- hyperline aggregators delete --id <id>
40128
- hyperline aggregators delete --id <id> --output json`).action(async (opts) => {
40129
- const ctx = resource.parent?.opts()._ctx;
40130
- if (!ctx) {
40131
- process.stderr.write("Error: Not authenticated\n");
40132
- process.exit(1);
40133
- }
40134
- const args = {};
40135
- if (opts.id !== void 0)
40136
- args.id = opts.id;
40137
- if (!opts.yes) {
40138
- const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
40139
- if (!confirmed) {
40140
- process.stdout.write("Aborted.\n");
40141
- return;
40142
- }
40143
- }
40144
- await ctx.execute({
40145
- method: "DELETE",
40146
- path: "/v1/aggregators/{id}",
40147
- args,
40148
- queryParamKeys: []
40149
- });
40150
- });
40151
- }
40152
-
40153
- // build/commands/generated/aggregators-usage.js
40154
- function registerAggregators_UsageCommands(parent) {
40155
- const resource = parent.command("aggregators-usage").description("Manage aggregators > usage");
40156
- resource.command("get-aggregator-usage").description(`Retrieve a usage row for an aggregator. Use the timeseries, group-by-customer or events endpoints to query metering data.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
40157
- Examples:
40158
- hyperline aggregators-usage get-aggregator-usage --id <id>`).action(async (opts) => {
40159
- const ctx = resource.parent?.opts()._ctx;
40160
- if (!ctx) {
40161
- process.stderr.write("Error: Not authenticated\n");
40162
- process.exit(1);
40163
- }
40164
- const args = {};
40165
- if (opts.id !== void 0)
40166
- args.id = opts.id;
40167
- await ctx.execute({
40168
- method: "GET",
40169
- path: "/v1/aggregators/{id}/usage",
40170
- args,
40171
- queryParamKeys: []
40172
- });
40173
- });
40174
- resource.command("get-aggregator-usage-timeseries").description(`Get client-wide usage for an aggregator bucketed by month/day/hour over a period.`).requiredOption("--id <value>", `id parameter`).option("--start-date <value>", `ISO-8601 date string.`).option("--end-date <value>", `ISO-8601 date string.`).option("--aggregator-filter-id <value>", `Optional aggregator filter ID. When set, restricts the result to events matching that filter's config. Must belong to the aggregator in the path.`).option("--group-by <value>", `Bucket size for the timeseries.`).addHelpText("after", `
40175
- Examples:
40176
- hyperline aggregators-usage get-aggregator-usage-timeseries --id <id>
40177
- hyperline aggregators-usage get-aggregator-usage-timeseries --id <id> --start-date <start_date> --end-date <end_date>`).action(async (opts) => {
40178
- const ctx = resource.parent?.opts()._ctx;
40179
- if (!ctx) {
40180
- process.stderr.write("Error: Not authenticated\n");
40181
- process.exit(1);
40182
- }
40183
- const args = {};
40184
- if (opts.id !== void 0)
40185
- args.id = opts.id;
40186
- if (opts.startDate !== void 0)
40187
- args.start_date = opts.startDate;
40188
- if (opts.endDate !== void 0)
40189
- args.end_date = opts.endDate;
40190
- if (opts.aggregatorFilterId !== void 0)
40191
- args.aggregator_filter_id = opts.aggregatorFilterId;
40192
- if (opts.groupBy !== void 0)
40193
- args.group_by = opts.groupBy;
40194
- await ctx.execute({
40195
- method: "GET",
40196
- path: "/v1/aggregators/{id}/usage/timeseries",
40197
- args,
40198
- queryParamKeys: [
40199
- "start_date",
40200
- "end_date",
40201
- "aggregator_filter_id",
40202
- "group_by"
40203
- ]
40204
- });
40205
- });
40206
- resource.command("get-aggregator-usage-group-by-customer").description(`Per-customer total usage for an aggregator over a period, ranked by total. Paginated with take/skip.`).requiredOption("--id <value>", `id parameter`).option("--start-date <value>", `ISO-8601 date string.`).option("--end-date <value>", `ISO-8601 date string.`).option("--aggregator-filter-id <value>", `Optional aggregator filter ID. When set, restricts the result to events matching that filter's config. Must belong to the aggregator in the path.`).option("--take <number>", `take`).option("--skip <number>", `skip`).addHelpText("after", `
40207
- Examples:
40208
- hyperline aggregators-usage get-aggregator-usage-group-by-customer --id <id>
40209
- hyperline aggregators-usage get-aggregator-usage-group-by-customer --id <id> --start-date <start_date> --end-date <end_date>`).action(async (opts) => {
40210
- const ctx = resource.parent?.opts()._ctx;
40211
- if (!ctx) {
40212
- process.stderr.write("Error: Not authenticated\n");
40213
- process.exit(1);
40214
- }
40215
- const args = {};
40216
- if (opts.id !== void 0)
40217
- args.id = opts.id;
40218
- if (opts.startDate !== void 0)
40219
- args.start_date = opts.startDate;
40220
- if (opts.endDate !== void 0)
40221
- args.end_date = opts.endDate;
40222
- if (opts.aggregatorFilterId !== void 0)
40223
- args.aggregator_filter_id = opts.aggregatorFilterId;
40224
- if (opts.take !== void 0)
40225
- args.take = Number(opts.take);
40226
- if (opts.skip !== void 0)
40227
- args.skip = Number(opts.skip);
40228
- await ctx.execute({
40229
- method: "GET",
40230
- path: "/v1/aggregators/{id}/usage/group-by-customer",
40231
- args,
40232
- queryParamKeys: [
40233
- "start_date",
40234
- "end_date",
40235
- "aggregator_filter_id",
40236
- "take",
40237
- "skip"
40238
- ]
40239
- });
40240
- });
40241
- resource.command("get-aggregator-usage-events").description(`List raw billable events for an aggregator across every customer of the client. Paginated with take/skip.`).requiredOption("--id <value>", `id parameter`).option("--start-date <value>", `ISO-8601 date string.`).option("--end-date <value>", `ISO-8601 date string.`).option("--aggregator-filter-id <value>", `Optional aggregator filter ID. When set, restricts the result to events matching that filter's config. Must belong to the aggregator in the path.`).option("--take <number>", `take`).option("--skip <number>", `skip`).addHelpText("after", `
40242
- Examples:
40243
- hyperline aggregators-usage get-aggregator-usage-events --id <id>
40244
- hyperline aggregators-usage get-aggregator-usage-events --id <id> --start-date <start_date> --end-date <end_date>`).action(async (opts) => {
40260
+ hyperline ai-billing get-agent-customer-overview --customer-id <customer_id>`).action(async (opts) => {
40245
40261
  const ctx = resource.parent?.opts()._ctx;
40246
40262
  if (!ctx) {
40247
40263
  process.stderr.write("Error: Not authenticated\n");
40248
40264
  process.exit(1);
40249
40265
  }
40250
40266
  const args = {};
40251
- if (opts.id !== void 0)
40252
- args.id = opts.id;
40253
- if (opts.startDate !== void 0)
40254
- args.start_date = opts.startDate;
40255
- if (opts.endDate !== void 0)
40256
- args.end_date = opts.endDate;
40257
- if (opts.aggregatorFilterId !== void 0)
40258
- args.aggregator_filter_id = opts.aggregatorFilterId;
40259
- if (opts.take !== void 0)
40260
- args.take = Number(opts.take);
40261
- if (opts.skip !== void 0)
40262
- args.skip = Number(opts.skip);
40267
+ if (opts.customerId !== void 0)
40268
+ args.customer_id = opts.customerId;
40263
40269
  await ctx.execute({
40264
40270
  method: "GET",
40265
- path: "/v1/aggregators/{id}/usage/events",
40271
+ path: "/v1/ai-billing/customers/{customer_id}/overview",
40266
40272
  args,
40267
- queryParamKeys: [
40268
- "start_date",
40269
- "end_date",
40270
- "aggregator_filter_id",
40271
- "take",
40272
- "skip"
40273
- ]
40273
+ queryParamKeys: []
40274
40274
  });
40275
40275
  });
40276
40276
  }
@@ -42027,6 +42027,54 @@ Examples:
42027
42027
  queryParamKeys: []
42028
42028
  });
42029
42029
  });
42030
+ 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", `
42031
+ Examples:
42032
+ hyperline customers-credits get-customer-credit-portal-settings --id <id> --product-id <productId>`).action(async (opts) => {
42033
+ const ctx = resource.parent?.opts()._ctx;
42034
+ if (!ctx) {
42035
+ process.stderr.write("Error: Not authenticated\n");
42036
+ process.exit(1);
42037
+ }
42038
+ const args = {};
42039
+ if (opts.id !== void 0)
42040
+ args.id = opts.id;
42041
+ if (opts.productId !== void 0)
42042
+ args.productId = opts.productId;
42043
+ await ctx.execute({
42044
+ method: "GET",
42045
+ path: "/v1/customers/{id}/credits/{productId}/portal-settings",
42046
+ args,
42047
+ queryParamKeys: []
42048
+ });
42049
+ });
42050
+ 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.`).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", `
42051
+ Examples:
42052
+ hyperline customers-credits update-customer-credit-portal-settings --id <id> --product-id <productId> --enabled
42053
+ 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>
42054
+ hyperline customers-credits update-customer-credit-portal-settings --id <id> --product-id <productId> --enabled --output json`).action(async (opts) => {
42055
+ const ctx = resource.parent?.opts()._ctx;
42056
+ if (!ctx) {
42057
+ process.stderr.write("Error: Not authenticated\n");
42058
+ process.exit(1);
42059
+ }
42060
+ const args = {};
42061
+ if (opts.id !== void 0)
42062
+ args.id = opts.id;
42063
+ if (opts.productId !== void 0)
42064
+ args.productId = opts.productId;
42065
+ if (opts.priceConfigurationId !== void 0)
42066
+ args.price_configuration_id = opts.priceConfigurationId;
42067
+ if (opts.enabled !== void 0)
42068
+ args.enabled = true;
42069
+ if (opts.customPriceConfiguration !== void 0)
42070
+ args.custom_price_configuration = JSON.parse(opts.customPriceConfiguration);
42071
+ await ctx.execute({
42072
+ method: "PUT",
42073
+ path: "/v1/customers/{id}/credits/{productId}/portal-settings",
42074
+ args,
42075
+ queryParamKeys: []
42076
+ });
42077
+ });
42030
42078
  }
42031
42079
 
42032
42080
  // build/commands/generated/customers-payment-methods.js
@@ -43950,6 +43998,44 @@ Examples:
43950
43998
  queryParamKeys: []
43951
43999
  });
43952
44000
  });
44001
+ 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", `
44002
+ Examples:
44003
+ hyperline price-configurations create --currency <currency> --billing-interval <billing_interval> --type <type> --prices <prices> --product-id <product_id>
44004
+ 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>
44005
+ hyperline price-configurations create --currency <currency> --billing-interval <billing_interval> --type <type> --prices <prices> --product-id <product_id> --output json`).action(async (opts) => {
44006
+ const ctx = resource.parent?.opts()._ctx;
44007
+ if (!ctx) {
44008
+ process.stderr.write("Error: Not authenticated\n");
44009
+ process.exit(1);
44010
+ }
44011
+ const args = {};
44012
+ if (opts.currency !== void 0)
44013
+ args.currency = opts.currency;
44014
+ if (opts.priceBookId !== void 0)
44015
+ args.price_book_id = opts.priceBookId;
44016
+ if (opts.type !== void 0)
44017
+ args.type = opts.type;
44018
+ if (opts.productId !== void 0)
44019
+ args.product_id = opts.productId;
44020
+ if (opts.allowOnPortal !== void 0)
44021
+ args.allow_on_portal = true;
44022
+ if (opts.countries !== void 0)
44023
+ args.countries = JSON.parse(opts.countries);
44024
+ if (opts.billingInterval !== void 0)
44025
+ args.billing_interval = JSON.parse(opts.billingInterval);
44026
+ if (opts.commitmentInterval !== void 0)
44027
+ args.commitment_interval = JSON.parse(opts.commitmentInterval);
44028
+ if (opts.prices !== void 0)
44029
+ args.prices = JSON.parse(opts.prices);
44030
+ if (opts.meteringFilter !== void 0)
44031
+ args.metering_filter = JSON.parse(opts.meteringFilter);
44032
+ await ctx.execute({
44033
+ method: "POST",
44034
+ path: "/v1/price-configurations",
44035
+ args,
44036
+ queryParamKeys: []
44037
+ });
44038
+ });
43953
44039
  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
44040
  Examples:
43955
44041
  hyperline price-configurations update-prices --id <id>
@@ -44148,7 +44234,7 @@ How the periodic credit allowance is granted for partial billing periods.
44148
44234
 
44149
44235
  - \`prorated\` (default): the granted credits are prorated to the elapsed period.
44150
44236
  - \`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", `
44237
+ `).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
44238
  Examples:
44153
44239
  hyperline products create --name <name> --type <type> --price-configurations <price_configurations>
44154
44240
  hyperline products create --name <name> --type <type> --price-configurations <price_configurations> --description <description> --description-display-interval-dates
@@ -44175,8 +44261,6 @@ Examples:
44175
44261
  args.credits_grant_mode = opts.creditsGrantMode;
44176
44262
  if (opts.creditsBalanceAutoCreationEnabled !== void 0)
44177
44263
  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
44264
  if (opts.displayMode !== void 0)
44181
44265
  args.display_mode = opts.displayMode;
44182
44266
  if (opts.lowCreditsThreshold !== void 0)
@@ -44707,6 +44791,25 @@ Examples:
44707
44791
  queryParamKeys: []
44708
44792
  });
44709
44793
  });
44794
+ resource.command("duplicate").description(`Create a draft duplicate of an existing quote, including its linked invoice or subscription configuration.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
44795
+ Examples:
44796
+ hyperline quotes duplicate --id <id>
44797
+ hyperline quotes duplicate --id <id> --output json`).action(async (opts) => {
44798
+ const ctx = resource.parent?.opts()._ctx;
44799
+ if (!ctx) {
44800
+ process.stderr.write("Error: Not authenticated\n");
44801
+ process.exit(1);
44802
+ }
44803
+ const args = {};
44804
+ if (opts.id !== void 0)
44805
+ args.id = opts.id;
44806
+ await ctx.execute({
44807
+ method: "POST",
44808
+ path: "/v1/quotes/{id}/duplicate",
44809
+ args,
44810
+ queryParamKeys: []
44811
+ });
44812
+ });
44710
44813
  resource.command("download").description(`Download the PDF of a quote. Supports locale parameter for localization.`).requiredOption("--id <value>", `id parameter`).option("--locale <value>", `Locale as a supported language code and an uppercase ISO 3166-1 alpha-2 country code, separated by a hyphen.`).addHelpText("after", `
44711
44814
  Examples:
44712
44815
  hyperline quotes download --id <id>
@@ -45100,9 +45203,10 @@ Examples:
45100
45203
  queryParamKeys: []
45101
45204
  });
45102
45205
  });
45103
- resource.command("reinstate").description(`Reinstate a subscription that is scheduled for cancellation, reverting it to active status.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
45206
+ 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 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. Defaults to now. 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.`).addHelpText("after", `
45104
45207
  Examples:
45105
45208
  hyperline subscriptions reinstate --id <id>
45209
+ hyperline subscriptions reinstate --id <id> --reactivate-at <reactivate_at> --invoicing-mode <invoicing_mode>
45106
45210
  hyperline subscriptions reinstate --id <id> --output json`).action(async (opts) => {
45107
45211
  const ctx = resource.parent?.opts()._ctx;
45108
45212
  if (!ctx) {
@@ -45112,6 +45216,12 @@ Examples:
45112
45216
  const args = {};
45113
45217
  if (opts.id !== void 0)
45114
45218
  args.id = opts.id;
45219
+ if (opts.reactivateAt !== void 0)
45220
+ args.reactivate_at = opts.reactivateAt;
45221
+ if (opts.invoicingMode !== void 0)
45222
+ args.invoicing_mode = opts.invoicingMode;
45223
+ if (opts.chargeLineItems !== void 0)
45224
+ args.charge_line_items = JSON.parse(opts.chargeLineItems);
45115
45225
  await ctx.execute({
45116
45226
  method: "POST",
45117
45227
  path: "/v1/subscriptions/{id}/reinstate",
@@ -45119,7 +45229,7 @@ Examples:
45119
45229
  queryParamKeys: []
45120
45230
  });
45121
45231
  });
45122
- resource.command("pause").description(`Pause a subscription. Billing stops while paused. Optionally specify a reactivate_at date for automatic resumption. If the subscription is already paused, updates (or clears) its reactivation date.`).requiredOption("--id <value>", `id parameter`).option("--reactivate-at <value>", `Date when the subscription will be automatically reactivated. Must be a future date. UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.`).addHelpText("after", `
45232
+ resource.command("pause").description(`Pause a subscription. Billing stops while paused. Optionally specify a reactivate_at date for automatic resumption. If the subscription is already paused, updates (or clears) its reactivation date.`).requiredOption("--id <value>", `id parameter`).option("--reactivate-at <value>", `Date when the subscription will be automatically reactivated. UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format. A date on or before the pause date resumes it at the next scheduled run.`).addHelpText("after", `
45123
45233
  Examples:
45124
45234
  hyperline subscriptions pause --id <id>
45125
45235
  hyperline subscriptions pause --id <id> --reactivate-at <reactivate_at>
@@ -45160,9 +45270,10 @@ Examples:
45160
45270
  queryParamKeys: []
45161
45271
  });
45162
45272
  });
45163
- resource.command("reactivate").description(`Resume a paused subscription, restarting billing from the current date.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
45273
+ 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", `
45164
45274
  Examples:
45165
45275
  hyperline subscriptions reactivate --id <id>
45276
+ hyperline subscriptions reactivate --id <id> --reactivate-at <reactivate_at> --invoicing-mode <invoicing_mode>
45166
45277
  hyperline subscriptions reactivate --id <id> --output json`).action(async (opts) => {
45167
45278
  const ctx = resource.parent?.opts()._ctx;
45168
45279
  if (!ctx) {
@@ -45172,6 +45283,12 @@ Examples:
45172
45283
  const args = {};
45173
45284
  if (opts.id !== void 0)
45174
45285
  args.id = opts.id;
45286
+ if (opts.reactivateAt !== void 0)
45287
+ args.reactivate_at = opts.reactivateAt;
45288
+ if (opts.invoicingMode !== void 0)
45289
+ args.invoicing_mode = opts.invoicingMode;
45290
+ if (opts.chargeLineItems !== void 0)
45291
+ args.charge_line_items = JSON.parse(opts.chargeLineItems);
45175
45292
  await ctx.execute({
45176
45293
  method: "POST",
45177
45294
  path: "/v1/subscriptions/{id}/reactivate",
@@ -46755,10 +46872,10 @@ function registerAllCommands(program2) {
46755
46872
  registerAccounting_ReportsCommands(program2);
46756
46873
  registerAccounting_Revenue_RecognitionCommands(program2);
46757
46874
  registerAccounting_RulesCommands(program2);
46758
- registerAgentsCommands(program2);
46759
46875
  registerCustom_PropertiesCommands(program2);
46760
46876
  registerAggregatorsCommands(program2);
46761
46877
  registerAggregators_UsageCommands(program2);
46878
+ registerAi_BillingCommands(program2);
46762
46879
  registerAnalyticsCommands(program2);
46763
46880
  registerBank_AccountsCommands(program2);
46764
46881
  registerCompaniesCommands(program2);
@@ -62792,17 +62909,17 @@ var languages = [
62792
62909
 
62793
62910
  // ../hyperline-i18n/build/locales/de.js
62794
62911
  var de = {
62795
- "accounting.invoicePosted.entryDescription": "Buchungseintrag f\xFCr Rechnung {{invoiceId}}",
62796
- "accounting.transactionSettled.entryDescription": "Zahlungsabwicklung f\xFCr Rechnung {{invoiceId}}",
62797
- "accounting.transactionRefunded.entryDescription": "R\xFCckerstattung f\xFCr Rechnung {{invoiceId}}",
62798
62912
  "accounting.creditNotePosted.entryDescription": "Gutschrift {{creditNoteId}} f\xFCr Rechnung {{invoiceId}}",
62799
- "accounting.standaloneCreditNotePosted.entryDescription": "Gutschrift {{creditNoteId}}",
62913
+ "accounting.invoicePosted.entryDescription": "Buchungseintrag f\xFCr Rechnung {{invoiceId}}",
62914
+ "accounting.revrec.closedPeriodFallbackNote": " (in die n\xE4chste offene Periode gebucht \u2013 Zielperiode geschlossen; urspr\xFCngliches Datum {{originalDate}})",
62800
62915
  "accounting.revrec.creditLineDescription": "Umsatz realisieren \u2013 Zeitplan {{scheduleId}}, Zeitraum {{periodDate}}",
62801
62916
  "accounting.revrec.debitLineDescription": "Abgrenzungsposten reduzieren \u2013 Zeitplan {{scheduleId}}, Zeitraum {{periodDate}}",
62802
62917
  "accounting.revrec.discountCreditLineDescription": "Erl\xF6sminderung (Rabatt) erfassen \u2013 Zeitplan {{scheduleId}}, Zeitraum {{periodDate}}",
62803
- "accounting.revrec.closedPeriodFallbackNote": " (in die n\xE4chste offene Periode gebucht \u2013 Zielperiode geschlossen; urspr\xFCngliches Datum {{originalDate}})",
62804
62918
  "accounting.revrec.discountDebitLineDescription": "Abgegrenzten Rabatt reduzieren \u2013 Zeitplan {{scheduleId}}, Zeitraum {{periodDate}}",
62805
62919
  "accounting.revrec.entryDescription": "Umsatzrealisierung f\xFCr Zeitplan {{scheduleId}}, Zeitraum {{periodStart}} - {{periodEnd}}",
62920
+ "accounting.standaloneCreditNotePosted.entryDescription": "Gutschrift {{creditNoteId}}",
62921
+ "accounting.transactionRefunded.entryDescription": "R\xFCckerstattung f\xFCr Rechnung {{invoiceId}}",
62922
+ "accounting.transactionSettled.entryDescription": "Zahlungsabwicklung f\xFCr Rechnung {{invoiceId}}",
62806
62923
  "creditNotes.refundChargeName": "R\xFCckerstattung f\xFCr die Rechnung",
62807
62924
  "credits.bundleOf": "{{productName}} - Paket mit {{creditCount}} Guthaben",
62808
62925
  "credits.unitsOf": "{{productName}} - {{creditCount}} Guthaben",
@@ -62816,9 +62933,9 @@ var de = {
62816
62933
  "invoices.prorata.paymentForItemFullPeriod": "Zahlung f\xFCr",
62817
62934
  "invoices.prorata.refundForItem": "Anteilig erstatteter Betrag f\xFCr",
62818
62935
  "invoices.prorata.refundForItemFullPeriod": "Erstattung f\xFCr",
62819
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 abgelaufenes Guthaben",
62820
62936
  "subscriptions.closingChargeName": "Abschlussgeb\xFChr f\xFCr das Abonnement",
62821
62937
  "subscriptions.correction": "Vorperiodische Anpassung",
62938
+ "subscriptions.reinstatementRechargeName": "Wiederherstellungsgeb\xFChr f\xFCr den stornierten Zeitraum",
62822
62939
  "subscriptions.updates.addCoupon": "Gutschein hinzuf\xFCgen {{couponName}}",
62823
62940
  "subscriptions.updates.addProduct": "{{productName}} hinzuf\xFCgen",
62824
62941
  "subscriptions.updates.removeCoupon": "Gutschein entfernen {{couponName}}",
@@ -62833,7 +62950,8 @@ var de = {
62833
62950
  "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",
62834
62951
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Diese Position wurde f\xFCr den anteiligen Zeitraum in Rechnung gestellt",
62835
62952
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Betrag von {{amount}} f\xFCr den anteiligen Zeitraum nicht in Rechnung gestellt",
62836
- "subscriptions.updates.updatePrices": "Preise f\xFCr {{productName}} aktualisieren"
62953
+ "subscriptions.updates.updatePrices": "Preise f\xFCr {{productName}} aktualisieren",
62954
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 abgelaufenes Guthaben"
62837
62955
  };
62838
62956
 
62839
62957
  // ../hyperline-i18n/build/locales/en.js
@@ -62850,6 +62968,7 @@ var en = {
62850
62968
  "invoices.prorata.refundForItemFullPeriod": "Refund for",
62851
62969
  "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 expired balance",
62852
62970
  "subscriptions.closingChargeName": "Closing fee for subscription",
62971
+ "subscriptions.reinstatementRechargeName": "Reinstatement recharge of canceled period",
62853
62972
  "subscriptions.correction": "Adjustment previous period",
62854
62973
  "subscriptions.updates.addCoupon": "Add coupon {{couponName}}",
62855
62974
  "subscriptions.updates.addProduct": "Add {{productName}}",
@@ -62884,17 +63003,17 @@ var en = {
62884
63003
 
62885
63004
  // ../hyperline-i18n/build/locales/es.js
62886
63005
  var es = {
62887
- "accounting.invoicePosted.entryDescription": "Asiento contable para la factura {{invoiceId}}",
62888
- "accounting.transactionSettled.entryDescription": "Liquidaci\xF3n de pago para la factura {{invoiceId}}",
62889
- "accounting.transactionRefunded.entryDescription": "Reembolso de la factura {{invoiceId}}",
62890
63006
  "accounting.creditNotePosted.entryDescription": "Nota de cr\xE9dito {{creditNoteId}} para la factura {{invoiceId}}",
62891
- "accounting.standaloneCreditNotePosted.entryDescription": "Nota de cr\xE9dito {{creditNoteId}}",
63007
+ "accounting.invoicePosted.entryDescription": "Asiento contable para la factura {{invoiceId}}",
63008
+ "accounting.revrec.closedPeriodFallbackNote": " (registrado en el pr\xF3ximo per\xEDodo abierto \u2014 per\xEDodo contable de destino cerrado; fecha original {{originalDate}})",
62892
63009
  "accounting.revrec.creditLineDescription": "Reconocer ingresos \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
62893
63010
  "accounting.revrec.debitLineDescription": "Disminuci\xF3n de ingresos diferidos \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
62894
63011
  "accounting.revrec.discountCreditLineDescription": "Reconocer contra-ingresos (descuento) \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
62895
- "accounting.revrec.closedPeriodFallbackNote": " (registrado en el pr\xF3ximo per\xEDodo abierto \u2014 per\xEDodo contable de destino cerrado; fecha original {{originalDate}})",
62896
63012
  "accounting.revrec.discountDebitLineDescription": "Disminuci\xF3n de descuento diferido \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
62897
63013
  "accounting.revrec.entryDescription": "Reconocimiento de ingresos para el cronograma {{scheduleId}}, per\xEDodo {{periodStart}} - {{periodEnd}}",
63014
+ "accounting.standaloneCreditNotePosted.entryDescription": "Nota de cr\xE9dito {{creditNoteId}}",
63015
+ "accounting.transactionRefunded.entryDescription": "Reembolso de la factura {{invoiceId}}",
63016
+ "accounting.transactionSettled.entryDescription": "Liquidaci\xF3n de pago para la factura {{invoiceId}}",
62898
63017
  "creditNotes.refundChargeName": "Reembolso por factura",
62899
63018
  "credits.bundleOf": "{{productName}} - Paquete de {{creditCount}} cr\xE9ditos",
62900
63019
  "credits.unitsOf": "{{productName}} - {{creditCount}} cr\xE9ditos",
@@ -62908,9 +63027,9 @@ var es = {
62908
63027
  "invoices.prorata.paymentForItemFullPeriod": "Pago por",
62909
63028
  "invoices.prorata.refundForItem": "Reembolso prorrateado por",
62910
63029
  "invoices.prorata.refundForItemFullPeriod": "Reembolso por",
62911
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo caducado",
62912
63030
  "subscriptions.closingChargeName": "Cargo por cierre de suscripci\xF3n",
62913
63031
  "subscriptions.correction": "Ajuste del periodo anterior",
63032
+ "subscriptions.reinstatementRechargeName": "Recarga de reinstalaci\xF3n del per\xEDodo cancelado",
62914
63033
  "subscriptions.updates.addCoupon": "A\xF1adir cup\xF3n {{couponName}}",
62915
63034
  "subscriptions.updates.addProduct": "A\xF1adir {{productName}}",
62916
63035
  "subscriptions.updates.removeCoupon": "Eliminar cup\xF3n {{couponName}}",
@@ -62925,22 +63044,23 @@ var es = {
62925
63044
  "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",
62926
63045
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Esta l\xEDnea ha sido facturada para el per\xEDodo prorrateado",
62927
63046
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Importe de {{amount}} no facturado para el per\xEDodo prorrateado",
62928
- "subscriptions.updates.updatePrices": "Actualizar precios para {{productName}}"
63047
+ "subscriptions.updates.updatePrices": "Actualizar precios para {{productName}}",
63048
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo caducado"
62929
63049
  };
62930
63050
 
62931
63051
  // ../hyperline-i18n/build/locales/fr.js
62932
63052
  var fr = {
63053
+ "accounting.creditNotePosted.entryDescription": "Avoir {{creditNoteId}} pour la facture {{invoiceId}}",
63054
+ "accounting.invoicePosted.entryDescription": "\xC9criture de comptabilisation pour la facture {{invoiceId}}",
63055
+ "accounting.revrec.closedPeriodFallbackNote": " (comptabilis\xE9 sur la prochaine p\xE9riode ouverte \u2014 p\xE9riode comptable cible cl\xF4tur\xE9e ; date d'origine {{originalDate}})",
62933
63056
  "accounting.revrec.creditLineDescription": "Reconnaissance du chiffre d'affaires \u2013 \xE9ch\xE9ancier {{scheduleId}}, p\xE9riode {{periodDate}}",
62934
63057
  "accounting.revrec.debitLineDescription": "Diminution des produits constat\xE9s d'avance \u2013 \xE9ch\xE9ancier {{scheduleId}}, p\xE9riode {{periodDate}}",
62935
63058
  "accounting.revrec.discountCreditLineDescription": "Reconnaissance du contre-revenu (remise) \u2013 \xE9ch\xE9ancier {{scheduleId}}, p\xE9riode {{periodDate}}",
62936
- "accounting.revrec.closedPeriodFallbackNote": " (comptabilis\xE9 sur la prochaine p\xE9riode ouverte \u2014 p\xE9riode comptable cible cl\xF4tur\xE9e ; date d'origine {{originalDate}})",
62937
63059
  "accounting.revrec.discountDebitLineDescription": "Diminution des remises diff\xE9r\xE9es \u2013 \xE9ch\xE9ancier {{scheduleId}}, p\xE9riode {{periodDate}}",
62938
- "accounting.invoicePosted.entryDescription": "\xC9criture de comptabilisation pour la facture {{invoiceId}}",
62939
- "accounting.transactionSettled.entryDescription": "R\xE8glement de la facture {{invoiceId}}",
62940
- "accounting.transactionRefunded.entryDescription": "Remboursement de la facture {{invoiceId}}",
62941
- "accounting.creditNotePosted.entryDescription": "Avoir {{creditNoteId}} pour la facture {{invoiceId}}",
62942
- "accounting.standaloneCreditNotePosted.entryDescription": "Avoir {{creditNoteId}}",
62943
63060
  "accounting.revrec.entryDescription": "Reconnaissance du chiffre d'affaires pour l'\xE9ch\xE9ancier {{scheduleId}}, p\xE9riode {{periodStart}} - {{periodEnd}}",
63061
+ "accounting.standaloneCreditNotePosted.entryDescription": "Avoir {{creditNoteId}}",
63062
+ "accounting.transactionRefunded.entryDescription": "Remboursement de la facture {{invoiceId}}",
63063
+ "accounting.transactionSettled.entryDescription": "R\xE8glement de la facture {{invoiceId}}",
62944
63064
  "creditNotes.refundChargeName": "Remboursement pour facture",
62945
63065
  "credits.bundleOf": "{{productName}} - Pack de {{creditCount}} cr\xE9dits",
62946
63066
  "credits.unitsOf": "{{productName}} - {{creditCount}} cr\xE9dits",
@@ -62954,9 +63074,9 @@ var fr = {
62954
63074
  "invoices.prorata.paymentForItemFullPeriod": "Paiement pour",
62955
63075
  "invoices.prorata.refundForItem": "Remboursement au prorata pour",
62956
63076
  "invoices.prorata.refundForItemFullPeriod": "Remboursement pour",
62957
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 solde expir\xE9",
62958
63077
  "subscriptions.closingChargeName": "Frais de cl\xF4ture pour abonnement",
62959
63078
  "subscriptions.correction": "Ajustement p\xE9riode pr\xE9c\xE9dente",
63079
+ "subscriptions.reinstatementRechargeName": "Recharge de r\xE9tablissement de la p\xE9riode annul\xE9e",
62960
63080
  "subscriptions.updates.addCoupon": "Ajout du coupon {{couponName}}",
62961
63081
  "subscriptions.updates.addProduct": "Ajout {{productName}}",
62962
63082
  "subscriptions.updates.removeCoupon": "Retrait du coupon {{couponName}}",
@@ -62971,22 +63091,23 @@ var fr = {
62971
63091
  "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",
62972
63092
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Cette ligne a \xE9t\xE9 factur\xE9e pour la p\xE9riode proratis\xE9e",
62973
63093
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Montant de {{amount}} non factur\xE9 pour la p\xE9riode proratis\xE9e",
62974
- "subscriptions.updates.updatePrices": "Mise \xE0 jour des prix pour {{productName}}"
63094
+ "subscriptions.updates.updatePrices": "Mise \xE0 jour des prix pour {{productName}}",
63095
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 solde expir\xE9"
62975
63096
  };
62976
63097
 
62977
63098
  // ../hyperline-i18n/build/locales/it.js
62978
63099
  var it = {
62979
- "accounting.invoicePosted.entryDescription": "Registrazione contabile per la fattura {{invoiceId}}",
62980
- "accounting.transactionSettled.entryDescription": "Regolamento pagamento per la fattura {{invoiceId}}",
62981
- "accounting.transactionRefunded.entryDescription": "Rimborso per la fattura {{invoiceId}}",
62982
63100
  "accounting.creditNotePosted.entryDescription": "Nota di credito {{creditNoteId}} per la fattura {{invoiceId}}",
62983
- "accounting.standaloneCreditNotePosted.entryDescription": "Nota di credito {{creditNoteId}}",
63101
+ "accounting.invoicePosted.entryDescription": "Registrazione contabile per la fattura {{invoiceId}}",
63102
+ "accounting.revrec.closedPeriodFallbackNote": " (registrato nel prossimo periodo aperto \u2014 periodo contabile di destinazione chiuso; data originale {{originalDate}})",
62984
63103
  "accounting.revrec.creditLineDescription": "Riconoscere i ricavi \u2013 programma {{scheduleId}}, periodo {{periodDate}}",
62985
63104
  "accounting.revrec.debitLineDescription": "Diminuzione dei ricavi differiti \u2013 programma {{scheduleId}}, periodo {{periodDate}}",
62986
63105
  "accounting.revrec.discountCreditLineDescription": "Riconoscere il contra-ricavo (sconto) \u2013 programma {{scheduleId}}, periodo {{periodDate}}",
62987
- "accounting.revrec.closedPeriodFallbackNote": " (registrato nel prossimo periodo aperto \u2014 periodo contabile di destinazione chiuso; data originale {{originalDate}})",
62988
63106
  "accounting.revrec.discountDebitLineDescription": "Diminuzione dello sconto differito \u2013 programma {{scheduleId}}, periodo {{periodDate}}",
62989
63107
  "accounting.revrec.entryDescription": "Riconoscimento dei ricavi per il programma {{scheduleId}}, periodo {{periodStart}} - {{periodEnd}}",
63108
+ "accounting.standaloneCreditNotePosted.entryDescription": "Nota di credito {{creditNoteId}}",
63109
+ "accounting.transactionRefunded.entryDescription": "Rimborso per la fattura {{invoiceId}}",
63110
+ "accounting.transactionSettled.entryDescription": "Regolamento pagamento per la fattura {{invoiceId}}",
62990
63111
  "creditNotes.refundChargeName": "Rimborso per fattura",
62991
63112
  "credits.bundleOf": "{{productName}} - Pacchetto di {{creditCount}} crediti",
62992
63113
  "credits.unitsOf": "{{productName}} - {{creditCount}} crediti",
@@ -63000,9 +63121,9 @@ var it = {
63000
63121
  "invoices.prorata.paymentForItemFullPeriod": "Pagamento per",
63001
63122
  "invoices.prorata.refundForItem": "Rimborso proporzionale per",
63002
63123
  "invoices.prorata.refundForItemFullPeriod": "Rimborso per",
63003
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo scaduto",
63004
63124
  "subscriptions.closingChargeName": "Costo di chiusura per abbonamento",
63005
63125
  "subscriptions.correction": "Correzione periodo precedente",
63126
+ "subscriptions.reinstatementRechargeName": "Ricarica di reintegrazione del periodo annullato",
63006
63127
  "subscriptions.updates.addCoupon": "Aggiungi coupon {{couponName}}",
63007
63128
  "subscriptions.updates.addProduct": "Aggiungi {{productName}}",
63008
63129
  "subscriptions.updates.removeCoupon": "Rimuovi coupon {{couponName}}",
@@ -63017,14 +63138,29 @@ var it = {
63017
63138
  "subscriptions.updates.updateCount.description.prorata.committed.not_invoiced": "Importo di {{amount}} (con un minimo impegnato di {{committedCount}}) non fatturato per il periodo proporzionato",
63018
63139
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Questa voce \xE8 stata fatturata per il periodo proporzionato",
63019
63140
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Importo di {{amount}} non fatturato per il periodo proporzionato",
63020
- "subscriptions.updates.updatePrices": "Aggiorna prezzi per {{productName}}"
63141
+ "subscriptions.updates.updatePrices": "Aggiorna prezzi per {{productName}}",
63142
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo scaduto"
63021
63143
  };
63022
63144
 
63023
63145
  // ../hyperline-i18n/build/locales/lt.js
63024
63146
  var lt = {
63147
+ "accounting.creditNotePosted.entryDescription": "Kreditin\u0117 s\u0105skaita {{creditNoteId}} s\u0105skaitai fakt\u016Brai {{invoiceId}}",
63148
+ "accounting.invoicePosted.entryDescription": "I\u0161ra\u0161ytos s\u0105skaitos fakt\u016Bros {{invoiceId}} registravimo \u012Fra\u0161as",
63149
+ "accounting.revrec.closedPeriodFallbackNote": " (u\u017Eregistruota kitame atvirame laikotarpyje, nes tikslinis apskaitos laikotarpis u\u017Edarytas; pradin\u0117 data {{originalDate}})",
63150
+ "accounting.revrec.creditLineDescription": "Pajam\u0173 pripa\u017Einimas \u2013 grafikas {{scheduleId}}, laikotarpis {{periodDate}}",
63151
+ "accounting.revrec.debitLineDescription": "Atid\u0117t\u0173j\u0173 pajam\u0173 suma\u017Einimas \u2013 grafikas {{scheduleId}}, laikotarpis {{periodDate}}",
63152
+ "accounting.revrec.discountCreditLineDescription": "Pajamas ma\u017Einan\u010Dios sumos (nuolaidos) pripa\u017Einimas \u2013 grafikas {{scheduleId}}, laikotarpis {{periodDate}}",
63153
+ "accounting.revrec.discountDebitLineDescription": "Atid\u0117tosios nuolaidos suma\u017Einimas \u2013 grafikas {{scheduleId}}, laikotarpis {{periodDate}}",
63154
+ "accounting.revrec.entryDescription": "Pajam\u0173 pripa\u017Einimas pagal grafik\u0105 {{scheduleId}}, laikotarpis {{periodStart}}\u2013{{periodEnd}}",
63155
+ "accounting.standaloneCreditNotePosted.entryDescription": "Kreditin\u0117 s\u0105skaita {{creditNoteId}}",
63156
+ "accounting.transactionRefunded.entryDescription": "S\u0105skaitos fakt\u016Bros {{invoiceId}} gr\u0105\u017Einimas",
63157
+ "accounting.transactionSettled.entryDescription": "S\u0105skaitos fakt\u016Bros {{invoiceId}} mok\u0117jimo sudengimas",
63025
63158
  "creditNotes.refundChargeName": "S\u0105skaitos fakt\u016Bros gr\u0105\u017Einimas",
63026
63159
  "credits.bundleOf": "{{productName}} \u2013 {{creditCount}} kredit\u0173 paketas",
63027
63160
  "credits.unitsOf": "{{productName}} \u2013 {{creditCount}} kredit\u0173",
63161
+ "einvoicing.paymentFromWallet": "Mok\u0117jimas i\u0161 pinigin\u0117s",
63162
+ "einvoicing.paymentProcessed": "Mok\u0117jimas apdorotas",
63163
+ "einvoicing.paymentReceived": "Mok\u0117jimas gautas",
63028
63164
  "invoices.outstandingProduct.description": "Neapmok\u0117ta {{date}} i\u0161ra\u0161ytos s\u0105skaitos fakt\u016Bros{{invoiceNumber}} suma",
63029
63165
  "invoices.outstandingProduct.descriptionPeriod": "Neapmok\u0117ta s\u0105skaitos fakt\u016Bros{{invoiceNumber}} suma u\u017E laikotarp\u012F nuo {{periodStart}} iki {{periodEnd}}",
63030
63166
  "invoices.outstandingProduct.name": "Neapmok\u0117tas likutis",
@@ -63032,53 +63168,40 @@ var lt = {
63032
63168
  "invoices.prorata.paymentForItemFullPeriod": "Mok\u0117jimas u\u017E",
63033
63169
  "invoices.prorata.refundForItem": "Proporcingas gr\u0105\u017Einimas u\u017E",
63034
63170
  "invoices.prorata.refundForItemFullPeriod": "Gr\u0105\u017Einimas u\u017E",
63035
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 nebegaliojantis likutis",
63036
63171
  "subscriptions.closingChargeName": "Prenumeratos u\u017Ebaigimo mokestis",
63037
63172
  "subscriptions.correction": "Ankstesnio laikotarpio koregavimas",
63173
+ "subscriptions.reinstatementRechargeName": "Atnaujinimo \u012Fmokos u\u017E nutraukt\u0105 laikotarp\u012F",
63038
63174
  "subscriptions.updates.addCoupon": "Prid\u0117ti kupon\u0105 {{couponName}}",
63039
63175
  "subscriptions.updates.addProduct": "Prid\u0117ti {{productName}}",
63040
63176
  "subscriptions.updates.removeCoupon": "Pa\u0161alinti kupon\u0105 {{couponName}}",
63041
63177
  "subscriptions.updates.removeProduct": "Pa\u0161alinti {{productName}}",
63042
63178
  "subscriptions.updates.unit": "vnt.",
63043
- "subscriptions.updates.updatePrices": "Atnaujinti {{productName}} kainas",
63044
63179
  "subscriptions.updates.updateCount": "Atnaujinti {{productName}} kiek\u012F ({{previousCount}} \u2192 {{newCount}} {{unit}})",
63045
- "subscriptions.updates.updateCount.description.prorata.committed.invoiced": "Pritaikytas minimalus \u012Fsipareigotas {{committedCount}} kiekis.",
63046
- "subscriptions.updates.updateCount.description.prorata.committed.not_invoiced": "Proporcingam laikotarpiui nei\u0161ra\u0161yta {{amount}} suma (minimalus \u012Fsipareigotas kiekis \u2013 {{committedCount}})",
63047
- "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "U\u017E \u0161i\u0105 eilut\u0119 proporcingam laikotarpiui s\u0105skaita fakt\u016Bra i\u0161ra\u0161yta",
63048
- "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Proporcingam laikotarpiui nei\u0161ra\u0161yta {{amount}} suma",
63049
63180
  "subscriptions.updates.updateCount.description.full.committed.invoiced": "Visam laikotarpiui pritaikytas minimalus \u012Fsipareigotas {{committedCount}} kiekis.",
63050
63181
  "subscriptions.updates.updateCount.description.full.committed.not_invoiced": "Visam laikotarpiui nei\u0161ra\u0161yta {{amount}} suma (minimalus \u012Fsipareigotas kiekis \u2013 {{committedCount}})",
63051
63182
  "subscriptions.updates.updateCount.description.full.not_committed.invoiced": "U\u017E \u0161i\u0105 eilut\u0119 visam laikotarpiui s\u0105skaita fakt\u016Bra i\u0161ra\u0161yta",
63052
63183
  "subscriptions.updates.updateCount.description.full.not_committed.not_invoiced": "Visam laikotarpiui nei\u0161ra\u0161yta {{amount}} suma",
63053
- "accounting.invoicePosted.entryDescription": "I\u0161ra\u0161ytos s\u0105skaitos fakt\u016Bros {{invoiceId}} registravimo \u012Fra\u0161as",
63054
- "accounting.transactionSettled.entryDescription": "S\u0105skaitos fakt\u016Bros {{invoiceId}} mok\u0117jimo sudengimas",
63055
- "accounting.transactionRefunded.entryDescription": "S\u0105skaitos fakt\u016Bros {{invoiceId}} gr\u0105\u017Einimas",
63056
- "accounting.creditNotePosted.entryDescription": "Kreditin\u0117 s\u0105skaita {{creditNoteId}} s\u0105skaitai fakt\u016Brai {{invoiceId}}",
63057
- "accounting.standaloneCreditNotePosted.entryDescription": "Kreditin\u0117 s\u0105skaita {{creditNoteId}}",
63058
- "accounting.revrec.entryDescription": "Pajam\u0173 pripa\u017Einimas pagal grafik\u0105 {{scheduleId}}, laikotarpis {{periodStart}}\u2013{{periodEnd}}",
63059
- "accounting.revrec.debitLineDescription": "Atid\u0117t\u0173j\u0173 pajam\u0173 suma\u017Einimas \u2013 grafikas {{scheduleId}}, laikotarpis {{periodDate}}",
63060
- "accounting.revrec.creditLineDescription": "Pajam\u0173 pripa\u017Einimas \u2013 grafikas {{scheduleId}}, laikotarpis {{periodDate}}",
63061
- "accounting.revrec.discountDebitLineDescription": "Atid\u0117tosios nuolaidos suma\u017Einimas \u2013 grafikas {{scheduleId}}, laikotarpis {{periodDate}}",
63062
- "accounting.revrec.discountCreditLineDescription": "Pajamas ma\u017Einan\u010Dios sumos (nuolaidos) pripa\u017Einimas \u2013 grafikas {{scheduleId}}, laikotarpis {{periodDate}}",
63063
- "accounting.revrec.closedPeriodFallbackNote": " (u\u017Eregistruota kitame atvirame laikotarpyje, nes tikslinis apskaitos laikotarpis u\u017Edarytas; pradin\u0117 data {{originalDate}})",
63064
- "einvoicing.paymentProcessed": "Mok\u0117jimas apdorotas",
63065
- "einvoicing.paymentReceived": "Mok\u0117jimas gautas",
63066
- "einvoicing.paymentFromWallet": "Mok\u0117jimas i\u0161 pinigin\u0117s"
63184
+ "subscriptions.updates.updateCount.description.prorata.committed.invoiced": "Pritaikytas minimalus \u012Fsipareigotas {{committedCount}} kiekis.",
63185
+ "subscriptions.updates.updateCount.description.prorata.committed.not_invoiced": "Proporcingam laikotarpiui nei\u0161ra\u0161yta {{amount}} suma (minimalus \u012Fsipareigotas kiekis \u2013 {{committedCount}})",
63186
+ "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "U\u017E \u0161i\u0105 eilut\u0119 proporcingam laikotarpiui s\u0105skaita fakt\u016Bra i\u0161ra\u0161yta",
63187
+ "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Proporcingam laikotarpiui nei\u0161ra\u0161yta {{amount}} suma",
63188
+ "subscriptions.updates.updatePrices": "Atnaujinti {{productName}} kainas",
63189
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 nebegaliojantis likutis"
63067
63190
  };
63068
63191
 
63069
63192
  // ../hyperline-i18n/build/locales/nl.js
63070
63193
  var nl = {
63071
- "accounting.invoicePosted.entryDescription": "Boekingsregel voor factuur {{invoiceId}}",
63072
- "accounting.transactionSettled.entryDescription": "Betalingsafwikkeling voor factuur {{invoiceId}}",
63073
- "accounting.transactionRefunded.entryDescription": "Terugbetaling voor factuur {{invoiceId}}",
63074
63194
  "accounting.creditNotePosted.entryDescription": "Creditnota {{creditNoteId}} voor factuur {{invoiceId}}",
63075
- "accounting.standaloneCreditNotePosted.entryDescription": "Creditnota {{creditNoteId}}",
63195
+ "accounting.invoicePosted.entryDescription": "Boekingsregel voor factuur {{invoiceId}}",
63196
+ "accounting.revrec.closedPeriodFallbackNote": " (geboekt in de volgende open periode \u2014 doelboekingsperiode gesloten; oorspronkelijke datum {{originalDate}})",
63076
63197
  "accounting.revrec.creditLineDescription": "Omzet erkennen \u2013 schema {{scheduleId}}, periode {{periodDate}}",
63077
63198
  "accounting.revrec.debitLineDescription": "Uitgestelde omzet verlagen \u2013 schema {{scheduleId}}, periode {{periodDate}}",
63078
63199
  "accounting.revrec.discountCreditLineDescription": "Omzetvermindering (korting) erkennen \u2013 schema {{scheduleId}}, periode {{periodDate}}",
63079
- "accounting.revrec.closedPeriodFallbackNote": " (geboekt in de volgende open periode \u2014 doelboekingsperiode gesloten; oorspronkelijke datum {{originalDate}})",
63080
63200
  "accounting.revrec.discountDebitLineDescription": "Uitgestelde korting verlagen \u2013 schema {{scheduleId}}, periode {{periodDate}}",
63081
63201
  "accounting.revrec.entryDescription": "Omzeterkenning voor schema {{scheduleId}}, periode {{periodStart}} - {{periodEnd}}",
63202
+ "accounting.standaloneCreditNotePosted.entryDescription": "Creditnota {{creditNoteId}}",
63203
+ "accounting.transactionRefunded.entryDescription": "Terugbetaling voor factuur {{invoiceId}}",
63204
+ "accounting.transactionSettled.entryDescription": "Betalingsafwikkeling voor factuur {{invoiceId}}",
63082
63205
  "creditNotes.refundChargeName": "Terugbetaling voor factuur",
63083
63206
  "credits.bundleOf": "{{productName}} - Bundel van {{creditCount}} credits",
63084
63207
  "credits.unitsOf": "{{productName}} - {{creditCount}} credits",
@@ -63092,9 +63215,9 @@ var nl = {
63092
63215
  "invoices.prorata.paymentForItemFullPeriod": "Betaling voor",
63093
63216
  "invoices.prorata.refundForItem": "Gedeeltelijke terugbetaling voor",
63094
63217
  "invoices.prorata.refundForItemFullPeriod": "Terugbetaling voor",
63095
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 verlopen saldo",
63096
63218
  "subscriptions.closingChargeName": "Afsluitkosten voor abonnement",
63097
63219
  "subscriptions.correction": "Aanpassing vorige periode",
63220
+ "subscriptions.reinstatementRechargeName": "Herstelkosten van geannuleerde periode",
63098
63221
  "subscriptions.updates.addCoupon": "Coupon toevoegen {{couponName}}",
63099
63222
  "subscriptions.updates.addProduct": "{{productName}} toevoegen",
63100
63223
  "subscriptions.updates.removeCoupon": "Coupon verwijderen {{couponName}}",
@@ -63109,22 +63232,23 @@ var nl = {
63109
63232
  "subscriptions.updates.updateCount.description.prorata.committed.not_invoiced": "Bedrag van {{amount}} (met een minimaal toegezegd aantal van {{committedCount}}) niet gefactureerd voor de geproportioneerde periode",
63110
63233
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Deze regel is gefactureerd voor de geproportioneerde periode",
63111
63234
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Bedrag van {{amount}} niet gefactureerd voor de geproportioneerde periode",
63112
- "subscriptions.updates.updatePrices": "Prijzen bijwerken voor {{productName}}"
63235
+ "subscriptions.updates.updatePrices": "Prijzen bijwerken voor {{productName}}",
63236
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 verlopen saldo"
63113
63237
  };
63114
63238
 
63115
63239
  // ../hyperline-i18n/build/locales/pl.js
63116
63240
  var pl = {
63117
- "accounting.invoicePosted.entryDescription": "Zapis ksi\u0119gowy dla faktury {{invoiceId}}",
63118
- "accounting.transactionSettled.entryDescription": "Rozliczenie p\u0142atno\u015Bci dla faktury {{invoiceId}}",
63119
- "accounting.transactionRefunded.entryDescription": "Zwrot za faktur\u0119 {{invoiceId}}",
63120
63241
  "accounting.creditNotePosted.entryDescription": "Nota kredytowa {{creditNoteId}} dla faktury {{invoiceId}}",
63121
- "accounting.standaloneCreditNotePosted.entryDescription": "Nota kredytowa {{creditNoteId}}",
63242
+ "accounting.invoicePosted.entryDescription": "Zapis ksi\u0119gowy dla faktury {{invoiceId}}",
63243
+ "accounting.revrec.closedPeriodFallbackNote": " (zaksi\u0119gowano w nast\u0119pnym otwartym okresie \u2014 docelowy okres ksi\u0119gowy zamkni\u0119ty; pierwotna data {{originalDate}})",
63122
63244
  "accounting.revrec.creditLineDescription": "Rozpoznanie przychodu \u2013 harmonogram {{scheduleId}}, okres {{periodDate}}",
63123
63245
  "accounting.revrec.debitLineDescription": "Zmniejszenie przychod\xF3w przysz\u0142ych okres\xF3w \u2013 harmonogram {{scheduleId}}, okres {{periodDate}}",
63124
63246
  "accounting.revrec.discountCreditLineDescription": "Rozpoznanie kontra-przychodu (rabat) \u2013 harmonogram {{scheduleId}}, okres {{periodDate}}",
63125
- "accounting.revrec.closedPeriodFallbackNote": " (zaksi\u0119gowano w nast\u0119pnym otwartym okresie \u2014 docelowy okres ksi\u0119gowy zamkni\u0119ty; pierwotna data {{originalDate}})",
63126
63247
  "accounting.revrec.discountDebitLineDescription": "Zmniejszenie odroczonego rabatu \u2013 harmonogram {{scheduleId}}, okres {{periodDate}}",
63127
63248
  "accounting.revrec.entryDescription": "Rozpoznanie przychodu dla harmonogramu {{scheduleId}}, okres {{periodStart}} - {{periodEnd}}",
63249
+ "accounting.standaloneCreditNotePosted.entryDescription": "Nota kredytowa {{creditNoteId}}",
63250
+ "accounting.transactionRefunded.entryDescription": "Zwrot za faktur\u0119 {{invoiceId}}",
63251
+ "accounting.transactionSettled.entryDescription": "Rozliczenie p\u0142atno\u015Bci dla faktury {{invoiceId}}",
63128
63252
  "creditNotes.refundChargeName": "Zwrot za faktur\u0119",
63129
63253
  "credits.bundleOf": "{{productName}} - Pakiet {{creditCount}} kredyt\xF3w",
63130
63254
  "credits.unitsOf": "{{productName}} - {{creditCount}} kredyt\xF3w",
@@ -63138,9 +63262,9 @@ var pl = {
63138
63262
  "invoices.prorata.paymentForItemFullPeriod": "P\u0142atno\u015B\u0107 za",
63139
63263
  "invoices.prorata.refundForItem": "Zwrot proporcjonalny za",
63140
63264
  "invoices.prorata.refundForItemFullPeriod": "Zwrot za",
63141
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 wygas\u0142e saldo",
63142
63265
  "subscriptions.closingChargeName": "Op\u0142ata za zamkni\u0119cie subskrypcji",
63143
63266
  "subscriptions.correction": "Korekta poprzedniego okresu",
63267
+ "subscriptions.reinstatementRechargeName": "Op\u0142ata za przywr\xF3cenie anulowanego okresu",
63144
63268
  "subscriptions.updates.addCoupon": "Dodaj kupon {{couponName}}",
63145
63269
  "subscriptions.updates.addProduct": "Dodaj {{productName}}",
63146
63270
  "subscriptions.updates.removeCoupon": "Usu\u0144 kupon {{couponName}}",
@@ -63155,22 +63279,23 @@ var pl = {
63155
63279
  "subscriptions.updates.updateCount.description.prorata.committed.not_invoiced": "Kwota {{amount}} (z minimaln\u0105 zobowi\u0105zan\u0105 ilo\u015Bci\u0105 {{committedCount}}) niefakturowana za okres proporcjonalny",
63156
63280
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Ta pozycja zosta\u0142a zafakturowana za okres proporcjonalny",
63157
63281
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Kwota {{amount}} niefakturowana za okres proporcjonalny",
63158
- "subscriptions.updates.updatePrices": "Aktualizuj ceny dla {{productName}}"
63282
+ "subscriptions.updates.updatePrices": "Aktualizuj ceny dla {{productName}}",
63283
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 wygas\u0142e saldo"
63159
63284
  };
63160
63285
 
63161
63286
  // ../hyperline-i18n/build/locales/pt.js
63162
63287
  var pt = {
63163
- "accounting.invoicePosted.entryDescription": "Lan\xE7amento cont\xE1bil para a fatura {{invoiceId}}",
63164
- "accounting.transactionSettled.entryDescription": "Liquida\xE7\xE3o de pagamento para a fatura {{invoiceId}}",
63165
- "accounting.transactionRefunded.entryDescription": "Reembolso da fatura {{invoiceId}}",
63166
63288
  "accounting.creditNotePosted.entryDescription": "Nota de cr\xE9dito {{creditNoteId}} para a fatura {{invoiceId}}",
63167
- "accounting.standaloneCreditNotePosted.entryDescription": "Nota de cr\xE9dito {{creditNoteId}}",
63289
+ "accounting.invoicePosted.entryDescription": "Lan\xE7amento cont\xE1bil para a fatura {{invoiceId}}",
63290
+ "accounting.revrec.closedPeriodFallbackNote": " (lan\xE7ado no pr\xF3ximo per\xEDodo aberto \u2014 per\xEDodo cont\xE1bil de destino fechado; data original {{originalDate}})",
63168
63291
  "accounting.revrec.creditLineDescription": "Reconhecer receita \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
63169
63292
  "accounting.revrec.debitLineDescription": "Diminui\xE7\xE3o da receita diferida \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
63170
63293
  "accounting.revrec.discountCreditLineDescription": "Reconhecer contra-receita (desconto) \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
63171
- "accounting.revrec.closedPeriodFallbackNote": " (lan\xE7ado no pr\xF3ximo per\xEDodo aberto \u2014 per\xEDodo cont\xE1bil de destino fechado; data original {{originalDate}})",
63172
63294
  "accounting.revrec.discountDebitLineDescription": "Diminui\xE7\xE3o do desconto diferido \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
63173
63295
  "accounting.revrec.entryDescription": "Reconhecimento de receita para o cronograma {{scheduleId}}, per\xEDodo {{periodStart}} - {{periodEnd}}",
63296
+ "accounting.standaloneCreditNotePosted.entryDescription": "Nota de cr\xE9dito {{creditNoteId}}",
63297
+ "accounting.transactionRefunded.entryDescription": "Reembolso da fatura {{invoiceId}}",
63298
+ "accounting.transactionSettled.entryDescription": "Liquida\xE7\xE3o de pagamento para a fatura {{invoiceId}}",
63174
63299
  "creditNotes.refundChargeName": "Reembolso pela fatura",
63175
63300
  "credits.bundleOf": "{{productName}} - Pacote de {{creditCount}} cr\xE9ditos",
63176
63301
  "credits.unitsOf": "{{productName}} - {{creditCount}} cr\xE9ditos",
@@ -63184,9 +63309,9 @@ var pt = {
63184
63309
  "invoices.prorata.paymentForItemFullPeriod": "Pagamento por",
63185
63310
  "invoices.prorata.refundForItem": "Reembolso proporcional por",
63186
63311
  "invoices.prorata.refundForItemFullPeriod": "Reembolso por",
63187
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo expirado",
63188
63312
  "subscriptions.closingChargeName": "Taxa de encerramento da assinatura",
63189
63313
  "subscriptions.correction": "Ajuste do per\xEDodo anterior",
63314
+ "subscriptions.reinstatementRechargeName": "Recarga de reintegra\xE7\xE3o do per\xEDodo cancelado",
63190
63315
  "subscriptions.updates.addCoupon": "Adicionar cupom {{couponName}}",
63191
63316
  "subscriptions.updates.addProduct": "Adicionar {{productName}}",
63192
63317
  "subscriptions.updates.removeCoupon": "Remover cupom {{couponName}}",
@@ -63201,7 +63326,8 @@ var pt = {
63201
63326
  "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",
63202
63327
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Esta linha foi faturada para o per\xEDodo proporcional",
63203
63328
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Valor de {{amount}} n\xE3o faturado para o per\xEDodo proporcional",
63204
- "subscriptions.updates.updatePrices": "Atualizar pre\xE7os para {{productName}}"
63329
+ "subscriptions.updates.updatePrices": "Atualizar pre\xE7os para {{productName}}",
63330
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo expirado"
63205
63331
  };
63206
63332
 
63207
63333
  // ../hyperline-i18n/build/language.js
@@ -65980,6 +66106,150 @@ var isAxiosError = axios.isAxiosError;
65980
66106
  // ../hyperline-lib/build/httpClient/httpClient.js
65981
66107
  import axios2 from "axios";
65982
66108
  import axiosRetry, { isNetworkOrIdempotentRequestError, retryAfter } from "axios-retry";
66109
+
66110
+ // ../hyperline-lib/build/httpClient/logRedaction.js
66111
+ var REDACTED_KEY_NAMES = /* @__PURE__ */ new Set([
66112
+ "accesstoken",
66113
+ "apikey",
66114
+ "apitoken",
66115
+ "assertion",
66116
+ "authtoken",
66117
+ "clientassertion",
66118
+ "codeverifier",
66119
+ "credentials",
66120
+ "idtoken",
66121
+ "privatekey",
66122
+ "refreshtoken",
66123
+ "sessiontoken",
66124
+ "token"
66125
+ ]);
66126
+ var REDACTED_KEY_SUFFIX_PATTERN = /(secret|password)$/;
66127
+ var REDACTED_KEY_CANDIDATE_PATTERN = /token|key|secret|password|assertion|verifier|credentials/i;
66128
+ var REDACTED_VALUE = "<redacted>";
66129
+ var MAX_REDACTION_DEPTH = 10;
66130
+ var MAX_PARSED_STRING_LENGTH = 16384;
66131
+ var MAX_VISITED_NODES = 1e3;
66132
+ var MAX_CONTAINER_ENTRIES = MAX_VISITED_NODES;
66133
+ function redactLogBody({ body }) {
66134
+ return redactValue({
66135
+ value: body,
66136
+ depth: MAX_REDACTION_DEPTH,
66137
+ budget: { remainingNodes: MAX_VISITED_NODES }
66138
+ });
66139
+ }
66140
+ function redactLogUrl({ url: url2 }) {
66141
+ const queryIndex = url2.indexOf("?");
66142
+ if (queryIndex === -1 || url2.length > MAX_PARSED_STRING_LENGTH) {
66143
+ return url2;
66144
+ }
66145
+ const redactedQuery = redactFormEncoded({ text: url2.slice(queryIndex + 1) });
66146
+ return redactedQuery === void 0 ? url2 : `${url2.slice(0, queryIndex)}?${redactedQuery}`;
66147
+ }
66148
+ function redactValue({ value, depth, budget }) {
66149
+ if (depth <= 0 || budget.remainingNodes <= 0) {
66150
+ return value;
66151
+ }
66152
+ budget.remainingNodes -= 1;
66153
+ if (typeof value === "string") {
66154
+ return redactString({ text: value, budget });
66155
+ }
66156
+ if (value instanceof URLSearchParams) {
66157
+ return redactFormEncoded({ text: value.toString() }) ?? value;
66158
+ }
66159
+ if (Array.isArray(value)) {
66160
+ return redactArray({ items: value, depth, budget });
66161
+ }
66162
+ if (isPlainObject2(value)) {
66163
+ return redactObject({ record: value, depth, budget });
66164
+ }
66165
+ return value;
66166
+ }
66167
+ function redactArray({ items, depth, budget }) {
66168
+ if (items.length > MAX_CONTAINER_ENTRIES) {
66169
+ return items;
66170
+ }
66171
+ let redactedItems;
66172
+ for (const [index, item] of items.entries()) {
66173
+ if (budget.remainingNodes <= 0) {
66174
+ break;
66175
+ }
66176
+ const redactedItem = redactValue({ value: item, depth: depth - 1, budget });
66177
+ if (redactedItem !== item) {
66178
+ redactedItems ??= [...items];
66179
+ redactedItems[index] = redactedItem;
66180
+ }
66181
+ }
66182
+ return redactedItems ?? items;
66183
+ }
66184
+ function redactObject({ record: record2, depth, budget }) {
66185
+ const redactedEntries = /* @__PURE__ */ new Map();
66186
+ let entryCount = 0;
66187
+ for (const key in record2) {
66188
+ if (!Object.hasOwn(record2, key)) {
66189
+ continue;
66190
+ }
66191
+ entryCount += 1;
66192
+ if (entryCount > MAX_CONTAINER_ENTRIES) {
66193
+ return record2;
66194
+ }
66195
+ if (budget.remainingNodes <= 0) {
66196
+ break;
66197
+ }
66198
+ const nestedValue = record2[key];
66199
+ const redactedNestedValue = isRedactedKey({ key }) && nestedValue != null ? REDACTED_VALUE : redactValue({ value: nestedValue, depth: depth - 1, budget });
66200
+ if (redactedNestedValue !== nestedValue) {
66201
+ redactedEntries.set(key, redactedNestedValue);
66202
+ }
66203
+ }
66204
+ return redactedEntries.size === 0 ? record2 : { ...record2, ...Object.fromEntries(redactedEntries) };
66205
+ }
66206
+ function redactString({ text, budget }) {
66207
+ if (text.length > MAX_PARSED_STRING_LENGTH) {
66208
+ return text;
66209
+ }
66210
+ const trimmedText = text.trim();
66211
+ if (trimmedText.startsWith("{") || trimmedText.startsWith("[")) {
66212
+ try {
66213
+ const parsedValue = JSON.parse(trimmedText);
66214
+ const redactedValue = redactValue({
66215
+ value: parsedValue,
66216
+ depth: MAX_REDACTION_DEPTH,
66217
+ budget
66218
+ });
66219
+ return redactedValue === parsedValue ? text : JSON.stringify(redactedValue);
66220
+ } catch {
66221
+ return text;
66222
+ }
66223
+ }
66224
+ return redactFormEncoded({ text }) ?? text;
66225
+ }
66226
+ function redactFormEncoded({ text }) {
66227
+ if (!text.includes("=") || !REDACTED_KEY_CANDIDATE_PATTERN.test(text)) {
66228
+ return void 0;
66229
+ }
66230
+ const params = new URLSearchParams(text);
66231
+ let hasRedactedParam = false;
66232
+ for (const key of new Set(params.keys())) {
66233
+ if (isRedactedKey({ key })) {
66234
+ params.set(key, REDACTED_VALUE);
66235
+ hasRedactedParam = true;
66236
+ }
66237
+ }
66238
+ return hasRedactedParam ? params.toString() : void 0;
66239
+ }
66240
+ function isRedactedKey({ key }) {
66241
+ const normalizedKey = key.toLowerCase().replace(/[_-]/g, "");
66242
+ return REDACTED_KEY_NAMES.has(normalizedKey) || REDACTED_KEY_SUFFIX_PATTERN.test(normalizedKey);
66243
+ }
66244
+ function isPlainObject2(value) {
66245
+ if (typeof value !== "object" || value === null) {
66246
+ return false;
66247
+ }
66248
+ const prototype = Object.getPrototypeOf(value);
66249
+ return prototype === Object.prototype || prototype === null;
66250
+ }
66251
+
66252
+ // ../hyperline-lib/build/httpClient/httpClient.js
65983
66253
  import { AxiosError } from "axios";
65984
66254
  var recommendedRetryConfig = {
65985
66255
  retries: 3,
@@ -66047,13 +66317,14 @@ function isTooManyRequestsError(error48) {
66047
66317
  return error48.response?.status === 429;
66048
66318
  }
66049
66319
  var toLogRequest = (config4) => {
66320
+ const url2 = redactLogUrl({ url: config4.url ?? "" });
66050
66321
  return {
66051
66322
  method: config4.method ?? "",
66052
- url: config4.url ?? "",
66053
- path: config4.url ?? "",
66323
+ url: url2,
66324
+ path: url2,
66054
66325
  hostname: config4.baseURL ?? "",
66055
- originalUrl: `${config4.baseURL ?? ""}${config4.url}`,
66056
- body: config4.data,
66326
+ originalUrl: `${config4.baseURL ?? ""}${url2}`,
66327
+ body: redactLogBody({ body: config4.data }),
66057
66328
  headers: {}
66058
66329
  };
66059
66330
  };