@voyant-travel/auth 0.113.3
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/LICENSE +201 -0
- package/README.md +225 -0
- package/dist/api-token-rotation.d.ts +54 -0
- package/dist/api-token-rotation.d.ts.map +1 -0
- package/dist/api-token-rotation.js +134 -0
- package/dist/api-token-rotation.js.map +1 -0
- package/dist/auth-facades.d.ts +62 -0
- package/dist/auth-facades.d.ts.map +1 -0
- package/dist/auth-facades.js +252 -0
- package/dist/auth-facades.js.map +1 -0
- package/dist/backend.d.ts +10 -0
- package/dist/backend.d.ts.map +1 -0
- package/dist/backend.js +15 -0
- package/dist/backend.js.map +1 -0
- package/dist/cloud-admin-session-public.d.ts +67 -0
- package/dist/cloud-admin-session-public.d.ts.map +1 -0
- package/dist/cloud-admin-session-public.js +2 -0
- package/dist/cloud-admin-session-public.js.map +1 -0
- package/dist/cloud-admin-session-revalidation-store.d.ts +17 -0
- package/dist/cloud-admin-session-revalidation-store.d.ts.map +1 -0
- package/dist/cloud-admin-session-revalidation-store.js +64 -0
- package/dist/cloud-admin-session-revalidation-store.js.map +1 -0
- package/dist/cloud-admin-session.d.ts +70 -0
- package/dist/cloud-admin-session.d.ts.map +1 -0
- package/dist/cloud-admin-session.js +319 -0
- package/dist/cloud-admin-session.js.map +1 -0
- package/dist/cloud-broker/assertion.d.ts +69 -0
- package/dist/cloud-broker/assertion.d.ts.map +1 -0
- package/dist/cloud-broker/assertion.js +226 -0
- package/dist/cloud-broker/assertion.js.map +1 -0
- package/dist/cloud-broker/state.d.ts +55 -0
- package/dist/cloud-broker/state.d.ts.map +1 -0
- package/dist/cloud-broker/state.js +191 -0
- package/dist/cloud-broker/state.js.map +1 -0
- package/dist/cloud-broker/utils.d.ts +7 -0
- package/dist/cloud-broker/utils.d.ts.map +1 -0
- package/dist/cloud-broker/utils.js +50 -0
- package/dist/cloud-broker/utils.js.map +1 -0
- package/dist/cloud-broker.d.ts +5 -0
- package/dist/cloud-broker.d.ts.map +1 -0
- package/dist/cloud-broker.js +3 -0
- package/dist/cloud-broker.js.map +1 -0
- package/dist/edge.d.ts +28 -0
- package/dist/edge.d.ts.map +1 -0
- package/dist/edge.js +106 -0
- package/dist/edge.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +42 -0
- package/dist/index.js.map +1 -0
- package/dist/permissions.d.ts +141 -0
- package/dist/permissions.d.ts.map +1 -0
- package/dist/permissions.js +46 -0
- package/dist/permissions.js.map +1 -0
- package/dist/server.d.ts +106 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +193 -0
- package/dist/server.js.map +1 -0
- package/dist/trusted-origins.d.ts +9 -0
- package/dist/trusted-origins.d.ts.map +1 -0
- package/dist/trusted-origins.js +41 -0
- package/dist/trusted-origins.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/workspace.d.ts +43 -0
- package/dist/workspace.d.ts.map +1 -0
- package/dist/workspace.js +146 -0
- package/dist/workspace.js.map +1 -0
- package/package.json +81 -0
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
import { authAccount, authUser, cloudAuthSessionLinks, cloudAuthUserLinks, } from "@voyant-travel/db/schema/iam";
|
|
2
|
+
import { createAuthEndpoint } from "better-auth/api";
|
|
3
|
+
import { setSessionCookie } from "better-auth/cookies";
|
|
4
|
+
import { and, eq } from "drizzle-orm";
|
|
5
|
+
import { markCloudAuthSessionRevalidated, markCloudAuthUserRevalidated, revokeCloudAuthUserAccess, } from "./cloud-admin-session-revalidation-store.js";
|
|
6
|
+
import { exchangeCloudAdminAuthCode, revalidateCloudAdminAuthAccess, verifyCloudAdminAuthCallback, } from "./cloud-broker.js";
|
|
7
|
+
import { isFirstAuthUser, provisionCurrentUserProfile } from "./workspace.js";
|
|
8
|
+
const VOYANT_CLOUD_PROVIDER_ID = "voyant-cloud";
|
|
9
|
+
const DEFAULT_CLOUD_SESSION_REVALIDATE_AFTER_SECONDS = 15 * 60;
|
|
10
|
+
export function createVoyantCloudAdminAuthPlugin(options) {
|
|
11
|
+
return {
|
|
12
|
+
id: "voyant-cloud-admin-auth",
|
|
13
|
+
endpoints: {
|
|
14
|
+
voyantCloudAdminAuthCallback: createAuthEndpoint("/cloud/callback", { method: "GET", requireRequest: true }, async (ctx) => {
|
|
15
|
+
const callback = await verifyCloudAdminAuthCallback({
|
|
16
|
+
requestUrl: ctx.request.url,
|
|
17
|
+
cookieHeader: ctx.headers?.get("cookie") ?? ctx.request.headers.get("cookie"),
|
|
18
|
+
cookieSecret: options.cookieSecret,
|
|
19
|
+
});
|
|
20
|
+
ctx.setHeader("Set-Cookie", callback.clearCookie);
|
|
21
|
+
if (!callback.ok) {
|
|
22
|
+
const status = callback.error === "cloud_error" ? 401 : 400;
|
|
23
|
+
return ctx.json({
|
|
24
|
+
error: callback.error,
|
|
25
|
+
...(callback.cloudError ? { cloudError: callback.cloudError } : {}),
|
|
26
|
+
}, { status });
|
|
27
|
+
}
|
|
28
|
+
let assertion;
|
|
29
|
+
try {
|
|
30
|
+
assertion = await exchangeCloudAdminAuthCode({
|
|
31
|
+
code: callback.code,
|
|
32
|
+
state: callback.state,
|
|
33
|
+
config: options.exchange,
|
|
34
|
+
...(options.fetch ? { fetch: options.fetch } : {}),
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
ctx.context.logger.error("[auth/cloud/callback] Exchange error", error);
|
|
39
|
+
return ctx.json({ error: "Voyant Cloud auth exchange failed" }, { status: 401 });
|
|
40
|
+
}
|
|
41
|
+
const user = await upsertVoyantCloudMirrorUser(options.db, assertion, {
|
|
42
|
+
onUserProvisioning: options.onUserProvisioning,
|
|
43
|
+
});
|
|
44
|
+
const session = (await ctx.context.internalAdapter.createSession(user.id));
|
|
45
|
+
await upsertVoyantCloudSessionLink(options.db, {
|
|
46
|
+
assertion,
|
|
47
|
+
session,
|
|
48
|
+
revalidateAfterSeconds: options.revalidateAfterSeconds ?? DEFAULT_CLOUD_SESSION_REVALIDATE_AFTER_SECONDS,
|
|
49
|
+
});
|
|
50
|
+
await setSessionCookie(ctx, { session, user });
|
|
51
|
+
throw ctx.redirect(callback.state.next);
|
|
52
|
+
}),
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
export async function revalidateVoyantCloudAdminAuthSession({ db, sessionId, config, fetch, now = new Date(), revalidateAfterSeconds = DEFAULT_CLOUD_SESSION_REVALIDATE_AFTER_SECONDS, }) {
|
|
57
|
+
const [sessionLink] = await db
|
|
58
|
+
.select()
|
|
59
|
+
.from(cloudAuthSessionLinks)
|
|
60
|
+
.where(eq(cloudAuthSessionLinks.sessionId, sessionId))
|
|
61
|
+
.limit(1);
|
|
62
|
+
if (!sessionLink || sessionLink.revokedAt) {
|
|
63
|
+
return { ok: false, status: "revoked", reason: "missing_or_revoked_session" };
|
|
64
|
+
}
|
|
65
|
+
if (sessionLink.revalidateAfter > now) {
|
|
66
|
+
return { ok: true, status: "cached" };
|
|
67
|
+
}
|
|
68
|
+
const revalidation = await revalidateCloudAdminAuthAccess({
|
|
69
|
+
workosUserId: sessionLink.providerAccountId,
|
|
70
|
+
config,
|
|
71
|
+
...(fetch ? { fetch } : {}),
|
|
72
|
+
});
|
|
73
|
+
if (revalidation.ok) {
|
|
74
|
+
await markCloudAuthSessionRevalidated(db, {
|
|
75
|
+
sessionId: sessionLink.sessionId,
|
|
76
|
+
userId: sessionLink.userId,
|
|
77
|
+
now,
|
|
78
|
+
revalidateAfterSeconds,
|
|
79
|
+
});
|
|
80
|
+
return { ok: true, status: "active" };
|
|
81
|
+
}
|
|
82
|
+
await revokeCloudAuthUserAccess(db, {
|
|
83
|
+
sessionId: sessionLink.sessionId,
|
|
84
|
+
userId: sessionLink.userId,
|
|
85
|
+
now,
|
|
86
|
+
});
|
|
87
|
+
return {
|
|
88
|
+
ok: false,
|
|
89
|
+
status: "revoked",
|
|
90
|
+
reason: revalidation.reason,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
export async function revalidateVoyantCloudAdminAuthUser({ db, userId, config, fetch, now = new Date(), revalidateAfterSeconds = DEFAULT_CLOUD_SESSION_REVALIDATE_AFTER_SECONDS, }) {
|
|
94
|
+
const [userLink] = await db
|
|
95
|
+
.select()
|
|
96
|
+
.from(cloudAuthUserLinks)
|
|
97
|
+
.where(eq(cloudAuthUserLinks.userId, userId))
|
|
98
|
+
.limit(1);
|
|
99
|
+
if (!userLink || userLink.revokedAt) {
|
|
100
|
+
return { ok: false, status: "revoked", reason: "missing_or_revoked_user" };
|
|
101
|
+
}
|
|
102
|
+
const nextRevalidationAt = userLink.lastRevalidatedAt
|
|
103
|
+
? new Date(userLink.lastRevalidatedAt.getTime() + revalidateAfterSeconds * 1000)
|
|
104
|
+
: null;
|
|
105
|
+
if (nextRevalidationAt && nextRevalidationAt > now) {
|
|
106
|
+
return { ok: true, status: "cached" };
|
|
107
|
+
}
|
|
108
|
+
const revalidation = await revalidateCloudAdminAuthAccess({
|
|
109
|
+
workosUserId: userLink.providerAccountId,
|
|
110
|
+
config,
|
|
111
|
+
...(fetch ? { fetch } : {}),
|
|
112
|
+
});
|
|
113
|
+
if (revalidation.ok) {
|
|
114
|
+
await markCloudAuthUserRevalidated(db, {
|
|
115
|
+
userId: userLink.userId,
|
|
116
|
+
now,
|
|
117
|
+
});
|
|
118
|
+
return { ok: true, status: "active" };
|
|
119
|
+
}
|
|
120
|
+
await revokeCloudAuthUserAccess(db, {
|
|
121
|
+
userId: userLink.userId,
|
|
122
|
+
now,
|
|
123
|
+
});
|
|
124
|
+
return {
|
|
125
|
+
ok: false,
|
|
126
|
+
status: "revoked",
|
|
127
|
+
reason: revalidation.reason,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
async function upsertVoyantCloudMirrorUser(db, assertion, options = {}) {
|
|
131
|
+
const now = new Date();
|
|
132
|
+
const providerAccountId = assertion.workosUserId;
|
|
133
|
+
const displayName = cloudAssertionDisplayName(assertion);
|
|
134
|
+
const existingUser = await findCloudMirrorUser(db, providerAccountId, assertion.email, assertion.emailVerified);
|
|
135
|
+
const isNewUser = !existingUser;
|
|
136
|
+
const userId = existingUser?.id ?? crypto.randomUUID();
|
|
137
|
+
if (existingUser) {
|
|
138
|
+
await db
|
|
139
|
+
.update(authUser)
|
|
140
|
+
.set({
|
|
141
|
+
name: displayName,
|
|
142
|
+
email: assertion.email,
|
|
143
|
+
emailVerified: assertion.emailVerified,
|
|
144
|
+
image: assertion.image ?? null,
|
|
145
|
+
updatedAt: now,
|
|
146
|
+
})
|
|
147
|
+
.where(eq(authUser.id, existingUser.id));
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
await db.insert(authUser).values({
|
|
151
|
+
id: userId,
|
|
152
|
+
name: displayName,
|
|
153
|
+
email: assertion.email,
|
|
154
|
+
emailVerified: assertion.emailVerified,
|
|
155
|
+
image: assertion.image ?? null,
|
|
156
|
+
createdAt: now,
|
|
157
|
+
updatedAt: now,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
await db
|
|
161
|
+
.insert(authAccount)
|
|
162
|
+
.values({
|
|
163
|
+
id: cloudAuthAccountId(providerAccountId),
|
|
164
|
+
userId,
|
|
165
|
+
accountId: providerAccountId,
|
|
166
|
+
providerId: VOYANT_CLOUD_PROVIDER_ID,
|
|
167
|
+
createdAt: now,
|
|
168
|
+
updatedAt: now,
|
|
169
|
+
})
|
|
170
|
+
.onConflictDoUpdate({
|
|
171
|
+
target: [authAccount.providerId, authAccount.accountId],
|
|
172
|
+
set: {
|
|
173
|
+
userId,
|
|
174
|
+
updatedAt: now,
|
|
175
|
+
},
|
|
176
|
+
});
|
|
177
|
+
await upsertVoyantCloudUserLink(db, userId, assertion, now);
|
|
178
|
+
await provisionCurrentUserProfile(db, {
|
|
179
|
+
userId,
|
|
180
|
+
name: displayName,
|
|
181
|
+
image: assertion.image,
|
|
182
|
+
isSuperAdmin: await isFirstAuthUser(db),
|
|
183
|
+
});
|
|
184
|
+
const [user] = await db
|
|
185
|
+
.select({
|
|
186
|
+
id: authUser.id,
|
|
187
|
+
name: authUser.name,
|
|
188
|
+
email: authUser.email,
|
|
189
|
+
emailVerified: authUser.emailVerified,
|
|
190
|
+
image: authUser.image,
|
|
191
|
+
createdAt: authUser.createdAt,
|
|
192
|
+
updatedAt: authUser.updatedAt,
|
|
193
|
+
})
|
|
194
|
+
.from(authUser)
|
|
195
|
+
.where(eq(authUser.id, userId))
|
|
196
|
+
.limit(1);
|
|
197
|
+
if (!user?.email) {
|
|
198
|
+
throw new Error("Voyant Cloud auth mirror user was not provisioned");
|
|
199
|
+
}
|
|
200
|
+
const provisionedUser = {
|
|
201
|
+
id: user.id,
|
|
202
|
+
name: user.name,
|
|
203
|
+
email: user.email,
|
|
204
|
+
emailVerified: user.emailVerified,
|
|
205
|
+
image: user.image,
|
|
206
|
+
createdAt: user.createdAt,
|
|
207
|
+
updatedAt: user.updatedAt,
|
|
208
|
+
};
|
|
209
|
+
await options.onUserProvisioning?.({
|
|
210
|
+
db,
|
|
211
|
+
assertion,
|
|
212
|
+
user: provisionedUser,
|
|
213
|
+
isNewUser,
|
|
214
|
+
provider: {
|
|
215
|
+
providerId: VOYANT_CLOUD_PROVIDER_ID,
|
|
216
|
+
providerAccountId,
|
|
217
|
+
},
|
|
218
|
+
});
|
|
219
|
+
return provisionedUser;
|
|
220
|
+
}
|
|
221
|
+
async function findCloudMirrorUser(db, providerAccountId, email, emailVerified) {
|
|
222
|
+
const [linked] = await db
|
|
223
|
+
.select({ id: authUser.id })
|
|
224
|
+
.from(cloudAuthUserLinks)
|
|
225
|
+
.innerJoin(authUser, eq(authUser.id, cloudAuthUserLinks.userId))
|
|
226
|
+
.where(and(eq(cloudAuthUserLinks.providerId, VOYANT_CLOUD_PROVIDER_ID), eq(cloudAuthUserLinks.providerAccountId, providerAccountId)))
|
|
227
|
+
.limit(1);
|
|
228
|
+
if (linked)
|
|
229
|
+
return linked;
|
|
230
|
+
const [account] = await db
|
|
231
|
+
.select({ id: authUser.id })
|
|
232
|
+
.from(authAccount)
|
|
233
|
+
.innerJoin(authUser, eq(authUser.id, authAccount.userId))
|
|
234
|
+
.where(and(eq(authAccount.providerId, VOYANT_CLOUD_PROVIDER_ID), eq(authAccount.accountId, providerAccountId)))
|
|
235
|
+
.limit(1);
|
|
236
|
+
if (account)
|
|
237
|
+
return account;
|
|
238
|
+
if (!email || emailVerified !== true)
|
|
239
|
+
return null;
|
|
240
|
+
const [emailUser] = await db
|
|
241
|
+
.select({ id: authUser.id })
|
|
242
|
+
.from(authUser)
|
|
243
|
+
.where(eq(authUser.email, email))
|
|
244
|
+
.limit(1);
|
|
245
|
+
return emailUser ?? null;
|
|
246
|
+
}
|
|
247
|
+
function cloudAuthUserLinkValues(userId, assertion, now) {
|
|
248
|
+
return {
|
|
249
|
+
userId,
|
|
250
|
+
providerId: VOYANT_CLOUD_PROVIDER_ID,
|
|
251
|
+
providerAccountId: assertion.workosUserId,
|
|
252
|
+
deploymentId: assertion.deploymentId,
|
|
253
|
+
platformOrganizationId: assertion.platformOrganizationId,
|
|
254
|
+
workosOrganizationId: assertion.workosOrganizationId,
|
|
255
|
+
membershipId: assertion.membershipId ?? null,
|
|
256
|
+
roleSlug: assertion.roleSlug ?? null,
|
|
257
|
+
roleName: assertion.roleName ?? null,
|
|
258
|
+
surfaces: assertion.surfaces ?? [],
|
|
259
|
+
lastAssertionAt: new Date(assertion.iat * 1000),
|
|
260
|
+
lastRevalidatedAt: now,
|
|
261
|
+
revokedAt: null,
|
|
262
|
+
updatedAt: now,
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
async function upsertVoyantCloudUserLink(db, userId, assertion, now) {
|
|
266
|
+
const values = cloudAuthUserLinkValues(userId, assertion, now);
|
|
267
|
+
const [existingForUser] = await db
|
|
268
|
+
.select({ userId: cloudAuthUserLinks.userId })
|
|
269
|
+
.from(cloudAuthUserLinks)
|
|
270
|
+
.where(eq(cloudAuthUserLinks.userId, userId))
|
|
271
|
+
.limit(1);
|
|
272
|
+
if (existingForUser) {
|
|
273
|
+
await db
|
|
274
|
+
.update(cloudAuthUserLinks)
|
|
275
|
+
.set({
|
|
276
|
+
...values,
|
|
277
|
+
userId,
|
|
278
|
+
revokedAt: null,
|
|
279
|
+
})
|
|
280
|
+
.where(eq(cloudAuthUserLinks.userId, userId));
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
await db
|
|
284
|
+
.insert(cloudAuthUserLinks)
|
|
285
|
+
.values(values)
|
|
286
|
+
.onConflictDoUpdate({
|
|
287
|
+
target: [cloudAuthUserLinks.providerId, cloudAuthUserLinks.providerAccountId],
|
|
288
|
+
set: {
|
|
289
|
+
...values,
|
|
290
|
+
userId,
|
|
291
|
+
revokedAt: null,
|
|
292
|
+
},
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
async function upsertVoyantCloudSessionLink(db, input) {
|
|
296
|
+
const now = new Date();
|
|
297
|
+
await db.insert(cloudAuthSessionLinks).values({
|
|
298
|
+
sessionId: input.session.id,
|
|
299
|
+
userId: input.session.userId,
|
|
300
|
+
providerId: VOYANT_CLOUD_PROVIDER_ID,
|
|
301
|
+
providerAccountId: input.assertion.workosUserId,
|
|
302
|
+
deploymentId: input.assertion.deploymentId,
|
|
303
|
+
revalidateAfter: new Date(now.getTime() + input.revalidateAfterSeconds * 1000),
|
|
304
|
+
lastRevalidatedAt: now,
|
|
305
|
+
revokedAt: null,
|
|
306
|
+
updatedAt: now,
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
function cloudAssertionDisplayName(assertion) {
|
|
310
|
+
const fromParts = [assertion.firstName, assertion.lastName]
|
|
311
|
+
.map((part) => part?.trim())
|
|
312
|
+
.filter((part) => Boolean(part))
|
|
313
|
+
.join(" ");
|
|
314
|
+
return assertion.name?.trim() || fromParts || assertion.email;
|
|
315
|
+
}
|
|
316
|
+
function cloudAuthAccountId(providerAccountId) {
|
|
317
|
+
return `acc_${VOYANT_CLOUD_PROVIDER_ID}_${providerAccountId}`;
|
|
318
|
+
}
|
|
319
|
+
//# sourceMappingURL=cloud-admin-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-admin-session.js","sourceRoot":"","sources":["../src/cloud-admin-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { CloudAdminAuthState } from "./state.js";
|
|
2
|
+
export declare const VOYANT_CLOUD_ADMIN_ASSERTION_ISSUER = "https://api.voyantjs.com";
|
|
3
|
+
export type CloudAdminAssertion = {
|
|
4
|
+
iss: typeof VOYANT_CLOUD_ADMIN_ASSERTION_ISSUER;
|
|
5
|
+
aud: string;
|
|
6
|
+
sub: string;
|
|
7
|
+
email: string;
|
|
8
|
+
emailVerified: boolean;
|
|
9
|
+
name?: string | null;
|
|
10
|
+
firstName?: string | null;
|
|
11
|
+
lastName?: string | null;
|
|
12
|
+
image?: string | null;
|
|
13
|
+
workosUserId: string;
|
|
14
|
+
workosOrganizationId: string;
|
|
15
|
+
platformOrganizationId: string;
|
|
16
|
+
platformOrganizationSlug: string;
|
|
17
|
+
deploymentId: string;
|
|
18
|
+
appId?: string | null;
|
|
19
|
+
environment?: string | null;
|
|
20
|
+
membershipId?: string | null;
|
|
21
|
+
roleSlug?: string | null;
|
|
22
|
+
roleName?: string | null;
|
|
23
|
+
surfaces?: string[] | null;
|
|
24
|
+
nonce: string;
|
|
25
|
+
iat: number;
|
|
26
|
+
exp: number;
|
|
27
|
+
};
|
|
28
|
+
export type CloudAdminAuthExchangeConfig = {
|
|
29
|
+
exchangeUrl: string;
|
|
30
|
+
deploymentId: string;
|
|
31
|
+
clientToken: string;
|
|
32
|
+
assertionJwksUrl: string;
|
|
33
|
+
assertionAudience: string;
|
|
34
|
+
assertionIssuer?: typeof VOYANT_CLOUD_ADMIN_ASSERTION_ISSUER;
|
|
35
|
+
};
|
|
36
|
+
export type CloudAdminAuthRevalidateConfig = {
|
|
37
|
+
revalidateUrl: string;
|
|
38
|
+
deploymentId: string;
|
|
39
|
+
clientToken: string;
|
|
40
|
+
};
|
|
41
|
+
export type ExchangeCloudAdminAuthCodeInput = {
|
|
42
|
+
code: string;
|
|
43
|
+
state: CloudAdminAuthState;
|
|
44
|
+
config: CloudAdminAuthExchangeConfig;
|
|
45
|
+
fetch?: typeof fetch;
|
|
46
|
+
now?: Date;
|
|
47
|
+
};
|
|
48
|
+
export type RevalidateCloudAdminAuthAccessInput = {
|
|
49
|
+
workosUserId: string;
|
|
50
|
+
config: CloudAdminAuthRevalidateConfig;
|
|
51
|
+
fetch?: typeof fetch;
|
|
52
|
+
};
|
|
53
|
+
export type CloudAdminAuthRevalidationResult = {
|
|
54
|
+
ok: boolean;
|
|
55
|
+
status: "active" | "revoked";
|
|
56
|
+
reason?: string;
|
|
57
|
+
};
|
|
58
|
+
export declare function exchangeCloudAdminAuthCode({ code, state, config, fetch: fetchFn, now, }: ExchangeCloudAdminAuthCodeInput): Promise<CloudAdminAssertion>;
|
|
59
|
+
export declare function revalidateCloudAdminAuthAccess({ workosUserId, config, fetch: fetchFn, }: RevalidateCloudAdminAuthAccessInput): Promise<CloudAdminAuthRevalidationResult>;
|
|
60
|
+
export declare function verifyCloudAdminAssertion(assertion: string, options: {
|
|
61
|
+
jwksUrl: string;
|
|
62
|
+
issuer: typeof VOYANT_CLOUD_ADMIN_ASSERTION_ISSUER;
|
|
63
|
+
audience: string;
|
|
64
|
+
deploymentId: string;
|
|
65
|
+
nonce: string;
|
|
66
|
+
fetch?: typeof fetch;
|
|
67
|
+
now?: Date;
|
|
68
|
+
}): Promise<CloudAdminAssertion>;
|
|
69
|
+
//# sourceMappingURL=assertion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assertion.d.ts","sourceRoot":"","sources":["../../src/cloud-broker/assertion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import { base64UrlDecode, isRecord, normalizeAbsoluteUrl, toArrayBuffer } from "./utils.js";
|
|
2
|
+
export const VOYANT_CLOUD_ADMIN_ASSERTION_ISSUER = "https://api.voyantjs.com";
|
|
3
|
+
export async function exchangeCloudAdminAuthCode({ code, state, config, fetch: fetchFn = fetch, now = new Date(), }) {
|
|
4
|
+
validateExchangeConfig(config);
|
|
5
|
+
const response = await fetchFn(config.exchangeUrl, {
|
|
6
|
+
method: "POST",
|
|
7
|
+
headers: {
|
|
8
|
+
Authorization: `Bearer ${config.clientToken}`,
|
|
9
|
+
"Content-Type": "application/json",
|
|
10
|
+
},
|
|
11
|
+
body: JSON.stringify({
|
|
12
|
+
code,
|
|
13
|
+
deploymentId: config.deploymentId,
|
|
14
|
+
redirectUri: state.redirectUri,
|
|
15
|
+
nonce: state.nonce,
|
|
16
|
+
}),
|
|
17
|
+
});
|
|
18
|
+
if (!response.ok) {
|
|
19
|
+
throw new Error(`Voyant Cloud auth exchange failed with HTTP ${response.status}`);
|
|
20
|
+
}
|
|
21
|
+
const body = (await response.json());
|
|
22
|
+
if (!isRecord(body) || typeof body.assertion !== "string") {
|
|
23
|
+
throw new Error("Voyant Cloud auth exchange response is missing assertion");
|
|
24
|
+
}
|
|
25
|
+
return verifyCloudAdminAssertion(body.assertion, {
|
|
26
|
+
jwksUrl: config.assertionJwksUrl,
|
|
27
|
+
issuer: config.assertionIssuer ?? VOYANT_CLOUD_ADMIN_ASSERTION_ISSUER,
|
|
28
|
+
audience: config.assertionAudience,
|
|
29
|
+
deploymentId: config.deploymentId,
|
|
30
|
+
nonce: state.nonce,
|
|
31
|
+
fetch: fetchFn,
|
|
32
|
+
now,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
export async function revalidateCloudAdminAuthAccess({ workosUserId, config, fetch: fetchFn = fetch, }) {
|
|
36
|
+
validateRevalidateConfig(config);
|
|
37
|
+
const response = await fetchFn(config.revalidateUrl, {
|
|
38
|
+
method: "POST",
|
|
39
|
+
headers: {
|
|
40
|
+
Authorization: `Bearer ${config.clientToken}`,
|
|
41
|
+
"Content-Type": "application/json",
|
|
42
|
+
},
|
|
43
|
+
body: JSON.stringify({
|
|
44
|
+
deploymentId: config.deploymentId,
|
|
45
|
+
workosUserId,
|
|
46
|
+
}),
|
|
47
|
+
});
|
|
48
|
+
const body = (await response.json().catch(() => null));
|
|
49
|
+
if (!response.ok && response.status !== 403) {
|
|
50
|
+
throw new Error(`Voyant Cloud auth revalidation failed with HTTP ${response.status}`);
|
|
51
|
+
}
|
|
52
|
+
if (!isRecord(body) ||
|
|
53
|
+
typeof body.ok !== "boolean" ||
|
|
54
|
+
(body.status !== "active" && body.status !== "revoked")) {
|
|
55
|
+
throw new Error("Voyant Cloud auth revalidation response is invalid");
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
ok: body.ok,
|
|
59
|
+
status: body.status,
|
|
60
|
+
reason: optionalString(body.reason) ?? undefined,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
export async function verifyCloudAdminAssertion(assertion, options) {
|
|
64
|
+
const { header, payload, signingInput, signature } = parseCompactJws(assertion);
|
|
65
|
+
if (header.alg !== "RS256") {
|
|
66
|
+
throw new Error(`Unsupported Voyant Cloud auth assertion algorithm: ${header.alg}`);
|
|
67
|
+
}
|
|
68
|
+
const jwk = await fetchJwksKey(options.jwksUrl, header.kid, options.fetch ?? fetch);
|
|
69
|
+
const key = await globalThis.crypto.subtle.importKey("jwk", jwk, { name: "RSASSA-PKCS1-v1_5", hash: "SHA-256" }, false, ["verify"]);
|
|
70
|
+
const verified = await globalThis.crypto.subtle.verify({ name: "RSASSA-PKCS1-v1_5" }, key, toArrayBuffer(signature), toArrayBuffer(new TextEncoder().encode(signingInput)));
|
|
71
|
+
if (!verified) {
|
|
72
|
+
throw new Error("Invalid Voyant Cloud auth assertion signature");
|
|
73
|
+
}
|
|
74
|
+
const assertionPayload = parseCloudAdminAssertionPayload(payload);
|
|
75
|
+
validateCloudAdminAssertionClaims(assertionPayload, {
|
|
76
|
+
issuer: options.issuer,
|
|
77
|
+
audience: options.audience,
|
|
78
|
+
deploymentId: options.deploymentId,
|
|
79
|
+
nonce: options.nonce,
|
|
80
|
+
now: options.now ?? new Date(),
|
|
81
|
+
});
|
|
82
|
+
return assertionPayload;
|
|
83
|
+
}
|
|
84
|
+
function validateExchangeConfig(config) {
|
|
85
|
+
normalizeAbsoluteUrl(config.exchangeUrl, "exchangeUrl");
|
|
86
|
+
normalizeAbsoluteUrl(config.assertionJwksUrl, "assertionJwksUrl");
|
|
87
|
+
if (!config.deploymentId.trim()) {
|
|
88
|
+
throw new Error("Voyant Cloud auth exchange requires deploymentId");
|
|
89
|
+
}
|
|
90
|
+
if (!config.clientToken.trim()) {
|
|
91
|
+
throw new Error("Voyant Cloud auth exchange requires clientToken");
|
|
92
|
+
}
|
|
93
|
+
if (!config.assertionAudience.trim()) {
|
|
94
|
+
throw new Error("Voyant Cloud auth exchange requires assertionAudience");
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
function validateRevalidateConfig(config) {
|
|
98
|
+
normalizeAbsoluteUrl(config.revalidateUrl, "revalidateUrl");
|
|
99
|
+
if (!config.deploymentId.trim()) {
|
|
100
|
+
throw new Error("Voyant Cloud auth revalidation requires deploymentId");
|
|
101
|
+
}
|
|
102
|
+
if (!config.clientToken.trim()) {
|
|
103
|
+
throw new Error("Voyant Cloud auth revalidation requires clientToken");
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function parseCompactJws(assertion) {
|
|
107
|
+
const [encodedHeader, encodedPayload, encodedSignature, ...rest] = assertion.split(".");
|
|
108
|
+
if (!encodedHeader || !encodedPayload || !encodedSignature || rest.length > 0) {
|
|
109
|
+
throw new Error("Voyant Cloud auth assertion must be a compact JWS");
|
|
110
|
+
}
|
|
111
|
+
const header = JSON.parse(new TextDecoder().decode(base64UrlDecode(encodedHeader)));
|
|
112
|
+
if (!isRecord(header) || header.alg !== "RS256" || typeof header.kid !== "string") {
|
|
113
|
+
throw new Error("Voyant Cloud auth assertion header is invalid");
|
|
114
|
+
}
|
|
115
|
+
return {
|
|
116
|
+
header: { alg: header.alg, kid: header.kid, typ: optionalString(header.typ) ?? undefined },
|
|
117
|
+
payload: JSON.parse(new TextDecoder().decode(base64UrlDecode(encodedPayload))),
|
|
118
|
+
signingInput: `${encodedHeader}.${encodedPayload}`,
|
|
119
|
+
signature: base64UrlDecode(encodedSignature),
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
async function fetchJwksKey(jwksUrl, kid, fetchFn) {
|
|
123
|
+
const response = await fetchFn(jwksUrl);
|
|
124
|
+
if (!response.ok) {
|
|
125
|
+
throw new Error(`Voyant Cloud auth JWKS fetch failed with HTTP ${response.status}`);
|
|
126
|
+
}
|
|
127
|
+
const body = (await response.json());
|
|
128
|
+
if (!isJsonWebKeySet(body)) {
|
|
129
|
+
throw new Error("Voyant Cloud auth JWKS response is invalid");
|
|
130
|
+
}
|
|
131
|
+
const key = body.keys.find((candidate) => candidate.kid === kid);
|
|
132
|
+
if (!key) {
|
|
133
|
+
throw new Error("Voyant Cloud auth assertion key was not found in JWKS");
|
|
134
|
+
}
|
|
135
|
+
if (key.kty !== "RSA") {
|
|
136
|
+
throw new Error("Voyant Cloud auth assertion key must be RSA");
|
|
137
|
+
}
|
|
138
|
+
return key;
|
|
139
|
+
}
|
|
140
|
+
function parseCloudAdminAssertionPayload(payload) {
|
|
141
|
+
if (!isRecord(payload)) {
|
|
142
|
+
throw new Error("Voyant Cloud auth assertion payload is invalid");
|
|
143
|
+
}
|
|
144
|
+
return {
|
|
145
|
+
iss: payload.iss,
|
|
146
|
+
aud: requiredString(payload.aud, "aud"),
|
|
147
|
+
sub: requiredString(payload.sub, "sub"),
|
|
148
|
+
email: requiredString(payload.email, "email"),
|
|
149
|
+
emailVerified: requiredBoolean(payload.emailVerified, "emailVerified"),
|
|
150
|
+
name: optionalString(payload.name),
|
|
151
|
+
firstName: optionalString(payload.firstName),
|
|
152
|
+
lastName: optionalString(payload.lastName),
|
|
153
|
+
image: optionalString(payload.image),
|
|
154
|
+
workosUserId: requiredString(payload.workosUserId, "workosUserId"),
|
|
155
|
+
workosOrganizationId: requiredString(payload.workosOrganizationId, "workosOrganizationId"),
|
|
156
|
+
platformOrganizationId: requiredString(payload.platformOrganizationId, "platformOrganizationId"),
|
|
157
|
+
platformOrganizationSlug: requiredString(payload.platformOrganizationSlug, "platformOrganizationSlug"),
|
|
158
|
+
deploymentId: requiredString(payload.deploymentId, "deploymentId"),
|
|
159
|
+
appId: optionalString(payload.appId),
|
|
160
|
+
environment: optionalString(payload.environment),
|
|
161
|
+
membershipId: optionalString(payload.membershipId),
|
|
162
|
+
roleSlug: optionalString(payload.roleSlug),
|
|
163
|
+
roleName: optionalString(payload.roleName),
|
|
164
|
+
surfaces: optionalStringArray(payload.surfaces),
|
|
165
|
+
nonce: requiredString(payload.nonce, "nonce"),
|
|
166
|
+
iat: requiredNumber(payload.iat, "iat"),
|
|
167
|
+
exp: requiredNumber(payload.exp, "exp"),
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
function validateCloudAdminAssertionClaims(assertion, expected) {
|
|
171
|
+
const nowSeconds = Math.floor(expected.now.getTime() / 1000);
|
|
172
|
+
if (assertion.iss !== expected.issuer) {
|
|
173
|
+
throw new Error("Voyant Cloud auth assertion issuer mismatch");
|
|
174
|
+
}
|
|
175
|
+
if (assertion.aud !== expected.audience) {
|
|
176
|
+
throw new Error("Voyant Cloud auth assertion audience mismatch");
|
|
177
|
+
}
|
|
178
|
+
if (assertion.deploymentId !== expected.deploymentId) {
|
|
179
|
+
throw new Error("Voyant Cloud auth assertion deployment mismatch");
|
|
180
|
+
}
|
|
181
|
+
if (assertion.nonce !== expected.nonce) {
|
|
182
|
+
throw new Error("Voyant Cloud auth assertion nonce mismatch");
|
|
183
|
+
}
|
|
184
|
+
if (assertion.exp <= nowSeconds) {
|
|
185
|
+
throw new Error("Voyant Cloud auth assertion is expired");
|
|
186
|
+
}
|
|
187
|
+
if (assertion.iat > nowSeconds + 60) {
|
|
188
|
+
throw new Error("Voyant Cloud auth assertion iat is in the future");
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
function isJsonWebKeySet(value) {
|
|
192
|
+
return isRecord(value) && Array.isArray(value.keys) && value.keys.every(isJwksKey);
|
|
193
|
+
}
|
|
194
|
+
function isJwksKey(value) {
|
|
195
|
+
return isRecord(value) && typeof value.kid === "string" && typeof value.kty === "string";
|
|
196
|
+
}
|
|
197
|
+
function requiredString(value, field) {
|
|
198
|
+
if (typeof value !== "string" || value.length === 0) {
|
|
199
|
+
throw new Error(`Voyant Cloud auth assertion ${field} must be a string`);
|
|
200
|
+
}
|
|
201
|
+
return value;
|
|
202
|
+
}
|
|
203
|
+
function optionalString(value) {
|
|
204
|
+
return typeof value === "string" && value.length > 0 ? value : null;
|
|
205
|
+
}
|
|
206
|
+
function requiredBoolean(value, field) {
|
|
207
|
+
if (typeof value !== "boolean") {
|
|
208
|
+
throw new Error(`Voyant Cloud auth assertion ${field} must be a boolean`);
|
|
209
|
+
}
|
|
210
|
+
return value;
|
|
211
|
+
}
|
|
212
|
+
function requiredNumber(value, field) {
|
|
213
|
+
if (typeof value !== "number" || !Number.isFinite(value)) {
|
|
214
|
+
throw new Error(`Voyant Cloud auth assertion ${field} must be a number`);
|
|
215
|
+
}
|
|
216
|
+
return value;
|
|
217
|
+
}
|
|
218
|
+
function optionalStringArray(value) {
|
|
219
|
+
if (value === undefined || value === null)
|
|
220
|
+
return null;
|
|
221
|
+
if (!Array.isArray(value) || value.some((item) => typeof item !== "string")) {
|
|
222
|
+
throw new Error("Voyant Cloud auth assertion surfaces must be an array of strings");
|
|
223
|
+
}
|
|
224
|
+
return value;
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=assertion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assertion.js","sourceRoot":"","sources":["../../src/cloud-broker/assertion.ts"],"names":[],"mappings":"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"}
|