@hyperline/cli 0.1.0-build.1.68680b9 → 0.1.0-build.1.68c0416

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" },
@@ -38369,10 +38369,10 @@ Examples:
38369
38369
  queryParamKeys: []
38370
38370
  });
38371
38371
  });
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("--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", `
38373
38373
  Examples:
38374
38374
  hyperline custom-properties create-custom-property --name <name> --type <type> --slug <slug> --entities <entities>
38375
- 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
38376
38376
  hyperline custom-properties create-custom-property --name <name> --type <type> --slug <slug> --entities <entities> --output json`).action(async (opts) => {
38377
38377
  const ctx = resource.parent?.opts()._ctx;
38378
38378
  if (!ctx) {
@@ -38392,6 +38392,8 @@ Examples:
38392
38392
  args.authorized_values = opts.authorizedValues;
38393
38393
  if (opts.apiOnly !== void 0)
38394
38394
  args.api_only = true;
38395
+ if (opts.required !== void 0)
38396
+ args.required = true;
38395
38397
  await ctx.execute({
38396
38398
  method: "POST",
38397
38399
  path: "/v1/custom-properties",
@@ -38399,10 +38401,10 @@ Examples:
38399
38401
  queryParamKeys: []
38400
38402
  });
38401
38403
  });
38402
- 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", `
38403
38405
  Examples:
38404
38406
  hyperline custom-properties update-custom-property --id <id> --name <name> --type <type> --slug <slug> --entities <entities>
38405
- 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
38406
38408
  hyperline custom-properties update-custom-property --id <id> --name <name> --type <type> --slug <slug> --entities <entities> --output json`).action(async (opts) => {
38407
38409
  const ctx = resource.parent?.opts()._ctx;
38408
38410
  if (!ctx) {
@@ -38424,6 +38426,8 @@ Examples:
38424
38426
  args.authorized_values = opts.authorizedValues;
38425
38427
  if (opts.apiOnly !== void 0)
38426
38428
  args.api_only = true;
38429
+ if (opts.required !== void 0)
38430
+ args.required = true;
38427
38431
  await ctx.execute({
38428
38432
  method: "PUT",
38429
38433
  path: "/v1/custom-properties/{id}",
@@ -38781,7 +38785,7 @@ Customer type.
38781
38785
 
38782
38786
  - \`taxable\`: Taxes are automatically determined for the customer.
38783
38787
  - \`exempt\`: The customer is exempt from tax.
38784
- `).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>", `
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>", `
38785
38789
  How customer invoices are issued from the parent organisation.
38786
38790
 
38787
38791
  - \`none\`: Invoices will keep being issued from this customer.
@@ -38812,6 +38816,8 @@ Examples:
38812
38816
  args.registration_number = opts.registrationNumber;
38813
38817
  if (opts.externalId !== void 0)
38814
38818
  args.external_id = opts.externalId;
38819
+ if (opts.domain !== void 0)
38820
+ args.domain = opts.domain;
38815
38821
  if (opts.invoicingEntityId !== void 0)
38816
38822
  args.invoicing_entity_id = opts.invoicingEntityId;
38817
38823
  if (opts.billingAddress !== void 0)
@@ -38910,7 +38916,7 @@ Customer type.
38910
38916
 
38911
38917
  - \`taxable\`: Taxes are automatically determined for the customer.
38912
38918
  - \`exempt\`: The customer is exempt from tax.
38913
- `).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>", `
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>", `
38914
38920
  How customer invoices are issued from the parent organisation.
38915
38921
 
38916
38922
  - \`none\`: Invoices will keep being issued from this customer.
@@ -38943,6 +38949,8 @@ Examples:
38943
38949
  args.registration_number = opts.registrationNumber;
38944
38950
  if (opts.externalId !== void 0)
38945
38951
  args.external_id = opts.externalId;
38952
+ if (opts.domain !== void 0)
38953
+ args.domain = opts.domain;
38946
38954
  if (opts.invoicingEntityId !== void 0)
38947
38955
  args.invoicing_entity_id = opts.invoicingEntityId;
38948
38956
  if (opts.billingAddress !== void 0)
@@ -39112,6 +39120,38 @@ Examples:
39112
39120
  queryParamKeys: []
39113
39121
  });
39114
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
+ });
39115
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", `
39116
39156
  Examples:
39117
39157
  hyperline customers get-customer-valuation --id <id>
@@ -40465,7 +40505,7 @@ Examples:
40465
40505
  queryParamKeys: []
40466
40506
  });
40467
40507
  });
40468
- 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; uncollectible: properties/custom_note/custom_properties).`).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.
40469
40509
 
40470
40510
  - \`invoice\`: Legal invoice to be paid by your customer.
40471
40511
  - \`credit_note\`: Legal credit note cancelling an invoice and refunding your customer.
@@ -41421,6 +41461,32 @@ Examples:
41421
41461
  queryParamKeys: []
41422
41462
  });
41423
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
+ });
41424
41490
  resource.command("unarchive").description(`Restore a previously archived product, making it available for new subscriptions again.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
41425
41491
  Examples:
41426
41492
  hyperline products unarchive --id <id>
@@ -41746,7 +41812,7 @@ Examples:
41746
41812
  - \`all\`: Display all pricing tiers.
41747
41813
  - \`matching\`: Only display the tiers used to compute the price based on quantity.
41748
41814
  - \`none\`: Hide all pricing tiers.
41749
- `).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", `
41750
41816
  Examples:
41751
41817
  hyperline quotes update --id <id>
41752
41818
  hyperline quotes update --id <id> --owner-email <owner_email> --comments <comments>
@@ -41791,6 +41857,8 @@ Examples:
41791
41857
  args.display_subscription_on_update = opts.displaySubscriptionOnUpdate;
41792
41858
  if (opts.generateDraftInvoices !== void 0)
41793
41859
  args.generate_draft_invoices = opts.generateDraftInvoices;
41860
+ if (opts.crmOpportunityId !== void 0)
41861
+ args.crm_opportunity_id = opts.crmOpportunityId;
41794
41862
  if (opts.expiresAt !== void 0)
41795
41863
  args.expires_at = opts.expiresAt;
41796
41864
  if (opts.subscription !== void 0)
@@ -42218,7 +42286,7 @@ Examples:
42218
42286
  queryParamKeys: []
42219
42287
  });
42220
42288
  });
42221
- 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", `
42222
42290
  Examples:
42223
42291
  hyperline subscriptions pause --id <id>
42224
42292
  hyperline subscriptions pause --id <id> --reactivate-at <reactivate_at>
@@ -42759,6 +42827,38 @@ Examples:
42759
42827
  queryParamKeys: []
42760
42828
  });
42761
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
+ });
42762
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", `
42763
42863
  Examples:
42764
42864
  hyperline subscriptions get-subscription-valuation --id <id>
@@ -57539,161 +57639,541 @@ var AmountSchema = external_exports.number().openapi({
57539
57639
  description: `Monetary amount. ${amountDescription}`
57540
57640
  });
57541
57641
 
57542
- // ../../node_modules/decimal.js/decimal.mjs
57543
- var EXP_LIMIT = 9e15;
57544
- var MAX_DIGITS = 1e9;
57545
- var NUMERALS = "0123456789abcdef";
57546
- var LN10 = "2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058";
57547
- var PI = "3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789";
57548
- var DEFAULTS = {
57549
- // These values must be integers within the stated ranges (inclusive).
57550
- // Most of these values can be changed at run-time using the `Decimal.config` method.
57551
- // The maximum number of significant digits of the result of a calculation or base conversion.
57552
- // E.g. `Decimal.config({ precision: 20 });`
57553
- precision: 20,
57554
- // 1 to MAX_DIGITS
57555
- // The rounding mode used when rounding to `precision`.
57556
- //
57557
- // ROUND_UP 0 Away from zero.
57558
- // ROUND_DOWN 1 Towards zero.
57559
- // ROUND_CEIL 2 Towards +Infinity.
57560
- // ROUND_FLOOR 3 Towards -Infinity.
57561
- // ROUND_HALF_UP 4 Towards nearest neighbour. If equidistant, up.
57562
- // ROUND_HALF_DOWN 5 Towards nearest neighbour. If equidistant, down.
57563
- // ROUND_HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour.
57564
- // ROUND_HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity.
57565
- // ROUND_HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.
57566
- //
57567
- // E.g.
57568
- // `Decimal.rounding = 4;`
57569
- // `Decimal.rounding = Decimal.ROUND_HALF_UP;`
57570
- rounding: 4,
57571
- // 0 to 8
57572
- // The modulo mode used when calculating the modulus: a mod n.
57573
- // The quotient (q = a / n) is calculated according to the corresponding rounding mode.
57574
- // The remainder (r) is calculated as: r = a - n * q.
57575
- //
57576
- // UP 0 The remainder is positive if the dividend is negative, else is negative.
57577
- // DOWN 1 The remainder has the same sign as the dividend (JavaScript %).
57578
- // FLOOR 3 The remainder has the same sign as the divisor (Python %).
57579
- // HALF_EVEN 6 The IEEE 754 remainder function.
57580
- // EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)). Always positive.
57581
- //
57582
- // Truncated division (1), floored division (3), the IEEE 754 remainder (6), and Euclidian
57583
- // division (9) are commonly used for the modulus operation. The other rounding modes can also
57584
- // be used, but they may not give useful results.
57585
- modulo: 1,
57586
- // 0 to 9
57587
- // The exponent value at and beneath which `toString` returns exponential notation.
57588
- // JavaScript numbers: -7
57589
- toExpNeg: -7,
57590
- // 0 to -EXP_LIMIT
57591
- // The exponent value at and above which `toString` returns exponential notation.
57592
- // JavaScript numbers: 21
57593
- toExpPos: 21,
57594
- // 0 to EXP_LIMIT
57595
- // The minimum exponent value, beneath which underflow to zero occurs.
57596
- // JavaScript numbers: -324 (5e-324)
57597
- minE: -EXP_LIMIT,
57598
- // -1 to -EXP_LIMIT
57599
- // The maximum exponent value, above which overflow to Infinity occurs.
57600
- // JavaScript numbers: 308 (1.7976931348623157e+308)
57601
- maxE: EXP_LIMIT,
57602
- // 1 to EXP_LIMIT
57603
- // Whether to use cryptographically-secure random number generation, if available.
57604
- crypto: false
57605
- // true/false
57606
- };
57607
- var inexact;
57608
- var quadrant;
57609
- var external = true;
57610
- var decimalError = "[DecimalError] ";
57611
- var invalidArgument = decimalError + "Invalid argument: ";
57612
- var precisionLimitExceeded = decimalError + "Precision limit exceeded";
57613
- var cryptoUnavailable = decimalError + "crypto unavailable";
57614
- var tag = "[object Decimal]";
57615
- var mathfloor = Math.floor;
57616
- var mathpow = Math.pow;
57617
- var isBinary = /^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i;
57618
- var isHex = /^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i;
57619
- var isOctal = /^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i;
57620
- var isDecimal = /^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i;
57621
- var BASE = 1e7;
57622
- var LOG_BASE = 7;
57623
- var MAX_SAFE_INTEGER = 9007199254740991;
57624
- var LN10_PRECISION = LN10.length - 1;
57625
- var PI_PRECISION = PI.length - 1;
57626
- var P = { toStringTag: tag };
57627
- P.absoluteValue = P.abs = function() {
57628
- var x = new this.constructor(this);
57629
- if (x.s < 0) x.s = 1;
57630
- return finalise(x);
57631
- };
57632
- P.ceil = function() {
57633
- return finalise(new this.constructor(this), this.e + 1, 2);
57634
- };
57635
- P.clampedTo = P.clamp = function(min2, max2) {
57636
- var k, x = this, Ctor = x.constructor;
57637
- min2 = new Ctor(min2);
57638
- max2 = new Ctor(max2);
57639
- if (!min2.s || !max2.s) return new Ctor(NaN);
57640
- if (min2.gt(max2)) throw Error(invalidArgument + max2);
57641
- k = x.cmp(min2);
57642
- return k < 0 ? min2 : x.cmp(max2) > 0 ? max2 : new Ctor(x);
57643
- };
57644
- P.comparedTo = P.cmp = function(y) {
57645
- var i, j, xdL, ydL, x = this, xd = x.d, yd = (y = new x.constructor(y)).d, xs = x.s, ys = y.s;
57646
- if (!xd || !yd) {
57647
- return !xs || !ys ? NaN : xs !== ys ? xs : xd === yd ? 0 : !xd ^ xs < 0 ? 1 : -1;
57648
- }
57649
- if (!xd[0] || !yd[0]) return xd[0] ? xs : yd[0] ? -ys : 0;
57650
- if (xs !== ys) return xs;
57651
- if (x.e !== y.e) return x.e > y.e ^ xs < 0 ? 1 : -1;
57652
- xdL = xd.length;
57653
- ydL = yd.length;
57654
- for (i = 0, j = xdL < ydL ? xdL : ydL; i < j; ++i) {
57655
- if (xd[i] !== yd[i]) return xd[i] > yd[i] ^ xs < 0 ? 1 : -1;
57656
- }
57657
- return xdL === ydL ? 0 : xdL > ydL ^ xs < 0 ? 1 : -1;
57658
- };
57659
- P.cosine = P.cos = function() {
57660
- var pr, rm, x = this, Ctor = x.constructor;
57661
- if (!x.d) return new Ctor(NaN);
57662
- if (!x.d[0]) return new Ctor(1);
57663
- pr = Ctor.precision;
57664
- rm = Ctor.rounding;
57665
- Ctor.precision = pr + Math.max(x.e, x.sd()) + LOG_BASE;
57666
- Ctor.rounding = 1;
57667
- x = cosine(Ctor, toLessThanHalfPi(Ctor, x));
57668
- Ctor.precision = pr;
57669
- Ctor.rounding = rm;
57670
- return finalise(quadrant == 2 || quadrant == 3 ? x.neg() : x, pr, rm, true);
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
57671
57672
  };
57672
- P.cubeRoot = P.cbrt = function() {
57673
- var e, m, n, r, rep, s, sd, t, t3, t3plusx, x = this, Ctor = x.constructor;
57674
- if (!x.isFinite() || x.isZero()) return new Ctor(x);
57675
- external = false;
57676
- s = x.s * mathpow(x.s * x, 1 / 3);
57677
- if (!s || Math.abs(s) == 1 / 0) {
57678
- n = digitsToString(x.d);
57679
- e = x.e;
57680
- if (s = (e - n.length + 1) % 3) n += s == 1 || s == -2 ? "0" : "00";
57681
- s = mathpow(n, 1 / 3);
57682
- e = mathfloor((e + 1) / 3) - (e % 3 == (e < 0 ? -1 : 2));
57683
- if (s == 1 / 0) {
57684
- n = "5e" + e;
57685
- } else {
57686
- n = s.toExponential();
57687
- n = n.slice(0, n.indexOf("e") + 1) + e;
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()];
57688
57677
  }
57689
- r = new Ctor(n);
57690
- r.s = x.s;
57691
- } else {
57692
- r = new Ctor(s.toString());
57693
- }
57694
- sd = (e = Ctor.precision) + 3;
57695
- for (; ; ) {
57696
- t = r;
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,
58078
+ // -1 to -EXP_LIMIT
58079
+ // The maximum exponent value, above which overflow to Infinity occurs.
58080
+ // JavaScript numbers: 308 (1.7976931348623157e+308)
58081
+ maxE: EXP_LIMIT,
58082
+ // 1 to EXP_LIMIT
58083
+ // Whether to use cryptographically-secure random number generation, if available.
58084
+ crypto: false
58085
+ // true/false
58086
+ };
58087
+ var inexact;
58088
+ var quadrant;
58089
+ var external = true;
58090
+ var decimalError = "[DecimalError] ";
58091
+ var invalidArgument = decimalError + "Invalid argument: ";
58092
+ var precisionLimitExceeded = decimalError + "Precision limit exceeded";
58093
+ var cryptoUnavailable = decimalError + "crypto unavailable";
58094
+ var tag = "[object Decimal]";
58095
+ var mathfloor = Math.floor;
58096
+ var mathpow = Math.pow;
58097
+ var isBinary = /^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i;
58098
+ var isHex = /^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i;
58099
+ var isOctal = /^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i;
58100
+ var isDecimal = /^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i;
58101
+ var BASE = 1e7;
58102
+ var LOG_BASE = 7;
58103
+ var MAX_SAFE_INTEGER = 9007199254740991;
58104
+ var LN10_PRECISION = LN10.length - 1;
58105
+ var PI_PRECISION = PI.length - 1;
58106
+ var P = { toStringTag: tag };
58107
+ P.absoluteValue = P.abs = function() {
58108
+ var x = new this.constructor(this);
58109
+ if (x.s < 0) x.s = 1;
58110
+ return finalise(x);
58111
+ };
58112
+ P.ceil = function() {
58113
+ return finalise(new this.constructor(this), this.e + 1, 2);
58114
+ };
58115
+ P.clampedTo = P.clamp = function(min2, max2) {
58116
+ var k, x = this, Ctor = x.constructor;
58117
+ min2 = new Ctor(min2);
58118
+ max2 = new Ctor(max2);
58119
+ if (!min2.s || !max2.s) return new Ctor(NaN);
58120
+ if (min2.gt(max2)) throw Error(invalidArgument + max2);
58121
+ k = x.cmp(min2);
58122
+ return k < 0 ? min2 : x.cmp(max2) > 0 ? max2 : new Ctor(x);
58123
+ };
58124
+ P.comparedTo = P.cmp = function(y) {
58125
+ var i, j, xdL, ydL, x = this, xd = x.d, yd = (y = new x.constructor(y)).d, xs = x.s, ys = y.s;
58126
+ if (!xd || !yd) {
58127
+ return !xs || !ys ? NaN : xs !== ys ? xs : xd === yd ? 0 : !xd ^ xs < 0 ? 1 : -1;
58128
+ }
58129
+ if (!xd[0] || !yd[0]) return xd[0] ? xs : yd[0] ? -ys : 0;
58130
+ if (xs !== ys) return xs;
58131
+ if (x.e !== y.e) return x.e > y.e ^ xs < 0 ? 1 : -1;
58132
+ xdL = xd.length;
58133
+ ydL = yd.length;
58134
+ for (i = 0, j = xdL < ydL ? xdL : ydL; i < j; ++i) {
58135
+ if (xd[i] !== yd[i]) return xd[i] > yd[i] ^ xs < 0 ? 1 : -1;
58136
+ }
58137
+ return xdL === ydL ? 0 : xdL > ydL ^ xs < 0 ? 1 : -1;
58138
+ };
58139
+ P.cosine = P.cos = function() {
58140
+ var pr, rm, x = this, Ctor = x.constructor;
58141
+ if (!x.d) return new Ctor(NaN);
58142
+ if (!x.d[0]) return new Ctor(1);
58143
+ pr = Ctor.precision;
58144
+ rm = Ctor.rounding;
58145
+ Ctor.precision = pr + Math.max(x.e, x.sd()) + LOG_BASE;
58146
+ Ctor.rounding = 1;
58147
+ x = cosine(Ctor, toLessThanHalfPi(Ctor, x));
58148
+ Ctor.precision = pr;
58149
+ Ctor.rounding = rm;
58150
+ return finalise(quadrant == 2 || quadrant == 3 ? x.neg() : x, pr, rm, true);
58151
+ };
58152
+ P.cubeRoot = P.cbrt = function() {
58153
+ var e, m, n, r, rep, s, sd, t, t3, t3plusx, x = this, Ctor = x.constructor;
58154
+ if (!x.isFinite() || x.isZero()) return new Ctor(x);
58155
+ external = false;
58156
+ s = x.s * mathpow(x.s * x, 1 / 3);
58157
+ if (!s || Math.abs(s) == 1 / 0) {
58158
+ n = digitsToString(x.d);
58159
+ e = x.e;
58160
+ if (s = (e - n.length + 1) % 3) n += s == 1 || s == -2 ? "0" : "00";
58161
+ s = mathpow(n, 1 / 3);
58162
+ e = mathfloor((e + 1) / 3) - (e % 3 == (e < 0 ? -1 : 2));
58163
+ if (s == 1 / 0) {
58164
+ n = "5e" + e;
58165
+ } else {
58166
+ n = s.toExponential();
58167
+ n = n.slice(0, n.indexOf("e") + 1) + e;
58168
+ }
58169
+ r = new Ctor(n);
58170
+ r.s = x.s;
58171
+ } else {
58172
+ r = new Ctor(s.toString());
58173
+ }
58174
+ sd = (e = Ctor.precision) + 3;
58175
+ for (; ; ) {
58176
+ t = r;
57697
58177
  t3 = t.times(t).times(t);
57698
58178
  t3plusx = t3.plus(x);
57699
58179
  r = divide(t3plusx.plus(x).times(t), t3plusx.plus(t3), sd + 2, 1);
@@ -59360,7 +59840,7 @@ function ceil(x) {
59360
59840
  function clamp(x, min2, max2) {
59361
59841
  return new this(x).clamp(min2, max2);
59362
59842
  }
59363
- function config2(obj) {
59843
+ function config3(obj) {
59364
59844
  if (!obj || typeof obj !== "object") throw Error(decimalError + "Object expected");
59365
59845
  var i, p, v, useDefaults = obj.defaults === true, ps = [
59366
59846
  "precision",
@@ -59514,7 +59994,7 @@ function clone2(obj) {
59514
59994
  Decimal2.ROUND_HALF_CEIL = 7;
59515
59995
  Decimal2.ROUND_HALF_FLOOR = 8;
59516
59996
  Decimal2.EUCLID = 9;
59517
- Decimal2.config = Decimal2.set = config2;
59997
+ Decimal2.config = Decimal2.set = config3;
59518
59998
  Decimal2.clone = clone2;
59519
59999
  Decimal2.isDecimal = isDecimalInstance;
59520
60000
  Decimal2.abs = abs;
@@ -61683,445 +62163,69 @@ var countriesAndCurrencies = (
61683
62163
  {
61684
62164
  countryCode: "WF",
61685
62165
  countryName: "Wallis and Futuna",
61686
- currencyCode: "XPF",
61687
- population: "16025",
61688
- capital: "Mata-Utu",
61689
- continentName: "Oceania"
61690
- },
61691
- {
61692
- countryCode: "WS",
61693
- countryName: "Samoa",
61694
- currencyCode: "WST",
61695
- population: "192001",
61696
- capital: "Apia",
61697
- continentName: "Oceania"
61698
- },
61699
- {
61700
- countryCode: "XK",
61701
- countryName: "Kosovo",
61702
- currencyCode: "EUR",
61703
- population: "1800000",
61704
- capital: "Pristina",
61705
- continentName: "Europe"
61706
- },
61707
- {
61708
- countryCode: "YE",
61709
- countryName: "Yemen",
61710
- currencyCode: "YER",
61711
- population: "23495361",
61712
- capital: "Sanaa",
61713
- continentName: "Asia"
61714
- },
61715
- {
61716
- countryCode: "YT",
61717
- countryName: "Mayotte",
61718
- currencyCode: "EUR",
61719
- population: "159042",
61720
- capital: "Mamoudzou",
61721
- continentName: "Africa"
61722
- },
61723
- {
61724
- countryCode: "ZA",
61725
- countryName: "South Africa",
61726
- currencyCode: "ZAR",
61727
- population: "49000000",
61728
- capital: "Pretoria",
61729
- continentName: "Africa"
61730
- },
61731
- {
61732
- countryCode: "ZM",
61733
- countryName: "Zambia",
61734
- currencyCode: "ZMW",
61735
- population: "13460305",
61736
- capital: "Lusaka",
61737
- continentName: "Africa"
61738
- },
61739
- {
61740
- countryCode: "ZW",
61741
- countryName: "Zimbabwe",
61742
- currencyCode: "ZWL",
61743
- population: "13061000",
61744
- capital: "Harare",
61745
- continentName: "Africa"
61746
- }
61747
- ]
61748
- );
61749
-
61750
- // ../hyperline-monitoring/build/context/context.js
61751
- import { AsyncLocalStorage } from "node:async_hooks";
61752
- var executionContextStorage = new AsyncLocalStorage();
61753
- function getExecutionContext() {
61754
- return executionContextStorage.getStore();
61755
- }
61756
-
61757
- // ../hyperline-monitoring/build/context/correlationId.js
61758
- import { AsyncLocalStorage as AsyncLocalStorage2 } from "node:async_hooks";
61759
- var correlationIdStorage = new AsyncLocalStorage2();
61760
- function getCorrelationId() {
61761
- return correlationIdStorage.getStore();
61762
- }
61763
-
61764
- // ../hyperline-config/build/index.js
61765
- import "dotenv/config";
61766
- import * as stackTraceParser from "stacktrace-parser";
61767
- function coerceBoolean() {
61768
- return external_exports.any().refine((value) => ["true", "false"].includes(value), {
61769
- message: "Expected boolean"
61770
- }).transform((value) => (
61771
- // biome-ignore lint/complexity/noUselessTernary: ignore
61772
- value === "true" ? true : false
61773
- ));
61774
- }
61775
- var types = {
61776
- string: external_exports.coerce.string,
61777
- number: external_exports.coerce.number,
61778
- boolean: coerceBoolean,
61779
- enum: external_exports.enum
61780
- };
61781
- function getConfig(schema, testValues) {
61782
- const validator = external_exports.object(Object.fromEntries(Object.entries(schema).map(([key, zodType]) => {
61783
- if (zodType instanceof ZodOptional) {
61784
- return [key, external_exports.string().optional()];
61785
- }
61786
- return [key, external_exports.string()];
61787
- })));
61788
- const processEnv = process.env;
61789
- const isTestMode = processEnv.NODE_ENV === "test";
61790
- const envVariables = {
61791
- ...processEnv,
61792
- ...isTestMode && testValues ? Object.fromEntries(Object.entries(testValues).map(([key, value]) => [key, String(value)])) : {}
61793
- };
61794
- const packageName = envVariables.npm_package_name;
61795
- const parseProcessEnvResult = validator.safeParse(envVariables);
61796
- if (!parseProcessEnvResult.success) {
61797
- const parsedStackTrace = stackTraceParser.parse(parseProcessEnvResult.error.stack ?? "");
61798
- const getConfigCallLine = parsedStackTrace.find((line) => {
61799
- return !line.file?.includes("hyperline-config") && (line.file?.includes("apps/") || line.file?.includes("core/") || line.file?.includes("packages/"));
61800
- });
61801
- const callerFile = getConfigCallLine?.file;
61802
- console.error(`Invalid environment variables for service \`${packageName}\`: \`${callerFile}\``);
61803
- console.error(parseProcessEnvResult.error.format());
61804
- process.exit(1);
61805
- }
61806
- const coercion = external_exports.object(schema);
61807
- return coercion.parse(parseProcessEnvResult.data);
61808
- }
61809
-
61810
- // ../hyperline-monitoring/build/config.js
61811
- var config3 = getConfig({
61812
- // config
61813
- APP_VERSION: types.string().optional(),
61814
- DD_SERVICE: types.string().optional(),
61815
- LOGGER_CONSOLE_ENABLED: types.boolean().optional(),
61816
- LOGGER_STDOUT_ENABLED: types.boolean().optional(),
61817
- NODE_ENV: types.enum(["local", "test", "staging", "sandbox", "production"]),
61818
- EVENT_LOOP_MONITORING_ENABLED: types.boolean().optional(),
61819
- MEMORY_MONITORING_ENABLED: types.boolean().optional(),
61820
- MEMORY_MONITORING_INTERVAL_MS: types.number().optional()
61821
- // secrets
61822
- }, {
61823
- APP_VERSION: void 0,
61824
- DD_SERVICE: void 0,
61825
- LOGGER_CONSOLE_ENABLED: false,
61826
- LOGGER_STDOUT_ENABLED: false,
61827
- EVENT_LOOP_MONITORING_ENABLED: false,
61828
- MEMORY_MONITORING_ENABLED: false,
61829
- MEMORY_MONITORING_INTERVAL_MS: 3e4,
61830
- NODE_ENV: "test"
61831
- });
61832
-
61833
- // ../hyperline-monitoring/build/logger/logger.js
61834
- import * as util from "node:util";
61835
- import prune2 from "json-prune";
61836
- import * as winston from "winston";
61837
-
61838
- // ../hyperline-monitoring/build/logger/formatting/format.js
61839
- import prune from "json-prune";
61840
- var REDACTED_HEADER_KEY_PATTERN = /authorization|authenticate|cookie|secret|token|credential|signature|jwt|api[_-]?key|access[_-]?token|refresh[_-]?token|private[_-]?key/i;
61841
- function jsonFormat(info) {
61842
- const prunedInfo = JSON.parse(prune(info));
61843
- for (const [key, value] of Object.entries(prunedInfo)) {
61844
- info[key] = value;
61845
- }
61846
- return info;
61847
- }
61848
- function addMetadata({ getCorrelationId: getCorrelationId2, getExecutionContext: getExecutionContext2 }) {
61849
- return (info) => {
61850
- const correlationId = getCorrelationId2();
61851
- const executionContext = getExecutionContext2();
61852
- let traceContext;
61853
- return {
61854
- ...info,
61855
- ...executionContext ?? {},
61856
- ...traceContext ?? {},
61857
- correlationId
61858
- };
61859
- };
61860
- }
61861
- function transformErrorEnrich(info, { depth }) {
61862
- if (depth <= 0) {
61863
- return info;
61864
- }
61865
- Object.entries(info).forEach(([key, value]) => {
61866
- let newValue = value;
61867
- if (newValue instanceof Error) {
61868
- newValue = {
61869
- ...newValue,
61870
- // Copy error properties manually because they're not enumerable
61871
- level: newValue.level,
61872
- stack: newValue.stack,
61873
- message: newValue.message,
61874
- name: newValue.name
61875
- };
61876
- }
61877
- if (newValue instanceof Object) {
61878
- newValue = transformErrorEnrich(newValue, { depth: depth - 1 });
61879
- }
61880
- const isPropertyWritable = Object.getOwnPropertyDescriptor(info, key)?.writable ?? true;
61881
- if (isPropertyWritable && newValue !== value) {
61882
- info[key] = newValue;
61883
- }
61884
- });
61885
- return info;
61886
- }
61887
- function transformPrune(info) {
61888
- Object.entries(info).forEach(([key, value]) => {
61889
- if (typeof value === "function") {
61890
- return;
61891
- }
61892
- const newValue = value instanceof Object ? JSON.parse(prune(value, { depthDecr: 6 })) : value;
61893
- const isPropertyWritable = Object.getOwnPropertyDescriptor(info, key)?.writable ?? true;
61894
- if (isPropertyWritable && newValue !== value) {
61895
- info[key] = newValue;
61896
- }
61897
- });
61898
- return info;
61899
- }
61900
- function transformAxiosError(info) {
61901
- Object.entries(info).forEach(([key, value]) => {
61902
- if (typeof value === "object" && value?.name === "AxiosError") {
61903
- info[key] = formatAxiosError(value);
61904
- }
61905
- });
61906
- return info;
61907
- }
61908
- function formatAxiosError(error48) {
61909
- if (!isRecord(error48) || error48.name !== "AxiosError") {
61910
- return error48;
61911
- }
61912
- const request = isRecord(error48.config) ? error48.config : void 0;
61913
- const response = isRecord(error48.response) ? error48.response : void 0;
61914
- return {
61915
- name: error48.name,
61916
- message: error48.message,
61917
- code: error48.code,
61918
- request: {
61919
- method: request?.method,
61920
- url: request?.url,
61921
- baseURL: request?.baseURL,
61922
- params: request?.params,
61923
- headers: redactHeaders({ headers: request?.headers }),
61924
- "axios-retry": request?.["axios-retry"]
62166
+ currencyCode: "XPF",
62167
+ population: "16025",
62168
+ capital: "Mata-Utu",
62169
+ continentName: "Oceania"
61925
62170
  },
61926
- response: {
61927
- status: response?.status,
61928
- statusText: response?.statusText,
61929
- headers: redactHeaders({ headers: response?.headers }),
61930
- data: response?.data
61931
- }
61932
- };
61933
- }
61934
- function redactHeaders({ headers }) {
61935
- if (!isRecord(headers)) {
61936
- return headers;
61937
- }
61938
- return Object.fromEntries(Object.entries(headers).map(([headerKey, headerValue]) => [
61939
- headerKey,
61940
- REDACTED_HEADER_KEY_PATTERN.test(headerKey) ? "<redacted>" : headerValue
61941
- ]));
61942
- }
61943
- function isRecord(value) {
61944
- return typeof value === "object" && value !== null && !Array.isArray(value);
61945
- }
61946
-
61947
- // ../hyperline-monitoring/build/logger/formatting/routePath.js
61948
- function transformUrlIntoRoutePath({ params, originalUrl }) {
61949
- let routePath = originalUrl;
61950
- for (const [param, value] of Object.entries(params ?? {})) {
61951
- const strValue = Array.isArray(value) ? value.join("/") : value;
61952
- routePath = routePath.replace(strValue, `:${param}`);
61953
- }
61954
- return routePath.split("?")[0] ?? routePath;
61955
- }
61956
-
61957
- // ../hyperline-monitoring/build/logger/formatting/http.js
61958
- function logHttpRequest(logger2, request, extra) {
61959
- const { message, metadata } = transform2(request);
61960
- logger2.info(`HTTP REQ - ${message} ${extra?.postfix || ""}`, {
61961
- ...metadata,
61962
- ...extra?.metadata ?? {}
61963
- });
61964
- }
61965
- function logHttpResponse(logger2, response, responseTime, extra) {
61966
- const { request, statusCode, responseBody, responseHeaders } = response;
61967
- const { message, metadata } = transform2(request);
61968
- const readableResponseTime = responseTime ? getReadableTime(responseTime) : void 0;
61969
- const responseMetadata = {
61970
- statusCode,
61971
- responseTime,
61972
- responseBody,
61973
- // Redacted so secrets (authorization/cookie/token/…) never reach the logs
61974
- // while diagnostic headers (e.g. rate-limit headers on a 429) stay visible.
61975
- responseHeaders: responseHeaders === void 0 ? void 0 : redactHeaders({ headers: responseHeaders })
61976
- };
61977
- logger2.info(`HTTP RES - ${message} ${statusCode} ${readableResponseTime || ""} ${extra?.postfix || ""}`, {
61978
- ...metadata,
61979
- ...responseMetadata,
61980
- ...extra?.metadata ?? {}
61981
- });
61982
- }
61983
- function transform2(request) {
61984
- const method = request.method.toUpperCase();
61985
- const message = `${method} ${request.originalUrl}`;
61986
- const metadata = {};
61987
- metadata.method = method;
61988
- metadata.url = request.url;
61989
- metadata.path = request.path;
61990
- metadata.hostname = request.hostname;
61991
- metadata.originalUrl = request.originalUrl;
61992
- metadata.requestBody = request.body;
61993
- metadata.routePath = transformUrlIntoRoutePath(request);
61994
- metadata.apiKeyEnd = request.headers["authorization"]?.slice(-6);
61995
- return { message, metadata };
61996
- }
61997
- function getReadableTime(time3) {
61998
- return time3 < 1e4 ? `${time3}ms` : `${Math.round(time3 / 1e3)}s`;
61999
- }
62000
-
62001
- // ../hyperline-monitoring/build/logger/utils/network.js
62002
- import * as os2 from "node:os";
62003
- function getIpAddress() {
62004
- const interfaces = Object.values(os2.networkInterfaces()).flat().filter((networkInterface) => {
62005
- return networkInterface !== void 0;
62006
- });
62007
- const mainInterface = interfaces.find(({ family, internal }) => family === "IPv4" && internal === false);
62008
- return mainInterface ? mainInterface.address : null;
62009
- }
62010
-
62011
- // ../hyperline-monitoring/build/logger/logger.js
62012
- function buildLoggerFactory({ config: config4, context }) {
62013
- const defaultMeta = {
62014
- env: context.env,
62015
- service: context.service,
62016
- version: context.version,
62017
- pid: process.pid,
62018
- ppid: process.ppid,
62019
- host: getIpAddress()
62020
- };
62021
- const transports2 = [];
62022
- if (config4.enableConsoleTransport) {
62023
- transports2.push(createTransportConsole());
62024
- }
62025
- if (config4.enableStdoutTransport) {
62026
- transports2.push(createTransportStdout());
62027
- }
62028
- if (Object.values(config4).every((value) => !value)) {
62029
- transports2.push(createTransportSilent());
62030
- }
62031
- for (const transport of transports2) {
62032
- transport.on("error", (error48) => {
62033
- console.error(`Unable to log to transport=${transport.name}: ${error48.message} ${JSON.stringify(error48)}`);
62034
- });
62035
- }
62036
- const internalLogger = winston.createLogger({
62037
- transports: transports2,
62038
- defaultMeta,
62039
- 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()),
62040
- exitOnError: false
62041
- });
62042
- function createLogger3({ serviceName }) {
62043
- const logger2 = internalLogger.child({ subService: serviceName });
62044
- return {
62045
- debug: bindLogger(logger2, "debug"),
62046
- info: bindLogger(logger2, "info"),
62047
- warn: bindLogger(logger2, "warn"),
62048
- error: bindLogger(logger2, "error"),
62049
- on: logger2.on.bind(logger2),
62050
- end: logger2.end.bind(logger2)
62051
- };
62052
- }
62053
- return {
62054
- createLogger: createLogger3
62055
- };
62056
- }
62057
- function bindLogger(logger2, severity) {
62058
- return (message, data) => {
62059
- logger2[severity].bind(logger2)(message, preserveReservedKeys(data));
62060
- };
62061
- }
62062
- function preserveReservedKeys(data) {
62063
- if (!data)
62064
- return;
62065
- return Object.fromEntries(Object.entries(data).map(([key, value]) => {
62066
- let finalKey = key;
62067
- if (key === "status") {
62068
- finalKey = "_status";
62069
- } else if (key === "service") {
62070
- finalKey = "_service";
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"
62071
62226
  }
62072
- return [finalKey, value];
62073
- }));
62074
- }
62075
- var verboseLevels = ["warn", "error", "debug"];
62076
- function createTransportConsole() {
62077
- return new winston.transports.Console({
62078
- level: "debug",
62079
- handleExceptions: true,
62080
- format: winston.format.combine(winston.format(jsonFormat)(), winston.format((info) => {
62081
- const { level, message, ...others } = info;
62082
- const parts = [message];
62083
- if (Object.keys(others).length > 0 && verboseLevels.includes(level)) {
62084
- const rawOthers = JSON.parse(prune2(others));
62085
- parts.push(util.inspect(rawOthers, false, 4, true));
62086
- }
62087
- info.message = parts.filter((part) => !!part).join("\n");
62088
- return info;
62089
- })(), winston.format.colorize(), winston.format.printf(({ timestamp, level, message, service = "?" }) => {
62090
- const result = `[${timestamp}] ${level} ${service}: ${message}`;
62091
- return result.replace(/\\n/g, "\n");
62092
- }))
62093
- });
62094
- }
62095
- function createTransportStdout() {
62096
- return new winston.transports.Console({
62097
- level: "debug",
62098
- handleExceptions: true,
62099
- format: winston.format.combine(winston.format(jsonFormat)(), winston.format.timestamp(), winston.format.json())
62100
- });
62101
- }
62102
- function createTransportSilent() {
62103
- return new winston.transports.Console({
62104
- silent: true
62105
- });
62106
- }
62107
-
62108
- // ../hyperline-monitoring/build/logger/instance.js
62109
- var loggerFactory = buildLoggerFactory({
62110
- config: {
62111
- enableConsoleTransport: config3.LOGGER_CONSOLE_ENABLED ?? false,
62112
- enableStdoutTransport: config3.LOGGER_STDOUT_ENABLED ?? false
62113
- },
62114
- context: {
62115
- env: config3.NODE_ENV,
62116
- service: config3.DD_SERVICE ?? "api",
62117
- version: config3.APP_VERSION
62118
- }
62119
- });
62120
- var createLogger2 = loggerFactory.createLogger;
62121
- var logger = loggerFactory.createLogger({ serviceName: "default" });
62122
-
62123
- // ../hyperline-monitoring/build/tracing/tracing.js
62124
- import tracer from "dd-trace";
62227
+ ]
62228
+ );
62125
62229
 
62126
62230
  // ../hyperline-lib/build/utils/config/usStates.js
62127
62231
  var usStates = [
@@ -62253,6 +62357,12 @@ var DateTimeSchema = external_exports.iso.datetime({
62253
62357
  example: "2024-12-20T16:04:11Z"
62254
62358
  });
62255
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
+
62256
62366
  // ../hyperline-lib/build/http/dto/error.js
62257
62367
  var ErrorSchema = external_exports.object({
62258
62368
  message: external_exports.string()
@@ -62309,6 +62419,7 @@ var de = {
62309
62419
  "accounting.transactionSettled.entryDescription": "Zahlungsabwicklung f\xFCr Rechnung {{invoiceId}}",
62310
62420
  "accounting.transactionRefunded.entryDescription": "R\xFCckerstattung f\xFCr Rechnung {{invoiceId}}",
62311
62421
  "accounting.creditNotePosted.entryDescription": "Gutschrift {{creditNoteId}} f\xFCr Rechnung {{invoiceId}}",
62422
+ "accounting.standaloneCreditNotePosted.entryDescription": "Gutschrift {{creditNoteId}}",
62312
62423
  "accounting.revrec.creditLineDescription": "Umsatz realisieren \u2013 Zeitplan {{scheduleId}}, Zeitraum {{periodDate}}",
62313
62424
  "accounting.revrec.debitLineDescription": "Abgrenzungsposten reduzieren \u2013 Zeitplan {{scheduleId}}, Zeitraum {{periodDate}}",
62314
62425
  "accounting.revrec.discountCreditLineDescription": "Erl\xF6sminderung (Rabatt) erfassen \u2013 Zeitplan {{scheduleId}}, Zeitraum {{periodDate}}",
@@ -62380,6 +62491,7 @@ var en = {
62380
62491
  "accounting.transactionSettled.entryDescription": "Payment settlement for Invoice {{invoiceId}}",
62381
62492
  "accounting.transactionRefunded.entryDescription": "Refund for Invoice {{invoiceId}}",
62382
62493
  "accounting.creditNotePosted.entryDescription": "Credit note {{creditNoteId}} for Invoice {{invoiceId}}",
62494
+ "accounting.standaloneCreditNotePosted.entryDescription": "Credit note {{creditNoteId}}",
62383
62495
  "accounting.revrec.entryDescription": "Revenue recognition for schedule {{scheduleId}}, period {{periodStart}} - {{periodEnd}}",
62384
62496
  "accounting.revrec.debitLineDescription": "Decrease deferred revenue \u2013 schedule {{scheduleId}}, period {{periodDate}}",
62385
62497
  "accounting.revrec.creditLineDescription": "Recognize revenue \u2013 schedule {{scheduleId}}, period {{periodDate}}",
@@ -62397,6 +62509,7 @@ var es = {
62397
62509
  "accounting.transactionSettled.entryDescription": "Liquidaci\xF3n de pago para la factura {{invoiceId}}",
62398
62510
  "accounting.transactionRefunded.entryDescription": "Reembolso de la factura {{invoiceId}}",
62399
62511
  "accounting.creditNotePosted.entryDescription": "Nota de cr\xE9dito {{creditNoteId}} para la factura {{invoiceId}}",
62512
+ "accounting.standaloneCreditNotePosted.entryDescription": "Nota de cr\xE9dito {{creditNoteId}}",
62400
62513
  "accounting.revrec.creditLineDescription": "Reconocer ingresos \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
62401
62514
  "accounting.revrec.debitLineDescription": "Disminuci\xF3n de ingresos diferidos \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
62402
62515
  "accounting.revrec.discountCreditLineDescription": "Reconocer contra-ingresos (descuento) \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
@@ -62446,6 +62559,7 @@ var fr = {
62446
62559
  "accounting.transactionSettled.entryDescription": "R\xE8glement de la facture {{invoiceId}}",
62447
62560
  "accounting.transactionRefunded.entryDescription": "Remboursement de la facture {{invoiceId}}",
62448
62561
  "accounting.creditNotePosted.entryDescription": "Avoir {{creditNoteId}} pour la facture {{invoiceId}}",
62562
+ "accounting.standaloneCreditNotePosted.entryDescription": "Avoir {{creditNoteId}}",
62449
62563
  "accounting.revrec.entryDescription": "Reconnaissance du chiffre d'affaires pour l'\xE9ch\xE9ancier {{scheduleId}}, p\xE9riode {{periodStart}} - {{periodEnd}}",
62450
62564
  "creditNotes.refundChargeName": "Remboursement pour facture",
62451
62565
  "credits.bundleOf": "{{productName}} - Pack de {{creditCount}} cr\xE9dits",
@@ -62485,6 +62599,7 @@ var it = {
62485
62599
  "accounting.transactionSettled.entryDescription": "Regolamento pagamento per la fattura {{invoiceId}}",
62486
62600
  "accounting.transactionRefunded.entryDescription": "Rimborso per la fattura {{invoiceId}}",
62487
62601
  "accounting.creditNotePosted.entryDescription": "Nota di credito {{creditNoteId}} per la fattura {{invoiceId}}",
62602
+ "accounting.standaloneCreditNotePosted.entryDescription": "Nota di credito {{creditNoteId}}",
62488
62603
  "accounting.revrec.creditLineDescription": "Riconoscere i ricavi \u2013 programma {{scheduleId}}, periodo {{periodDate}}",
62489
62604
  "accounting.revrec.debitLineDescription": "Diminuzione dei ricavi differiti \u2013 programma {{scheduleId}}, periodo {{periodDate}}",
62490
62605
  "accounting.revrec.discountCreditLineDescription": "Riconoscere il contra-ricavo (sconto) \u2013 programma {{scheduleId}}, periodo {{periodDate}}",
@@ -62529,6 +62644,7 @@ var nl = {
62529
62644
  "accounting.transactionSettled.entryDescription": "Betalingsafwikkeling voor factuur {{invoiceId}}",
62530
62645
  "accounting.transactionRefunded.entryDescription": "Terugbetaling voor factuur {{invoiceId}}",
62531
62646
  "accounting.creditNotePosted.entryDescription": "Creditnota {{creditNoteId}} voor factuur {{invoiceId}}",
62647
+ "accounting.standaloneCreditNotePosted.entryDescription": "Creditnota {{creditNoteId}}",
62532
62648
  "accounting.revrec.creditLineDescription": "Omzet erkennen \u2013 schema {{scheduleId}}, periode {{periodDate}}",
62533
62649
  "accounting.revrec.debitLineDescription": "Uitgestelde omzet verlagen \u2013 schema {{scheduleId}}, periode {{periodDate}}",
62534
62650
  "accounting.revrec.discountCreditLineDescription": "Omzetvermindering (korting) erkennen \u2013 schema {{scheduleId}}, periode {{periodDate}}",
@@ -62573,6 +62689,7 @@ var pl = {
62573
62689
  "accounting.transactionSettled.entryDescription": "Rozliczenie p\u0142atno\u015Bci dla faktury {{invoiceId}}",
62574
62690
  "accounting.transactionRefunded.entryDescription": "Zwrot za faktur\u0119 {{invoiceId}}",
62575
62691
  "accounting.creditNotePosted.entryDescription": "Nota kredytowa {{creditNoteId}} dla faktury {{invoiceId}}",
62692
+ "accounting.standaloneCreditNotePosted.entryDescription": "Nota kredytowa {{creditNoteId}}",
62576
62693
  "accounting.revrec.creditLineDescription": "Rozpoznanie przychodu \u2013 harmonogram {{scheduleId}}, okres {{periodDate}}",
62577
62694
  "accounting.revrec.debitLineDescription": "Zmniejszenie przychod\xF3w przysz\u0142ych okres\xF3w \u2013 harmonogram {{scheduleId}}, okres {{periodDate}}",
62578
62695
  "accounting.revrec.discountCreditLineDescription": "Rozpoznanie kontra-przychodu (rabat) \u2013 harmonogram {{scheduleId}}, okres {{periodDate}}",
@@ -62617,6 +62734,7 @@ var pt = {
62617
62734
  "accounting.transactionSettled.entryDescription": "Liquida\xE7\xE3o de pagamento para a fatura {{invoiceId}}",
62618
62735
  "accounting.transactionRefunded.entryDescription": "Reembolso da fatura {{invoiceId}}",
62619
62736
  "accounting.creditNotePosted.entryDescription": "Nota de cr\xE9dito {{creditNoteId}} para a fatura {{invoiceId}}",
62737
+ "accounting.standaloneCreditNotePosted.entryDescription": "Nota de cr\xE9dito {{creditNoteId}}",
62620
62738
  "accounting.revrec.creditLineDescription": "Reconhecer receita \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
62621
62739
  "accounting.revrec.debitLineDescription": "Diminui\xE7\xE3o da receita diferida \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
62622
62740
  "accounting.revrec.discountCreditLineDescription": "Reconhecer contra-receita (desconto) \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",