@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.
@@ -228,13 +228,18 @@ function mapUserinfoSubscriptionToSession(userinfo, serviceCode) {
228
228
  ];
229
229
  }
230
230
  var JWKS_ENDPOINT = "/.well-known/jwks.json";
231
- var JWT_ISSUER = "https://id.feelflow.net";
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: JWT_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 EXT_PROFILE_ENDPOINT = "/api/v1/users/ext/me";
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(EXT_PROFILE_ENDPOINT, void 0, override);
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
- EXT_PROFILE_ENDPOINT,
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 isBlank(value) {
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 (isBlank(email)) {
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 (isBlank(accessToken)) {
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 (isBlank(accessToken)) {
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 (isBlank(refreshToken)) {
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 (isBlank(password)) {
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 isBlank2(value) {
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 (isBlank2(email)) {
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 (isBlank2(params.accessToken)) {
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 (isBlank2(params.refreshToken)) {
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
- "Content-Type": "application/json",
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
- "Content-Type": "application/json",
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
- "Content-Type": "application/json",
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
- "Content-Type": "application/json",
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 chunkBI6UM2EJ_cjs = require('../chunk-BI6UM2EJ.cjs');
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 chunkBI6UM2EJ_cjs.FFIDAnnouncementBadge; }
9
+ get: function () { return chunkSOZ2B2ZL_cjs.FFIDAnnouncementBadge; }
10
10
  });
11
11
  Object.defineProperty(exports, "FFIDAnnouncementList", {
12
12
  enumerable: true,
13
- get: function () { return chunkBI6UM2EJ_cjs.FFIDAnnouncementList; }
13
+ get: function () { return chunkSOZ2B2ZL_cjs.FFIDAnnouncementList; }
14
14
  });
15
15
  Object.defineProperty(exports, "FFIDInquiryForm", {
16
16
  enumerable: true,
17
- get: function () { return chunkBI6UM2EJ_cjs.FFIDInquiryForm; }
17
+ get: function () { return chunkSOZ2B2ZL_cjs.FFIDInquiryForm; }
18
18
  });
19
19
  Object.defineProperty(exports, "FFIDLoginButton", {
20
20
  enumerable: true,
21
- get: function () { return chunkBI6UM2EJ_cjs.FFIDLoginButton; }
21
+ get: function () { return chunkSOZ2B2ZL_cjs.FFIDLoginButton; }
22
22
  });
23
23
  Object.defineProperty(exports, "FFIDOrganizationSwitcher", {
24
24
  enumerable: true,
25
- get: function () { return chunkBI6UM2EJ_cjs.FFIDOrganizationSwitcher; }
25
+ get: function () { return chunkSOZ2B2ZL_cjs.FFIDOrganizationSwitcher; }
26
26
  });
27
27
  Object.defineProperty(exports, "FFIDSubscriptionBadge", {
28
28
  enumerable: true,
29
- get: function () { return chunkBI6UM2EJ_cjs.FFIDSubscriptionBadge; }
29
+ get: function () { return chunkSOZ2B2ZL_cjs.FFIDSubscriptionBadge; }
30
30
  });
31
31
  Object.defineProperty(exports, "FFIDUserMenu", {
32
32
  enumerable: true,
33
- get: function () { return chunkBI6UM2EJ_cjs.FFIDUserMenu; }
33
+ get: function () { return chunkSOZ2B2ZL_cjs.FFIDUserMenu; }
34
34
  });
@@ -1 +1 @@
1
- export { FFIDAnnouncementBadge, FFIDAnnouncementList, FFIDInquiryForm, FFIDLoginButton, FFIDOrganizationSwitcher, FFIDSubscriptionBadge, FFIDUserMenu } from '../chunk-32VOLLNV.js';
1
+ export { FFIDAnnouncementBadge, FFIDAnnouncementList, FFIDInquiryForm, FFIDLoginButton, FFIDOrganizationSwitcher, FFIDSubscriptionBadge, FFIDUserMenu } from '../chunk-E2AJAVX6.js';