workos 0.12.0-beta.1 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -4
- package/dist/bin.js +4 -2
- package/dist/bin.js.map +1 -1
- package/dist/commands/debug.js +0 -1
- package/dist/commands/debug.js.map +1 -1
- package/dist/commands/login.js +0 -4
- package/dist/commands/login.js.map +1 -1
- package/dist/emulate/core/id.d.ts +16 -1
- package/dist/emulate/core/id.js +16 -1
- package/dist/emulate/core/id.js.map +1 -1
- package/dist/emulate/core/index.d.ts +1 -1
- package/dist/emulate/core/index.js +1 -1
- package/dist/emulate/core/index.js.map +1 -1
- package/dist/emulate/core/middleware/auth.d.ts +1 -4
- package/dist/emulate/core/middleware/auth.js +7 -18
- package/dist/emulate/core/middleware/auth.js.map +1 -1
- package/dist/emulate/core/pagination.d.ts +6 -0
- package/dist/emulate/core/pagination.js +9 -1
- package/dist/emulate/core/pagination.js.map +1 -1
- package/dist/emulate/core/server.js +20 -46
- package/dist/emulate/core/server.js.map +1 -1
- package/dist/emulate/core/store.d.ts +2 -0
- package/dist/emulate/core/store.js +22 -1
- package/dist/emulate/core/store.js.map +1 -1
- package/dist/emulate/workos/constants.d.ts +56 -0
- package/dist/emulate/workos/constants.js +56 -0
- package/dist/emulate/workos/constants.js.map +1 -0
- package/dist/emulate/workos/entities.js.map +1 -1
- package/dist/emulate/workos/event-bus.d.ts +6 -1
- package/dist/emulate/workos/event-bus.js +33 -8
- package/dist/emulate/workos/event-bus.js.map +1 -1
- package/dist/emulate/workos/helpers.d.ts +17 -8
- package/dist/emulate/workos/helpers.js +61 -368
- package/dist/emulate/workos/helpers.js.map +1 -1
- package/dist/emulate/workos/index.js +42 -39
- package/dist/emulate/workos/index.js.map +1 -1
- package/dist/emulate/workos/role-helpers.d.ts +21 -0
- package/dist/emulate/workos/role-helpers.js +130 -0
- package/dist/emulate/workos/role-helpers.js.map +1 -0
- package/dist/emulate/workos/routes/api-keys.js +5 -8
- package/dist/emulate/workos/routes/api-keys.js.map +1 -1
- package/dist/emulate/workos/routes/audit-logs.js +6 -9
- package/dist/emulate/workos/routes/audit-logs.js.map +1 -1
- package/dist/emulate/workos/routes/auth.js +7 -6
- package/dist/emulate/workos/routes/auth.js.map +1 -1
- package/dist/emulate/workos/routes/authorization-checks.js +5 -17
- package/dist/emulate/workos/routes/authorization-checks.js.map +1 -1
- package/dist/emulate/workos/routes/authorization-org-roles.js +29 -171
- package/dist/emulate/workos/routes/authorization-org-roles.js.map +1 -1
- package/dist/emulate/workos/routes/authorization-permissions.js +5 -16
- package/dist/emulate/workos/routes/authorization-permissions.js.map +1 -1
- package/dist/emulate/workos/routes/authorization-resources.js +4 -15
- package/dist/emulate/workos/routes/authorization-resources.js.map +1 -1
- package/dist/emulate/workos/routes/authorization-roles.d.ts +1 -1
- package/dist/emulate/workos/routes/authorization-roles.js +9 -132
- package/dist/emulate/workos/routes/authorization-roles.js.map +1 -1
- package/dist/emulate/workos/routes/config.js +3 -2
- package/dist/emulate/workos/routes/config.js.map +1 -1
- package/dist/emulate/workos/routes/connect.js +3 -7
- package/dist/emulate/workos/routes/connect.js.map +1 -1
- package/dist/emulate/workos/routes/connections.js +3 -7
- package/dist/emulate/workos/routes/connections.js.map +1 -1
- package/dist/emulate/workos/routes/directories.js +7 -23
- package/dist/emulate/workos/routes/directories.js.map +1 -1
- package/dist/emulate/workos/routes/events.js +3 -6
- package/dist/emulate/workos/routes/events.js.map +1 -1
- package/dist/emulate/workos/routes/feature-flags.js +20 -48
- package/dist/emulate/workos/routes/feature-flags.js.map +1 -1
- package/dist/emulate/workos/routes/invitations.js +10 -13
- package/dist/emulate/workos/routes/invitations.js.map +1 -1
- package/dist/emulate/workos/routes/memberships.js +3 -7
- package/dist/emulate/workos/routes/memberships.js.map +1 -1
- package/dist/emulate/workos/routes/organizations.js +13 -15
- package/dist/emulate/workos/routes/organizations.js.map +1 -1
- package/dist/emulate/workos/routes/pipes.js +3 -7
- package/dist/emulate/workos/routes/pipes.js.map +1 -1
- package/dist/emulate/workos/routes/radar.js +3 -7
- package/dist/emulate/workos/routes/radar.js.map +1 -1
- package/dist/emulate/workos/routes/sso.js +7 -6
- package/dist/emulate/workos/routes/sso.js.map +1 -1
- package/dist/emulate/workos/routes/users.js +3 -7
- package/dist/emulate/workos/routes/users.js.map +1 -1
- package/dist/emulate/workos/routes/webhook-endpoints.js +3 -7
- package/dist/emulate/workos/routes/webhook-endpoints.js.map +1 -1
- package/dist/emulate/workos/store.js +68 -59
- package/dist/emulate/workos/store.js.map +1 -1
- package/dist/lib/run-with-core.js +0 -3
- package/dist/lib/run-with-core.js.map +1 -1
- package/dist/lib/settings.js +1 -1
- package/dist/lib/settings.js.map +1 -1
- package/dist/utils/help-json.js +1 -23
- package/dist/utils/help-json.js.map +1 -1
- package/dist/utils/register-subcommand.d.ts +5 -2
- package/dist/utils/register-subcommand.js +16 -19
- package/dist/utils/register-subcommand.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,7 +1,24 @@
|
|
|
1
1
|
import { randomBytes, createHash, createCipheriv } from 'node:crypto';
|
|
2
2
|
import { WorkOSApiError } from '../core/index.js';
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
const INTERNAL_FIELDS = new Set(['password_hash', 'code_challenge', 'code_challenge_method']);
|
|
4
|
+
export function formatEntity(entity, opts) {
|
|
5
|
+
const exclude = opts?.exclude ?? INTERNAL_FIELDS;
|
|
6
|
+
const result = {};
|
|
7
|
+
for (const [key, value] of Object.entries(entity)) {
|
|
8
|
+
if (!exclude.has(key))
|
|
9
|
+
result[key] = value;
|
|
10
|
+
}
|
|
11
|
+
return result;
|
|
12
|
+
}
|
|
13
|
+
export function formatListResponse(result, formatter) {
|
|
14
|
+
return {
|
|
15
|
+
object: 'list',
|
|
16
|
+
data: result.data.map(formatter),
|
|
17
|
+
list_metadata: result.list_metadata,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export function formatOrganization(org, ws, opts) {
|
|
21
|
+
const domains = (opts?.domains ?? ws.organizationDomains.findBy('organization_id', org.id)).map(formatDomain);
|
|
5
22
|
return {
|
|
6
23
|
object: 'organization',
|
|
7
24
|
id: org.id,
|
|
@@ -15,120 +32,32 @@ export function formatOrganization(org, ws) {
|
|
|
15
32
|
};
|
|
16
33
|
}
|
|
17
34
|
export function formatDomain(domain) {
|
|
18
|
-
return
|
|
19
|
-
object: 'organization_domain',
|
|
20
|
-
id: domain.id,
|
|
21
|
-
organization_id: domain.organization_id,
|
|
22
|
-
domain: domain.domain,
|
|
23
|
-
state: domain.state,
|
|
24
|
-
verification_strategy: domain.verification_strategy,
|
|
25
|
-
verification_token: domain.verification_token,
|
|
26
|
-
verification_prefix: domain.verification_prefix,
|
|
27
|
-
created_at: domain.created_at,
|
|
28
|
-
updated_at: domain.updated_at,
|
|
29
|
-
};
|
|
35
|
+
return formatEntity(domain);
|
|
30
36
|
}
|
|
31
37
|
export function formatMembership(m) {
|
|
32
|
-
return
|
|
33
|
-
object: 'organization_membership',
|
|
34
|
-
id: m.id,
|
|
35
|
-
organization_id: m.organization_id,
|
|
36
|
-
user_id: m.user_id,
|
|
37
|
-
role: m.role,
|
|
38
|
-
status: m.status,
|
|
39
|
-
external_id: m.external_id,
|
|
40
|
-
metadata: m.metadata,
|
|
41
|
-
created_at: m.created_at,
|
|
42
|
-
updated_at: m.updated_at,
|
|
43
|
-
};
|
|
38
|
+
return formatEntity(m);
|
|
44
39
|
}
|
|
40
|
+
const USER_EXCLUDE = new Set([...INTERNAL_FIELDS, 'impersonator']);
|
|
45
41
|
export function formatUser(user) {
|
|
46
|
-
return {
|
|
47
|
-
object: 'user',
|
|
48
|
-
id: user.id,
|
|
49
|
-
email: user.email,
|
|
50
|
-
first_name: user.first_name,
|
|
51
|
-
last_name: user.last_name,
|
|
52
|
-
email_verified: user.email_verified,
|
|
53
|
-
profile_picture_url: user.profile_picture_url,
|
|
54
|
-
last_sign_in_at: user.last_sign_in_at,
|
|
55
|
-
external_id: user.external_id,
|
|
56
|
-
metadata: user.metadata,
|
|
57
|
-
locale: user.locale,
|
|
58
|
-
created_at: user.created_at,
|
|
59
|
-
updated_at: user.updated_at,
|
|
60
|
-
};
|
|
42
|
+
return formatEntity(user, { exclude: USER_EXCLUDE });
|
|
61
43
|
}
|
|
62
44
|
export function formatSession(s) {
|
|
63
|
-
return
|
|
64
|
-
object: 'session',
|
|
65
|
-
id: s.id,
|
|
66
|
-
user_id: s.user_id,
|
|
67
|
-
organization_id: s.organization_id,
|
|
68
|
-
ip_address: s.ip_address,
|
|
69
|
-
user_agent: s.user_agent,
|
|
70
|
-
created_at: s.created_at,
|
|
71
|
-
updated_at: s.updated_at,
|
|
72
|
-
};
|
|
45
|
+
return formatEntity(s);
|
|
73
46
|
}
|
|
74
47
|
export function formatEmailVerification(ev) {
|
|
75
|
-
return
|
|
76
|
-
object: 'email_verification',
|
|
77
|
-
id: ev.id,
|
|
78
|
-
user_id: ev.user_id,
|
|
79
|
-
email: ev.email,
|
|
80
|
-
code: ev.code,
|
|
81
|
-
expires_at: ev.expires_at,
|
|
82
|
-
created_at: ev.created_at,
|
|
83
|
-
updated_at: ev.updated_at,
|
|
84
|
-
};
|
|
48
|
+
return formatEntity(ev);
|
|
85
49
|
}
|
|
86
50
|
export function formatPasswordReset(pr) {
|
|
87
|
-
return
|
|
88
|
-
object: 'password_reset',
|
|
89
|
-
id: pr.id,
|
|
90
|
-
user_id: pr.user_id,
|
|
91
|
-
email: pr.email,
|
|
92
|
-
token: pr.token,
|
|
93
|
-
expires_at: pr.expires_at,
|
|
94
|
-
created_at: pr.created_at,
|
|
95
|
-
updated_at: pr.updated_at,
|
|
96
|
-
};
|
|
51
|
+
return formatEntity(pr);
|
|
97
52
|
}
|
|
98
53
|
export function formatMagicAuth(ma) {
|
|
99
|
-
return
|
|
100
|
-
object: 'magic_auth',
|
|
101
|
-
id: ma.id,
|
|
102
|
-
user_id: ma.user_id,
|
|
103
|
-
email: ma.email,
|
|
104
|
-
code: ma.code,
|
|
105
|
-
expires_at: ma.expires_at,
|
|
106
|
-
created_at: ma.created_at,
|
|
107
|
-
updated_at: ma.updated_at,
|
|
108
|
-
};
|
|
54
|
+
return formatEntity(ma);
|
|
109
55
|
}
|
|
110
56
|
export function formatAuthFactor(f) {
|
|
111
|
-
return
|
|
112
|
-
object: 'authentication_factor',
|
|
113
|
-
id: f.id,
|
|
114
|
-
user_id: f.user_id,
|
|
115
|
-
type: f.type,
|
|
116
|
-
totp: f.totp,
|
|
117
|
-
created_at: f.created_at,
|
|
118
|
-
updated_at: f.updated_at,
|
|
119
|
-
};
|
|
57
|
+
return formatEntity(f);
|
|
120
58
|
}
|
|
121
59
|
export function formatIdentity(i) {
|
|
122
|
-
return
|
|
123
|
-
object: 'identity',
|
|
124
|
-
id: i.id,
|
|
125
|
-
user_id: i.user_id,
|
|
126
|
-
provider: i.provider,
|
|
127
|
-
provider_id: i.provider_id,
|
|
128
|
-
type: i.type,
|
|
129
|
-
created_at: i.created_at,
|
|
130
|
-
updated_at: i.updated_at,
|
|
131
|
-
};
|
|
60
|
+
return formatEntity(i);
|
|
132
61
|
}
|
|
133
62
|
export function generateVerificationToken() {
|
|
134
63
|
return randomBytes(16).toString('hex');
|
|
@@ -149,110 +78,28 @@ export function isExpired(expiresAt) {
|
|
|
149
78
|
return new Date(expiresAt).getTime() < Date.now();
|
|
150
79
|
}
|
|
151
80
|
export function formatConnection(conn) {
|
|
152
|
-
return
|
|
153
|
-
object: 'connection',
|
|
154
|
-
id: conn.id,
|
|
155
|
-
organization_id: conn.organization_id,
|
|
156
|
-
connection_type: conn.connection_type,
|
|
157
|
-
name: conn.name,
|
|
158
|
-
state: conn.state,
|
|
159
|
-
domains: conn.domains,
|
|
160
|
-
created_at: conn.created_at,
|
|
161
|
-
updated_at: conn.updated_at,
|
|
162
|
-
};
|
|
81
|
+
return formatEntity(conn);
|
|
163
82
|
}
|
|
164
83
|
export function formatSSOProfile(p) {
|
|
165
|
-
return
|
|
166
|
-
object: 'profile',
|
|
167
|
-
id: p.id,
|
|
168
|
-
connection_id: p.connection_id,
|
|
169
|
-
connection_type: p.connection_type,
|
|
170
|
-
organization_id: p.organization_id,
|
|
171
|
-
idp_id: p.idp_id,
|
|
172
|
-
email: p.email,
|
|
173
|
-
first_name: p.first_name,
|
|
174
|
-
last_name: p.last_name,
|
|
175
|
-
groups: p.groups,
|
|
176
|
-
raw_attributes: p.raw_attributes,
|
|
177
|
-
created_at: p.created_at,
|
|
178
|
-
updated_at: p.updated_at,
|
|
179
|
-
};
|
|
84
|
+
return formatEntity(p);
|
|
180
85
|
}
|
|
181
86
|
export function formatPipeConnection(pc) {
|
|
182
|
-
return
|
|
183
|
-
object: 'pipe_connection',
|
|
184
|
-
id: pc.id,
|
|
185
|
-
user_id: pc.user_id,
|
|
186
|
-
provider: pc.provider,
|
|
187
|
-
scopes: pc.scopes,
|
|
188
|
-
status: pc.status,
|
|
189
|
-
external_account_id: pc.external_account_id,
|
|
190
|
-
created_at: pc.created_at,
|
|
191
|
-
updated_at: pc.updated_at,
|
|
192
|
-
};
|
|
87
|
+
return formatEntity(pc);
|
|
193
88
|
}
|
|
194
89
|
export function formatInvitation(inv) {
|
|
195
|
-
return
|
|
196
|
-
object: 'invitation',
|
|
197
|
-
id: inv.id,
|
|
198
|
-
email: inv.email,
|
|
199
|
-
state: inv.state,
|
|
200
|
-
token: inv.token,
|
|
201
|
-
accept_invitation_url: inv.accept_invitation_url,
|
|
202
|
-
organization_id: inv.organization_id,
|
|
203
|
-
inviter_user_id: inv.inviter_user_id,
|
|
204
|
-
role_slug: inv.role_slug,
|
|
205
|
-
expires_at: inv.expires_at,
|
|
206
|
-
created_at: inv.created_at,
|
|
207
|
-
updated_at: inv.updated_at,
|
|
208
|
-
};
|
|
90
|
+
return formatEntity(inv);
|
|
209
91
|
}
|
|
210
92
|
export function formatRedirectUri(r) {
|
|
211
|
-
return
|
|
212
|
-
object: 'redirect_uri',
|
|
213
|
-
id: r.id,
|
|
214
|
-
uri: r.uri,
|
|
215
|
-
created_at: r.created_at,
|
|
216
|
-
updated_at: r.updated_at,
|
|
217
|
-
};
|
|
93
|
+
return formatEntity(r);
|
|
218
94
|
}
|
|
219
95
|
export function formatCorsOrigin(o) {
|
|
220
|
-
return
|
|
221
|
-
object: 'cors_origin',
|
|
222
|
-
id: o.id,
|
|
223
|
-
origin: o.origin,
|
|
224
|
-
created_at: o.created_at,
|
|
225
|
-
updated_at: o.updated_at,
|
|
226
|
-
};
|
|
96
|
+
return formatEntity(o);
|
|
227
97
|
}
|
|
228
98
|
export function formatAuthorizedApplication(a) {
|
|
229
|
-
return
|
|
230
|
-
object: 'authorized_application',
|
|
231
|
-
id: a.id,
|
|
232
|
-
user_id: a.user_id,
|
|
233
|
-
name: a.name,
|
|
234
|
-
redirect_uri: a.redirect_uri,
|
|
235
|
-
created_at: a.created_at,
|
|
236
|
-
updated_at: a.updated_at,
|
|
237
|
-
};
|
|
99
|
+
return formatEntity(a);
|
|
238
100
|
}
|
|
239
101
|
export function formatConnectedAccount(a) {
|
|
240
|
-
return
|
|
241
|
-
object: 'connected_account',
|
|
242
|
-
id: a.id,
|
|
243
|
-
user_id: a.user_id,
|
|
244
|
-
provider: a.provider,
|
|
245
|
-
provider_id: a.provider_id,
|
|
246
|
-
created_at: a.created_at,
|
|
247
|
-
updated_at: a.updated_at,
|
|
248
|
-
};
|
|
249
|
-
}
|
|
250
|
-
export function parseListParams(url) {
|
|
251
|
-
const limit = Math.max(1, Math.min(parseInt(url.searchParams.get('limit') ?? '10'), 100));
|
|
252
|
-
const order = url.searchParams.get('order') ?? 'desc';
|
|
253
|
-
const before = url.searchParams.get('before') ?? undefined;
|
|
254
|
-
const after = url.searchParams.get('after') ?? undefined;
|
|
255
|
-
return { limit, order, before, after };
|
|
102
|
+
return formatEntity(a);
|
|
256
103
|
}
|
|
257
104
|
/** Allowed redirect URI hosts for the emulator's authorize endpoints. */
|
|
258
105
|
const ALLOWED_REDIRECT_HOSTS = new Set(['localhost', '127.0.0.1', '[::1]']);
|
|
@@ -272,64 +119,21 @@ export function assertLocalRedirectUri(uri) {
|
|
|
272
119
|
throw new WorkOSApiError(400, `redirect_uri must point to localhost, got ${parsed.hostname}`, 'invalid_redirect_uri');
|
|
273
120
|
}
|
|
274
121
|
}
|
|
122
|
+
const AUTH_CHALLENGE_EXCLUDE = new Set([...INTERNAL_FIELDS, 'code']);
|
|
275
123
|
export function formatAuthChallenge(c) {
|
|
276
|
-
return {
|
|
277
|
-
object: 'authentication_challenge',
|
|
278
|
-
id: c.id,
|
|
279
|
-
user_id: c.user_id,
|
|
280
|
-
factor_id: c.factor_id,
|
|
281
|
-
expires_at: c.expires_at,
|
|
282
|
-
created_at: c.created_at,
|
|
283
|
-
updated_at: c.updated_at,
|
|
284
|
-
};
|
|
124
|
+
return formatEntity(c, { exclude: AUTH_CHALLENGE_EXCLUDE });
|
|
285
125
|
}
|
|
286
126
|
export function formatRole(role) {
|
|
287
|
-
return
|
|
288
|
-
object: 'role',
|
|
289
|
-
id: role.id,
|
|
290
|
-
slug: role.slug,
|
|
291
|
-
name: role.name,
|
|
292
|
-
description: role.description,
|
|
293
|
-
type: role.type,
|
|
294
|
-
organization_id: role.organization_id,
|
|
295
|
-
is_default_role: role.is_default_role,
|
|
296
|
-
priority: role.priority,
|
|
297
|
-
created_at: role.created_at,
|
|
298
|
-
updated_at: role.updated_at,
|
|
299
|
-
};
|
|
127
|
+
return formatEntity(role);
|
|
300
128
|
}
|
|
301
129
|
export function formatPermission(p) {
|
|
302
|
-
return
|
|
303
|
-
object: 'permission',
|
|
304
|
-
id: p.id,
|
|
305
|
-
slug: p.slug,
|
|
306
|
-
name: p.name,
|
|
307
|
-
description: p.description,
|
|
308
|
-
created_at: p.created_at,
|
|
309
|
-
updated_at: p.updated_at,
|
|
310
|
-
};
|
|
130
|
+
return formatEntity(p);
|
|
311
131
|
}
|
|
312
132
|
export function formatAuthorizationResource(r) {
|
|
313
|
-
return
|
|
314
|
-
object: 'authorization_resource',
|
|
315
|
-
id: r.id,
|
|
316
|
-
resource_type_slug: r.resource_type_slug,
|
|
317
|
-
external_id: r.external_id,
|
|
318
|
-
organization_id: r.organization_id,
|
|
319
|
-
metadata: r.metadata,
|
|
320
|
-
created_at: r.created_at,
|
|
321
|
-
updated_at: r.updated_at,
|
|
322
|
-
};
|
|
133
|
+
return formatEntity(r);
|
|
323
134
|
}
|
|
324
135
|
export function formatRoleAssignment(ra) {
|
|
325
|
-
return
|
|
326
|
-
object: 'role_assignment',
|
|
327
|
-
id: ra.id,
|
|
328
|
-
organization_membership_id: ra.organization_membership_id,
|
|
329
|
-
role_id: ra.role_id,
|
|
330
|
-
created_at: ra.created_at,
|
|
331
|
-
updated_at: ra.updated_at,
|
|
332
|
-
};
|
|
136
|
+
return formatEntity(ra);
|
|
333
137
|
}
|
|
334
138
|
export function formatDeviceAuthorization(d) {
|
|
335
139
|
return {
|
|
@@ -340,158 +144,47 @@ export function formatDeviceAuthorization(d) {
|
|
|
340
144
|
interval: d.interval,
|
|
341
145
|
};
|
|
342
146
|
}
|
|
343
|
-
// --- Phase 4: CRUD Domain formatters ---
|
|
344
147
|
export function formatDirectory(d) {
|
|
345
|
-
return
|
|
346
|
-
object: 'directory',
|
|
347
|
-
id: d.id,
|
|
348
|
-
name: d.name,
|
|
349
|
-
organization_id: d.organization_id,
|
|
350
|
-
domain: d.domain,
|
|
351
|
-
type: d.type,
|
|
352
|
-
state: d.state,
|
|
353
|
-
external_key: d.external_key,
|
|
354
|
-
created_at: d.created_at,
|
|
355
|
-
updated_at: d.updated_at,
|
|
356
|
-
};
|
|
148
|
+
return formatEntity(d);
|
|
357
149
|
}
|
|
358
150
|
export function formatDirectoryUser(u) {
|
|
359
|
-
return
|
|
360
|
-
object: 'directory_user',
|
|
361
|
-
id: u.id,
|
|
362
|
-
directory_id: u.directory_id,
|
|
363
|
-
organization_id: u.organization_id,
|
|
364
|
-
idp_id: u.idp_id,
|
|
365
|
-
first_name: u.first_name,
|
|
366
|
-
last_name: u.last_name,
|
|
367
|
-
email: u.email,
|
|
368
|
-
username: u.username,
|
|
369
|
-
state: u.state,
|
|
370
|
-
role: u.role,
|
|
371
|
-
custom_attributes: u.custom_attributes,
|
|
372
|
-
raw_attributes: u.raw_attributes,
|
|
373
|
-
groups: u.groups,
|
|
374
|
-
created_at: u.created_at,
|
|
375
|
-
updated_at: u.updated_at,
|
|
376
|
-
};
|
|
151
|
+
return formatEntity(u);
|
|
377
152
|
}
|
|
378
153
|
export function formatDirectoryGroup(g) {
|
|
379
|
-
return
|
|
380
|
-
object: 'directory_group',
|
|
381
|
-
id: g.id,
|
|
382
|
-
directory_id: g.directory_id,
|
|
383
|
-
organization_id: g.organization_id,
|
|
384
|
-
idp_id: g.idp_id,
|
|
385
|
-
name: g.name,
|
|
386
|
-
raw_attributes: g.raw_attributes,
|
|
387
|
-
created_at: g.created_at,
|
|
388
|
-
updated_at: g.updated_at,
|
|
389
|
-
};
|
|
154
|
+
return formatEntity(g);
|
|
390
155
|
}
|
|
391
156
|
export function formatAuditLogAction(a) {
|
|
392
|
-
return
|
|
393
|
-
object: 'audit_log_action',
|
|
394
|
-
id: a.id,
|
|
395
|
-
name: a.name,
|
|
396
|
-
description: a.description,
|
|
397
|
-
condition: a.condition,
|
|
398
|
-
created_at: a.created_at,
|
|
399
|
-
updated_at: a.updated_at,
|
|
400
|
-
};
|
|
157
|
+
return formatEntity(a);
|
|
401
158
|
}
|
|
402
159
|
export function formatAuditLogEvent(e) {
|
|
403
|
-
return
|
|
404
|
-
object: 'audit_log_event',
|
|
405
|
-
id: e.id,
|
|
406
|
-
organization_id: e.organization_id,
|
|
407
|
-
action: e.action,
|
|
408
|
-
actor: e.actor,
|
|
409
|
-
targets: e.targets,
|
|
410
|
-
metadata: e.metadata,
|
|
411
|
-
occurred_at: e.occurred_at,
|
|
412
|
-
created_at: e.created_at,
|
|
413
|
-
updated_at: e.updated_at,
|
|
414
|
-
};
|
|
160
|
+
return formatEntity(e);
|
|
415
161
|
}
|
|
416
162
|
export function formatAuditLogExport(ex) {
|
|
417
|
-
return
|
|
418
|
-
object: 'audit_log_export',
|
|
419
|
-
id: ex.id,
|
|
420
|
-
organization_id: ex.organization_id,
|
|
421
|
-
state: ex.state,
|
|
422
|
-
url: ex.url,
|
|
423
|
-
filters: ex.filters,
|
|
424
|
-
created_at: ex.created_at,
|
|
425
|
-
updated_at: ex.updated_at,
|
|
426
|
-
};
|
|
163
|
+
return formatEntity(ex);
|
|
427
164
|
}
|
|
428
165
|
export function formatFeatureFlag(f) {
|
|
429
|
-
return
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
name: f.name,
|
|
434
|
-
description: f.description,
|
|
435
|
-
type: f.type,
|
|
436
|
-
default_value: f.default_value,
|
|
437
|
-
enabled: f.enabled,
|
|
438
|
-
created_at: f.created_at,
|
|
439
|
-
updated_at: f.updated_at,
|
|
440
|
-
};
|
|
166
|
+
return formatEntity(f);
|
|
167
|
+
}
|
|
168
|
+
export function formatFlagTarget(t) {
|
|
169
|
+
return formatEntity(t);
|
|
441
170
|
}
|
|
442
171
|
export function formatConnectApplication(a) {
|
|
443
|
-
return
|
|
444
|
-
object: 'connect_application',
|
|
445
|
-
id: a.id,
|
|
446
|
-
name: a.name,
|
|
447
|
-
redirect_uris: a.redirect_uris,
|
|
448
|
-
client_id: a.client_id,
|
|
449
|
-
logo_url: a.logo_url,
|
|
450
|
-
created_at: a.created_at,
|
|
451
|
-
updated_at: a.updated_at,
|
|
452
|
-
};
|
|
172
|
+
return formatEntity(a);
|
|
453
173
|
}
|
|
174
|
+
const CLIENT_SECRET_EXCLUDE = new Set([...INTERNAL_FIELDS, 'value']);
|
|
454
175
|
export function formatClientSecret(s) {
|
|
455
|
-
return {
|
|
456
|
-
object: 'client_secret',
|
|
457
|
-
id: s.id,
|
|
458
|
-
application_id: s.application_id,
|
|
459
|
-
last_four: s.last_four,
|
|
460
|
-
created_at: s.created_at,
|
|
461
|
-
updated_at: s.updated_at,
|
|
462
|
-
};
|
|
176
|
+
return formatEntity(s, { exclude: CLIENT_SECRET_EXCLUDE });
|
|
463
177
|
}
|
|
464
178
|
export function formatRadarAttempt(a) {
|
|
465
|
-
return
|
|
466
|
-
object: 'radar_attempt',
|
|
467
|
-
id: a.id,
|
|
468
|
-
user_id: a.user_id,
|
|
469
|
-
ip_address: a.ip_address,
|
|
470
|
-
user_agent: a.user_agent,
|
|
471
|
-
verdict: a.verdict,
|
|
472
|
-
signals: a.signals,
|
|
473
|
-
created_at: a.created_at,
|
|
474
|
-
updated_at: a.updated_at,
|
|
475
|
-
};
|
|
179
|
+
return formatEntity(a);
|
|
476
180
|
}
|
|
181
|
+
const API_KEY_EXCLUDE = new Set([...INTERNAL_FIELDS, 'key', 'environment']);
|
|
477
182
|
export function formatApiKeyRecord(k) {
|
|
478
|
-
return {
|
|
479
|
-
object: 'api_key',
|
|
480
|
-
id: k.id,
|
|
481
|
-
name: k.name,
|
|
482
|
-
created_at: k.created_at,
|
|
483
|
-
updated_at: k.updated_at,
|
|
484
|
-
};
|
|
183
|
+
return formatEntity(k, { exclude: API_KEY_EXCLUDE });
|
|
485
184
|
}
|
|
185
|
+
const EVENT_EXCLUDE = new Set([...INTERNAL_FIELDS, 'updated_at']);
|
|
486
186
|
export function formatEvent(e) {
|
|
487
|
-
return {
|
|
488
|
-
object: 'event',
|
|
489
|
-
id: e.id,
|
|
490
|
-
event: e.event,
|
|
491
|
-
data: e.data,
|
|
492
|
-
environment_id: e.environment_id,
|
|
493
|
-
created_at: e.created_at,
|
|
494
|
-
};
|
|
187
|
+
return formatEntity(e, { exclude: EVENT_EXCLUDE });
|
|
495
188
|
}
|
|
496
189
|
export function formatWebhookEndpoint(ep, opts) {
|
|
497
190
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/emulate/workos/helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomBytes, createHash, createCipheriv } from 'node:crypto';\nimport { WorkOSApiError } from '../core/index.js';\nimport type { WorkOSStore } from './store.js';\nimport type {\n WorkOSOrganization,\n WorkOSOrganizationDomain,\n WorkOSOrganizationMembership,\n WorkOSUser,\n WorkOSSession,\n WorkOSEmailVerification,\n WorkOSPasswordReset,\n WorkOSMagicAuth,\n WorkOSAuthenticationFactor,\n WorkOSIdentity,\n WorkOSConnection,\n WorkOSSSOProfile,\n WorkOSPipeConnection,\n WorkOSInvitation,\n WorkOSRedirectUri,\n WorkOSCorsOrigin,\n WorkOSAuthorizedApplication,\n WorkOSConnectedAccount,\n WorkOSAuthenticationChallenge,\n WorkOSDeviceAuthorization,\n WorkOSRole,\n WorkOSPermission,\n WorkOSAuthorizationResource,\n WorkOSRoleAssignment,\n WorkOSDirectory,\n WorkOSDirectoryUser,\n WorkOSDirectoryGroup,\n WorkOSAuditLogAction,\n WorkOSAuditLogEvent,\n WorkOSAuditLogExport,\n WorkOSFeatureFlag,\n WorkOSConnectApplication,\n WorkOSClientSecret,\n WorkOSRadarAttempt,\n WorkOSApiKey,\n WorkOSEvent,\n WorkOSWebhookEndpoint,\n} from './entities.js';\n\nexport function formatOrganization(org: WorkOSOrganization, ws: WorkOSStore): Record<string, unknown> {\n const domains = ws.organizationDomains.findBy('organization_id', org.id).map(formatDomain);\n\n return {\n object: 'organization',\n id: org.id,\n name: org.name,\n external_id: org.external_id,\n metadata: org.metadata,\n domains,\n stripe_customer_id: org.stripe_customer_id,\n created_at: org.created_at,\n updated_at: org.updated_at,\n };\n}\n\nexport function formatDomain(domain: WorkOSOrganizationDomain): Record<string, unknown> {\n return {\n object: 'organization_domain',\n id: domain.id,\n organization_id: domain.organization_id,\n domain: domain.domain,\n state: domain.state,\n verification_strategy: domain.verification_strategy,\n verification_token: domain.verification_token,\n verification_prefix: domain.verification_prefix,\n created_at: domain.created_at,\n updated_at: domain.updated_at,\n };\n}\n\nexport function formatMembership(m: WorkOSOrganizationMembership): Record<string, unknown> {\n return {\n object: 'organization_membership',\n id: m.id,\n organization_id: m.organization_id,\n user_id: m.user_id,\n role: m.role,\n status: m.status,\n external_id: m.external_id,\n metadata: m.metadata,\n created_at: m.created_at,\n updated_at: m.updated_at,\n };\n}\n\nexport function formatUser(user: WorkOSUser): Record<string, unknown> {\n return {\n object: 'user',\n id: user.id,\n email: user.email,\n first_name: user.first_name,\n last_name: user.last_name,\n email_verified: user.email_verified,\n profile_picture_url: user.profile_picture_url,\n last_sign_in_at: user.last_sign_in_at,\n external_id: user.external_id,\n metadata: user.metadata,\n locale: user.locale,\n created_at: user.created_at,\n updated_at: user.updated_at,\n };\n}\n\nexport function formatSession(s: WorkOSSession): Record<string, unknown> {\n return {\n object: 'session',\n id: s.id,\n user_id: s.user_id,\n organization_id: s.organization_id,\n ip_address: s.ip_address,\n user_agent: s.user_agent,\n created_at: s.created_at,\n updated_at: s.updated_at,\n };\n}\n\nexport function formatEmailVerification(ev: WorkOSEmailVerification): Record<string, unknown> {\n return {\n object: 'email_verification',\n id: ev.id,\n user_id: ev.user_id,\n email: ev.email,\n code: ev.code,\n expires_at: ev.expires_at,\n created_at: ev.created_at,\n updated_at: ev.updated_at,\n };\n}\n\nexport function formatPasswordReset(pr: WorkOSPasswordReset): Record<string, unknown> {\n return {\n object: 'password_reset',\n id: pr.id,\n user_id: pr.user_id,\n email: pr.email,\n token: pr.token,\n expires_at: pr.expires_at,\n created_at: pr.created_at,\n updated_at: pr.updated_at,\n };\n}\n\nexport function formatMagicAuth(ma: WorkOSMagicAuth): Record<string, unknown> {\n return {\n object: 'magic_auth',\n id: ma.id,\n user_id: ma.user_id,\n email: ma.email,\n code: ma.code,\n expires_at: ma.expires_at,\n created_at: ma.created_at,\n updated_at: ma.updated_at,\n };\n}\n\nexport function formatAuthFactor(f: WorkOSAuthenticationFactor): Record<string, unknown> {\n return {\n object: 'authentication_factor',\n id: f.id,\n user_id: f.user_id,\n type: f.type,\n totp: f.totp,\n created_at: f.created_at,\n updated_at: f.updated_at,\n };\n}\n\nexport function formatIdentity(i: WorkOSIdentity): Record<string, unknown> {\n return {\n object: 'identity',\n id: i.id,\n user_id: i.user_id,\n provider: i.provider,\n provider_id: i.provider_id,\n type: i.type,\n created_at: i.created_at,\n updated_at: i.updated_at,\n };\n}\n\nexport function generateVerificationToken(): string {\n return randomBytes(16).toString('hex');\n}\n\nexport function generateCode(): string {\n return String(Math.floor(100000 + Math.random() * 900000));\n}\n\nexport function hashPassword(password: string): string {\n return createHash('sha256').update(password).digest('hex');\n}\n\nexport function verifyPassword(password: string, hash: string): boolean {\n return hashPassword(password) === hash;\n}\n\nexport function expiresIn(minutes: number): string {\n return new Date(Date.now() + minutes * 60 * 1000).toISOString();\n}\n\nexport function isExpired(expiresAt: string): boolean {\n return new Date(expiresAt).getTime() < Date.now();\n}\n\nexport function formatConnection(conn: WorkOSConnection): Record<string, unknown> {\n return {\n object: 'connection',\n id: conn.id,\n organization_id: conn.organization_id,\n connection_type: conn.connection_type,\n name: conn.name,\n state: conn.state,\n domains: conn.domains,\n created_at: conn.created_at,\n updated_at: conn.updated_at,\n };\n}\n\nexport function formatSSOProfile(p: WorkOSSSOProfile): Record<string, unknown> {\n return {\n object: 'profile',\n id: p.id,\n connection_id: p.connection_id,\n connection_type: p.connection_type,\n organization_id: p.organization_id,\n idp_id: p.idp_id,\n email: p.email,\n first_name: p.first_name,\n last_name: p.last_name,\n groups: p.groups,\n raw_attributes: p.raw_attributes,\n created_at: p.created_at,\n updated_at: p.updated_at,\n };\n}\n\nexport function formatPipeConnection(pc: WorkOSPipeConnection): Record<string, unknown> {\n return {\n object: 'pipe_connection',\n id: pc.id,\n user_id: pc.user_id,\n provider: pc.provider,\n scopes: pc.scopes,\n status: pc.status,\n external_account_id: pc.external_account_id,\n created_at: pc.created_at,\n updated_at: pc.updated_at,\n };\n}\n\nexport function formatInvitation(inv: WorkOSInvitation): Record<string, unknown> {\n return {\n object: 'invitation',\n id: inv.id,\n email: inv.email,\n state: inv.state,\n token: inv.token,\n accept_invitation_url: inv.accept_invitation_url,\n organization_id: inv.organization_id,\n inviter_user_id: inv.inviter_user_id,\n role_slug: inv.role_slug,\n expires_at: inv.expires_at,\n created_at: inv.created_at,\n updated_at: inv.updated_at,\n };\n}\n\nexport function formatRedirectUri(r: WorkOSRedirectUri): Record<string, unknown> {\n return {\n object: 'redirect_uri',\n id: r.id,\n uri: r.uri,\n created_at: r.created_at,\n updated_at: r.updated_at,\n };\n}\n\nexport function formatCorsOrigin(o: WorkOSCorsOrigin): Record<string, unknown> {\n return {\n object: 'cors_origin',\n id: o.id,\n origin: o.origin,\n created_at: o.created_at,\n updated_at: o.updated_at,\n };\n}\n\nexport function formatAuthorizedApplication(a: WorkOSAuthorizedApplication): Record<string, unknown> {\n return {\n object: 'authorized_application',\n id: a.id,\n user_id: a.user_id,\n name: a.name,\n redirect_uri: a.redirect_uri,\n created_at: a.created_at,\n updated_at: a.updated_at,\n };\n}\n\nexport function formatConnectedAccount(a: WorkOSConnectedAccount): Record<string, unknown> {\n return {\n object: 'connected_account',\n id: a.id,\n user_id: a.user_id,\n provider: a.provider,\n provider_id: a.provider_id,\n created_at: a.created_at,\n updated_at: a.updated_at,\n };\n}\n\nexport function parseListParams(url: URL) {\n const limit = Math.max(1, Math.min(parseInt(url.searchParams.get('limit') ?? '10'), 100));\n const order = (url.searchParams.get('order') as 'asc' | 'desc') ?? 'desc';\n const before = url.searchParams.get('before') ?? undefined;\n const after = url.searchParams.get('after') ?? undefined;\n return { limit, order, before, after };\n}\n\n/** Allowed redirect URI hosts for the emulator's authorize endpoints. */\nconst ALLOWED_REDIRECT_HOSTS = new Set(['localhost', '127.0.0.1', '[::1]']);\n\n/**\n * Validate that a redirect_uri points to a localhost origin.\n * Prevents the emulator from being used as an open redirect.\n */\nexport function assertLocalRedirectUri(uri: string): void {\n let parsed: URL;\n try {\n parsed = new URL(uri);\n } catch {\n throw new WorkOSApiError(400, 'Invalid redirect_uri', 'invalid_redirect_uri');\n }\n if (!ALLOWED_REDIRECT_HOSTS.has(parsed.hostname)) {\n throw new WorkOSApiError(\n 400,\n `redirect_uri must point to localhost, got ${parsed.hostname}`,\n 'invalid_redirect_uri',\n );\n }\n}\n\nexport function formatAuthChallenge(c: WorkOSAuthenticationChallenge): Record<string, unknown> {\n return {\n object: 'authentication_challenge',\n id: c.id,\n user_id: c.user_id,\n factor_id: c.factor_id,\n expires_at: c.expires_at,\n created_at: c.created_at,\n updated_at: c.updated_at,\n };\n}\n\nexport function formatRole(role: WorkOSRole): Record<string, unknown> {\n return {\n object: 'role',\n id: role.id,\n slug: role.slug,\n name: role.name,\n description: role.description,\n type: role.type,\n organization_id: role.organization_id,\n is_default_role: role.is_default_role,\n priority: role.priority,\n created_at: role.created_at,\n updated_at: role.updated_at,\n };\n}\n\nexport function formatPermission(p: WorkOSPermission): Record<string, unknown> {\n return {\n object: 'permission',\n id: p.id,\n slug: p.slug,\n name: p.name,\n description: p.description,\n created_at: p.created_at,\n updated_at: p.updated_at,\n };\n}\n\nexport function formatAuthorizationResource(r: WorkOSAuthorizationResource): Record<string, unknown> {\n return {\n object: 'authorization_resource',\n id: r.id,\n resource_type_slug: r.resource_type_slug,\n external_id: r.external_id,\n organization_id: r.organization_id,\n metadata: r.metadata,\n created_at: r.created_at,\n updated_at: r.updated_at,\n };\n}\n\nexport function formatRoleAssignment(ra: WorkOSRoleAssignment): Record<string, unknown> {\n return {\n object: 'role_assignment',\n id: ra.id,\n organization_membership_id: ra.organization_membership_id,\n role_id: ra.role_id,\n created_at: ra.created_at,\n updated_at: ra.updated_at,\n };\n}\n\nexport function formatDeviceAuthorization(d: WorkOSDeviceAuthorization): Record<string, unknown> {\n return {\n device_code: d.device_code,\n user_code: d.user_code,\n verification_uri: 'http://localhost:0/user_management/authorize/device/verify',\n expires_in: Math.max(0, Math.floor((new Date(d.expires_at).getTime() - Date.now()) / 1000)),\n interval: d.interval,\n };\n}\n\n// --- Phase 4: CRUD Domain formatters ---\n\nexport function formatDirectory(d: WorkOSDirectory): Record<string, unknown> {\n return {\n object: 'directory',\n id: d.id,\n name: d.name,\n organization_id: d.organization_id,\n domain: d.domain,\n type: d.type,\n state: d.state,\n external_key: d.external_key,\n created_at: d.created_at,\n updated_at: d.updated_at,\n };\n}\n\nexport function formatDirectoryUser(u: WorkOSDirectoryUser): Record<string, unknown> {\n return {\n object: 'directory_user',\n id: u.id,\n directory_id: u.directory_id,\n organization_id: u.organization_id,\n idp_id: u.idp_id,\n first_name: u.first_name,\n last_name: u.last_name,\n email: u.email,\n username: u.username,\n state: u.state,\n role: u.role,\n custom_attributes: u.custom_attributes,\n raw_attributes: u.raw_attributes,\n groups: u.groups,\n created_at: u.created_at,\n updated_at: u.updated_at,\n };\n}\n\nexport function formatDirectoryGroup(g: WorkOSDirectoryGroup): Record<string, unknown> {\n return {\n object: 'directory_group',\n id: g.id,\n directory_id: g.directory_id,\n organization_id: g.organization_id,\n idp_id: g.idp_id,\n name: g.name,\n raw_attributes: g.raw_attributes,\n created_at: g.created_at,\n updated_at: g.updated_at,\n };\n}\n\nexport function formatAuditLogAction(a: WorkOSAuditLogAction): Record<string, unknown> {\n return {\n object: 'audit_log_action',\n id: a.id,\n name: a.name,\n description: a.description,\n condition: a.condition,\n created_at: a.created_at,\n updated_at: a.updated_at,\n };\n}\n\nexport function formatAuditLogEvent(e: WorkOSAuditLogEvent): Record<string, unknown> {\n return {\n object: 'audit_log_event',\n id: e.id,\n organization_id: e.organization_id,\n action: e.action,\n actor: e.actor,\n targets: e.targets,\n metadata: e.metadata,\n occurred_at: e.occurred_at,\n created_at: e.created_at,\n updated_at: e.updated_at,\n };\n}\n\nexport function formatAuditLogExport(ex: WorkOSAuditLogExport): Record<string, unknown> {\n return {\n object: 'audit_log_export',\n id: ex.id,\n organization_id: ex.organization_id,\n state: ex.state,\n url: ex.url,\n filters: ex.filters,\n created_at: ex.created_at,\n updated_at: ex.updated_at,\n };\n}\n\nexport function formatFeatureFlag(f: WorkOSFeatureFlag): Record<string, unknown> {\n return {\n object: 'feature_flag',\n id: f.id,\n slug: f.slug,\n name: f.name,\n description: f.description,\n type: f.type,\n default_value: f.default_value,\n enabled: f.enabled,\n created_at: f.created_at,\n updated_at: f.updated_at,\n };\n}\n\nexport function formatConnectApplication(a: WorkOSConnectApplication): Record<string, unknown> {\n return {\n object: 'connect_application',\n id: a.id,\n name: a.name,\n redirect_uris: a.redirect_uris,\n client_id: a.client_id,\n logo_url: a.logo_url,\n created_at: a.created_at,\n updated_at: a.updated_at,\n };\n}\n\nexport function formatClientSecret(s: WorkOSClientSecret): Record<string, unknown> {\n return {\n object: 'client_secret',\n id: s.id,\n application_id: s.application_id,\n last_four: s.last_four,\n created_at: s.created_at,\n updated_at: s.updated_at,\n };\n}\n\nexport function formatRadarAttempt(a: WorkOSRadarAttempt): Record<string, unknown> {\n return {\n object: 'radar_attempt',\n id: a.id,\n user_id: a.user_id,\n ip_address: a.ip_address,\n user_agent: a.user_agent,\n verdict: a.verdict,\n signals: a.signals,\n created_at: a.created_at,\n updated_at: a.updated_at,\n };\n}\n\nexport function formatApiKeyRecord(k: WorkOSApiKey): Record<string, unknown> {\n return {\n object: 'api_key',\n id: k.id,\n name: k.name,\n created_at: k.created_at,\n updated_at: k.updated_at,\n };\n}\n\nexport function formatEvent(e: WorkOSEvent): Record<string, unknown> {\n return {\n object: 'event',\n id: e.id,\n event: e.event,\n data: e.data,\n environment_id: e.environment_id,\n created_at: e.created_at,\n };\n}\n\nexport function formatWebhookEndpoint(\n ep: WorkOSWebhookEndpoint,\n opts?: { includeSecret?: boolean },\n): Record<string, unknown> {\n return {\n object: 'webhook_endpoint',\n id: ep.id,\n url: ep.url,\n secret: opts?.includeSecret ? ep.secret : `${ep.secret.slice(0, 8)}****`,\n enabled: ep.enabled,\n events: ep.events,\n description: ep.description,\n created_at: ep.created_at,\n updated_at: ep.updated_at,\n };\n}\n\nexport function sealSession(\n data: { access_token: string; refresh_token: string; session_id: string },\n apiKey: string,\n): string {\n const key = createHash('sha256').update(apiKey).digest();\n const iv = randomBytes(12);\n const cipher = createCipheriv('aes-256-gcm', key, iv);\n const plaintext = JSON.stringify(data);\n const encrypted = Buffer.concat([cipher.update(plaintext, 'utf8'), cipher.final()]);\n const tag = cipher.getAuthTag();\n return Buffer.concat([iv, tag, encrypted]).toString('base64');\n}\n"]}
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/emulate/workos/helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomBytes, createHash, createCipheriv } from 'node:crypto';\nimport { WorkOSApiError, type CursorPaginatedResult, type Entity } from '../core/index.js';\nimport type { WorkOSStore } from './store.js';\nimport type {\n WorkOSOrganization,\n WorkOSOrganizationDomain,\n WorkOSOrganizationMembership,\n WorkOSUser,\n WorkOSSession,\n WorkOSEmailVerification,\n WorkOSPasswordReset,\n WorkOSMagicAuth,\n WorkOSAuthenticationFactor,\n WorkOSIdentity,\n WorkOSConnection,\n WorkOSSSOProfile,\n WorkOSPipeConnection,\n WorkOSInvitation,\n WorkOSRedirectUri,\n WorkOSCorsOrigin,\n WorkOSAuthorizedApplication,\n WorkOSConnectedAccount,\n WorkOSAuthenticationChallenge,\n WorkOSDeviceAuthorization,\n WorkOSRole,\n WorkOSPermission,\n WorkOSAuthorizationResource,\n WorkOSRoleAssignment,\n WorkOSDirectory,\n WorkOSDirectoryUser,\n WorkOSDirectoryGroup,\n WorkOSAuditLogAction,\n WorkOSAuditLogEvent,\n WorkOSAuditLogExport,\n WorkOSFeatureFlag,\n WorkOSFlagTarget,\n WorkOSConnectApplication,\n WorkOSClientSecret,\n WorkOSRadarAttempt,\n WorkOSApiKey,\n WorkOSEvent,\n WorkOSWebhookEndpoint,\n} from './entities.js';\n\nconst INTERNAL_FIELDS = new Set<string>(['password_hash', 'code_challenge', 'code_challenge_method']);\n\nexport function formatEntity<T extends Entity>(entity: T, opts?: { exclude?: Set<string> }): Record<string, unknown> {\n const exclude = opts?.exclude ?? INTERNAL_FIELDS;\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(entity)) {\n if (!exclude.has(key)) result[key] = value;\n }\n return result;\n}\n\nexport function formatListResponse<T>(\n result: CursorPaginatedResult<T>,\n formatter: (item: T) => Record<string, unknown>,\n): { object: 'list'; data: Record<string, unknown>[]; list_metadata: { before: string | null; after: string | null } } {\n return {\n object: 'list',\n data: result.data.map(formatter),\n list_metadata: result.list_metadata,\n };\n}\n\nexport function formatOrganization(\n org: WorkOSOrganization,\n ws: WorkOSStore,\n opts?: { domains?: WorkOSOrganizationDomain[] },\n): Record<string, unknown> {\n const domains = (opts?.domains ?? ws.organizationDomains.findBy('organization_id', org.id)).map(formatDomain);\n\n return {\n object: 'organization',\n id: org.id,\n name: org.name,\n external_id: org.external_id,\n metadata: org.metadata,\n domains,\n stripe_customer_id: org.stripe_customer_id,\n created_at: org.created_at,\n updated_at: org.updated_at,\n };\n}\n\nexport function formatDomain(domain: WorkOSOrganizationDomain): Record<string, unknown> {\n return formatEntity(domain);\n}\n\nexport function formatMembership(m: WorkOSOrganizationMembership): Record<string, unknown> {\n return formatEntity(m);\n}\n\nconst USER_EXCLUDE = new Set([...INTERNAL_FIELDS, 'impersonator']);\n\nexport function formatUser(user: WorkOSUser): Record<string, unknown> {\n return formatEntity(user, { exclude: USER_EXCLUDE });\n}\n\nexport function formatSession(s: WorkOSSession): Record<string, unknown> {\n return formatEntity(s);\n}\n\nexport function formatEmailVerification(ev: WorkOSEmailVerification): Record<string, unknown> {\n return formatEntity(ev);\n}\n\nexport function formatPasswordReset(pr: WorkOSPasswordReset): Record<string, unknown> {\n return formatEntity(pr);\n}\n\nexport function formatMagicAuth(ma: WorkOSMagicAuth): Record<string, unknown> {\n return formatEntity(ma);\n}\n\nexport function formatAuthFactor(f: WorkOSAuthenticationFactor): Record<string, unknown> {\n return formatEntity(f);\n}\n\nexport function formatIdentity(i: WorkOSIdentity): Record<string, unknown> {\n return formatEntity(i);\n}\n\nexport function generateVerificationToken(): string {\n return randomBytes(16).toString('hex');\n}\n\nexport function generateCode(): string {\n return String(Math.floor(100000 + Math.random() * 900000));\n}\n\nexport function hashPassword(password: string): string {\n return createHash('sha256').update(password).digest('hex');\n}\n\nexport function verifyPassword(password: string, hash: string): boolean {\n return hashPassword(password) === hash;\n}\n\nexport function expiresIn(minutes: number): string {\n return new Date(Date.now() + minutes * 60 * 1000).toISOString();\n}\n\nexport function isExpired(expiresAt: string): boolean {\n return new Date(expiresAt).getTime() < Date.now();\n}\n\nexport function formatConnection(conn: WorkOSConnection): Record<string, unknown> {\n return formatEntity(conn);\n}\n\nexport function formatSSOProfile(p: WorkOSSSOProfile): Record<string, unknown> {\n return formatEntity(p);\n}\n\nexport function formatPipeConnection(pc: WorkOSPipeConnection): Record<string, unknown> {\n return formatEntity(pc);\n}\n\nexport function formatInvitation(inv: WorkOSInvitation): Record<string, unknown> {\n return formatEntity(inv);\n}\n\nexport function formatRedirectUri(r: WorkOSRedirectUri): Record<string, unknown> {\n return formatEntity(r);\n}\n\nexport function formatCorsOrigin(o: WorkOSCorsOrigin): Record<string, unknown> {\n return formatEntity(o);\n}\n\nexport function formatAuthorizedApplication(a: WorkOSAuthorizedApplication): Record<string, unknown> {\n return formatEntity(a);\n}\n\nexport function formatConnectedAccount(a: WorkOSConnectedAccount): Record<string, unknown> {\n return formatEntity(a);\n}\n\n/** Allowed redirect URI hosts for the emulator's authorize endpoints. */\nconst ALLOWED_REDIRECT_HOSTS = new Set(['localhost', '127.0.0.1', '[::1]']);\n\n/**\n * Validate that a redirect_uri points to a localhost origin.\n * Prevents the emulator from being used as an open redirect.\n */\nexport function assertLocalRedirectUri(uri: string): void {\n let parsed: URL;\n try {\n parsed = new URL(uri);\n } catch {\n throw new WorkOSApiError(400, 'Invalid redirect_uri', 'invalid_redirect_uri');\n }\n if (!ALLOWED_REDIRECT_HOSTS.has(parsed.hostname)) {\n throw new WorkOSApiError(\n 400,\n `redirect_uri must point to localhost, got ${parsed.hostname}`,\n 'invalid_redirect_uri',\n );\n }\n}\n\nconst AUTH_CHALLENGE_EXCLUDE = new Set([...INTERNAL_FIELDS, 'code']);\n\nexport function formatAuthChallenge(c: WorkOSAuthenticationChallenge): Record<string, unknown> {\n return formatEntity(c, { exclude: AUTH_CHALLENGE_EXCLUDE });\n}\n\nexport function formatRole(role: WorkOSRole): Record<string, unknown> {\n return formatEntity(role);\n}\n\nexport function formatPermission(p: WorkOSPermission): Record<string, unknown> {\n return formatEntity(p);\n}\n\nexport function formatAuthorizationResource(r: WorkOSAuthorizationResource): Record<string, unknown> {\n return formatEntity(r);\n}\n\nexport function formatRoleAssignment(ra: WorkOSRoleAssignment): Record<string, unknown> {\n return formatEntity(ra);\n}\n\nexport function formatDeviceAuthorization(d: WorkOSDeviceAuthorization): Record<string, unknown> {\n return {\n device_code: d.device_code,\n user_code: d.user_code,\n verification_uri: 'http://localhost:0/user_management/authorize/device/verify',\n expires_in: Math.max(0, Math.floor((new Date(d.expires_at).getTime() - Date.now()) / 1000)),\n interval: d.interval,\n };\n}\n\nexport function formatDirectory(d: WorkOSDirectory): Record<string, unknown> {\n return formatEntity(d);\n}\n\nexport function formatDirectoryUser(u: WorkOSDirectoryUser): Record<string, unknown> {\n return formatEntity(u);\n}\n\nexport function formatDirectoryGroup(g: WorkOSDirectoryGroup): Record<string, unknown> {\n return formatEntity(g);\n}\n\nexport function formatAuditLogAction(a: WorkOSAuditLogAction): Record<string, unknown> {\n return formatEntity(a);\n}\n\nexport function formatAuditLogEvent(e: WorkOSAuditLogEvent): Record<string, unknown> {\n return formatEntity(e);\n}\n\nexport function formatAuditLogExport(ex: WorkOSAuditLogExport): Record<string, unknown> {\n return formatEntity(ex);\n}\n\nexport function formatFeatureFlag(f: WorkOSFeatureFlag): Record<string, unknown> {\n return formatEntity(f);\n}\n\nexport function formatFlagTarget(t: WorkOSFlagTarget): Record<string, unknown> {\n return formatEntity(t);\n}\n\nexport function formatConnectApplication(a: WorkOSConnectApplication): Record<string, unknown> {\n return formatEntity(a);\n}\n\nconst CLIENT_SECRET_EXCLUDE = new Set([...INTERNAL_FIELDS, 'value']);\n\nexport function formatClientSecret(s: WorkOSClientSecret): Record<string, unknown> {\n return formatEntity(s, { exclude: CLIENT_SECRET_EXCLUDE });\n}\n\nexport function formatRadarAttempt(a: WorkOSRadarAttempt): Record<string, unknown> {\n return formatEntity(a);\n}\n\nconst API_KEY_EXCLUDE = new Set([...INTERNAL_FIELDS, 'key', 'environment']);\n\nexport function formatApiKeyRecord(k: WorkOSApiKey): Record<string, unknown> {\n return formatEntity(k, { exclude: API_KEY_EXCLUDE });\n}\n\nconst EVENT_EXCLUDE = new Set([...INTERNAL_FIELDS, 'updated_at']);\n\nexport function formatEvent(e: WorkOSEvent): Record<string, unknown> {\n return formatEntity(e, { exclude: EVENT_EXCLUDE });\n}\n\nexport function formatWebhookEndpoint(\n ep: WorkOSWebhookEndpoint,\n opts?: { includeSecret?: boolean },\n): Record<string, unknown> {\n return {\n object: 'webhook_endpoint',\n id: ep.id,\n url: ep.url,\n secret: opts?.includeSecret ? ep.secret : `${ep.secret.slice(0, 8)}****`,\n enabled: ep.enabled,\n events: ep.events,\n description: ep.description,\n created_at: ep.created_at,\n updated_at: ep.updated_at,\n };\n}\n\nexport function sealSession(\n data: { access_token: string; refresh_token: string; session_id: string },\n apiKey: string,\n): string {\n const key = createHash('sha256').update(apiKey).digest();\n const iv = randomBytes(12);\n const cipher = createCipheriv('aes-256-gcm', key, iv);\n const plaintext = JSON.stringify(data);\n const encrypted = Buffer.concat([cipher.update(plaintext, 'utf8'), cipher.final()]);\n const tag = cipher.getAuthTag();\n return Buffer.concat([iv, tag, encrypted]).toString('base64');\n}\n"]}
|