UNPKG

@sphereon/openid4vci-client

Version:

OpenID for Verifiable Credential Issuance (OpenID4VCI) client

92 lines 9.77 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.isValidURL = exports.post = exports.formPost = exports.getJson = void 0; const cross_fetch_1 = require("cross-fetch"); const debug_1 = __importDefault(require("debug")); const types_1 = require("../types"); const debug = (0, debug_1.default)('sphereon:openid4vci:http'); const getJson = (URL, opts) => __awaiter(void 0, void 0, void 0, function* () { return yield openIdFetch(URL, undefined, Object.assign({ method: 'GET' }, opts)); }); exports.getJson = getJson; const formPost = (url, body, opts) => __awaiter(void 0, void 0, void 0, function* () { return yield (0, exports.post)(url, body, (opts === null || opts === void 0 ? void 0 : opts.contentType) ? Object.assign({}, opts) : Object.assign({ contentType: types_1.Encoding.FORM_URL_ENCODED }, opts)); }); exports.formPost = formPost; const post = (url, body, opts) => __awaiter(void 0, void 0, void 0, function* () { return yield openIdFetch(url, body, Object.assign({ method: 'POST' }, opts)); }); exports.post = post; const openIdFetch = (url, body, opts) => __awaiter(void 0, void 0, void 0, function* () { const headers = (opts === null || opts === void 0 ? void 0 : opts.customHeaders) ? opts.customHeaders : {}; if (opts === null || opts === void 0 ? void 0 : opts.bearerToken) { headers['Authorization'] = `Bearer ${opts.bearerToken}`; } const method = (opts === null || opts === void 0 ? void 0 : opts.method) ? opts.method : body ? 'POST' : 'GET'; const accept = (opts === null || opts === void 0 ? void 0 : opts.accept) ? opts.accept : 'application/json'; headers['Accept'] = accept; if (headers['Content-Type']) { if ((opts === null || opts === void 0 ? void 0 : opts.contentType) && opts.contentType !== headers['Content-Type']) { throw Error(`Mismatch in content-types from custom headers (${headers['Content-Type']}) and supplied content type option (${opts.contentType})`); } } else { if (opts === null || opts === void 0 ? void 0 : opts.contentType) { headers['Content-Type'] = opts.contentType; } else if (method !== 'GET') { headers['Content-Type'] = 'application/json'; } } const payload = { method, headers, body, }; debug(`START fetching url: ${url}`); if (body) { debug(`Body:\r\n${JSON.stringify(body)}`); } debug(`Headers:\r\n${JSON.stringify(payload.headers)}`); const origResponse = yield (0, cross_fetch_1.fetch)(url, payload); const isJSONResponse = accept === 'application/json' || origResponse.headers['Content-Type'] === 'application/json'; const success = origResponse && origResponse.status >= 200 && origResponse.status < 400; const responseText = yield origResponse.text(); const responseBody = isJSONResponse ? JSON.parse(responseText) : responseText; debug(`${success ? 'success' : 'error'} status: ${origResponse.status}, body:\r\n${JSON.stringify(responseBody)}`); if (!success && (opts === null || opts === void 0 ? void 0 : opts.exceptionOnHttpErrorStatus)) { const error = JSON.stringify(responseBody); throw new Error(error === '{}' ? '{"error": "not found"}' : error); } debug(`END fetching url: ${url}`); return { origResponse, successBody: success ? responseBody : undefined, errorBody: !success ? responseBody : undefined, }; }); const isValidURL = (url) => { const urlPattern = new RegExp('^(https?:\\/\\/)' + // validate protocol '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' + // validate domain name '((localhost))|' + // validate OR localhost '((\\d{1,3}\\.){3}\\d{1,3}))' + // validate OR ip (v4) address '(\\:\\d+)?(\\/[-a-z\\d%_.~+:]*)*' + // validate port and path '(\\?[;&a-z\\d%_.~+=-]*)?' + // validate query string '(\\#[-a-z\\d_]*)?$', // validate fragment locator 'i'); return !!urlPattern.test(url); }; exports.isValidURL = isValidURL; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSHR0cFV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL2Z1bmN0aW9ucy9IdHRwVXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkNBQW9DO0FBQ3BDLGtEQUEwQjtBQUUxQixvQ0FBb0Q7QUFFcEQsTUFBTSxLQUFLLEdBQUcsSUFBQSxlQUFLLEVBQUMsMEJBQTBCLENBQUMsQ0FBQztBQUV6QyxNQUFNLE9BQU8sR0FBRyxDQUNyQixHQUFXLEVBQ1gsSUFBeUksRUFDN0csRUFBRTtJQUM5QixPQUFPLE1BQU0sV0FBVyxDQUFDLEdBQUcsRUFBRSxTQUFTLGtCQUFJLE1BQU0sRUFBRSxLQUFLLElBQUssSUFBSSxFQUFHLENBQUM7QUFDdkUsQ0FBQyxDQUFBLENBQUM7QUFMVyxRQUFBLE9BQU8sV0FLbEI7QUFFSyxNQUFNLFFBQVEsR0FBRyxDQUN0QixHQUFXLEVBQ1gsSUFBYyxFQUNkLElBQXlJLEVBQzdHLEVBQUU7SUFDOUIsT0FBTyxNQUFNLElBQUEsWUFBSSxFQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsV0FBVyxFQUFDLENBQUMsbUJBQU0sSUFBSSxFQUFHLENBQUMsaUJBQUcsV0FBVyxFQUFFLGdCQUFRLENBQUMsZ0JBQWdCLElBQUssSUFBSSxDQUFFLENBQUMsQ0FBQztBQUN0SCxDQUFDLENBQUEsQ0FBQztBQU5XLFFBQUEsUUFBUSxZQU1uQjtBQUVLLE1BQU0sSUFBSSxHQUFHLENBQ2xCLEdBQVcsRUFDWCxJQUFlLEVBQ2YsSUFBeUksRUFDN0csRUFBRTtJQUM5QixPQUFPLE1BQU0sV0FBVyxDQUFDLEdBQUcsRUFBRSxJQUFJLGtCQUFJLE1BQU0sRUFBRSxNQUFNLElBQUssSUFBSSxFQUFHLENBQUM7QUFDbkUsQ0FBQyxDQUFBLENBQUM7QUFOVyxRQUFBLElBQUksUUFNZjtBQUVGLE1BQU0sV0FBVyxH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