@sphereon/openid4vci-client
Version:
OpenID for Verifiable Credential Issuance (OpenID4VCI) client
92 lines • 9.77 kB
JavaScript
;
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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