@twin.org/web 0.0.3-next.4 → 0.0.3-next.40

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.
Files changed (56) hide show
  1. package/README.md +1 -1
  2. package/dist/es/index.js +3 -0
  3. package/dist/es/index.js.map +1 -1
  4. package/dist/es/models/IFetchOptions.js.map +1 -1
  5. package/dist/es/models/IHttpLinkHeader.js +2 -0
  6. package/dist/es/models/IHttpLinkHeader.js.map +1 -0
  7. package/dist/es/models/headerTypes.js +129 -1
  8. package/dist/es/models/headerTypes.js.map +1 -1
  9. package/dist/es/models/httpLinkRelType.js +130 -0
  10. package/dist/es/models/httpLinkRelType.js.map +1 -0
  11. package/dist/es/models/httpMethod.js +36 -0
  12. package/dist/es/models/httpMethod.js.map +1 -1
  13. package/dist/es/models/httpStatusCode.js +63 -0
  14. package/dist/es/models/httpStatusCode.js.map +1 -1
  15. package/dist/es/models/mimeTypes.js +170 -1
  16. package/dist/es/models/mimeTypes.js.map +1 -1
  17. package/dist/es/utils/cookieHelper.js +83 -0
  18. package/dist/es/utils/cookieHelper.js.map +1 -0
  19. package/dist/es/utils/fetchHelper.js +1 -1
  20. package/dist/es/utils/fetchHelper.js.map +1 -1
  21. package/dist/es/utils/headerHelper.js +383 -1
  22. package/dist/es/utils/headerHelper.js.map +1 -1
  23. package/dist/es/utils/mimeTypeHelper.js +42 -1
  24. package/dist/es/utils/mimeTypeHelper.js.map +1 -1
  25. package/dist/types/index.d.ts +3 -0
  26. package/dist/types/models/IFetchOptions.d.ts +1 -1
  27. package/dist/types/models/IHttpLinkHeader.d.ts +26 -0
  28. package/dist/types/models/headerTypes.d.ts +128 -0
  29. package/dist/types/models/httpLinkRelType.d.ts +130 -0
  30. package/dist/types/models/httpMethod.d.ts +36 -0
  31. package/dist/types/models/httpStatusCode.d.ts +63 -0
  32. package/dist/types/models/mimeTypes.d.ts +169 -0
  33. package/dist/types/utils/cookieHelper.d.ts +49 -0
  34. package/dist/types/utils/headerHelper.d.ts +115 -0
  35. package/docs/changelog.md +914 -143
  36. package/docs/examples.md +108 -1
  37. package/docs/reference/classes/CookieHelper.md +155 -0
  38. package/docs/reference/classes/FetchError.md +453 -1
  39. package/docs/reference/classes/FetchHelper.md +12 -12
  40. package/docs/reference/classes/HeaderHelper.md +385 -2
  41. package/docs/reference/classes/Jwk.md +6 -6
  42. package/docs/reference/classes/Jws.md +3 -3
  43. package/docs/reference/classes/Jwt.md +17 -17
  44. package/docs/reference/classes/MimeTypeHelper.md +4 -4
  45. package/docs/reference/index.md +4 -0
  46. package/docs/reference/interfaces/IFetchOptions.md +12 -14
  47. package/docs/reference/interfaces/IHttpHeaders.md +1 -1
  48. package/docs/reference/interfaces/IHttpLinkHeader.md +43 -0
  49. package/docs/reference/type-aliases/HttpLinkRelType.md +5 -0
  50. package/docs/reference/variables/HeaderTypes.md +280 -8
  51. package/docs/reference/variables/HttpLinkRelType.md +191 -0
  52. package/docs/reference/variables/HttpMethod.md +63 -9
  53. package/docs/reference/variables/HttpStatusCode.md +314 -62
  54. package/docs/reference/variables/MimeTypes.md +279 -23
  55. package/locales/en.json +4 -3
  56. package/package.json +8 -8
@@ -1 +1 @@
1
- {"version":3,"file":"headerHelper.js","sourceRoot":"","sources":["../../../src/utils/headerHelper.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAEpC;;GAEG;AACH,MAAM,OAAO,YAAY;IACxB;;;;OAIG;IACI,MAAM,CAAC,YAAY,CAAC,KAAc;QACxC,IAAI,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBACjC,OAAO,KAAK,CAAC;YACd,CAAC;YACD,OAAO,UAAU,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QACjC,CAAC;QACD,OAAO,EAAE,CAAC;IACX,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,aAAa,CAAC,MAAe;QAC1C,IAAI,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5D,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9C,CAAC;QACD,OAAO,EAAE,CAAC;IACX,CAAC;CACD","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { Is } from \"@twin.org/core\";\n\n/**\n * Class to helper with header operations.\n */\nexport class HeaderHelper {\n\t/**\n\t * Create a bearer token header.\n\t * @param token The token to create the header for.\n\t * @returns The bearer token header.\n\t */\n\tpublic static createBearer(token: unknown): string {\n\t\tif (Is.stringValue(token)) {\n\t\t\tif (token.startsWith(\"Bearer \")) {\n\t\t\t\treturn token;\n\t\t\t}\n\t\t\treturn `Bearer ${token.trim()}`;\n\t\t}\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * Extract the bearer token from a header.\n\t * @param header The header value to extract the token from.\n\t * @returns The extracted token if it exists.\n\t */\n\tpublic static extractBearer(header: unknown): string {\n\t\tif (Is.stringValue(header) && header.startsWith(\"Bearer \")) {\n\t\t\treturn header.slice(7, header.length).trim();\n\t\t}\n\t\treturn \"\";\n\t}\n}\n"]}
1
+ {"version":3,"file":"headerHelper.js","sourceRoot":"","sources":["../../../src/utils/headerHelper.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { ArrayHelper, GeneralError, Guards, Is } from \"@twin.org/core\";\nimport { nameof } from \"@twin.org/nameof\";\nimport { HeaderTypes } from \"../models/headerTypes.js\";\nimport type { HttpLinkRelType } from \"../models/httpLinkRelType.js\";\nimport type { IHttpHeaders } from \"../models/IHttpHeaders.js\";\nimport type { IHttpLinkHeader } from \"../models/IHttpLinkHeader.js\";\n\n/**\n * Class to helper with header operations.\n */\nexport class HeaderHelper {\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<HeaderHelper>();\n\n\t/**\n\t * Regex for valid correlation ID (alphanumeric, dash, underscore).\n\t * Examples: `request_123`, `trace-id-456`, `ABC_789`.\n\t * @internal\n\t */\n\tprivate static readonly _CORRELATION_ID_REGEX = /^[\\w-]+$/;\n\n\t/**\n\t * Regex for valid Accept-Language tags and wildcard values.\n\t * Supports wildcard entries and common BCP 47 style tags.\n\t * Examples: `*`, `en`, `en-GB`, `es-419`, `zh-Hant`, `zh-Hant-TW`.\n\t * @internal\n\t */\n\tprivate static readonly _ACCEPT_LANGUAGE_TAG_REGEX = /^(\\*|[A-Za-z]{1,8}(?:-[\\dA-Za-z]{1,8})*)$/;\n\n\t/**\n\t * Regex for valid Accept-Language quality parameters.\n\t * Supports quality values from `0` to `1` with up to three decimal places.\n\t * Examples: `q=1`, `q=0.9`, `q=0.875`, `q=0`, `q=1.0`.\n\t * @internal\n\t */\n\tprivate static readonly _ACCEPT_LANGUAGE_QUALITY_REGEX = /^q=(0(?:\\.\\d{1,3})?|1(?:\\.0{1,3})?)$/i;\n\n\t/**\n\t * Regex for valid IPv4 addresses.\n\t * Examples: `127.0.0.1`, `192.168.1.10`, `255.255.255.255`.\n\t * @internal\n\t */\n\tprivate static readonly _IP_V4_REGEX =\n\t\t/^(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}$/;\n\n\t/**\n\t * Regex for valid IPv6 addresses.\n\t * Examples: `2001:0db8:85a3:0000:0000:8a2e:0370:7334`, `2001:db8::`, `::1`.\n\t * @internal\n\t */\n\tprivate static readonly _IP_V6_REGEX =\n\t\t/^((?:[\\dA-Fa-f]{1,4}:){7}[\\dA-Fa-f]{1,4}|(?:[\\dA-Fa-f]{1,4}:){1,7}:|:(?::[\\dA-Fa-f]{1,4}){1,7})$/;\n\n\t/**\n\t * Create a bearer token header.\n\t * @param token The token to create the header for.\n\t * @returns The bearer token header.\n\t */\n\tpublic static createBearer(token: unknown): string {\n\t\tif (Is.stringValue(token)) {\n\t\t\tif (token.startsWith(\"Bearer \")) {\n\t\t\t\treturn token;\n\t\t\t}\n\t\t\treturn `Bearer ${token.trim()}`;\n\t\t}\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * Extract the bearer token from a header.\n\t * @param header The header value to extract the token from.\n\t * @returns The extracted token if it exists.\n\t */\n\tpublic static extractBearer(header: unknown): string {\n\t\tif (Is.stringValue(header) && header.startsWith(\"Bearer \")) {\n\t\t\treturn header.slice(7, header.length).trim();\n\t\t}\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * Extract parsed language preferences from the Accept-Language header.\n\t * @param headers The HTTP request headers.\n\t * @returns The parsed language preferences ordered by highest quality first, or undefined if missing or invalid.\n\t */\n\tpublic static extractAcceptLanguage(\n\t\theaders?: IHttpHeaders\n\t): { language: string; quality: number }[] | undefined {\n\t\treturn HeaderHelper.parseAcceptLanguage(headers?.[HeaderTypes.AcceptLanguage]);\n\t}\n\n\t/**\n\t * Parse one or more Accept-Language header values into language preferences.\n\t * @param acceptLanguage The Accept-Language header value or values.\n\t * @returns The parsed language preferences ordered by highest quality first, or undefined if missing or if any entry is invalid.\n\t */\n\tpublic static parseAcceptLanguage(\n\t\tacceptLanguage: string | string[] | undefined\n\t): { language: string; quality: number }[] | undefined {\n\t\tlet headerValues: string[] = [];\n\n\t\tif (Is.array(acceptLanguage)) {\n\t\t\theaderValues = acceptLanguage\n\t\t\t\t.map(headerValue => headerValue.trim())\n\t\t\t\t.filter(headerValue => headerValue.length > 0);\n\t\t} else if (Is.stringValue(acceptLanguage)) {\n\t\t\theaderValues = [acceptLanguage.trim()];\n\t\t}\n\n\t\tif (headerValues.length > 0) {\n\t\t\tconst entries = headerValues\n\t\t\t\t.flatMap(headerValue => headerValue.split(\",\"))\n\t\t\t\t.map(segment => segment.trim())\n\t\t\t\t.filter(segment => segment.length > 0);\n\n\t\t\tconst parsedEntries: { language: string; quality: number }[] = [];\n\n\t\t\tfor (const entry of entries) {\n\t\t\t\tconst [languagePart, ...parameterParts] = entry.split(\";\").map(part => part.trim());\n\n\t\t\t\tif (!HeaderHelper._ACCEPT_LANGUAGE_TAG_REGEX.test(languagePart)) {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\n\t\t\t\tlet quality = 1;\n\n\t\t\t\tfor (const parameterPart of parameterParts) {\n\t\t\t\t\tif (parameterPart.length > 0) {\n\t\t\t\t\t\tif (parameterPart.startsWith(\"q=\") || parameterPart.startsWith(\"Q=\")) {\n\t\t\t\t\t\t\tconst qualityMatch = HeaderHelper._ACCEPT_LANGUAGE_QUALITY_REGEX.exec(parameterPart);\n\t\t\t\t\t\t\tif (!qualityMatch?.[1]) {\n\t\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tquality = Number(qualityMatch[1]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tparsedEntries.push({\n\t\t\t\t\tlanguage: languagePart,\n\t\t\t\t\tquality\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (parsedEntries.length > 0) {\n\t\t\t\treturn parsedEntries.sort((a, b) => b.quality - a.quality);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Extract client IP addresses from HTTP request headers.\n\t * Checks all `X-Forwarded-For` and `X-Real-IP` header values for proxied requests.\n\t * @param headers The HTTP request headers.\n\t * @returns The extracted client IP addresses in header order.\n\t */\n\tpublic static extractClientIps(headers?: IHttpHeaders): string[] {\n\t\tconst ips: string[] = [];\n\n\t\tconst forwardedForValues = HeaderHelper.getHeaderValues(headers?.[\"x-forwarded-for\"]);\n\t\tfor (const forwardedFor of forwardedForValues) {\n\t\t\tconst forwardedIps = forwardedFor\n\t\t\t\t.split(\",\")\n\t\t\t\t.map(ip => ip.trim())\n\t\t\t\t.filter(ip => HeaderHelper.isIpAddress(ip));\n\n\t\t\tips.push(...forwardedIps);\n\t\t}\n\n\t\tconst realIpValues = HeaderHelper.getHeaderValues(headers?.[\"x-real-ip\"]);\n\t\tfor (const realIp of realIpValues) {\n\t\t\tif (HeaderHelper.isIpAddress(realIp)) {\n\t\t\t\tips.push(realIp);\n\t\t\t}\n\t\t}\n\n\t\treturn ips;\n\t}\n\n\t/**\n\t * Extract the User-Agent header from the HTTP request context.\n\t * @param headers The HTTP request headers.\n\t * @param maxLength Optional maximum length for the User-Agent string to prevent excessively long values.\n\t * @returns The user agent string or undefined if not available.\n\t */\n\tpublic static extractUserAgent(headers?: IHttpHeaders, maxLength?: number): string | undefined {\n\t\tconst headerValues = HeaderHelper.getHeaderValues(headers?.[HeaderTypes.UserAgent]);\n\t\tfor (const headerValue of headerValues) {\n\t\t\treturn Is.integer(maxLength) ? headerValue.slice(0, maxLength) : headerValue;\n\t\t}\n\t}\n\n\t/**\n\t * Extract a correlation ID for request tracing from the X-Correlation-ID header.\n\t * @param headers The HTTP request headers.\n\t * @param maxLength Optional maximum length for the extracted correlation ID.\n\t * @returns The correlation ID, or undefined if the header is missing or invalid.\n\t */\n\tpublic static extractCorrelationId(\n\t\theaders?: IHttpHeaders,\n\t\tmaxLength?: number\n\t): string | undefined {\n\t\tconst headerValues = HeaderHelper.getHeaderValues(headers?.[\"x-correlation-id\"]);\n\t\tfor (const headerValue of headerValues) {\n\t\t\tif (HeaderHelper._CORRELATION_ID_REGEX.test(headerValue)) {\n\t\t\t\treturn Is.integer(maxLength) ? headerValue.slice(0, maxLength) : headerValue;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Validate if a string is a valid IP address (IPv4 or IPv6).\n\t * @param ip The IP address to validate.\n\t * @returns True if valid, false otherwise.\n\t */\n\tpublic static isIpAddress(ip: string): boolean {\n\t\tif (!Is.stringValue(ip)) {\n\t\t\treturn false;\n\t\t}\n\t\treturn HeaderHelper.isIpAddressV4(ip) || HeaderHelper.isIpAddressV6(ip);\n\t}\n\n\t/**\n\t * Validate if a string is a valid IP address IPv4.\n\t * @param ip The IP address to validate.\n\t * @returns True if valid, false otherwise.\n\t */\n\tpublic static isIpAddressV4(ip: string): boolean {\n\t\tif (!Is.stringValue(ip)) {\n\t\t\treturn false;\n\t\t}\n\t\treturn HeaderHelper._IP_V4_REGEX.test(ip);\n\t}\n\n\t/**\n\t * Validate if a string is a valid IP address IPv6.\n\t * @param ip The IP address to validate.\n\t * @returns True if valid, false otherwise.\n\t */\n\tpublic static isIpAddressV6(ip: string): boolean {\n\t\tif (!Is.stringValue(ip)) {\n\t\t\treturn false;\n\t\t}\n\t\treturn HeaderHelper._IP_V6_REGEX.test(ip);\n\t}\n\n\t/**\n\t * Extract the first occurrence of properties from a Link header for a specific relation type.\n\t * @param linkHeader The Link header value in format `<url>; rel=\"...\"; param1=\"\"; param2=\"\"`.\n\t * @param relation The relation type to extract.\n\t * @returns The extracted URL, rel and optional params or undefined if invalid/missing.\n\t * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Link\n\t */\n\tpublic static extractLinkHeaderRelation(\n\t\tlinkHeader: string | string[] | undefined,\n\t\trelation: HttpLinkRelType | string | RegExp\n\t): IHttpLinkHeader | undefined {\n\t\tconst headers = HeaderHelper.extractLinkHeaders(linkHeader);\n\t\tif (Is.arrayValue(headers)) {\n\t\t\treturn headers.find(h => HeaderHelper.matchesLinkHeaderRelation(h.rel, relation));\n\t\t}\n\t}\n\n\t/**\n\t * Extract multiple properties from a Link header for a specific relation type.\n\t * @param linkHeader The Link header value in format `<url>; rel=\"...\"; param1=\"\"; param2=\"\"`.\n\t * @param relation The relation type to extract.\n\t * @returns The extracted URL, rel and optional params or undefined if invalid/missing.\n\t * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Link\n\t */\n\tpublic static extractLinkHeaderRelations(\n\t\tlinkHeader: string | string[] | undefined,\n\t\trelation: HttpLinkRelType | string | RegExp\n\t): IHttpLinkHeader[] | undefined {\n\t\tconst headers = HeaderHelper.extractLinkHeaders(linkHeader);\n\t\tif (Is.arrayValue(headers)) {\n\t\t\treturn headers.filter(h => HeaderHelper.matchesLinkHeaderRelation(h.rel, relation));\n\t\t}\n\t}\n\n\t/**\n\t * Extract the link headers.\n\t * @param linkHeader The Link header value in format `<url>; rel=\"...\"; param1=\"\"; param2=\"\"`.\n\t * @returns The extracted possible array of URL, rel and optional params or undefined if invalid/missing.\n\t * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Link\n\t */\n\tpublic static extractLinkHeaders(\n\t\tlinkHeader: string | string[] | undefined\n\t): IHttpLinkHeader[] | undefined {\n\t\tconst linkHeaderArray = ArrayHelper.fromObjectOrArray<string>(linkHeader);\n\t\tif (Is.arrayValue<string>(linkHeaderArray)) {\n\t\t\tconst results = [];\n\t\t\tfor (const singleLinkHeader of linkHeaderArray) {\n\t\t\t\tconst segments = HeaderHelper.extractLinkHeaderSegments(singleLinkHeader);\n\t\t\t\tresults.push(\n\t\t\t\t\t...segments.map(l => HeaderHelper.extractLinkHeader(l)).filter(h => !Is.empty(h))\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn results;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Split a combined Link header value into individual link-value segments, comma separated.\n\t * @param linkHeader Raw Link header string.\n\t * @returns Array of individual link-value segments.\n\t * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Link\n\t */\n\tpublic static extractLinkHeaderSegments(linkHeader: string): string[] {\n\t\tif (!Is.stringValue(linkHeader)) {\n\t\t\treturn [];\n\t\t}\n\t\tconst trimmed = linkHeader.trim();\n\t\tif (Is.empty(trimmed)) {\n\t\t\treturn [];\n\t\t}\n\t\treturn trimmed\n\t\t\t.split(/,(?=\\s*<)/)\n\t\t\t.map(s => s.trim())\n\t\t\t.filter(s => !Is.empty(s));\n\t}\n\n\t/**\n\t * Extract the properties from a Link header.\n\t * @param linkHeader The Link header value in format `<url>; rel=\"...\"; param1=\"\"; param2=\"\"`.\n\t * @returns The extracted URL, rel and optional params or undefined if invalid/missing.\n\t * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Link\n\t */\n\tpublic static extractLinkHeader(linkHeader: string): IHttpLinkHeader | undefined {\n\t\tif (!Is.stringValue(linkHeader)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst parts = linkHeader.split(\";\");\n\n\t\tif (parts.length >= 2) {\n\t\t\tlet url;\n\t\t\tlet urlQueryParams: { [id: string]: string } | undefined;\n\n\t\t\tconst urlMatch = /<([^>]+)>/.exec(parts[0]);\n\t\t\tif (Is.stringValue(urlMatch?.[1])) {\n\t\t\t\turl = urlMatch[1];\n\n\t\t\t\tconst queryIndex = url.indexOf(\"?\");\n\t\t\t\tif (queryIndex !== -1) {\n\t\t\t\t\tconst urlParamsString = url.slice(queryIndex + 1);\n\t\t\t\t\tconst queryParts = urlParamsString.split(\"&\");\n\n\t\t\t\t\tfor (const queryPart of queryParts) {\n\t\t\t\t\t\tconst [key, value] = queryPart.split(\"=\");\n\t\t\t\t\t\tif (Is.stringValue(key) && Is.stringValue(value)) {\n\t\t\t\t\t\t\turlQueryParams ??= {};\n\t\t\t\t\t\t\turlQueryParams[key] = decodeURIComponent(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet rel: string[] | undefined;\n\t\t\tconst params: { [id: string]: string } = {};\n\n\t\t\tfor (let i = 1; i < parts.length; i++) {\n\t\t\t\tconst relMatch = /rel=\"([^\"]+)\"/.exec(parts[i].trim());\n\t\t\t\tif (relMatch?.[1]) {\n\t\t\t\t\trel = HeaderHelper.normalizeLinkHeaderRelations(relMatch[1]);\n\t\t\t\t} else {\n\t\t\t\t\tconst paramMatch = /([^=]+)=\"([^\"]+)\"/.exec(parts[i].trim());\n\t\t\t\t\tif (paramMatch?.[1] && paramMatch?.[2]) {\n\t\t\t\t\t\tparams[paramMatch[1]] = paramMatch[2];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (Is.stringValue(url) && Is.arrayValue(rel)) {\n\t\t\t\treturn {\n\t\t\t\t\turl,\n\t\t\t\t\turlQueryParams,\n\t\t\t\t\trel,\n\t\t\t\t\tparams: Object.keys(params).length > 0 ? params : undefined\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Create a compliant Link header.\n\t * @param url The URL to include in the Link header.\n\t * @param urlQueryParams Optional query parameters to include in the URL.\n\t * @param rel The relation type (e.g., \"next\", \"prev\", \"self\").\n\t * @returns The formatted Link header string.\n\t * @throws GeneralError if the URL or rel are invalid.\n\t * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Link\n\t */\n\tpublic static createLinkHeader(\n\t\turl: string,\n\t\turlQueryParams: { [id: string]: string } | undefined,\n\t\trel: HttpLinkRelType | HttpLinkRelType[] | string | string[],\n\t\tparams?: { [id: string]: string }\n\t): string {\n\t\tGuards.stringValue(HeaderHelper.CLASS_NAME, nameof(url), url);\n\n\t\tconst relationValues = Is.string(rel)\n\t\t\t? HeaderHelper.normalizeLinkHeaderRelations(rel)\n\t\t\t: ArrayHelper.fromObjectOrArray(rel);\n\n\t\tGuards.arrayValue(HeaderHelper.CLASS_NAME, nameof(rel), relationValues);\n\n\t\tif (url.includes(\">\")) {\n\t\t\tthrow new GeneralError(HeaderHelper.CLASS_NAME, \"invalidLinkHeaderURL\");\n\t\t}\n\n\t\tfor (let i = 0; i < relationValues.length; i++) {\n\t\t\tGuards.stringValue(\n\t\t\t\tHeaderHelper.CLASS_NAME,\n\t\t\t\t`${nameof(rel)}.${i.toString()}`,\n\t\t\t\trelationValues[i]\n\t\t\t);\n\t\t\tif (relationValues[i].includes('\"') || relationValues[i].includes(\" \")) {\n\t\t\t\tthrow new GeneralError(HeaderHelper.CLASS_NAME, \"invalidLinkHeaderRel\");\n\t\t\t}\n\t\t}\n\n\t\tif (Is.objectValue(urlQueryParams)) {\n\t\t\tconst queryParamsString = Object.entries(urlQueryParams)\n\t\t\t\t.map(([key, value]) => `${key}=${encodeURIComponent(value)}`)\n\t\t\t\t.join(\"&\");\n\t\t\tconst queryIndex = url.indexOf(\"?\");\n\t\t\tif (queryIndex === -1) {\n\t\t\t\turl += `?${queryParamsString}`;\n\t\t\t} else if (queryIndex === url.length - 1) {\n\t\t\t\turl += queryParamsString;\n\t\t\t} else {\n\t\t\t\turl += `&${queryParamsString}`;\n\t\t\t}\n\t\t}\n\n\t\treturn `<${url}>; rel=\"${relationValues.join(\" \")}\"${\n\t\t\tparams\n\t\t\t\t? Object.entries(params)\n\t\t\t\t\t\t.map(([key, value]) => `; ${key}=\"${value}\"`)\n\t\t\t\t\t\t.join(\"\")\n\t\t\t\t: \"\"\n\t\t}`;\n\t}\n\n\t/**\n\t * Does the relation selector match any of the link header relations.\n\t * @param relations The relations from the header.\n\t * @param relation The relation selector to test.\n\t * @returns True if the selector matches any relation.\n\t * @internal\n\t */\n\tprivate static matchesLinkHeaderRelation(\n\t\trelations: (HttpLinkRelType | string)[],\n\t\trelation: HttpLinkRelType | string | RegExp\n\t): boolean {\n\t\tif (Is.string(relation)) {\n\t\t\treturn relations.includes(relation);\n\t\t}\n\n\t\treturn relations.some(relValue => relation.test(relValue));\n\t}\n\n\t/**\n\t * Normalize a relation string into tokens.\n\t * @param relation The relation string.\n\t * @returns The relation tokens.\n\t * @internal\n\t */\n\tprivate static normalizeLinkHeaderRelations(relation: string): HttpLinkRelType[] {\n\t\treturn relation\n\t\t\t.split(/\\s+/)\n\t\t\t.map(relValue => relValue.trim())\n\t\t\t.filter(relValue => !Is.empty(relValue)) as HttpLinkRelType[];\n\t}\n\n\t/**\n\t * Get all non-empty values from a header that may be a string or string array.\n\t * @param header The header value (string, string array, or undefined).\n\t * @returns The trimmed non-empty string values.\n\t * @internal\n\t */\n\tprivate static getHeaderValues(header: string | string[] | undefined): string[] {\n\t\tlet headerValues: string[] = [];\n\n\t\tif (Is.array(header)) {\n\t\t\theaderValues = header;\n\t\t} else if (Is.stringValue(header)) {\n\t\t\theaderValues = [header];\n\t\t}\n\n\t\treturn headerValues\n\t\t\t.map(headerValue => headerValue.trim())\n\t\t\t.filter(headerValue => headerValue.length > 0);\n\t}\n}\n"]}
@@ -85,12 +85,38 @@ export class MimeTypeHelper {
85
85
  }
86
86
  const lookup = {
87
87
  [MimeTypes.PlainText]: "txt",
88
+ [MimeTypes.EventStream]: "txt",
88
89
  [MimeTypes.Html]: "html",
90
+ [MimeTypes.Css]: "css",
89
91
  [MimeTypes.Javascript]: "js",
92
+ [MimeTypes.Markdown]: "md",
90
93
  [MimeTypes.Json]: "json",
94
+ [MimeTypes.ProblemJson]: "json",
95
+ [MimeTypes.WebManifest]: "webmanifest",
91
96
  [MimeTypes.JsonLd]: "jsonld",
92
97
  [MimeTypes.Jwt]: "jwt",
98
+ [MimeTypes.AccessTokenJwt]: "jwt",
99
+ [MimeTypes.Jose]: "jose",
100
+ [MimeTypes.JoseJson]: "json",
101
+ [MimeTypes.JwkJson]: "json",
102
+ [MimeTypes.JwkSetJson]: "json",
103
+ [MimeTypes.JrdJson]: "json",
104
+ [MimeTypes.DidJson]: "json",
105
+ [MimeTypes.DidLdJson]: "jsonld",
106
+ [MimeTypes.VerifiableCredentialLdJson]: "jsonld",
107
+ [MimeTypes.VerifiablePresentationLdJson]: "jsonld",
108
+ [MimeTypes.VerifiableCredentialJwt]: "jwt",
109
+ [MimeTypes.VerifiablePresentationJwt]: "jwt",
110
+ [MimeTypes.JsonPatch]: "json",
111
+ [MimeTypes.MergePatch]: "json",
112
+ [MimeTypes.Cwt]: "cwt",
113
+ [MimeTypes.Cose]: "cose",
114
+ [MimeTypes.CoseKey]: "cose",
115
+ [MimeTypes.CoseKeySet]: "cose",
116
+ [MimeTypes.FormUrlEncoded]: "txt",
117
+ [MimeTypes.MultipartFormData]: "txt",
93
118
  [MimeTypes.Xml]: "xml",
119
+ [MimeTypes.Wasm]: "wasm",
94
120
  [MimeTypes.OctetStream]: "bin",
95
121
  [MimeTypes.Gzip]: "gzip",
96
122
  [MimeTypes.Zlib]: "zlib",
@@ -103,10 +129,25 @@ export class MimeTypeHelper {
103
129
  [MimeTypes.Png]: "png",
104
130
  [MimeTypes.Tiff]: "tif",
105
131
  [MimeTypes.Svg]: "svg",
132
+ [MimeTypes.Ico]: "ico",
106
133
  [MimeTypes.WebP]: "webp",
134
+ [MimeTypes.Avif]: "avif",
135
+ [MimeTypes.Apng]: "apng",
136
+ [MimeTypes.Woff]: "woff",
137
+ [MimeTypes.Woff2]: "woff2",
138
+ [MimeTypes.Ttf]: "ttf",
139
+ [MimeTypes.Otf]: "otf",
140
+ [MimeTypes.Mp3]: "mp3",
141
+ [MimeTypes.OggAudio]: "ogg",
142
+ [MimeTypes.Wav]: "wav",
143
+ [MimeTypes.WebmAudio]: "webm",
144
+ [MimeTypes.Aac]: "aac",
145
+ [MimeTypes.Mp4Audio]: "m4a",
107
146
  [MimeTypes.Mp4]: "mp4",
108
147
  [MimeTypes.Mpeg]: "mpg",
109
- [MimeTypes.Webm]: "webm"
148
+ [MimeTypes.Webm]: "webm",
149
+ [MimeTypes.OggVideo]: "ogv",
150
+ [MimeTypes.Quicktime]: "mov"
110
151
  };
111
152
  return lookup[mimeType];
112
153
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mimeTypeHelper.js","sourceRoot":"","sources":["../../../src/utils/mimeTypeHelper.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { Converter, Is, StringHelper } from \"@twin.org/core\";\nimport { MimeTypes } from \"../models/mimeTypes.js\";\n\n/**\n * Class to help with mime types.\n */\nexport class MimeTypeHelper {\n\t/**\n\t * Detect the mime type from a byte array.\n\t * @param data The data to test.\n\t * @returns The mime type if detected.\n\t */\n\tpublic static async detect(data: Uint8Array): Promise<string | undefined> {\n\t\tif (!Is.uint8Array(data) || data.length === 0) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Image\n\t\tif (MimeTypeHelper.checkBytes(data, [0x47, 0x49, 0x46])) {\n\t\t\treturn MimeTypes.Gif;\n\t\t}\n\n\t\tif (MimeTypeHelper.checkBytes(data, [0x42, 0x4d])) {\n\t\t\treturn MimeTypes.Bmp;\n\t\t}\n\t\tif (MimeTypeHelper.checkBytes(data, [0xff, 0xd8, 0xff])) {\n\t\t\treturn MimeTypes.Jpeg;\n\t\t}\n\n\t\tif (MimeTypeHelper.checkBytes(data, [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a])) {\n\t\t\treturn MimeTypes.Png;\n\t\t}\n\n\t\tif (\n\t\t\tMimeTypeHelper.checkBytes(data, [0x49, 0x49, 0x2a, 0x00]) ||\n\t\t\tMimeTypeHelper.checkBytes(data, [0x4d, 0x4d, 0x00, 0x2a])\n\t\t) {\n\t\t\treturn MimeTypes.Tiff;\n\t\t}\n\n\t\t// Compression\n\t\tif (MimeTypeHelper.checkBytes(data, [0x1f, 0x8b, 0x8])) {\n\t\t\treturn MimeTypes.Gzip;\n\t\t}\n\n\t\tif (\n\t\t\tMimeTypeHelper.checkBytes(data, [0x78, 0x01]) ||\n\t\t\tMimeTypeHelper.checkBytes(data, [0x78, 0x9c]) ||\n\t\t\tMimeTypeHelper.checkBytes(data, [0x78, 0xda])\n\t\t) {\n\t\t\treturn MimeTypes.Zlib;\n\t\t}\n\n\t\tif (MimeTypeHelper.checkBytes(data, [0x42, 0x5a, 0x68])) {\n\t\t\treturn MimeTypes.Bzip2;\n\t\t}\n\n\t\tif (MimeTypeHelper.checkBytes(data, [0x50, 0x4b, 0x3, 0x4])) {\n\t\t\treturn MimeTypes.Zip;\n\t\t}\n\n\t\t// Documents\n\t\tif (MimeTypeHelper.checkText(data, [\"%PDF\"])) {\n\t\t\treturn MimeTypes.Pdf;\n\t\t}\n\n\t\t// Lookup svg before xml, as svg are xml files as well\n\t\tconst asText = Converter.bytesToUtf8(data);\n\t\tif (asText.includes(\"<svg\")) {\n\t\t\treturn MimeTypes.Svg;\n\t\t}\n\n\t\tif (MimeTypeHelper.checkText(data, [\"<?xml \", \"<message\"])) {\n\t\t\treturn MimeTypes.Xml;\n\t\t}\n\n\t\tif (\n\t\t\tMimeTypeHelper.checkBytes(data, [0xef, 0xbb, 0xbf]) &&\n\t\t\tMimeTypeHelper.checkText(data, [\"<?xml \"], 3)\n\t\t) {\n\t\t\t// UTF-8-BOM\n\t\t\treturn MimeTypes.Xml;\n\t\t}\n\n\t\tif (StringHelper.isUtf8(data)) {\n\t\t\ttry {\n\t\t\t\tJSON.parse(new TextDecoder().decode(data));\n\t\t\t\treturn MimeTypes.Json;\n\t\t\t} catch {\n\t\t\t\treturn MimeTypes.PlainText;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Return the default extension for a mime type.\n\t * @param mimeType The mimetype to get the extension for.\n\t * @returns The extension for the mime type.\n\t */\n\tpublic static defaultExtension(mimeType: string | undefined): string | undefined {\n\t\tif (!Is.stringValue(mimeType)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst lookup: { [mimeType: string]: string } = {\n\t\t\t[MimeTypes.PlainText]: \"txt\",\n\t\t\t[MimeTypes.Html]: \"html\",\n\t\t\t[MimeTypes.Javascript]: \"js\",\n\t\t\t[MimeTypes.Json]: \"json\",\n\t\t\t[MimeTypes.JsonLd]: \"jsonld\",\n\t\t\t[MimeTypes.Jwt]: \"jwt\",\n\t\t\t[MimeTypes.Xml]: \"xml\",\n\t\t\t[MimeTypes.OctetStream]: \"bin\",\n\t\t\t[MimeTypes.Gzip]: \"gzip\",\n\t\t\t[MimeTypes.Zlib]: \"zlib\",\n\t\t\t[MimeTypes.Bzip2]: \"bz2\",\n\t\t\t[MimeTypes.Zip]: \"zip\",\n\t\t\t[MimeTypes.Pdf]: \"pdf\",\n\t\t\t[MimeTypes.Gif]: \"gif\",\n\t\t\t[MimeTypes.Bmp]: \"bmp\",\n\t\t\t[MimeTypes.Jpeg]: \"jpeg\",\n\t\t\t[MimeTypes.Png]: \"png\",\n\t\t\t[MimeTypes.Tiff]: \"tif\",\n\t\t\t[MimeTypes.Svg]: \"svg\",\n\t\t\t[MimeTypes.WebP]: \"webp\",\n\t\t\t[MimeTypes.Mp4]: \"mp4\",\n\t\t\t[MimeTypes.Mpeg]: \"mpg\",\n\t\t\t[MimeTypes.Webm]: \"webm\"\n\t\t};\n\n\t\treturn lookup[mimeType];\n\t}\n\n\t/**\n\t * Check if the bytes match.\n\t * @param data The data to look at.\n\t * @param bytes The bytes to try and match.\n\t * @param startOffset Start offset in the data.\n\t * @returns True if the bytes match.\n\t * @internal\n\t */\n\tprivate static checkBytes(data: Uint8Array, bytes: number[], startOffset = 0): boolean {\n\t\tif (data.length - startOffset < bytes.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tfor (let i = 0; i < bytes.length; i++) {\n\t\t\tif (data[i + startOffset] !== bytes[i]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Check if the text matches.\n\t * @param data The data to look at.\n\t * @param texts The text to try and match.\n\t * @param startOffset Start offset in the data.\n\t * @returns True if the bytes match.\n\t * @internal\n\t */\n\tprivate static checkText(data: Uint8Array, texts: string[], startOffset = 0): boolean {\n\t\treturn texts.some(text =>\n\t\t\tMimeTypeHelper.checkBytes(data, Array.from(Converter.utf8ToBytes(text)), startOffset)\n\t\t);\n\t}\n}\n"]}
1
+ {"version":3,"file":"mimeTypeHelper.js","sourceRoot":"","sources":["../../../src/utils/mimeTypeHelper.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { Converter, Is, StringHelper } from \"@twin.org/core\";\nimport { MimeTypes } from \"../models/mimeTypes.js\";\n\n/**\n * Class to help with mime types.\n */\nexport class MimeTypeHelper {\n\t/**\n\t * Detect the mime type from a byte array.\n\t * @param data The data to test.\n\t * @returns The mime type if detected.\n\t */\n\tpublic static async detect(data: Uint8Array): Promise<string | undefined> {\n\t\tif (!Is.uint8Array(data) || data.length === 0) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Image\n\t\tif (MimeTypeHelper.checkBytes(data, [0x47, 0x49, 0x46])) {\n\t\t\treturn MimeTypes.Gif;\n\t\t}\n\n\t\tif (MimeTypeHelper.checkBytes(data, [0x42, 0x4d])) {\n\t\t\treturn MimeTypes.Bmp;\n\t\t}\n\t\tif (MimeTypeHelper.checkBytes(data, [0xff, 0xd8, 0xff])) {\n\t\t\treturn MimeTypes.Jpeg;\n\t\t}\n\n\t\tif (MimeTypeHelper.checkBytes(data, [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a])) {\n\t\t\treturn MimeTypes.Png;\n\t\t}\n\n\t\tif (\n\t\t\tMimeTypeHelper.checkBytes(data, [0x49, 0x49, 0x2a, 0x00]) ||\n\t\t\tMimeTypeHelper.checkBytes(data, [0x4d, 0x4d, 0x00, 0x2a])\n\t\t) {\n\t\t\treturn MimeTypes.Tiff;\n\t\t}\n\n\t\t// Compression\n\t\tif (MimeTypeHelper.checkBytes(data, [0x1f, 0x8b, 0x8])) {\n\t\t\treturn MimeTypes.Gzip;\n\t\t}\n\n\t\tif (\n\t\t\tMimeTypeHelper.checkBytes(data, [0x78, 0x01]) ||\n\t\t\tMimeTypeHelper.checkBytes(data, [0x78, 0x9c]) ||\n\t\t\tMimeTypeHelper.checkBytes(data, [0x78, 0xda])\n\t\t) {\n\t\t\treturn MimeTypes.Zlib;\n\t\t}\n\n\t\tif (MimeTypeHelper.checkBytes(data, [0x42, 0x5a, 0x68])) {\n\t\t\treturn MimeTypes.Bzip2;\n\t\t}\n\n\t\tif (MimeTypeHelper.checkBytes(data, [0x50, 0x4b, 0x3, 0x4])) {\n\t\t\treturn MimeTypes.Zip;\n\t\t}\n\n\t\t// Documents\n\t\tif (MimeTypeHelper.checkText(data, [\"%PDF\"])) {\n\t\t\treturn MimeTypes.Pdf;\n\t\t}\n\n\t\t// Lookup svg before xml, as svg are xml files as well\n\t\tconst asText = Converter.bytesToUtf8(data);\n\t\tif (asText.includes(\"<svg\")) {\n\t\t\treturn MimeTypes.Svg;\n\t\t}\n\n\t\tif (MimeTypeHelper.checkText(data, [\"<?xml \", \"<message\"])) {\n\t\t\treturn MimeTypes.Xml;\n\t\t}\n\n\t\tif (\n\t\t\tMimeTypeHelper.checkBytes(data, [0xef, 0xbb, 0xbf]) &&\n\t\t\tMimeTypeHelper.checkText(data, [\"<?xml \"], 3)\n\t\t) {\n\t\t\t// UTF-8-BOM\n\t\t\treturn MimeTypes.Xml;\n\t\t}\n\n\t\tif (StringHelper.isUtf8(data)) {\n\t\t\ttry {\n\t\t\t\tJSON.parse(new TextDecoder().decode(data));\n\t\t\t\treturn MimeTypes.Json;\n\t\t\t} catch {\n\t\t\t\treturn MimeTypes.PlainText;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Return the default extension for a mime type.\n\t * @param mimeType The mimetype to get the extension for.\n\t * @returns The extension for the mime type.\n\t */\n\tpublic static defaultExtension(mimeType: string | undefined): string | undefined {\n\t\tif (!Is.stringValue(mimeType)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst lookup: { [mimeType: string]: string } = {\n\t\t\t[MimeTypes.PlainText]: \"txt\",\n\t\t\t[MimeTypes.EventStream]: \"txt\",\n\t\t\t[MimeTypes.Html]: \"html\",\n\t\t\t[MimeTypes.Css]: \"css\",\n\t\t\t[MimeTypes.Javascript]: \"js\",\n\t\t\t[MimeTypes.Markdown]: \"md\",\n\t\t\t[MimeTypes.Json]: \"json\",\n\t\t\t[MimeTypes.ProblemJson]: \"json\",\n\t\t\t[MimeTypes.WebManifest]: \"webmanifest\",\n\t\t\t[MimeTypes.JsonLd]: \"jsonld\",\n\t\t\t[MimeTypes.Jwt]: \"jwt\",\n\t\t\t[MimeTypes.AccessTokenJwt]: \"jwt\",\n\t\t\t[MimeTypes.Jose]: \"jose\",\n\t\t\t[MimeTypes.JoseJson]: \"json\",\n\t\t\t[MimeTypes.JwkJson]: \"json\",\n\t\t\t[MimeTypes.JwkSetJson]: \"json\",\n\t\t\t[MimeTypes.JrdJson]: \"json\",\n\t\t\t[MimeTypes.DidJson]: \"json\",\n\t\t\t[MimeTypes.DidLdJson]: \"jsonld\",\n\t\t\t[MimeTypes.VerifiableCredentialLdJson]: \"jsonld\",\n\t\t\t[MimeTypes.VerifiablePresentationLdJson]: \"jsonld\",\n\t\t\t[MimeTypes.VerifiableCredentialJwt]: \"jwt\",\n\t\t\t[MimeTypes.VerifiablePresentationJwt]: \"jwt\",\n\t\t\t[MimeTypes.JsonPatch]: \"json\",\n\t\t\t[MimeTypes.MergePatch]: \"json\",\n\t\t\t[MimeTypes.Cwt]: \"cwt\",\n\t\t\t[MimeTypes.Cose]: \"cose\",\n\t\t\t[MimeTypes.CoseKey]: \"cose\",\n\t\t\t[MimeTypes.CoseKeySet]: \"cose\",\n\t\t\t[MimeTypes.FormUrlEncoded]: \"txt\",\n\t\t\t[MimeTypes.MultipartFormData]: \"txt\",\n\t\t\t[MimeTypes.Xml]: \"xml\",\n\t\t\t[MimeTypes.Wasm]: \"wasm\",\n\t\t\t[MimeTypes.OctetStream]: \"bin\",\n\t\t\t[MimeTypes.Gzip]: \"gzip\",\n\t\t\t[MimeTypes.Zlib]: \"zlib\",\n\t\t\t[MimeTypes.Bzip2]: \"bz2\",\n\t\t\t[MimeTypes.Zip]: \"zip\",\n\t\t\t[MimeTypes.Pdf]: \"pdf\",\n\t\t\t[MimeTypes.Gif]: \"gif\",\n\t\t\t[MimeTypes.Bmp]: \"bmp\",\n\t\t\t[MimeTypes.Jpeg]: \"jpeg\",\n\t\t\t[MimeTypes.Png]: \"png\",\n\t\t\t[MimeTypes.Tiff]: \"tif\",\n\t\t\t[MimeTypes.Svg]: \"svg\",\n\t\t\t[MimeTypes.Ico]: \"ico\",\n\t\t\t[MimeTypes.WebP]: \"webp\",\n\t\t\t[MimeTypes.Avif]: \"avif\",\n\t\t\t[MimeTypes.Apng]: \"apng\",\n\t\t\t[MimeTypes.Woff]: \"woff\",\n\t\t\t[MimeTypes.Woff2]: \"woff2\",\n\t\t\t[MimeTypes.Ttf]: \"ttf\",\n\t\t\t[MimeTypes.Otf]: \"otf\",\n\t\t\t[MimeTypes.Mp3]: \"mp3\",\n\t\t\t[MimeTypes.OggAudio]: \"ogg\",\n\t\t\t[MimeTypes.Wav]: \"wav\",\n\t\t\t[MimeTypes.WebmAudio]: \"webm\",\n\t\t\t[MimeTypes.Aac]: \"aac\",\n\t\t\t[MimeTypes.Mp4Audio]: \"m4a\",\n\t\t\t[MimeTypes.Mp4]: \"mp4\",\n\t\t\t[MimeTypes.Mpeg]: \"mpg\",\n\t\t\t[MimeTypes.Webm]: \"webm\",\n\t\t\t[MimeTypes.OggVideo]: \"ogv\",\n\t\t\t[MimeTypes.Quicktime]: \"mov\"\n\t\t};\n\n\t\treturn lookup[mimeType];\n\t}\n\n\t/**\n\t * Check if the bytes match.\n\t * @param data The data to look at.\n\t * @param bytes The bytes to try and match.\n\t * @param startOffset Start offset in the data.\n\t * @returns True if the bytes match.\n\t * @internal\n\t */\n\tprivate static checkBytes(data: Uint8Array, bytes: number[], startOffset = 0): boolean {\n\t\tif (data.length - startOffset < bytes.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tfor (let i = 0; i < bytes.length; i++) {\n\t\t\tif (data[i + startOffset] !== bytes[i]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Check if the text matches.\n\t * @param data The data to look at.\n\t * @param texts The text to try and match.\n\t * @param startOffset Start offset in the data.\n\t * @returns True if the bytes match.\n\t * @internal\n\t */\n\tprivate static checkText(data: Uint8Array, texts: string[], startOffset = 0): boolean {\n\t\treturn texts.some(text =>\n\t\t\tMimeTypeHelper.checkBytes(data, Array.from(Converter.utf8ToBytes(text)), startOffset)\n\t\t);\n\t}\n}\n"]}
@@ -1,14 +1,17 @@
1
1
  export * from "./errors/fetchError.js";
2
2
  export * from "./models/headerTypes.js";
3
+ export * from "./models/httpLinkRelType.js";
3
4
  export * from "./models/httpMethod.js";
4
5
  export * from "./models/httpStatusCode.js";
5
6
  export * from "./models/IFetchOptions.js";
6
7
  export * from "./models/IHttpHeaders.js";
8
+ export * from "./models/IHttpLinkHeader.js";
7
9
  export * from "./models/IJwk.js";
8
10
  export * from "./models/IJwtHeader.js";
9
11
  export * from "./models/IJwtPayload.js";
10
12
  export * from "./models/jwkCryptoKey.js";
11
13
  export * from "./models/mimeTypes.js";
14
+ export * from "./utils/cookieHelper.js";
12
15
  export * from "./utils/fetchHelper.js";
13
16
  export * from "./utils/headerHelper.js";
14
17
  export * from "./utils/jwk.js";
@@ -4,7 +4,7 @@ import type { IHttpHeaders } from "./IHttpHeaders.js";
4
4
  */
5
5
  export interface IFetchOptions {
6
6
  /**
7
- * @param headers The headers for the request.
7
+ * The headers for the request.
8
8
  */
9
9
  headers?: IHttpHeaders;
10
10
  /**
@@ -0,0 +1,26 @@
1
+ import type { HttpLinkRelType } from "./httpLinkRelType.js";
2
+ /**
3
+ * Model used for Http link headers parameter.
4
+ */
5
+ export interface IHttpLinkHeader {
6
+ /**
7
+ * The URL of the link.
8
+ */
9
+ url: string;
10
+ /**
11
+ * Optional query parameters for the URL.
12
+ */
13
+ urlQueryParams?: {
14
+ [id: string]: string;
15
+ };
16
+ /**
17
+ * The relation types of the link.
18
+ */
19
+ rel: (string | HttpLinkRelType)[];
20
+ /**
21
+ * Optional additional parameters for the link.
22
+ */
23
+ params?: {
24
+ [id: string]: string;
25
+ };
26
+ }
@@ -4,36 +4,164 @@
4
4
  export declare const HeaderTypes: {
5
5
  /**
6
6
  * Content Type.
7
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type
7
8
  */
8
9
  readonly ContentType: "content-type";
10
+ /**
11
+ * Content Language.
12
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Language
13
+ */
14
+ readonly ContentLanguage: "content-language";
9
15
  /**
10
16
  * Content Length.
17
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Length
11
18
  */
12
19
  readonly ContentLength: "content-length";
13
20
  /**
14
21
  * Content Disposition.
22
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition
15
23
  */
16
24
  readonly ContentDisposition: "content-disposition";
25
+ /**
26
+ * Content Encoding.
27
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Encoding
28
+ */
29
+ readonly ContentEncoding: "content-encoding";
30
+ /**
31
+ * Cache Control.
32
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control
33
+ */
34
+ readonly CacheControl: "cache-control";
35
+ /**
36
+ * ETag.
37
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag
38
+ */
39
+ readonly ETag: "etag";
40
+ /**
41
+ * If-None-Match.
42
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-None-Match
43
+ */
44
+ readonly IfNoneMatch: "if-none-match";
45
+ /**
46
+ * Last-Modified.
47
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Last-Modified
48
+ */
49
+ readonly LastModified: "last-modified";
50
+ /**
51
+ * If-Modified-Since.
52
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Modified-Since
53
+ */
54
+ readonly IfModifiedSince: "if-modified-since";
17
55
  /**
18
56
  * Accept.
57
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Accept
19
58
  */
20
59
  readonly Accept: "accept";
60
+ /**
61
+ * Accept-Language.
62
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Accept-Language
63
+ */
64
+ readonly AcceptLanguage: "accept-language";
65
+ /**
66
+ * Accept-Encoding.
67
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Accept-Encoding
68
+ */
69
+ readonly AcceptEncoding: "accept-encoding";
21
70
  /**
22
71
  * Authorization.
72
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Authorization
23
73
  */
24
74
  readonly Authorization: "authorization";
75
+ /**
76
+ * WWW-Authenticate.
77
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/WWW-Authenticate
78
+ */
79
+ readonly WwwAuthenticate: "www-authenticate";
25
80
  /**
26
81
  * Cookie.
82
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Cookie
27
83
  */
28
84
  readonly Cookie: "cookie";
29
85
  /**
30
86
  * Set Cookie.
87
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Set-Cookie
31
88
  */
32
89
  readonly SetCookie: "set-cookie";
33
90
  /**
34
91
  * Location
92
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Location
35
93
  */
36
94
  readonly Location: "location";
95
+ /**
96
+ * Origin.
97
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Origin
98
+ */
99
+ readonly Origin: "origin";
100
+ /**
101
+ * Referer.
102
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer
103
+ */
104
+ readonly Referer: "referer";
105
+ /**
106
+ * Link
107
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Link
108
+ */
109
+ readonly Link: "link";
110
+ /**
111
+ * Vary.
112
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Vary
113
+ */
114
+ readonly Vary: "vary";
115
+ /**
116
+ * Access-Control-Allow-Origin.
117
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin
118
+ */
119
+ readonly AccessControlAllowOrigin: "access-control-allow-origin";
120
+ /**
121
+ * Access-Control-Allow-Methods.
122
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Methods
123
+ */
124
+ readonly AccessControlAllowMethods: "access-control-allow-methods";
125
+ /**
126
+ * Access-Control-Allow-Headers.
127
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers
128
+ */
129
+ readonly AccessControlAllowHeaders: "access-control-allow-headers";
130
+ /**
131
+ * Access-Control-Expose-Headers.
132
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Expose-Headers
133
+ */
134
+ readonly AccessControlExposeHeaders: "access-control-expose-headers";
135
+ /**
136
+ * Access-Control-Max-Age.
137
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Max-Age
138
+ */
139
+ readonly AccessControlMaxAge: "access-control-max-age";
140
+ /**
141
+ * Access-Control-Allow-Credentials.
142
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Credentials
143
+ */
144
+ readonly AccessControlAllowCredentials: "access-control-allow-credentials";
145
+ /**
146
+ * Range.
147
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Range
148
+ */
149
+ readonly Range: "range";
150
+ /**
151
+ * Accept-Ranges.
152
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Ranges
153
+ */
154
+ readonly AcceptRanges: "accept-ranges";
155
+ /**
156
+ * Content-Range.
157
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Range
158
+ */
159
+ readonly ContentRange: "content-range";
160
+ /**
161
+ * User-Agent
162
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent
163
+ */
164
+ readonly UserAgent: "user-agent";
37
165
  };
38
166
  /**
39
167
  * Common http header types.
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Common HTML rel attribute values.
3
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes/rel
4
+ */
5
+ export declare const HttpLinkRelType: {
6
+ /**
7
+ * Alternate representation of the current document.
8
+ */
9
+ readonly alternate: "alternate";
10
+ /**
11
+ * Author of the current document or article.
12
+ */
13
+ readonly author: "author";
14
+ /**
15
+ * Permalink for the nearest ancestor section.
16
+ */
17
+ readonly bookmark: "bookmark";
18
+ /**
19
+ * Preferred URL for the current document.
20
+ */
21
+ readonly canonical: "canonical";
22
+ /**
23
+ * Compression dictionary for future downloads.
24
+ */
25
+ readonly compressionDictionary: "compression-dictionary";
26
+ /**
27
+ * Hint to perform DNS resolution in advance.
28
+ */
29
+ readonly dnsPrefetch: "dns-prefetch";
30
+ /**
31
+ * The referenced document is external to the current site.
32
+ */
33
+ readonly external: "external";
34
+ /**
35
+ * Allows render-blocking until essential parts are parsed.
36
+ */
37
+ readonly expect: "expect";
38
+ /**
39
+ * Link to context-sensitive help.
40
+ */
41
+ readonly help: "help";
42
+ /**
43
+ * Icon representing the current document.
44
+ */
45
+ readonly icon: "icon";
46
+ /**
47
+ * Licensing information for the current document.
48
+ */
49
+ readonly license: "license";
50
+ /**
51
+ * Web application manifest.
52
+ */
53
+ readonly manifest: "manifest";
54
+ /**
55
+ * Indicates the current document represents the linked identity.
56
+ */
57
+ readonly me: "me";
58
+ /**
59
+ * Pre-emptively fetch a module and optionally its dependencies.
60
+ */
61
+ readonly modulePreload: "modulepreload";
62
+ /**
63
+ * The next document in a series.
64
+ */
65
+ readonly next: "next";
66
+ /**
67
+ * The current document does not endorse the referenced document.
68
+ */
69
+ readonly nofollow: "nofollow";
70
+ /**
71
+ * Prevent access to the originating browsing context.
72
+ */
73
+ readonly noopener: "noopener";
74
+ /**
75
+ * Suppress the Referer header and implies noopener.
76
+ */
77
+ readonly noreferrer: "noreferrer";
78
+ /**
79
+ * Allow access to the originating browsing context.
80
+ */
81
+ readonly opener: "opener";
82
+ /**
83
+ * Address of the pingback server for the current document.
84
+ */
85
+ readonly pingback: "pingback";
86
+ /**
87
+ * Hint to connect to the target origin in advance.
88
+ */
89
+ readonly preconnect: "preconnect";
90
+ /**
91
+ * Hint to fetch and cache a likely next resource.
92
+ */
93
+ readonly prefetch: "prefetch";
94
+ /**
95
+ * Hint to fetch and cache a resource for the current navigation.
96
+ */
97
+ readonly preload: "preload";
98
+ /**
99
+ * Deprecated hint to fetch and process a target in advance.
100
+ */
101
+ readonly prerender: "prerender";
102
+ /**
103
+ * The previous document in a series.
104
+ */
105
+ readonly prev: "prev";
106
+ /**
107
+ * Privacy policy for the current document.
108
+ */
109
+ readonly privacyPolicy: "privacy-policy";
110
+ /**
111
+ * Search resource for the current document or related resources.
112
+ */
113
+ readonly search: "search";
114
+ /**
115
+ * External stylesheet for the current document.
116
+ */
117
+ readonly stylesheet: "stylesheet";
118
+ /**
119
+ * Tag applying to the current document.
120
+ */
121
+ readonly tag: "tag";
122
+ /**
123
+ * Terms of service for the current document.
124
+ */
125
+ readonly termsOfService: "terms-of-service";
126
+ };
127
+ /**
128
+ * Common HTML rel attribute values.
129
+ */
130
+ export type HttpLinkRelType = (typeof HttpLinkRelType)[keyof typeof HttpLinkRelType];
@@ -2,14 +2,50 @@
2
2
  * The names of the HTTP Methods.
3
3
  */
4
4
  export declare const HttpMethod: {
5
+ /**
6
+ * Retrieve a representation of the resource.
7
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/GET
8
+ */
5
9
  readonly GET: "GET";
10
+ /**
11
+ * Submit an entity to the specified resource.
12
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST
13
+ */
6
14
  readonly POST: "POST";
15
+ /**
16
+ * Replace all current representations of the target resource.
17
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PUT
18
+ */
7
19
  readonly PUT: "PUT";
20
+ /**
21
+ * Apply partial modifications to a resource.
22
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PATCH
23
+ */
8
24
  readonly PATCH: "PATCH";
25
+ /**
26
+ * Delete the specified resource.
27
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/DELETE
28
+ */
9
29
  readonly DELETE: "DELETE";
30
+ /**
31
+ * Describe the communication options for the target resource.
32
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/OPTIONS
33
+ */
10
34
  readonly OPTIONS: "OPTIONS";
35
+ /**
36
+ * Ask for a response identical to GET, but without the response body.
37
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/HEAD
38
+ */
11
39
  readonly HEAD: "HEAD";
40
+ /**
41
+ * Establish a tunnel to the server identified by the target resource.
42
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/CONNECT
43
+ */
12
44
  readonly CONNECT: "CONNECT";
45
+ /**
46
+ * Perform a message loop-back test along the path to the target resource.
47
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/TRACE
48
+ */
13
49
  readonly TRACE: "TRACE";
14
50
  };
15
51
  /**