a2r
Version:
A2R Framework
72 lines (69 loc) • 2.33 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const getMethodWrapper = () => `const methodWrapper = (method: string, ...args: any[]): Promise<any> => {
// console.log('methodWrapper', method, [...args]);
if (!isClient()) {
const apiPath = method.split('.').join('/');
const params = args.slice();
const ctx = (params.pop() as unknown) as GetServerSidePropsContext<ParsedUrlQuery>;
let hostName = ctx?.req?.headers?.host;
const protocol = domain && domain.includes('localhost') ? 'http' : 'https';
if (hostName?.includes('localhost') || domain) {
hostName = domain;
}
const basicEndpoint = \`\${protocol}://\${hostName}\${basePath}/a2r/\${apiPath}\`;
const clusterEndpoint = \`http://\${clusterUrl}/a2r/\${apiPath}\`;
const url = clusterUrl ? clusterEndpoint : basicEndpoint;
// console.log('on server side, calling REST API method', url);
return new Promise<any>((resolve, reject): void => {
const agent = new https.Agent({
rejectUnauthorized: !ignoreUnauthorized,
})
axios({
method: 'post',
url,
httpsAgent: agent,
headers: { ...getHeaders(ctx), a2rHost: hostName || '' },
data: {
params,
},
})
.then((response) => {
resolve(response.data);
})
.catch(reject);
});
}
return new Promise<any>((resolve, reject): void => {
// console.log('socket connected?', socket && socket.connected);
if (socket) {
if (socket.disconnected) {
// console.log('socket disconnected, connecting');
socket.connect();
}
const id = generateId();
// console.log('id', id);
socket.on(id, (res: SocketMessage): void => {
socket.off(id);
if (res.o) {
resolve(res.d);
} else {
const error = new Error(res.e);
error.stack = res.s;
reject(error);
}
});
const call: MethodCall = {
method,
id,
params: args,
};
// console.log('before emit, call:', call);
socket.emit('*', call);
} else {
console.error('No client socket available!');
reject(new Error('No client socket available!'));
}
});
};`;
exports.default = getMethodWrapper;