@feelflow/ffid-sdk 5.18.0 → 5.21.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 +77 -0
- package/dist/agency/index.cjs +4 -2
- package/dist/agency/index.js +4 -2
- package/dist/announcements/index.cjs +2 -1
- package/dist/announcements/index.js +2 -1
- package/dist/{chunk-55S5VUWR.cjs → chunk-RDQ4R3XC.cjs} +190 -49
- package/dist/{chunk-L2H56C4W.js → chunk-U57ZDFEN.js} +190 -49
- 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-Cwk6cG3b.d.cts → ffid-client-BQPhm-XL.d.cts} +268 -9
- package/dist/{ffid-client-w8Twi5lD.d.ts → ffid-client-Bx8y4SwC.d.ts} +268 -9
- package/dist/{index-Bkul-fRw.d.cts → index--wRiPlpi.d.cts} +54 -8
- package/dist/{index-Bkul-fRw.d.ts → index--wRiPlpi.d.ts} +54 -8
- package/dist/index.cjs +42 -42
- package/dist/index.d.cts +217 -4
- package/dist/index.d.ts +217 -4
- package/dist/index.js +2 -2
- package/dist/legal/index.cjs +2 -1
- package/dist/legal/index.js +2 -1
- package/dist/server/index.cjs +188 -48
- package/dist/server/index.d.cts +2 -2
- package/dist/server/index.d.ts +2 -2
- package/dist/server/index.js +188 -48
- package/dist/server/test/index.d.cts +1 -1
- package/dist/server/test/index.d.ts +1 -1
- package/dist/webhooks/index.cjs +2 -2
- package/dist/webhooks/index.js +2 -2
- package/package.json +1 -1
|
@@ -264,10 +264,12 @@ var OAUTH_INTROSPECT_ENDPOINT = "/api/v1/oauth/introspect";
|
|
|
264
264
|
var CACHE_KEY_PREFIX = "ffid:introspect:";
|
|
265
265
|
var HEX_BASE = 16;
|
|
266
266
|
var HEX_BYTE_WIDTH = 2;
|
|
267
|
-
var TOKEN_LOG_PREFIX_LENGTH = 8;
|
|
268
267
|
function createVerifyAccessToken(deps) {
|
|
269
268
|
const { authMode, baseUrl, serviceCode, serviceApiKey, verifyStrategy, logger, createError, errorCodes, cache, timeout } = deps;
|
|
270
269
|
let jwtVerify2 = null;
|
|
270
|
+
let cacheReadFailureEscalated = false;
|
|
271
|
+
let cacheWriteFailureEscalated = false;
|
|
272
|
+
let missingSubtleCryptoLogged = false;
|
|
271
273
|
function getJwtVerifier() {
|
|
272
274
|
if (!jwtVerify2) {
|
|
273
275
|
jwtVerify2 = createJwtVerifier({
|
|
@@ -327,8 +329,9 @@ function createVerifyAccessToken(deps) {
|
|
|
327
329
|
}
|
|
328
330
|
const url = `${baseUrl}${OAUTH_INTROSPECT_ENDPOINT}`;
|
|
329
331
|
logger.debug("Verifying access token:", url);
|
|
330
|
-
const cacheKey = cache ? await buildCacheKey(accessToken, cacheKeySuffix) :
|
|
331
|
-
|
|
332
|
+
const cacheKey = cache ? await buildCacheKey(accessToken, cacheKeySuffix) : null;
|
|
333
|
+
let verificationCacheDegraded = cache !== void 0 && cacheKey === null;
|
|
334
|
+
if (cache && cacheKey !== null) {
|
|
332
335
|
try {
|
|
333
336
|
const cached = await cache.adapter.get(cacheKey);
|
|
334
337
|
if (cached && typeof cached === "object" && "sub" in cached) {
|
|
@@ -336,7 +339,16 @@ function createVerifyAccessToken(deps) {
|
|
|
336
339
|
return { data: cached };
|
|
337
340
|
}
|
|
338
341
|
} catch (cacheError) {
|
|
339
|
-
|
|
342
|
+
verificationCacheDegraded = true;
|
|
343
|
+
if (!cacheReadFailureEscalated) {
|
|
344
|
+
cacheReadFailureEscalated = true;
|
|
345
|
+
logger.error(
|
|
346
|
+
"Cache read failed \u2014 falling back to API call. Redis \u7B49\u306E cache adapter \u969C\u5BB3\u6642\u306F\u5168 verification \u304C introspect \u306B degrade \u3057\u307E\u3059\uFF08\u3053\u306E error \u306F instance \u3054\u3068\u306B\u521D\u56DE\u306E\u307F\u3001\u4EE5\u964D\u306F warn\uFF09:",
|
|
347
|
+
cacheError
|
|
348
|
+
);
|
|
349
|
+
} else {
|
|
350
|
+
logger.warn("Cache read failed, falling back to API call:", cacheError);
|
|
351
|
+
}
|
|
340
352
|
}
|
|
341
353
|
}
|
|
342
354
|
const fetchOptions = {
|
|
@@ -431,31 +443,40 @@ function createVerifyAccessToken(deps) {
|
|
|
431
443
|
}
|
|
432
444
|
} : base;
|
|
433
445
|
const userinfo = normalizeUserinfo(raw);
|
|
434
|
-
if (cache) {
|
|
446
|
+
if (cache && cacheKey !== null) {
|
|
435
447
|
try {
|
|
436
448
|
await cache.adapter.set(cacheKey, userinfo, cache.ttl);
|
|
437
449
|
} catch (cacheError) {
|
|
438
|
-
|
|
450
|
+
verificationCacheDegraded = true;
|
|
451
|
+
if (!cacheWriteFailureEscalated) {
|
|
452
|
+
cacheWriteFailureEscalated = true;
|
|
453
|
+
logger.error(
|
|
454
|
+
"Cache write failed \u2014 result still returned. cache adapter \u969C\u5BB3\u6642\u306F introspect \u7D50\u679C\u304C\u30AD\u30E3\u30C3\u30B7\u30E5\u3055\u308C\u305A\u5168 verification \u304C API \u547C\u3073\u51FA\u3057\u306B degrade \u3057\u307E\u3059\uFF08\u3053\u306E error \u306F instance \u3054\u3068\u306B\u521D\u56DE\u306E\u307F\u3001\u4EE5\u964D\u306F warn\uFF09:",
|
|
455
|
+
cacheError
|
|
456
|
+
);
|
|
457
|
+
} else {
|
|
458
|
+
logger.warn("Cache write failed (result still returned):", cacheError);
|
|
459
|
+
}
|
|
439
460
|
}
|
|
440
461
|
}
|
|
441
|
-
return { data: userinfo };
|
|
462
|
+
return verificationCacheDegraded ? { data: userinfo, meta: { verificationCacheDegraded: true } } : { data: userinfo };
|
|
442
463
|
}
|
|
443
464
|
async function buildCacheKey(token, suffix) {
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
}
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
465
|
+
if (typeof globalThis.crypto?.subtle?.digest !== "function") {
|
|
466
|
+
if (!missingSubtleCryptoLogged) {
|
|
467
|
+
missingSubtleCryptoLogged = true;
|
|
468
|
+
logger.error(
|
|
469
|
+
"crypto.subtle \u304C\u5229\u7528\u3067\u304D\u306A\u3044\u305F\u3081 introspect \u7D50\u679C\u306E\u30AD\u30E3\u30C3\u30B7\u30E5\u3092\u7121\u52B9\u5316\u3057\u307E\u3057\u305F\uFF08\u30CF\u30C3\u30B7\u30E5\u5316\u3055\u308C\u3066\u3044\u306A\u3044\u30C8\u30FC\u30AF\u30F3\u3092 cache key \u306B\u4F7F\u308F\u306A\u3044\u305F\u3081\u306E\u63AA\u7F6E #4119\uFF09\u3002\u5168 verification \u304C API \u547C\u3073\u51FA\u3057\u306B\u306A\u308A\u307E\u3059"
|
|
470
|
+
);
|
|
471
|
+
}
|
|
472
|
+
return null;
|
|
473
|
+
}
|
|
474
|
+
const encoder = new TextEncoder();
|
|
475
|
+
const data = encoder.encode(token);
|
|
476
|
+
const hashBuffer = await crypto.subtle.digest("SHA-256", data);
|
|
477
|
+
const hashArray = Array.from(new Uint8Array(hashBuffer));
|
|
478
|
+
const hashHex = hashArray.map((b) => b.toString(HEX_BASE).padStart(HEX_BYTE_WIDTH, "0")).join("");
|
|
479
|
+
const key = CACHE_KEY_PREFIX + hashHex;
|
|
459
480
|
return suffix ? `${key}:${suffix}` : key;
|
|
460
481
|
}
|
|
461
482
|
return verifyAccessToken;
|
|
@@ -873,6 +894,93 @@ function createMembersMethods(deps) {
|
|
|
873
894
|
return { listMembers, addMember, updateMemberRole, removeMember };
|
|
874
895
|
}
|
|
875
896
|
|
|
897
|
+
// src/client/provisioning-methods.ts
|
|
898
|
+
var USER_PROVISION_ENDPOINT = "/api/v1/ext/users/provision";
|
|
899
|
+
var ORGANIZATION_PROVISION_ENDPOINT = "/api/v1/ext/organizations/provision";
|
|
900
|
+
var MAX_PROVISION_MEMBERS = 100;
|
|
901
|
+
var ASSIGNABLE_MEMBER_ROLES = {
|
|
902
|
+
admin: true,
|
|
903
|
+
member: true,
|
|
904
|
+
viewer: true
|
|
905
|
+
};
|
|
906
|
+
function isAssignableMemberRole(role) {
|
|
907
|
+
return Object.hasOwn(ASSIGNABLE_MEMBER_ROLES, role);
|
|
908
|
+
}
|
|
909
|
+
function createProvisioningMethods(deps) {
|
|
910
|
+
const { fetchWithAuth, createError, authMode } = deps;
|
|
911
|
+
function serviceKeyModeError() {
|
|
912
|
+
if (authMode === "service-key") return null;
|
|
913
|
+
return createError(
|
|
914
|
+
"VALIDATION_ERROR",
|
|
915
|
+
"provisionUser / provisionOrganization \u306F service-key \u8A8D\u8A3C\uFF08X-Service-Api-Key\uFF09\u3067\u306E\u307F\u5229\u7528\u3067\u304D\u307E\u3059\u3002Bearer / cookie \u30E2\u30FC\u30C9\u3067\u306F\u547C\u3073\u51FA\u305B\u307E\u305B\u3093"
|
|
916
|
+
);
|
|
917
|
+
}
|
|
918
|
+
async function provisionUser(params) {
|
|
919
|
+
const modeError = serviceKeyModeError();
|
|
920
|
+
if (modeError) return { error: modeError };
|
|
921
|
+
if (!params.email || !params.email.trim()) {
|
|
922
|
+
return { error: createError("VALIDATION_ERROR", "email \u306F\u5FC5\u9808\u3067\u3059") };
|
|
923
|
+
}
|
|
924
|
+
const body = { email: params.email.trim() };
|
|
925
|
+
if (params.profile !== void 0) body.profile = params.profile;
|
|
926
|
+
if (params.dryRun !== void 0) body.dryRun = params.dryRun;
|
|
927
|
+
return fetchWithAuth(USER_PROVISION_ENDPOINT, {
|
|
928
|
+
method: "POST",
|
|
929
|
+
body: JSON.stringify(body)
|
|
930
|
+
});
|
|
931
|
+
}
|
|
932
|
+
async function provisionOrganization(params) {
|
|
933
|
+
const modeError = serviceKeyModeError();
|
|
934
|
+
if (modeError) return { error: modeError };
|
|
935
|
+
if (!params.name || !params.name.trim()) {
|
|
936
|
+
return { error: createError("VALIDATION_ERROR", "name \u306F\u5FC5\u9808\u3067\u3059") };
|
|
937
|
+
}
|
|
938
|
+
if (!params.ownerEmail || !params.ownerEmail.trim()) {
|
|
939
|
+
return { error: createError("VALIDATION_ERROR", "ownerEmail \u306F\u5FC5\u9808\u3067\u3059") };
|
|
940
|
+
}
|
|
941
|
+
if (params.members) {
|
|
942
|
+
if (params.members.length > MAX_PROVISION_MEMBERS) {
|
|
943
|
+
return {
|
|
944
|
+
error: createError(
|
|
945
|
+
"VALIDATION_ERROR",
|
|
946
|
+
`members \u306F1\u30EA\u30AF\u30A8\u30B9\u30C8\u3042\u305F\u308A\u6700\u5927 ${MAX_PROVISION_MEMBERS} \u4EF6\u307E\u3067\u3067\u3059`
|
|
947
|
+
)
|
|
948
|
+
};
|
|
949
|
+
}
|
|
950
|
+
for (const member of params.members) {
|
|
951
|
+
if (!member.email || !member.email.trim()) {
|
|
952
|
+
return { error: createError("VALIDATION_ERROR", "members[].email \u306F\u5FC5\u9808\u3067\u3059") };
|
|
953
|
+
}
|
|
954
|
+
if (!isAssignableMemberRole(member.role)) {
|
|
955
|
+
return {
|
|
956
|
+
error: createError(
|
|
957
|
+
"VALIDATION_ERROR",
|
|
958
|
+
"members[].role \u306F admin\u3001member\u3001viewer \u306E\u3044\u305A\u308C\u304B\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044"
|
|
959
|
+
)
|
|
960
|
+
};
|
|
961
|
+
}
|
|
962
|
+
}
|
|
963
|
+
}
|
|
964
|
+
const body = {
|
|
965
|
+
name: params.name.trim(),
|
|
966
|
+
ownerEmail: params.ownerEmail.trim()
|
|
967
|
+
};
|
|
968
|
+
if (params.billingEmail !== void 0) body.billingEmail = params.billingEmail.trim();
|
|
969
|
+
if (params.members !== void 0) {
|
|
970
|
+
body.members = params.members.map((member) => ({
|
|
971
|
+
email: member.email.trim(),
|
|
972
|
+
role: member.role
|
|
973
|
+
}));
|
|
974
|
+
}
|
|
975
|
+
if (params.dryRun !== void 0) body.dryRun = params.dryRun;
|
|
976
|
+
return fetchWithAuth(ORGANIZATION_PROVISION_ENDPOINT, {
|
|
977
|
+
method: "POST",
|
|
978
|
+
body: JSON.stringify(body)
|
|
979
|
+
});
|
|
980
|
+
}
|
|
981
|
+
return { provisionUser, provisionOrganization };
|
|
982
|
+
}
|
|
983
|
+
|
|
876
984
|
// src/client/seat-methods.ts
|
|
877
985
|
function seatsEndpoint(subscriptionId) {
|
|
878
986
|
return `/api/v1/subscriptions/ext/${encodeURIComponent(subscriptionId)}/seats/assignments`;
|
|
@@ -1117,7 +1225,7 @@ function createNonContractMethods(deps) {
|
|
|
1117
1225
|
}
|
|
1118
1226
|
|
|
1119
1227
|
// src/client/version-check.ts
|
|
1120
|
-
var SDK_VERSION = "5.
|
|
1228
|
+
var SDK_VERSION = "5.21.0";
|
|
1121
1229
|
var SDK_USER_AGENT = `FFID-SDK/${SDK_VERSION} (TypeScript)`;
|
|
1122
1230
|
var SDK_VERSION_HEADER = "X-FFID-SDK-Version";
|
|
1123
1231
|
function sdkHeaders() {
|
|
@@ -1359,33 +1467,48 @@ function createOAuthTokenMethods(deps) {
|
|
|
1359
1467
|
async function signOutToken() {
|
|
1360
1468
|
const tokens = tokenStore.getTokens();
|
|
1361
1469
|
tokenStore.clearTokens();
|
|
1470
|
+
const allRevoked = {
|
|
1471
|
+
revoked: true,
|
|
1472
|
+
accessTokenRevoked: true,
|
|
1473
|
+
refreshTokenRevoked: true
|
|
1474
|
+
};
|
|
1362
1475
|
if (!tokens) {
|
|
1363
1476
|
logger.debug("No tokens to revoke");
|
|
1364
|
-
return { data:
|
|
1477
|
+
return { data: allRevoked };
|
|
1365
1478
|
}
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
);
|
|
1479
|
+
async function revokeOAuthToken(token, tokenTypeHint) {
|
|
1480
|
+
const url = `${baseUrl}${OAUTH_REVOKE_ENDPOINT}`;
|
|
1481
|
+
try {
|
|
1482
|
+
const response = await fetch(url, {
|
|
1483
|
+
method: "POST",
|
|
1484
|
+
credentials: "omit",
|
|
1485
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded", ...sdkHeaders() },
|
|
1486
|
+
body: new URLSearchParams({
|
|
1487
|
+
token,
|
|
1488
|
+
client_id: clientId,
|
|
1489
|
+
token_type_hint: tokenTypeHint
|
|
1490
|
+
}).toString()
|
|
1491
|
+
});
|
|
1492
|
+
return response.ok;
|
|
1493
|
+
} catch {
|
|
1494
|
+
return false;
|
|
1383
1495
|
}
|
|
1384
|
-
}
|
|
1385
|
-
|
|
1496
|
+
}
|
|
1497
|
+
logger.debug("Revoking tokens:", `${baseUrl}${OAUTH_REVOKE_ENDPOINT}`);
|
|
1498
|
+
const accessTokenRevoked = await revokeOAuthToken(tokens.accessToken, "access_token");
|
|
1499
|
+
if (!accessTokenRevoked) {
|
|
1500
|
+
logger.warn("\u30A2\u30AF\u30BB\u30B9\u30C8\u30FC\u30AF\u30F3\u306E\u7121\u52B9\u5316\u30EA\u30AF\u30A8\u30B9\u30C8\u304C\u30B5\u30FC\u30D0\u30FC\u3067\u5931\u6557\u3057\u307E\u3057\u305F");
|
|
1501
|
+
}
|
|
1502
|
+
const refreshTokenRevoked = tokens.refreshToken ? await revokeOAuthToken(tokens.refreshToken, "refresh_token") : true;
|
|
1503
|
+
if (tokens.refreshToken && !refreshTokenRevoked) {
|
|
1504
|
+
logger.warn("\u30EA\u30D5\u30EC\u30C3\u30B7\u30E5\u30C8\u30FC\u30AF\u30F3\u306E\u7121\u52B9\u5316\u30EA\u30AF\u30A8\u30B9\u30C8\u304C\u30B5\u30FC\u30D0\u30FC\u3067\u5931\u6557\u3057\u307E\u3057\u305F");
|
|
1505
|
+
}
|
|
1506
|
+
const revoked = accessTokenRevoked && refreshTokenRevoked;
|
|
1507
|
+
if (!revoked) {
|
|
1508
|
+
logger.warn("\u30C8\u30FC\u30AF\u30F3\u7121\u52B9\u5316\u304C\u4E00\u90E8\u307E\u305F\u306F\u5168\u90E8\u5931\u6557\u3057\u307E\u3057\u305F\uFF08\u30ED\u30FC\u30AB\u30EB\u30C8\u30FC\u30AF\u30F3\u306F\u30AF\u30EA\u30A2\u6E08\u307F\uFF09");
|
|
1386
1509
|
}
|
|
1387
1510
|
logger.debug("Token sign-out completed");
|
|
1388
|
-
return { data:
|
|
1511
|
+
return { data: { revoked, accessTokenRevoked, refreshTokenRevoked } };
|
|
1389
1512
|
}
|
|
1390
1513
|
return { exchangeCodeForTokens, refreshAccessToken, signOutToken };
|
|
1391
1514
|
}
|
|
@@ -1549,7 +1672,7 @@ function createSessionMethods(deps) {
|
|
|
1549
1672
|
}
|
|
1550
1673
|
if (response.status === NO_CONTENT_STATUS) {
|
|
1551
1674
|
logger.debug("Response: 204 No Content");
|
|
1552
|
-
return { data:
|
|
1675
|
+
return { data: { revoked: true } };
|
|
1553
1676
|
}
|
|
1554
1677
|
if (!response.ok) {
|
|
1555
1678
|
try {
|
|
@@ -1576,7 +1699,7 @@ function createSessionMethods(deps) {
|
|
|
1576
1699
|
}
|
|
1577
1700
|
}
|
|
1578
1701
|
logger.debug("Response:", response.status);
|
|
1579
|
-
return { data:
|
|
1702
|
+
return { data: { revoked: true } };
|
|
1580
1703
|
}
|
|
1581
1704
|
return { getSession, signOutCookie };
|
|
1582
1705
|
}
|
|
@@ -1794,6 +1917,9 @@ var REDIRECT_LOOP_WINDOW_MS = 6e4;
|
|
|
1794
1917
|
var REDIRECT_LOOP_THRESHOLD = 3;
|
|
1795
1918
|
var storageReadFailureLogged = false;
|
|
1796
1919
|
var storageWriteFailureLogged = false;
|
|
1920
|
+
function isLoopDetectionDegraded() {
|
|
1921
|
+
return storageReadFailureLogged || storageWriteFailureLogged;
|
|
1922
|
+
}
|
|
1797
1923
|
function logStorageReadFailure(logger, err) {
|
|
1798
1924
|
if (storageReadFailureLogged) return;
|
|
1799
1925
|
storageReadFailureLogged = true;
|
|
@@ -1938,9 +2064,16 @@ function createRedirectMethods(deps) {
|
|
|
1938
2064
|
}
|
|
1939
2065
|
const state = generateRandomState();
|
|
1940
2066
|
if (!storeState(state, logger)) {
|
|
2067
|
+
cleanupVerifierStorage(logger);
|
|
2068
|
+
cleanupStateStorage(logger);
|
|
1941
2069
|
logger.error(
|
|
1942
|
-
"redirectToAuthorize: OAuth state \u3092\u4FDD\u5B58\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08storage \u5229\u7528\u4E0D\u53EF\uFF09\u3002\
|
|
2070
|
+
"redirectToAuthorize: OAuth state \u3092\u4FDD\u5B58\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08storage \u5229\u7528\u4E0D\u53EF\uFF09\u3002\u8A8D\u53EF\u30EA\u30C0\u30A4\u30EC\u30AF\u30C8\u3092\u4E2D\u6B62\u3057\u307E\u3057\u305F"
|
|
1943
2071
|
);
|
|
2072
|
+
return {
|
|
2073
|
+
success: false,
|
|
2074
|
+
code: "state_persistence_failed",
|
|
2075
|
+
error: "OAuth state \u3092\u4FDD\u5B58\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08storage \u5229\u7528\u4E0D\u53EF\uFF09\u3002\u8A8D\u53EF\u30EA\u30C0\u30A4\u30EC\u30AF\u30C8\u3092\u4E2D\u6B62\u3057\u307E\u3057\u305F"
|
|
2076
|
+
};
|
|
1944
2077
|
}
|
|
1945
2078
|
const redirectUri = resolvedRedirectUri ?? window.location.origin + window.location.pathname;
|
|
1946
2079
|
const params = new URLSearchParams({
|
|
@@ -1975,7 +2108,7 @@ function createRedirectMethods(deps) {
|
|
|
1975
2108
|
rollbackLastRedirectAttempt(authorizeKey, logger);
|
|
1976
2109
|
throw err;
|
|
1977
2110
|
}
|
|
1978
|
-
return { success: true };
|
|
2111
|
+
return isLoopDetectionDegraded() ? { success: true, loopDetectionDisabled: true } : { success: true };
|
|
1979
2112
|
}
|
|
1980
2113
|
async function redirectToLogin(options) {
|
|
1981
2114
|
if (typeof window === "undefined") {
|
|
@@ -3128,6 +3261,11 @@ function createFFIDClient(config) {
|
|
|
3128
3261
|
createError,
|
|
3129
3262
|
serviceCode: config.serviceCode
|
|
3130
3263
|
});
|
|
3264
|
+
const { provisionUser, provisionOrganization } = createProvisioningMethods({
|
|
3265
|
+
fetchWithAuth,
|
|
3266
|
+
createError,
|
|
3267
|
+
authMode
|
|
3268
|
+
});
|
|
3131
3269
|
const { getProfile, updateProfile } = createProfileMethods({
|
|
3132
3270
|
fetchWithAuth,
|
|
3133
3271
|
createError
|
|
@@ -3223,6 +3361,8 @@ function createFFIDClient(config) {
|
|
|
3223
3361
|
addMember,
|
|
3224
3362
|
updateMemberRole,
|
|
3225
3363
|
removeMember,
|
|
3364
|
+
provisionUser,
|
|
3365
|
+
provisionOrganization,
|
|
3226
3366
|
getProfile,
|
|
3227
3367
|
updateProfile,
|
|
3228
3368
|
// Non-contract ext API coverage (#3783)
|
|
@@ -4235,7 +4375,8 @@ var quietLogger = {
|
|
|
4235
4375
|
},
|
|
4236
4376
|
warn: () => {
|
|
4237
4377
|
},
|
|
4238
|
-
error: (
|
|
4378
|
+
error: () => {
|
|
4379
|
+
}
|
|
4239
4380
|
};
|
|
4240
4381
|
var consoleLogger2 = {
|
|
4241
4382
|
debug: (...args) => console.debug(SDK_LOG_PREFIX2, ...args),
|
|
@@ -1,34 +1,34 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkRDQ4R3XC_cjs = require('../chunk-RDQ4R3XC.cjs');
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
Object.defineProperty(exports, "FFIDAnnouncementBadge", {
|
|
8
8
|
enumerable: true,
|
|
9
|
-
get: function () { return
|
|
9
|
+
get: function () { return chunkRDQ4R3XC_cjs.FFIDAnnouncementBadge; }
|
|
10
10
|
});
|
|
11
11
|
Object.defineProperty(exports, "FFIDAnnouncementList", {
|
|
12
12
|
enumerable: true,
|
|
13
|
-
get: function () { return
|
|
13
|
+
get: function () { return chunkRDQ4R3XC_cjs.FFIDAnnouncementList; }
|
|
14
14
|
});
|
|
15
15
|
Object.defineProperty(exports, "FFIDInquiryForm", {
|
|
16
16
|
enumerable: true,
|
|
17
|
-
get: function () { return
|
|
17
|
+
get: function () { return chunkRDQ4R3XC_cjs.FFIDInquiryForm; }
|
|
18
18
|
});
|
|
19
19
|
Object.defineProperty(exports, "FFIDLoginButton", {
|
|
20
20
|
enumerable: true,
|
|
21
|
-
get: function () { return
|
|
21
|
+
get: function () { return chunkRDQ4R3XC_cjs.FFIDLoginButton; }
|
|
22
22
|
});
|
|
23
23
|
Object.defineProperty(exports, "FFIDOrganizationSwitcher", {
|
|
24
24
|
enumerable: true,
|
|
25
|
-
get: function () { return
|
|
25
|
+
get: function () { return chunkRDQ4R3XC_cjs.FFIDOrganizationSwitcher; }
|
|
26
26
|
});
|
|
27
27
|
Object.defineProperty(exports, "FFIDSubscriptionBadge", {
|
|
28
28
|
enumerable: true,
|
|
29
|
-
get: function () { return
|
|
29
|
+
get: function () { return chunkRDQ4R3XC_cjs.FFIDSubscriptionBadge; }
|
|
30
30
|
});
|
|
31
31
|
Object.defineProperty(exports, "FFIDUserMenu", {
|
|
32
32
|
enumerable: true,
|
|
33
|
-
get: function () { return
|
|
33
|
+
get: function () { return chunkRDQ4R3XC_cjs.FFIDUserMenu; }
|
|
34
34
|
});
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { H as FFIDAnnouncementBadge, ai as FFIDAnnouncementBadgeClassNames, aj as FFIDAnnouncementBadgeProps, I as FFIDAnnouncementList, ak as FFIDAnnouncementListClassNames, al as FFIDAnnouncementListProps, S as FFIDInquiryForm, T as FFIDInquiryFormCategoryItem, U as FFIDInquiryFormClassNames, V as FFIDInquiryFormLegalLayout, W as FFIDInquiryFormOrganization, X as FFIDInquiryFormPlaceholderContext, Y as FFIDInquiryFormPrefill, Z as FFIDInquiryFormProps, _ as FFIDInquiryFormSubmitData, $ as FFIDInquiryFormSubmitResult, a1 as FFIDLoginButton, am as FFIDLoginButtonProps, a4 as FFIDOrganizationSwitcher, an as FFIDOrganizationSwitcherClassNames, ao as FFIDOrganizationSwitcherProps, a9 as FFIDSubscriptionBadge, ap as FFIDSubscriptionBadgeClassNames, aq as FFIDSubscriptionBadgeProps, ab as FFIDUserMenu, ar as FFIDUserMenuClassNames, as as FFIDUserMenuProps } from '../index--wRiPlpi.cjs';
|
|
2
2
|
import 'react/jsx-runtime';
|
|
3
3
|
import 'react';
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { H as FFIDAnnouncementBadge, ai as FFIDAnnouncementBadgeClassNames, aj as FFIDAnnouncementBadgeProps, I as FFIDAnnouncementList, ak as FFIDAnnouncementListClassNames, al as FFIDAnnouncementListProps, S as FFIDInquiryForm, T as FFIDInquiryFormCategoryItem, U as FFIDInquiryFormClassNames, V as FFIDInquiryFormLegalLayout, W as FFIDInquiryFormOrganization, X as FFIDInquiryFormPlaceholderContext, Y as FFIDInquiryFormPrefill, Z as FFIDInquiryFormProps, _ as FFIDInquiryFormSubmitData, $ as FFIDInquiryFormSubmitResult, a1 as FFIDLoginButton, am as FFIDLoginButtonProps, a4 as FFIDOrganizationSwitcher, an as FFIDOrganizationSwitcherClassNames, ao as FFIDOrganizationSwitcherProps, a9 as FFIDSubscriptionBadge, ap as FFIDSubscriptionBadgeClassNames, aq as FFIDSubscriptionBadgeProps, ab as FFIDUserMenu, ar as FFIDUserMenuClassNames, as as FFIDUserMenuProps } from '../index--wRiPlpi.js';
|
|
2
2
|
import 'react/jsx-runtime';
|
|
3
3
|
import 'react';
|
package/dist/components/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { FFIDAnnouncementBadge, FFIDAnnouncementList, FFIDInquiryForm, FFIDLoginButton, FFIDOrganizationSwitcher, FFIDSubscriptionBadge, FFIDUserMenu } from '../chunk-
|
|
1
|
+
export { FFIDAnnouncementBadge, FFIDAnnouncementList, FFIDInquiryForm, FFIDLoginButton, FFIDOrganizationSwitcher, FFIDSubscriptionBadge, FFIDUserMenu } from '../chunk-U57ZDFEN.js';
|