@hyperline/cli 0.1.0-build.1.9b5891d → 0.1.0-build.1.9d98d94

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.
@@ -34894,10 +34894,10 @@ var require_shared = __commonJS({
34894
34894
  ZodId: () => ZodId,
34895
34895
  ZodTranslationsSchemaFn: () => ZodTranslationsSchemaFn
34896
34896
  });
34897
- var import_zod19 = require_lib();
34897
+ var import_zod20 = require_lib();
34898
34898
  var countryIds2 = ["all", ...countries.map(({ id }) => id)];
34899
- var ZodId = import_zod19.z.enum(countryIds2);
34900
- var ZodTranslationsSchemaFn = (schema) => import_zod19.z.record(import_zod19.z.string(), schema.optional());
34899
+ var ZodId = import_zod20.z.enum(countryIds2);
34900
+ var ZodTranslationsSchemaFn = (schema) => import_zod20.z.record(import_zod20.z.string(), schema.optional());
34901
34901
  var UsStates = [
34902
34902
  { id: "AA", name: "Armed Forces Americas" },
34903
34903
  { id: "AE", name: "Armed Forces Europe" },
@@ -37934,7 +37934,7 @@ Examples:
37934
37934
  queryParamKeys: ["take", "skip"]
37935
37935
  });
37936
37936
  });
37937
- resource.command("get").description(`Retrieve a specific bank account by its ID. Returns bank account details including IBAN, BIC, and currency.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
37937
+ resource.command("get").description(`Retrieve a specific bank account by its ID. Returns masked bank account details, account type, balance, and currency.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
37938
37938
  Examples:
37939
37939
  hyperline bank-accounts get --id <id>`).action(async (opts) => {
37940
37940
  const ctx = resource.parent?.opts()._ctx;
@@ -37952,6 +37952,31 @@ Examples:
37952
37952
  queryParamKeys: []
37953
37953
  });
37954
37954
  });
37955
+ resource.command("list-bank-account-transactions").description(`List open banking transactions for a specific bank account. Paginated with limit/cursor.`).requiredOption("--id <value>", `id parameter`).option("--limit <number>", `Maximum number of items to return (1-100).`).option("--cursor <value>", `Opaque cursor returned in the previous response's \`next_cursor\`. Omit to fetch the first page.`).option("--include-total <value>", `Set to \`true\` to include \`total\` in the response.`).addHelpText("after", `
37956
+ Examples:
37957
+ hyperline bank-accounts list-bank-account-transactions --id <id>
37958
+ hyperline bank-accounts list-bank-account-transactions --id <id> --limit <limit> --cursor <cursor>`).action(async (opts) => {
37959
+ const ctx = resource.parent?.opts()._ctx;
37960
+ if (!ctx) {
37961
+ process.stderr.write("Error: Not authenticated\n");
37962
+ process.exit(1);
37963
+ }
37964
+ const args = {};
37965
+ if (opts.id !== void 0)
37966
+ args.id = opts.id;
37967
+ if (opts.cursor !== void 0)
37968
+ args.cursor = opts.cursor;
37969
+ if (opts.includeTotal !== void 0)
37970
+ args.include_total = opts.includeTotal;
37971
+ if (opts.limit !== void 0)
37972
+ args.limit = Number(opts.limit);
37973
+ await ctx.execute({
37974
+ method: "GET",
37975
+ path: "/v1/bank-accounts/{id}/transactions",
37976
+ args,
37977
+ queryParamKeys: ["limit", "cursor", "include_total"]
37978
+ });
37979
+ });
37955
37980
  }
37956
37981
 
37957
37982
  // build/commands/generated/companies.js
@@ -38344,10 +38369,10 @@ Examples:
38344
38369
  queryParamKeys: []
38345
38370
  });
38346
38371
  });
38347
- resource.command("create-custom-property").description(`Create a new custom property definition with a name, type (string, number, boolean, date, select), and optional default value.`).requiredOption("--name <value>", `name`).requiredOption("--type <value>", `type`).requiredOption("--slug <value>", `slug`).requiredOption("--entities <value>", `entities`).option("--api-only", `api_only`).option("--authorized-values <value>", `authorized_values`).addHelpText("after", `
38372
+ resource.command("create-custom-property").description(`Create a new custom property definition with a name, type (string, number, boolean, date, select), and optional default value.`).requiredOption("--name <value>", `name`).requiredOption("--type <value>", `type`).requiredOption("--slug <value>", `slug`).requiredOption("--entities <value>", `entities`).option("--api-only", `api_only`).option("--required", `required`).option("--authorized-values <value>", `authorized_values`).addHelpText("after", `
38348
38373
  Examples:
38349
38374
  hyperline custom-properties create-custom-property --name <name> --type <type> --slug <slug> --entities <entities>
38350
- hyperline custom-properties create-custom-property --name <name> --type <type> --slug <slug> --entities <entities> --api-only --authorized-values <authorized_values>
38375
+ hyperline custom-properties create-custom-property --name <name> --type <type> --slug <slug> --entities <entities> --api-only --required
38351
38376
  hyperline custom-properties create-custom-property --name <name> --type <type> --slug <slug> --entities <entities> --output json`).action(async (opts) => {
38352
38377
  const ctx = resource.parent?.opts()._ctx;
38353
38378
  if (!ctx) {
@@ -38367,6 +38392,8 @@ Examples:
38367
38392
  args.authorized_values = opts.authorizedValues;
38368
38393
  if (opts.apiOnly !== void 0)
38369
38394
  args.api_only = true;
38395
+ if (opts.required !== void 0)
38396
+ args.required = true;
38370
38397
  await ctx.execute({
38371
38398
  method: "POST",
38372
38399
  path: "/v1/custom-properties",
@@ -38374,10 +38401,10 @@ Examples:
38374
38401
  queryParamKeys: []
38375
38402
  });
38376
38403
  });
38377
- resource.command("update-custom-property").description(`Update an existing custom property definition by ID.`).requiredOption("--id <value>", `id parameter`).requiredOption("--name <value>", `name`).requiredOption("--type <value>", `type`).requiredOption("--slug <value>", `slug`).requiredOption("--entities <value>", `entities`).option("--api-only", `api_only`).option("--authorized-values <value>", `authorized_values`).addHelpText("after", `
38404
+ resource.command("update-custom-property").description(`Update an existing custom property definition by ID.`).requiredOption("--id <value>", `id parameter`).requiredOption("--name <value>", `name`).requiredOption("--type <value>", `type`).requiredOption("--slug <value>", `slug`).requiredOption("--entities <value>", `entities`).option("--api-only", `api_only`).option("--required", `required`).option("--authorized-values <value>", `authorized_values`).addHelpText("after", `
38378
38405
  Examples:
38379
38406
  hyperline custom-properties update-custom-property --id <id> --name <name> --type <type> --slug <slug> --entities <entities>
38380
- hyperline custom-properties update-custom-property --id <id> --name <name> --type <type> --slug <slug> --entities <entities> --api-only --authorized-values <authorized_values>
38407
+ hyperline custom-properties update-custom-property --id <id> --name <name> --type <type> --slug <slug> --entities <entities> --api-only --required
38381
38408
  hyperline custom-properties update-custom-property --id <id> --name <name> --type <type> --slug <slug> --entities <entities> --output json`).action(async (opts) => {
38382
38409
  const ctx = resource.parent?.opts()._ctx;
38383
38410
  if (!ctx) {
@@ -38399,6 +38426,8 @@ Examples:
38399
38426
  args.authorized_values = opts.authorizedValues;
38400
38427
  if (opts.apiOnly !== void 0)
38401
38428
  args.api_only = true;
38429
+ if (opts.required !== void 0)
38430
+ args.required = true;
38402
38431
  await ctx.execute({
38403
38432
  method: "PUT",
38404
38433
  path: "/v1/custom-properties/{id}",
@@ -38752,13 +38781,17 @@ Customer type.
38752
38781
  - \`corporate\`: The customer is a business entity.
38753
38782
  - \`person\`: The customer is a natural person.
38754
38783
  - \`automatically_created\`: The customer was automatically imported (e.g. from a data loader). This value cannot be used when creating/editing.
38755
- `).option("--currency <value>", `Currency code. See [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217#List_of_ISO_4217_currency_codes).`).option("--is-government-affiliated", `Indicates if the customer is affiliated with a government entity.`).option("--tax-ids <value>", `Customer tax IDs.`).option("--tax-rate-custom <number>", `Customer custom tax rate. If not defined, the rate will be automatically determined based on the customer's country, your country, and applicable legal requirements.`).option("--registration-number <value>", `Customer registration number.`).option("--external-id <value>", `ID of the customer in your system. This helps matching your customer with the one on Hyperline.`).option("--invoicing-entity-id <value>", `ID of the invoicing entity this customer will be attached to.`).option("--billing-address <value>", `Customer billing address.`).option("--shipping-address <value>", `Customer shipping address.`).option("--billing-email <value>", `Email to which all communications will be sent.`).option("--invoice-emails <value>", `Emails to which invoices will be sent (e.g. payer, finance team, accounting firm). If not defined, invoices will be sent to the \`billing_email\`; otherwise, they won't be sent to the \`billing_email\`.`).option("--language <value>", `Language used for invoices, emails, and hosted pages.`).option("--timezone <value>", `Customer timezone.`).option("--available-payment-methods <value>", `List of payment methods you allow your customer to pay with. You customer will be able to select one of them in their portal page and those will be the default options when creating a checkout session.`).option("--payment-method-type <value>", `Default payment method type used to pay subscriptions and one-off invoices.`).option("--bank-account <value>", `Custom bank account for the customer. If not defined and customer paying by bank transfer, the bank accounts configured in your account settings will be used.`).option("--custom-payment-delay <number>", `Custom payment terms in days. If not defined, the default one defined on the related invoicing entity will be used.`).option("--custom-payment-initiation-delay <number>", `Custom initiation delay in days before triggering payment. If not defined, the default one defined on the related invoicing entity will be used.`).option("--organisation-id <value>", `Parent organization ID to which the client is attached.`).option("--organisation-invoicing <value>", `
38784
+ `).option("--currency <value>", `Currency code. See [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217#List_of_ISO_4217_currency_codes).`).option("--is-government-affiliated", `Indicates if the customer is affiliated with a government entity.`).option("--tax-ids <value>", `Customer tax IDs.`).option("--tax-rate-custom <number>", `Customer custom tax rate. If not defined, the rate will be automatically determined based on the customer's country, your country, and applicable legal requirements.`).option("--taxability <value>", `Customer taxability.
38785
+
38786
+ - \`taxable\`: Taxes are automatically determined for the customer.
38787
+ - \`exempt\`: The customer is exempt from tax.
38788
+ `).option("--registration-number <value>", `Customer registration number.`).option("--external-id <value>", `ID of the customer in your system. This helps matching your customer with the one on Hyperline.`).option("--domain <value>", `Customer domain. If not defined, it is inferred from the billing email.`).option("--invoicing-entity-id <value>", `ID of the invoicing entity this customer will be attached to.`).option("--billing-address <value>", `Customer billing address.`).option("--shipping-address <value>", `Customer shipping address.`).option("--billing-email <value>", `Email to which all communications will be sent.`).option("--invoice-emails <value>", `Emails to which invoices will be sent (e.g. payer, finance team, accounting firm). If not defined, invoices will be sent to the \`billing_email\`; otherwise, they won't be sent to the \`billing_email\`.`).option("--language <value>", `Language used for invoices, emails, and hosted pages.`).option("--timezone <value>", `Customer timezone.`).option("--available-payment-methods <value>", `List of payment methods you allow your customer to pay with. You customer will be able to select one of them in their portal page and those will be the default options when creating a checkout session.`).option("--payment-method-type <value>", `Default payment method type used to pay subscriptions and one-off invoices.`).option("--bank-account <value>", `Custom bank account for the customer. If not defined and customer paying by bank transfer, the bank accounts configured in your account settings will be used.`).option("--custom-payment-delay <number>", `Custom payment terms in days. If not defined, the default one defined on the related invoicing entity will be used.`).option("--custom-payment-initiation-delay <number>", `Custom initiation delay in days before triggering payment. If not defined, the default one defined on the related invoicing entity will be used.`).option("--organisation-id <value>", `Parent organization ID to which the client is attached.`).option("--organisation-invoicing <value>", `
38756
38789
  How customer invoices are issued from the parent organisation.
38757
38790
 
38758
38791
  - \`none\`: Invoices will keep being issued from this customer.
38759
38792
  - \`every_invoice\`: Customer invoices will be issued from the organisation individually.
38760
38793
  - \`concat\`: Customer invoices will be grouped into a global parent invoice at a regular schedule (configured on the organisation).
38761
- `).option("--properties <value>", `Key/value pairs to store any metadata useful in your context.`).option("--custom-properties <value>", `A list of key value with the slug of the custom property as the key and the custom property value as value.`).option("--invoice-reminders-enabled <value>", `Indicates if invoice reminders are enabled for the customer.`).option("--price-book-id <value>", `Default price book ID assigned to the customer.`).addHelpText("after", `
38794
+ `).option("--properties <value>", `Key/value pairs to store any metadata useful in your context.`).option("--custom-properties <value>", `A list of key value with the slug of the custom property as the key and the custom property value as value.`).option("--invoice-reminders-enabled <value>", `Indicates if invoice reminders are enabled for the customer.`).option("--price-book-id <value>", `Default price book ID assigned to the customer.`).option("--owner-id <value>", `ID of the Hyperline user responsible for this customer and targeted by customer agent notifications.`).option("--follower-ids <value>", `IDs of Hyperline users following this customer.`).addHelpText("after", `
38762
38795
  Examples:
38763
38796
  hyperline customers create-customer
38764
38797
  hyperline customers create-customer --name <name> --type <type>
@@ -38777,10 +38810,14 @@ Examples:
38777
38810
  args.currency = opts.currency;
38778
38811
  if (opts.taxIds !== void 0)
38779
38812
  args.tax_ids = opts.taxIds;
38813
+ if (opts.taxability !== void 0)
38814
+ args.taxability = opts.taxability;
38780
38815
  if (opts.registrationNumber !== void 0)
38781
38816
  args.registration_number = opts.registrationNumber;
38782
38817
  if (opts.externalId !== void 0)
38783
38818
  args.external_id = opts.externalId;
38819
+ if (opts.domain !== void 0)
38820
+ args.domain = opts.domain;
38784
38821
  if (opts.invoicingEntityId !== void 0)
38785
38822
  args.invoicing_entity_id = opts.invoicingEntityId;
38786
38823
  if (opts.billingAddress !== void 0)
@@ -38813,6 +38850,10 @@ Examples:
38813
38850
  args.invoice_reminders_enabled = opts.invoiceRemindersEnabled;
38814
38851
  if (opts.priceBookId !== void 0)
38815
38852
  args.price_book_id = opts.priceBookId;
38853
+ if (opts.ownerId !== void 0)
38854
+ args.owner_id = opts.ownerId;
38855
+ if (opts.followerIds !== void 0)
38856
+ args.follower_ids = opts.followerIds;
38816
38857
  if (opts.taxRateCustom !== void 0)
38817
38858
  args.tax_rate_custom = Number(opts.taxRateCustom);
38818
38859
  if (opts.customPaymentDelay !== void 0)
@@ -38871,13 +38912,17 @@ Customer type.
38871
38912
  - \`corporate\`: The customer is a business entity.
38872
38913
  - \`person\`: The customer is a natural person.
38873
38914
  - \`automatically_created\`: The customer was automatically imported (e.g. from a data loader). This value cannot be used when creating/editing.
38874
- `).option("--currency <value>", `Customer currency. Can only be changed if the customer doesn't have existing invoices, a wallet or a payment method saved.`).option("--tax-ids <value>", `Customer tax IDs.`).option("--tax-rate-custom <number>", `Customer custom tax rate. If not defined, the rate will be automatically determined based on the customer's country, your country, and applicable legal requirements.`).option("--registration-number <value>", `Customer registration number.`).option("--is-government-affiliated", `Indicates if the customer is affiliated with a government entity.`).option("--external-id <value>", `ID of the customer in your system. This helps matching your customer with the one on Hyperline.`).option("--invoicing-entity-id <value>", `ID of the invoicing entity this customer will be attached to.`).option("--billing-address <value>", `Customer billing address.`).option("--shipping-address <value>", `Customer shipping address.`).option("--billing-email <value>", `Email to which all communications will be sent.`).option("--invoice-emails <value>", `Emails to which invoices will be sent (e.g. payer, finance team, accounting firm). If not defined, invoices will be sent to the \`billing_email\`; otherwise, they won't be sent to the \`billing_email\`.`).option("--language <value>", `Language used for invoices, emails, and hosted pages.`).option("--timezone <value>", `Customer timezone.`).option("--available-payment-methods <value>", `List of payment methods you allow your customer to pay with. You customer will be able to select one of them in their portal page and those will be the default options when creating a checkout session.`).option("--payment-method-type <value>", `Default payment method type used to pay subscriptions and one-off invoices.`).option("--payment-method-id <value>", `ID of the default payment method of the customer. Only applies to card and direct debit.`).option("--bank-account <value>", `Custom bank account for the customer. If not defined and customer paying by bank transfer, the bank accounts configured in your account settings will be used.`).option("--custom-payment-delay <number>", `Custom payment terms in days. If not defined, the default one defined on the related invoicing entity will be used.`).option("--custom-payment-initiation-delay <number>", `Custom initiation delay in days before triggering payment. If not defined, the default one defined on the related invoicing entity will be used.`).option("--organisation-id <value>", `Parent organization ID to which the client is attached.`).option("--organisation-invoicing <value>", `
38915
+ `).option("--currency <value>", `Customer currency. Can only be changed if the customer doesn't have existing invoices, a wallet or a payment method saved.`).option("--tax-ids <value>", `Customer tax IDs.`).option("--tax-rate-custom <number>", `Customer custom tax rate. If not defined, the rate will be automatically determined based on the customer's country, your country, and applicable legal requirements.`).option("--taxability <value>", `Customer taxability.
38916
+
38917
+ - \`taxable\`: Taxes are automatically determined for the customer.
38918
+ - \`exempt\`: The customer is exempt from tax.
38919
+ `).option("--registration-number <value>", `Customer registration number.`).option("--is-government-affiliated", `Indicates if the customer is affiliated with a government entity.`).option("--external-id <value>", `ID of the customer in your system. This helps matching your customer with the one on Hyperline.`).option("--domain <value>", `Customer domain. If not defined, it is inferred from the billing email.`).option("--invoicing-entity-id <value>", `ID of the invoicing entity this customer will be attached to.`).option("--billing-address <value>", `Customer billing address.`).option("--shipping-address <value>", `Customer shipping address.`).option("--billing-email <value>", `Email to which all communications will be sent.`).option("--invoice-emails <value>", `Emails to which invoices will be sent (e.g. payer, finance team, accounting firm). If not defined, invoices will be sent to the \`billing_email\`; otherwise, they won't be sent to the \`billing_email\`.`).option("--language <value>", `Language used for invoices, emails, and hosted pages.`).option("--timezone <value>", `Customer timezone.`).option("--available-payment-methods <value>", `List of payment methods you allow your customer to pay with. You customer will be able to select one of them in their portal page and those will be the default options when creating a checkout session.`).option("--payment-method-type <value>", `Default payment method type used to pay subscriptions and one-off invoices.`).option("--payment-method-id <value>", `ID of the default payment method of the customer. Only applies to card and direct debit.`).option("--bank-account <value>", `Custom bank account for the customer. If not defined and customer paying by bank transfer, the bank accounts configured in your account settings will be used.`).option("--custom-payment-delay <number>", `Custom payment terms in days. If not defined, the default one defined on the related invoicing entity will be used.`).option("--custom-payment-initiation-delay <number>", `Custom initiation delay in days before triggering payment. If not defined, the default one defined on the related invoicing entity will be used.`).option("--organisation-id <value>", `Parent organization ID to which the client is attached.`).option("--organisation-invoicing <value>", `
38875
38920
  How customer invoices are issued from the parent organisation.
38876
38921
 
38877
38922
  - \`none\`: Invoices will keep being issued from this customer.
38878
38923
  - \`every_invoice\`: Customer invoices will be issued from the organisation individually.
38879
38924
  - \`concat\`: Customer invoices will be grouped into a global parent invoice at a regular schedule (configured on the organisation).
38880
- `).option("--properties <value>", `Key/value pairs to store any metadata useful in your context.`).option("--custom-properties <value>", `A list of key value with the slug of the custom property as the key and the custom property value as value.`).option("--invoice-reminders-enabled <value>", `Indicates if invoice reminders are enabled for the customer.`).option("--price-book-id <value>", `Default price book ID assigned to the customer.`).addHelpText("after", `
38925
+ `).option("--properties <value>", `Key/value pairs to store any metadata useful in your context.`).option("--custom-properties <value>", `A list of key value with the slug of the custom property as the key and the custom property value as value.`).option("--invoice-reminders-enabled <value>", `Indicates if invoice reminders are enabled for the customer.`).option("--price-book-id <value>", `Default price book ID assigned to the customer.`).option("--owner-id <value>", `ID of the Hyperline user responsible for this customer and targeted by customer agent notifications.`).option("--follower-ids <value>", `IDs of Hyperline users following this customer.`).addHelpText("after", `
38881
38926
  Examples:
38882
38927
  hyperline customers update --id <id>
38883
38928
  hyperline customers update --id <id> --name <name> --type <type>
@@ -38898,10 +38943,14 @@ Examples:
38898
38943
  args.currency = opts.currency;
38899
38944
  if (opts.taxIds !== void 0)
38900
38945
  args.tax_ids = opts.taxIds;
38946
+ if (opts.taxability !== void 0)
38947
+ args.taxability = opts.taxability;
38901
38948
  if (opts.registrationNumber !== void 0)
38902
38949
  args.registration_number = opts.registrationNumber;
38903
38950
  if (opts.externalId !== void 0)
38904
38951
  args.external_id = opts.externalId;
38952
+ if (opts.domain !== void 0)
38953
+ args.domain = opts.domain;
38905
38954
  if (opts.invoicingEntityId !== void 0)
38906
38955
  args.invoicing_entity_id = opts.invoicingEntityId;
38907
38956
  if (opts.billingAddress !== void 0)
@@ -38936,6 +38985,10 @@ Examples:
38936
38985
  args.invoice_reminders_enabled = opts.invoiceRemindersEnabled;
38937
38986
  if (opts.priceBookId !== void 0)
38938
38987
  args.price_book_id = opts.priceBookId;
38988
+ if (opts.ownerId !== void 0)
38989
+ args.owner_id = opts.ownerId;
38990
+ if (opts.followerIds !== void 0)
38991
+ args.follower_ids = opts.followerIds;
38939
38992
  if (opts.taxRateCustom !== void 0)
38940
38993
  args.tax_rate_custom = Number(opts.taxRateCustom);
38941
38994
  if (opts.customPaymentDelay !== void 0)
@@ -39067,6 +39120,38 @@ Examples:
39067
39120
  queryParamKeys: []
39068
39121
  });
39069
39122
  });
39123
+ resource.command("get-customer-arr-history").description(`List every subscription-level ARR evolution for a customer, including previous and current fixed, variable, and total annual values in each subscription currency. Results are latest-first and paginated with limit/cursor.`).requiredOption("--id <value>", `id parameter`).option("--limit <number>", `Maximum number of items to return (1-100).`).option("--cursor <value>", `Opaque cursor returned in the previous response's \`next_cursor\`. Omit to fetch the first page.`).option("--occurred-at.gte <value>", `Return evolutions that occurred at or after this UTC date and time.`).option("--occurred-at.lte <value>", `Return evolutions that occurred at or before this UTC date and time.`).addHelpText("after", `
39124
+ Examples:
39125
+ hyperline customers get-customer-arr-history --id <id>
39126
+ hyperline customers get-customer-arr-history --id <id> --limit <limit> --cursor <cursor>`).action(async (opts) => {
39127
+ const ctx = resource.parent?.opts()._ctx;
39128
+ if (!ctx) {
39129
+ process.stderr.write("Error: Not authenticated\n");
39130
+ process.exit(1);
39131
+ }
39132
+ const args = {};
39133
+ if (opts.id !== void 0)
39134
+ args.id = opts.id;
39135
+ if (opts.cursor !== void 0)
39136
+ args.cursor = opts.cursor;
39137
+ if (opts["occurredAt.gte"] !== void 0)
39138
+ args.occurred_at__gte = opts["occurredAt.gte"];
39139
+ if (opts["occurredAt.lte"] !== void 0)
39140
+ args.occurred_at__lte = opts["occurredAt.lte"];
39141
+ if (opts.limit !== void 0)
39142
+ args.limit = Number(opts.limit);
39143
+ await ctx.execute({
39144
+ method: "GET",
39145
+ path: "/v1/customers/{id}/arr-history",
39146
+ args,
39147
+ queryParamKeys: [
39148
+ "limit",
39149
+ "cursor",
39150
+ "occurred_at__gte",
39151
+ "occurred_at__lte"
39152
+ ]
39153
+ });
39154
+ });
39070
39155
  resource.command("get-customer-valuation").description(`Compute aggregated valuation metrics for a customer across all active subscriptions, grouped by currency. Returns contract value, recurring contract value, and ARR for each subscription and aggregated totals. Optionally pass granularity (year/quarter/month) for period breakdown.`).requiredOption("--id <value>", `id parameter`).option("--granularity <value>", `Period granularity for the breakdown. When provided, contract value and recurring contract value include a \`by_period\` array.`).addHelpText("after", `
39071
39156
  Examples:
39072
39157
  hyperline customers get-customer-valuation --id <id>
@@ -39600,6 +39685,7 @@ Export name.
39600
39685
  - \`draft_invoices\`: Export all draft invoices, with customer and product information.
39601
39686
  - \`open_invoices\`: Export all open invoices, with customer and product information.
39602
39687
  - \`live_subscriptions\`: List of all active subscriptions line by line.
39688
+ - \`credit_balances\`: Monthly credit balance roll-forward per customer and credit type (opening, top-ups, consumption, expiry, closing).
39603
39689
  `).requiredOption("--file-type <value>", `
39604
39690
  Export file type.
39605
39691
 
@@ -40177,7 +40263,7 @@ Examples:
40177
40263
  - \`archived\`: A previous version of an invoice.
40178
40264
  - \`charged_on_parent\`: Invoice is charged on the parent customer.
40179
40265
  - \`pending_parent_concat\`: Invoice is pending invoices concatenation on the parent customer to be grouped.
40180
- - \`uncollectible\`: Invoice is uncollectible (bad debt).
40266
+ - \`uncollectible\`: Invoice is uncollectible (bad debt). Only metadata (properties, custom_note, custom_properties) can be updated in this status.
40181
40267
  `).option("--invoicing-entity-id <value>", `ID of the invoicing entity attached to the invoice.`).option("--number <value>", `Invoice number. If specified, the invoice will be considered as imported from an external source and the number will not be generated by Hyperline. You are responsible for avoiding duplicates and ensuring it does not impact the numbering sequence in Hyperline.`).option("--type <value>", `Type of the invoice.
40182
40268
 
40183
40269
  - \`invoice\`: Legal invoice to be paid by your customer.
@@ -40419,7 +40505,7 @@ Examples:
40419
40505
  queryParamKeys: []
40420
40506
  });
40421
40507
  });
40422
- resource.command("update").description(`Update a draft or grace_period invoice. Allows modifying line items, dates, and metadata before finalization.`).requiredOption("--id <value>", `id parameter`).option("--type <value>", `Type of the invoice.
40508
+ resource.command("update").description(`Update an invoice. Draft/grace_period allow modifying line items, dates, and metadata before finalization. Finalized invoices are restricted to metadata (paid: custom_note/purchase_order; uncollectible: properties/custom_note/custom_properties).`).requiredOption("--id <value>", `id parameter`).option("--type <value>", `Type of the invoice.
40423
40509
 
40424
40510
  - \`invoice\`: Legal invoice to be paid by your customer.
40425
40511
  - \`credit_note\`: Legal credit note cancelling an invoice and refunding your customer.
@@ -40591,7 +40677,7 @@ Examples:
40591
40677
  queryParamKeys: []
40592
40678
  });
40593
40679
  });
40594
- resource.command("delete-invoice-transaction").description(`Delete a scheduled transaction from an invoice. Only applies to transactions that haven't been processed yet.`).requiredOption("--id <value>", `id parameter`).requiredOption("--transaction-id <value>", `transactionId parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
40680
+ resource.command("delete-invoice-transaction").description(`Delete a scheduled transaction or wallet debit from an invoice.`).requiredOption("--id <value>", `id parameter`).requiredOption("--transaction-id <value>", `transactionId parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
40595
40681
  Examples:
40596
40682
  hyperline invoices-transactions delete-invoice-transaction --id <id> --transaction-id <transactionId>
40597
40683
  hyperline invoices-transactions delete-invoice-transaction --id <id> --transaction-id <transactionId> --output json`).action(async (opts) => {
@@ -41232,7 +41318,12 @@ Examples:
41232
41318
  ]
41233
41319
  });
41234
41320
  });
41235
- resource.command("create").description(`Create a new product with name, type (flat_fee, per_unit, usage, seat, etc.), and pricing configuration.`).requiredOption("--name <value>", `Product name.`).option("--description <value>", `Product description.`).option("--description-display-interval-dates", `Indicates if the dates of the interval should be automatically added in the product description on the invoices.`).option("--public-description <value>", `Public description of the product.`).option("--translations <value>", `Product name and description translations.`).option("--is-available-on-demand", `is_available_on_demand`).option("--is-available-on-subscription", `is_available_on_subscription`).option("--custom-properties <value>", `A list of key value with the slug of the custom property as the key and the custom property value as value.`).option("--accounting <value>", `Mapping invoicing entity ID/accounting settings.`).requiredOption("--type <value>", `Product type for fixed fee products.`).requiredOption("--price-configurations <value>", `Price configurations for the product.`).option("--aggregator <value>", `Aggregator configuration to automatically count seats from billable events. Only count aggregators are supported for seat products.`).option("--aggregator-id <value>", `ID of an existing aggregator to link to this product.`).option("--unit-name <value>", `Name of the unit (e.g., 'user', 'seat').`).option("--is-connected-seat-item", `When true, the seat count is automatically synced from an external source (e.g., CRM users).`).option("--credit-aggregators <value>", `Multiple aggregators with weights for multi-aggregator credit consumption. Cannot be used together with aggregator or aggregator_id.`).option("--low-credits-threshold <number>", `Threshold indicating a low level of credits.`).option("--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 <value>", `Products included in this bundle. Percentages must sum to 100.`).addHelpText("after", `
41321
+ resource.command("create").description(`Create a new product with name, type (flat_fee, per_unit, usage, seat, etc.), and pricing configuration.`).requiredOption("--name <value>", `Product name.`).option("--description <value>", `Product description.`).option("--description-display-interval-dates", `Indicates if the dates of the interval should be automatically added in the product description on the invoices.`).option("--public-description <value>", `Public description of the product.`).option("--translations <value>", `Product name and description translations.`).option("--is-available-on-demand", `is_available_on_demand`).option("--is-available-on-subscription", `is_available_on_subscription`).option("--custom-properties <value>", `A list of key value with the slug of the custom property as the key and the custom property value as value.`).option("--accounting <value>", `Mapping invoicing entity ID/accounting settings.`).requiredOption("--type <value>", `Product type for fixed fee products.`).requiredOption("--price-configurations <value>", `Price configurations for the product.`).option("--aggregator <value>", `Aggregator configuration to automatically count seats from billable events. Only count aggregators are supported for seat products.`).option("--aggregator-id <value>", `ID of an existing aggregator to link to this product.`).option("--unit-name <value>", `Name of the unit (e.g., 'user', 'seat').`).option("--is-connected-seat-item", `When true, the seat count is automatically synced from an external source (e.g., CRM users).`).option("--credit-aggregators <value>", `Multiple aggregators with weights for multi-aggregator credit consumption. Cannot be used together with aggregator or aggregator_id.`).option("--low-credits-threshold <number>", `Threshold indicating a low level of credits.`).option("--credits-grant-mode <value>", `
41322
+ How the periodic credit allowance is granted for partial billing periods.
41323
+
41324
+ - \`prorated\` (default): the granted credits are prorated to the elapsed period.
41325
+ - \`full_allowance\`: the full allowance is always granted (the invoice remains prorated).
41326
+ `).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 <value>", `Products included in this bundle. Percentages must sum to 100.`).addHelpText("after", `
41236
41327
  Examples:
41237
41328
  hyperline products create --name <name> --type <type> --price-configurations <price_configurations>
41238
41329
  hyperline products create --name <name> --type <type> --price-configurations <price_configurations> --description <description> --description-display-interval-dates
@@ -41267,6 +41358,8 @@ Examples:
41267
41358
  args.unit_name = opts.unitName;
41268
41359
  if (opts.creditAggregators !== void 0)
41269
41360
  args.credit_aggregators = opts.creditAggregators;
41361
+ if (opts.creditsGrantMode !== void 0)
41362
+ args.credits_grant_mode = opts.creditsGrantMode;
41270
41363
  if (opts.displayMode !== void 0)
41271
41364
  args.display_mode = opts.displayMode;
41272
41365
  if (opts.bundleItems !== void 0)
@@ -41368,6 +41461,32 @@ Examples:
41368
41461
  queryParamKeys: []
41369
41462
  });
41370
41463
  });
41464
+ resource.command("delete").description(`Permanently delete an archived product by ID. Products attached to subscriptions, plans, or templates cannot be deleted.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
41465
+ Examples:
41466
+ hyperline products delete --id <id>
41467
+ hyperline products delete --id <id> --output json`).action(async (opts) => {
41468
+ const ctx = resource.parent?.opts()._ctx;
41469
+ if (!ctx) {
41470
+ process.stderr.write("Error: Not authenticated\n");
41471
+ process.exit(1);
41472
+ }
41473
+ const args = {};
41474
+ if (opts.id !== void 0)
41475
+ args.id = opts.id;
41476
+ if (!opts.yes) {
41477
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
41478
+ if (!confirmed) {
41479
+ process.stdout.write("Aborted.\n");
41480
+ return;
41481
+ }
41482
+ }
41483
+ await ctx.execute({
41484
+ method: "DELETE",
41485
+ path: "/v1/products/{id}",
41486
+ args,
41487
+ queryParamKeys: []
41488
+ });
41489
+ });
41371
41490
  resource.command("unarchive").description(`Restore a previously archived product, making it available for new subscriptions again.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
41372
41491
  Examples:
41373
41492
  hyperline products unarchive --id <id>
@@ -41392,13 +41511,13 @@ Examples:
41392
41511
  // build/commands/generated/quotes.js
41393
41512
  function registerQuotesCommands(parent) {
41394
41513
  const resource = parent.command("quotes").description("Manage quotes");
41395
- resource.command("create").description(`Create a new quote for a customer. Use \`subscription\` (or \`template_id\`) for subscription quotes; use \`invoice\` for one-off quotes backed by a draft invoice with line items. Quotes can be sent for signature and converted to subscriptions or one-off invoices.`).option("--status <value>", `
41514
+ resource.command("create").description(`Create a new quote for a customer. Use \`subscription\` (or \`template_id\`) for subscription quotes; use \`invoice\` for one-off quotes backed by a draft invoice with line items. Quotes can be sent for signature and converted to subscriptions or one-off invoices. When creating from a quote template, do not combine \`template_id\` with subscription overrides for dates, contract terms, products, phases, coupons, discounts, prices, or seats in this call: first create the quote from \`template_id\` so template terms and contract documents are copied, then call \`update_quote\` with the subscription payload.`).option("--status <value>", `
41396
41515
  Quote status.
41397
41516
 
41398
41517
  - \`draft\`: The quote is a draft.
41399
41518
  - \`approved\`: The quote is approved and ready to be sent to the customer.
41400
41519
  - \`pending_signature\`: The quote is awaiting the customer's signature.
41401
- `).option("--owner-email <value>", `Email address of the Hyperline user acting as the quote owner. If not specified, the Hyperline account owner will be assigned.`).requiredOption("--customer-id <value>", `ID of the customer.`).option("--invoicing-entity-id <value>", `ID of the invoicing entity attached to the quote.`).option("--comments <value>", `Custom comments displayed on the quote.`).option("--terms <value>", `Custom quotation terms.`).option("--amount <number>", `Estimated contract value. For subscription quotes, defaults to the computed subscription value if not specified. For one-off quotes, this field is ignored \u2014 the amount is always derived from the linked invoice's \`amount_excluding_tax\`.`).option("--collect-payment-details <value>", `Collect customer payment method mandate during signature flow or not.`).option("--collect-custom-property-ids <value>", `IDs of the customer custom properties required to be filled during the signature flow.`).option("--require-tax-id <value>", `Require the customer to provide a tax ID during the signature flow.`).option("--display-quote-value <value>", `Display the total quote value on the quote.`).option("--display-quote-value-with-tax <value>", `Display the total quote value including tax on the quote. Only applies to \`one_off\` quotes.`).option("--display-taxes <value>", `Display tax breakdown on the quote.`).option("--display-price-tiers <value>", `Controls which price tiers are displayed on the quote.
41520
+ `).option("--owner-email <value>", `Email address of the Hyperline user acting as the quote owner. If not specified, the Hyperline account owner will be assigned.`).requiredOption("--customer-id <value>", `ID of the customer.`).option("--invoicing-entity-id <value>", `ID of the invoicing entity attached to the quote.`).option("--comments <value>", `Custom comments displayed on the quote.`).option("--terms <value>", `Custom quotation terms.`).option("--amount <number>", `Estimated contract value. For subscription quotes, defaults to the computed subscription value if not specified. For one-off quotes, this field is ignored \u2014 the amount is always derived from the linked invoice's \`amount_excluding_tax\`.`).option("--collect-payment-details <value>", `Collect customer payment method mandate during signature flow or not.`).option("--collect-custom-property-ids <value>", `IDs of the customer custom properties required to be filled during the signature flow.`).option("--contract-clause-ids <value>", `IDs of the contract clauses used in the quote terms.`).option("--require-tax-id <value>", `Require the customer to provide a tax ID during the signature flow.`).option("--display-quote-value <value>", `Display the total quote value on the quote.`).option("--display-quote-value-with-tax <value>", `Display the total quote value including tax on the quote. Only applies to \`one_off\` quotes.`).option("--display-taxes <value>", `Display tax breakdown on the quote.`).option("--display-price-tiers <value>", `Controls which price tiers are displayed on the quote.
41402
41521
 
41403
41522
  - \`all\`: Display all pricing tiers.
41404
41523
  - \`matching\`: Only display the tiers used to compute the price based on quantity.
@@ -41430,6 +41549,8 @@ Examples:
41430
41549
  args.collect_payment_details = opts.collectPaymentDetails;
41431
41550
  if (opts.collectCustomPropertyIds !== void 0)
41432
41551
  args.collect_custom_property_ids = opts.collectCustomPropertyIds;
41552
+ if (opts.contractClauseIds !== void 0)
41553
+ args.contract_clause_ids = opts.contractClauseIds;
41433
41554
  if (opts.requireTaxId !== void 0)
41434
41555
  args.require_tax_id = opts.requireTaxId;
41435
41556
  if (opts.displayQuoteValue !== void 0)
@@ -41686,12 +41807,12 @@ Examples:
41686
41807
  queryParamKeys: []
41687
41808
  });
41688
41809
  });
41689
- resource.command("update").description(`Update quote-level fields before a quote is finalized. On draft quotes, pass \`subscription\` to create or replace the draft subscription configuration, or pass \`invoice\` on a one-off quote to replace the linked draft invoice.`).requiredOption("--id <value>", `id parameter`).option("--owner-email <value>", `Email address of the Hyperline user acting as the quote owner.`).option("--comments <value>", `Custom comments displayed on the quote.`).option("--terms <value>", `Custom quotation terms.`).option("--amount <number>", `Estimated contract value. Set to \`null\` to clear the manually set value.`).option("--collect-payment-details <value>", `Collect customer payment method mandate during signature flow or not.`).option("--collect-custom-property-ids <value>", `IDs of the customer custom properties required to be filled during the signature flow.`).option("--require-tax-id <value>", `Require the customer to provide a tax ID during the signature flow.`).option("--display-quote-value <value>", `Display the total quote value on the quote.`).option("--display-quote-value-with-tax <value>", `Display the total quote value including tax on the quote. Only applies to \`one_off\` quotes.`).option("--display-taxes <value>", `Display tax breakdown on the quote.`).option("--display-price-tiers <value>", `Controls which price tiers are displayed on the quote.
41810
+ resource.command("update").description(`Update quote-level fields before a quote is finalized. On draft quotes, pass \`subscription\` to create or replace the draft subscription configuration, or pass \`invoice\` on a one-off quote to replace the linked draft invoice. For quotes created from \`template_id\`, use this tool for subscription overrides such as dates, contract terms, products, phases, coupons, discounts, prices, seats, and subscription custom properties. Omit \`terms\`, \`comments\`, and \`contract_clause_ids\` unless deliberately overriding template content.`).requiredOption("--id <value>", `id parameter`).option("--owner-email <value>", `Email address of the Hyperline user acting as the quote owner.`).option("--comments <value>", `Custom comments displayed on the quote.`).option("--terms <value>", `Custom quotation terms.`).option("--amount <number>", `Estimated contract value. Set to \`null\` to clear the manually set value.`).option("--collect-payment-details <value>", `Collect customer payment method mandate during signature flow or not.`).option("--collect-custom-property-ids <value>", `IDs of the customer custom properties required to be filled during the signature flow.`).option("--contract-clause-ids <value>", `IDs of the contract clauses used in the quote terms.`).option("--require-tax-id <value>", `Require the customer to provide a tax ID during the signature flow.`).option("--display-quote-value <value>", `Display the total quote value on the quote.`).option("--display-quote-value-with-tax <value>", `Display the total quote value including tax on the quote. Only applies to \`one_off\` quotes.`).option("--display-taxes <value>", `Display tax breakdown on the quote.`).option("--display-price-tiers <value>", `Controls which price tiers are displayed on the quote.
41690
41811
 
41691
41812
  - \`all\`: Display all pricing tiers.
41692
41813
  - \`matching\`: Only display the tiers used to compute the price based on quantity.
41693
41814
  - \`none\`: Hide all pricing tiers.
41694
- `).option("--display-phase-value <value>", `Display per-phase value breakdown on the quote.`).option("--display-first-invoice-amount <value>", `Display the first invoice amount on the quote.`).option("--display-documents-in-preview <value>", `Display attached documents in the quote preview.`).option("--display-subscription-on-update <value>", `Display subscription details on subscription update quotes.`).option("--generate-draft-invoices <value>", `When \`true\`, the invoice issued after signature stays in \`draft\` status instead of being emitted for payment. Use this when you want to review the final invoice manually before sending it. Defaults to \`false\`.`).option("--expires-at <value>", `Quote expiration date. UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format. Set to \`null\` to clear the expiration.`).option("--subscription <value>", `Subscription configuration constituting the quote. When provided on a draft quote, it creates or replaces the draft subscription attached to the quote.`).option("--invoice <value>", `Invoice configuration constituting the one-off quote. When provided on a draft one-off quote, it deletes the previous draft invoice and creates a fresh one linked to the quote. \`invoice.invoicing_entity_id\` is ignored on update \u2014 the quote's existing invoicing entity is reused.`).addHelpText("after", `
41815
+ `).option("--display-phase-value <value>", `Display per-phase value breakdown on the quote.`).option("--display-first-invoice-amount <value>", `Display the first invoice amount on the quote.`).option("--display-documents-in-preview <value>", `Display attached documents in the quote preview.`).option("--display-subscription-on-update <value>", `Display subscription details on subscription update quotes.`).option("--generate-draft-invoices <value>", `When \`true\`, the invoice issued after signature stays in \`draft\` status instead of being emitted for payment. Use this when you want to review the final invoice manually before sending it. Defaults to \`false\`.`).option("--crm-opportunity-id <value>", `ID of the related opportunity/deal in the connected CRM.`).option("--expires-at <value>", `Quote expiration date. UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format. Set to \`null\` to clear the expiration.`).option("--subscription <value>", `Subscription configuration constituting the quote. When provided on a draft quote, it creates or replaces the draft subscription attached to the quote.`).option("--invoice <value>", `Invoice configuration constituting the one-off quote. When provided on a draft one-off quote, it deletes the previous draft invoice and creates a fresh one linked to the quote. \`invoice.invoicing_entity_id\` is ignored on update \u2014 the quote's existing invoicing entity is reused.`).addHelpText("after", `
41695
41816
  Examples:
41696
41817
  hyperline quotes update --id <id>
41697
41818
  hyperline quotes update --id <id> --owner-email <owner_email> --comments <comments>
@@ -41714,6 +41835,8 @@ Examples:
41714
41835
  args.collect_payment_details = opts.collectPaymentDetails;
41715
41836
  if (opts.collectCustomPropertyIds !== void 0)
41716
41837
  args.collect_custom_property_ids = opts.collectCustomPropertyIds;
41838
+ if (opts.contractClauseIds !== void 0)
41839
+ args.contract_clause_ids = opts.contractClauseIds;
41717
41840
  if (opts.requireTaxId !== void 0)
41718
41841
  args.require_tax_id = opts.requireTaxId;
41719
41842
  if (opts.displayQuoteValue !== void 0)
@@ -41734,6 +41857,8 @@ Examples:
41734
41857
  args.display_subscription_on_update = opts.displaySubscriptionOnUpdate;
41735
41858
  if (opts.generateDraftInvoices !== void 0)
41736
41859
  args.generate_draft_invoices = opts.generateDraftInvoices;
41860
+ if (opts.crmOpportunityId !== void 0)
41861
+ args.crm_opportunity_id = opts.crmOpportunityId;
41737
41862
  if (opts.expiresAt !== void 0)
41738
41863
  args.expires_at = opts.expiresAt;
41739
41864
  if (opts.subscription !== void 0)
@@ -41789,6 +41914,25 @@ Examples:
41789
41914
  queryParamKeys: []
41790
41915
  });
41791
41916
  });
41917
+ resource.command("finalize").description(`Finalize a draft quote. The quote is submitted for approval when approval is required, otherwise it becomes approved and ready to be sent for signature.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
41918
+ Examples:
41919
+ hyperline quotes finalize --id <id>
41920
+ hyperline quotes finalize --id <id> --output json`).action(async (opts) => {
41921
+ const ctx = resource.parent?.opts()._ctx;
41922
+ if (!ctx) {
41923
+ process.stderr.write("Error: Not authenticated\n");
41924
+ process.exit(1);
41925
+ }
41926
+ const args = {};
41927
+ if (opts.id !== void 0)
41928
+ args.id = opts.id;
41929
+ await ctx.execute({
41930
+ method: "POST",
41931
+ path: "/v1/quotes/{id}/finalize",
41932
+ args,
41933
+ queryParamKeys: []
41934
+ });
41935
+ });
41792
41936
  resource.command("send").description(`Send a quote by email for customer signature. Requires the quote to be approved first.`).requiredOption("--id <value>", `id parameter`).requiredOption("--email <value>", `Email address to which the quote will be sent for signature.`).option("--message <value>", `Custom message used in the email content.`).addHelpText("after", `
41793
41937
  Examples:
41794
41938
  hyperline quotes send --id <id> --email <email>
@@ -41896,10 +42040,132 @@ Examples:
41896
42040
  });
41897
42041
  }
41898
42042
 
42043
+ // build/commands/generated/quotes-templates.js
42044
+ function registerQuotes_TemplatesCommands(parent) {
42045
+ const resource = parent.command("quotes-templates").description("Manage quotes > templates");
42046
+ resource.command("list-quote-templates").description(`List quote templates with pagination and optional filters for id, name, subscription_template_id, and search. Use template IDs to create quotes from reusable quote defaults.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--id <value>", `id`).option("--id.not <value>", `id__not`).option("--id.is-null <value>", `id__isNull`).option("--id.is-not-null <value>", `id__isNotNull`).option("--id.equals <value>", `id__equals`).option("--id.contains <value>", `id__contains`).option("--id.starts-with <value>", `id__startsWith`).option("--id.end-with <value>", `id__endWith`).option("--name <value>", `name`).option("--name.not <value>", `name__not`).option("--name.is-null <value>", `name__isNull`).option("--name.is-not-null <value>", `name__isNotNull`).option("--name.equals <value>", `name__equals`).option("--name.contains <value>", `name__contains`).option("--name.starts-with <value>", `name__startsWith`).option("--name.end-with <value>", `name__endWith`).option("--subscription-template-id <value>", `subscription_template_id`).option("--subscription-template-id.not <value>", `subscription_template_id__not`).option("--subscription-template-id.is-null <value>", `subscription_template_id__isNull`).option("--subscription-template-id.is-not-null <value>", `subscription_template_id__isNotNull`).option("--subscription-template-id.equals <value>", `subscription_template_id__equals`).option("--subscription-template-id.contains <value>", `subscription_template_id__contains`).option("--subscription-template-id.starts-with <value>", `subscription_template_id__startsWith`).option("--subscription-template-id.end-with <value>", `subscription_template_id__endWith`).option("--search <value>", `search`).addHelpText("after", `
42047
+ Examples:
42048
+ hyperline quotes-templates list-quote-templates
42049
+ hyperline quotes-templates list-quote-templates --take <take> --id <id>`).action(async (opts) => {
42050
+ const ctx = resource.parent?.opts()._ctx;
42051
+ if (!ctx) {
42052
+ process.stderr.write("Error: Not authenticated\n");
42053
+ process.exit(1);
42054
+ }
42055
+ const args = {};
42056
+ if (opts.id !== void 0)
42057
+ args.id = opts.id;
42058
+ if (opts["id.not"] !== void 0)
42059
+ args.id__not = opts["id.not"];
42060
+ if (opts["id.isNull"] !== void 0)
42061
+ args.id__isNull = opts["id.isNull"];
42062
+ if (opts["id.isNotNull"] !== void 0)
42063
+ args.id__isNotNull = opts["id.isNotNull"];
42064
+ if (opts["id.equals"] !== void 0)
42065
+ args.id__equals = opts["id.equals"];
42066
+ if (opts["id.contains"] !== void 0)
42067
+ args.id__contains = opts["id.contains"];
42068
+ if (opts["id.startsWith"] !== void 0)
42069
+ args.id__startsWith = opts["id.startsWith"];
42070
+ if (opts["id.endWith"] !== void 0)
42071
+ args.id__endWith = opts["id.endWith"];
42072
+ if (opts.name !== void 0)
42073
+ args.name = opts.name;
42074
+ if (opts["name.not"] !== void 0)
42075
+ args.name__not = opts["name.not"];
42076
+ if (opts["name.isNull"] !== void 0)
42077
+ args.name__isNull = opts["name.isNull"];
42078
+ if (opts["name.isNotNull"] !== void 0)
42079
+ args.name__isNotNull = opts["name.isNotNull"];
42080
+ if (opts["name.equals"] !== void 0)
42081
+ args.name__equals = opts["name.equals"];
42082
+ if (opts["name.contains"] !== void 0)
42083
+ args.name__contains = opts["name.contains"];
42084
+ if (opts["name.startsWith"] !== void 0)
42085
+ args.name__startsWith = opts["name.startsWith"];
42086
+ if (opts["name.endWith"] !== void 0)
42087
+ args.name__endWith = opts["name.endWith"];
42088
+ if (opts.subscriptionTemplateId !== void 0)
42089
+ args.subscription_template_id = opts.subscriptionTemplateId;
42090
+ if (opts["subscriptionTemplateId.not"] !== void 0)
42091
+ args.subscription_template_id__not = opts["subscriptionTemplateId.not"];
42092
+ if (opts["subscriptionTemplateId.isNull"] !== void 0)
42093
+ args.subscription_template_id__isNull = opts["subscriptionTemplateId.isNull"];
42094
+ if (opts["subscriptionTemplateId.isNotNull"] !== void 0)
42095
+ args.subscription_template_id__isNotNull = opts["subscriptionTemplateId.isNotNull"];
42096
+ if (opts["subscriptionTemplateId.equals"] !== void 0)
42097
+ args.subscription_template_id__equals = opts["subscriptionTemplateId.equals"];
42098
+ if (opts["subscriptionTemplateId.contains"] !== void 0)
42099
+ args.subscription_template_id__contains = opts["subscriptionTemplateId.contains"];
42100
+ if (opts["subscriptionTemplateId.startsWith"] !== void 0)
42101
+ args.subscription_template_id__startsWith = opts["subscriptionTemplateId.startsWith"];
42102
+ if (opts["subscriptionTemplateId.endWith"] !== void 0)
42103
+ args.subscription_template_id__endWith = opts["subscriptionTemplateId.endWith"];
42104
+ if (opts.search !== void 0)
42105
+ args.search = opts.search;
42106
+ if (opts.take !== void 0)
42107
+ args.take = Number(opts.take);
42108
+ if (opts.skip !== void 0)
42109
+ args.skip = Number(opts.skip);
42110
+ await ctx.execute({
42111
+ method: "GET",
42112
+ path: "/v1/quotes/templates",
42113
+ args,
42114
+ queryParamKeys: [
42115
+ "take",
42116
+ "skip",
42117
+ "id",
42118
+ "id__not",
42119
+ "id__isNull",
42120
+ "id__isNotNull",
42121
+ "id__equals",
42122
+ "id__contains",
42123
+ "id__startsWith",
42124
+ "id__endWith",
42125
+ "name",
42126
+ "name__not",
42127
+ "name__isNull",
42128
+ "name__isNotNull",
42129
+ "name__equals",
42130
+ "name__contains",
42131
+ "name__startsWith",
42132
+ "name__endWith",
42133
+ "subscription_template_id",
42134
+ "subscription_template_id__not",
42135
+ "subscription_template_id__isNull",
42136
+ "subscription_template_id__isNotNull",
42137
+ "subscription_template_id__equals",
42138
+ "subscription_template_id__contains",
42139
+ "subscription_template_id__startsWith",
42140
+ "subscription_template_id__endWith",
42141
+ "search"
42142
+ ]
42143
+ });
42144
+ });
42145
+ resource.command("get-quote-template").description(`Retrieve a quote template by ID with quote defaults, display options, attachments, and linked contract template/clause IDs.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
42146
+ Examples:
42147
+ hyperline quotes-templates get-quote-template --id <id>`).action(async (opts) => {
42148
+ const ctx = resource.parent?.opts()._ctx;
42149
+ if (!ctx) {
42150
+ process.stderr.write("Error: Not authenticated\n");
42151
+ process.exit(1);
42152
+ }
42153
+ const args = {};
42154
+ if (opts.id !== void 0)
42155
+ args.id = opts.id;
42156
+ await ctx.execute({
42157
+ method: "GET",
42158
+ path: "/v1/quotes/templates/{id}",
42159
+ args,
42160
+ queryParamKeys: []
42161
+ });
42162
+ });
42163
+ }
42164
+
41899
42165
  // build/commands/generated/subscriptions.js
41900
42166
  function registerSubscriptionsCommands(parent) {
41901
42167
  const resource = parent.command("subscriptions").description("Manage subscriptions");
41902
- resource.command("create-subscription-update").description(`Apply a single update to an existing subscription (e.g. change quantity, add/remove product, modify price).`).requiredOption("--id <value>", `id parameter`).requiredOption("--application-schedule <value>", `application_schedule`).option("--apply-at <value>", `The date when the update should be applied. Required when application_schedule is 'scheduled'.`).requiredOption("--payment-schedule <value>", `payment_schedule`).option("--charge-at <value>", `The date when the resulting subscription update should be charged. Required when payment_schedule is 'custom'. Must be in the future.`).requiredOption("--calculation-method <value>", `calculation_method`).option("--refund-method <value>", `Override the refund destination when the update generates a refund credit note (e.g. seat reduction). When omitted, falls back to the invoicing entity's \`creditNoteWalletRefundEnabled\` setting.`).requiredOption("--type <value>", `type`).requiredOption("--payload <value>", `payload`).addHelpText("after", `
42168
+ resource.command("create-subscription-update").description(`Apply a single update to an existing subscription (e.g. change quantity, add/remove product, modify price).`).requiredOption("--id <value>", `id parameter`).requiredOption("--application-schedule <value>", `application_schedule`).option("--apply-at <value>", `The date when the update should be applied. Required when application_schedule is 'scheduled'.`).requiredOption("--payment-schedule <value>", `payment_schedule`).option("--charge-at <value>", `The date when the resulting subscription update should be charged. Required when payment_schedule is 'custom'. Must be in the future.`).requiredOption("--calculation-method <value>", `calculation_method`).option("--precision <value>", `Granularity used to prorate the update amount. Defaults to 'calendar_days' when omitted, prorating on whole calendar days; 'milliseconds' prorates on the exact elapsed time, charging the precise partial period.`).option("--refund-method <value>", `Override the refund destination when the update generates a refund credit note (e.g. seat reduction). When omitted, falls back to the invoicing entity's \`creditNoteWalletRefundEnabled\` setting.`).requiredOption("--type <value>", `type`).requiredOption("--payload <value>", `payload`).addHelpText("after", `
41903
42169
  Examples:
41904
42170
  hyperline subscriptions create-subscription-update --id <id> --application-schedule <application_schedule> --payment-schedule <payment_schedule> --calculation-method <calculation_method> --type <type> --payload <payload>
41905
42171
  hyperline subscriptions create-subscription-update --id <id> --application-schedule <application_schedule> --payment-schedule <payment_schedule> --calculation-method <calculation_method> --type <type> --payload <payload> --apply-at <apply_at> --charge-at <charge_at>
@@ -41922,6 +42188,8 @@ Examples:
41922
42188
  args.charge_at = opts.chargeAt;
41923
42189
  if (opts.calculationMethod !== void 0)
41924
42190
  args.calculation_method = opts.calculationMethod;
42191
+ if (opts.precision !== void 0)
42192
+ args.precision = opts.precision;
41925
42193
  if (opts.refundMethod !== void 0)
41926
42194
  args.refund_method = opts.refundMethod;
41927
42195
  if (opts.type !== void 0)
@@ -41935,7 +42203,7 @@ Examples:
41935
42203
  queryParamKeys: []
41936
42204
  });
41937
42205
  });
41938
- resource.command("create-subscription-updates").description(`Apply multiple updates at once to an existing subscription in a single atomic operation.`).requiredOption("--id <value>", `id parameter`).requiredOption("--application-schedule <value>", `application_schedule`).option("--apply-at <value>", `The date when the update should be applied. Required when application_schedule is 'scheduled'.`).requiredOption("--payment-schedule <value>", `payment_schedule`).option("--charge-at <value>", `The date when the resulting subscription update should be charged. Required when payment_schedule is 'custom'. Must be in the future.`).requiredOption("--calculation-method <value>", `calculation_method`).option("--refund-method <value>", `Override the refund destination when the update generates a refund credit note (e.g. seat reduction). When omitted, falls back to the invoicing entity's \`creditNoteWalletRefundEnabled\` setting.`).requiredOption("--updates <value>", `updates`).addHelpText("after", `
42206
+ resource.command("create-subscription-updates").description(`Apply multiple updates at once to an existing subscription in a single atomic operation.`).requiredOption("--id <value>", `id parameter`).requiredOption("--application-schedule <value>", `application_schedule`).option("--apply-at <value>", `The date when the update should be applied. Required when application_schedule is 'scheduled'.`).requiredOption("--payment-schedule <value>", `payment_schedule`).option("--charge-at <value>", `The date when the resulting subscription update should be charged. Required when payment_schedule is 'custom'. Must be in the future.`).requiredOption("--calculation-method <value>", `calculation_method`).option("--precision <value>", `Granularity used to prorate the update amount. Defaults to 'calendar_days' when omitted, prorating on whole calendar days; 'milliseconds' prorates on the exact elapsed time, charging the precise partial period.`).option("--refund-method <value>", `Override the refund destination when the update generates a refund credit note (e.g. seat reduction). When omitted, falls back to the invoicing entity's \`creditNoteWalletRefundEnabled\` setting.`).requiredOption("--updates <value>", `updates`).addHelpText("after", `
41939
42207
  Examples:
41940
42208
  hyperline subscriptions create-subscription-updates --id <id> --application-schedule <application_schedule> --payment-schedule <payment_schedule> --calculation-method <calculation_method> --updates <updates>
41941
42209
  hyperline subscriptions create-subscription-updates --id <id> --application-schedule <application_schedule> --payment-schedule <payment_schedule> --calculation-method <calculation_method> --updates <updates> --apply-at <apply_at> --charge-at <charge_at>
@@ -41958,6 +42226,8 @@ Examples:
41958
42226
  args.charge_at = opts.chargeAt;
41959
42227
  if (opts.calculationMethod !== void 0)
41960
42228
  args.calculation_method = opts.calculationMethod;
42229
+ if (opts.precision !== void 0)
42230
+ args.precision = opts.precision;
41961
42231
  if (opts.refundMethod !== void 0)
41962
42232
  args.refund_method = opts.refundMethod;
41963
42233
  if (opts.updates !== void 0)
@@ -42016,7 +42286,7 @@ Examples:
42016
42286
  queryParamKeys: []
42017
42287
  });
42018
42288
  });
42019
- resource.command("pause").description(`Pause a subscription. Billing stops while paused. Optionally specify a reactivate_at date for automatic resumption.`).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.`).addHelpText("after", `
42289
+ 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", `
42020
42290
  Examples:
42021
42291
  hyperline subscriptions pause --id <id>
42022
42292
  hyperline subscriptions pause --id <id> --reactivate-at <reactivate_at>
@@ -42097,7 +42367,7 @@ Examples:
42097
42367
  queryParamKeys: []
42098
42368
  });
42099
42369
  });
42100
- resource.command("simulate-subscription-updates").description(`Preview the effect of updates on a subscription without applying them. Returns simulated invoice and billing impact.`).requiredOption("--id <value>", `id parameter`).requiredOption("--application-schedule <value>", `application_schedule`).option("--apply-at <value>", `The date when the update should be applied. Required when application_schedule is 'scheduled'.`).requiredOption("--payment-schedule <value>", `payment_schedule`).option("--charge-at <value>", `The date when the resulting subscription update should be charged. Required when payment_schedule is 'custom'. Must be in the future.`).requiredOption("--calculation-method <value>", `calculation_method`).option("--refund-method <value>", `Override the refund destination when the update generates a refund credit note (e.g. seat reduction). When omitted, falls back to the invoicing entity's \`creditNoteWalletRefundEnabled\` setting.`).requiredOption("--updates <value>", `updates`).addHelpText("after", `
42370
+ resource.command("simulate-subscription-updates").description(`Preview the effect of updates on a subscription without applying them. Returns simulated invoice and billing impact.`).requiredOption("--id <value>", `id parameter`).requiredOption("--application-schedule <value>", `application_schedule`).option("--apply-at <value>", `The date when the update should be applied. Required when application_schedule is 'scheduled'.`).requiredOption("--payment-schedule <value>", `payment_schedule`).option("--charge-at <value>", `The date when the resulting subscription update should be charged. Required when payment_schedule is 'custom'. Must be in the future.`).requiredOption("--calculation-method <value>", `calculation_method`).option("--precision <value>", `Granularity used to prorate the update amount. Defaults to 'calendar_days' when omitted, prorating on whole calendar days; 'milliseconds' prorates on the exact elapsed time, charging the precise partial period.`).option("--refund-method <value>", `Override the refund destination when the update generates a refund credit note (e.g. seat reduction). When omitted, falls back to the invoicing entity's \`creditNoteWalletRefundEnabled\` setting.`).requiredOption("--updates <value>", `updates`).addHelpText("after", `
42101
42371
  Examples:
42102
42372
  hyperline subscriptions simulate-subscription-updates --id <id> --application-schedule <application_schedule> --payment-schedule <payment_schedule> --calculation-method <calculation_method> --updates <updates>
42103
42373
  hyperline subscriptions simulate-subscription-updates --id <id> --application-schedule <application_schedule> --payment-schedule <payment_schedule> --calculation-method <calculation_method> --updates <updates> --apply-at <apply_at> --charge-at <charge_at>
@@ -42120,6 +42390,8 @@ Examples:
42120
42390
  args.charge_at = opts.chargeAt;
42121
42391
  if (opts.calculationMethod !== void 0)
42122
42392
  args.calculation_method = opts.calculationMethod;
42393
+ if (opts.precision !== void 0)
42394
+ args.precision = opts.precision;
42123
42395
  if (opts.refundMethod !== void 0)
42124
42396
  args.refund_method = opts.refundMethod;
42125
42397
  if (opts.updates !== void 0)
@@ -42555,6 +42827,38 @@ Examples:
42555
42827
  queryParamKeys: []
42556
42828
  });
42557
42829
  });
42830
+ resource.command("get-subscription-arr-history").description(`List every ARR evolution for a subscription, including previous and current fixed, variable, and total annual values in the subscription currency. Results are latest-first and paginated with limit/cursor.`).requiredOption("--id <value>", `id parameter`).option("--limit <number>", `Maximum number of items to return (1-100).`).option("--cursor <value>", `Opaque cursor returned in the previous response's \`next_cursor\`. Omit to fetch the first page.`).option("--occurred-at.gte <value>", `Return evolutions that occurred at or after this UTC date and time.`).option("--occurred-at.lte <value>", `Return evolutions that occurred at or before this UTC date and time.`).addHelpText("after", `
42831
+ Examples:
42832
+ hyperline subscriptions get-subscription-arr-history --id <id>
42833
+ hyperline subscriptions get-subscription-arr-history --id <id> --limit <limit> --cursor <cursor>`).action(async (opts) => {
42834
+ const ctx = resource.parent?.opts()._ctx;
42835
+ if (!ctx) {
42836
+ process.stderr.write("Error: Not authenticated\n");
42837
+ process.exit(1);
42838
+ }
42839
+ const args = {};
42840
+ if (opts.id !== void 0)
42841
+ args.id = opts.id;
42842
+ if (opts.cursor !== void 0)
42843
+ args.cursor = opts.cursor;
42844
+ if (opts["occurredAt.gte"] !== void 0)
42845
+ args.occurred_at__gte = opts["occurredAt.gte"];
42846
+ if (opts["occurredAt.lte"] !== void 0)
42847
+ args.occurred_at__lte = opts["occurredAt.lte"];
42848
+ if (opts.limit !== void 0)
42849
+ args.limit = Number(opts.limit);
42850
+ await ctx.execute({
42851
+ method: "GET",
42852
+ path: "/v1/subscriptions/{id}/arr-history",
42853
+ args,
42854
+ queryParamKeys: [
42855
+ "limit",
42856
+ "cursor",
42857
+ "occurred_at__gte",
42858
+ "occurred_at__lte"
42859
+ ]
42860
+ });
42861
+ });
42558
42862
  resource.command("get-subscription-valuation").description(`Compute valuation metrics for a subscription: contract value (total/invoiced/remaining), recurring contract value, and ARR (fixed + variable). Optionally pass granularity (year/quarter/month) for period breakdown.`).requiredOption("--id <value>", `id parameter`).option("--granularity <value>", `Period granularity for the breakdown. When provided, contract value and recurring contract value include a \`by_period\` array.`).addHelpText("after", `
42559
42863
  Examples:
42560
42864
  hyperline subscriptions get-subscription-valuation --id <id>
@@ -42846,7 +43150,7 @@ Examples:
42846
43150
  ]
42847
43151
  });
42848
43152
  });
42849
- resource.command("create-subscription-transition").description(`Create a transition from one subscription to another, configured from a subscription, plan, or template. Can be applied immediately or scheduled.`).requiredOption("--source-subscription-id <value>", `The ID of the subscription to transition from`).option("--name <value>", `An optional name for the transition`).option("--calculation-method <value>", `The calculation method to use for the transition. 'do_not_charge' will not generate any transition invoice. 'pro_rata' will generate a prorated invoice for the remaining period.`).option("--billing-cycle-transition-method <value>", `The billing cycle transition method to use. 'keep_current_billing_cycle' will keep the current billing cycle dates if possible. 'align_to_new_billing_cycle' will align the billing cycle to the transition date.`).requiredOption("--application-schedule <value>", `Whether the transition should be applied 'immediately' or 'scheduled' for a specific date. Past dates within the current billing period are supported and will be applied immediately.`).option("--transition-date <value>", `The date at which the transition should occur. Only applicable if the application schedule is 'scheduled'. Can be a past date within the current billing period. UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.`).requiredOption("--target-subscription <value>", `The configuration of the subscription to transition to`).addHelpText("after", `
43153
+ resource.command("create-subscription-transition").description(`Create a transition from one subscription to another, configured from a subscription, plan, or template. Can be applied immediately or scheduled.`).requiredOption("--source-subscription-id <value>", `The ID of the subscription to transition from`).option("--name <value>", `An optional name for the transition`).option("--calculation-method <value>", `The calculation method to use for the transition. 'do_not_charge' will not generate any transition invoice. 'pro_rata' will generate a prorated invoice for the remaining period. 'refund_and_reinvoice' (only available with application_schedule 'last_renewal') issues a credit note for what was invoiced for the current period and a separate invoice for the new configuration.`).option("--billing-cycle-transition-method <value>", `The billing cycle transition method to use. 'keep_current_billing_cycle' will keep the current billing cycle dates if possible. 'align_to_new_billing_cycle' will align the billing cycle to the transition date.`).requiredOption("--application-schedule <value>", `When the transition should be applied: 'immediately', 'scheduled' for a specific date, or 'last_renewal' to apply it retroactively to the start of the current billing period (refunding what was already invoiced for that period and re-charging the new configuration). Past dates within the current billing period are supported and will be applied immediately.`).option("--transition-date <value>", `The date at which the transition should occur. Only applicable if the application schedule is 'scheduled'. Can be a past date within the current billing period. UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.`).requiredOption("--target-subscription <value>", `The configuration of the subscription to transition to`).addHelpText("after", `
42850
43154
  Examples:
42851
43155
  hyperline subscriptions-transitions create-subscription-transition --source-subscription-id <source_subscription_id> --application-schedule <application_schedule> --target-subscription <target_subscription>
42852
43156
  hyperline subscriptions-transitions create-subscription-transition --source-subscription-id <source_subscription_id> --application-schedule <application_schedule> --target-subscription <target_subscription> --name <name> --calculation-method <calculation_method>
@@ -43244,10 +43548,10 @@ Examples:
43244
43548
  queryParamKeys: []
43245
43549
  });
43246
43550
  });
43247
- resource.command("load").description(`Add credits to a wallet by charging the customer's payment method. The customer must have an active payment method.`).requiredOption("--id <value>", `id parameter`).option("--amount <number>", `Amount to be loaded onto the wallet. A corresponding invoice to pay will be generated. Expressed in currency's smallest unit.`).option("--amount-free <number>", `Amount free/offered to be loaded onto the wallet. No invoice is generated. Expressed in currency's smallest unit.`).option("--document-status <value>", `Indicates the status of the document (credit note in case of free top-up or invoice)`).addHelpText("after", `
43551
+ resource.command("load").description(`Add paid credits by charging the customer's payment method, or add free credits by issuing a credit note.`).requiredOption("--id <value>", `id parameter`).option("--type <value>", `Wallet load type. Use \`paid\` to collect payment from the customer's payment method, or \`free\` to grant credits without collecting payment.`).option("--amount <number>", `Amount to be loaded onto the wallet as free credits. A corresponding credit note will be generated and no payment is collected. Expressed in currency's smallest unit.`).option("--comment <value>", `Internal comment stored on the wallet transaction for context.`).option("--document-status <value>", `Indicates the status of the generated credit note for free top-ups.`).option("--bank-account-id <value>", `Bank account ID to use when recording a paid wallet load by bank transfer.`).option("--reference <value>", `Reference stored on the generated payment document for a paid wallet load.`).addHelpText("after", `
43248
43552
  Examples:
43249
43553
  hyperline wallets load --id <id>
43250
- hyperline wallets load --id <id> --amount <amount> --amount-free <amount_free>
43554
+ hyperline wallets load --id <id> --type <type> --amount <amount>
43251
43555
  hyperline wallets load --id <id> --output json`).action(async (opts) => {
43252
43556
  const ctx = resource.parent?.opts()._ctx;
43253
43557
  if (!ctx) {
@@ -43257,12 +43561,18 @@ Examples:
43257
43561
  const args = {};
43258
43562
  if (opts.id !== void 0)
43259
43563
  args.id = opts.id;
43564
+ if (opts.type !== void 0)
43565
+ args.type = opts.type;
43566
+ if (opts.comment !== void 0)
43567
+ args.comment = opts.comment;
43260
43568
  if (opts.documentStatus !== void 0)
43261
43569
  args.document_status = opts.documentStatus;
43570
+ if (opts.bankAccountId !== void 0)
43571
+ args.bank_account_id = opts.bankAccountId;
43572
+ if (opts.reference !== void 0)
43573
+ args.reference = opts.reference;
43262
43574
  if (opts.amount !== void 0)
43263
43575
  args.amount = Number(opts.amount);
43264
- if (opts.amountFree !== void 0)
43265
- args.amount_free = Number(opts.amountFree);
43266
43576
  await ctx.execute({
43267
43577
  method: "POST",
43268
43578
  path: "/v1/wallets/{id}/load",
@@ -43491,6 +43801,7 @@ function registerAllCommands(program2) {
43491
43801
  registerProductsCommands(program2);
43492
43802
  registerPrice_ConfigurationsCommands(program2);
43493
43803
  registerQuotesCommands(program2);
43804
+ registerQuotes_TemplatesCommands(program2);
43494
43805
  registerSubscriptions_TemplatesCommands(program2);
43495
43806
  registerSubscriptionsCommands(program2);
43496
43807
  registerSubscriptions_TransitionsCommands(program2);
@@ -57328,62 +57639,442 @@ var AmountSchema = external_exports.number().openapi({
57328
57639
  description: `Monetary amount. ${amountDescription}`
57329
57640
  });
57330
57641
 
57331
- // ../../node_modules/decimal.js/decimal.mjs
57332
- var EXP_LIMIT = 9e15;
57333
- var MAX_DIGITS = 1e9;
57334
- var NUMERALS = "0123456789abcdef";
57335
- var LN10 = "2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058";
57336
- var PI = "3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789";
57337
- var DEFAULTS = {
57338
- // These values must be integers within the stated ranges (inclusive).
57339
- // Most of these values can be changed at run-time using the `Decimal.config` method.
57340
- // The maximum number of significant digits of the result of a calculation or base conversion.
57341
- // E.g. `Decimal.config({ precision: 20 });`
57342
- precision: 20,
57343
- // 1 to MAX_DIGITS
57344
- // The rounding mode used when rounding to `precision`.
57345
- //
57346
- // ROUND_UP 0 Away from zero.
57347
- // ROUND_DOWN 1 Towards zero.
57348
- // ROUND_CEIL 2 Towards +Infinity.
57349
- // ROUND_FLOOR 3 Towards -Infinity.
57350
- // ROUND_HALF_UP 4 Towards nearest neighbour. If equidistant, up.
57351
- // ROUND_HALF_DOWN 5 Towards nearest neighbour. If equidistant, down.
57352
- // ROUND_HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour.
57353
- // ROUND_HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity.
57354
- // ROUND_HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.
57355
- //
57356
- // E.g.
57357
- // `Decimal.rounding = 4;`
57358
- // `Decimal.rounding = Decimal.ROUND_HALF_UP;`
57359
- rounding: 4,
57360
- // 0 to 8
57361
- // The modulo mode used when calculating the modulus: a mod n.
57362
- // The quotient (q = a / n) is calculated according to the corresponding rounding mode.
57363
- // The remainder (r) is calculated as: r = a - n * q.
57364
- //
57365
- // UP 0 The remainder is positive if the dividend is negative, else is negative.
57366
- // DOWN 1 The remainder has the same sign as the dividend (JavaScript %).
57367
- // FLOOR 3 The remainder has the same sign as the divisor (Python %).
57368
- // HALF_EVEN 6 The IEEE 754 remainder function.
57369
- // EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)). Always positive.
57370
- //
57371
- // Truncated division (1), floored division (3), the IEEE 754 remainder (6), and Euclidian
57372
- // division (9) are commonly used for the modulus operation. The other rounding modes can also
57373
- // be used, but they may not give useful results.
57374
- modulo: 1,
57375
- // 0 to 9
57376
- // The exponent value at and beneath which `toString` returns exponential notation.
57377
- // JavaScript numbers: -7
57378
- toExpNeg: -7,
57379
- // 0 to -EXP_LIMIT
57380
- // The exponent value at and above which `toString` returns exponential notation.
57381
- // JavaScript numbers: 21
57382
- toExpPos: 21,
57383
- // 0 to EXP_LIMIT
57384
- // The minimum exponent value, beneath which underflow to zero occurs.
57385
- // JavaScript numbers: -324 (5e-324)
57386
- minE: -EXP_LIMIT,
57642
+ // ../hyperline-monitoring/build/context/context.js
57643
+ import { AsyncLocalStorage } from "node:async_hooks";
57644
+ var executionContextStorage = new AsyncLocalStorage();
57645
+ function getExecutionContext() {
57646
+ return executionContextStorage.getStore();
57647
+ }
57648
+
57649
+ // ../hyperline-monitoring/build/context/correlationId.js
57650
+ import { AsyncLocalStorage as AsyncLocalStorage2 } from "node:async_hooks";
57651
+ var correlationIdStorage = new AsyncLocalStorage2();
57652
+ function getCorrelationId() {
57653
+ return correlationIdStorage.getStore();
57654
+ }
57655
+
57656
+ // ../hyperline-config/build/index.js
57657
+ import "dotenv/config";
57658
+ import * as stackTraceParser from "stacktrace-parser";
57659
+ function coerceBoolean() {
57660
+ return external_exports.any().refine((value) => ["true", "false"].includes(value), {
57661
+ message: "Expected boolean"
57662
+ }).transform((value) => (
57663
+ // biome-ignore lint/complexity/noUselessTernary: ignore
57664
+ value === "true" ? true : false
57665
+ ));
57666
+ }
57667
+ var types = {
57668
+ string: external_exports.coerce.string,
57669
+ number: external_exports.coerce.number,
57670
+ boolean: coerceBoolean,
57671
+ enum: external_exports.enum
57672
+ };
57673
+ function getConfig(schema, testValues) {
57674
+ const validator = external_exports.object(Object.fromEntries(Object.entries(schema).map(([key, zodType]) => {
57675
+ if (zodType instanceof ZodOptional) {
57676
+ return [key, external_exports.string().optional()];
57677
+ }
57678
+ return [key, external_exports.string()];
57679
+ })));
57680
+ const processEnv = process.env;
57681
+ const isTestMode = processEnv.NODE_ENV === "test";
57682
+ const envVariables = {
57683
+ ...processEnv,
57684
+ ...isTestMode && testValues ? Object.fromEntries(Object.entries(testValues).map(([key, value]) => [key, String(value)])) : {}
57685
+ };
57686
+ const packageName = envVariables.npm_package_name;
57687
+ const parseProcessEnvResult = validator.safeParse(envVariables);
57688
+ if (!parseProcessEnvResult.success) {
57689
+ const parsedStackTrace = stackTraceParser.parse(parseProcessEnvResult.error.stack ?? "");
57690
+ const getConfigCallLine = parsedStackTrace.find((line) => {
57691
+ return !line.file?.includes("hyperline-config") && (line.file?.includes("apps/") || line.file?.includes("core/") || line.file?.includes("packages/"));
57692
+ });
57693
+ const callerFile = getConfigCallLine?.file;
57694
+ console.error(`Invalid environment variables for service \`${packageName}\`: \`${callerFile}\``);
57695
+ console.error(parseProcessEnvResult.error.format());
57696
+ process.exit(1);
57697
+ }
57698
+ const coercion = external_exports.object(schema);
57699
+ return coercion.parse(parseProcessEnvResult.data);
57700
+ }
57701
+
57702
+ // ../hyperline-monitoring/build/config.js
57703
+ var config2 = getConfig({
57704
+ // config
57705
+ APP_VERSION: types.string().optional(),
57706
+ DD_SERVICE: types.string().optional(),
57707
+ LOGGER_CONSOLE_ENABLED: types.boolean().optional(),
57708
+ LOGGER_STDOUT_ENABLED: types.boolean().optional(),
57709
+ NODE_ENV: types.enum(["local", "test", "staging", "sandbox", "production"]),
57710
+ EVENT_LOOP_MONITORING_ENABLED: types.boolean().optional(),
57711
+ MEMORY_MONITORING_ENABLED: types.boolean().optional(),
57712
+ MEMORY_MONITORING_INTERVAL_MS: types.number().optional()
57713
+ // secrets
57714
+ }, {
57715
+ APP_VERSION: void 0,
57716
+ DD_SERVICE: void 0,
57717
+ LOGGER_CONSOLE_ENABLED: false,
57718
+ LOGGER_STDOUT_ENABLED: false,
57719
+ EVENT_LOOP_MONITORING_ENABLED: false,
57720
+ MEMORY_MONITORING_ENABLED: false,
57721
+ MEMORY_MONITORING_INTERVAL_MS: 3e4,
57722
+ NODE_ENV: "test"
57723
+ });
57724
+
57725
+ // ../hyperline-monitoring/build/logger/logger.js
57726
+ import * as util from "node:util";
57727
+ import prune2 from "json-prune";
57728
+ import * as winston from "winston";
57729
+
57730
+ // ../hyperline-monitoring/build/logger/formatting/format.js
57731
+ import prune from "json-prune";
57732
+ var REDACTED_HEADER_KEY_PATTERN = /authorization|authenticate|cookie|secret|token|credential|signature|jwt|api[_-]?key|access[_-]?token|refresh[_-]?token|private[_-]?key/i;
57733
+ function jsonFormat(info) {
57734
+ const prunedInfo = JSON.parse(prune(info));
57735
+ for (const [key, value] of Object.entries(prunedInfo)) {
57736
+ info[key] = value;
57737
+ }
57738
+ return info;
57739
+ }
57740
+ function addMetadata({ getCorrelationId: getCorrelationId2, getExecutionContext: getExecutionContext2 }) {
57741
+ return (info) => {
57742
+ const correlationId = getCorrelationId2();
57743
+ const executionContext = getExecutionContext2();
57744
+ let traceContext;
57745
+ return {
57746
+ ...info,
57747
+ ...executionContext ?? {},
57748
+ ...traceContext ?? {},
57749
+ correlationId
57750
+ };
57751
+ };
57752
+ }
57753
+ function transformErrorEnrich(info, { depth }) {
57754
+ if (depth <= 0) {
57755
+ return info;
57756
+ }
57757
+ Object.entries(info).forEach(([key, value]) => {
57758
+ let newValue = value;
57759
+ if (newValue instanceof Error) {
57760
+ newValue = {
57761
+ ...newValue,
57762
+ // Copy error properties manually because they're not enumerable
57763
+ level: newValue.level,
57764
+ stack: newValue.stack,
57765
+ message: newValue.message,
57766
+ name: newValue.name
57767
+ };
57768
+ }
57769
+ if (newValue instanceof Object) {
57770
+ newValue = transformErrorEnrich(newValue, { depth: depth - 1 });
57771
+ }
57772
+ const isPropertyWritable = Object.getOwnPropertyDescriptor(info, key)?.writable ?? true;
57773
+ if (isPropertyWritable && newValue !== value) {
57774
+ info[key] = newValue;
57775
+ }
57776
+ });
57777
+ return info;
57778
+ }
57779
+ function transformPrune(info) {
57780
+ Object.entries(info).forEach(([key, value]) => {
57781
+ if (typeof value === "function") {
57782
+ return;
57783
+ }
57784
+ const newValue = value instanceof Object ? JSON.parse(prune(value, { depthDecr: 6 })) : value;
57785
+ const isPropertyWritable = Object.getOwnPropertyDescriptor(info, key)?.writable ?? true;
57786
+ if (isPropertyWritable && newValue !== value) {
57787
+ info[key] = newValue;
57788
+ }
57789
+ });
57790
+ return info;
57791
+ }
57792
+ function transformAxiosError(info) {
57793
+ Object.entries(info).forEach(([key, value]) => {
57794
+ if (typeof value === "object" && value?.name === "AxiosError") {
57795
+ info[key] = formatAxiosError(value);
57796
+ }
57797
+ });
57798
+ return info;
57799
+ }
57800
+ function formatAxiosError(error48) {
57801
+ if (!isRecord(error48) || error48.name !== "AxiosError") {
57802
+ return error48;
57803
+ }
57804
+ const request = isRecord(error48.config) ? error48.config : void 0;
57805
+ const response = isRecord(error48.response) ? error48.response : void 0;
57806
+ return {
57807
+ name: error48.name,
57808
+ message: error48.message,
57809
+ code: error48.code,
57810
+ request: {
57811
+ method: request?.method,
57812
+ url: request?.url,
57813
+ baseURL: request?.baseURL,
57814
+ params: request?.params,
57815
+ headers: redactHeaders({ headers: request?.headers }),
57816
+ "axios-retry": request?.["axios-retry"]
57817
+ },
57818
+ response: {
57819
+ status: response?.status,
57820
+ statusText: response?.statusText,
57821
+ headers: redactHeaders({ headers: response?.headers }),
57822
+ data: response?.data
57823
+ }
57824
+ };
57825
+ }
57826
+ function redactHeaders({ headers }) {
57827
+ if (!isRecord(headers)) {
57828
+ return headers;
57829
+ }
57830
+ return Object.fromEntries(Object.entries(headers).map(([headerKey, headerValue]) => [
57831
+ headerKey,
57832
+ REDACTED_HEADER_KEY_PATTERN.test(headerKey) ? "<redacted>" : headerValue
57833
+ ]));
57834
+ }
57835
+ function isRecord(value) {
57836
+ return typeof value === "object" && value !== null && !Array.isArray(value);
57837
+ }
57838
+
57839
+ // ../hyperline-monitoring/build/logger/formatting/routePath.js
57840
+ function transformUrlIntoRoutePath({ params, originalUrl }) {
57841
+ let routePath = originalUrl;
57842
+ for (const [param, value] of Object.entries(params ?? {})) {
57843
+ const strValue = Array.isArray(value) ? value.join("/") : value;
57844
+ routePath = routePath.replace(strValue, `:${param}`);
57845
+ }
57846
+ return routePath.split("?")[0] ?? routePath;
57847
+ }
57848
+
57849
+ // ../hyperline-monitoring/build/logger/formatting/http.js
57850
+ function logHttpRequest(logger2, request, extra) {
57851
+ const { message, metadata } = transform2(request);
57852
+ logger2.info(`HTTP REQ - ${message} ${extra?.postfix || ""}`, {
57853
+ ...metadata,
57854
+ ...extra?.metadata ?? {}
57855
+ });
57856
+ }
57857
+ function logHttpResponse(logger2, response, responseTime, extra) {
57858
+ const { request, statusCode, responseBody, responseHeaders } = response;
57859
+ const { message, metadata } = transform2(request);
57860
+ const readableResponseTime = responseTime ? getReadableTime(responseTime) : void 0;
57861
+ const responseMetadata = {
57862
+ statusCode,
57863
+ responseTime,
57864
+ responseBody,
57865
+ // Redacted so secrets (authorization/cookie/token/…) never reach the logs
57866
+ // while diagnostic headers (e.g. rate-limit headers on a 429) stay visible.
57867
+ responseHeaders: responseHeaders === void 0 ? void 0 : redactHeaders({ headers: responseHeaders })
57868
+ };
57869
+ logger2.info(`HTTP RES - ${message} ${statusCode} ${readableResponseTime || ""} ${extra?.postfix || ""}`, {
57870
+ ...metadata,
57871
+ ...responseMetadata,
57872
+ ...extra?.metadata ?? {}
57873
+ });
57874
+ }
57875
+ function transform2(request) {
57876
+ const method = request.method.toUpperCase();
57877
+ const message = `${method} ${request.originalUrl}`;
57878
+ const metadata = {};
57879
+ metadata.method = method;
57880
+ metadata.url = request.url;
57881
+ metadata.path = request.path;
57882
+ metadata.hostname = request.hostname;
57883
+ metadata.originalUrl = request.originalUrl;
57884
+ metadata.requestBody = request.body;
57885
+ metadata.routePath = transformUrlIntoRoutePath(request);
57886
+ metadata.apiKeyEnd = request.headers["authorization"]?.slice(-6);
57887
+ return { message, metadata };
57888
+ }
57889
+ function getReadableTime(time3) {
57890
+ return time3 < 1e4 ? `${time3}ms` : `${Math.round(time3 / 1e3)}s`;
57891
+ }
57892
+
57893
+ // ../hyperline-monitoring/build/logger/utils/network.js
57894
+ import * as os2 from "node:os";
57895
+ function getIpAddress() {
57896
+ const interfaces = Object.values(os2.networkInterfaces()).flat().filter((networkInterface) => {
57897
+ return networkInterface !== void 0;
57898
+ });
57899
+ const mainInterface = interfaces.find(({ family, internal }) => family === "IPv4" && internal === false);
57900
+ return mainInterface ? mainInterface.address : null;
57901
+ }
57902
+
57903
+ // ../hyperline-monitoring/build/logger/logger.js
57904
+ function buildLoggerFactory({ config: config4, context }) {
57905
+ const defaultMeta = {
57906
+ env: context.env,
57907
+ service: context.service,
57908
+ version: context.version,
57909
+ pid: process.pid,
57910
+ ppid: process.ppid,
57911
+ host: getIpAddress()
57912
+ };
57913
+ const transports2 = [];
57914
+ if (config4.enableConsoleTransport) {
57915
+ transports2.push(createTransportConsole());
57916
+ }
57917
+ if (config4.enableStdoutTransport) {
57918
+ transports2.push(createTransportStdout());
57919
+ }
57920
+ if (Object.values(config4).every((value) => !value)) {
57921
+ transports2.push(createTransportSilent());
57922
+ }
57923
+ for (const transport of transports2) {
57924
+ transport.on("error", (error48) => {
57925
+ console.error(`Unable to log to transport=${transport.name}: ${error48.message} ${JSON.stringify(error48)}`);
57926
+ });
57927
+ }
57928
+ const internalLogger = winston.createLogger({
57929
+ transports: transports2,
57930
+ defaultMeta,
57931
+ format: winston.format.combine(winston.format.splat(), winston.format(addMetadata({ getCorrelationId, getExecutionContext }))(), winston.format(transformErrorEnrich)({ depth: 5 }), winston.format(transformPrune)(), winston.format(transformAxiosError)(), winston.format.timestamp()),
57932
+ exitOnError: false
57933
+ });
57934
+ function createLogger3({ serviceName }) {
57935
+ const logger2 = internalLogger.child({ subService: serviceName });
57936
+ return {
57937
+ debug: bindLogger(logger2, "debug"),
57938
+ info: bindLogger(logger2, "info"),
57939
+ warn: bindLogger(logger2, "warn"),
57940
+ error: bindLogger(logger2, "error"),
57941
+ on: logger2.on.bind(logger2),
57942
+ end: logger2.end.bind(logger2)
57943
+ };
57944
+ }
57945
+ return {
57946
+ createLogger: createLogger3
57947
+ };
57948
+ }
57949
+ function bindLogger(logger2, severity) {
57950
+ return (message, data) => {
57951
+ logger2[severity].bind(logger2)(message, preserveReservedKeys(data));
57952
+ };
57953
+ }
57954
+ function preserveReservedKeys(data) {
57955
+ if (!data)
57956
+ return;
57957
+ return Object.fromEntries(Object.entries(data).map(([key, value]) => {
57958
+ let finalKey = key;
57959
+ if (key === "status") {
57960
+ finalKey = "_status";
57961
+ } else if (key === "service") {
57962
+ finalKey = "_service";
57963
+ }
57964
+ return [finalKey, value];
57965
+ }));
57966
+ }
57967
+ var verboseLevels = ["warn", "error", "debug"];
57968
+ function createTransportConsole() {
57969
+ return new winston.transports.Console({
57970
+ level: "debug",
57971
+ handleExceptions: true,
57972
+ format: winston.format.combine(winston.format(jsonFormat)(), winston.format((info) => {
57973
+ const { level, message, ...others } = info;
57974
+ const parts = [message];
57975
+ if (Object.keys(others).length > 0 && verboseLevels.includes(level)) {
57976
+ const rawOthers = JSON.parse(prune2(others));
57977
+ parts.push(util.inspect(rawOthers, false, 4, true));
57978
+ }
57979
+ info.message = parts.filter((part) => !!part).join("\n");
57980
+ return info;
57981
+ })(), winston.format.colorize(), winston.format.printf(({ timestamp, level, message, service = "?" }) => {
57982
+ const result = `[${timestamp}] ${level} ${service}: ${message}`;
57983
+ return result.replace(/\\n/g, "\n");
57984
+ }))
57985
+ });
57986
+ }
57987
+ function createTransportStdout() {
57988
+ return new winston.transports.Console({
57989
+ level: "debug",
57990
+ handleExceptions: true,
57991
+ format: winston.format.combine(winston.format(jsonFormat)(), winston.format.timestamp(), winston.format.json())
57992
+ });
57993
+ }
57994
+ function createTransportSilent() {
57995
+ return new winston.transports.Console({
57996
+ silent: true
57997
+ });
57998
+ }
57999
+
58000
+ // ../hyperline-monitoring/build/logger/instance.js
58001
+ var loggerFactory = buildLoggerFactory({
58002
+ config: {
58003
+ enableConsoleTransport: config2.LOGGER_CONSOLE_ENABLED ?? false,
58004
+ enableStdoutTransport: config2.LOGGER_STDOUT_ENABLED ?? false
58005
+ },
58006
+ context: {
58007
+ env: config2.NODE_ENV,
58008
+ service: config2.DD_SERVICE ?? "api",
58009
+ version: config2.APP_VERSION
58010
+ }
58011
+ });
58012
+ var createLogger2 = loggerFactory.createLogger;
58013
+ var logger = loggerFactory.createLogger({ serviceName: "default" });
58014
+
58015
+ // ../hyperline-monitoring/build/tracing/tracing.js
58016
+ import tracer from "dd-trace";
58017
+
58018
+ // ../hyperline-lib/build/utils/aws.js
58019
+ import { GetBucketLocationCommand, S3Client } from "@aws-sdk/client-s3";
58020
+ import { GetCallerIdentityCommand, STSClient } from "@aws-sdk/client-sts";
58021
+
58022
+ // ../../node_modules/decimal.js/decimal.mjs
58023
+ var EXP_LIMIT = 9e15;
58024
+ var MAX_DIGITS = 1e9;
58025
+ var NUMERALS = "0123456789abcdef";
58026
+ var LN10 = "2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058";
58027
+ var PI = "3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789";
58028
+ var DEFAULTS = {
58029
+ // These values must be integers within the stated ranges (inclusive).
58030
+ // Most of these values can be changed at run-time using the `Decimal.config` method.
58031
+ // The maximum number of significant digits of the result of a calculation or base conversion.
58032
+ // E.g. `Decimal.config({ precision: 20 });`
58033
+ precision: 20,
58034
+ // 1 to MAX_DIGITS
58035
+ // The rounding mode used when rounding to `precision`.
58036
+ //
58037
+ // ROUND_UP 0 Away from zero.
58038
+ // ROUND_DOWN 1 Towards zero.
58039
+ // ROUND_CEIL 2 Towards +Infinity.
58040
+ // ROUND_FLOOR 3 Towards -Infinity.
58041
+ // ROUND_HALF_UP 4 Towards nearest neighbour. If equidistant, up.
58042
+ // ROUND_HALF_DOWN 5 Towards nearest neighbour. If equidistant, down.
58043
+ // ROUND_HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour.
58044
+ // ROUND_HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity.
58045
+ // ROUND_HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.
58046
+ //
58047
+ // E.g.
58048
+ // `Decimal.rounding = 4;`
58049
+ // `Decimal.rounding = Decimal.ROUND_HALF_UP;`
58050
+ rounding: 4,
58051
+ // 0 to 8
58052
+ // The modulo mode used when calculating the modulus: a mod n.
58053
+ // The quotient (q = a / n) is calculated according to the corresponding rounding mode.
58054
+ // The remainder (r) is calculated as: r = a - n * q.
58055
+ //
58056
+ // UP 0 The remainder is positive if the dividend is negative, else is negative.
58057
+ // DOWN 1 The remainder has the same sign as the dividend (JavaScript %).
58058
+ // FLOOR 3 The remainder has the same sign as the divisor (Python %).
58059
+ // HALF_EVEN 6 The IEEE 754 remainder function.
58060
+ // EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)). Always positive.
58061
+ //
58062
+ // Truncated division (1), floored division (3), the IEEE 754 remainder (6), and Euclidian
58063
+ // division (9) are commonly used for the modulus operation. The other rounding modes can also
58064
+ // be used, but they may not give useful results.
58065
+ modulo: 1,
58066
+ // 0 to 9
58067
+ // The exponent value at and beneath which `toString` returns exponential notation.
58068
+ // JavaScript numbers: -7
58069
+ toExpNeg: -7,
58070
+ // 0 to -EXP_LIMIT
58071
+ // The exponent value at and above which `toString` returns exponential notation.
58072
+ // JavaScript numbers: 21
58073
+ toExpPos: 21,
58074
+ // 0 to EXP_LIMIT
58075
+ // The minimum exponent value, beneath which underflow to zero occurs.
58076
+ // JavaScript numbers: -324 (5e-324)
58077
+ minE: -EXP_LIMIT,
57387
58078
  // -1 to -EXP_LIMIT
57388
58079
  // The maximum exponent value, above which overflow to Infinity occurs.
57389
58080
  // JavaScript numbers: 308 (1.7976931348623157e+308)
@@ -59149,7 +59840,7 @@ function ceil(x) {
59149
59840
  function clamp(x, min2, max2) {
59150
59841
  return new this(x).clamp(min2, max2);
59151
59842
  }
59152
- function config2(obj) {
59843
+ function config3(obj) {
59153
59844
  if (!obj || typeof obj !== "object") throw Error(decimalError + "Object expected");
59154
59845
  var i, p, v, useDefaults = obj.defaults === true, ps = [
59155
59846
  "precision",
@@ -59303,7 +59994,7 @@ function clone2(obj) {
59303
59994
  Decimal2.ROUND_HALF_CEIL = 7;
59304
59995
  Decimal2.ROUND_HALF_FLOOR = 8;
59305
59996
  Decimal2.EUCLID = 9;
59306
- Decimal2.config = Decimal2.set = config2;
59997
+ Decimal2.config = Decimal2.set = config3;
59307
59998
  Decimal2.clone = clone2;
59308
59999
  Decimal2.isDecimal = isDecimalInstance;
59309
60000
  Decimal2.abs = abs;
@@ -61457,447 +62148,84 @@ var countriesAndCurrencies = (
61457
62148
  countryCode: "VN",
61458
62149
  countryName: "Vietnam",
61459
62150
  currencyCode: "VND",
61460
- population: "89571130",
61461
- capital: "Hanoi",
61462
- continentName: "Asia"
61463
- },
61464
- {
61465
- countryCode: "VU",
61466
- countryName: "Vanuatu",
61467
- currencyCode: "VUV",
61468
- population: "221552",
61469
- capital: "Port Vila",
61470
- continentName: "Oceania"
61471
- },
61472
- {
61473
- countryCode: "WF",
61474
- countryName: "Wallis and Futuna",
61475
- currencyCode: "XPF",
61476
- population: "16025",
61477
- capital: "Mata-Utu",
61478
- continentName: "Oceania"
61479
- },
61480
- {
61481
- countryCode: "WS",
61482
- countryName: "Samoa",
61483
- currencyCode: "WST",
61484
- population: "192001",
61485
- capital: "Apia",
61486
- continentName: "Oceania"
61487
- },
61488
- {
61489
- countryCode: "XK",
61490
- countryName: "Kosovo",
61491
- currencyCode: "EUR",
61492
- population: "1800000",
61493
- capital: "Pristina",
61494
- continentName: "Europe"
61495
- },
61496
- {
61497
- countryCode: "YE",
61498
- countryName: "Yemen",
61499
- currencyCode: "YER",
61500
- population: "23495361",
61501
- capital: "Sanaa",
61502
- continentName: "Asia"
61503
- },
61504
- {
61505
- countryCode: "YT",
61506
- countryName: "Mayotte",
61507
- currencyCode: "EUR",
61508
- population: "159042",
61509
- capital: "Mamoudzou",
61510
- continentName: "Africa"
61511
- },
61512
- {
61513
- countryCode: "ZA",
61514
- countryName: "South Africa",
61515
- currencyCode: "ZAR",
61516
- population: "49000000",
61517
- capital: "Pretoria",
61518
- continentName: "Africa"
61519
- },
61520
- {
61521
- countryCode: "ZM",
61522
- countryName: "Zambia",
61523
- currencyCode: "ZMW",
61524
- population: "13460305",
61525
- capital: "Lusaka",
61526
- continentName: "Africa"
61527
- },
61528
- {
61529
- countryCode: "ZW",
61530
- countryName: "Zimbabwe",
61531
- currencyCode: "ZWL",
61532
- population: "13061000",
61533
- capital: "Harare",
61534
- continentName: "Africa"
61535
- }
61536
- ]
61537
- );
61538
-
61539
- // ../hyperline-monitoring/build/context/context.js
61540
- import { AsyncLocalStorage } from "node:async_hooks";
61541
- var executionContextStorage = new AsyncLocalStorage();
61542
- function getExecutionContext() {
61543
- return executionContextStorage.getStore();
61544
- }
61545
-
61546
- // ../hyperline-monitoring/build/context/correlationId.js
61547
- import { AsyncLocalStorage as AsyncLocalStorage2 } from "node:async_hooks";
61548
- var correlationIdStorage = new AsyncLocalStorage2();
61549
- function getCorrelationId() {
61550
- return correlationIdStorage.getStore();
61551
- }
61552
-
61553
- // ../hyperline-config/build/index.js
61554
- import "dotenv/config";
61555
- import * as stackTraceParser from "stacktrace-parser";
61556
- function coerceBoolean() {
61557
- return external_exports.any().refine((value) => ["true", "false"].includes(value), {
61558
- message: "Expected boolean"
61559
- }).transform((value) => (
61560
- // biome-ignore lint/complexity/noUselessTernary: ignore
61561
- value === "true" ? true : false
61562
- ));
61563
- }
61564
- var types = {
61565
- string: external_exports.coerce.string,
61566
- number: external_exports.coerce.number,
61567
- boolean: coerceBoolean,
61568
- enum: external_exports.enum
61569
- };
61570
- function getConfig(schema, testValues) {
61571
- const validator = external_exports.object(Object.fromEntries(Object.entries(schema).map(([key, zodType]) => {
61572
- if (zodType instanceof ZodOptional) {
61573
- return [key, external_exports.string().optional()];
61574
- }
61575
- return [key, external_exports.string()];
61576
- })));
61577
- const processEnv = process.env;
61578
- const isTestMode = processEnv.NODE_ENV === "test";
61579
- const envVariables = {
61580
- ...processEnv,
61581
- ...isTestMode && testValues ? Object.fromEntries(Object.entries(testValues).map(([key, value]) => [key, String(value)])) : {}
61582
- };
61583
- const packageName = envVariables.npm_package_name;
61584
- const parseProcessEnvResult = validator.safeParse(envVariables);
61585
- if (!parseProcessEnvResult.success) {
61586
- const parsedStackTrace = stackTraceParser.parse(parseProcessEnvResult.error.stack ?? "");
61587
- const getConfigCallLine = parsedStackTrace.find((line) => {
61588
- return !line.file?.includes("hyperline-config") && (line.file?.includes("apps/") || line.file?.includes("core/") || line.file?.includes("packages/"));
61589
- });
61590
- const callerFile = getConfigCallLine?.file;
61591
- console.error(`Invalid environment variables for service \`${packageName}\`: \`${callerFile}\``);
61592
- console.error(parseProcessEnvResult.error.format());
61593
- process.exit(1);
61594
- }
61595
- const coercion = external_exports.object(schema);
61596
- return coercion.parse(parseProcessEnvResult.data);
61597
- }
61598
-
61599
- // ../hyperline-monitoring/build/config.js
61600
- var config3 = getConfig({
61601
- // config
61602
- APP_VERSION: types.string().optional(),
61603
- DD_SERVICE: types.string().optional(),
61604
- LOGGER_CONSOLE_ENABLED: types.boolean().optional(),
61605
- LOGGER_STDOUT_ENABLED: types.boolean().optional(),
61606
- NODE_ENV: types.enum(["local", "test", "staging", "sandbox", "production"]),
61607
- EVENT_LOOP_MONITORING_ENABLED: types.boolean().optional(),
61608
- MEMORY_MONITORING_ENABLED: types.boolean().optional(),
61609
- MEMORY_MONITORING_INTERVAL_MS: types.number().optional()
61610
- // secrets
61611
- }, {
61612
- APP_VERSION: void 0,
61613
- DD_SERVICE: void 0,
61614
- LOGGER_CONSOLE_ENABLED: false,
61615
- LOGGER_STDOUT_ENABLED: false,
61616
- EVENT_LOOP_MONITORING_ENABLED: false,
61617
- MEMORY_MONITORING_ENABLED: false,
61618
- MEMORY_MONITORING_INTERVAL_MS: 3e4,
61619
- NODE_ENV: "test"
61620
- });
61621
-
61622
- // ../hyperline-monitoring/build/logger/logger.js
61623
- import * as util from "node:util";
61624
- import prune2 from "json-prune";
61625
- import * as winston from "winston";
61626
-
61627
- // ../hyperline-monitoring/build/logger/formatting/format.js
61628
- import prune from "json-prune";
61629
- function jsonFormat(info) {
61630
- const prunedInfo = JSON.parse(prune(info));
61631
- for (const [key, value] of Object.entries(prunedInfo)) {
61632
- info[key] = value;
61633
- }
61634
- return info;
61635
- }
61636
- function addMetadata({ getCorrelationId: getCorrelationId2, getExecutionContext: getExecutionContext2 }) {
61637
- return (info) => {
61638
- const correlationId = getCorrelationId2();
61639
- const executionContext = getExecutionContext2();
61640
- let traceContext;
61641
- return {
61642
- ...info,
61643
- ...executionContext ?? {},
61644
- ...traceContext ?? {},
61645
- correlationId
61646
- };
61647
- };
61648
- }
61649
- function transformErrorEnrich(info, { depth }) {
61650
- if (depth <= 0) {
61651
- return info;
61652
- }
61653
- Object.entries(info).forEach(([key, value]) => {
61654
- let newValue = value;
61655
- if (newValue instanceof Error) {
61656
- newValue = {
61657
- ...newValue,
61658
- // Copy error properties manually because they're not enumerable
61659
- level: newValue.level,
61660
- stack: newValue.stack,
61661
- message: newValue.message,
61662
- name: newValue.name
61663
- };
61664
- }
61665
- if (newValue instanceof Object) {
61666
- newValue = transformErrorEnrich(newValue, { depth: depth - 1 });
61667
- }
61668
- const isPropertyWritable = Object.getOwnPropertyDescriptor(info, key)?.writable ?? true;
61669
- if (isPropertyWritable && newValue !== value) {
61670
- info[key] = newValue;
61671
- }
61672
- });
61673
- return info;
61674
- }
61675
- function transformPrune(info) {
61676
- Object.entries(info).forEach(([key, value]) => {
61677
- if (typeof value === "function") {
61678
- return;
61679
- }
61680
- const newValue = value instanceof Object ? JSON.parse(prune(value, { depthDecr: 6 })) : value;
61681
- const isPropertyWritable = Object.getOwnPropertyDescriptor(info, key)?.writable ?? true;
61682
- if (isPropertyWritable && newValue !== value) {
61683
- info[key] = newValue;
61684
- }
61685
- });
61686
- return info;
61687
- }
61688
- function transformAxiosError(info) {
61689
- Object.entries(info).forEach(([key, value]) => {
61690
- if (typeof value === "object" && value?.name === "AxiosError") {
61691
- info[key] = formatAxiosError(value);
61692
- }
61693
- });
61694
- return info;
61695
- }
61696
- function formatAxiosError(error48) {
61697
- if (!isRecord(error48) || error48.name !== "AxiosError") {
61698
- return error48;
61699
- }
61700
- const request = isRecord(error48.config) ? error48.config : void 0;
61701
- const response = isRecord(error48.response) ? error48.response : void 0;
61702
- return {
61703
- name: error48.name,
61704
- message: error48.message,
61705
- code: error48.code,
61706
- request: {
61707
- method: request?.method,
61708
- url: request?.url,
61709
- baseURL: request?.baseURL,
61710
- params: request?.params,
61711
- headers: request?.headers,
61712
- "axios-retry": request?.["axios-retry"]
62151
+ population: "89571130",
62152
+ capital: "Hanoi",
62153
+ continentName: "Asia"
61713
62154
  },
61714
- response: {
61715
- status: response?.status,
61716
- statusText: response?.statusText,
61717
- headers: response?.headers,
61718
- data: response?.data
61719
- }
61720
- };
61721
- }
61722
- function isRecord(value) {
61723
- return typeof value === "object" && value !== null && !Array.isArray(value);
61724
- }
61725
-
61726
- // ../hyperline-monitoring/build/logger/formatting/routePath.js
61727
- function transformUrlIntoRoutePath({ params, originalUrl }) {
61728
- let routePath = originalUrl;
61729
- for (const [param, value] of Object.entries(params ?? {})) {
61730
- const strValue = Array.isArray(value) ? value.join("/") : value;
61731
- routePath = routePath.replace(strValue, `:${param}`);
61732
- }
61733
- return routePath.split("?")[0] ?? routePath;
61734
- }
61735
-
61736
- // ../hyperline-monitoring/build/logger/formatting/http.js
61737
- function logHttpRequest(logger2, request, extra) {
61738
- const { message, metadata } = transform2(request);
61739
- logger2.info(`HTTP REQ - ${message} ${extra?.postfix || ""}`, {
61740
- ...metadata,
61741
- ...extra?.metadata ?? {}
61742
- });
61743
- }
61744
- function logHttpResponse(logger2, response, responseTime, extra) {
61745
- const { request, statusCode, responseBody } = response;
61746
- const { message, metadata } = transform2(request);
61747
- const readableResponseTime = responseTime ? getReadableTime(responseTime) : void 0;
61748
- const responseMetadata = {
61749
- statusCode,
61750
- responseTime,
61751
- responseBody
61752
- };
61753
- logger2.info(`HTTP RES - ${message} ${statusCode} ${readableResponseTime || ""} ${extra?.postfix || ""}`, {
61754
- ...metadata,
61755
- ...responseMetadata,
61756
- ...extra?.metadata ?? {}
61757
- });
61758
- }
61759
- function transform2(request) {
61760
- const method = request.method.toUpperCase();
61761
- const message = `${method} ${request.originalUrl}`;
61762
- const metadata = {};
61763
- metadata.method = method;
61764
- metadata.url = request.url;
61765
- metadata.path = request.path;
61766
- metadata.hostname = request.hostname;
61767
- metadata.originalUrl = request.originalUrl;
61768
- metadata.requestBody = request.body;
61769
- metadata.routePath = transformUrlIntoRoutePath(request);
61770
- metadata.apiKeyEnd = request.headers["authorization"]?.slice(-6);
61771
- return { message, metadata };
61772
- }
61773
- function getReadableTime(time3) {
61774
- return time3 < 1e4 ? `${time3}ms` : `${Math.round(time3 / 1e3)}s`;
61775
- }
61776
-
61777
- // ../hyperline-monitoring/build/logger/utils/network.js
61778
- import * as os2 from "node:os";
61779
- function getIpAddress() {
61780
- const interfaces = Object.values(os2.networkInterfaces()).flat().filter((networkInterface) => {
61781
- return networkInterface !== void 0;
61782
- });
61783
- const mainInterface = interfaces.find(({ family, internal }) => family === "IPv4" && internal === false);
61784
- return mainInterface ? mainInterface.address : null;
61785
- }
61786
-
61787
- // ../hyperline-monitoring/build/logger/logger.js
61788
- function buildLoggerFactory({ config: config4, context }) {
61789
- const defaultMeta = {
61790
- env: context.env,
61791
- service: context.service,
61792
- version: context.version,
61793
- pid: process.pid,
61794
- ppid: process.ppid,
61795
- host: getIpAddress()
61796
- };
61797
- const transports2 = [];
61798
- if (config4.enableConsoleTransport) {
61799
- transports2.push(createTransportConsole());
61800
- }
61801
- if (config4.enableStdoutTransport) {
61802
- transports2.push(createTransportStdout());
61803
- }
61804
- if (Object.values(config4).every((value) => !value)) {
61805
- transports2.push(createTransportSilent());
61806
- }
61807
- for (const transport of transports2) {
61808
- transport.on("error", (error48) => {
61809
- console.error(`Unable to log to transport=${transport.name}: ${error48.message} ${JSON.stringify(error48)}`);
61810
- });
61811
- }
61812
- const internalLogger = winston.createLogger({
61813
- transports: transports2,
61814
- defaultMeta,
61815
- format: winston.format.combine(winston.format.splat(), winston.format(addMetadata({ getCorrelationId, getExecutionContext }))(), winston.format(transformErrorEnrich)({ depth: 5 }), winston.format(transformPrune)(), winston.format(transformAxiosError)(), winston.format.timestamp()),
61816
- exitOnError: false
61817
- });
61818
- function createLogger3({ serviceName }) {
61819
- const logger2 = internalLogger.child({ subService: serviceName });
61820
- return {
61821
- debug: bindLogger(logger2, "debug"),
61822
- info: bindLogger(logger2, "info"),
61823
- warn: bindLogger(logger2, "warn"),
61824
- error: bindLogger(logger2, "error"),
61825
- on: logger2.on.bind(logger2),
61826
- end: logger2.end.bind(logger2)
61827
- };
61828
- }
61829
- return {
61830
- createLogger: createLogger3
61831
- };
61832
- }
61833
- function bindLogger(logger2, severity) {
61834
- return (message, data) => {
61835
- logger2[severity].bind(logger2)(message, preserveReservedKeys(data));
61836
- };
61837
- }
61838
- function preserveReservedKeys(data) {
61839
- if (!data)
61840
- return;
61841
- return Object.fromEntries(Object.entries(data).map(([key, value]) => {
61842
- let finalKey = key;
61843
- if (key === "status") {
61844
- finalKey = "_status";
61845
- } else if (key === "service") {
61846
- finalKey = "_service";
62155
+ {
62156
+ countryCode: "VU",
62157
+ countryName: "Vanuatu",
62158
+ currencyCode: "VUV",
62159
+ population: "221552",
62160
+ capital: "Port Vila",
62161
+ continentName: "Oceania"
62162
+ },
62163
+ {
62164
+ countryCode: "WF",
62165
+ countryName: "Wallis and Futuna",
62166
+ currencyCode: "XPF",
62167
+ population: "16025",
62168
+ capital: "Mata-Utu",
62169
+ continentName: "Oceania"
62170
+ },
62171
+ {
62172
+ countryCode: "WS",
62173
+ countryName: "Samoa",
62174
+ currencyCode: "WST",
62175
+ population: "192001",
62176
+ capital: "Apia",
62177
+ continentName: "Oceania"
62178
+ },
62179
+ {
62180
+ countryCode: "XK",
62181
+ countryName: "Kosovo",
62182
+ currencyCode: "EUR",
62183
+ population: "1800000",
62184
+ capital: "Pristina",
62185
+ continentName: "Europe"
62186
+ },
62187
+ {
62188
+ countryCode: "YE",
62189
+ countryName: "Yemen",
62190
+ currencyCode: "YER",
62191
+ population: "23495361",
62192
+ capital: "Sanaa",
62193
+ continentName: "Asia"
62194
+ },
62195
+ {
62196
+ countryCode: "YT",
62197
+ countryName: "Mayotte",
62198
+ currencyCode: "EUR",
62199
+ population: "159042",
62200
+ capital: "Mamoudzou",
62201
+ continentName: "Africa"
62202
+ },
62203
+ {
62204
+ countryCode: "ZA",
62205
+ countryName: "South Africa",
62206
+ currencyCode: "ZAR",
62207
+ population: "49000000",
62208
+ capital: "Pretoria",
62209
+ continentName: "Africa"
62210
+ },
62211
+ {
62212
+ countryCode: "ZM",
62213
+ countryName: "Zambia",
62214
+ currencyCode: "ZMW",
62215
+ population: "13460305",
62216
+ capital: "Lusaka",
62217
+ continentName: "Africa"
62218
+ },
62219
+ {
62220
+ countryCode: "ZW",
62221
+ countryName: "Zimbabwe",
62222
+ currencyCode: "ZWL",
62223
+ population: "13061000",
62224
+ capital: "Harare",
62225
+ continentName: "Africa"
61847
62226
  }
61848
- return [finalKey, value];
61849
- }));
61850
- }
61851
- var verboseLevels = ["warn", "error", "debug"];
61852
- function createTransportConsole() {
61853
- return new winston.transports.Console({
61854
- level: "debug",
61855
- handleExceptions: true,
61856
- format: winston.format.combine(winston.format(jsonFormat)(), winston.format((info) => {
61857
- const { level, message, ...others } = info;
61858
- const parts = [message];
61859
- if (Object.keys(others).length > 0 && verboseLevels.includes(level)) {
61860
- const rawOthers = JSON.parse(prune2(others));
61861
- parts.push(util.inspect(rawOthers, false, 4, true));
61862
- }
61863
- info.message = parts.filter((part) => !!part).join("\n");
61864
- return info;
61865
- })(), winston.format.colorize(), winston.format.printf(({ timestamp, level, message, service = "?" }) => {
61866
- const result = `[${timestamp}] ${level} ${service}: ${message}`;
61867
- return result.replace(/\\n/g, "\n");
61868
- }))
61869
- });
61870
- }
61871
- function createTransportStdout() {
61872
- return new winston.transports.Console({
61873
- level: "debug",
61874
- handleExceptions: true,
61875
- format: winston.format.combine(winston.format(jsonFormat)(), winston.format.timestamp(), winston.format.json())
61876
- });
61877
- }
61878
- function createTransportSilent() {
61879
- return new winston.transports.Console({
61880
- silent: true
61881
- });
61882
- }
61883
-
61884
- // ../hyperline-monitoring/build/logger/instance.js
61885
- var loggerFactory = buildLoggerFactory({
61886
- config: {
61887
- enableConsoleTransport: config3.LOGGER_CONSOLE_ENABLED ?? false,
61888
- enableStdoutTransport: config3.LOGGER_STDOUT_ENABLED ?? false
61889
- },
61890
- context: {
61891
- env: config3.NODE_ENV,
61892
- service: config3.DD_SERVICE ?? "api",
61893
- version: config3.APP_VERSION
61894
- }
61895
- });
61896
- var createLogger2 = loggerFactory.createLogger;
61897
- var logger = loggerFactory.createLogger({ serviceName: "default" });
61898
-
61899
- // ../hyperline-monitoring/build/tracing/tracing.js
61900
- import tracer from "dd-trace";
62227
+ ]
62228
+ );
61901
62229
 
61902
62230
  // ../hyperline-lib/build/utils/config/usStates.js
61903
62231
  var usStates = [
@@ -62029,6 +62357,12 @@ var DateTimeSchema = external_exports.iso.datetime({
62029
62357
  example: "2024-12-20T16:04:11Z"
62030
62358
  });
62031
62359
 
62360
+ // ../hyperline-lib/build/http/dto/domain.js
62361
+ var DomainSchema = external_exports.string().trim().toLowerCase().regex(/^(?!:\/\/)(?=.{1,253}$)(?!-)([a-z0-9-]{1,63}\.)+[a-z]{2,63}$/, "Invalid domain").openapi({
62362
+ description: "Domain name.",
62363
+ example: "acme.com"
62364
+ });
62365
+
62032
62366
  // ../hyperline-lib/build/http/dto/error.js
62033
62367
  var ErrorSchema = external_exports.object({
62034
62368
  message: external_exports.string()
@@ -62085,9 +62419,11 @@ var de = {
62085
62419
  "accounting.transactionSettled.entryDescription": "Zahlungsabwicklung f\xFCr Rechnung {{invoiceId}}",
62086
62420
  "accounting.transactionRefunded.entryDescription": "R\xFCckerstattung f\xFCr Rechnung {{invoiceId}}",
62087
62421
  "accounting.creditNotePosted.entryDescription": "Gutschrift {{creditNoteId}} f\xFCr Rechnung {{invoiceId}}",
62422
+ "accounting.standaloneCreditNotePosted.entryDescription": "Gutschrift {{creditNoteId}}",
62088
62423
  "accounting.revrec.creditLineDescription": "Umsatz realisieren \u2013 Zeitplan {{scheduleId}}, Zeitraum {{periodDate}}",
62089
62424
  "accounting.revrec.debitLineDescription": "Abgrenzungsposten reduzieren \u2013 Zeitplan {{scheduleId}}, Zeitraum {{periodDate}}",
62090
62425
  "accounting.revrec.discountCreditLineDescription": "Erl\xF6sminderung (Rabatt) erfassen \u2013 Zeitplan {{scheduleId}}, Zeitraum {{periodDate}}",
62426
+ "accounting.revrec.closedPeriodFallbackNote": " (in die n\xE4chste offene Periode gebucht \u2013 Zielperiode geschlossen; urspr\xFCngliches Datum {{originalDate}})",
62091
62427
  "accounting.revrec.discountDebitLineDescription": "Abgegrenzten Rabatt reduzieren \u2013 Zeitplan {{scheduleId}}, Zeitraum {{periodDate}}",
62092
62428
  "accounting.revrec.entryDescription": "Umsatzrealisierung f\xFCr Zeitplan {{scheduleId}}, Zeitraum {{periodStart}} - {{periodEnd}}",
62093
62429
  "creditNotes.refundChargeName": "R\xFCckerstattung f\xFCr die Rechnung",
@@ -62100,7 +62436,9 @@ var de = {
62100
62436
  "invoices.outstandingProduct.descriptionPeriod": "Unbezahlter Betrag der Rechnung{{invoiceNumber}} vom {{periodStart}} bis {{periodEnd}}",
62101
62437
  "invoices.outstandingProduct.name": "Offener Saldo",
62102
62438
  "invoices.prorata.paymentForItem": "Anteilig berechneter Betrag f\xFCr",
62439
+ "invoices.prorata.paymentForItemFullPeriod": "Zahlung f\xFCr",
62103
62440
  "invoices.prorata.refundForItem": "Anteilig erstatteter Betrag f\xFCr",
62441
+ "invoices.prorata.refundForItemFullPeriod": "Erstattung f\xFCr",
62104
62442
  "subscriptions.closingChargeName": "Abschlussgeb\xFChr f\xFCr das Abonnement",
62105
62443
  "subscriptions.correction": "Vorperiodische Anpassung",
62106
62444
  "subscriptions.updates.addCoupon": "Gutschein hinzuf\xFCgen {{couponName}}",
@@ -62129,7 +62467,9 @@ var en = {
62129
62467
  "invoices.outstandingProduct.descriptionPeriod": "Unpaid amount from the invoice{{invoiceNumber}} from {{periodStart}} to {{periodEnd}}",
62130
62468
  "invoices.outstandingProduct.name": "Outstanding balance",
62131
62469
  "invoices.prorata.paymentForItem": "Prorated payment for",
62470
+ "invoices.prorata.paymentForItemFullPeriod": "Payment for",
62132
62471
  "invoices.prorata.refundForItem": "Prorated refund for",
62472
+ "invoices.prorata.refundForItemFullPeriod": "Refund for",
62133
62473
  "subscriptions.closingChargeName": "Closing fee for subscription",
62134
62474
  "subscriptions.correction": "Adjustment previous period",
62135
62475
  "subscriptions.updates.addCoupon": "Add coupon {{couponName}}",
@@ -62151,11 +62491,13 @@ var en = {
62151
62491
  "accounting.transactionSettled.entryDescription": "Payment settlement for Invoice {{invoiceId}}",
62152
62492
  "accounting.transactionRefunded.entryDescription": "Refund for Invoice {{invoiceId}}",
62153
62493
  "accounting.creditNotePosted.entryDescription": "Credit note {{creditNoteId}} for Invoice {{invoiceId}}",
62494
+ "accounting.standaloneCreditNotePosted.entryDescription": "Credit note {{creditNoteId}}",
62154
62495
  "accounting.revrec.entryDescription": "Revenue recognition for schedule {{scheduleId}}, period {{periodStart}} - {{periodEnd}}",
62155
62496
  "accounting.revrec.debitLineDescription": "Decrease deferred revenue \u2013 schedule {{scheduleId}}, period {{periodDate}}",
62156
62497
  "accounting.revrec.creditLineDescription": "Recognize revenue \u2013 schedule {{scheduleId}}, period {{periodDate}}",
62157
62498
  "accounting.revrec.discountDebitLineDescription": "Decrease deferred discount \u2013 schedule {{scheduleId}}, period {{periodDate}}",
62158
62499
  "accounting.revrec.discountCreditLineDescription": "Recognize contra-revenue (discount) \u2013 schedule {{scheduleId}}, period {{periodDate}}",
62500
+ "accounting.revrec.closedPeriodFallbackNote": " (posted to next open period \u2014 target accounting period closed; original date {{originalDate}})",
62159
62501
  "einvoicing.paymentProcessed": "Payment processed",
62160
62502
  "einvoicing.paymentReceived": "Payment received",
62161
62503
  "einvoicing.paymentFromWallet": "Payment from wallet"
@@ -62167,9 +62509,11 @@ var es = {
62167
62509
  "accounting.transactionSettled.entryDescription": "Liquidaci\xF3n de pago para la factura {{invoiceId}}",
62168
62510
  "accounting.transactionRefunded.entryDescription": "Reembolso de la factura {{invoiceId}}",
62169
62511
  "accounting.creditNotePosted.entryDescription": "Nota de cr\xE9dito {{creditNoteId}} para la factura {{invoiceId}}",
62512
+ "accounting.standaloneCreditNotePosted.entryDescription": "Nota de cr\xE9dito {{creditNoteId}}",
62170
62513
  "accounting.revrec.creditLineDescription": "Reconocer ingresos \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
62171
62514
  "accounting.revrec.debitLineDescription": "Disminuci\xF3n de ingresos diferidos \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
62172
62515
  "accounting.revrec.discountCreditLineDescription": "Reconocer contra-ingresos (descuento) \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
62516
+ "accounting.revrec.closedPeriodFallbackNote": " (registrado en el pr\xF3ximo per\xEDodo abierto \u2014 per\xEDodo contable de destino cerrado; fecha original {{originalDate}})",
62173
62517
  "accounting.revrec.discountDebitLineDescription": "Disminuci\xF3n de descuento diferido \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
62174
62518
  "accounting.revrec.entryDescription": "Reconocimiento de ingresos para el cronograma {{scheduleId}}, per\xEDodo {{periodStart}} - {{periodEnd}}",
62175
62519
  "creditNotes.refundChargeName": "Reembolso por factura",
@@ -62182,7 +62526,9 @@ var es = {
62182
62526
  "invoices.outstandingProduct.descriptionPeriod": "Monto pendiente de la factura{{invoiceNumber}} del {{periodStart}} al {{periodEnd}}",
62183
62527
  "invoices.outstandingProduct.name": "Saldo pendiente",
62184
62528
  "invoices.prorata.paymentForItem": "Pago prorrateado por",
62529
+ "invoices.prorata.paymentForItemFullPeriod": "Pago por",
62185
62530
  "invoices.prorata.refundForItem": "Reembolso prorrateado por",
62531
+ "invoices.prorata.refundForItemFullPeriod": "Reembolso por",
62186
62532
  "subscriptions.closingChargeName": "Cargo por cierre de suscripci\xF3n",
62187
62533
  "subscriptions.correction": "Ajuste del periodo anterior",
62188
62534
  "subscriptions.updates.addCoupon": "A\xF1adir cup\xF3n {{couponName}}",
@@ -62207,11 +62553,13 @@ var fr = {
62207
62553
  "accounting.revrec.creditLineDescription": "Reconnaissance du chiffre d'affaires \u2013 \xE9ch\xE9ancier {{scheduleId}}, p\xE9riode {{periodDate}}",
62208
62554
  "accounting.revrec.debitLineDescription": "Diminution des produits constat\xE9s d'avance \u2013 \xE9ch\xE9ancier {{scheduleId}}, p\xE9riode {{periodDate}}",
62209
62555
  "accounting.revrec.discountCreditLineDescription": "Reconnaissance du contre-revenu (remise) \u2013 \xE9ch\xE9ancier {{scheduleId}}, p\xE9riode {{periodDate}}",
62556
+ "accounting.revrec.closedPeriodFallbackNote": " (comptabilis\xE9 sur la prochaine p\xE9riode ouverte \u2014 p\xE9riode comptable cible cl\xF4tur\xE9e ; date d'origine {{originalDate}})",
62210
62557
  "accounting.revrec.discountDebitLineDescription": "Diminution des remises diff\xE9r\xE9es \u2013 \xE9ch\xE9ancier {{scheduleId}}, p\xE9riode {{periodDate}}",
62211
62558
  "accounting.invoicePosted.entryDescription": "\xC9criture de comptabilisation pour la facture {{invoiceId}}",
62212
62559
  "accounting.transactionSettled.entryDescription": "R\xE8glement de la facture {{invoiceId}}",
62213
62560
  "accounting.transactionRefunded.entryDescription": "Remboursement de la facture {{invoiceId}}",
62214
62561
  "accounting.creditNotePosted.entryDescription": "Avoir {{creditNoteId}} pour la facture {{invoiceId}}",
62562
+ "accounting.standaloneCreditNotePosted.entryDescription": "Avoir {{creditNoteId}}",
62215
62563
  "accounting.revrec.entryDescription": "Reconnaissance du chiffre d'affaires pour l'\xE9ch\xE9ancier {{scheduleId}}, p\xE9riode {{periodStart}} - {{periodEnd}}",
62216
62564
  "creditNotes.refundChargeName": "Remboursement pour facture",
62217
62565
  "credits.bundleOf": "{{productName}} - Pack de {{creditCount}} cr\xE9dits",
@@ -62223,7 +62571,9 @@ var fr = {
62223
62571
  "invoices.outstandingProduct.descriptionPeriod": "Montant impay\xE9 de la facture{{invoiceNumber}} du {{periodStart}} au {{periodEnd}}",
62224
62572
  "invoices.outstandingProduct.name": "Solde impay\xE9",
62225
62573
  "invoices.prorata.paymentForItem": "Paiement au prorata pour",
62574
+ "invoices.prorata.paymentForItemFullPeriod": "Paiement pour",
62226
62575
  "invoices.prorata.refundForItem": "Remboursement au prorata pour",
62576
+ "invoices.prorata.refundForItemFullPeriod": "Remboursement pour",
62227
62577
  "subscriptions.closingChargeName": "Frais de cl\xF4ture pour abonnement",
62228
62578
  "subscriptions.correction": "Ajustement p\xE9riode pr\xE9c\xE9dente",
62229
62579
  "subscriptions.updates.addCoupon": "Ajout du coupon {{couponName}}",
@@ -62249,9 +62599,11 @@ var it = {
62249
62599
  "accounting.transactionSettled.entryDescription": "Regolamento pagamento per la fattura {{invoiceId}}",
62250
62600
  "accounting.transactionRefunded.entryDescription": "Rimborso per la fattura {{invoiceId}}",
62251
62601
  "accounting.creditNotePosted.entryDescription": "Nota di credito {{creditNoteId}} per la fattura {{invoiceId}}",
62602
+ "accounting.standaloneCreditNotePosted.entryDescription": "Nota di credito {{creditNoteId}}",
62252
62603
  "accounting.revrec.creditLineDescription": "Riconoscere i ricavi \u2013 programma {{scheduleId}}, periodo {{periodDate}}",
62253
62604
  "accounting.revrec.debitLineDescription": "Diminuzione dei ricavi differiti \u2013 programma {{scheduleId}}, periodo {{periodDate}}",
62254
62605
  "accounting.revrec.discountCreditLineDescription": "Riconoscere il contra-ricavo (sconto) \u2013 programma {{scheduleId}}, periodo {{periodDate}}",
62606
+ "accounting.revrec.closedPeriodFallbackNote": " (registrato nel prossimo periodo aperto \u2014 periodo contabile di destinazione chiuso; data originale {{originalDate}})",
62255
62607
  "accounting.revrec.discountDebitLineDescription": "Diminuzione dello sconto differito \u2013 programma {{scheduleId}}, periodo {{periodDate}}",
62256
62608
  "accounting.revrec.entryDescription": "Riconoscimento dei ricavi per il programma {{scheduleId}}, periodo {{periodStart}} - {{periodEnd}}",
62257
62609
  "creditNotes.refundChargeName": "Rimborso per fattura",
@@ -62264,7 +62616,9 @@ var it = {
62264
62616
  "invoices.outstandingProduct.descriptionPeriod": "Importo insoluto della fattura{{invoiceNumber}} dal {{periodStart}} al {{periodEnd}}",
62265
62617
  "invoices.outstandingProduct.name": "Saldo insoluto",
62266
62618
  "invoices.prorata.paymentForItem": "Pagamento proporzionale per",
62619
+ "invoices.prorata.paymentForItemFullPeriod": "Pagamento per",
62267
62620
  "invoices.prorata.refundForItem": "Rimborso proporzionale per",
62621
+ "invoices.prorata.refundForItemFullPeriod": "Rimborso per",
62268
62622
  "subscriptions.closingChargeName": "Costo di chiusura per abbonamento",
62269
62623
  "subscriptions.correction": "Correzione periodo precedente",
62270
62624
  "subscriptions.updates.addCoupon": "Aggiungi coupon {{couponName}}",
@@ -62290,9 +62644,11 @@ var nl = {
62290
62644
  "accounting.transactionSettled.entryDescription": "Betalingsafwikkeling voor factuur {{invoiceId}}",
62291
62645
  "accounting.transactionRefunded.entryDescription": "Terugbetaling voor factuur {{invoiceId}}",
62292
62646
  "accounting.creditNotePosted.entryDescription": "Creditnota {{creditNoteId}} voor factuur {{invoiceId}}",
62647
+ "accounting.standaloneCreditNotePosted.entryDescription": "Creditnota {{creditNoteId}}",
62293
62648
  "accounting.revrec.creditLineDescription": "Omzet erkennen \u2013 schema {{scheduleId}}, periode {{periodDate}}",
62294
62649
  "accounting.revrec.debitLineDescription": "Uitgestelde omzet verlagen \u2013 schema {{scheduleId}}, periode {{periodDate}}",
62295
62650
  "accounting.revrec.discountCreditLineDescription": "Omzetvermindering (korting) erkennen \u2013 schema {{scheduleId}}, periode {{periodDate}}",
62651
+ "accounting.revrec.closedPeriodFallbackNote": " (geboekt in de volgende open periode \u2014 doelboekingsperiode gesloten; oorspronkelijke datum {{originalDate}})",
62296
62652
  "accounting.revrec.discountDebitLineDescription": "Uitgestelde korting verlagen \u2013 schema {{scheduleId}}, periode {{periodDate}}",
62297
62653
  "accounting.revrec.entryDescription": "Omzeterkenning voor schema {{scheduleId}}, periode {{periodStart}} - {{periodEnd}}",
62298
62654
  "creditNotes.refundChargeName": "Terugbetaling voor factuur",
@@ -62305,7 +62661,9 @@ var nl = {
62305
62661
  "invoices.outstandingProduct.descriptionPeriod": "Onbetaald bedrag van de factuur{{invoiceNumber}} van {{periodStart}} tot {{periodEnd}}",
62306
62662
  "invoices.outstandingProduct.name": "Openstaand saldo",
62307
62663
  "invoices.prorata.paymentForItem": "Gedeeltelijke betaling voor",
62664
+ "invoices.prorata.paymentForItemFullPeriod": "Betaling voor",
62308
62665
  "invoices.prorata.refundForItem": "Gedeeltelijke terugbetaling voor",
62666
+ "invoices.prorata.refundForItemFullPeriod": "Terugbetaling voor",
62309
62667
  "subscriptions.closingChargeName": "Afsluitkosten voor abonnement",
62310
62668
  "subscriptions.correction": "Aanpassing vorige periode",
62311
62669
  "subscriptions.updates.addCoupon": "Coupon toevoegen {{couponName}}",
@@ -62331,9 +62689,11 @@ var pl = {
62331
62689
  "accounting.transactionSettled.entryDescription": "Rozliczenie p\u0142atno\u015Bci dla faktury {{invoiceId}}",
62332
62690
  "accounting.transactionRefunded.entryDescription": "Zwrot za faktur\u0119 {{invoiceId}}",
62333
62691
  "accounting.creditNotePosted.entryDescription": "Nota kredytowa {{creditNoteId}} dla faktury {{invoiceId}}",
62692
+ "accounting.standaloneCreditNotePosted.entryDescription": "Nota kredytowa {{creditNoteId}}",
62334
62693
  "accounting.revrec.creditLineDescription": "Rozpoznanie przychodu \u2013 harmonogram {{scheduleId}}, okres {{periodDate}}",
62335
62694
  "accounting.revrec.debitLineDescription": "Zmniejszenie przychod\xF3w przysz\u0142ych okres\xF3w \u2013 harmonogram {{scheduleId}}, okres {{periodDate}}",
62336
62695
  "accounting.revrec.discountCreditLineDescription": "Rozpoznanie kontra-przychodu (rabat) \u2013 harmonogram {{scheduleId}}, okres {{periodDate}}",
62696
+ "accounting.revrec.closedPeriodFallbackNote": " (zaksi\u0119gowano w nast\u0119pnym otwartym okresie \u2014 docelowy okres ksi\u0119gowy zamkni\u0119ty; pierwotna data {{originalDate}})",
62337
62697
  "accounting.revrec.discountDebitLineDescription": "Zmniejszenie odroczonego rabatu \u2013 harmonogram {{scheduleId}}, okres {{periodDate}}",
62338
62698
  "accounting.revrec.entryDescription": "Rozpoznanie przychodu dla harmonogramu {{scheduleId}}, okres {{periodStart}} - {{periodEnd}}",
62339
62699
  "creditNotes.refundChargeName": "Zwrot za faktur\u0119",
@@ -62346,7 +62706,9 @@ var pl = {
62346
62706
  "invoices.outstandingProduct.descriptionPeriod": "Nieop\u0142acona kwota z faktury{{invoiceNumber}} od {{periodStart}} do {{periodEnd}}",
62347
62707
  "invoices.outstandingProduct.name": "Niezap\u0142acone saldo",
62348
62708
  "invoices.prorata.paymentForItem": "P\u0142atno\u015B\u0107 proporcjonalna za",
62709
+ "invoices.prorata.paymentForItemFullPeriod": "P\u0142atno\u015B\u0107 za",
62349
62710
  "invoices.prorata.refundForItem": "Zwrot proporcjonalny za",
62711
+ "invoices.prorata.refundForItemFullPeriod": "Zwrot za",
62350
62712
  "subscriptions.closingChargeName": "Op\u0142ata za zamkni\u0119cie subskrypcji",
62351
62713
  "subscriptions.correction": "Korekta poprzedniego okresu",
62352
62714
  "subscriptions.updates.addCoupon": "Dodaj kupon {{couponName}}",
@@ -62372,9 +62734,11 @@ var pt = {
62372
62734
  "accounting.transactionSettled.entryDescription": "Liquida\xE7\xE3o de pagamento para a fatura {{invoiceId}}",
62373
62735
  "accounting.transactionRefunded.entryDescription": "Reembolso da fatura {{invoiceId}}",
62374
62736
  "accounting.creditNotePosted.entryDescription": "Nota de cr\xE9dito {{creditNoteId}} para a fatura {{invoiceId}}",
62737
+ "accounting.standaloneCreditNotePosted.entryDescription": "Nota de cr\xE9dito {{creditNoteId}}",
62375
62738
  "accounting.revrec.creditLineDescription": "Reconhecer receita \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
62376
62739
  "accounting.revrec.debitLineDescription": "Diminui\xE7\xE3o da receita diferida \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
62377
62740
  "accounting.revrec.discountCreditLineDescription": "Reconhecer contra-receita (desconto) \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
62741
+ "accounting.revrec.closedPeriodFallbackNote": " (lan\xE7ado no pr\xF3ximo per\xEDodo aberto \u2014 per\xEDodo cont\xE1bil de destino fechado; data original {{originalDate}})",
62378
62742
  "accounting.revrec.discountDebitLineDescription": "Diminui\xE7\xE3o do desconto diferido \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
62379
62743
  "accounting.revrec.entryDescription": "Reconhecimento de receita para o cronograma {{scheduleId}}, per\xEDodo {{periodStart}} - {{periodEnd}}",
62380
62744
  "creditNotes.refundChargeName": "Reembolso pela fatura",
@@ -62387,7 +62751,9 @@ var pt = {
62387
62751
  "invoices.outstandingProduct.descriptionPeriod": "Valor em aberto da fatura{{invoiceNumber}} de {{periodStart}} a {{periodEnd}}",
62388
62752
  "invoices.outstandingProduct.name": "Saldo em aberto",
62389
62753
  "invoices.prorata.paymentForItem": "Pagamento proporcional por",
62754
+ "invoices.prorata.paymentForItemFullPeriod": "Pagamento por",
62390
62755
  "invoices.prorata.refundForItem": "Reembolso proporcional por",
62756
+ "invoices.prorata.refundForItemFullPeriod": "Reembolso por",
62391
62757
  "subscriptions.closingChargeName": "Taxa de encerramento da assinatura",
62392
62758
  "subscriptions.correction": "Ajuste do per\xEDodo anterior",
62393
62759
  "subscriptions.updates.addCoupon": "Adicionar cupom {{couponName}}",
@@ -62509,10 +62875,16 @@ function buildHttpClient(dependencies) {
62509
62875
  return response;
62510
62876
  }, (error48) => {
62511
62877
  if (error48.response) {
62512
- const { config: responseConfig, status } = error48.response;
62878
+ const { config: responseConfig, status, headers } = error48.response;
62513
62879
  const timeStart = responseConfig.metadata.timeStart;
62514
62880
  const responseTime = timeStart ? Date.now() - timeStart : void 0;
62515
- logHttpResponse(logger2, { request: toLogRequest(responseConfig), statusCode: status }, responseTime, { metadata: { error: error48.message } });
62881
+ logHttpResponse(logger2, {
62882
+ request: toLogRequest(responseConfig),
62883
+ statusCode: status,
62884
+ // Surfaces upstream response headers on error responses (e.g. the
62885
+ // rate-limit headers on a 429); redacted in logHttpResponse.
62886
+ responseHeaders: headers
62887
+ }, responseTime, { metadata: { error: error48.message } });
62516
62888
  }
62517
62889
  return Promise.reject(error48);
62518
62890
  });