@utilix-tech/sdk 0.59.0 → 0.61.0

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.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,13 @@
2
2
 
3
3
  Full release notes for all Utilix surfaces (browser tools, REST API, SDKs, MCP server) live at [utilix.tech/changelog](https://utilix.tech/changelog). This file tracks just this package.
4
4
 
5
+ ## 0.61.0
6
+ - Add `calculateExtraPaymentPayoff` (extra-payment-mortgage-calculator): compute how much faster a fixed-rate loan pays off, and how much interest is saved, when a fixed extra amount is added to every monthly payment.
7
+
8
+ ## 0.60.0
9
+ - Add `buildRetryAfterHeader`, `parseRetryAfterHeader` (retry-after-builder): build an HTTP Retry-After response header from a delay in seconds or a target date, or parse an existing one, per RFC 9110.
10
+ - Add `calculateFreelancerRate` (freelancer-rate-calculator): solve for the minimum hourly rate a freelancer must charge to hit a target annual income, given billable hours, weeks worked, overhead, and a profit margin.
11
+
5
12
  ## 0.59.0
6
13
  - Add `buildPreferHeader`, `parsePreferHeader` (prefer-header): build an HTTP Prefer request-header value from preferences with optional values and parameters per RFC 7240, or parse an existing one into the same shape.
7
14
  - Add `dedupeNdjson` (ndjson-dedup): remove duplicate records from NDJSON input, either by exact structural equality or by a chosen key field, keeping the first occurrence of each duplicate.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @utilix-tech/sdk
2
2
 
3
- **662 developer utility functions for Node.js: runs locally, no API key required.**
3
+ **666 developer utility functions for Node.js: runs locally, no API key required.**
4
4
 
5
5
  [![npm version](https://img.shields.io/npm/v/@utilix-tech/sdk?style=flat-square&color=cb3837)](https://www.npmjs.com/package/@utilix-tech/sdk)
6
6
  [![npm downloads](https://img.shields.io/npm/dm/@utilix-tech/sdk?style=flat-square)](https://www.npmjs.com/package/@utilix-tech/sdk)
@@ -343,7 +343,7 @@ formatIso8601Duration(90061); // { iso: "P1DT1H1M1S", ... }
343
343
  ### `/units`: Conversions
344
344
 
345
345
  ```ts
346
- import { convertBytes, pxToAll, convert, formatValue, validateCardNumber, validateIban, calculateLoan, validateBarcode, calculateTax, calculateCompoundInterest, validateIsbn, calculateTipSplit, calculateSimpleInterest, calculateTimeValue, calculatePercentageChange, convertAprApy, calculateMarginMarkup, calculateDiscount, applySuccessiveDiscounts, calculateBreakEven, calculateVideoBitrate, calculateRuleOf72, calculateEmi, calculateRoi, compareUnitPrices, calculatePaybackPeriod, calculateCdMaturity, calculateDepreciationSchedule, calculateCashRounding, calculateMovingAverages, calculateGpa, calculateCreditUtilization, calculateDebtToIncomeRatio, calculateBlendedLoanRate } from "@utilix-tech/sdk/units";
346
+ import { convertBytes, pxToAll, convert, formatValue, validateCardNumber, validateIban, calculateLoan, validateBarcode, calculateTax, calculateCompoundInterest, validateIsbn, calculateTipSplit, calculateSimpleInterest, calculateTimeValue, calculatePercentageChange, convertAprApy, calculateMarginMarkup, calculateDiscount, applySuccessiveDiscounts, calculateBreakEven, calculateVideoBitrate, calculateRuleOf72, calculateEmi, calculateRoi, compareUnitPrices, calculatePaybackPeriod, calculateCdMaturity, calculateDepreciationSchedule, calculateCashRounding, calculateMovingAverages, calculateGpa, calculateCreditUtilization, calculateDebtToIncomeRatio, calculateBlendedLoanRate, calculateFreelancerRate, calculateExtraPaymentPayoff } from "@utilix-tech/sdk/units";
347
347
 
348
348
  // File sizes
349
349
  convertBytes(1073741824, "GB"); // 1
@@ -485,6 +485,14 @@ calculateCreditUtilization([{ label: "Visa", balance: 500, limit: 5000 }, { labe
485
485
  // Debt-to-income (DTI) ratio, plus a qualitative tier matching common mortgage-lending guidance
486
486
  calculateDebtToIncomeRatio([{ label: "Rent", amount: 1500 }, { label: "Car loan", amount: 400 }], 5000);
487
487
  // { dtiPercent: 38, tier: "moderate", totalMonthlyDebt: 1900, grossMonthlyIncome: 5000, debts: [...] }
488
+
489
+ // Minimum hourly rate to hit a target annual income, given billable hours, weeks worked, overhead, and margin
490
+ calculateFreelancerRate({ targetAnnualIncome: 80000, billableHoursPerWeek: 25, weeksPerYear: 48 });
491
+ // { hourlyRate: 66.67, dailyRate: 533.33, requiredAnnualRevenue: 80000, annualBillableHours: 1200, monthlyRevenueTarget: 6666.67 }
492
+
493
+ // How much sooner a loan pays off, and how much interest is saved, with a fixed extra monthly payment
494
+ calculateExtraPaymentPayoff(200000, 6, 360, 200);
495
+ // { monthlyPayment: 1199.1, newPayoffMonths: 252, monthsSaved: 108, interestSaved: 79800.86, ... }
488
496
  ```
489
497
 
490
498
  ---
@@ -501,7 +509,8 @@ import { getStatusCode, isValidIp, isValidIpv4, isValidIpv6,
501
509
  buildContentDisposition, parseContentDisposition,
502
510
  buildXContentTypeOptionsHeader, parseXContentTypeOptionsHeader, assessContentTypeRisk,
503
511
  buildAcceptLanguage, parseAcceptLanguage,
504
- buildPreferHeader, parsePreferHeader } from "@utilix-tech/sdk/network";
512
+ buildPreferHeader, parsePreferHeader,
513
+ buildRetryAfterHeader, parseRetryAfterHeader } from "@utilix-tech/sdk/network";
505
514
 
506
515
  getStatusCode(404);
507
516
  // { code: 404, text: "Not Found", description: "...", category: "Client Error" }
@@ -626,6 +635,14 @@ buildPreferHeader([{ token: "respond-async" }, { token: "wait", value: "100" }])
626
635
  // Parse an existing Prefer header value into the same shape
627
636
  parsePreferHeader("return=minimal;handling=lenient");
628
637
  // { header: "Prefer: return=minimal;handling=lenient", headerValue: "return=minimal;handling=lenient", preferences: [...] }
638
+
639
+ // Build a Retry-After response header from a delay in seconds or a target date, per RFC 9110
640
+ buildRetryAfterHeader({ seconds: 120 });
641
+ // { header: "Retry-After: 120", headerValue: "120", type: "seconds", seconds: 120 }
642
+
643
+ // Parse an existing Retry-After header value into the same shape
644
+ parseRetryAfterHeader("Retry-After: 120");
645
+ // { header: "Retry-After: 120", headerValue: "120", type: "seconds", seconds: 120 }
629
646
  ```
630
647
 
631
648
  ---
@@ -884,8 +901,8 @@ inspectGifFrames(new Uint8Array(gifBytes));
884
901
  | `@utilix-tech/sdk/data` | CSV, YAML, TOML, XML, INI, NDJSON parse and convert, NDJSON record deduplicator, SRT/WebVTT subtitles, Markdown front matter parser, YAML anchor/alias resolver, CSV column type inferencer |
885
902
  | `@utilix-tech/sdk/generators` | UUID v4/v7, ULID, passwords, strength check, entropy estimator, fake data, CSP nonce generator |
886
903
  | `@utilix-tech/sdk/time` | Date diff, timezone convert, cron parse, relative time |
887
- | `@utilix-tech/sdk/units` | Bytes, CSS px/rem, number bases, currency format, credit card/IBAN/barcode/ISBN validation, loan calculator, EMI calculator, compound/simple interest calculators, VAT/sales tax calculator, tip/bill split calculator, break-even point calculator, Rule of 72 calculator, savings goal calculator, ROI calculator, cash denomination/till calculator, payback period calculator, CD maturity calculator, debt-to-income ratio calculator |
888
- | `@utilix-tech/sdk/network` | HTTP status codes, IP validation, country flags, geolocation URLs, HAR file parsing, User-Agent parsing, IPv6 address compress/expand, Permissions-Policy header builder, Client Hints header builder/parser, Content-Disposition header builder/parser, X-Content-Type-Options header builder/risk assessor, sitemap.xml validator, sitemap index splitter, Prefer header builder/parser (RFC 7240) |
904
+ | `@utilix-tech/sdk/units` | Bytes, CSS px/rem, number bases, currency format, credit card/IBAN/barcode/ISBN validation, loan calculator, EMI calculator, compound/simple interest calculators, VAT/sales tax calculator, tip/bill split calculator, break-even point calculator, Rule of 72 calculator, savings goal calculator, ROI calculator, cash denomination/till calculator, payback period calculator, CD maturity calculator, debt-to-income ratio calculator, freelancer hourly rate calculator |
905
+ | `@utilix-tech/sdk/network` | HTTP status codes, IP validation, country flags, geolocation URLs, HAR file parsing, User-Agent parsing, IPv6 address compress/expand, Permissions-Policy header builder, Client Hints header builder/parser, Content-Disposition header builder/parser, X-Content-Type-Options header builder/risk assessor, sitemap.xml validator, sitemap index splitter, Prefer header builder/parser (RFC 7240), Retry-After header builder/parser (RFC 9110) |
889
906
  | `@utilix-tech/sdk/api` | cURL build/parse, JWT decode/sign, JWKS parse, CORS headers, CSP header |
890
907
  | `@utilix-tech/sdk/code` | SQL format/minify, HTML format/minify, regex tester, GraphQL format, MIME type lookup, GitHub URL parsing, regex ReDoS detector, Conventional Commits linter, package.json exports field validator |
891
908
  | `@utilix-tech/sdk/color` | Hex/RGB/HSL/HSV/CMYK convert, palette generation, contrast check |
@@ -25,6 +25,7 @@ __export(network_exports, {
25
25
  buildPreferHeader: () => buildPreferHeader,
26
26
  buildRangeHeader: () => buildRangeHeader,
27
27
  buildReferrerPolicy: () => buildReferrerPolicy,
28
+ buildRetryAfterHeader: () => buildRetryAfterHeader,
28
29
  buildVaryHeader: () => buildVaryHeader,
29
30
  buildXContentTypeOptionsHeader: () => buildXContentTypeOptionsHeader,
30
31
  checkSetCookieHeader: () => checkSetCookieHeader,
@@ -52,6 +53,7 @@ __export(network_exports, {
52
53
  parseIpv6Address: () => parseIpv6Address,
53
54
  parsePermissionsPolicy: () => parsePermissionsPolicy,
54
55
  parsePreferHeader: () => parsePreferHeader,
56
+ parseRetryAfterHeader: () => parseRetryAfterHeader,
55
57
  parseUserAgent: () => parseUserAgent,
56
58
  parseVaryHeader: () => parseVaryHeader,
57
59
  parseXContentTypeOptionsHeader: () => parseXContentTypeOptionsHeader,
@@ -2985,5 +2987,37 @@ function parsePreferHeader(raw) {
2985
2987
  const headerValue = formatPreferPreferences(preferences);
2986
2988
  return { header: `Prefer: ${headerValue}`, headerValue, preferences };
2987
2989
  }
2990
+ function buildRetryAfterHeader(input) {
2991
+ const { seconds, date } = input;
2992
+ const hasSeconds = seconds !== void 0;
2993
+ const hasDate = date !== void 0 && date !== "";
2994
+ if (hasSeconds && hasDate) return { error: "Provide either seconds or date, not both" };
2995
+ if (!hasSeconds && !hasDate) return { error: "seconds or date is required" };
2996
+ if (hasSeconds) {
2997
+ if (typeof seconds !== "number" || !Number.isFinite(seconds) || !Number.isInteger(seconds) || seconds < 0) {
2998
+ return { error: "seconds must be a non-negative integer" };
2999
+ }
3000
+ return { header: `Retry-After: ${seconds}`, headerValue: String(seconds), type: "seconds", seconds };
3001
+ }
3002
+ const parsed = new Date(date);
3003
+ if (Number.isNaN(parsed.getTime())) return { error: "date must be a valid date/time string" };
3004
+ const httpDate = parsed.toUTCString();
3005
+ return { header: `Retry-After: ${httpDate}`, headerValue: httpDate, type: "http-date", httpDate, iso: parsed.toISOString() };
3006
+ }
3007
+ function parseRetryAfterHeader(raw) {
3008
+ if (!raw || raw.trim() === "") return { error: "Input is empty" };
3009
+ const value = raw.trim().replace(/^retry-after:\s*/i, "").trim();
3010
+ if (value === "") return { error: "Input is empty" };
3011
+ if (/^\d+$/.test(value)) {
3012
+ const seconds = parseInt(value, 10);
3013
+ return { header: `Retry-After: ${seconds}`, headerValue: String(seconds), type: "seconds", seconds };
3014
+ }
3015
+ const parsed = new Date(value);
3016
+ if (Number.isNaN(parsed.getTime())) {
3017
+ return { error: "Value is neither a non-negative integer (seconds) nor a valid HTTP-date" };
3018
+ }
3019
+ const httpDate = parsed.toUTCString();
3020
+ return { header: `Retry-After: ${httpDate}`, headerValue: httpDate, type: "http-date", httpDate, iso: parsed.toISOString() };
3021
+ }
2988
3022
 
2989
- export { CLIENT_HINTS, DNS_RECORD_TYPES, HTTP_HEADERS, LINK_REL_VALUES, PERMISSIONS_POLICY_FEATURES, REFERRER_POLICY_VALUES, STATUS_CODES, X_CONTENT_TYPE_OPTIONS_HEADER, analyzeEmailHeaders, assessContentTypeRisk, buildAcceptLanguage, buildCacheControl, buildClientHints, buildContentDisposition, buildDnsQueryUrl, buildGeoUrl, buildLinkHeader, buildMapUrl, buildPermissionsPolicy, buildPreferHeader, buildRangeHeader, buildReferrerPolicy, buildVaryHeader, buildXContentTypeOptionsHeader, checkSetCookieHeader, countryCodeToFlag, formatCoordinates, formatTtl, getByCategory, getHeader, getHeadersByCategory, getStatusByCategory, getStatusCode, isClientError, isServerError, isSuccess, isValidIp, isValidIpv4, isValidIpv6, network_exports, parseAcceptLanguage, parseClientHintHeaders, parseContentDisposition, parseContentRangeHeader, parseDnsResponse, parseGeoResponse, parseHar, parseIpv6Address, parsePermissionsPolicy, parsePreferHeader, parseUserAgent, parseVaryHeader, parseXContentTypeOptionsHeader, searchHeaders, searchStatusCodes, splitSitemap, statusCodeToText, typeNumberToLabel, validateDomain, validateHeaderName, validateHeaderValue, validateManifest, validateRobotsTxt, validateSitemap };
3023
+ export { CLIENT_HINTS, DNS_RECORD_TYPES, HTTP_HEADERS, LINK_REL_VALUES, PERMISSIONS_POLICY_FEATURES, REFERRER_POLICY_VALUES, STATUS_CODES, X_CONTENT_TYPE_OPTIONS_HEADER, analyzeEmailHeaders, assessContentTypeRisk, buildAcceptLanguage, buildCacheControl, buildClientHints, buildContentDisposition, buildDnsQueryUrl, buildGeoUrl, buildLinkHeader, buildMapUrl, buildPermissionsPolicy, buildPreferHeader, buildRangeHeader, buildReferrerPolicy, buildRetryAfterHeader, buildVaryHeader, buildXContentTypeOptionsHeader, checkSetCookieHeader, countryCodeToFlag, formatCoordinates, formatTtl, getByCategory, getHeader, getHeadersByCategory, getStatusByCategory, getStatusCode, isClientError, isServerError, isSuccess, isValidIp, isValidIpv4, isValidIpv6, network_exports, parseAcceptLanguage, parseClientHintHeaders, parseContentDisposition, parseContentRangeHeader, parseDnsResponse, parseGeoResponse, parseHar, parseIpv6Address, parsePermissionsPolicy, parsePreferHeader, parseRetryAfterHeader, parseUserAgent, parseVaryHeader, parseXContentTypeOptionsHeader, searchHeaders, searchStatusCodes, splitSitemap, statusCodeToText, typeNumberToLabel, validateDomain, validateHeaderName, validateHeaderValue, validateManifest, validateRobotsTxt, validateSitemap };
@@ -33,6 +33,8 @@ __export(units_exports, {
33
33
  calculateDepreciationSchedule: () => calculateDepreciationSchedule,
34
34
  calculateDiscount: () => calculateDiscount,
35
35
  calculateEmi: () => calculateEmi,
36
+ calculateExtraPaymentPayoff: () => calculateExtraPaymentPayoff,
37
+ calculateFreelancerRate: () => calculateFreelancerRate,
36
38
  calculateGpa: () => calculateGpa,
37
39
  calculateLoan: () => calculateLoan,
38
40
  calculateMarginMarkup: () => calculateMarginMarkup,
@@ -1151,6 +1153,39 @@ function calculateLoan(principal, annualRatePercent, termMonths) {
1151
1153
  schedule
1152
1154
  };
1153
1155
  }
1156
+ function calculateExtraPaymentPayoff(principal, annualRatePercent, termMonths, extraMonthlyPayment) {
1157
+ const baseline = calculateLoan(principal, annualRatePercent, termMonths);
1158
+ if ("error" in baseline) return baseline;
1159
+ if (!Number.isFinite(extraMonthlyPayment) || extraMonthlyPayment < 0) {
1160
+ return { error: "Extra monthly payment must be zero or a positive number" };
1161
+ }
1162
+ const monthlyRate = annualRatePercent / 100 / 12;
1163
+ const payment = round2(baseline.monthlyPayment) + round2(extraMonthlyPayment);
1164
+ let balance = round2(principal);
1165
+ let totalInterestPaid = 0;
1166
+ let payoffMonths = termMonths;
1167
+ for (let month = 1; month <= termMonths; month++) {
1168
+ const interest = monthlyRate === 0 ? 0 : round2(balance * monthlyRate);
1169
+ let principalPortion = payment - interest;
1170
+ if (principalPortion > balance) principalPortion = balance;
1171
+ totalInterestPaid += interest;
1172
+ balance = round2(balance - principalPortion);
1173
+ if (balance <= 0) {
1174
+ payoffMonths = month;
1175
+ break;
1176
+ }
1177
+ }
1178
+ return {
1179
+ monthlyPayment: round2(baseline.monthlyPayment),
1180
+ extraMonthlyPayment: round2(extraMonthlyPayment),
1181
+ baselinePayoffMonths: termMonths,
1182
+ baselineTotalInterest: baseline.totalInterest,
1183
+ newPayoffMonths: payoffMonths,
1184
+ newTotalInterest: round2(totalInterestPaid),
1185
+ monthsSaved: termMonths - payoffMonths,
1186
+ interestSaved: round2(baseline.totalInterest - totalInterestPaid)
1187
+ };
1188
+ }
1154
1189
  var BARCODE_FORMAT_BY_LENGTH = { 8: "EAN-8", 12: "UPC-A", 13: "EAN-13" };
1155
1190
  function computeBarcodeCheckDigit(dataDigits) {
1156
1191
  let sum = 0;
@@ -2311,5 +2346,40 @@ function calculateBlendedLoanRate(loans) {
2311
2346
  totalAnnualInterest: round22(totalMonthlyInterest * 12)
2312
2347
  };
2313
2348
  }
2349
+ function calculateFreelancerRate(input) {
2350
+ const { targetAnnualIncome, billableHoursPerWeek, weeksPerYear } = input;
2351
+ const annualOverheadCosts = input.annualOverheadCosts ?? 0;
2352
+ const profitMarginPercent = input.profitMarginPercent ?? 0;
2353
+ if (!Number.isFinite(targetAnnualIncome) || targetAnnualIncome < 0) {
2354
+ return { error: "targetAnnualIncome must be a finite, non-negative number" };
2355
+ }
2356
+ if (!Number.isFinite(billableHoursPerWeek) || billableHoursPerWeek <= 0 || billableHoursPerWeek > 168) {
2357
+ return { error: "billableHoursPerWeek must be a finite number greater than zero and at most 168" };
2358
+ }
2359
+ if (!Number.isFinite(weeksPerYear) || weeksPerYear <= 0 || weeksPerYear > 52) {
2360
+ return { error: "weeksPerYear must be a finite number greater than zero and at most 52" };
2361
+ }
2362
+ if (!Number.isFinite(annualOverheadCosts) || annualOverheadCosts < 0) {
2363
+ return { error: "annualOverheadCosts must be a finite, non-negative number" };
2364
+ }
2365
+ if (!Number.isFinite(profitMarginPercent) || profitMarginPercent < 0) {
2366
+ return { error: "profitMarginPercent must be a finite, non-negative number" };
2367
+ }
2368
+ const round22 = (n) => Math.round(n * 100) / 100;
2369
+ const annualBillableHours = billableHoursPerWeek * weeksPerYear;
2370
+ const baseRevenueNeeded = targetAnnualIncome + annualOverheadCosts;
2371
+ const requiredAnnualRevenue = baseRevenueNeeded * (1 + profitMarginPercent / 100);
2372
+ const hourlyRate = requiredAnnualRevenue / annualBillableHours;
2373
+ return {
2374
+ targetAnnualIncome: round22(targetAnnualIncome),
2375
+ annualOverheadCosts: round22(annualOverheadCosts),
2376
+ profitMarginPercent: round22(profitMarginPercent),
2377
+ annualBillableHours: round22(annualBillableHours),
2378
+ requiredAnnualRevenue: round22(requiredAnnualRevenue),
2379
+ hourlyRate: round22(hourlyRate),
2380
+ dailyRate: round22(hourlyRate * 8),
2381
+ monthlyRevenueTarget: round22(requiredAnnualRevenue / 12)
2382
+ };
2383
+ }
2314
2384
 
2315
- export { BASE_LABELS, BASE_PREFIXES, BYTE_UNITS, COMMON_CURRENCIES, COMMON_LOCALES, COMMON_PERMISSIONS, COMMON_RATIOS, COMMON_SIZES, COMMON_TAX_RATES, COMMON_TIP_PERCENTAGES, COMMON_VIEWPORTS, GPA_GRADE_POINTS, USD_DENOMINATIONS, applySuccessiveDiscounts, autoFormat, bumpVersion, calcAspectRatio, calcSubnet, calculateBlendedLoanRate, calculateBreakEven, calculateCashBreakdown, calculateCashRounding, calculateCdMaturity, calculateChange, calculateCompoundInterest, calculateCreditUtilization, calculateDebtToIncomeRatio, calculateDepreciationSchedule, calculateDiscount, calculateEmi, calculateGpa, calculateLoan, calculateMarginMarkup, calculateMovingAverages, calculatePaybackPeriod, calculatePercentageChange, calculateRoi, calculateRuleOf72, calculateSavingsGoal, calculateSimpleInterest, calculateTax, calculateTimeValue, calculateTipSplit, calculateVideoBitrate, compareSemver, compareUnitPrices, convert, convertAprApy, convertBytes, convertIp, coverBox, decimalToIp, decimalToIpCidr, describePermissions, fitIntoBox, formatNumber, formatValue, formatVwValue, formatWithSeparator, gcd, ipFromBinary, ipFromDecimal, ipFromHex, ipToBinary, ipToDecimal, ipToDecimalCidr, ipToHex, ipToOctal, isValid, isValidCidr, isValidIp, isValidIpv4, marginToMarkup, markupToMargin, octalToPermissions, parseFileSize, parseInput, parseNumberString, parseSemver, permissionsToChmod, permissionsToOctal, permissionsToSymbolic, ptToPx, pxToAll, pxToViewport, remToPx, satisfiesRange, scaleByHeight, scaleByWidth, sortVersions, splitSubnet, symbolicToPermissions, units_exports, validateBarcode, validateCardNumber, validateIban, validateIsbn, viewportToPx };
2385
+ export { BASE_LABELS, BASE_PREFIXES, BYTE_UNITS, COMMON_CURRENCIES, COMMON_LOCALES, COMMON_PERMISSIONS, COMMON_RATIOS, COMMON_SIZES, COMMON_TAX_RATES, COMMON_TIP_PERCENTAGES, COMMON_VIEWPORTS, GPA_GRADE_POINTS, USD_DENOMINATIONS, applySuccessiveDiscounts, autoFormat, bumpVersion, calcAspectRatio, calcSubnet, calculateBlendedLoanRate, calculateBreakEven, calculateCashBreakdown, calculateCashRounding, calculateCdMaturity, calculateChange, calculateCompoundInterest, calculateCreditUtilization, calculateDebtToIncomeRatio, calculateDepreciationSchedule, calculateDiscount, calculateEmi, calculateExtraPaymentPayoff, calculateFreelancerRate, calculateGpa, calculateLoan, calculateMarginMarkup, calculateMovingAverages, calculatePaybackPeriod, calculatePercentageChange, calculateRoi, calculateRuleOf72, calculateSavingsGoal, calculateSimpleInterest, calculateTax, calculateTimeValue, calculateTipSplit, calculateVideoBitrate, compareSemver, compareUnitPrices, convert, convertAprApy, convertBytes, convertIp, coverBox, decimalToIp, decimalToIpCidr, describePermissions, fitIntoBox, formatNumber, formatValue, formatVwValue, formatWithSeparator, gcd, ipFromBinary, ipFromDecimal, ipFromHex, ipToBinary, ipToDecimal, ipToDecimalCidr, ipToHex, ipToOctal, isValid, isValidCidr, isValidIp, isValidIpv4, marginToMarkup, markupToMargin, octalToPermissions, parseFileSize, parseInput, parseNumberString, parseSemver, permissionsToChmod, permissionsToOctal, permissionsToSymbolic, ptToPx, pxToAll, pxToViewport, remToPx, satisfiesRange, scaleByHeight, scaleByWidth, sortVersions, splitSubnet, symbolicToPermissions, units_exports, validateBarcode, validateCardNumber, validateIban, validateIsbn, viewportToPx };
package/dist/index.cjs CHANGED
@@ -8431,6 +8431,8 @@ __export(units_exports, {
8431
8431
  calculateDepreciationSchedule: () => calculateDepreciationSchedule,
8432
8432
  calculateDiscount: () => calculateDiscount,
8433
8433
  calculateEmi: () => calculateEmi,
8434
+ calculateExtraPaymentPayoff: () => calculateExtraPaymentPayoff,
8435
+ calculateFreelancerRate: () => calculateFreelancerRate,
8434
8436
  calculateGpa: () => calculateGpa,
8435
8437
  calculateLoan: () => calculateLoan,
8436
8438
  calculateMarginMarkup: () => calculateMarginMarkup,
@@ -9549,6 +9551,39 @@ function calculateLoan(principal, annualRatePercent, termMonths) {
9549
9551
  schedule
9550
9552
  };
9551
9553
  }
9554
+ function calculateExtraPaymentPayoff(principal, annualRatePercent, termMonths, extraMonthlyPayment) {
9555
+ const baseline = calculateLoan(principal, annualRatePercent, termMonths);
9556
+ if ("error" in baseline) return baseline;
9557
+ if (!Number.isFinite(extraMonthlyPayment) || extraMonthlyPayment < 0) {
9558
+ return { error: "Extra monthly payment must be zero or a positive number" };
9559
+ }
9560
+ const monthlyRate = annualRatePercent / 100 / 12;
9561
+ const payment = round2(baseline.monthlyPayment) + round2(extraMonthlyPayment);
9562
+ let balance = round2(principal);
9563
+ let totalInterestPaid = 0;
9564
+ let payoffMonths = termMonths;
9565
+ for (let month = 1; month <= termMonths; month++) {
9566
+ const interest = monthlyRate === 0 ? 0 : round2(balance * monthlyRate);
9567
+ let principalPortion = payment - interest;
9568
+ if (principalPortion > balance) principalPortion = balance;
9569
+ totalInterestPaid += interest;
9570
+ balance = round2(balance - principalPortion);
9571
+ if (balance <= 0) {
9572
+ payoffMonths = month;
9573
+ break;
9574
+ }
9575
+ }
9576
+ return {
9577
+ monthlyPayment: round2(baseline.monthlyPayment),
9578
+ extraMonthlyPayment: round2(extraMonthlyPayment),
9579
+ baselinePayoffMonths: termMonths,
9580
+ baselineTotalInterest: baseline.totalInterest,
9581
+ newPayoffMonths: payoffMonths,
9582
+ newTotalInterest: round2(totalInterestPaid),
9583
+ monthsSaved: termMonths - payoffMonths,
9584
+ interestSaved: round2(baseline.totalInterest - totalInterestPaid)
9585
+ };
9586
+ }
9552
9587
  var BARCODE_FORMAT_BY_LENGTH = { 8: "EAN-8", 12: "UPC-A", 13: "EAN-13" };
9553
9588
  function computeBarcodeCheckDigit(dataDigits) {
9554
9589
  let sum = 0;
@@ -10709,6 +10744,41 @@ function calculateBlendedLoanRate(loans) {
10709
10744
  totalAnnualInterest: round23(totalMonthlyInterest * 12)
10710
10745
  };
10711
10746
  }
10747
+ function calculateFreelancerRate(input) {
10748
+ const { targetAnnualIncome, billableHoursPerWeek, weeksPerYear } = input;
10749
+ const annualOverheadCosts = input.annualOverheadCosts ?? 0;
10750
+ const profitMarginPercent = input.profitMarginPercent ?? 0;
10751
+ if (!Number.isFinite(targetAnnualIncome) || targetAnnualIncome < 0) {
10752
+ return { error: "targetAnnualIncome must be a finite, non-negative number" };
10753
+ }
10754
+ if (!Number.isFinite(billableHoursPerWeek) || billableHoursPerWeek <= 0 || billableHoursPerWeek > 168) {
10755
+ return { error: "billableHoursPerWeek must be a finite number greater than zero and at most 168" };
10756
+ }
10757
+ if (!Number.isFinite(weeksPerYear) || weeksPerYear <= 0 || weeksPerYear > 52) {
10758
+ return { error: "weeksPerYear must be a finite number greater than zero and at most 52" };
10759
+ }
10760
+ if (!Number.isFinite(annualOverheadCosts) || annualOverheadCosts < 0) {
10761
+ return { error: "annualOverheadCosts must be a finite, non-negative number" };
10762
+ }
10763
+ if (!Number.isFinite(profitMarginPercent) || profitMarginPercent < 0) {
10764
+ return { error: "profitMarginPercent must be a finite, non-negative number" };
10765
+ }
10766
+ const round23 = (n) => Math.round(n * 100) / 100;
10767
+ const annualBillableHours = billableHoursPerWeek * weeksPerYear;
10768
+ const baseRevenueNeeded = targetAnnualIncome + annualOverheadCosts;
10769
+ const requiredAnnualRevenue = baseRevenueNeeded * (1 + profitMarginPercent / 100);
10770
+ const hourlyRate = requiredAnnualRevenue / annualBillableHours;
10771
+ return {
10772
+ targetAnnualIncome: round23(targetAnnualIncome),
10773
+ annualOverheadCosts: round23(annualOverheadCosts),
10774
+ profitMarginPercent: round23(profitMarginPercent),
10775
+ annualBillableHours: round23(annualBillableHours),
10776
+ requiredAnnualRevenue: round23(requiredAnnualRevenue),
10777
+ hourlyRate: round23(hourlyRate),
10778
+ dailyRate: round23(hourlyRate * 8),
10779
+ monthlyRevenueTarget: round23(requiredAnnualRevenue / 12)
10780
+ };
10781
+ }
10712
10782
 
10713
10783
  // src/tools/network.ts
10714
10784
  var network_exports = {};
@@ -10735,6 +10805,7 @@ __export(network_exports, {
10735
10805
  buildPreferHeader: () => buildPreferHeader,
10736
10806
  buildRangeHeader: () => buildRangeHeader,
10737
10807
  buildReferrerPolicy: () => buildReferrerPolicy,
10808
+ buildRetryAfterHeader: () => buildRetryAfterHeader,
10738
10809
  buildVaryHeader: () => buildVaryHeader,
10739
10810
  buildXContentTypeOptionsHeader: () => buildXContentTypeOptionsHeader,
10740
10811
  checkSetCookieHeader: () => checkSetCookieHeader,
@@ -10762,6 +10833,7 @@ __export(network_exports, {
10762
10833
  parseIpv6Address: () => parseIpv6Address,
10763
10834
  parsePermissionsPolicy: () => parsePermissionsPolicy,
10764
10835
  parsePreferHeader: () => parsePreferHeader,
10836
+ parseRetryAfterHeader: () => parseRetryAfterHeader,
10765
10837
  parseUserAgent: () => parseUserAgent,
10766
10838
  parseVaryHeader: () => parseVaryHeader,
10767
10839
  parseXContentTypeOptionsHeader: () => parseXContentTypeOptionsHeader,
@@ -13695,6 +13767,38 @@ function parsePreferHeader(raw) {
13695
13767
  const headerValue = formatPreferPreferences(preferences);
13696
13768
  return { header: `Prefer: ${headerValue}`, headerValue, preferences };
13697
13769
  }
13770
+ function buildRetryAfterHeader(input) {
13771
+ const { seconds, date } = input;
13772
+ const hasSeconds = seconds !== void 0;
13773
+ const hasDate = date !== void 0 && date !== "";
13774
+ if (hasSeconds && hasDate) return { error: "Provide either seconds or date, not both" };
13775
+ if (!hasSeconds && !hasDate) return { error: "seconds or date is required" };
13776
+ if (hasSeconds) {
13777
+ if (typeof seconds !== "number" || !Number.isFinite(seconds) || !Number.isInteger(seconds) || seconds < 0) {
13778
+ return { error: "seconds must be a non-negative integer" };
13779
+ }
13780
+ return { header: `Retry-After: ${seconds}`, headerValue: String(seconds), type: "seconds", seconds };
13781
+ }
13782
+ const parsed = new Date(date);
13783
+ if (Number.isNaN(parsed.getTime())) return { error: "date must be a valid date/time string" };
13784
+ const httpDate = parsed.toUTCString();
13785
+ return { header: `Retry-After: ${httpDate}`, headerValue: httpDate, type: "http-date", httpDate, iso: parsed.toISOString() };
13786
+ }
13787
+ function parseRetryAfterHeader(raw) {
13788
+ if (!raw || raw.trim() === "") return { error: "Input is empty" };
13789
+ const value = raw.trim().replace(/^retry-after:\s*/i, "").trim();
13790
+ if (value === "") return { error: "Input is empty" };
13791
+ if (/^\d+$/.test(value)) {
13792
+ const seconds = parseInt(value, 10);
13793
+ return { header: `Retry-After: ${seconds}`, headerValue: String(seconds), type: "seconds", seconds };
13794
+ }
13795
+ const parsed = new Date(value);
13796
+ if (Number.isNaN(parsed.getTime())) {
13797
+ return { error: "Value is neither a non-negative integer (seconds) nor a valid HTTP-date" };
13798
+ }
13799
+ const httpDate = parsed.toUTCString();
13800
+ return { header: `Retry-After: ${httpDate}`, headerValue: httpDate, type: "http-date", httpDate, iso: parsed.toISOString() };
13801
+ }
13698
13802
 
13699
13803
  // src/tools/api.ts
13700
13804
  var api_exports = {};
package/dist/index.d.cts CHANGED
@@ -5,8 +5,8 @@ export { t as text } from './text-DWUcY8H1.cjs';
5
5
  export { d as data } from './data-vxXrBlWh.cjs';
6
6
  export { g as generators } from './generators-DAXXrMvG.cjs';
7
7
  export { t as time } from './time-KqJjdqII.cjs';
8
- export { u as units } from './units-BM9GkUZW.cjs';
9
- export { n as network } from './network-fDfM1_L6.cjs';
8
+ export { u as units } from './units-izyUpUAb.cjs';
9
+ export { n as network } from './network-CXt69chQ.cjs';
10
10
  export { a as api } from './api-DmTNE4c1.cjs';
11
11
  export { c as code } from './code-rxidGgvB.cjs';
12
12
  export { c as color } from './color-tPwZCr9H.cjs';
package/dist/index.d.ts CHANGED
@@ -5,8 +5,8 @@ export { t as text } from './text-DWUcY8H1.js';
5
5
  export { d as data } from './data-vxXrBlWh.js';
6
6
  export { g as generators } from './generators-DAXXrMvG.js';
7
7
  export { t as time } from './time-KqJjdqII.js';
8
- export { u as units } from './units-BM9GkUZW.js';
9
- export { n as network } from './network-fDfM1_L6.js';
8
+ export { u as units } from './units-izyUpUAb.js';
9
+ export { n as network } from './network-CXt69chQ.js';
10
10
  export { a as api } from './api-DmTNE4c1.js';
11
11
  export { c as code } from './code-rxidGgvB.js';
12
12
  export { c as color } from './color-tPwZCr9H.js';
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export { media_exports as media } from './chunk-226EH3ZI.js';
2
- export { units_exports as units } from './chunk-MRIGQRTU.js';
3
- export { network_exports as network } from './chunk-3QU46YFP.js';
2
+ export { units_exports as units } from './chunk-43WFN3CW.js';
3
+ export { network_exports as network } from './chunk-2WT347WO.js';
4
4
  export { api_exports as api } from './chunk-52ZDKSIX.js';
5
5
  export { code_exports as code } from './chunk-JW4NG2GN.js';
6
6
  export { color_exports as color } from './chunk-BPVAB4P2.js';
@@ -24,6 +24,7 @@
24
24
  * - x-content-type-options-builder: buildXContentTypeOptionsHeader, parseXContentTypeOptionsHeader, assessContentTypeRisk
25
25
  * - accept-language-parser: parseAcceptLanguage, buildAcceptLanguage
26
26
  * - prefer-header: buildPreferHeader, parsePreferHeader
27
+ * - retry-after-builder: buildRetryAfterHeader, parseRetryAfterHeader
27
28
  */
28
29
  declare const DNS_RECORD_TYPES: readonly ["A", "AAAA", "CNAME", "MX", "TXT", "NS", "SOA", "PTR", "SRV", "CAA"];
29
30
  type DnsRecordType = typeof DNS_RECORD_TYPES[number];
@@ -812,6 +813,40 @@ declare function buildPreferHeader(preferences: {
812
813
  declare function parsePreferHeader(raw: string): PreferResult | {
813
814
  error: string;
814
815
  };
816
+ interface RetryAfterSecondsResult {
817
+ header: string;
818
+ headerValue: string;
819
+ type: 'seconds';
820
+ seconds: number;
821
+ }
822
+ interface RetryAfterDateResult {
823
+ header: string;
824
+ headerValue: string;
825
+ type: 'http-date';
826
+ httpDate: string;
827
+ iso: string;
828
+ }
829
+ type RetryAfterResult = RetryAfterSecondsResult | RetryAfterDateResult;
830
+ /**
831
+ * Build a `Retry-After` response header value from either a non-negative
832
+ * delay in seconds or a target date/time, per RFC 9110 §10.2.3. A date is
833
+ * formatted as an HTTP-date (IMF-fixdate, e.g. "Wed, 21 Oct 2026 07:28:00
834
+ * GMT"), the only date format the header allows.
835
+ */
836
+ declare function buildRetryAfterHeader(input: {
837
+ seconds?: number;
838
+ date?: string;
839
+ }): RetryAfterResult | {
840
+ error: string;
841
+ };
842
+ /**
843
+ * Parse an existing `Retry-After` header value (with or without a leading
844
+ * `Retry-After:` label) into either its delay-in-seconds form or its
845
+ * HTTP-date form, per RFC 9110 §10.2.3.
846
+ */
847
+ declare function parseRetryAfterHeader(raw: string): RetryAfterResult | {
848
+ error: string;
849
+ };
815
850
 
816
851
  type network_AcceptLanguageEntry = AcceptLanguageEntry;
817
852
  type network_AcceptLanguageResult = AcceptLanguageResult;
@@ -874,6 +909,9 @@ type network_ReceivedHop = ReceivedHop;
874
909
  type network_ReferrerPolicyEntry = ReferrerPolicyEntry;
875
910
  type network_ReferrerPolicyResult = ReferrerPolicyResult;
876
911
  type network_ReferrerPolicyValue = ReferrerPolicyValue;
912
+ type network_RetryAfterDateResult = RetryAfterDateResult;
913
+ type network_RetryAfterResult = RetryAfterResult;
914
+ type network_RetryAfterSecondsResult = RetryAfterSecondsResult;
877
915
  type network_RobotsGroup = RobotsGroup;
878
916
  type network_RobotsIssue = RobotsIssue;
879
917
  type network_RobotsRule = RobotsRule;
@@ -909,6 +947,7 @@ declare const network_buildPermissionsPolicy: typeof buildPermissionsPolicy;
909
947
  declare const network_buildPreferHeader: typeof buildPreferHeader;
910
948
  declare const network_buildRangeHeader: typeof buildRangeHeader;
911
949
  declare const network_buildReferrerPolicy: typeof buildReferrerPolicy;
950
+ declare const network_buildRetryAfterHeader: typeof buildRetryAfterHeader;
912
951
  declare const network_buildVaryHeader: typeof buildVaryHeader;
913
952
  declare const network_buildXContentTypeOptionsHeader: typeof buildXContentTypeOptionsHeader;
914
953
  declare const network_checkSetCookieHeader: typeof checkSetCookieHeader;
@@ -936,6 +975,7 @@ declare const network_parseHar: typeof parseHar;
936
975
  declare const network_parseIpv6Address: typeof parseIpv6Address;
937
976
  declare const network_parsePermissionsPolicy: typeof parsePermissionsPolicy;
938
977
  declare const network_parsePreferHeader: typeof parsePreferHeader;
978
+ declare const network_parseRetryAfterHeader: typeof parseRetryAfterHeader;
939
979
  declare const network_parseUserAgent: typeof parseUserAgent;
940
980
  declare const network_parseVaryHeader: typeof parseVaryHeader;
941
981
  declare const network_parseXContentTypeOptionsHeader: typeof parseXContentTypeOptionsHeader;
@@ -951,7 +991,7 @@ declare const network_validateManifest: typeof validateManifest;
951
991
  declare const network_validateRobotsTxt: typeof validateRobotsTxt;
952
992
  declare const network_validateSitemap: typeof validateSitemap;
953
993
  declare namespace network {
954
- export { type network_AcceptLanguageEntry as AcceptLanguageEntry, type network_AcceptLanguageResult as AcceptLanguageResult, type network_AuthResultEntry as AuthResultEntry, type network_BuildRangeHeaderOptions as BuildRangeHeaderOptions, network_CLIENT_HINTS as CLIENT_HINTS, type network_CacheControlDirective as CacheControlDirective, type network_CacheControlOptions as CacheControlOptions, type network_CacheControlResult as CacheControlResult, type network_ClientHintDef as ClientHintDef, type network_ClientHintValueType as ClientHintValueType, type network_ClientHintsBuildResult as ClientHintsBuildResult, type network_ClientHintsParseResult as ClientHintsParseResult, type network_ContentDispositionBuildOptions as ContentDispositionBuildOptions, type network_ContentDispositionBuildResult as ContentDispositionBuildResult, type network_ContentDispositionParseResult as ContentDispositionParseResult, type network_ContentRangeResult as ContentRangeResult, type network_ContentTypeRiskResult as ContentTypeRiskResult, type network_ContentTypeSniffRisk as ContentTypeSniffRisk, type network_CookieAttributes as CookieAttributes, type network_CookieCheckResult as CookieCheckResult, network_DNS_RECORD_TYPES as DNS_RECORD_TYPES, type network_DnsRecord as DnsRecord, type network_DnsRecordType as DnsRecordType, type network_DnsResponse as DnsResponse, type network_EmailHeaderAnalysis as EmailHeaderAnalysis, type network_EmailHeaderField as EmailHeaderField, type network_GeoResult as GeoResult, network_HTTP_HEADERS as HTTP_HEADERS, type network_HarEntry as HarEntry, type network_HarParseResult as HarParseResult, type network_HarSummary as HarSummary, type network_HeaderCategory as HeaderCategory, type network_HttpHeader as HttpHeader, type network_Ipv6AddressType as Ipv6AddressType, type network_Ipv6ParseResult as Ipv6ParseResult, network_LINK_REL_VALUES as LINK_REL_VALUES, type network_LinkHeaderEntry as LinkHeaderEntry, type network_LinkHeaderEntryInput as LinkHeaderEntryInput, type network_LinkHeaderResult as LinkHeaderResult, type network_LinkRel as LinkRel, type network_ManifestIconInfo as ManifestIconInfo, type network_ManifestIssue as ManifestIssue, type network_ManifestValidationResult as ManifestValidationResult, network_PERMISSIONS_POLICY_FEATURES as PERMISSIONS_POLICY_FEATURES, type network_ParsedClientHint as ParsedClientHint, type network_ParsedDnsResult as ParsedDnsResult, type network_ParsedGeoResult as ParsedGeoResult, type network_PermissionsPolicyDirective as PermissionsPolicyDirective, type network_PermissionsPolicyFeatureInput as PermissionsPolicyFeatureInput, type network_PermissionsPolicyResult as PermissionsPolicyResult, type network_PreferParameter as PreferParameter, type network_PreferPreference as PreferPreference, type network_PreferResult as PreferResult, network_REFERRER_POLICY_VALUES as REFERRER_POLICY_VALUES, type network_RangeEntry as RangeEntry, type network_RangeEntryInput as RangeEntryInput, type network_RangeHeaderResult as RangeHeaderResult, type network_ReceivedHop as ReceivedHop, type network_ReferrerPolicyEntry as ReferrerPolicyEntry, type network_ReferrerPolicyResult as ReferrerPolicyResult, type network_ReferrerPolicyValue as ReferrerPolicyValue, type network_RobotsGroup as RobotsGroup, type network_RobotsIssue as RobotsIssue, type network_RobotsRule as RobotsRule, type network_RobotsValidationResult as RobotsValidationResult, network_STATUS_CODES as STATUS_CODES, type network_SameSiteValue as SameSiteValue, type network_SitemapIndexEntry as SitemapIndexEntry, type network_SitemapIssue as SitemapIssue, type network_SitemapSplitFile as SitemapSplitFile, type network_SitemapUrlEntry as SitemapUrlEntry, type network_SitemapValidationResult as SitemapValidationResult, type network_SplitSitemapOptions as SplitSitemapOptions, type network_SplitSitemapResult as SplitSitemapResult, type network_StatusCode as StatusCode, type network_UaDeviceType as UaDeviceType, type network_UserAgentInfo as UserAgentInfo, type network_VaryHeaderEntry as VaryHeaderEntry, type network_VaryHeaderResult as VaryHeaderResult, type network_XContentTypeOptionsHeader as XContentTypeOptionsHeader, type network_XContentTypeOptionsParseResult as XContentTypeOptionsParseResult, network_X_CONTENT_TYPE_OPTIONS_HEADER as X_CONTENT_TYPE_OPTIONS_HEADER, network_analyzeEmailHeaders as analyzeEmailHeaders, network_assessContentTypeRisk as assessContentTypeRisk, network_buildAcceptLanguage as buildAcceptLanguage, network_buildCacheControl as buildCacheControl, network_buildClientHints as buildClientHints, network_buildContentDisposition as buildContentDisposition, network_buildDnsQueryUrl as buildDnsQueryUrl, network_buildGeoUrl as buildGeoUrl, network_buildLinkHeader as buildLinkHeader, network_buildMapUrl as buildMapUrl, network_buildPermissionsPolicy as buildPermissionsPolicy, network_buildPreferHeader as buildPreferHeader, network_buildRangeHeader as buildRangeHeader, network_buildReferrerPolicy as buildReferrerPolicy, network_buildVaryHeader as buildVaryHeader, network_buildXContentTypeOptionsHeader as buildXContentTypeOptionsHeader, network_checkSetCookieHeader as checkSetCookieHeader, network_countryCodeToFlag as countryCodeToFlag, network_formatCoordinates as formatCoordinates, network_formatTtl as formatTtl, network_getByCategory as getByCategory, network_getHeader as getHeader, network_getHeadersByCategory as getHeadersByCategory, network_getStatusByCategory as getStatusByCategory, network_getStatusCode as getStatusCode, network_isClientError as isClientError, network_isServerError as isServerError, network_isSuccess as isSuccess, network_isValidIp as isValidIp, network_isValidIpv4 as isValidIpv4, network_isValidIpv6 as isValidIpv6, network_parseAcceptLanguage as parseAcceptLanguage, network_parseClientHintHeaders as parseClientHintHeaders, network_parseContentDisposition as parseContentDisposition, network_parseContentRangeHeader as parseContentRangeHeader, network_parseDnsResponse as parseDnsResponse, network_parseGeoResponse as parseGeoResponse, network_parseHar as parseHar, network_parseIpv6Address as parseIpv6Address, network_parsePermissionsPolicy as parsePermissionsPolicy, network_parsePreferHeader as parsePreferHeader, network_parseUserAgent as parseUserAgent, network_parseVaryHeader as parseVaryHeader, network_parseXContentTypeOptionsHeader as parseXContentTypeOptionsHeader, network_searchHeaders as searchHeaders, network_searchStatusCodes as searchStatusCodes, network_splitSitemap as splitSitemap, network_statusCodeToText as statusCodeToText, network_typeNumberToLabel as typeNumberToLabel, network_validateDomain as validateDomain, network_validateHeaderName as validateHeaderName, network_validateHeaderValue as validateHeaderValue, network_validateManifest as validateManifest, network_validateRobotsTxt as validateRobotsTxt, network_validateSitemap as validateSitemap };
994
+ export { type network_AcceptLanguageEntry as AcceptLanguageEntry, type network_AcceptLanguageResult as AcceptLanguageResult, type network_AuthResultEntry as AuthResultEntry, type network_BuildRangeHeaderOptions as BuildRangeHeaderOptions, network_CLIENT_HINTS as CLIENT_HINTS, type network_CacheControlDirective as CacheControlDirective, type network_CacheControlOptions as CacheControlOptions, type network_CacheControlResult as CacheControlResult, type network_ClientHintDef as ClientHintDef, type network_ClientHintValueType as ClientHintValueType, type network_ClientHintsBuildResult as ClientHintsBuildResult, type network_ClientHintsParseResult as ClientHintsParseResult, type network_ContentDispositionBuildOptions as ContentDispositionBuildOptions, type network_ContentDispositionBuildResult as ContentDispositionBuildResult, type network_ContentDispositionParseResult as ContentDispositionParseResult, type network_ContentRangeResult as ContentRangeResult, type network_ContentTypeRiskResult as ContentTypeRiskResult, type network_ContentTypeSniffRisk as ContentTypeSniffRisk, type network_CookieAttributes as CookieAttributes, type network_CookieCheckResult as CookieCheckResult, network_DNS_RECORD_TYPES as DNS_RECORD_TYPES, type network_DnsRecord as DnsRecord, type network_DnsRecordType as DnsRecordType, type network_DnsResponse as DnsResponse, type network_EmailHeaderAnalysis as EmailHeaderAnalysis, type network_EmailHeaderField as EmailHeaderField, type network_GeoResult as GeoResult, network_HTTP_HEADERS as HTTP_HEADERS, type network_HarEntry as HarEntry, type network_HarParseResult as HarParseResult, type network_HarSummary as HarSummary, type network_HeaderCategory as HeaderCategory, type network_HttpHeader as HttpHeader, type network_Ipv6AddressType as Ipv6AddressType, type network_Ipv6ParseResult as Ipv6ParseResult, network_LINK_REL_VALUES as LINK_REL_VALUES, type network_LinkHeaderEntry as LinkHeaderEntry, type network_LinkHeaderEntryInput as LinkHeaderEntryInput, type network_LinkHeaderResult as LinkHeaderResult, type network_LinkRel as LinkRel, type network_ManifestIconInfo as ManifestIconInfo, type network_ManifestIssue as ManifestIssue, type network_ManifestValidationResult as ManifestValidationResult, network_PERMISSIONS_POLICY_FEATURES as PERMISSIONS_POLICY_FEATURES, type network_ParsedClientHint as ParsedClientHint, type network_ParsedDnsResult as ParsedDnsResult, type network_ParsedGeoResult as ParsedGeoResult, type network_PermissionsPolicyDirective as PermissionsPolicyDirective, type network_PermissionsPolicyFeatureInput as PermissionsPolicyFeatureInput, type network_PermissionsPolicyResult as PermissionsPolicyResult, type network_PreferParameter as PreferParameter, type network_PreferPreference as PreferPreference, type network_PreferResult as PreferResult, network_REFERRER_POLICY_VALUES as REFERRER_POLICY_VALUES, type network_RangeEntry as RangeEntry, type network_RangeEntryInput as RangeEntryInput, type network_RangeHeaderResult as RangeHeaderResult, type network_ReceivedHop as ReceivedHop, type network_ReferrerPolicyEntry as ReferrerPolicyEntry, type network_ReferrerPolicyResult as ReferrerPolicyResult, type network_ReferrerPolicyValue as ReferrerPolicyValue, type network_RetryAfterDateResult as RetryAfterDateResult, type network_RetryAfterResult as RetryAfterResult, type network_RetryAfterSecondsResult as RetryAfterSecondsResult, type network_RobotsGroup as RobotsGroup, type network_RobotsIssue as RobotsIssue, type network_RobotsRule as RobotsRule, type network_RobotsValidationResult as RobotsValidationResult, network_STATUS_CODES as STATUS_CODES, type network_SameSiteValue as SameSiteValue, type network_SitemapIndexEntry as SitemapIndexEntry, type network_SitemapIssue as SitemapIssue, type network_SitemapSplitFile as SitemapSplitFile, type network_SitemapUrlEntry as SitemapUrlEntry, type network_SitemapValidationResult as SitemapValidationResult, type network_SplitSitemapOptions as SplitSitemapOptions, type network_SplitSitemapResult as SplitSitemapResult, type network_StatusCode as StatusCode, type network_UaDeviceType as UaDeviceType, type network_UserAgentInfo as UserAgentInfo, type network_VaryHeaderEntry as VaryHeaderEntry, type network_VaryHeaderResult as VaryHeaderResult, type network_XContentTypeOptionsHeader as XContentTypeOptionsHeader, type network_XContentTypeOptionsParseResult as XContentTypeOptionsParseResult, network_X_CONTENT_TYPE_OPTIONS_HEADER as X_CONTENT_TYPE_OPTIONS_HEADER, network_analyzeEmailHeaders as analyzeEmailHeaders, network_assessContentTypeRisk as assessContentTypeRisk, network_buildAcceptLanguage as buildAcceptLanguage, network_buildCacheControl as buildCacheControl, network_buildClientHints as buildClientHints, network_buildContentDisposition as buildContentDisposition, network_buildDnsQueryUrl as buildDnsQueryUrl, network_buildGeoUrl as buildGeoUrl, network_buildLinkHeader as buildLinkHeader, network_buildMapUrl as buildMapUrl, network_buildPermissionsPolicy as buildPermissionsPolicy, network_buildPreferHeader as buildPreferHeader, network_buildRangeHeader as buildRangeHeader, network_buildReferrerPolicy as buildReferrerPolicy, network_buildRetryAfterHeader as buildRetryAfterHeader, network_buildVaryHeader as buildVaryHeader, network_buildXContentTypeOptionsHeader as buildXContentTypeOptionsHeader, network_checkSetCookieHeader as checkSetCookieHeader, network_countryCodeToFlag as countryCodeToFlag, network_formatCoordinates as formatCoordinates, network_formatTtl as formatTtl, network_getByCategory as getByCategory, network_getHeader as getHeader, network_getHeadersByCategory as getHeadersByCategory, network_getStatusByCategory as getStatusByCategory, network_getStatusCode as getStatusCode, network_isClientError as isClientError, network_isServerError as isServerError, network_isSuccess as isSuccess, network_isValidIp as isValidIp, network_isValidIpv4 as isValidIpv4, network_isValidIpv6 as isValidIpv6, network_parseAcceptLanguage as parseAcceptLanguage, network_parseClientHintHeaders as parseClientHintHeaders, network_parseContentDisposition as parseContentDisposition, network_parseContentRangeHeader as parseContentRangeHeader, network_parseDnsResponse as parseDnsResponse, network_parseGeoResponse as parseGeoResponse, network_parseHar as parseHar, network_parseIpv6Address as parseIpv6Address, network_parsePermissionsPolicy as parsePermissionsPolicy, network_parsePreferHeader as parsePreferHeader, network_parseRetryAfterHeader as parseRetryAfterHeader, network_parseUserAgent as parseUserAgent, network_parseVaryHeader as parseVaryHeader, network_parseXContentTypeOptionsHeader as parseXContentTypeOptionsHeader, network_searchHeaders as searchHeaders, network_searchStatusCodes as searchStatusCodes, network_splitSitemap as splitSitemap, network_statusCodeToText as statusCodeToText, network_typeNumberToLabel as typeNumberToLabel, network_validateDomain as validateDomain, network_validateHeaderName as validateHeaderName, network_validateHeaderValue as validateHeaderValue, network_validateManifest as validateManifest, network_validateRobotsTxt as validateRobotsTxt, network_validateSitemap as validateSitemap };
955
995
  }
956
996
 
957
- export { type PreferResult as $, type AcceptLanguageEntry as A, type BuildRangeHeaderOptions as B, CLIENT_HINTS as C, DNS_RECORD_TYPES as D, type EmailHeaderAnalysis as E, type HttpHeader as F, type GeoResult as G, HTTP_HEADERS as H, type Ipv6AddressType as I, type Ipv6ParseResult as J, type LinkHeaderEntry as K, LINK_REL_VALUES as L, type LinkHeaderEntryInput as M, type LinkHeaderResult as N, type LinkRel as O, type ManifestIconInfo as P, type ManifestIssue as Q, type ManifestValidationResult as R, PERMISSIONS_POLICY_FEATURES as S, type ParsedClientHint as T, type ParsedDnsResult as U, type ParsedGeoResult as V, type PermissionsPolicyDirective as W, type PermissionsPolicyFeatureInput as X, type PermissionsPolicyResult as Y, type PreferParameter as Z, type PreferPreference as _, type AcceptLanguageResult as a, parseContentRangeHeader as a$, REFERRER_POLICY_VALUES as a0, type RangeEntry as a1, type RangeEntryInput as a2, type RangeHeaderResult as a3, type ReceivedHop as a4, type ReferrerPolicyEntry as a5, type ReferrerPolicyResult as a6, type ReferrerPolicyValue as a7, type RobotsGroup as a8, type RobotsIssue as a9, buildGeoUrl as aA, buildLinkHeader as aB, buildMapUrl as aC, buildPermissionsPolicy as aD, buildPreferHeader as aE, buildRangeHeader as aF, buildReferrerPolicy as aG, buildVaryHeader as aH, buildXContentTypeOptionsHeader as aI, checkSetCookieHeader as aJ, countryCodeToFlag as aK, formatCoordinates as aL, formatTtl as aM, getByCategory as aN, getHeader as aO, getHeadersByCategory as aP, getStatusByCategory as aQ, getStatusCode as aR, isClientError as aS, isServerError as aT, isSuccess as aU, isValidIp as aV, isValidIpv4 as aW, isValidIpv6 as aX, parseAcceptLanguage as aY, parseClientHintHeaders as aZ, parseContentDisposition as a_, type RobotsRule as aa, type RobotsValidationResult as ab, STATUS_CODES as ac, type SameSiteValue as ad, type SitemapIndexEntry as ae, type SitemapIssue as af, type SitemapSplitFile as ag, type SitemapUrlEntry as ah, type SitemapValidationResult as ai, type SplitSitemapOptions as aj, type SplitSitemapResult as ak, type StatusCode as al, type UaDeviceType as am, type UserAgentInfo as an, type VaryHeaderEntry as ao, type VaryHeaderResult as ap, type XContentTypeOptionsHeader as aq, type XContentTypeOptionsParseResult as ar, X_CONTENT_TYPE_OPTIONS_HEADER as as, analyzeEmailHeaders as at, assessContentTypeRisk as au, buildAcceptLanguage as av, buildCacheControl as aw, buildClientHints as ax, buildContentDisposition as ay, buildDnsQueryUrl as az, type AuthResultEntry as b, parseDnsResponse as b0, parseGeoResponse as b1, parseHar as b2, parseIpv6Address as b3, parsePermissionsPolicy as b4, parsePreferHeader as b5, parseUserAgent as b6, parseVaryHeader as b7, parseXContentTypeOptionsHeader as b8, searchHeaders as b9, searchStatusCodes as ba, splitSitemap as bb, statusCodeToText as bc, typeNumberToLabel as bd, validateDomain as be, validateHeaderName as bf, validateHeaderValue as bg, validateManifest as bh, validateRobotsTxt as bi, validateSitemap as bj, type CacheControlDirective as c, type CacheControlOptions as d, type CacheControlResult as e, type ClientHintDef as f, type ClientHintValueType as g, type ClientHintsBuildResult as h, type ClientHintsParseResult as i, type ContentDispositionBuildOptions as j, type ContentDispositionBuildResult as k, type ContentDispositionParseResult as l, type ContentRangeResult as m, network as n, type ContentTypeRiskResult as o, type ContentTypeSniffRisk as p, type CookieAttributes as q, type CookieCheckResult as r, type DnsRecord as s, type DnsRecordType as t, type DnsResponse as u, type EmailHeaderField as v, type HarEntry as w, type HarParseResult as x, type HarSummary as y, type HeaderCategory as z };
997
+ export { type PreferResult as $, type AcceptLanguageEntry as A, type BuildRangeHeaderOptions as B, CLIENT_HINTS as C, DNS_RECORD_TYPES as D, type EmailHeaderAnalysis as E, type HttpHeader as F, type GeoResult as G, HTTP_HEADERS as H, type Ipv6AddressType as I, type Ipv6ParseResult as J, type LinkHeaderEntry as K, LINK_REL_VALUES as L, type LinkHeaderEntryInput as M, type LinkHeaderResult as N, type LinkRel as O, type ManifestIconInfo as P, type ManifestIssue as Q, type ManifestValidationResult as R, PERMISSIONS_POLICY_FEATURES as S, type ParsedClientHint as T, type ParsedDnsResult as U, type ParsedGeoResult as V, type PermissionsPolicyDirective as W, type PermissionsPolicyFeatureInput as X, type PermissionsPolicyResult as Y, type PreferParameter as Z, type PreferPreference as _, type AcceptLanguageResult as a, isValidIpv6 as a$, REFERRER_POLICY_VALUES as a0, type RangeEntry as a1, type RangeEntryInput as a2, type RangeHeaderResult as a3, type ReceivedHop as a4, type ReferrerPolicyEntry as a5, type ReferrerPolicyResult as a6, type ReferrerPolicyValue as a7, type RetryAfterDateResult as a8, type RetryAfterResult as a9, buildClientHints as aA, buildContentDisposition as aB, buildDnsQueryUrl as aC, buildGeoUrl as aD, buildLinkHeader as aE, buildMapUrl as aF, buildPermissionsPolicy as aG, buildPreferHeader as aH, buildRangeHeader as aI, buildReferrerPolicy as aJ, buildRetryAfterHeader as aK, buildVaryHeader as aL, buildXContentTypeOptionsHeader as aM, checkSetCookieHeader as aN, countryCodeToFlag as aO, formatCoordinates as aP, formatTtl as aQ, getByCategory as aR, getHeader as aS, getHeadersByCategory as aT, getStatusByCategory as aU, getStatusCode as aV, isClientError as aW, isServerError as aX, isSuccess as aY, isValidIp as aZ, isValidIpv4 as a_, type RetryAfterSecondsResult as aa, type RobotsGroup as ab, type RobotsIssue as ac, type RobotsRule as ad, type RobotsValidationResult as ae, STATUS_CODES as af, type SameSiteValue as ag, type SitemapIndexEntry as ah, type SitemapIssue as ai, type SitemapSplitFile as aj, type SitemapUrlEntry as ak, type SitemapValidationResult as al, type SplitSitemapOptions as am, type SplitSitemapResult as an, type StatusCode as ao, type UaDeviceType as ap, type UserAgentInfo as aq, type VaryHeaderEntry as ar, type VaryHeaderResult as as, type XContentTypeOptionsHeader as at, type XContentTypeOptionsParseResult as au, X_CONTENT_TYPE_OPTIONS_HEADER as av, analyzeEmailHeaders as aw, assessContentTypeRisk as ax, buildAcceptLanguage as ay, buildCacheControl as az, type AuthResultEntry as b, parseAcceptLanguage as b0, parseClientHintHeaders as b1, parseContentDisposition as b2, parseContentRangeHeader as b3, parseDnsResponse as b4, parseGeoResponse as b5, parseHar as b6, parseIpv6Address as b7, parsePermissionsPolicy as b8, parsePreferHeader as b9, parseRetryAfterHeader as ba, parseUserAgent as bb, parseVaryHeader as bc, parseXContentTypeOptionsHeader as bd, searchHeaders as be, searchStatusCodes as bf, splitSitemap as bg, statusCodeToText as bh, typeNumberToLabel as bi, validateDomain as bj, validateHeaderName as bk, validateHeaderValue as bl, validateManifest as bm, validateRobotsTxt as bn, validateSitemap as bo, type CacheControlDirective as c, type CacheControlOptions as d, type CacheControlResult as e, type ClientHintDef as f, type ClientHintValueType as g, type ClientHintsBuildResult as h, type ClientHintsParseResult as i, type ContentDispositionBuildOptions as j, type ContentDispositionBuildResult as k, type ContentDispositionParseResult as l, type ContentRangeResult as m, network as n, type ContentTypeRiskResult as o, type ContentTypeSniffRisk as p, type CookieAttributes as q, type CookieCheckResult as r, type DnsRecord as s, type DnsRecordType as t, type DnsResponse as u, type EmailHeaderField as v, type HarEntry as w, type HarParseResult as x, type HarSummary as y, type HeaderCategory as z };