@feelflow/ffid-sdk 7.0.0 → 7.2.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 +47 -0
- package/dist/{chunk-32VOLLNV.js → chunk-E2AJAVX6.js} +352 -64
- package/dist/{chunk-BI6UM2EJ.cjs → chunk-SOZ2B2ZL.cjs} +357 -63
- package/dist/components/index.cjs +8 -8
- package/dist/components/index.js +1 -1
- package/dist/{ffid-client-C8XV7lUt.d.cts → ffid-client-BFgoVPOZ.d.cts} +161 -1
- package/dist/{ffid-client-CpVixUM3.d.ts → ffid-client-QNEFA3mv.d.ts} +161 -1
- package/dist/index.cjs +82 -58
- package/dist/index.d.cts +161 -1
- package/dist/index.d.ts +161 -1
- package/dist/index.js +2 -2
- package/dist/server/index.cjs +357 -63
- package/dist/server/index.d.cts +2 -2
- package/dist/server/index.d.ts +2 -2
- package/dist/server/index.js +352 -64
- package/dist/server/test/index.d.cts +1 -1
- package/dist/server/test/index.d.ts +1 -1
- package/package.json +1 -1
|
@@ -228,13 +228,18 @@ function mapUserinfoSubscriptionToSession(userinfo, serviceCode) {
|
|
|
228
228
|
];
|
|
229
229
|
}
|
|
230
230
|
var JWKS_ENDPOINT = "/.well-known/jwks.json";
|
|
231
|
-
var
|
|
231
|
+
var LEGACY_JWT_ISSUER = "https://id.feelflow.net";
|
|
232
232
|
var JWT_ALGORITHM = "ES256";
|
|
233
233
|
var JWT_CLOCK_TOLERANCE_SECONDS = 30;
|
|
234
|
+
function resolveAcceptedIssuers(baseUrl) {
|
|
235
|
+
const deployedOrigin = new URL(baseUrl).origin;
|
|
236
|
+
return deployedOrigin === LEGACY_JWT_ISSUER ? [LEGACY_JWT_ISSUER] : [deployedOrigin, LEGACY_JWT_ISSUER];
|
|
237
|
+
}
|
|
234
238
|
function createJwtVerifier(deps) {
|
|
235
239
|
const { baseUrl, serviceCode, logger, createError, errorCodes } = deps;
|
|
236
240
|
const jwksUrl = new URL(JWKS_ENDPOINT, baseUrl);
|
|
237
241
|
const jwks = jose.createRemoteJWKSet(jwksUrl);
|
|
242
|
+
const acceptedIssuers = resolveAcceptedIssuers(baseUrl);
|
|
238
243
|
async function verifyJwt(accessToken) {
|
|
239
244
|
if (!accessToken || !accessToken.trim()) {
|
|
240
245
|
return {
|
|
@@ -247,7 +252,7 @@ function createJwtVerifier(deps) {
|
|
|
247
252
|
try {
|
|
248
253
|
const { payload } = await jose.jwtVerify(accessToken, jwks, {
|
|
249
254
|
algorithms: [JWT_ALGORITHM],
|
|
250
|
-
issuer:
|
|
255
|
+
issuer: acceptedIssuers,
|
|
251
256
|
audience: serviceCode,
|
|
252
257
|
clockTolerance: JWT_CLOCK_TOLERANCE_SECONDS
|
|
253
258
|
});
|
|
@@ -1303,6 +1308,310 @@ function createMembersMethods(deps) {
|
|
|
1303
1308
|
return { listMembers, addMember, updateMemberRole, removeMember };
|
|
1304
1309
|
}
|
|
1305
1310
|
|
|
1311
|
+
// src/types/organization-profile.ts
|
|
1312
|
+
var FFID_INDUSTRY_CODES = [
|
|
1313
|
+
"agriculture",
|
|
1314
|
+
"construction",
|
|
1315
|
+
"manufacturing",
|
|
1316
|
+
"it-software",
|
|
1317
|
+
"telecom",
|
|
1318
|
+
"media",
|
|
1319
|
+
"retail",
|
|
1320
|
+
"wholesale",
|
|
1321
|
+
"finance-insurance",
|
|
1322
|
+
"real-estate",
|
|
1323
|
+
"transport-logistics",
|
|
1324
|
+
"hospitality-food",
|
|
1325
|
+
"healthcare",
|
|
1326
|
+
"education",
|
|
1327
|
+
"professional-services",
|
|
1328
|
+
"marketing-advertising",
|
|
1329
|
+
"energy-utilities",
|
|
1330
|
+
"public-sector",
|
|
1331
|
+
"nonprofit",
|
|
1332
|
+
"other"
|
|
1333
|
+
];
|
|
1334
|
+
var FFID_COMPANY_SIZE_CODES = [
|
|
1335
|
+
"1-10",
|
|
1336
|
+
"11-50",
|
|
1337
|
+
"51-200",
|
|
1338
|
+
"201-500",
|
|
1339
|
+
"501-1000",
|
|
1340
|
+
"1001+"
|
|
1341
|
+
];
|
|
1342
|
+
var BYTES_PER_KB = 1024;
|
|
1343
|
+
var KB_PER_MB = 1024;
|
|
1344
|
+
var FFID_MAX_ORGANIZATION_LOGO_FILE_SIZE_MB = 2;
|
|
1345
|
+
var FFID_MAX_ORGANIZATION_LOGO_FILE_SIZE_BYTES = FFID_MAX_ORGANIZATION_LOGO_FILE_SIZE_MB * KB_PER_MB * BYTES_PER_KB;
|
|
1346
|
+
var FFID_ALLOWED_ORGANIZATION_LOGO_MIME_TYPES = [
|
|
1347
|
+
"image/png",
|
|
1348
|
+
"image/jpeg",
|
|
1349
|
+
"image/webp"
|
|
1350
|
+
];
|
|
1351
|
+
var FFID_ORGANIZATION_PROFILE_ERROR_CODES = {
|
|
1352
|
+
VALIDATION_ERROR: "VALIDATION_ERROR",
|
|
1353
|
+
ORGANIZATION_NOT_FOUND: "ORGANIZATION_NOT_FOUND",
|
|
1354
|
+
CONSENTED_BY_NOT_MEMBER: "CONSENTED_BY_NOT_MEMBER",
|
|
1355
|
+
MISSING_FILE: "MISSING_FILE",
|
|
1356
|
+
INVALID_FILE_TYPE: "INVALID_FILE_TYPE",
|
|
1357
|
+
FILE_TOO_LARGE: "FILE_TOO_LARGE",
|
|
1358
|
+
INVALID_IMAGE: "INVALID_IMAGE",
|
|
1359
|
+
LOGO_UPLOAD_FAILED: "LOGO_UPLOAD_FAILED"
|
|
1360
|
+
};
|
|
1361
|
+
|
|
1362
|
+
// src/client/version-check.ts
|
|
1363
|
+
var SDK_VERSION = "7.2.0";
|
|
1364
|
+
var SDK_USER_AGENT = `FFID-SDK/${SDK_VERSION} (TypeScript)`;
|
|
1365
|
+
var SDK_VERSION_HEADER = "X-FFID-SDK-Version";
|
|
1366
|
+
function sdkHeaders() {
|
|
1367
|
+
if (typeof window !== "undefined") return {};
|
|
1368
|
+
return {
|
|
1369
|
+
"User-Agent": SDK_USER_AGENT,
|
|
1370
|
+
[SDK_VERSION_HEADER]: SDK_VERSION
|
|
1371
|
+
};
|
|
1372
|
+
}
|
|
1373
|
+
var LATEST_VERSION_HEADER = "X-FFID-SDK-Latest-Version";
|
|
1374
|
+
var SEMVER_PATTERN = /^\d+(\.\d+)*$/;
|
|
1375
|
+
var _versionWarningShown = false;
|
|
1376
|
+
function compareSemver(a, b) {
|
|
1377
|
+
const cleanA = a.replace(/^v/, "");
|
|
1378
|
+
const cleanB = b.replace(/^v/, "");
|
|
1379
|
+
if (!SEMVER_PATTERN.test(cleanA) || !SEMVER_PATTERN.test(cleanB)) return 0;
|
|
1380
|
+
const partsA = cleanA.split(".").map(Number);
|
|
1381
|
+
const partsB = cleanB.split(".").map(Number);
|
|
1382
|
+
const maxLen = Math.max(partsA.length, partsB.length);
|
|
1383
|
+
for (let i = 0; i < maxLen; i++) {
|
|
1384
|
+
const numA = partsA[i] ?? 0;
|
|
1385
|
+
const numB = partsB[i] ?? 0;
|
|
1386
|
+
if (numA < numB) return -1;
|
|
1387
|
+
if (numA > numB) return 1;
|
|
1388
|
+
}
|
|
1389
|
+
return 0;
|
|
1390
|
+
}
|
|
1391
|
+
function checkVersionHeader(response, logger) {
|
|
1392
|
+
if (_versionWarningShown) return;
|
|
1393
|
+
if (typeof process !== "undefined" && process.env?.NODE_ENV === "production") return;
|
|
1394
|
+
if (!response.headers?.get) return;
|
|
1395
|
+
const latestVersion = response.headers.get(LATEST_VERSION_HEADER);
|
|
1396
|
+
if (!latestVersion) return;
|
|
1397
|
+
if (compareSemver(SDK_VERSION, latestVersion) < 0) {
|
|
1398
|
+
_versionWarningShown = true;
|
|
1399
|
+
logger.warn(
|
|
1400
|
+
`\u65B0\u3057\u3044\u30D0\u30FC\u30B8\u30E7\u30F3\u304C\u5229\u7528\u53EF\u80FD\u3067\u3059: v${latestVersion} (\u73FE\u5728: v${SDK_VERSION})
|
|
1401
|
+
npm install @feelflow/ffid-sdk@latest \u3067\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u3067\u304D\u307E\u3059`
|
|
1402
|
+
);
|
|
1403
|
+
}
|
|
1404
|
+
}
|
|
1405
|
+
|
|
1406
|
+
// src/client/organization-profile-methods.ts
|
|
1407
|
+
var EXT_PROFILE_ENDPOINT = "/api/v1/organizations/ext/profile";
|
|
1408
|
+
var EXT_PROFILE_LOGO_ENDPOINT = "/api/v1/organizations/ext/profile/logo";
|
|
1409
|
+
var LOGO_WALL_ENDPOINT = "/api/v1/organizations/logo-wall";
|
|
1410
|
+
var DEFAULT_LOGO_UPLOAD_FILENAME = "logo";
|
|
1411
|
+
function isBlank(value) {
|
|
1412
|
+
return !value || !value.trim();
|
|
1413
|
+
}
|
|
1414
|
+
function resolveOrganizationId(organizationIdOrParams) {
|
|
1415
|
+
return typeof organizationIdOrParams === "string" ? organizationIdOrParams : organizationIdOrParams.organizationId;
|
|
1416
|
+
}
|
|
1417
|
+
function resolveUpsertParams(organizationIdOrParams, payload) {
|
|
1418
|
+
if (typeof organizationIdOrParams === "string") {
|
|
1419
|
+
return { ...payload, organizationId: organizationIdOrParams };
|
|
1420
|
+
}
|
|
1421
|
+
return organizationIdOrParams;
|
|
1422
|
+
}
|
|
1423
|
+
function resolveUploadParams(organizationIdOrParams, file) {
|
|
1424
|
+
if (typeof organizationIdOrParams === "string") {
|
|
1425
|
+
return { organizationId: organizationIdOrParams, file };
|
|
1426
|
+
}
|
|
1427
|
+
return organizationIdOrParams;
|
|
1428
|
+
}
|
|
1429
|
+
function buildUpsertBody(params) {
|
|
1430
|
+
const { organizationId, ...body } = params;
|
|
1431
|
+
return body;
|
|
1432
|
+
}
|
|
1433
|
+
function profileQuery(organizationId) {
|
|
1434
|
+
return new URLSearchParams({ organizationId }).toString();
|
|
1435
|
+
}
|
|
1436
|
+
function logoUploadFilename(file) {
|
|
1437
|
+
if (typeof File !== "undefined" && file instanceof File && file.name) {
|
|
1438
|
+
return file.name;
|
|
1439
|
+
}
|
|
1440
|
+
return DEFAULT_LOGO_UPLOAD_FILENAME;
|
|
1441
|
+
}
|
|
1442
|
+
function listingConsentValidationError(listingConsent, createError) {
|
|
1443
|
+
if (!listingConsent || listingConsent.consented !== true) return null;
|
|
1444
|
+
if (isBlank(listingConsent.consentVersion) || isBlank(listingConsent.consentedByUserId)) {
|
|
1445
|
+
return createError(
|
|
1446
|
+
FFID_ORGANIZATION_PROFILE_ERROR_CODES.VALIDATION_ERROR,
|
|
1447
|
+
"\u63B2\u8F09\u540C\u610F\u3092\u8A18\u9332\u3059\u308B\u5834\u5408\u306F consentVersion \u3068 consentedByUserId \u304C\u5FC5\u9808\u3067\u3059"
|
|
1448
|
+
);
|
|
1449
|
+
}
|
|
1450
|
+
return null;
|
|
1451
|
+
}
|
|
1452
|
+
function resolveLogoFile(file, createError) {
|
|
1453
|
+
if (!file) {
|
|
1454
|
+
return {
|
|
1455
|
+
ok: false,
|
|
1456
|
+
error: createError(
|
|
1457
|
+
FFID_ORGANIZATION_PROFILE_ERROR_CODES.MISSING_FILE,
|
|
1458
|
+
"file \u30D5\u30A3\u30FC\u30EB\u30C9\u306B\u30ED\u30B4\u753B\u50CF\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044"
|
|
1459
|
+
)
|
|
1460
|
+
};
|
|
1461
|
+
}
|
|
1462
|
+
if (file.size > FFID_MAX_ORGANIZATION_LOGO_FILE_SIZE_BYTES) {
|
|
1463
|
+
return {
|
|
1464
|
+
ok: false,
|
|
1465
|
+
error: createError(
|
|
1466
|
+
FFID_ORGANIZATION_PROFILE_ERROR_CODES.FILE_TOO_LARGE,
|
|
1467
|
+
`\u30ED\u30B4\u753B\u50CF\u306F${FFID_MAX_ORGANIZATION_LOGO_FILE_SIZE_MB}MB\u4EE5\u4E0B\u306B\u3057\u3066\u304F\u3060\u3055\u3044`
|
|
1468
|
+
)
|
|
1469
|
+
};
|
|
1470
|
+
}
|
|
1471
|
+
if (file.type !== "" && !FFID_ALLOWED_ORGANIZATION_LOGO_MIME_TYPES.includes(file.type)) {
|
|
1472
|
+
return {
|
|
1473
|
+
ok: false,
|
|
1474
|
+
error: createError(
|
|
1475
|
+
FFID_ORGANIZATION_PROFILE_ERROR_CODES.INVALID_FILE_TYPE,
|
|
1476
|
+
"\u30ED\u30B4\u753B\u50CF\u306F PNG / JPEG / WebP \u5F62\u5F0F\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044"
|
|
1477
|
+
)
|
|
1478
|
+
};
|
|
1479
|
+
}
|
|
1480
|
+
return { ok: true, file };
|
|
1481
|
+
}
|
|
1482
|
+
function createOrganizationProfileMethods(deps) {
|
|
1483
|
+
const { fetchWithAuth, createError, authMode, baseUrl, logger, errorCodes } = deps;
|
|
1484
|
+
function serviceKeyModeError() {
|
|
1485
|
+
if (authMode === "service-key") return null;
|
|
1486
|
+
return createError(
|
|
1487
|
+
FFID_ORGANIZATION_PROFILE_ERROR_CODES.VALIDATION_ERROR,
|
|
1488
|
+
"getOrganizationProfile / upsertOrganizationProfile / uploadOrganizationLogo \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"
|
|
1489
|
+
);
|
|
1490
|
+
}
|
|
1491
|
+
function requireOrganizationId(organizationId) {
|
|
1492
|
+
if (isBlank(organizationId)) {
|
|
1493
|
+
return createError(
|
|
1494
|
+
FFID_ORGANIZATION_PROFILE_ERROR_CODES.VALIDATION_ERROR,
|
|
1495
|
+
"organizationId \u306F\u5FC5\u9808\u3067\u3059"
|
|
1496
|
+
);
|
|
1497
|
+
}
|
|
1498
|
+
return null;
|
|
1499
|
+
}
|
|
1500
|
+
async function fetchPublic(endpoint, options = {}) {
|
|
1501
|
+
const url = `${baseUrl}${endpoint}`;
|
|
1502
|
+
logger.debug("Fetching (public):", url);
|
|
1503
|
+
let response;
|
|
1504
|
+
try {
|
|
1505
|
+
response = await fetch(url, {
|
|
1506
|
+
...options,
|
|
1507
|
+
credentials: "omit",
|
|
1508
|
+
headers: {
|
|
1509
|
+
...sdkHeaders(),
|
|
1510
|
+
...options.headers
|
|
1511
|
+
}
|
|
1512
|
+
});
|
|
1513
|
+
} catch (error) {
|
|
1514
|
+
logger.error("Network error:", error);
|
|
1515
|
+
return {
|
|
1516
|
+
error: {
|
|
1517
|
+
code: errorCodes.NETWORK_ERROR,
|
|
1518
|
+
message: error instanceof Error ? error.message : "\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F"
|
|
1519
|
+
}
|
|
1520
|
+
};
|
|
1521
|
+
}
|
|
1522
|
+
let parsed;
|
|
1523
|
+
try {
|
|
1524
|
+
parsed = await response.json();
|
|
1525
|
+
} catch (parseError) {
|
|
1526
|
+
logger.error("Parse error:", parseError, "Status:", response.status);
|
|
1527
|
+
return {
|
|
1528
|
+
error: {
|
|
1529
|
+
code: errorCodes.PARSE_ERROR,
|
|
1530
|
+
message: `\u30B5\u30FC\u30D0\u30FC\u304B\u3089\u4E0D\u6B63\u306A\u30EC\u30B9\u30DD\u30F3\u30B9\u3092\u53D7\u4FE1\u3057\u307E\u3057\u305F (status: ${response.status})`
|
|
1531
|
+
}
|
|
1532
|
+
};
|
|
1533
|
+
}
|
|
1534
|
+
if (!parsed || typeof parsed !== "object") {
|
|
1535
|
+
return {
|
|
1536
|
+
error: {
|
|
1537
|
+
code: errorCodes.PARSE_ERROR,
|
|
1538
|
+
message: `\u30B5\u30FC\u30D0\u30FC\u304B\u3089\u4E0D\u6B63\u306A\u30EC\u30B9\u30DD\u30F3\u30B9\u3092\u53D7\u4FE1\u3057\u307E\u3057\u305F (status: ${response.status})`
|
|
1539
|
+
}
|
|
1540
|
+
};
|
|
1541
|
+
}
|
|
1542
|
+
const raw = parsed;
|
|
1543
|
+
logger.debug("Response (public):", response.status, raw);
|
|
1544
|
+
checkVersionHeader(response, logger);
|
|
1545
|
+
if (!response.ok) {
|
|
1546
|
+
return {
|
|
1547
|
+
error: raw.error ?? {
|
|
1548
|
+
code: errorCodes.UNKNOWN_ERROR,
|
|
1549
|
+
message: "\u4E0D\u660E\u306A\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F"
|
|
1550
|
+
}
|
|
1551
|
+
};
|
|
1552
|
+
}
|
|
1553
|
+
if (raw.data === void 0) {
|
|
1554
|
+
return {
|
|
1555
|
+
error: {
|
|
1556
|
+
code: errorCodes.UNKNOWN_ERROR,
|
|
1557
|
+
message: "\u30B5\u30FC\u30D0\u30FC\u304B\u3089\u30C7\u30FC\u30BF\u304C\u8FD4\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F"
|
|
1558
|
+
}
|
|
1559
|
+
};
|
|
1560
|
+
}
|
|
1561
|
+
return { data: raw.data };
|
|
1562
|
+
}
|
|
1563
|
+
async function getOrganizationProfile(organizationIdOrParams) {
|
|
1564
|
+
const modeError = serviceKeyModeError();
|
|
1565
|
+
if (modeError) return { error: modeError };
|
|
1566
|
+
const organizationId = resolveOrganizationId(organizationIdOrParams);
|
|
1567
|
+
const idError = requireOrganizationId(organizationId);
|
|
1568
|
+
if (idError) return { error: idError };
|
|
1569
|
+
return fetchWithAuth(
|
|
1570
|
+
`${EXT_PROFILE_ENDPOINT}?${profileQuery(organizationId)}`
|
|
1571
|
+
);
|
|
1572
|
+
}
|
|
1573
|
+
async function upsertOrganizationProfile(organizationIdOrParams, payload) {
|
|
1574
|
+
const modeError = serviceKeyModeError();
|
|
1575
|
+
if (modeError) return { error: modeError };
|
|
1576
|
+
const params = resolveUpsertParams(organizationIdOrParams, payload);
|
|
1577
|
+
const idError = requireOrganizationId(params.organizationId);
|
|
1578
|
+
if (idError) return { error: idError };
|
|
1579
|
+
const consentError = listingConsentValidationError(params.listingConsent, createError);
|
|
1580
|
+
if (consentError) return { error: consentError };
|
|
1581
|
+
return fetchWithAuth(
|
|
1582
|
+
`${EXT_PROFILE_ENDPOINT}?${profileQuery(params.organizationId)}`,
|
|
1583
|
+
{
|
|
1584
|
+
method: "PUT",
|
|
1585
|
+
body: JSON.stringify(buildUpsertBody(params))
|
|
1586
|
+
}
|
|
1587
|
+
);
|
|
1588
|
+
}
|
|
1589
|
+
async function uploadOrganizationLogo(organizationIdOrParams, file) {
|
|
1590
|
+
const modeError = serviceKeyModeError();
|
|
1591
|
+
if (modeError) return { error: modeError };
|
|
1592
|
+
const params = resolveUploadParams(organizationIdOrParams, file);
|
|
1593
|
+
const idError = requireOrganizationId(params.organizationId);
|
|
1594
|
+
if (idError) return { error: idError };
|
|
1595
|
+
const logoFile = resolveLogoFile(params.file, createError);
|
|
1596
|
+
if (!logoFile.ok) return { error: logoFile.error };
|
|
1597
|
+
const form = new FormData();
|
|
1598
|
+
form.append("file", logoFile.file, logoUploadFilename(logoFile.file));
|
|
1599
|
+
return fetchWithAuth(
|
|
1600
|
+
`${EXT_PROFILE_LOGO_ENDPOINT}?${profileQuery(params.organizationId)}`,
|
|
1601
|
+
{ method: "POST", body: form }
|
|
1602
|
+
);
|
|
1603
|
+
}
|
|
1604
|
+
async function getPublicLogoWall() {
|
|
1605
|
+
return fetchPublic(LOGO_WALL_ENDPOINT);
|
|
1606
|
+
}
|
|
1607
|
+
return {
|
|
1608
|
+
getOrganizationProfile,
|
|
1609
|
+
upsertOrganizationProfile,
|
|
1610
|
+
uploadOrganizationLogo,
|
|
1611
|
+
getPublicLogoWall
|
|
1612
|
+
};
|
|
1613
|
+
}
|
|
1614
|
+
|
|
1306
1615
|
// src/client/provisioning-methods.ts
|
|
1307
1616
|
var USER_PROVISION_ENDPOINT = "/api/v1/ext/users/provision";
|
|
1308
1617
|
var USER_WELCOME_EMAIL_ENDPOINT = "/api/v1/ext/users/welcome-email";
|
|
@@ -1446,7 +1755,7 @@ function createSeatMethods(deps) {
|
|
|
1446
1755
|
}
|
|
1447
1756
|
|
|
1448
1757
|
// src/client/profile-methods.ts
|
|
1449
|
-
var
|
|
1758
|
+
var EXT_PROFILE_ENDPOINT2 = "/api/v1/users/ext/me";
|
|
1450
1759
|
function resolveAuthOverride(options, createError) {
|
|
1451
1760
|
if (!options || options.accessToken === void 0) {
|
|
1452
1761
|
return {};
|
|
@@ -1467,7 +1776,7 @@ function createProfileMethods(deps) {
|
|
|
1467
1776
|
async function getProfile(options) {
|
|
1468
1777
|
const { override, error } = resolveAuthOverride(options, createError);
|
|
1469
1778
|
if (error) return { error };
|
|
1470
|
-
return fetchWithAuth(
|
|
1779
|
+
return fetchWithAuth(EXT_PROFILE_ENDPOINT2, void 0, override);
|
|
1471
1780
|
}
|
|
1472
1781
|
async function updateProfile(data, options) {
|
|
1473
1782
|
if (data === null || typeof data !== "object" || Array.isArray(data)) {
|
|
@@ -1483,7 +1792,7 @@ function createProfileMethods(deps) {
|
|
|
1483
1792
|
const { override, error } = resolveAuthOverride(options, createError);
|
|
1484
1793
|
if (error) return { error };
|
|
1485
1794
|
return fetchWithAuth(
|
|
1486
|
-
|
|
1795
|
+
EXT_PROFILE_ENDPOINT2,
|
|
1487
1796
|
{
|
|
1488
1797
|
method: "PUT",
|
|
1489
1798
|
body: JSON.stringify(data)
|
|
@@ -1676,50 +1985,6 @@ function validateTokenResponse(tokenResponse) {
|
|
|
1676
1985
|
};
|
|
1677
1986
|
}
|
|
1678
1987
|
|
|
1679
|
-
// src/client/version-check.ts
|
|
1680
|
-
var SDK_VERSION = "7.0.0";
|
|
1681
|
-
var SDK_USER_AGENT = `FFID-SDK/${SDK_VERSION} (TypeScript)`;
|
|
1682
|
-
var SDK_VERSION_HEADER = "X-FFID-SDK-Version";
|
|
1683
|
-
function sdkHeaders() {
|
|
1684
|
-
if (typeof window !== "undefined") return {};
|
|
1685
|
-
return {
|
|
1686
|
-
"User-Agent": SDK_USER_AGENT,
|
|
1687
|
-
[SDK_VERSION_HEADER]: SDK_VERSION
|
|
1688
|
-
};
|
|
1689
|
-
}
|
|
1690
|
-
var LATEST_VERSION_HEADER = "X-FFID-SDK-Latest-Version";
|
|
1691
|
-
var SEMVER_PATTERN = /^\d+(\.\d+)*$/;
|
|
1692
|
-
var _versionWarningShown = false;
|
|
1693
|
-
function compareSemver(a, b) {
|
|
1694
|
-
const cleanA = a.replace(/^v/, "");
|
|
1695
|
-
const cleanB = b.replace(/^v/, "");
|
|
1696
|
-
if (!SEMVER_PATTERN.test(cleanA) || !SEMVER_PATTERN.test(cleanB)) return 0;
|
|
1697
|
-
const partsA = cleanA.split(".").map(Number);
|
|
1698
|
-
const partsB = cleanB.split(".").map(Number);
|
|
1699
|
-
const maxLen = Math.max(partsA.length, partsB.length);
|
|
1700
|
-
for (let i = 0; i < maxLen; i++) {
|
|
1701
|
-
const numA = partsA[i] ?? 0;
|
|
1702
|
-
const numB = partsB[i] ?? 0;
|
|
1703
|
-
if (numA < numB) return -1;
|
|
1704
|
-
if (numA > numB) return 1;
|
|
1705
|
-
}
|
|
1706
|
-
return 0;
|
|
1707
|
-
}
|
|
1708
|
-
function checkVersionHeader(response, logger) {
|
|
1709
|
-
if (_versionWarningShown) return;
|
|
1710
|
-
if (typeof process !== "undefined" && process.env?.NODE_ENV === "production") return;
|
|
1711
|
-
if (!response.headers?.get) return;
|
|
1712
|
-
const latestVersion = response.headers.get(LATEST_VERSION_HEADER);
|
|
1713
|
-
if (!latestVersion) return;
|
|
1714
|
-
if (compareSemver(SDK_VERSION, latestVersion) < 0) {
|
|
1715
|
-
_versionWarningShown = true;
|
|
1716
|
-
logger.warn(
|
|
1717
|
-
`\u65B0\u3057\u3044\u30D0\u30FC\u30B8\u30E7\u30F3\u304C\u5229\u7528\u53EF\u80FD\u3067\u3059: v${latestVersion} (\u73FE\u5728: v${SDK_VERSION})
|
|
1718
|
-
npm install @feelflow/ffid-sdk@latest \u3067\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u3067\u304D\u307E\u3059`
|
|
1719
|
-
);
|
|
1720
|
-
}
|
|
1721
|
-
}
|
|
1722
|
-
|
|
1723
1988
|
// src/client/oauth-token.ts
|
|
1724
1989
|
var OAUTH_TOKEN_ENDPOINT = "/api/v1/oauth/token";
|
|
1725
1990
|
var OAUTH_REVOKE_ENDPOINT = "/api/v1/oauth/revoke";
|
|
@@ -2635,7 +2900,7 @@ function normalizeRedirectUri(input) {
|
|
|
2635
2900
|
|
|
2636
2901
|
// src/client/password-reset.ts
|
|
2637
2902
|
var RESET_PASSWORD_BASE = "/api/v1/auth/reset-password";
|
|
2638
|
-
function
|
|
2903
|
+
function isBlank2(value) {
|
|
2639
2904
|
return !value || !value.trim();
|
|
2640
2905
|
}
|
|
2641
2906
|
function createPasswordResetMethods(deps) {
|
|
@@ -2696,7 +2961,7 @@ function createPasswordResetMethods(deps) {
|
|
|
2696
2961
|
return { data: raw.data };
|
|
2697
2962
|
}
|
|
2698
2963
|
async function requestPasswordReset(email) {
|
|
2699
|
-
if (
|
|
2964
|
+
if (isBlank2(email)) {
|
|
2700
2965
|
return {
|
|
2701
2966
|
error: createError("VALIDATION_ERROR", "\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u306F\u5FC5\u9808\u3067\u3059")
|
|
2702
2967
|
};
|
|
@@ -2710,7 +2975,7 @@ function createPasswordResetMethods(deps) {
|
|
|
2710
2975
|
);
|
|
2711
2976
|
}
|
|
2712
2977
|
async function verifyPasswordResetToken(accessToken) {
|
|
2713
|
-
if (
|
|
2978
|
+
if (isBlank2(accessToken)) {
|
|
2714
2979
|
return {
|
|
2715
2980
|
error: createError("VALIDATION_ERROR", "\u30A2\u30AF\u30BB\u30B9\u30C8\u30FC\u30AF\u30F3\u306F\u5FC5\u9808\u3067\u3059")
|
|
2716
2981
|
};
|
|
@@ -2724,12 +2989,12 @@ function createPasswordResetMethods(deps) {
|
|
|
2724
2989
|
);
|
|
2725
2990
|
}
|
|
2726
2991
|
async function establishResetSession(accessToken, refreshToken) {
|
|
2727
|
-
if (
|
|
2992
|
+
if (isBlank2(accessToken)) {
|
|
2728
2993
|
return {
|
|
2729
2994
|
error: createError("VALIDATION_ERROR", "\u30A2\u30AF\u30BB\u30B9\u30C8\u30FC\u30AF\u30F3\u306F\u5FC5\u9808\u3067\u3059")
|
|
2730
2995
|
};
|
|
2731
2996
|
}
|
|
2732
|
-
if (
|
|
2997
|
+
if (isBlank2(refreshToken)) {
|
|
2733
2998
|
return {
|
|
2734
2999
|
error: createError("VALIDATION_ERROR", "\u30EA\u30D5\u30EC\u30C3\u30B7\u30E5\u30C8\u30FC\u30AF\u30F3\u306F\u5FC5\u9808\u3067\u3059")
|
|
2735
3000
|
};
|
|
@@ -2743,7 +3008,7 @@ function createPasswordResetMethods(deps) {
|
|
|
2743
3008
|
);
|
|
2744
3009
|
}
|
|
2745
3010
|
async function confirmPasswordReset(password) {
|
|
2746
|
-
if (
|
|
3011
|
+
if (isBlank2(password)) {
|
|
2747
3012
|
return {
|
|
2748
3013
|
error: createError("VALIDATION_ERROR", "\u30D1\u30B9\u30EF\u30FC\u30C9\u306F\u5FC5\u9808\u3067\u3059")
|
|
2749
3014
|
};
|
|
@@ -2766,7 +3031,7 @@ function createPasswordResetMethods(deps) {
|
|
|
2766
3031
|
|
|
2767
3032
|
// src/client/otp.ts
|
|
2768
3033
|
var OTP_BASE = "/api/v1/auth/otp";
|
|
2769
|
-
function
|
|
3034
|
+
function isBlank3(value) {
|
|
2770
3035
|
return !value || !value.trim();
|
|
2771
3036
|
}
|
|
2772
3037
|
function createOtpMethods(deps) {
|
|
@@ -2827,7 +3092,7 @@ function createOtpMethods(deps) {
|
|
|
2827
3092
|
return { data: raw.data };
|
|
2828
3093
|
}
|
|
2829
3094
|
async function sendOtp(email, options) {
|
|
2830
|
-
if (
|
|
3095
|
+
if (isBlank3(email)) {
|
|
2831
3096
|
return {
|
|
2832
3097
|
error: createError("VALIDATION_ERROR", "\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u306F\u5FC5\u9808\u3067\u3059")
|
|
2833
3098
|
};
|
|
@@ -2844,12 +3109,12 @@ function createOtpMethods(deps) {
|
|
|
2844
3109
|
);
|
|
2845
3110
|
}
|
|
2846
3111
|
async function verifyOtp(params) {
|
|
2847
|
-
if (
|
|
3112
|
+
if (isBlank3(params.accessToken)) {
|
|
2848
3113
|
return {
|
|
2849
3114
|
error: createError("VALIDATION_ERROR", "\u30A2\u30AF\u30BB\u30B9\u30C8\u30FC\u30AF\u30F3\u306F\u5FC5\u9808\u3067\u3059")
|
|
2850
3115
|
};
|
|
2851
3116
|
}
|
|
2852
|
-
if (
|
|
3117
|
+
if (isBlank3(params.refreshToken)) {
|
|
2853
3118
|
return {
|
|
2854
3119
|
error: createError("VALIDATION_ERROR", "\u30EA\u30D5\u30EC\u30C3\u30B7\u30E5\u30C8\u30FC\u30AF\u30F3\u306F\u5FC5\u9808\u3067\u3059")
|
|
2855
3120
|
};
|
|
@@ -3415,6 +3680,12 @@ function resolveRedirectUri(raw, logger) {
|
|
|
3415
3680
|
return raw;
|
|
3416
3681
|
}
|
|
3417
3682
|
}
|
|
3683
|
+
function jsonContentTypeHeader(body) {
|
|
3684
|
+
if (typeof FormData !== "undefined" && body instanceof FormData) {
|
|
3685
|
+
return {};
|
|
3686
|
+
}
|
|
3687
|
+
return { "Content-Type": "application/json" };
|
|
3688
|
+
}
|
|
3418
3689
|
function createFFIDClient(config) {
|
|
3419
3690
|
if (!config.serviceCode || !config.serviceCode.trim()) {
|
|
3420
3691
|
throw new Error("FFID Client: serviceCode \u304C\u672A\u8A2D\u5B9A\u3067\u3059");
|
|
@@ -3467,7 +3738,7 @@ function createFFIDClient(config) {
|
|
|
3467
3738
|
...options,
|
|
3468
3739
|
credentials: "omit",
|
|
3469
3740
|
headers: {
|
|
3470
|
-
|
|
3741
|
+
...jsonContentTypeHeader(options.body),
|
|
3471
3742
|
...sdkHeaders(),
|
|
3472
3743
|
...options.headers,
|
|
3473
3744
|
Authorization: `Bearer ${authOverride.accessToken}`
|
|
@@ -3479,7 +3750,7 @@ function createFFIDClient(config) {
|
|
|
3479
3750
|
...options,
|
|
3480
3751
|
credentials: "omit",
|
|
3481
3752
|
headers: {
|
|
3482
|
-
|
|
3753
|
+
...jsonContentTypeHeader(options.body),
|
|
3483
3754
|
...sdkHeaders(),
|
|
3484
3755
|
"X-Service-Api-Key": serviceApiKey,
|
|
3485
3756
|
...options.headers
|
|
@@ -3489,7 +3760,7 @@ function createFFIDClient(config) {
|
|
|
3489
3760
|
if (authMode === "token") {
|
|
3490
3761
|
const tokens = tokenStore.getTokens();
|
|
3491
3762
|
const headers = {
|
|
3492
|
-
|
|
3763
|
+
...jsonContentTypeHeader(options.body),
|
|
3493
3764
|
...sdkHeaders(),
|
|
3494
3765
|
...options.headers
|
|
3495
3766
|
};
|
|
@@ -3506,7 +3777,7 @@ function createFFIDClient(config) {
|
|
|
3506
3777
|
...options,
|
|
3507
3778
|
credentials: "include",
|
|
3508
3779
|
headers: {
|
|
3509
|
-
|
|
3780
|
+
...jsonContentTypeHeader(options.body),
|
|
3510
3781
|
...sdkHeaders(),
|
|
3511
3782
|
...options.headers
|
|
3512
3783
|
}
|
|
@@ -3723,6 +3994,19 @@ function createFFIDClient(config) {
|
|
|
3723
3994
|
createError,
|
|
3724
3995
|
serviceCode: config.serviceCode
|
|
3725
3996
|
});
|
|
3997
|
+
const {
|
|
3998
|
+
getOrganizationProfile,
|
|
3999
|
+
upsertOrganizationProfile,
|
|
4000
|
+
uploadOrganizationLogo,
|
|
4001
|
+
getPublicLogoWall
|
|
4002
|
+
} = createOrganizationProfileMethods({
|
|
4003
|
+
fetchWithAuth,
|
|
4004
|
+
createError,
|
|
4005
|
+
authMode,
|
|
4006
|
+
baseUrl,
|
|
4007
|
+
logger,
|
|
4008
|
+
errorCodes: FFID_ERROR_CODES
|
|
4009
|
+
});
|
|
3726
4010
|
const { provisionUser, sendProvisionWelcomeEmail, provisionOrganization } = createProvisioningMethods({
|
|
3727
4011
|
fetchWithAuth,
|
|
3728
4012
|
createError,
|
|
@@ -3823,6 +4107,10 @@ function createFFIDClient(config) {
|
|
|
3823
4107
|
addMember,
|
|
3824
4108
|
updateMemberRole,
|
|
3825
4109
|
removeMember,
|
|
4110
|
+
getOrganizationProfile,
|
|
4111
|
+
upsertOrganizationProfile,
|
|
4112
|
+
uploadOrganizationLogo,
|
|
4113
|
+
getPublicLogoWall,
|
|
3826
4114
|
provisionUser,
|
|
3827
4115
|
sendProvisionWelcomeEmail,
|
|
3828
4116
|
provisionOrganization,
|
|
@@ -6027,13 +6315,19 @@ exports.FFIDProvider = FFIDProvider;
|
|
|
6027
6315
|
exports.FFIDSDKError = FFIDSDKError;
|
|
6028
6316
|
exports.FFIDSubscriptionBadge = FFIDSubscriptionBadge;
|
|
6029
6317
|
exports.FFIDUserMenu = FFIDUserMenu;
|
|
6318
|
+
exports.FFID_ALLOWED_ORGANIZATION_LOGO_MIME_TYPES = FFID_ALLOWED_ORGANIZATION_LOGO_MIME_TYPES;
|
|
6030
6319
|
exports.FFID_ANNOUNCEMENTS_ERROR_CODES = FFID_ANNOUNCEMENTS_ERROR_CODES;
|
|
6031
6320
|
exports.FFID_CATALOG_ENVIRONMENTS = FFID_CATALOG_ENVIRONMENTS;
|
|
6032
6321
|
exports.FFID_CATALOG_PUBLICATION_STATUSES = FFID_CATALOG_PUBLICATION_STATUSES;
|
|
6322
|
+
exports.FFID_COMPANY_SIZE_CODES = FFID_COMPANY_SIZE_CODES;
|
|
6033
6323
|
exports.FFID_ERROR_CODES = FFID_ERROR_CODES;
|
|
6324
|
+
exports.FFID_INDUSTRY_CODES = FFID_INDUSTRY_CODES;
|
|
6034
6325
|
exports.FFID_INQUIRY_ACQUISITION_SOURCES = FFID_INQUIRY_ACQUISITION_SOURCES;
|
|
6035
6326
|
exports.FFID_INQUIRY_CATEGORIES = FFID_INQUIRY_CATEGORIES;
|
|
6036
6327
|
exports.FFID_INQUIRY_CATEGORIES_SITE_2026 = FFID_INQUIRY_CATEGORIES_SITE_2026;
|
|
6328
|
+
exports.FFID_MAX_ORGANIZATION_LOGO_FILE_SIZE_BYTES = FFID_MAX_ORGANIZATION_LOGO_FILE_SIZE_BYTES;
|
|
6329
|
+
exports.FFID_MAX_ORGANIZATION_LOGO_FILE_SIZE_MB = FFID_MAX_ORGANIZATION_LOGO_FILE_SIZE_MB;
|
|
6330
|
+
exports.FFID_ORGANIZATION_PROFILE_ERROR_CODES = FFID_ORGANIZATION_PROFILE_ERROR_CODES;
|
|
6037
6331
|
exports.canonicalizeCatalogValue = canonicalizeCatalogValue;
|
|
6038
6332
|
exports.cleanupStateStorage = cleanupStateStorage;
|
|
6039
6333
|
exports.computeEffectiveStatusFromSession = computeEffectiveStatusFromSession;
|
|
@@ -1,34 +1,34 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkSOZ2B2ZL_cjs = require('../chunk-SOZ2B2ZL.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 chunkSOZ2B2ZL_cjs.FFIDAnnouncementBadge; }
|
|
10
10
|
});
|
|
11
11
|
Object.defineProperty(exports, "FFIDAnnouncementList", {
|
|
12
12
|
enumerable: true,
|
|
13
|
-
get: function () { return
|
|
13
|
+
get: function () { return chunkSOZ2B2ZL_cjs.FFIDAnnouncementList; }
|
|
14
14
|
});
|
|
15
15
|
Object.defineProperty(exports, "FFIDInquiryForm", {
|
|
16
16
|
enumerable: true,
|
|
17
|
-
get: function () { return
|
|
17
|
+
get: function () { return chunkSOZ2B2ZL_cjs.FFIDInquiryForm; }
|
|
18
18
|
});
|
|
19
19
|
Object.defineProperty(exports, "FFIDLoginButton", {
|
|
20
20
|
enumerable: true,
|
|
21
|
-
get: function () { return
|
|
21
|
+
get: function () { return chunkSOZ2B2ZL_cjs.FFIDLoginButton; }
|
|
22
22
|
});
|
|
23
23
|
Object.defineProperty(exports, "FFIDOrganizationSwitcher", {
|
|
24
24
|
enumerable: true,
|
|
25
|
-
get: function () { return
|
|
25
|
+
get: function () { return chunkSOZ2B2ZL_cjs.FFIDOrganizationSwitcher; }
|
|
26
26
|
});
|
|
27
27
|
Object.defineProperty(exports, "FFIDSubscriptionBadge", {
|
|
28
28
|
enumerable: true,
|
|
29
|
-
get: function () { return
|
|
29
|
+
get: function () { return chunkSOZ2B2ZL_cjs.FFIDSubscriptionBadge; }
|
|
30
30
|
});
|
|
31
31
|
Object.defineProperty(exports, "FFIDUserMenu", {
|
|
32
32
|
enumerable: true,
|
|
33
|
-
get: function () { return
|
|
33
|
+
get: function () { return chunkSOZ2B2ZL_cjs.FFIDUserMenu; }
|
|
34
34
|
});
|
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-E2AJAVX6.js';
|