@finueva/auth 0.21.0 → 0.23.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/dist/device.d.ts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +10 -0
- package/dist/server.d.ts +17 -2
- package/dist/server.js +71 -26
- package/dist/{types-sJ_vACZ3.d.ts → types-CgtPkDeO.d.ts} +2 -0
- package/package.json +1 -1
package/dist/device.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $ as PasskeyInventory, At as UpdateOrganizationDisplayInput, B as OrganizationDisplay, C as CreatedOrganizationTeam, Dt as TwoFactorStatus, Ft as AuthErrorCode, G as OrganizationMemberPage, H as OrganizationInvitationPage, It as AuthErrorStatus, J as OrganizationTeam, K as OrganizationPage, Lt as UserApiCredential, Mt as UpdateProfileInput, O as DriveCredential, Pt as AuthError, Rt as UserApiCredentialInput, S as CreatedOrganizationMemberInvitation, St as SocialIdTokenProvider, U as OrganizationMember, V as OrganizationInvitation, W as OrganizationMemberAuthority, X as OrganizationTeamMemberPage, Y as OrganizationTeamDisplay, Z as OrganizationTeamPage, b as CreateOrganizationMemberInvitationInput, c as AuthSessionInventory, i as AuthOrganization, jt as UpdateOrganizationTeamDisplayInput, k as DriveCredentialInput, lt as ReceivedOrganizationInvitation, m as CeremonyHandoffInput, p as CeremonyHandoff, q as OrganizationPageInput, s as AuthSession, ut as ReceivedOrganizationInvitationPage, x as CreatedOrganization, xt as SocialIdTokenInput } from "./types-
|
|
1
|
+
import { $ as PasskeyInventory, At as UpdateOrganizationDisplayInput, B as OrganizationDisplay, C as CreatedOrganizationTeam, Dt as TwoFactorStatus, Ft as AuthErrorCode, G as OrganizationMemberPage, H as OrganizationInvitationPage, It as AuthErrorStatus, J as OrganizationTeam, K as OrganizationPage, Lt as UserApiCredential, Mt as UpdateProfileInput, O as DriveCredential, Pt as AuthError, Rt as UserApiCredentialInput, S as CreatedOrganizationMemberInvitation, St as SocialIdTokenProvider, U as OrganizationMember, V as OrganizationInvitation, W as OrganizationMemberAuthority, X as OrganizationTeamMemberPage, Y as OrganizationTeamDisplay, Z as OrganizationTeamPage, b as CreateOrganizationMemberInvitationInput, c as AuthSessionInventory, i as AuthOrganization, jt as UpdateOrganizationTeamDisplayInput, k as DriveCredentialInput, lt as ReceivedOrganizationInvitation, m as CeremonyHandoffInput, p as CeremonyHandoff, q as OrganizationPageInput, s as AuthSession, ut as ReceivedOrganizationInvitationPage, x as CreatedOrganization, xt as SocialIdTokenInput } from "./types-CgtPkDeO.js";
|
|
2
2
|
//#region src/device.d.ts
|
|
3
3
|
type DeviceAuthorizationErrorCode = "device_access_denied" | "device_authorization_cancelled" | "device_code_expired" | "invalid_device_authorization" | "identity_authority_unavailable";
|
|
4
4
|
declare class DeviceAuthorizationError extends Error {
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $ as PasskeyInventory, A as EnterpriseConnection, At as UpdateOrganizationDisplayInput, B as OrganizationDisplay, C as CreatedOrganizationTeam, Ct as SuspendedOrganizationMember, D as DepartedOrganizationMemberPage, Dt as TwoFactorStatus, E as DepartedOrganizationMember, Et as TwoFactorEnrollment, F as InvitationDecline, Ft as AuthErrorCode, G as OrganizationMemberPage, H as OrganizationInvitationPage, I as OrganizationClosure, It as AuthErrorStatus, J as OrganizationTeam, K as OrganizationPage, L as OrganizationClosureCancelInput, Lt as UserApiCredential, M as EnterpriseConnectionSetup, Mt as UpdateProfileInput, N as FinuevaAuthClient, Nt as WorkspaceSelection, O as DriveCredential, Ot as TwoFactorStepUpInput, P as InvitationAcceptance, Pt as AuthError, Q as OrganizationWorkspaceSelection, R as OrganizationClosureStartInput, Rt as UserApiCredentialInput, S as CreatedOrganizationMemberInvitation, St as SocialIdTokenProvider, T as DeletedOrganizationTeam, Tt as SuspendedOrganizationMemberStatus, U as OrganizationMember, V as OrganizationInvitation, W as OrganizationMemberAuthority, X as OrganizationTeamMemberPage, Y as OrganizationTeamDisplay, Z as OrganizationTeamPage, _ as ClosingOrganization, _t as ScimCredentialIssuance, a as AuthPersistence, at as PlatformRoleApproval, b as CreateOrganizationMemberInvitationInput, bt as SignInInput, c as AuthSessionInventory, ct as PlatformStatus, d as AuthUser, dt as RecentAuthenticationStatus, et as PasskeySummary, f as CanceledOrganizationInvitation, ft as RemovedOrganizationMember, g as CeremonyReturnInput, gt as RotateScimCredentialInput, h as CeremonyRecentAuthenticationRequest, ht as RestoredOrganizationMember, i as AuthOrganization, it as PlatformRoleApplied, j as EnterpriseConnectionAction, jt as UpdateOrganizationTeamDisplayInput, k as DriveCredentialInput, kt as UpdateEnterpriseConnectionInput, l as AuthSessionSummary, lt as ReceivedOrganizationInvitation, m as CeremonyHandoffInput, mt as ResentOrganizationInvitation, n as AddedOrganizationTeamMember, nt as PlatformBootstrapRoleChangeInput, o as AuthPersistenceDriver, ot as PlatformRoleChangeRecentAuthenticationInput, p as CeremonyHandoff, pt as RemovedOrganizationTeamMember, q as OrganizationPageInput, r as AuthClientOptions, rt as PlatformRole, s as AuthSession, st as PlatformRoleFirstApproval, t as AcceptInvitationInput, tt as PersonalWorkspaceSelection, u as AuthState, ut as ReceivedOrganizationInvitationPage, v as ClosingOrganizationList, vt as ScimCredentialState, w as DeclineInvitationInput, wt as SuspendedOrganizationMemberPage, x as CreatedOrganization, xt as SocialIdTokenInput, y as CreateEnterpriseConnectionInput, yt as SendVerificationEmailInput, z as OrganizationDeparture } from "./types-
|
|
1
|
+
import { $ as PasskeyInventory, A as EnterpriseConnection, At as UpdateOrganizationDisplayInput, B as OrganizationDisplay, C as CreatedOrganizationTeam, Ct as SuspendedOrganizationMember, D as DepartedOrganizationMemberPage, Dt as TwoFactorStatus, E as DepartedOrganizationMember, Et as TwoFactorEnrollment, F as InvitationDecline, Ft as AuthErrorCode, G as OrganizationMemberPage, H as OrganizationInvitationPage, I as OrganizationClosure, It as AuthErrorStatus, J as OrganizationTeam, K as OrganizationPage, L as OrganizationClosureCancelInput, Lt as UserApiCredential, M as EnterpriseConnectionSetup, Mt as UpdateProfileInput, N as FinuevaAuthClient, Nt as WorkspaceSelection, O as DriveCredential, Ot as TwoFactorStepUpInput, P as InvitationAcceptance, Pt as AuthError, Q as OrganizationWorkspaceSelection, R as OrganizationClosureStartInput, Rt as UserApiCredentialInput, S as CreatedOrganizationMemberInvitation, St as SocialIdTokenProvider, T as DeletedOrganizationTeam, Tt as SuspendedOrganizationMemberStatus, U as OrganizationMember, V as OrganizationInvitation, W as OrganizationMemberAuthority, X as OrganizationTeamMemberPage, Y as OrganizationTeamDisplay, Z as OrganizationTeamPage, _ as ClosingOrganization, _t as ScimCredentialIssuance, a as AuthPersistence, at as PlatformRoleApproval, b as CreateOrganizationMemberInvitationInput, bt as SignInInput, c as AuthSessionInventory, ct as PlatformStatus, d as AuthUser, dt as RecentAuthenticationStatus, et as PasskeySummary, f as CanceledOrganizationInvitation, ft as RemovedOrganizationMember, g as CeremonyReturnInput, gt as RotateScimCredentialInput, h as CeremonyRecentAuthenticationRequest, ht as RestoredOrganizationMember, i as AuthOrganization, it as PlatformRoleApplied, j as EnterpriseConnectionAction, jt as UpdateOrganizationTeamDisplayInput, k as DriveCredentialInput, kt as UpdateEnterpriseConnectionInput, l as AuthSessionSummary, lt as ReceivedOrganizationInvitation, m as CeremonyHandoffInput, mt as ResentOrganizationInvitation, n as AddedOrganizationTeamMember, nt as PlatformBootstrapRoleChangeInput, o as AuthPersistenceDriver, ot as PlatformRoleChangeRecentAuthenticationInput, p as CeremonyHandoff, pt as RemovedOrganizationTeamMember, q as OrganizationPageInput, r as AuthClientOptions, rt as PlatformRole, s as AuthSession, st as PlatformRoleFirstApproval, t as AcceptInvitationInput, tt as PersonalWorkspaceSelection, u as AuthState, ut as ReceivedOrganizationInvitationPage, v as ClosingOrganizationList, vt as ScimCredentialState, w as DeclineInvitationInput, wt as SuspendedOrganizationMemberPage, x as CreatedOrganization, xt as SocialIdTokenInput, y as CreateEnterpriseConnectionInput, yt as SendVerificationEmailInput, z as OrganizationDeparture } from "./types-CgtPkDeO.js";
|
|
2
2
|
//#region src/client.d.ts
|
|
3
3
|
declare function createAuthClient(options: AuthClientOptions): FinuevaAuthClient;
|
|
4
4
|
//#endregion
|
package/dist/index.js
CHANGED
|
@@ -6250,6 +6250,16 @@ function createAuthClient(options) {
|
|
|
6250
6250
|
if (!result.session) throw new AuthError("authentication_required", 401);
|
|
6251
6251
|
return result.session;
|
|
6252
6252
|
},
|
|
6253
|
+
async approveEnterpriseLink(password) {
|
|
6254
|
+
const body = { password: normalizePassword(password, "password", 8) };
|
|
6255
|
+
const result = await runAccountMutation(async () => {
|
|
6256
|
+
const value = await accountRequest("enterprise/link/approve", body);
|
|
6257
|
+
if (!value || typeof value !== "object" || !("linked" in value) || value.linked !== true) throw new AuthError("identity_authority_unavailable", 503);
|
|
6258
|
+
return value;
|
|
6259
|
+
});
|
|
6260
|
+
if (!result.session) throw new AuthError("authentication_required", 401);
|
|
6261
|
+
return result.session;
|
|
6262
|
+
},
|
|
6253
6263
|
async verifyTwoFactor(code) {
|
|
6254
6264
|
const normalized = normalizeTwoFactorCode(code);
|
|
6255
6265
|
const result = await runAccountMutation(() => accountRequest(normalized.route, { code: normalized.code }, fromTwoFactorAuthorityError));
|
package/dist/server.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { At as UpdateOrganizationDisplayInput, B as OrganizationDisplay, C as CreatedOrganizationTeam, F as InvitationDecline, Ft as AuthErrorCode, G as OrganizationMemberPage, H as OrganizationInvitationPage, It as AuthErrorStatus, J as OrganizationTeam, K as OrganizationPage, Lt as UserApiCredential, Nt as WorkspaceSelection, O as DriveCredential, P as InvitationAcceptance, Pt as AuthError, Q as OrganizationWorkspaceSelection, Rt as UserApiCredentialInput, S as CreatedOrganizationMemberInvitation, St as SocialIdTokenProvider, T as DeletedOrganizationTeam, U as OrganizationMember, V as OrganizationInvitation, W as OrganizationMemberAuthority, X as OrganizationTeamMemberPage, Y as OrganizationTeamDisplay, Z as OrganizationTeamPage, b as CreateOrganizationMemberInvitationInput, d as AuthUser, f as CanceledOrganizationInvitation, ft as RemovedOrganizationMember, i as AuthOrganization, jt as UpdateOrganizationTeamDisplayInput, k as DriveCredentialInput, lt as ReceivedOrganizationInvitation, mt as ResentOrganizationInvitation, n as AddedOrganizationTeamMember, pt as RemovedOrganizationTeamMember, q as OrganizationPageInput, s as AuthSession, t as AcceptInvitationInput, tt as PersonalWorkspaceSelection, ut as ReceivedOrganizationInvitationPage, w as DeclineInvitationInput, x as CreatedOrganization, xt as SocialIdTokenInput, z as OrganizationDeparture } from "./types-
|
|
1
|
+
import { At as UpdateOrganizationDisplayInput, B as OrganizationDisplay, C as CreatedOrganizationTeam, F as InvitationDecline, Ft as AuthErrorCode, G as OrganizationMemberPage, H as OrganizationInvitationPage, It as AuthErrorStatus, J as OrganizationTeam, K as OrganizationPage, Lt as UserApiCredential, Nt as WorkspaceSelection, O as DriveCredential, P as InvitationAcceptance, Pt as AuthError, Q as OrganizationWorkspaceSelection, Rt as UserApiCredentialInput, S as CreatedOrganizationMemberInvitation, St as SocialIdTokenProvider, T as DeletedOrganizationTeam, U as OrganizationMember, V as OrganizationInvitation, W as OrganizationMemberAuthority, X as OrganizationTeamMemberPage, Y as OrganizationTeamDisplay, Z as OrganizationTeamPage, b as CreateOrganizationMemberInvitationInput, d as AuthUser, f as CanceledOrganizationInvitation, ft as RemovedOrganizationMember, i as AuthOrganization, jt as UpdateOrganizationTeamDisplayInput, k as DriveCredentialInput, lt as ReceivedOrganizationInvitation, mt as ResentOrganizationInvitation, n as AddedOrganizationTeamMember, pt as RemovedOrganizationTeamMember, q as OrganizationPageInput, s as AuthSession, t as AcceptInvitationInput, tt as PersonalWorkspaceSelection, ut as ReceivedOrganizationInvitationPage, w as DeclineInvitationInput, x as CreatedOrganization, xt as SocialIdTokenInput, z as OrganizationDeparture } from "./types-CgtPkDeO.js";
|
|
2
2
|
//#region src/google-recovery.d.ts
|
|
3
3
|
interface GoogleAccountRecoveryInput {
|
|
4
4
|
idToken: {
|
|
@@ -65,6 +65,20 @@ interface ResolveMembershipInput {
|
|
|
65
65
|
organizationId: string;
|
|
66
66
|
userId: string;
|
|
67
67
|
}
|
|
68
|
+
interface ResolveMembershipBatchInput {
|
|
69
|
+
organizationId: string;
|
|
70
|
+
userIds: string[];
|
|
71
|
+
/** Only membership in these known teams is returned. Omitted teams are not evaluated. */
|
|
72
|
+
teamIds?: string[];
|
|
73
|
+
}
|
|
74
|
+
interface ResolvedMembershipBatch {
|
|
75
|
+
organizationId: string;
|
|
76
|
+
memberships: Array<{
|
|
77
|
+
userId: string;
|
|
78
|
+
membership: ResolvedMembership | null;
|
|
79
|
+
matchingTeamIds: string[];
|
|
80
|
+
}>;
|
|
81
|
+
}
|
|
68
82
|
type ResolvedMembershipRole = "admin" | "member" | "owner";
|
|
69
83
|
interface ResolvedMembership {
|
|
70
84
|
checkedAt: string;
|
|
@@ -78,6 +92,7 @@ interface ResolvedMembership {
|
|
|
78
92
|
}
|
|
79
93
|
interface FinuevaMembershipResolverAuth {
|
|
80
94
|
resolveMembership(input: ResolveMembershipInput, clientAssertion: string): Promise<ResolvedMembership | null>;
|
|
95
|
+
resolveMembershipBatch(input: ResolveMembershipBatchInput, clientAssertion: string): Promise<ResolvedMembershipBatch>;
|
|
81
96
|
}
|
|
82
97
|
/** Server-only organization membership resolution. Keep results private; they are Auth authority, not product authority. */
|
|
83
98
|
declare function createMembershipResolverAuth(options: MembershipResolverAuthOptions): FinuevaMembershipResolverAuth;
|
|
@@ -175,4 +190,4 @@ interface FinuevaServerAuth {
|
|
|
175
190
|
}
|
|
176
191
|
declare function createServerAuth(options: ServerAuthOptions): FinuevaServerAuth;
|
|
177
192
|
//#endregion
|
|
178
|
-
export { type AcceptInvitationInput, type AddedOrganizationTeamMember, AuthError, type AuthErrorCode, type AuthErrorStatus, type AuthOrganization, type AuthSession, type AuthUser, type CanceledOrganizationInvitation, type CompleteGoogleAccountRecoveryInput, type CreateOrganizationMemberInvitationInput, type CreatedOrganization, type CreatedOrganizationMemberInvitation, type CreatedOrganizationTeam, type DeclineInvitationInput, type DeletedOrganizationTeam, type DriveCredential, type DriveCredentialInput, type DriveProvisioningAuthOptions, type DriveProvisioningCredential, type DriveRecipient, type DriveRecipientAuthOptions, type FinuevaDriveProvisioningAuth, type FinuevaDriveRecipientAuth, type FinuevaIdentityResolverAuth, type FinuevaMembershipResolverAuth, FinuevaServerAuth, type GoogleAccountRecovery, type GoogleAccountRecoveryInput, type IdentityResolverAuthOptions, type InvitationAcceptance, type InvitationDecline, type MembershipResolverAuthOptions, type OrganizationDeparture, type OrganizationDisplay, type OrganizationInvitation, type OrganizationInvitationPage, type OrganizationMember, type OrganizationMemberAuthority, type OrganizationMemberPage, type OrganizationPage, type OrganizationPageInput, type OrganizationTeam, type OrganizationTeamDisplay, type OrganizationTeamMemberPage, type OrganizationTeamPage, type OrganizationWorkspaceSelection, type PersonalWorkspaceSelection, type ReceivedOrganizationInvitation, type ReceivedOrganizationInvitationPage, type RemovedOrganizationMember, type RemovedOrganizationTeamMember, type ResentOrganizationInvitation, type ResolveDriveRecipientInput, type ResolveIdentityInput, type ResolveMembershipInput, type ResolvedIdentity, type ResolvedMembership, type ResolvedMembershipRole, ServerAuthOptions, ServerInvitationAcceptance, ServerSignOutResult, ServerSocialIdTokenSession, type SocialIdTokenInput, type SocialIdTokenProvider, type UpdateOrganizationDisplayInput, type UpdateOrganizationTeamDisplayInput, type UserApiCredential, type UserApiCredentialInput, type UserApiIdentity, type UserApiVerifierOptions, type WorkspaceSelection, createDriveProvisioningAuth, createDriveRecipientAuth, createIdentityResolverAuth, createMembershipResolverAuth, createServerAuth, createUserApiVerifier };
|
|
193
|
+
export { type AcceptInvitationInput, type AddedOrganizationTeamMember, AuthError, type AuthErrorCode, type AuthErrorStatus, type AuthOrganization, type AuthSession, type AuthUser, type CanceledOrganizationInvitation, type CompleteGoogleAccountRecoveryInput, type CreateOrganizationMemberInvitationInput, type CreatedOrganization, type CreatedOrganizationMemberInvitation, type CreatedOrganizationTeam, type DeclineInvitationInput, type DeletedOrganizationTeam, type DriveCredential, type DriveCredentialInput, type DriveProvisioningAuthOptions, type DriveProvisioningCredential, type DriveRecipient, type DriveRecipientAuthOptions, type FinuevaDriveProvisioningAuth, type FinuevaDriveRecipientAuth, type FinuevaIdentityResolverAuth, type FinuevaMembershipResolverAuth, FinuevaServerAuth, type GoogleAccountRecovery, type GoogleAccountRecoveryInput, type IdentityResolverAuthOptions, type InvitationAcceptance, type InvitationDecline, type MembershipResolverAuthOptions, type OrganizationDeparture, type OrganizationDisplay, type OrganizationInvitation, type OrganizationInvitationPage, type OrganizationMember, type OrganizationMemberAuthority, type OrganizationMemberPage, type OrganizationPage, type OrganizationPageInput, type OrganizationTeam, type OrganizationTeamDisplay, type OrganizationTeamMemberPage, type OrganizationTeamPage, type OrganizationWorkspaceSelection, type PersonalWorkspaceSelection, type ReceivedOrganizationInvitation, type ReceivedOrganizationInvitationPage, type RemovedOrganizationMember, type RemovedOrganizationTeamMember, type ResentOrganizationInvitation, type ResolveDriveRecipientInput, type ResolveIdentityInput, type ResolveMembershipBatchInput, type ResolveMembershipInput, type ResolvedIdentity, type ResolvedMembership, type ResolvedMembershipBatch, type ResolvedMembershipRole, ServerAuthOptions, ServerInvitationAcceptance, ServerSignOutResult, ServerSocialIdTokenSession, type SocialIdTokenInput, type SocialIdTokenProvider, type UpdateOrganizationDisplayInput, type UpdateOrganizationTeamDisplayInput, type UserApiCredential, type UserApiCredentialInput, type UserApiIdentity, type UserApiVerifierOptions, type WorkspaceSelection, createDriveProvisioningAuth, createDriveRecipientAuth, createIdentityResolverAuth, createMembershipResolverAuth, createServerAuth, createUserApiVerifier };
|
package/dist/server.js
CHANGED
|
@@ -2629,19 +2629,34 @@ const membershipKeys = [
|
|
|
2629
2629
|
function exact$1(value, keys) {
|
|
2630
2630
|
return value !== null && typeof value === "object" && !Array.isArray(value) && Object.keys(value).length === keys.length && keys.every((key) => Object.hasOwn(value, key));
|
|
2631
2631
|
}
|
|
2632
|
+
function parseMembership(value, organizationId, userId) {
|
|
2633
|
+
if (!exact$1(value, ["membership"])) throw authorityUnavailable();
|
|
2634
|
+
if (value.membership === null) return null;
|
|
2635
|
+
const membership = value.membership;
|
|
2636
|
+
if (!exact$1(membership, membershipKeys) || typeof membership.checkedAt !== "string" || !isoPattern.test(membership.checkedAt) || Number.isNaN(Date.parse(membership.checkedAt)) || typeof membership.manualRole !== "string" || !roles.includes(membership.manualRole) || typeof membership.role !== "string" || !roles.includes(membership.role) || typeof membership.memberCount !== "number" || !Number.isSafeInteger(membership.memberCount) || membership.memberCount < 0 || typeof membership.memberId !== "string" || !idPattern.test(membership.memberId) || typeof membership.owner !== "boolean" || membership.organizationId !== organizationId || membership.userId !== userId) throw authorityUnavailable();
|
|
2637
|
+
return {
|
|
2638
|
+
checkedAt: membership.checkedAt,
|
|
2639
|
+
manualRole: membership.manualRole,
|
|
2640
|
+
memberCount: membership.memberCount,
|
|
2641
|
+
memberId: membership.memberId,
|
|
2642
|
+
organizationId,
|
|
2643
|
+
owner: membership.owner,
|
|
2644
|
+
role: membership.role,
|
|
2645
|
+
userId
|
|
2646
|
+
};
|
|
2647
|
+
}
|
|
2632
2648
|
function createMembershipResolverAuth(options) {
|
|
2633
|
-
const
|
|
2649
|
+
const origin = normalizeOrigin(options.authOrigin, "authOrigin");
|
|
2634
2650
|
const fetchImpl = options.fetch ?? globalThis.fetch?.bind(globalThis);
|
|
2635
2651
|
if (typeof fetchImpl !== "function") throw new TypeError("fetch is required");
|
|
2636
2652
|
const timeoutMs = normalizeTimeout(options.timeoutMs);
|
|
2637
2653
|
let inFlight = false;
|
|
2638
|
-
|
|
2639
|
-
|
|
2654
|
+
async function exchange(body, clientAssertion, batch, parseResult) {
|
|
2655
|
+
const url = joinURL(origin, batch ? "api/v1/auth/memberships/resolve-batch" : "api/v1/auth/memberships/resolve");
|
|
2656
|
+
const maxBytes = batch ? 512 * 1024 : 1024;
|
|
2640
2657
|
if (typeof clientAssertion !== "string" || clientAssertion.length + 7 > 16 * 1024 || !/^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$(?![\s\S])/.test(clientAssertion)) throw new AuthError("invalid_request", 400);
|
|
2641
2658
|
if (inFlight) throw new AuthError("state_conflict", 409);
|
|
2642
2659
|
inFlight = true;
|
|
2643
|
-
const organizationId = input.organizationId;
|
|
2644
|
-
const userId = input.userId;
|
|
2645
2660
|
const controller = new AbortController();
|
|
2646
2661
|
let reader;
|
|
2647
2662
|
let timer;
|
|
@@ -2662,10 +2677,7 @@ function createMembershipResolverAuth(options) {
|
|
|
2662
2677
|
accept: "application/json",
|
|
2663
2678
|
"content-type": "application/json"
|
|
2664
2679
|
},
|
|
2665
|
-
body: JSON.stringify(
|
|
2666
|
-
organizationId,
|
|
2667
|
-
userId
|
|
2668
|
-
}),
|
|
2680
|
+
body: JSON.stringify(body),
|
|
2669
2681
|
credentials: "omit",
|
|
2670
2682
|
cache: "no-store",
|
|
2671
2683
|
redirect: "manual",
|
|
@@ -2678,8 +2690,8 @@ function createMembershipResolverAuth(options) {
|
|
|
2678
2690
|
if (!response.body) throw authorityUnavailable();
|
|
2679
2691
|
reader = response.body.getReader();
|
|
2680
2692
|
const length = response.headers.get("content-length");
|
|
2681
|
-
if (response.redirected || response.headers.get("content-type")?.split(";", 1)[0]?.trim().toLowerCase() !== "application/json" || length !== null && (!/^\d+$/.test(length) || Number(length) >
|
|
2682
|
-
const bytes = new Uint8Array(
|
|
2693
|
+
if (response.redirected || response.headers.get("content-type")?.split(";", 1)[0]?.trim().toLowerCase() !== "application/json" || length !== null && (!/^\d+$/.test(length) || Number(length) > maxBytes)) throw authorityUnavailable();
|
|
2694
|
+
const bytes = new Uint8Array(maxBytes);
|
|
2683
2695
|
let size = 0;
|
|
2684
2696
|
while (true) {
|
|
2685
2697
|
const chunk = await reader.read();
|
|
@@ -2700,20 +2712,7 @@ function createMembershipResolverAuth(options) {
|
|
|
2700
2712
|
}
|
|
2701
2713
|
throw mappedError ?? authorityUnavailable();
|
|
2702
2714
|
}
|
|
2703
|
-
|
|
2704
|
-
if (value.membership === null) return null;
|
|
2705
|
-
const membership = value.membership;
|
|
2706
|
-
if (!exact$1(membership, membershipKeys) || typeof membership.checkedAt !== "string" || !isoPattern.test(membership.checkedAt) || Number.isNaN(Date.parse(membership.checkedAt)) || typeof membership.manualRole !== "string" || !roles.includes(membership.manualRole) || typeof membership.role !== "string" || !roles.includes(membership.role) || typeof membership.memberCount !== "number" || !Number.isSafeInteger(membership.memberCount) || membership.memberCount < 0 || typeof membership.memberId !== "string" || !idPattern.test(membership.memberId) || typeof membership.owner !== "boolean" || membership.organizationId !== organizationId || membership.userId !== userId) throw authorityUnavailable();
|
|
2707
|
-
return {
|
|
2708
|
-
checkedAt: membership.checkedAt,
|
|
2709
|
-
manualRole: membership.manualRole,
|
|
2710
|
-
memberCount: membership.memberCount,
|
|
2711
|
-
memberId: membership.memberId,
|
|
2712
|
-
organizationId,
|
|
2713
|
-
owner: membership.owner,
|
|
2714
|
-
role: membership.role,
|
|
2715
|
-
userId
|
|
2716
|
-
};
|
|
2715
|
+
return parseResult(value);
|
|
2717
2716
|
};
|
|
2718
2717
|
return await Promise.race([exchange().finally(() => {
|
|
2719
2718
|
inFlight = false;
|
|
@@ -2726,7 +2725,53 @@ function createMembershipResolverAuth(options) {
|
|
|
2726
2725
|
controller.abort();
|
|
2727
2726
|
reader?.cancel().catch(() => {});
|
|
2728
2727
|
}
|
|
2729
|
-
}
|
|
2728
|
+
}
|
|
2729
|
+
return {
|
|
2730
|
+
async resolveMembership(input, assertion) {
|
|
2731
|
+
if (!exact$1(input, ["organizationId", "userId"]) || typeof input.organizationId !== "string" || typeof input.userId !== "string" || !idPattern.test(input.organizationId) || !idPattern.test(input.userId)) throw new AuthError("invalid_request", 400);
|
|
2732
|
+
const { organizationId, userId } = input;
|
|
2733
|
+
return exchange({
|
|
2734
|
+
organizationId,
|
|
2735
|
+
userId
|
|
2736
|
+
}, assertion, false, (value) => parseMembership(value, organizationId, userId));
|
|
2737
|
+
},
|
|
2738
|
+
async resolveMembershipBatch(input, assertion) {
|
|
2739
|
+
if (!input || typeof input !== "object" || Array.isArray(input) || !exact$1(input, Object.hasOwn(input, "teamIds") ? [
|
|
2740
|
+
"organizationId",
|
|
2741
|
+
"userIds",
|
|
2742
|
+
"teamIds"
|
|
2743
|
+
] : ["organizationId", "userIds"]) || typeof input.organizationId !== "string" || !idPattern.test(input.organizationId) || !Array.isArray(input.userIds) || input.userIds.length < 1 || input.userIds.length > 100 || input.userIds.some((id) => typeof id !== "string" || !idPattern.test(id)) || new Set(input.userIds).size !== input.userIds.length || input.teamIds !== void 0 && (!Array.isArray(input.teamIds) || input.teamIds.length > 32 || input.teamIds.some((id) => typeof id !== "string" || !idPattern.test(id)) || new Set(input.teamIds).size !== input.teamIds.length)) throw new AuthError("invalid_request", 400);
|
|
2744
|
+
const organizationId = input.organizationId;
|
|
2745
|
+
const userIds = [...input.userIds];
|
|
2746
|
+
const teamIds = [...input.teamIds ?? []];
|
|
2747
|
+
return exchange({
|
|
2748
|
+
organizationId,
|
|
2749
|
+
userIds,
|
|
2750
|
+
teamIds
|
|
2751
|
+
}, assertion, true, (value) => {
|
|
2752
|
+
if (!exact$1(value, ["organizationId", "memberships"]) || value.organizationId !== organizationId || !Array.isArray(value.memberships) || value.memberships.length !== userIds.length) throw authorityUnavailable();
|
|
2753
|
+
const memberships = value.memberships.map((entry, index) => {
|
|
2754
|
+
const userId = userIds[index];
|
|
2755
|
+
if (!exact$1(entry, [
|
|
2756
|
+
"userId",
|
|
2757
|
+
"membership",
|
|
2758
|
+
"matchingTeamIds"
|
|
2759
|
+
]) || entry.userId !== userId || !Array.isArray(entry.matchingTeamIds) || entry.matchingTeamIds.length > teamIds.length || entry.matchingTeamIds.some((id) => typeof id !== "string" || !teamIds.includes(id)) || new Set(entry.matchingTeamIds).size !== entry.matchingTeamIds.length) throw authorityUnavailable();
|
|
2760
|
+
const membership = parseMembership({ membership: entry.membership }, organizationId, userId);
|
|
2761
|
+
if (!membership && entry.matchingTeamIds.length) throw authorityUnavailable();
|
|
2762
|
+
return {
|
|
2763
|
+
userId,
|
|
2764
|
+
membership,
|
|
2765
|
+
matchingTeamIds: [...entry.matchingTeamIds]
|
|
2766
|
+
};
|
|
2767
|
+
});
|
|
2768
|
+
return {
|
|
2769
|
+
organizationId,
|
|
2770
|
+
memberships
|
|
2771
|
+
};
|
|
2772
|
+
});
|
|
2773
|
+
}
|
|
2774
|
+
};
|
|
2730
2775
|
}
|
|
2731
2776
|
//#endregion
|
|
2732
2777
|
//#region src/drive-recipients.ts
|
|
@@ -578,6 +578,8 @@ interface FinuevaAuthClient {
|
|
|
578
578
|
sendVerificationEmail(input: SendVerificationEmailInput): Promise<void>;
|
|
579
579
|
signUp(email: string, password: string, name: string): Promise<AuthSession>;
|
|
580
580
|
signIn(input: SignInInput): Promise<AuthSession>;
|
|
581
|
+
/** Confirm a pending enterprise identity link with the current account password. Cookie-only. */
|
|
582
|
+
approveEnterpriseLink(password: string): Promise<AuthSession>;
|
|
581
583
|
/** Cookie-only. A manual owner or admin reads the organization's enterprise connection status. */
|
|
582
584
|
listEnterpriseConnections(organizationId: string): Promise<EnterpriseConnection[]>;
|
|
583
585
|
listEnterpriseConnectionSetups(organizationId: string): Promise<EnterpriseConnectionSetup[]>;
|