@feelflow/ffid-sdk 7.2.0 → 8.1.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 +115 -5
- package/dist/{chunk-SOZ2B2ZL.cjs → chunk-CPXTIRB6.cjs} +204 -12
- package/dist/{chunk-E2AJAVX6.js → chunk-P5A6C5SK.js} +195 -13
- package/dist/components/index.cjs +8 -8
- package/dist/components/index.d.cts +1 -1
- package/dist/components/index.d.ts +1 -1
- package/dist/components/index.js +1 -1
- package/dist/{ffid-client-BFgoVPOZ.d.cts → ffid-client-6aLs9Fqc.d.cts} +116 -29
- package/dist/{ffid-client-QNEFA3mv.d.ts → ffid-client-B0cORHac.d.ts} +116 -29
- package/dist/{index-BMKhKhzF.d.cts → index-BG7g99pK.d.cts} +1 -0
- package/dist/{index-BMKhKhzF.d.ts → index-BG7g99pK.d.ts} +1 -0
- package/dist/index.cjs +104 -64
- package/dist/index.d.cts +389 -32
- package/dist/index.d.ts +389 -32
- package/dist/index.js +2 -2
- package/dist/server/index.cjs +128 -10
- package/dist/server/index.d.cts +2 -2
- package/dist/server/index.d.ts +2 -2
- package/dist/server/index.js +128 -10
- package/dist/server/test/index.d.cts +1 -1
- package/dist/server/test/index.d.ts +1 -1
- package/dist/webhooks/index.d.cts +125 -6
- package/dist/webhooks/index.d.ts +125 -6
- package/package.json +1 -1
package/dist/server/index.cjs
CHANGED
|
@@ -155,7 +155,7 @@ function normalizeUserinfo(raw) {
|
|
|
155
155
|
emailVerified: raw.email_verified,
|
|
156
156
|
name: raw.name,
|
|
157
157
|
picture: raw.picture,
|
|
158
|
-
companyName:
|
|
158
|
+
companyName: null,
|
|
159
159
|
department: raw.department ?? null,
|
|
160
160
|
position: raw.position ?? null,
|
|
161
161
|
phoneNumber: raw.phone_number ?? null,
|
|
@@ -464,7 +464,7 @@ function createVerifyAccessToken(deps) {
|
|
|
464
464
|
email_verified: introspectResponse.email_verified,
|
|
465
465
|
name: introspectResponse.name ?? null,
|
|
466
466
|
picture: introspectResponse.picture ?? null,
|
|
467
|
-
company_name:
|
|
467
|
+
company_name: null,
|
|
468
468
|
department: introspectResponse.department ?? null,
|
|
469
469
|
position: introspectResponse.position ?? null,
|
|
470
470
|
phone_number: introspectResponse.phone_number ?? null,
|
|
@@ -715,6 +715,24 @@ function validateSeatChangePreview(preview) {
|
|
|
715
715
|
`SDK: server returned malformed SeatChangePreview \u2014 estimateReason must be one of 'no_stripe_data' | 'custom_pricing' | 'stripe_error' (got ${JSON.stringify(p.estimateReason)})`
|
|
716
716
|
);
|
|
717
717
|
}
|
|
718
|
+
if (p.willApplyAtPeriodEnd !== void 0 && typeof p.willApplyAtPeriodEnd !== "boolean") {
|
|
719
|
+
throw new FFIDSDKError(
|
|
720
|
+
MALFORMED_SEAT_PREVIEW_CODE,
|
|
721
|
+
`SDK: server returned malformed SeatChangePreview \u2014 willApplyAtPeriodEnd must be boolean when present (got ${typeof p.willApplyAtPeriodEnd})`
|
|
722
|
+
);
|
|
723
|
+
}
|
|
724
|
+
if (p.effectiveDate !== void 0 && p.effectiveDate !== null && typeof p.effectiveDate !== "string") {
|
|
725
|
+
throw new FFIDSDKError(
|
|
726
|
+
MALFORMED_SEAT_PREVIEW_CODE,
|
|
727
|
+
`SDK: server returned malformed SeatChangePreview \u2014 effectiveDate must be string or null when present (got ${typeof p.effectiveDate})`
|
|
728
|
+
);
|
|
729
|
+
}
|
|
730
|
+
if (p.willApplyAtPeriodEnd === true && p.proratedAmount !== 0) {
|
|
731
|
+
throw new FFIDSDKError(
|
|
732
|
+
MALFORMED_SEAT_PREVIEW_CODE,
|
|
733
|
+
`SDK: server returned malformed SeatChangePreview \u2014 willApplyAtPeriodEnd=true requires proratedAmount=0 (got ${JSON.stringify(p.proratedAmount)})`
|
|
734
|
+
);
|
|
735
|
+
}
|
|
718
736
|
if (!Array.isArray(p.lineItems)) {
|
|
719
737
|
throw new FFIDSDKError(
|
|
720
738
|
MALFORMED_SEAT_PREVIEW_CODE,
|
|
@@ -1355,7 +1373,7 @@ var FFID_ORGANIZATION_PROFILE_ERROR_CODES = {
|
|
|
1355
1373
|
};
|
|
1356
1374
|
|
|
1357
1375
|
// src/client/version-check.ts
|
|
1358
|
-
var SDK_VERSION = "
|
|
1376
|
+
var SDK_VERSION = "8.1.0";
|
|
1359
1377
|
var SDK_USER_AGENT = `FFID-SDK/${SDK_VERSION} (TypeScript)`;
|
|
1360
1378
|
var SDK_VERSION_HEADER = "X-FFID-SDK-Version";
|
|
1361
1379
|
function sdkHeaders() {
|
|
@@ -2514,6 +2532,86 @@ function cleanupStateStorage(logger) {
|
|
|
2514
2532
|
}
|
|
2515
2533
|
}
|
|
2516
2534
|
|
|
2535
|
+
// src/client/agency-invite-token.ts
|
|
2536
|
+
var AGENCY_INVITE_TOKEN_PARAM = "invite";
|
|
2537
|
+
var AGENCY_INVITE_COOKIE_NAME = "ffid_invite";
|
|
2538
|
+
var AGENCY_INVITE_TOKEN_REDACTION = "[REDACTED]";
|
|
2539
|
+
function hasDocument() {
|
|
2540
|
+
return typeof document !== "undefined";
|
|
2541
|
+
}
|
|
2542
|
+
function toQueryString(source) {
|
|
2543
|
+
const queryStart = source.indexOf("?");
|
|
2544
|
+
if (queryStart < 0) return "";
|
|
2545
|
+
const afterQuery = source.slice(queryStart);
|
|
2546
|
+
const fragmentStart = afterQuery.indexOf("#");
|
|
2547
|
+
return fragmentStart < 0 ? afterQuery : afterQuery.slice(0, fragmentStart);
|
|
2548
|
+
}
|
|
2549
|
+
function readTokenFromUrl(options) {
|
|
2550
|
+
const source = options.url ?? (typeof window !== "undefined" ? window.location.search : void 0);
|
|
2551
|
+
if (source === void 0) return void 0;
|
|
2552
|
+
const params = new URLSearchParams(toQueryString(source));
|
|
2553
|
+
return params.get(AGENCY_INVITE_TOKEN_PARAM)?.trim() || void 0;
|
|
2554
|
+
}
|
|
2555
|
+
function readAgencyInviteCookie() {
|
|
2556
|
+
if (!hasDocument()) return void 0;
|
|
2557
|
+
const prefix = `${AGENCY_INVITE_COOKIE_NAME}=`;
|
|
2558
|
+
const raw = document.cookie.split(";").map((entry) => entry.trim()).find((entry) => entry.startsWith(prefix));
|
|
2559
|
+
if (!raw) return void 0;
|
|
2560
|
+
try {
|
|
2561
|
+
return decodeURIComponent(raw.slice(prefix.length)).trim() || void 0;
|
|
2562
|
+
} catch {
|
|
2563
|
+
return void 0;
|
|
2564
|
+
}
|
|
2565
|
+
}
|
|
2566
|
+
function readAgencyInviteToken(options = {}) {
|
|
2567
|
+
return readTokenFromUrl(options) ?? readAgencyInviteCookie();
|
|
2568
|
+
}
|
|
2569
|
+
var REDACT_BOUNDARIES = [
|
|
2570
|
+
"%2526",
|
|
2571
|
+
"%2523",
|
|
2572
|
+
"%253B",
|
|
2573
|
+
"%26",
|
|
2574
|
+
"%23",
|
|
2575
|
+
"%3B",
|
|
2576
|
+
"&",
|
|
2577
|
+
"#",
|
|
2578
|
+
";"
|
|
2579
|
+
];
|
|
2580
|
+
var REDACT_LEADS = ["%253F", "%3F", "?", ...REDACT_BOUNDARIES];
|
|
2581
|
+
var REDACT_SEPARATORS = ["%253D", "%3D", "="];
|
|
2582
|
+
function escapeForRegExp(literal) {
|
|
2583
|
+
return literal.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
2584
|
+
}
|
|
2585
|
+
var REDACT_PATTERN = new RegExp(
|
|
2586
|
+
[
|
|
2587
|
+
// 先頭区切り。`\b` が使えないのは、入れ子形 (`%3Finvite%3D`) では `F` と `i` が
|
|
2588
|
+
// どちらも単語文字なので単語境界が存在しないため。
|
|
2589
|
+
`(^|${REDACT_LEADS.map(escapeForRegExp).join("|")})`,
|
|
2590
|
+
// パラメータ名と区切りはキャプチャして再出力する。`i` フラグがあるので、
|
|
2591
|
+
// 入力の `INVITE=` / `%3d` などの元の表記を保つ必要がある。
|
|
2592
|
+
`(${AGENCY_INVITE_TOKEN_PARAM})`,
|
|
2593
|
+
`(${REDACT_SEPARATORS.map(escapeForRegExp).join("|")})`,
|
|
2594
|
+
// 値。境界の直前まで貪欲に食う。`\s` は終端にしない — 生の空白や改行を含む
|
|
2595
|
+
// トークンでマスクが途中で切れ、後半が漏れる。
|
|
2596
|
+
`(?:(?!${REDACT_BOUNDARIES.map(escapeForRegExp).join("|")})[^&#;])*`
|
|
2597
|
+
].join(""),
|
|
2598
|
+
"gi"
|
|
2599
|
+
);
|
|
2600
|
+
function redactAgencyInviteToken(url) {
|
|
2601
|
+
return url.replace(
|
|
2602
|
+
REDACT_PATTERN,
|
|
2603
|
+
// 文字列 replacement(`'$1$2$3[REDACTED]'`)にしないのは、
|
|
2604
|
+
// `AGENCY_INVITE_TOKEN_REDACTION` に `$` が入った瞬間に置換パターンとして
|
|
2605
|
+
// 解釈される罠を作らないため。
|
|
2606
|
+
(_match, lead, name, separator) => `${lead}${name}${separator}${AGENCY_INVITE_TOKEN_REDACTION}`
|
|
2607
|
+
);
|
|
2608
|
+
}
|
|
2609
|
+
function appendAgencyInviteToken(signupUrl, token) {
|
|
2610
|
+
if (token === void 0) return signupUrl;
|
|
2611
|
+
const separator = signupUrl.includes("?") ? "&" : "?";
|
|
2612
|
+
return `${signupUrl}${separator}${AGENCY_INVITE_TOKEN_PARAM}=${encodeURIComponent(token)}`;
|
|
2613
|
+
}
|
|
2614
|
+
|
|
2517
2615
|
// src/client/redirect.ts
|
|
2518
2616
|
var OAUTH_AUTHORIZE_ENDPOINT = "/api/v1/oauth/authorize";
|
|
2519
2617
|
var AUTH_LOGOUT_ENDPOINT = "/api/v1/auth/logout";
|
|
@@ -2526,6 +2624,7 @@ var REDIRECT_LOOP_WINDOW_MS = 6e4;
|
|
|
2526
2624
|
var REDIRECT_LOOP_THRESHOLD = 3;
|
|
2527
2625
|
var storageReadFailureLogged = false;
|
|
2528
2626
|
var storageWriteFailureLogged = false;
|
|
2627
|
+
var ssrInviteTokenUnavailableLogged = false;
|
|
2529
2628
|
function isLoopDetectionDegraded() {
|
|
2530
2629
|
return storageReadFailureLogged || storageWriteFailureLogged;
|
|
2531
2630
|
}
|
|
@@ -2704,12 +2803,16 @@ function createRedirectMethods(deps) {
|
|
|
2704
2803
|
}
|
|
2705
2804
|
if (options?.screenHint === SCREEN_HINT_SIGNUP) {
|
|
2706
2805
|
params.set(SCREEN_HINT_PARAM, SCREEN_HINT_SIGNUP);
|
|
2806
|
+
const inviteToken = readAgencyInviteToken();
|
|
2807
|
+
if (inviteToken !== void 0) {
|
|
2808
|
+
params.set(AGENCY_INVITE_TOKEN_PARAM, inviteToken);
|
|
2809
|
+
}
|
|
2707
2810
|
}
|
|
2708
2811
|
if (options?.prompt) {
|
|
2709
2812
|
params.set("prompt", options.prompt);
|
|
2710
2813
|
}
|
|
2711
2814
|
const authorizeUrl = `${baseUrl}${OAUTH_AUTHORIZE_ENDPOINT}?${params.toString()}`;
|
|
2712
|
-
logger.debug("Redirecting to authorize:", authorizeUrl);
|
|
2815
|
+
logger.debug("Redirecting to authorize:", redactAgencyInviteToken(authorizeUrl));
|
|
2713
2816
|
recordRedirectAttempt(authorizeKey, now, logger);
|
|
2714
2817
|
try {
|
|
2715
2818
|
window.location.href = authorizeUrl;
|
|
@@ -2728,7 +2831,7 @@ function createRedirectMethods(deps) {
|
|
|
2728
2831
|
return redirectToAuthorize(options);
|
|
2729
2832
|
}
|
|
2730
2833
|
const targetUrl = options?.screenHint === SCREEN_HINT_SIGNUP ? getSignupUrl() : getLoginUrl(void 0, options?.prompt ? { prompt: options.prompt } : void 0);
|
|
2731
|
-
logger.debug("Redirecting to auth page:", targetUrl);
|
|
2834
|
+
logger.debug("Redirecting to auth page:", redactAgencyInviteToken(targetUrl));
|
|
2732
2835
|
window.location.href = targetUrl;
|
|
2733
2836
|
return { success: true };
|
|
2734
2837
|
}
|
|
@@ -2745,7 +2848,7 @@ function createRedirectMethods(deps) {
|
|
|
2745
2848
|
const promptSuffix = options?.prompt ? `&prompt=${encodeURIComponent(options.prompt)}` : "";
|
|
2746
2849
|
return `${baseUrl}/login?redirect=${encodeURIComponent(redirect)}&service=${encodeURIComponent(serviceCode)}${promptSuffix}`;
|
|
2747
2850
|
}
|
|
2748
|
-
function getSignupUrl(redirectUrl) {
|
|
2851
|
+
function getSignupUrl(redirectUrl, options) {
|
|
2749
2852
|
let redirect;
|
|
2750
2853
|
if (redirectUrl != null) {
|
|
2751
2854
|
redirect = redirectUrl;
|
|
@@ -2755,7 +2858,22 @@ function createRedirectMethods(deps) {
|
|
|
2755
2858
|
logger.warn("getSignupUrl: SSR \u74B0\u5883\u3067 redirectUrl \u304C\u672A\u6307\u5B9A\u306E\u305F\u3081\u7A7A\u6587\u5B57\u306B\u30D5\u30A9\u30FC\u30EB\u30D0\u30C3\u30AF\u3057\u307E\u3059");
|
|
2756
2859
|
redirect = "";
|
|
2757
2860
|
}
|
|
2758
|
-
|
|
2861
|
+
let inviteToken = options?.inviteToken;
|
|
2862
|
+
if (inviteToken === void 0) {
|
|
2863
|
+
inviteToken = readAgencyInviteToken();
|
|
2864
|
+
if (inviteToken === void 0 && typeof window === "undefined") {
|
|
2865
|
+
if (!ssrInviteTokenUnavailableLogged) {
|
|
2866
|
+
ssrInviteTokenUnavailableLogged = true;
|
|
2867
|
+
logger.warn(
|
|
2868
|
+
"[FFID SDK] getSignupUrl: SSR \u3067\u306F\u62DB\u5F85\u30C8\u30FC\u30AF\u30F3\uFF08invite\uFF09\u3092\u8AAD\u3081\u307E\u305B\u3093\u3002\u4EE3\u7406\u5E97\u306E\u62DB\u5F85\u30EA\u30F3\u30AF\u3092\u4F7F\u3046\u5834\u5408\u306F options.inviteToken \u306B\u6E21\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u4F7F\u3063\u3066\u3044\u306A\u3044\u5834\u5408\u306F\u3053\u306E\u8B66\u544A\u3092\u7121\u8996\u3057\u3066\u3088\u3044\uFF09"
|
|
2869
|
+
);
|
|
2870
|
+
}
|
|
2871
|
+
}
|
|
2872
|
+
}
|
|
2873
|
+
return appendAgencyInviteToken(
|
|
2874
|
+
`${baseUrl}/signup?redirect=${encodeURIComponent(redirect)}&service=${encodeURIComponent(serviceCode)}`,
|
|
2875
|
+
inviteToken
|
|
2876
|
+
);
|
|
2759
2877
|
}
|
|
2760
2878
|
function getLogoutUrl(postLogoutRedirectUri) {
|
|
2761
2879
|
const url = new URL(`${baseUrl}${AUTH_LOGOUT_ENDPOINT}`);
|
|
@@ -2771,7 +2889,7 @@ function createRedirectMethods(deps) {
|
|
|
2771
2889
|
return { success: false, error: "SSR \u74B0\u5883\u3067\u306F\u30EA\u30C0\u30A4\u30EC\u30AF\u30C8\u3067\u304D\u307E\u305B\u3093" };
|
|
2772
2890
|
}
|
|
2773
2891
|
const logoutUrl = getLogoutUrl(postLogoutRedirectUri);
|
|
2774
|
-
logger.debug("Redirecting to logout:", logoutUrl);
|
|
2892
|
+
logger.debug("Redirecting to logout:", redactAgencyInviteToken(logoutUrl));
|
|
2775
2893
|
window.location.href = logoutUrl;
|
|
2776
2894
|
return { success: true };
|
|
2777
2895
|
}
|
|
@@ -4325,9 +4443,9 @@ function createServerAuthClient(config) {
|
|
|
4325
4443
|
var FFID_SESSION_COOKIE_NAME = "ffid_session";
|
|
4326
4444
|
var DEFAULT_PATH = "/";
|
|
4327
4445
|
var DEFAULT_SAME_SITE = "lax";
|
|
4328
|
-
var
|
|
4446
|
+
var HOURS_PER_DAY3 = 24;
|
|
4329
4447
|
var DEFAULT_MAX_AGE_DAYS = 30;
|
|
4330
|
-
var DEFAULT_MAX_AGE_SECONDS = 60 * 60 *
|
|
4448
|
+
var DEFAULT_MAX_AGE_SECONDS = 60 * 60 * HOURS_PER_DAY3 * DEFAULT_MAX_AGE_DAYS;
|
|
4331
4449
|
var BASE64_GROUP = 4;
|
|
4332
4450
|
function base64UrlEncode2(input) {
|
|
4333
4451
|
const bytes = new TextEncoder().encode(input);
|
package/dist/server/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { F as FFIDLogger, a as FFIDError, b as FFIDCacheAdapter, c as FFIDVerifyAccessTokenOptions, d as FFIDApiResponse, e as FFIDOAuthUserInfo, f as FFIDCatalogEnvironment, g as FFIDBillingInterval, h as FFIDTaxBehavior, i as FFIDPublishedCatalog } from '../ffid-client-
|
|
2
|
-
export { j as FFIDAddMemberParams, k as FFIDAddMemberRequest, l as FFIDAddMemberResponse, m as FFIDAllowedLogoMimeType, n as FFIDAssignableMemberRole, o as FFIDCacheConfig, p as FFIDCatalogPublication, q as FFIDCatalogPublicationStatus, r as FFIDClient, s as FFIDCompanySizeCode, t as FFIDConfig, u as FFIDIndustryCode, v as FFIDListMembersResponse, w as FFIDListingConsentInput, x as FFIDLogoWallEntry, y as FFIDLogoWallResponse, z as FFIDMemberRole, A as FFIDOrganization, B as FFIDOrganizationLogoUploadResponse, C as FFIDOrganizationMember, D as FFIDOrganizationProfile, E as FFIDOrganizationProfileErrorCode, G as FFIDOrganizationProfileResponse, H as FFIDOtpSendResponse, I as FFIDOtpVerifyResponse, J as FFIDPasswordResetConfirmResponse, K as FFIDPasswordResetResponse, L as FFIDPasswordResetVerifyResponse, M as FFIDProfileCallOptions, N as FFIDProvisionMemberPlan, O as FFIDProvisionMemberPlanStatus, P as FFIDProvisionMemberResult, Q as FFIDProvisionMemberStatus, R as FFIDProvisionOrganizationDryRun, S as FFIDProvisionOrganizationMemberInput, T as FFIDProvisionOrganizationOutcome, U as FFIDProvisionOrganizationParams, V as FFIDProvisionOrganizationResponse, W as FFIDProvisionUserDryRun, X as FFIDProvisionUserOutcome, Y as FFIDProvisionUserParams, Z as FFIDProvisionUserProfileInput, _ as FFIDProvisionUserResponse, $ as FFIDProvisionedOrganization, a0 as FFIDProvisionedUser, a1 as FFIDPublishedPlan, a2 as FFIDRemoveMemberResponse, a3 as FFIDResetSessionResponse, a4 as FFIDSubscription, a5 as FFIDUpdateMemberRoleResponse, a6 as FFIDUpdateUserProfileRequest, a7 as FFIDUploadOrganizationLogoParams, a8 as FFIDUpsertOrganizationProfileParams, a9 as FFIDUpsertOrganizationProfileRequest, aa as FFIDUser, ab as FFIDUserProfile, ac as FFID_ALLOWED_ORGANIZATION_LOGO_MIME_TYPES, ad as FFID_CATALOG_ENVIRONMENTS, ae as FFID_CATALOG_PUBLICATION_STATUSES, af as FFID_COMPANY_SIZE_CODES, ag as FFID_INDUSTRY_CODES, ah as FFID_MAX_ORGANIZATION_LOGO_FILE_SIZE_BYTES, ai as FFID_MAX_ORGANIZATION_LOGO_FILE_SIZE_MB, aj as FFID_ORGANIZATION_PROFILE_ERROR_CODES, ak as TokenData, al as TokenStore, am as createFFIDClient, an as createTokenStore } from '../ffid-client-
|
|
1
|
+
import { F as FFIDLogger, a as FFIDError, b as FFIDCacheAdapter, c as FFIDVerifyAccessTokenOptions, d as FFIDApiResponse, e as FFIDOAuthUserInfo, f as FFIDCatalogEnvironment, g as FFIDBillingInterval, h as FFIDTaxBehavior, i as FFIDPublishedCatalog } from '../ffid-client-6aLs9Fqc.cjs';
|
|
2
|
+
export { j as FFIDAddMemberParams, k as FFIDAddMemberRequest, l as FFIDAddMemberResponse, m as FFIDAllowedLogoMimeType, n as FFIDAssignableMemberRole, o as FFIDCacheConfig, p as FFIDCatalogPublication, q as FFIDCatalogPublicationStatus, r as FFIDClient, s as FFIDCompanySizeCode, t as FFIDConfig, u as FFIDIndustryCode, v as FFIDListMembersResponse, w as FFIDListingConsentInput, x as FFIDLogoWallEntry, y as FFIDLogoWallResponse, z as FFIDMemberRole, A as FFIDOrganization, B as FFIDOrganizationLogoUploadResponse, C as FFIDOrganizationMember, D as FFIDOrganizationProfile, E as FFIDOrganizationProfileErrorCode, G as FFIDOrganizationProfileResponse, H as FFIDOtpSendResponse, I as FFIDOtpVerifyResponse, J as FFIDPasswordResetConfirmResponse, K as FFIDPasswordResetResponse, L as FFIDPasswordResetVerifyResponse, M as FFIDProfileCallOptions, N as FFIDProvisionMemberPlan, O as FFIDProvisionMemberPlanStatus, P as FFIDProvisionMemberResult, Q as FFIDProvisionMemberStatus, R as FFIDProvisionOrganizationDryRun, S as FFIDProvisionOrganizationMemberInput, T as FFIDProvisionOrganizationOutcome, U as FFIDProvisionOrganizationParams, V as FFIDProvisionOrganizationResponse, W as FFIDProvisionUserDryRun, X as FFIDProvisionUserOutcome, Y as FFIDProvisionUserParams, Z as FFIDProvisionUserProfileInput, _ as FFIDProvisionUserResponse, $ as FFIDProvisionedOrganization, a0 as FFIDProvisionedUser, a1 as FFIDPublishedPlan, a2 as FFIDRemoveMemberResponse, a3 as FFIDResetSessionResponse, a4 as FFIDSubscription, a5 as FFIDUpdateMemberRoleResponse, a6 as FFIDUpdateUserProfileRequest, a7 as FFIDUploadOrganizationLogoParams, a8 as FFIDUpsertOrganizationProfileParams, a9 as FFIDUpsertOrganizationProfileRequest, aa as FFIDUser, ab as FFIDUserProfile, ac as FFID_ALLOWED_ORGANIZATION_LOGO_MIME_TYPES, ad as FFID_CATALOG_ENVIRONMENTS, ae as FFID_CATALOG_PUBLICATION_STATUSES, af as FFID_COMPANY_SIZE_CODES, ag as FFID_INDUSTRY_CODES, ah as FFID_MAX_ORGANIZATION_LOGO_FILE_SIZE_BYTES, ai as FFID_MAX_ORGANIZATION_LOGO_FILE_SIZE_MB, aj as FFID_ORGANIZATION_PROFILE_ERROR_CODES, ak as TokenData, al as TokenStore, am as createFFIDClient, an as createTokenStore } from '../ffid-client-6aLs9Fqc.cjs';
|
|
3
3
|
export { D as DEFAULT_API_BASE_URL, a as DEFAULT_OAUTH_SCOPES } from '../constants-Ce2eXQtB.cjs';
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
import '../types-Cjb9J0rL.cjs';
|
package/dist/server/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { F as FFIDLogger, a as FFIDError, b as FFIDCacheAdapter, c as FFIDVerifyAccessTokenOptions, d as FFIDApiResponse, e as FFIDOAuthUserInfo, f as FFIDCatalogEnvironment, g as FFIDBillingInterval, h as FFIDTaxBehavior, i as FFIDPublishedCatalog } from '../ffid-client-
|
|
2
|
-
export { j as FFIDAddMemberParams, k as FFIDAddMemberRequest, l as FFIDAddMemberResponse, m as FFIDAllowedLogoMimeType, n as FFIDAssignableMemberRole, o as FFIDCacheConfig, p as FFIDCatalogPublication, q as FFIDCatalogPublicationStatus, r as FFIDClient, s as FFIDCompanySizeCode, t as FFIDConfig, u as FFIDIndustryCode, v as FFIDListMembersResponse, w as FFIDListingConsentInput, x as FFIDLogoWallEntry, y as FFIDLogoWallResponse, z as FFIDMemberRole, A as FFIDOrganization, B as FFIDOrganizationLogoUploadResponse, C as FFIDOrganizationMember, D as FFIDOrganizationProfile, E as FFIDOrganizationProfileErrorCode, G as FFIDOrganizationProfileResponse, H as FFIDOtpSendResponse, I as FFIDOtpVerifyResponse, J as FFIDPasswordResetConfirmResponse, K as FFIDPasswordResetResponse, L as FFIDPasswordResetVerifyResponse, M as FFIDProfileCallOptions, N as FFIDProvisionMemberPlan, O as FFIDProvisionMemberPlanStatus, P as FFIDProvisionMemberResult, Q as FFIDProvisionMemberStatus, R as FFIDProvisionOrganizationDryRun, S as FFIDProvisionOrganizationMemberInput, T as FFIDProvisionOrganizationOutcome, U as FFIDProvisionOrganizationParams, V as FFIDProvisionOrganizationResponse, W as FFIDProvisionUserDryRun, X as FFIDProvisionUserOutcome, Y as FFIDProvisionUserParams, Z as FFIDProvisionUserProfileInput, _ as FFIDProvisionUserResponse, $ as FFIDProvisionedOrganization, a0 as FFIDProvisionedUser, a1 as FFIDPublishedPlan, a2 as FFIDRemoveMemberResponse, a3 as FFIDResetSessionResponse, a4 as FFIDSubscription, a5 as FFIDUpdateMemberRoleResponse, a6 as FFIDUpdateUserProfileRequest, a7 as FFIDUploadOrganizationLogoParams, a8 as FFIDUpsertOrganizationProfileParams, a9 as FFIDUpsertOrganizationProfileRequest, aa as FFIDUser, ab as FFIDUserProfile, ac as FFID_ALLOWED_ORGANIZATION_LOGO_MIME_TYPES, ad as FFID_CATALOG_ENVIRONMENTS, ae as FFID_CATALOG_PUBLICATION_STATUSES, af as FFID_COMPANY_SIZE_CODES, ag as FFID_INDUSTRY_CODES, ah as FFID_MAX_ORGANIZATION_LOGO_FILE_SIZE_BYTES, ai as FFID_MAX_ORGANIZATION_LOGO_FILE_SIZE_MB, aj as FFID_ORGANIZATION_PROFILE_ERROR_CODES, ak as TokenData, al as TokenStore, am as createFFIDClient, an as createTokenStore } from '../ffid-client-
|
|
1
|
+
import { F as FFIDLogger, a as FFIDError, b as FFIDCacheAdapter, c as FFIDVerifyAccessTokenOptions, d as FFIDApiResponse, e as FFIDOAuthUserInfo, f as FFIDCatalogEnvironment, g as FFIDBillingInterval, h as FFIDTaxBehavior, i as FFIDPublishedCatalog } from '../ffid-client-B0cORHac.js';
|
|
2
|
+
export { j as FFIDAddMemberParams, k as FFIDAddMemberRequest, l as FFIDAddMemberResponse, m as FFIDAllowedLogoMimeType, n as FFIDAssignableMemberRole, o as FFIDCacheConfig, p as FFIDCatalogPublication, q as FFIDCatalogPublicationStatus, r as FFIDClient, s as FFIDCompanySizeCode, t as FFIDConfig, u as FFIDIndustryCode, v as FFIDListMembersResponse, w as FFIDListingConsentInput, x as FFIDLogoWallEntry, y as FFIDLogoWallResponse, z as FFIDMemberRole, A as FFIDOrganization, B as FFIDOrganizationLogoUploadResponse, C as FFIDOrganizationMember, D as FFIDOrganizationProfile, E as FFIDOrganizationProfileErrorCode, G as FFIDOrganizationProfileResponse, H as FFIDOtpSendResponse, I as FFIDOtpVerifyResponse, J as FFIDPasswordResetConfirmResponse, K as FFIDPasswordResetResponse, L as FFIDPasswordResetVerifyResponse, M as FFIDProfileCallOptions, N as FFIDProvisionMemberPlan, O as FFIDProvisionMemberPlanStatus, P as FFIDProvisionMemberResult, Q as FFIDProvisionMemberStatus, R as FFIDProvisionOrganizationDryRun, S as FFIDProvisionOrganizationMemberInput, T as FFIDProvisionOrganizationOutcome, U as FFIDProvisionOrganizationParams, V as FFIDProvisionOrganizationResponse, W as FFIDProvisionUserDryRun, X as FFIDProvisionUserOutcome, Y as FFIDProvisionUserParams, Z as FFIDProvisionUserProfileInput, _ as FFIDProvisionUserResponse, $ as FFIDProvisionedOrganization, a0 as FFIDProvisionedUser, a1 as FFIDPublishedPlan, a2 as FFIDRemoveMemberResponse, a3 as FFIDResetSessionResponse, a4 as FFIDSubscription, a5 as FFIDUpdateMemberRoleResponse, a6 as FFIDUpdateUserProfileRequest, a7 as FFIDUploadOrganizationLogoParams, a8 as FFIDUpsertOrganizationProfileParams, a9 as FFIDUpsertOrganizationProfileRequest, aa as FFIDUser, ab as FFIDUserProfile, ac as FFID_ALLOWED_ORGANIZATION_LOGO_MIME_TYPES, ad as FFID_CATALOG_ENVIRONMENTS, ae as FFID_CATALOG_PUBLICATION_STATUSES, af as FFID_COMPANY_SIZE_CODES, ag as FFID_INDUSTRY_CODES, ah as FFID_MAX_ORGANIZATION_LOGO_FILE_SIZE_BYTES, ai as FFID_MAX_ORGANIZATION_LOGO_FILE_SIZE_MB, aj as FFID_ORGANIZATION_PROFILE_ERROR_CODES, ak as TokenData, al as TokenStore, am as createFFIDClient, an as createTokenStore } from '../ffid-client-B0cORHac.js';
|
|
3
3
|
export { D as DEFAULT_API_BASE_URL, a as DEFAULT_OAUTH_SCOPES } from '../constants-Ce2eXQtB.js';
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
import '../types-Cjb9J0rL.js';
|
package/dist/server/index.js
CHANGED
|
@@ -154,7 +154,7 @@ function normalizeUserinfo(raw) {
|
|
|
154
154
|
emailVerified: raw.email_verified,
|
|
155
155
|
name: raw.name,
|
|
156
156
|
picture: raw.picture,
|
|
157
|
-
companyName:
|
|
157
|
+
companyName: null,
|
|
158
158
|
department: raw.department ?? null,
|
|
159
159
|
position: raw.position ?? null,
|
|
160
160
|
phoneNumber: raw.phone_number ?? null,
|
|
@@ -463,7 +463,7 @@ function createVerifyAccessToken(deps) {
|
|
|
463
463
|
email_verified: introspectResponse.email_verified,
|
|
464
464
|
name: introspectResponse.name ?? null,
|
|
465
465
|
picture: introspectResponse.picture ?? null,
|
|
466
|
-
company_name:
|
|
466
|
+
company_name: null,
|
|
467
467
|
department: introspectResponse.department ?? null,
|
|
468
468
|
position: introspectResponse.position ?? null,
|
|
469
469
|
phone_number: introspectResponse.phone_number ?? null,
|
|
@@ -714,6 +714,24 @@ function validateSeatChangePreview(preview) {
|
|
|
714
714
|
`SDK: server returned malformed SeatChangePreview \u2014 estimateReason must be one of 'no_stripe_data' | 'custom_pricing' | 'stripe_error' (got ${JSON.stringify(p.estimateReason)})`
|
|
715
715
|
);
|
|
716
716
|
}
|
|
717
|
+
if (p.willApplyAtPeriodEnd !== void 0 && typeof p.willApplyAtPeriodEnd !== "boolean") {
|
|
718
|
+
throw new FFIDSDKError(
|
|
719
|
+
MALFORMED_SEAT_PREVIEW_CODE,
|
|
720
|
+
`SDK: server returned malformed SeatChangePreview \u2014 willApplyAtPeriodEnd must be boolean when present (got ${typeof p.willApplyAtPeriodEnd})`
|
|
721
|
+
);
|
|
722
|
+
}
|
|
723
|
+
if (p.effectiveDate !== void 0 && p.effectiveDate !== null && typeof p.effectiveDate !== "string") {
|
|
724
|
+
throw new FFIDSDKError(
|
|
725
|
+
MALFORMED_SEAT_PREVIEW_CODE,
|
|
726
|
+
`SDK: server returned malformed SeatChangePreview \u2014 effectiveDate must be string or null when present (got ${typeof p.effectiveDate})`
|
|
727
|
+
);
|
|
728
|
+
}
|
|
729
|
+
if (p.willApplyAtPeriodEnd === true && p.proratedAmount !== 0) {
|
|
730
|
+
throw new FFIDSDKError(
|
|
731
|
+
MALFORMED_SEAT_PREVIEW_CODE,
|
|
732
|
+
`SDK: server returned malformed SeatChangePreview \u2014 willApplyAtPeriodEnd=true requires proratedAmount=0 (got ${JSON.stringify(p.proratedAmount)})`
|
|
733
|
+
);
|
|
734
|
+
}
|
|
717
735
|
if (!Array.isArray(p.lineItems)) {
|
|
718
736
|
throw new FFIDSDKError(
|
|
719
737
|
MALFORMED_SEAT_PREVIEW_CODE,
|
|
@@ -1354,7 +1372,7 @@ var FFID_ORGANIZATION_PROFILE_ERROR_CODES = {
|
|
|
1354
1372
|
};
|
|
1355
1373
|
|
|
1356
1374
|
// src/client/version-check.ts
|
|
1357
|
-
var SDK_VERSION = "
|
|
1375
|
+
var SDK_VERSION = "8.1.0";
|
|
1358
1376
|
var SDK_USER_AGENT = `FFID-SDK/${SDK_VERSION} (TypeScript)`;
|
|
1359
1377
|
var SDK_VERSION_HEADER = "X-FFID-SDK-Version";
|
|
1360
1378
|
function sdkHeaders() {
|
|
@@ -2513,6 +2531,86 @@ function cleanupStateStorage(logger) {
|
|
|
2513
2531
|
}
|
|
2514
2532
|
}
|
|
2515
2533
|
|
|
2534
|
+
// src/client/agency-invite-token.ts
|
|
2535
|
+
var AGENCY_INVITE_TOKEN_PARAM = "invite";
|
|
2536
|
+
var AGENCY_INVITE_COOKIE_NAME = "ffid_invite";
|
|
2537
|
+
var AGENCY_INVITE_TOKEN_REDACTION = "[REDACTED]";
|
|
2538
|
+
function hasDocument() {
|
|
2539
|
+
return typeof document !== "undefined";
|
|
2540
|
+
}
|
|
2541
|
+
function toQueryString(source) {
|
|
2542
|
+
const queryStart = source.indexOf("?");
|
|
2543
|
+
if (queryStart < 0) return "";
|
|
2544
|
+
const afterQuery = source.slice(queryStart);
|
|
2545
|
+
const fragmentStart = afterQuery.indexOf("#");
|
|
2546
|
+
return fragmentStart < 0 ? afterQuery : afterQuery.slice(0, fragmentStart);
|
|
2547
|
+
}
|
|
2548
|
+
function readTokenFromUrl(options) {
|
|
2549
|
+
const source = options.url ?? (typeof window !== "undefined" ? window.location.search : void 0);
|
|
2550
|
+
if (source === void 0) return void 0;
|
|
2551
|
+
const params = new URLSearchParams(toQueryString(source));
|
|
2552
|
+
return params.get(AGENCY_INVITE_TOKEN_PARAM)?.trim() || void 0;
|
|
2553
|
+
}
|
|
2554
|
+
function readAgencyInviteCookie() {
|
|
2555
|
+
if (!hasDocument()) return void 0;
|
|
2556
|
+
const prefix = `${AGENCY_INVITE_COOKIE_NAME}=`;
|
|
2557
|
+
const raw = document.cookie.split(";").map((entry) => entry.trim()).find((entry) => entry.startsWith(prefix));
|
|
2558
|
+
if (!raw) return void 0;
|
|
2559
|
+
try {
|
|
2560
|
+
return decodeURIComponent(raw.slice(prefix.length)).trim() || void 0;
|
|
2561
|
+
} catch {
|
|
2562
|
+
return void 0;
|
|
2563
|
+
}
|
|
2564
|
+
}
|
|
2565
|
+
function readAgencyInviteToken(options = {}) {
|
|
2566
|
+
return readTokenFromUrl(options) ?? readAgencyInviteCookie();
|
|
2567
|
+
}
|
|
2568
|
+
var REDACT_BOUNDARIES = [
|
|
2569
|
+
"%2526",
|
|
2570
|
+
"%2523",
|
|
2571
|
+
"%253B",
|
|
2572
|
+
"%26",
|
|
2573
|
+
"%23",
|
|
2574
|
+
"%3B",
|
|
2575
|
+
"&",
|
|
2576
|
+
"#",
|
|
2577
|
+
";"
|
|
2578
|
+
];
|
|
2579
|
+
var REDACT_LEADS = ["%253F", "%3F", "?", ...REDACT_BOUNDARIES];
|
|
2580
|
+
var REDACT_SEPARATORS = ["%253D", "%3D", "="];
|
|
2581
|
+
function escapeForRegExp(literal) {
|
|
2582
|
+
return literal.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
2583
|
+
}
|
|
2584
|
+
var REDACT_PATTERN = new RegExp(
|
|
2585
|
+
[
|
|
2586
|
+
// 先頭区切り。`\b` が使えないのは、入れ子形 (`%3Finvite%3D`) では `F` と `i` が
|
|
2587
|
+
// どちらも単語文字なので単語境界が存在しないため。
|
|
2588
|
+
`(^|${REDACT_LEADS.map(escapeForRegExp).join("|")})`,
|
|
2589
|
+
// パラメータ名と区切りはキャプチャして再出力する。`i` フラグがあるので、
|
|
2590
|
+
// 入力の `INVITE=` / `%3d` などの元の表記を保つ必要がある。
|
|
2591
|
+
`(${AGENCY_INVITE_TOKEN_PARAM})`,
|
|
2592
|
+
`(${REDACT_SEPARATORS.map(escapeForRegExp).join("|")})`,
|
|
2593
|
+
// 値。境界の直前まで貪欲に食う。`\s` は終端にしない — 生の空白や改行を含む
|
|
2594
|
+
// トークンでマスクが途中で切れ、後半が漏れる。
|
|
2595
|
+
`(?:(?!${REDACT_BOUNDARIES.map(escapeForRegExp).join("|")})[^&#;])*`
|
|
2596
|
+
].join(""),
|
|
2597
|
+
"gi"
|
|
2598
|
+
);
|
|
2599
|
+
function redactAgencyInviteToken(url) {
|
|
2600
|
+
return url.replace(
|
|
2601
|
+
REDACT_PATTERN,
|
|
2602
|
+
// 文字列 replacement(`'$1$2$3[REDACTED]'`)にしないのは、
|
|
2603
|
+
// `AGENCY_INVITE_TOKEN_REDACTION` に `$` が入った瞬間に置換パターンとして
|
|
2604
|
+
// 解釈される罠を作らないため。
|
|
2605
|
+
(_match, lead, name, separator) => `${lead}${name}${separator}${AGENCY_INVITE_TOKEN_REDACTION}`
|
|
2606
|
+
);
|
|
2607
|
+
}
|
|
2608
|
+
function appendAgencyInviteToken(signupUrl, token) {
|
|
2609
|
+
if (token === void 0) return signupUrl;
|
|
2610
|
+
const separator = signupUrl.includes("?") ? "&" : "?";
|
|
2611
|
+
return `${signupUrl}${separator}${AGENCY_INVITE_TOKEN_PARAM}=${encodeURIComponent(token)}`;
|
|
2612
|
+
}
|
|
2613
|
+
|
|
2516
2614
|
// src/client/redirect.ts
|
|
2517
2615
|
var OAUTH_AUTHORIZE_ENDPOINT = "/api/v1/oauth/authorize";
|
|
2518
2616
|
var AUTH_LOGOUT_ENDPOINT = "/api/v1/auth/logout";
|
|
@@ -2525,6 +2623,7 @@ var REDIRECT_LOOP_WINDOW_MS = 6e4;
|
|
|
2525
2623
|
var REDIRECT_LOOP_THRESHOLD = 3;
|
|
2526
2624
|
var storageReadFailureLogged = false;
|
|
2527
2625
|
var storageWriteFailureLogged = false;
|
|
2626
|
+
var ssrInviteTokenUnavailableLogged = false;
|
|
2528
2627
|
function isLoopDetectionDegraded() {
|
|
2529
2628
|
return storageReadFailureLogged || storageWriteFailureLogged;
|
|
2530
2629
|
}
|
|
@@ -2703,12 +2802,16 @@ function createRedirectMethods(deps) {
|
|
|
2703
2802
|
}
|
|
2704
2803
|
if (options?.screenHint === SCREEN_HINT_SIGNUP) {
|
|
2705
2804
|
params.set(SCREEN_HINT_PARAM, SCREEN_HINT_SIGNUP);
|
|
2805
|
+
const inviteToken = readAgencyInviteToken();
|
|
2806
|
+
if (inviteToken !== void 0) {
|
|
2807
|
+
params.set(AGENCY_INVITE_TOKEN_PARAM, inviteToken);
|
|
2808
|
+
}
|
|
2706
2809
|
}
|
|
2707
2810
|
if (options?.prompt) {
|
|
2708
2811
|
params.set("prompt", options.prompt);
|
|
2709
2812
|
}
|
|
2710
2813
|
const authorizeUrl = `${baseUrl}${OAUTH_AUTHORIZE_ENDPOINT}?${params.toString()}`;
|
|
2711
|
-
logger.debug("Redirecting to authorize:", authorizeUrl);
|
|
2814
|
+
logger.debug("Redirecting to authorize:", redactAgencyInviteToken(authorizeUrl));
|
|
2712
2815
|
recordRedirectAttempt(authorizeKey, now, logger);
|
|
2713
2816
|
try {
|
|
2714
2817
|
window.location.href = authorizeUrl;
|
|
@@ -2727,7 +2830,7 @@ function createRedirectMethods(deps) {
|
|
|
2727
2830
|
return redirectToAuthorize(options);
|
|
2728
2831
|
}
|
|
2729
2832
|
const targetUrl = options?.screenHint === SCREEN_HINT_SIGNUP ? getSignupUrl() : getLoginUrl(void 0, options?.prompt ? { prompt: options.prompt } : void 0);
|
|
2730
|
-
logger.debug("Redirecting to auth page:", targetUrl);
|
|
2833
|
+
logger.debug("Redirecting to auth page:", redactAgencyInviteToken(targetUrl));
|
|
2731
2834
|
window.location.href = targetUrl;
|
|
2732
2835
|
return { success: true };
|
|
2733
2836
|
}
|
|
@@ -2744,7 +2847,7 @@ function createRedirectMethods(deps) {
|
|
|
2744
2847
|
const promptSuffix = options?.prompt ? `&prompt=${encodeURIComponent(options.prompt)}` : "";
|
|
2745
2848
|
return `${baseUrl}/login?redirect=${encodeURIComponent(redirect)}&service=${encodeURIComponent(serviceCode)}${promptSuffix}`;
|
|
2746
2849
|
}
|
|
2747
|
-
function getSignupUrl(redirectUrl) {
|
|
2850
|
+
function getSignupUrl(redirectUrl, options) {
|
|
2748
2851
|
let redirect;
|
|
2749
2852
|
if (redirectUrl != null) {
|
|
2750
2853
|
redirect = redirectUrl;
|
|
@@ -2754,7 +2857,22 @@ function createRedirectMethods(deps) {
|
|
|
2754
2857
|
logger.warn("getSignupUrl: SSR \u74B0\u5883\u3067 redirectUrl \u304C\u672A\u6307\u5B9A\u306E\u305F\u3081\u7A7A\u6587\u5B57\u306B\u30D5\u30A9\u30FC\u30EB\u30D0\u30C3\u30AF\u3057\u307E\u3059");
|
|
2755
2858
|
redirect = "";
|
|
2756
2859
|
}
|
|
2757
|
-
|
|
2860
|
+
let inviteToken = options?.inviteToken;
|
|
2861
|
+
if (inviteToken === void 0) {
|
|
2862
|
+
inviteToken = readAgencyInviteToken();
|
|
2863
|
+
if (inviteToken === void 0 && typeof window === "undefined") {
|
|
2864
|
+
if (!ssrInviteTokenUnavailableLogged) {
|
|
2865
|
+
ssrInviteTokenUnavailableLogged = true;
|
|
2866
|
+
logger.warn(
|
|
2867
|
+
"[FFID SDK] getSignupUrl: SSR \u3067\u306F\u62DB\u5F85\u30C8\u30FC\u30AF\u30F3\uFF08invite\uFF09\u3092\u8AAD\u3081\u307E\u305B\u3093\u3002\u4EE3\u7406\u5E97\u306E\u62DB\u5F85\u30EA\u30F3\u30AF\u3092\u4F7F\u3046\u5834\u5408\u306F options.inviteToken \u306B\u6E21\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u4F7F\u3063\u3066\u3044\u306A\u3044\u5834\u5408\u306F\u3053\u306E\u8B66\u544A\u3092\u7121\u8996\u3057\u3066\u3088\u3044\uFF09"
|
|
2868
|
+
);
|
|
2869
|
+
}
|
|
2870
|
+
}
|
|
2871
|
+
}
|
|
2872
|
+
return appendAgencyInviteToken(
|
|
2873
|
+
`${baseUrl}/signup?redirect=${encodeURIComponent(redirect)}&service=${encodeURIComponent(serviceCode)}`,
|
|
2874
|
+
inviteToken
|
|
2875
|
+
);
|
|
2758
2876
|
}
|
|
2759
2877
|
function getLogoutUrl(postLogoutRedirectUri) {
|
|
2760
2878
|
const url = new URL(`${baseUrl}${AUTH_LOGOUT_ENDPOINT}`);
|
|
@@ -2770,7 +2888,7 @@ function createRedirectMethods(deps) {
|
|
|
2770
2888
|
return { success: false, error: "SSR \u74B0\u5883\u3067\u306F\u30EA\u30C0\u30A4\u30EC\u30AF\u30C8\u3067\u304D\u307E\u305B\u3093" };
|
|
2771
2889
|
}
|
|
2772
2890
|
const logoutUrl = getLogoutUrl(postLogoutRedirectUri);
|
|
2773
|
-
logger.debug("Redirecting to logout:", logoutUrl);
|
|
2891
|
+
logger.debug("Redirecting to logout:", redactAgencyInviteToken(logoutUrl));
|
|
2774
2892
|
window.location.href = logoutUrl;
|
|
2775
2893
|
return { success: true };
|
|
2776
2894
|
}
|
|
@@ -4324,9 +4442,9 @@ function createServerAuthClient(config) {
|
|
|
4324
4442
|
var FFID_SESSION_COOKIE_NAME = "ffid_session";
|
|
4325
4443
|
var DEFAULT_PATH = "/";
|
|
4326
4444
|
var DEFAULT_SAME_SITE = "lax";
|
|
4327
|
-
var
|
|
4445
|
+
var HOURS_PER_DAY3 = 24;
|
|
4328
4446
|
var DEFAULT_MAX_AGE_DAYS = 30;
|
|
4329
|
-
var DEFAULT_MAX_AGE_SECONDS = 60 * 60 *
|
|
4447
|
+
var DEFAULT_MAX_AGE_SECONDS = 60 * 60 * HOURS_PER_DAY3 * DEFAULT_MAX_AGE_DAYS;
|
|
4330
4448
|
var BASE64_GROUP = 4;
|
|
4331
4449
|
function base64UrlEncode2(input) {
|
|
4332
4450
|
const bytes = new TextEncoder().encode(input);
|