Developer 02 6f59906a7e - SQL-SELECT-Anweisungen in Dokumenten aktualisiert, um alle Spalten abzurufen.
- Prioritätsbehandlung für document_path_dmz in EnvelopeService.LoadEnvelopes hinzugefügt.
- CRUD-Operationen in EnvlopeDocument und ConfigurationFile Services/Repositories unter Verwendung von WebCoreModules implementiert.
- Verschiedene Dateimethoden in [spezifischen Orten oder Klassen, falls zutreffend] auf async umgestellt.
2024-03-14 12:46:38 +01:00

168 lines
4.2 KiB
JavaScript

class Network {
/**
* Load envelope json data
* @param {any} envelopeKey
*/
async getEnvelope(envelopeKey) {
console.log("getEnvelope")
return this.getRequest(`/api/envelope/${envelopeKey}`)
.then(this.wrapJsonResponse.bind(this))
}
/**
* Save signature data to server
* @param {any} envelopeKey
* @param {any} documentId
* @param {any} json
*/
async postEnvelope(envelopeKey, documentId, json) {
console.log("postEnvelope")
return this.postRequest(`/api/envelope/${envelopeKey}?index=${documentId}`, json)
.then(this.wrapJsonResponse.bind(this))
}
/**
* Load document binary data
* @param {any} envelopeKey
* @param {any} documentId
*/
async getDocument(envelopeKey, documentId) {
console.log("getDocument", `/api/document/${envelopeKey}?index=${documentId}`)
return this.getRequest(`/api/document/${envelopeKey}?index=${documentId}`)
.then(this.wrapBinaryResponse.bind(this))
}
/**
* Tell the server that document has been seen
* @param {any} envelopeKey
*/
async openDocument(envelopeKey) {
console.log("openDocument")
return this.postRequest(`/api/document/${envelopeKey}`, {})
.then(this.wrapJsonResponse.bind(this))
}
/**
* Add CSRF Token to request headers
* @param {any} options
* @returns
*/
withCSRFToken(options) {
const token = getCSRFToken
let headers = options.headers
options.headers = {
...headers,
...token
}
return options
}
/**
* Fetches CSRF Token from page
* @returns
*/
getCSRFToken() {
const token = document.getElementsByName('__RequestVerificationToken')[0].value
return { 'X-XSRF-TOKEN': token }
}
/**
* Creates a GET HTTP request to `url`
* @param {any} url
*/
getRequest(url) {
const token = this.getCSRFToken()
const options = {
credentials: 'include',
method: 'GET',
headers: {
...token
}
}
return fetch(url, options)
}
/**
* Creates a POST HTTP request for url
* @param {any} url
* @param {any} json
* @returns
*/
postRequest(url, json) {
const token = this.getCSRFToken()
const options = {
credentials: 'include',
method: 'POST',
headers: {
...token,
'Content-Type': 'application/json; charset=utf-8'
},
body: JSON.stringify(json)
}
return fetch(url, options)
}
/**
* Reads and wraps a json response
* @param {any} response
* @returns
*/
async wrapJsonResponse(response) {
return await this.wrapResponse(
response,
async (res) => await res.json())
}
/**
* Reads and wraps a binary response
* @param {any} response
* @returns
*/
async wrapBinaryResponse(response) {
return await this.wrapResponse(
response,
async (res) => await res.arrayBuffer())
}
/**
* Wraps a fetch response depending on status code
* @param {any} response
* @param {any} responseHandler
* @returns
*/
async wrapResponse(response, responseHandler) {
let wrappedResponse
console.log("Handling response from", response.url)
console.log("Status", response.status)
console.log(response)
if (response.status === 200) {
const data = await responseHandler(response)
wrappedResponse = new WrappedResponse(data, null)
} else if (response.status === 403) {
const error = await response.json()
wrappedResponse = new WrappedResponse(null, error)
} else {
wrappedResponse = new WrappedResponse(null, null)
}
console.log("Wrapped response", wrappedResponse)
return wrappedResponse
}
}
class WrappedResponse {
constructor(data, error) {
this.data = data
this.error = error
this.fatal = (data === null && error === null)
}
}