@comunica/actor-http-native 2.8.1 → 2.10.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.
@@ -7,6 +7,7 @@
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
8
8
  const events_1 = require("events");
9
9
  const stream_1 = require("stream");
10
+ // Use require instead of import for default exports, to be compatible with variants of esModuleInterop in tsconfig.
10
11
  const parseLink = require("parse-link-header");
11
12
  // Headers we cannot send (see https://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader()-method)
12
13
  const UNSAFE_REQUEST_HEADERS = { 'accept-encoding': true, 'user-agent': true, referer: true };
@@ -1 +1 @@
1
- {"version":3,"file":"Requester-browser.js","sourceRoot":"","sources":["Requester-browser.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable unicorn/filename-case */\n/* eslint-enable unicorn/filename-case */\n/* ! @license MIT ©2013-2016 Ruben Verborgh, Ghent University - imec */\n/* Single-function HTTP(S) request module for browsers */\n/* Translated from https://github.com/LinkedDataFragments/Client.js/blob/master/lib/browser/Request.js */\n\nimport { EventEmitter } from 'events';\nimport type { IncomingHttpHeaders, IncomingMessage } from 'http';\nimport { Readable } from 'stream';\nimport * as parseLink from 'parse-link-header';\n\n// Headers we cannot send (see https://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader()-method)\nconst UNSAFE_REQUEST_HEADERS = { 'accept-encoding': true, 'user-agent': true, referer: true };\n\nexport default class Requester {\n // Resources that were already time-negotiated\n private negotiatedResources: Record<string, boolean>;\n\n public constructor() {\n this.negotiatedResources = {};\n }\n\n // Creates an HTTP request with the given settings\n public createRequest(settings: any): EventEmitter {\n // PERFORMANCE HACK:\n // Reduce OPTIONS preflight requests by removing the Accept-Datetime header\n // on requests for resources that are presumed to have been time-negotiated\n if (this.negotiatedResources[this.removeQuery(settings.url)]) {\n (<Headers> settings.headers).delete('accept-datetime');\n }\n\n // Create the actual XMLHttpRequest\n const request = new XMLHttpRequest();\n const reqHeaders: Headers = settings.headers;\n request.open(settings.method, settings.url, true);\n request.timeout = settings.timeout;\n request.withCredentials = settings.withCredentials;\n\n reqHeaders.forEach((value, key) => {\n if (!(key in UNSAFE_REQUEST_HEADERS) && value) {\n request.setRequestHeader(key, value);\n }\n });\n\n // Create a proxy for the XMLHttpRequest\n const requestProxy = new EventEmitter();\n (<any> requestProxy).abort = () => {\n request.abort();\n };\n\n // Handle the arrival of a response\n request.onload = () => {\n // Convert the response into an iterator\n const response: IncomingMessage = <IncomingMessage> new Readable();\n response.push(request.responseText || '');\n response.push(null);\n response.statusCode = request.status;\n (<any> response).responseUrl = request.responseURL;\n\n // Parse the response headers\n const resHeaders: Headers = this.convertRequestHeadersToFetchHeaders(response.headers);\n response.headers = <any> resHeaders;\n const rawHeaders = request.getAllResponseHeaders() || '';\n const headerMatcher = /^([^\\n\\r:]+):[\\t ]*([^\\n\\r]*)$/gmu;\n let match = headerMatcher.exec(rawHeaders);\n while (match) {\n resHeaders.set(match[1].toLowerCase(), match[2]);\n match = headerMatcher.exec(rawHeaders);\n }\n\n // Emit the response\n requestProxy.emit('response', response);\n\n // If the resource was time-negotiated, store its queryless URI\n // to enable the PERFORMANCE HACK explained above\n if (reqHeaders.has('accept-datetime') && resHeaders.has('memento-datetime')) {\n const resource = this.removeQuery(resHeaders.get('content-location') ?? settings.url);\n if (!this.negotiatedResources[resource]) {\n // Ensure the resource is not a timegate\n const links = (resHeaders.get('link') && parseLink(resHeaders.get('link'))) ?? undefined;\n const timegate = this.removeQuery(links && links.timegate?.url);\n if (resource !== timegate) {\n this.negotiatedResources[resource] = true;\n }\n }\n }\n };\n // Report errors and timeouts\n request.onerror = () => {\n requestProxy.emit('error', new Error(`Error requesting ${settings.url}`));\n };\n request.ontimeout = () => {\n requestProxy.emit('error', new Error(`Timeout requesting ${settings.url}`));\n };\n\n // Execute the request\n if (settings.body) {\n if (settings.body instanceof URLSearchParams) {\n request.send(settings.body.toString());\n } else if (typeof settings.body === 'string') {\n request.send(settings.body);\n } else {\n settings.body.blob()\n .then((blob: any) => request.send(blob))\n .catch((error: Error) => requestProxy.emit('error', error));\n }\n } else {\n request.send();\n }\n\n return requestProxy;\n }\n\n // Wrap headers into an header object type\n public convertRequestHeadersToFetchHeaders(headers: IncomingHttpHeaders): Headers {\n const responseHeaders: Headers = new Headers();\n for (const key in headers) {\n responseHeaders.append(key, <string> headers[key]);\n }\n return responseHeaders;\n }\n\n // Removes the query string from a URL\n private removeQuery(url?: string): string {\n return url ? url.replace(/\\?.*$/u, '') : '';\n }\n}\n"]}
1
+ {"version":3,"file":"Requester-browser.js","sourceRoot":"","sources":["Requester-browser.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable unicorn/filename-case */\n/* eslint-enable unicorn/filename-case */\n/* ! @license MIT ©2013-2016 Ruben Verborgh, Ghent University - imec */\n/* Single-function HTTP(S) request module for browsers */\n/* Translated from https://github.com/LinkedDataFragments/Client.js/blob/master/lib/browser/Request.js */\n\nimport { EventEmitter } from 'events';\nimport type { IncomingHttpHeaders, IncomingMessage } from 'http';\nimport { Readable } from 'stream';\n// Use require instead of import for default exports, to be compatible with variants of esModuleInterop in tsconfig.\nimport parseLink = require('parse-link-header');\n\n// Headers we cannot send (see https://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader()-method)\nconst UNSAFE_REQUEST_HEADERS = { 'accept-encoding': true, 'user-agent': true, referer: true };\n\nexport default class Requester {\n // Resources that were already time-negotiated\n private negotiatedResources: Record<string, boolean>;\n\n public constructor() {\n this.negotiatedResources = {};\n }\n\n // Creates an HTTP request with the given settings\n public createRequest(settings: any): EventEmitter {\n // PERFORMANCE HACK:\n // Reduce OPTIONS preflight requests by removing the Accept-Datetime header\n // on requests for resources that are presumed to have been time-negotiated\n if (this.negotiatedResources[this.removeQuery(settings.url)]) {\n (<Headers> settings.headers).delete('accept-datetime');\n }\n\n // Create the actual XMLHttpRequest\n const request = new XMLHttpRequest();\n const reqHeaders: Headers = settings.headers;\n request.open(settings.method, settings.url, true);\n request.timeout = settings.timeout;\n request.withCredentials = settings.withCredentials;\n\n reqHeaders.forEach((value, key) => {\n if (!(key in UNSAFE_REQUEST_HEADERS) && value) {\n request.setRequestHeader(key, value);\n }\n });\n\n // Create a proxy for the XMLHttpRequest\n const requestProxy = new EventEmitter();\n (<any> requestProxy).abort = () => {\n request.abort();\n };\n\n // Handle the arrival of a response\n request.onload = () => {\n // Convert the response into an iterator\n const response: IncomingMessage = <IncomingMessage> new Readable();\n response.push(request.responseText || '');\n response.push(null);\n response.statusCode = request.status;\n (<any> response).responseUrl = request.responseURL;\n\n // Parse the response headers\n const resHeaders: Headers = this.convertRequestHeadersToFetchHeaders(response.headers);\n response.headers = <any> resHeaders;\n const rawHeaders = request.getAllResponseHeaders() || '';\n const headerMatcher = /^([^\\n\\r:]+):[\\t ]*([^\\n\\r]*)$/gmu;\n let match = headerMatcher.exec(rawHeaders);\n while (match) {\n resHeaders.set(match[1].toLowerCase(), match[2]);\n match = headerMatcher.exec(rawHeaders);\n }\n\n // Emit the response\n requestProxy.emit('response', response);\n\n // If the resource was time-negotiated, store its queryless URI\n // to enable the PERFORMANCE HACK explained above\n if (reqHeaders.has('accept-datetime') && resHeaders.has('memento-datetime')) {\n const resource = this.removeQuery(resHeaders.get('content-location') ?? settings.url);\n if (!this.negotiatedResources[resource]) {\n // Ensure the resource is not a timegate\n const links = (resHeaders.get('link') && parseLink(resHeaders.get('link'))) ?? undefined;\n const timegate = this.removeQuery(links && links.timegate?.url);\n if (resource !== timegate) {\n this.negotiatedResources[resource] = true;\n }\n }\n }\n };\n // Report errors and timeouts\n request.onerror = () => {\n requestProxy.emit('error', new Error(`Error requesting ${settings.url}`));\n };\n request.ontimeout = () => {\n requestProxy.emit('error', new Error(`Timeout requesting ${settings.url}`));\n };\n\n // Execute the request\n if (settings.body) {\n if (settings.body instanceof URLSearchParams) {\n request.send(settings.body.toString());\n } else if (typeof settings.body === 'string') {\n request.send(settings.body);\n } else {\n settings.body.blob()\n .then((blob: any) => request.send(blob))\n .catch((error: Error) => requestProxy.emit('error', error));\n }\n } else {\n request.send();\n }\n\n return requestProxy;\n }\n\n // Wrap headers into an header object type\n public convertRequestHeadersToFetchHeaders(headers: IncomingHttpHeaders): Headers {\n const responseHeaders: Headers = new Headers();\n for (const key in headers) {\n responseHeaders.append(key, <string> headers[key]);\n }\n return responseHeaders;\n }\n\n // Removes the query string from a URL\n private removeQuery(url?: string): string {\n return url ? url.replace(/\\?.*$/u, '') : '';\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@comunica/actor-http-native",
3
- "version": "2.8.1",
3
+ "version": "2.10.0",
4
4
  "description": "A native http actor",
5
5
  "lsd:module": true,
6
6
  "main": "lib/index.js",
@@ -32,9 +32,9 @@
32
32
  "lib/**/*.js.map"
33
33
  ],
34
34
  "dependencies": {
35
- "@comunica/bus-http": "^2.8.1",
36
- "@comunica/context-entries": "^2.8.1",
37
- "@comunica/mediatortype-time": "^2.8.1",
35
+ "@comunica/bus-http": "^2.10.0",
36
+ "@comunica/context-entries": "^2.10.0",
37
+ "@comunica/mediatortype-time": "^2.10.0",
38
38
  "cross-fetch": "^4.0.0",
39
39
  "follow-redirects": "^1.15.2",
40
40
  "parse-link-header": "^2.0.0",
@@ -48,5 +48,5 @@
48
48
  "browser": {
49
49
  "./lib/Requester.js": "./lib/Requester-browser.js"
50
50
  },
51
- "gitHead": "bd61ea606b0c7de1352a9b8a3b148accddbb21ea"
51
+ "gitHead": "4d8603ca7e7606ca8eaef305e8753b3f91668f4e"
52
52
  }