@namcaodev/postman-codegen
Version:
Auto generate all file typescript, query options, mutation options of tanstack query from postman json
115 lines (114 loc) • 5.32 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());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.customFetch = exports.RefreshTokenError = exports.UnauthenticatedError = void 0;
const access_token_1 = require("./access-token");
class UnauthenticatedError extends Error {
constructor() {
super(...arguments);
this.name = "UnauthenticatedError";
}
}
exports.UnauthenticatedError = UnauthenticatedError;
class RefreshTokenError extends Error {
constructor() {
super(...arguments);
this.name = "RefreshTokenError";
}
}
exports.RefreshTokenError = RefreshTokenError;
const API_URL = "https://example.com";
const REFRESH_TOKEN_URL = "https://example.com/api/v2/refresh_token";
const BASE_HEADERS = {
headers: {
"Content-Type": "application/json",
},
};
const serializeBody = (body) => JSON.stringify(body);
const getUrl = (url) => {
if (url.startsWith("/")) {
return API_URL + url;
}
return API_URL + "/" + url;
};
const getOptions = (options, accessToken) => {
if (!options) {
return {
headers: Object.assign(Object.assign({}, BASE_HEADERS.headers), { Authorization: accessToken ? "Bearer " + accessToken : "" }),
};
}
return Object.assign(Object.assign({}, options), { headers: Object.assign(Object.assign(Object.assign({}, BASE_HEADERS.headers), options.headers), { Authorization: accessToken ? "Bearer " + accessToken : "" }) });
};
const getOptionsByMethod = (params) => {
const { method } = params;
const accessToken = (0, access_token_1.getAccessToken)();
switch (method) {
case "GET" /* RequestMethod.GET */:
return getOptions(params === null || params === void 0 ? void 0 : params.options, accessToken);
case "POST" /* RequestMethod.POST */:
return getOptions(Object.assign(Object.assign({}, params === null || params === void 0 ? void 0 : params.options), { method: method, body: (params === null || params === void 0 ? void 0 : params.body) ? serializeBody(params === null || params === void 0 ? void 0 : params.body) : "" }), accessToken);
case "PATCH" /* RequestMethod.PATCH */:
return getOptions(Object.assign(Object.assign({}, params === null || params === void 0 ? void 0 : params.options), { method: method, body: (params === null || params === void 0 ? void 0 : params.body) ? serializeBody(params === null || params === void 0 ? void 0 : params.body) : "" }), accessToken);
case "PUT" /* RequestMethod.PUT */:
return getOptions(Object.assign(Object.assign({}, params === null || params === void 0 ? void 0 : params.options), { method: method, body: (params === null || params === void 0 ? void 0 : params.body) ? serializeBody(params === null || params === void 0 ? void 0 : params.body) : "" }), accessToken);
case "DELETE" /* RequestMethod.DELETE */:
return getOptions(Object.assign(Object.assign({}, params === null || params === void 0 ? void 0 : params.options), { method: "DELETE" }), accessToken);
}
};
const refreshToken = () => __awaiter(void 0, void 0, void 0, function* () {
return yield fetch(REFRESH_TOKEN_URL, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
credentials: "include",
});
});
let refreshPromise = null;
function retryFetching(_a) {
return __awaiter(this, arguments, void 0, function* ({ fetcher, }) {
if (!refreshPromise) {
refreshPromise = refreshToken();
}
const refreshRes = yield (refreshPromise === null || refreshPromise === void 0 ? void 0 : refreshPromise.finally(() => {
refreshPromise = null;
}));
if (!refreshRes.ok) {
throw new RefreshTokenError("Refresh token failed in failed");
}
try {
return yield fetcher();
}
catch (error) {
throw error;
}
});
}
const fetchingWithJson = (params) => __awaiter(void 0, void 0, void 0, function* () {
const res = yield fetch(getUrl(params.url), getOptionsByMethod(params));
return yield res.json();
});
const customFetch = (params) => __awaiter(void 0, void 0, void 0, function* () {
try {
return yield fetchingWithJson(params);
}
catch (error) {
const parsedError = error;
if (parsedError instanceof UnauthenticatedError) {
return yield retryFetching({
fetcher: () => fetchingWithJson(params),
});
}
throw parsedError;
}
});
exports.customFetch = customFetch;
exports.default = exports.customFetch;