UNPKG

@hello.nrfcloud.com/proto

Version:

Documents the communication protocol between the hello.nrfcloud.com backend and the web application

352 lines (351 loc) 14.5 kB
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _async_to_generator(fn) { return function() { var self = this, args = arguments; return new Promise(function(resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _define_property(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _object_spread(target) { for(var i = 1; i < arguments.length; i++){ var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === "function") { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function(key) { _define_property(target, key, source[key]); }); } return target; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function(sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _object_spread_props(target, source) { source = source != null ? source : {}; if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function(key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function _ts_generator(thisArg, body) { var f, y, t, _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function(v) { return step([ n, v ]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while(g && (g = 0, op[0] && (_ = 0)), _)try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [ op[0] & 2, t.value ]; switch(op[0]){ case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [ 0 ]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [ 6, e ]; y = 0; } finally{ f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } } import { validateWithTypeBox } from '@hello.nrfcloud.com/proto'; import { Context } from '@hello.nrfcloud.com/proto/hello'; export var typedFetch = function(param) { var responseBodySchema = param.responseBodySchema, requestBodySchema = param.requestBodySchema, fetchImplementation = param.fetchImplementation; var validateResponseBody = validateWithTypeBox(responseBodySchema); var validateRequestBody = requestBodySchema !== undefined ? validateWithTypeBox(requestBodySchema) : undefined; return function(url, body, init) { return _async_to_generator(function() { var maybeValidRequestBody, res, hasBody, headers, _init_method, err, _res_headers_get, hasContent, _res_headers_get1, _res_headers_get_includes, _tmp, _tmp1, _tmp2, _, _tmp3, _tmp4, responseBody, _res_headers_get2, _res_headers_get_includes1, isJSON, maybeValidResponseBody; return _ts_generator(this, function(_state) { switch(_state.label){ case 0: if (body !== undefined && validateRequestBody !== undefined) { maybeValidRequestBody = validateRequestBody(body); if ('errors' in maybeValidRequestBody) { return [ 2, { error: { '@context': Context.problemDetail.toString(), title: 'Request body validation failed', detail: JSON.stringify({ body: body, errors: maybeValidRequestBody.errors }) } } ]; } } res = undefined; _state.label = 1; case 1: _state.trys.push([ 1, 3, , 4 ]); hasBody = body !== undefined; headers = new Headers(init === null || init === void 0 ? void 0 : init.headers); if (hasBody) headers.set('content-type', 'application/json; charset=utf-8'); return [ 4, (fetchImplementation !== null && fetchImplementation !== void 0 ? fetchImplementation : fetch)(url, _object_spread_props(_object_spread({}, init !== null && init !== void 0 ? init : {}), { method: (_init_method = init === null || init === void 0 ? void 0 : init.method) !== null && _init_method !== void 0 ? _init_method : hasBody ? 'POST' : 'GET', headers: headers, body: body !== undefined ? JSON.stringify(body) : undefined })) ]; case 2: res = _state.sent(); return [ 3, 4 ]; case 3: err = _state.sent(); return [ 2, { error: { '@context': Context.problemDetail.toString(), title: err.message } } ]; case 4: hasContent = parseInt((_res_headers_get = res.headers.get('content-length')) !== null && _res_headers_get !== void 0 ? _res_headers_get : '0', 10) > 0; if (!!res.ok) return [ 3, 10 ]; if (!((_res_headers_get_includes = (_res_headers_get1 = res.headers.get('content-type')) === null || _res_headers_get1 === void 0 ? void 0 : _res_headers_get1.includes('application/problem+json')) !== null && _res_headers_get_includes !== void 0 ? _res_headers_get_includes : false)) return [ 3, 6 ]; _tmp = {}; return [ 4, res.json() ]; case 5: return [ 2, (_tmp.error = _state.sent(), _tmp) ]; case 6: _tmp1 = {}; _tmp2 = { '@context': Context.problemDetail.toString(), title: "Request failed (".concat(res.status, ")") }; _ = JSON.stringify; _tmp3 = {}; if (!hasContent) return [ 3, 8 ]; return [ 4, res.text() ]; case 7: _tmp4 = _state.sent(); return [ 3, 9 ]; case 8: _tmp4 = undefined; _state.label = 9; case 9: return [ 2, (_tmp1.error = (_tmp2.detail = _.apply(JSON, [ (_tmp3.body = _tmp4, _tmp3) ]), _tmp2), _tmp1) ]; case 10: responseBody = undefined; if (!hasContent) return [ 3, 12 ]; return [ 4, res.text() ]; case 11: responseBody = _state.sent(); isJSON = (_res_headers_get_includes1 = (_res_headers_get2 = res.headers.get('content-type')) === null || _res_headers_get2 === void 0 ? void 0 : _res_headers_get2.includes('application/json')) !== null && _res_headers_get_includes1 !== void 0 ? _res_headers_get_includes1 : false; if (isJSON) { try { responseBody = JSON.parse(responseBody); } catch (e) { return [ 2, { error: { '@context': Context.problemDetail.toString(), title: "Failed to parse response as JSON!", detail: JSON.stringify({ body: responseBody }) } } ]; } } _state.label = 12; case 12: maybeValidResponseBody = validateResponseBody(responseBody); if ('errors' in maybeValidResponseBody) { return [ 2, { error: { '@context': Context.problemDetail.toString(), title: 'Response body validation failed', detail: JSON.stringify({ body: responseBody, errors: maybeValidResponseBody.errors }) } } ]; } return [ 2, { result: responseBody } ]; } }); })(); }; };