|
1 | | -import express, { Express } from 'express' |
2 | | -import 'dotenv/config' |
3 | | -import { WorkOS, Directory, Group, User } from '@workos-inc/node' |
| 1 | +import express, { Application, Request, Response } from 'express' |
| 2 | +import { WorkOS, Directory, Group, User, Webhook } from '@workos-inc/node' |
| 3 | +import { List } from '@workos-inc/node/lib/common/interfaces/list.interface' |
4 | 4 | import { Server, Socket } from 'socket.io' |
5 | 5 | import morgan from 'morgan' |
6 | | -process.on('unhandledRejection', (reason, p) => { throw reason }); |
| 6 | +import 'dotenv/config' |
7 | 7 |
|
8 | | -const app: Express = express(); |
9 | | -const port = process.env.PORT || '8000' |
10 | | -const workos = new WorkOS(process.env.WORKOS_API_KEY) |
| 8 | +const app: Application = express() |
| 9 | +const port: string = process.env.PORT || '8000' |
| 10 | +const workos: WorkOS = new WorkOS(process.env.WORKOS_API_KEY) |
11 | 11 |
|
12 | 12 | app.use('/public', express.static('public')) |
13 | 13 | app.use(express.urlencoded({ extended: true })) |
14 | | -app.set('view engine', 'ejs'); |
| 14 | +app.set('view engine', 'ejs') |
15 | 15 | app.use(express.json()) |
16 | 16 | app.use(morgan('dev')) |
17 | 17 |
|
18 | | -const server = app.listen(port, () => { |
19 | | - console.log(`⚡️[server]: Server is running at https://localhost:${port}`); |
20 | | -}); |
| 18 | +process.on('unhandledRejection', (reason, p) => { throw reason }) |
| 19 | + |
| 20 | +const server = app.listen(port, (): void => { |
| 21 | + console.log(`⚡️[server]: Server is running at https://localhost:${port}`) |
| 22 | +}) |
21 | 23 |
|
22 | | -const io = new Server(server) |
| 24 | +const io: Server = new Server(server) |
23 | 25 |
|
24 | 26 | io.on('connection', (socket: Socket) => { |
25 | | - console.log('connected'); |
| 27 | + console.log('connected') |
26 | 28 |
|
27 | 29 | socket.on('disconnect', () => { |
28 | | - console.log('disconnected'); |
29 | | - }); |
30 | | -}); |
31 | | - |
32 | | -app.get("/", async (req, res) => { |
33 | | - const directories = await workos.directorySync.listDirectories(); |
34 | | - res.render("index", { |
35 | | - title: "Home", |
36 | | - directories: directories.data |
37 | | - }); |
38 | | -}); |
39 | | - |
40 | | -app.get('/directory/:id', async (req, res) => { |
41 | | - const directories = await workos.directorySync.listDirectories(); |
42 | | - const directory = await directories.data.filter((directory: Directory) => { |
43 | | - return directory.id == req.params.id |
44 | | - })[0] |
45 | | - res.render('directory.ejs', { |
46 | | - directory: directory, |
47 | | - title: "Directory" |
| 30 | + console.log('disconnected') |
48 | 31 | }) |
49 | 32 | }) |
50 | 33 |
|
51 | | -app.post('/webhooks', async (req, res) => { |
52 | | - const webhook = workos.webhooks.constructEvent({ |
53 | | - payload: req.body, |
54 | | - sigHeader: typeof req.headers['workos-signature'] === 'string' ? req.headers['workos-signature'] : "", |
55 | | - secret: process.env.WORKOS_WEBHOOK_SECRET !== undefined ? process.env.WORKOS_WEBHOOK_SECRET : "", |
56 | | - tolerance: 90000, |
| 34 | +app.get('/', async (req: Request, res: Response) => { |
| 35 | + let before: string | undefined = req.query.before ? req.query.before.toString() : undefined |
| 36 | + let after: string | undefined = req.query.after ? req.query.after.toString() : undefined |
| 37 | + |
| 38 | + const directories: List<Directory> = await workos.directorySync.listDirectories({ |
| 39 | + limit: 5, |
| 40 | + before: before, |
| 41 | + after: after, |
| 42 | + order: undefined |
57 | 43 | }) |
58 | | - io.emit('webhook event', { webhook }) |
59 | 44 |
|
60 | | - res.sendStatus(200) |
| 45 | + before = directories.list_metadata.before |
| 46 | + after = directories.list_metadata.after |
| 47 | + |
| 48 | + res.render('index', { |
| 49 | + title: 'Home', |
| 50 | + directories: directories.data, |
| 51 | + before: before, |
| 52 | + after: after |
| 53 | + }) |
61 | 54 | }) |
62 | 55 |
|
63 | | -app.get('/webhooks', async (req, res) => { |
64 | | - res.render('webhooks.ejs', { |
65 | | - title: "Webhooks" |
66 | | - }); |
67 | | -}); |
| 56 | +app.get('/directory/:id', async (req: Request, res: Response) => { |
| 57 | + const directories: List<Directory> = await workos.directorySync.listDirectories() |
| 58 | + const directory: Directory = directories.data.filter((directory: Directory) => { |
| 59 | + return directory.id == req.params.id |
| 60 | + })[0] |
68 | 61 |
|
69 | | -app.get('/directory/:id/usersgroups', async (req, res) => { |
70 | | - const directories = await workos.directorySync.listDirectories(); |
71 | | - const directory = await directories.data.filter((directory: Directory) => { |
| 62 | + res.render('directory.ejs', { |
| 63 | + directory: directory, |
| 64 | + title: 'Directory' |
| 65 | + }) |
| 66 | +}) |
| 67 | + |
| 68 | +app.get('/directory/:id/usersgroups', async (req: Request, res: Response) => { |
| 69 | + const directories: List<Directory> = await workos.directorySync.listDirectories() |
| 70 | + const directory: Directory = directories.data.filter((directory: Directory) => { |
72 | 71 | return directory.id == req.params.id |
73 | 72 | })[0] |
74 | | - const groups = await workos.directorySync.listGroups({ |
| 73 | + |
| 74 | + const groups: List<Group> = await workos.directorySync.listGroups({ |
75 | 75 | directory: req.params.id, |
76 | | - }); |
77 | | - const users = await workos.directorySync.listUsers({ |
| 76 | + }) |
| 77 | + |
| 78 | + const users: List<User> = await workos.directorySync.listUsers({ |
78 | 79 | directory: req.params.id, |
79 | | - }); |
| 80 | + }) |
80 | 81 |
|
81 | 82 | res.render('groups.ejs', { |
82 | 83 | groups: groups.data, |
83 | 84 | directory: directory, |
84 | 85 | users: users.data, |
85 | | - title: "Group & Users" |
| 86 | + title: 'Group & Users' |
86 | 87 | }) |
87 | 88 | }) |
88 | 89 |
|
89 | | -app.get('/directory/:id/group/:groupId', async (req, res) => { |
90 | | - const directories = await workos.directorySync.listDirectories(); |
91 | | - const directory = await directories.data.filter((directory: Directory) => { |
| 90 | +app.get('/directory/:id/group/:groupId', async (req: Request, res: Response) => { |
| 91 | + const directories: List<Directory> = await workos.directorySync.listDirectories() |
| 92 | + const directory: Directory = directories.data.filter((directory: Directory) => { |
92 | 93 | return directory.id == req.params.id |
93 | 94 | })[0] |
94 | | - const groups = await workos.directorySync.listGroups({ |
| 95 | + |
| 96 | + const groups: List<Group> = await workos.directorySync.listGroups({ |
95 | 97 | directory: req.params.id, |
96 | | - }); |
97 | | - const group = await groups.data.filter((group: Group) => { |
| 98 | + }) |
| 99 | + |
| 100 | + const group: Group = groups.data.filter((group: Group) => { |
98 | 101 | return group.id == req.params.groupId |
99 | 102 | })[0] |
| 103 | + |
100 | 104 | res.render('group.ejs', { |
101 | 105 | directory: directory, |
102 | | - title: "Directory", |
| 106 | + title: 'Directory', |
103 | 107 | group: JSON.stringify(group, null, 2), |
104 | 108 | rawGroup: group |
105 | 109 | }) |
106 | 110 | }) |
107 | 111 |
|
108 | | -app.get('/directory/:id/user/:userId', async (req, res) => { |
109 | | - const directories = await workos.directorySync.listDirectories(); |
110 | | - const directory = await directories.data.filter((directory: Directory) => { |
| 112 | +app.get('/directory/:id/user/:userId', async (req: Request, res: Response) => { |
| 113 | + const directories: List<Directory> = await workos.directorySync.listDirectories() |
| 114 | + const directory: Directory = directories.data.filter((directory: Directory) => { |
111 | 115 | return directory.id == req.params.id |
112 | 116 | })[0] |
113 | | - const users = await workos.directorySync.listUsers({ |
| 117 | + |
| 118 | + const users: List<User> = await workos.directorySync.listUsers({ |
114 | 119 | directory: req.params.id, |
115 | | - }); |
116 | | - const user = await users.data.filter((user: User) => { |
| 120 | + }) |
| 121 | + |
| 122 | + const user: User = users.data.filter((user: User) => { |
117 | 123 | return user.id == req.params.userId |
118 | 124 | })[0] |
| 125 | + |
119 | 126 | res.render('user', { |
120 | 127 | directory: directory, |
121 | | - title: "Directory", |
| 128 | + title: 'Directory', |
122 | 129 | user: JSON.stringify(user, null, 2), |
123 | 130 | rawUser: user |
124 | 131 | }) |
125 | 132 | }) |
| 133 | + |
| 134 | +app.post('/webhooks', async (req: Request, res: Response) => { |
| 135 | + const webhook: Webhook = workos.webhooks.constructEvent({ |
| 136 | + payload: req.body, |
| 137 | + sigHeader: typeof req.headers['workos-signature'] === 'string' ? req.headers['workos-signature'] : '', |
| 138 | + secret: process.env.WORKOS_WEBHOOK_SECRET !== undefined ? process.env.WORKOS_WEBHOOK_SECRET : '', |
| 139 | + tolerance: 90000, |
| 140 | + }) |
| 141 | + |
| 142 | + io.emit('webhook event', { webhook }) |
| 143 | + |
| 144 | + res.sendStatus(200) |
| 145 | +}) |
| 146 | + |
| 147 | +app.get('/webhooks', async (req: Request, res: Response) => { |
| 148 | + res.render('webhooks.ejs', { |
| 149 | + title: 'Webhooks' |
| 150 | + }) |
| 151 | +}) |
0 commit comments