mirror of
https://github.com/Kong/insomnia
synced 2024-11-08 14:49:53 +00:00
6ef9a46814
* Add support for multiple remote projects per Team (#6009) * update fetching of teams * create and delete remote projects * backend project sync using the new teamProjectId in the API * indicator * use team api to get organization data * handle logged out state * remove remote from duplicate modal * remaining insomnia fetch fixes * fix ts issues * fix ts log issue * fix ts error * fix ts update * fix tests * remove log * add types to insomniaFetch * named arguments in vcs --------- Co-authored-by: jackkav <jackkav@gmail.com> * Project Presence (#6079) * fix ts log issue * fix ts update * update fetching of teams * create and delete remote projects * real-time * update api changes * check for successful response * get user profile * cleanup * update fetch * update network status * fix for insomniaFetch new api * insomnia fetch from window * fix missing stat * fix project dropdown * update avatar * update presence when closing the app * update the presence every minute * cleanup presence * use eventsource and improve debugging * Cloud only projects (#6167) * Add support for multiple remote projects per Team (#6009) * update fetching of teams * create and delete remote projects * backend project sync using the new teamProjectId in the API * indicator * use team api to get organization data * handle logged out state * remove remote from duplicate modal * remaining insomnia fetch fixes * fix ts issues * fix ts log issue * fix ts error * fix ts update * fix tests * remove log * add types to insomniaFetch * named arguments in vcs --------- Co-authored-by: jackkav <jackkav@gmail.com> * login routes * cleanup logged in state * update organizations * fixes * update migration * auto init sync on workspaces without git * fix auto init sync * checkpoint * update import options in empty project pane * responsive styles * update package-lock * join an org in sidebar * readability improvements * move modals and root loader to org * cleanup root * expire session take 1 * cleanup default org id * fix ts issue --------- Co-authored-by: jackkav <jackkav@gmail.com> * Add Scratch Pad collection (#6221) * add scratchpad collection * filter scratchpad from cloud migration * disable sync for scratchpad * update settings for scratchpad * log in rename * check if user is logged in or has logged in before * use organization api * organizations api fixes * update urls * move modals to root * update org navbar links * lint fix * type-check * Add form for setting up the staging env * add autolinking * onboarding * remove default org id * staging urls * avatar styles * update urls * use display name for orgs * update settings modal with dev * proper project deletions * fix api calls perf * sidebar improvements * layout styles * disable tests for now * fix boolean * fix data migration * dev settings styles * test init * organization names * link styles * improve scratchpad banner styles * http colors * url bar styles * spinner styles * breadcrumbs styles * help and feedback links * settings to root * onboarding * fetch remote projects on org nav * update avatar styles * use name initials in avatars * don't allow to delete default organization project * add scratchpad checks * tests * workspace settings tabs types * export all workspaces * fix types and personal org * project permission checks * continue with sso * organization avatars * project presence avatars * fix privacy/terms links * add the no-wrap classname * update user name and email in the app * fix delete action * ai fetching * generate tests in sequence to help with rate limiting * wip testing * wip test * improve test and migration script * fix ts * local to cloud projects test * set local-to-cloud-projects.test as slow * fix e2e tests * update settings tests * update more apis that changed from teams -> organizations * simplify remote project migration * org.branding can be undefined * fix imports issue in sr * remove .only * remove unused gql query * fix onboarding height jump * trust some rnd and upload artifacts on failure * fix env vars replacement on prod * fix constant name * bring back checks * fix inso test * add temp changes * fix inconsistent response handling * handle bad auth code errors * show email when logged in * remove the concept of default_project * cleanup auth styles * fix: use scratchpad constants wherever needed and remove seed * fix sentry lint error * migrate with update * add scratch pad fixture and typing * refactor pushSnapshotOnInitialize to always work * remove console.log * remove account from preferences * improve trail-lines styles * fix project sidebar scroll issue * only create diff of projects * fix lint * sync * feat: add plan upgrading modal for git sync (#6516) * feat: add plan upgrading modal for git sync * feat: add plan upgrading modal to project git menu and grid menu * fix: use JSON.parse for getting flag value * update ask modal * remove git option from workspace settings --------- Co-authored-by: gatzjames <jamesgatzos@gmail.com> * sort projectswith default at top * create local copies of remotes * update presence exit update * renames * fix deleting/renaming projects with remoteId * remoteId instead of projectId * remote-collections * fix initializeProjectForTeam * fix missing parentId in remote projects * add missing billing api * add migration page and check for migrations * cleanup project sync logic * fix remote projects updating * add notes * fix backend-project test * fix: use features API for fetching feature list (#6538) * members -> collaborators * remove dev settings * use shouldRunMigrations in onboarding * fix empty pane styles * remove beforeUnload for presence * show expiry info * better error for upgrade in new project action * extend retry period * fallback and control revalidate * add pending indicator for switching organizations * fix exports (#6553) * Sync Organizations (#6551) * organization cache and updates * error handling in org sync * sort organizations * clean up sort * org sort and avatar fallback --------- Co-authored-by: jackkav <jackkav@gmail.com> * Presence updates (#6552) * use remoteId for presence * use project loader for the active project * fix in present users * logic clean * match remoteId checks --------- Co-authored-by: jackkav <jackkav@gmail.com> * add default color to loading indicator * fix redirect loop when there are no projects * scratchpad fallback on initial route load * re-enable ai check * update error in renameProject * db query to get projects in workspace * review fix * comments * remove initModelFrom magic * fix lint issue --------- Co-authored-by: jackkav <jackkav@gmail.com> Co-authored-by: Mark Kim <mark.kim@konghq.com> Co-authored-by: Filipe Freire <livrofubia@gmail.com> Co-authored-by: Hexxa <hexxa@outlook.com>
123 lines
3.7 KiB
TypeScript
123 lines
3.7 KiB
TypeScript
import crypto from 'node:crypto';
|
|
|
|
import express from 'express';
|
|
import { readFileSync } from 'fs';
|
|
import { createHandler } from 'graphql-http/lib/use/http';
|
|
import { createServer } from 'https';
|
|
import { join } from 'path';
|
|
|
|
import { basicAuthRouter } from './basic-auth';
|
|
import githubApi from './github-api';
|
|
import gitlabApi from './gitlab-api';
|
|
import { schema } from './graphql';
|
|
import { startGRPCServer } from './grpc';
|
|
import insomniaApi from './insomnia-api';
|
|
import { oauthRoutes } from './oauth';
|
|
import { startWebSocketServer } from './websocket';
|
|
|
|
const app = express();
|
|
const port = 4010;
|
|
const httpsPort = 4011;
|
|
const grpcPort = 50051;
|
|
|
|
app.get('/pets/:id', (req, res) => {
|
|
res.status(200).send({ id: req.params.id });
|
|
});
|
|
|
|
app.get('/builds/check/*', (_req, res) => {
|
|
res.status(200).send({
|
|
url: 'https://github.com/Kong/insomnia/releases/download/core@2023.5.6/Insomnia.Core-2023.5.6.zip',
|
|
name: '2099.1.0',
|
|
});
|
|
});
|
|
|
|
app.get('/sleep', (_req, res) => {
|
|
res.status(200).send({ sleep: true });
|
|
});
|
|
|
|
app.get('/cookies', (_req, res) => {
|
|
res
|
|
.status(200)
|
|
.header('content-type', 'text/plain')
|
|
.cookie('insomnia-test-cookie', 'value123')
|
|
.send(`${_req.headers['cookie']}`);
|
|
});
|
|
|
|
app.use('/file', express.static('fixtures/files'));
|
|
app.use('/auth/basic', basicAuthRouter);
|
|
|
|
githubApi(app);
|
|
gitlabApi(app);
|
|
insomniaApi(app);
|
|
|
|
app.get('/delay/seconds/:duration', (req, res) => {
|
|
const delaySec = Number.parseInt(req.params.duration || '2');
|
|
setTimeout(function () {
|
|
res.send(`Delayed by ${delaySec} seconds`);
|
|
}, delaySec * 1000);
|
|
});
|
|
|
|
app.use('/oidc', oauthRoutes(port));
|
|
|
|
app.get('/', (_req, res) => {
|
|
res.status(200).send();
|
|
});
|
|
|
|
app.all('/graphql', createHandler({ schema }));
|
|
|
|
app.use(express.json()); // Used to parse JSON bodies
|
|
|
|
// SSE routes
|
|
let subscribers: { id: string; response: express.Response }[] = [];
|
|
app.get('/events', (request, response) => {
|
|
const headers = {
|
|
'Content-Type': 'text/event-stream',
|
|
'Connection': 'keep-alive',
|
|
'Cache-Control': 'no-cache',
|
|
};
|
|
response.writeHead(200, headers);
|
|
const subscriberId = crypto.randomUUID();
|
|
const data = `data: ${JSON.stringify({ id: subscriberId })}\n\n`;
|
|
response.write(data);
|
|
const subscriber = {
|
|
id: subscriberId,
|
|
response,
|
|
};
|
|
subscribers.push(subscriber);
|
|
setInterval(() => {
|
|
// const id = subscriberId;
|
|
const data = JSON.stringify({ message: 'Time: ' + new Date().toISOString().slice(11, 19) });
|
|
// response.write('id: ' + id + '\n');
|
|
response.write('data: ' + data + '\n\n');
|
|
}, 1000);
|
|
request.on('close', () => {
|
|
console.log(`${subscriberId} Connection closed`);
|
|
subscribers = subscribers.filter(sub => sub.id !== subscriberId);
|
|
});
|
|
});
|
|
app.post('/send-event', (request, response) => {
|
|
// Requires middleware to parse JSON body
|
|
console.log('Received event', request.body);
|
|
subscribers.forEach(subscriber => subscriber.response.write(`data: ${JSON.stringify(request.body)}\n\n`));
|
|
response.json({ success: true });
|
|
});
|
|
|
|
startWebSocketServer(app.listen(port, () => {
|
|
console.log(`Listening at http://localhost:${port}`);
|
|
console.log(`Listening at ws://localhost:${port}`);
|
|
}));
|
|
|
|
startWebSocketServer(createServer({
|
|
cert: readFileSync(join(__dirname, '../fixtures/certificates/localhost.pem')),
|
|
ca: readFileSync(join(__dirname, '../fixtures/certificates/rootCA.pem')),
|
|
key: readFileSync(join(__dirname, '../fixtures/certificates/localhost-key.pem')),
|
|
// Only allow connections using valid client certificates
|
|
requestCert: true,
|
|
rejectUnauthorized: true,
|
|
}, app).listen(httpsPort, () => {
|
|
console.log(`Listening at https://localhost:${httpsPort}`);
|
|
console.log(`Listening at wss://localhost:${httpsPort}`);
|
|
}));
|
|
|
|
startGRPCServer(grpcPort);
|