webRequest.ts 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. /**
  2. * Extended version of XMLHttpRequest with support for customizations (headers, ...)
  3. */
  4. export class WebRequest {
  5. private _xhr = new XMLHttpRequest();
  6. /**
  7. * Custom HTTP Request Headers to be sent with XMLHttpRequests
  8. * i.e. when loading files, where the server/service expects an Authorization header
  9. */
  10. public static CustomRequestHeaders: { [key: string]: string } = {};
  11. /**
  12. * Add callback functions in this array to update all the requests before they get sent to the network
  13. */
  14. public static CustomRequestModifiers = new Array<(request: XMLHttpRequest) => void>();
  15. private _injectCustomRequestHeaders(): void {
  16. for (let key in WebRequest.CustomRequestHeaders) {
  17. const val = WebRequest.CustomRequestHeaders[key];
  18. if (val) {
  19. this._xhr.setRequestHeader(key, val);
  20. }
  21. }
  22. }
  23. /**
  24. * Gets or sets a function to be called when loading progress changes
  25. */
  26. public get onprogress(): ((this: XMLHttpRequest, ev: ProgressEvent) => any) | null {
  27. return this._xhr.onprogress;
  28. }
  29. public set onprogress(value: ((this: XMLHttpRequest, ev: ProgressEvent) => any) | null) {
  30. this._xhr.onprogress = value;
  31. }
  32. /**
  33. * Returns client's state
  34. */
  35. public get readyState(): number {
  36. return this._xhr.readyState;
  37. }
  38. /**
  39. * Returns client's status
  40. */
  41. public get status(): number {
  42. return this._xhr.status;
  43. }
  44. /**
  45. * Returns client's status as a text
  46. */
  47. public get statusText(): string {
  48. return this._xhr.statusText;
  49. }
  50. /**
  51. * Returns client's response
  52. */
  53. public get response(): any {
  54. return this._xhr.response;
  55. }
  56. /**
  57. * Returns client's response url
  58. */
  59. public get responseURL(): string {
  60. return this._xhr.responseURL;
  61. }
  62. /**
  63. * Returns client's response as text
  64. */
  65. public get responseText(): string {
  66. return this._xhr.responseText;
  67. }
  68. /**
  69. * Gets or sets the expected response type
  70. */
  71. public get responseType(): XMLHttpRequestResponseType {
  72. return this._xhr.responseType;
  73. }
  74. public set responseType(value: XMLHttpRequestResponseType) {
  75. this._xhr.responseType = value;
  76. }
  77. /** @hidden */
  78. public addEventListener<K extends keyof XMLHttpRequestEventMap>(type: K, listener: (this: XMLHttpRequest, ev: XMLHttpRequestEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
  79. public addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void {
  80. this._xhr.addEventListener(type, listener, options);
  81. }
  82. /** @hidden */
  83. public removeEventListener<K extends keyof XMLHttpRequestEventMap>(type: K, listener: (this: XMLHttpRequest, ev: XMLHttpRequestEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
  84. public removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void {
  85. this._xhr.removeEventListener(type, listener, options);
  86. }
  87. /**
  88. * Cancels any network activity
  89. */
  90. public abort() {
  91. this._xhr.abort();
  92. }
  93. /**
  94. * Initiates the request. The optional argument provides the request body. The argument is ignored if request method is GET or HEAD
  95. * @param body defines an optional request body
  96. */
  97. public send(body?: Document | BodyInit | null): void {
  98. if (WebRequest.CustomRequestHeaders) {
  99. this._injectCustomRequestHeaders();
  100. }
  101. this._xhr.send(body);
  102. }
  103. /**
  104. * Sets the request method, request URL
  105. * @param method defines the method to use (GET, POST, etc..)
  106. * @param url defines the url to connect with
  107. */
  108. public open(method: string, url: string): void {
  109. for (var update of WebRequest.CustomRequestModifiers) {
  110. update(this._xhr);
  111. }
  112. return this._xhr.open(method, url, true);
  113. }
  114. }