@feelflow/ffid-sdk 6.0.0 → 7.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.
@@ -1297,6 +1297,310 @@ function createMembersMethods(deps) {
1297
1297
  return { listMembers, addMember, updateMemberRole, removeMember };
1298
1298
  }
1299
1299
 
1300
+ // src/types/organization-profile.ts
1301
+ var FFID_INDUSTRY_CODES = [
1302
+ "agriculture",
1303
+ "construction",
1304
+ "manufacturing",
1305
+ "it-software",
1306
+ "telecom",
1307
+ "media",
1308
+ "retail",
1309
+ "wholesale",
1310
+ "finance-insurance",
1311
+ "real-estate",
1312
+ "transport-logistics",
1313
+ "hospitality-food",
1314
+ "healthcare",
1315
+ "education",
1316
+ "professional-services",
1317
+ "marketing-advertising",
1318
+ "energy-utilities",
1319
+ "public-sector",
1320
+ "nonprofit",
1321
+ "other"
1322
+ ];
1323
+ var FFID_COMPANY_SIZE_CODES = [
1324
+ "1-10",
1325
+ "11-50",
1326
+ "51-200",
1327
+ "201-500",
1328
+ "501-1000",
1329
+ "1001+"
1330
+ ];
1331
+ var BYTES_PER_KB = 1024;
1332
+ var KB_PER_MB = 1024;
1333
+ var FFID_MAX_ORGANIZATION_LOGO_FILE_SIZE_MB = 2;
1334
+ var FFID_MAX_ORGANIZATION_LOGO_FILE_SIZE_BYTES = FFID_MAX_ORGANIZATION_LOGO_FILE_SIZE_MB * KB_PER_MB * BYTES_PER_KB;
1335
+ var FFID_ALLOWED_ORGANIZATION_LOGO_MIME_TYPES = [
1336
+ "image/png",
1337
+ "image/jpeg",
1338
+ "image/webp"
1339
+ ];
1340
+ var FFID_ORGANIZATION_PROFILE_ERROR_CODES = {
1341
+ VALIDATION_ERROR: "VALIDATION_ERROR",
1342
+ ORGANIZATION_NOT_FOUND: "ORGANIZATION_NOT_FOUND",
1343
+ CONSENTED_BY_NOT_MEMBER: "CONSENTED_BY_NOT_MEMBER",
1344
+ MISSING_FILE: "MISSING_FILE",
1345
+ INVALID_FILE_TYPE: "INVALID_FILE_TYPE",
1346
+ FILE_TOO_LARGE: "FILE_TOO_LARGE",
1347
+ INVALID_IMAGE: "INVALID_IMAGE",
1348
+ LOGO_UPLOAD_FAILED: "LOGO_UPLOAD_FAILED"
1349
+ };
1350
+
1351
+ // src/client/version-check.ts
1352
+ var SDK_VERSION = "7.1.0";
1353
+ var SDK_USER_AGENT = `FFID-SDK/${SDK_VERSION} (TypeScript)`;
1354
+ var SDK_VERSION_HEADER = "X-FFID-SDK-Version";
1355
+ function sdkHeaders() {
1356
+ if (typeof window !== "undefined") return {};
1357
+ return {
1358
+ "User-Agent": SDK_USER_AGENT,
1359
+ [SDK_VERSION_HEADER]: SDK_VERSION
1360
+ };
1361
+ }
1362
+ var LATEST_VERSION_HEADER = "X-FFID-SDK-Latest-Version";
1363
+ var SEMVER_PATTERN = /^\d+(\.\d+)*$/;
1364
+ var _versionWarningShown = false;
1365
+ function compareSemver(a, b) {
1366
+ const cleanA = a.replace(/^v/, "");
1367
+ const cleanB = b.replace(/^v/, "");
1368
+ if (!SEMVER_PATTERN.test(cleanA) || !SEMVER_PATTERN.test(cleanB)) return 0;
1369
+ const partsA = cleanA.split(".").map(Number);
1370
+ const partsB = cleanB.split(".").map(Number);
1371
+ const maxLen = Math.max(partsA.length, partsB.length);
1372
+ for (let i = 0; i < maxLen; i++) {
1373
+ const numA = partsA[i] ?? 0;
1374
+ const numB = partsB[i] ?? 0;
1375
+ if (numA < numB) return -1;
1376
+ if (numA > numB) return 1;
1377
+ }
1378
+ return 0;
1379
+ }
1380
+ function checkVersionHeader(response, logger) {
1381
+ if (_versionWarningShown) return;
1382
+ if (typeof process !== "undefined" && process.env?.NODE_ENV === "production") return;
1383
+ if (!response.headers?.get) return;
1384
+ const latestVersion = response.headers.get(LATEST_VERSION_HEADER);
1385
+ if (!latestVersion) return;
1386
+ if (compareSemver(SDK_VERSION, latestVersion) < 0) {
1387
+ _versionWarningShown = true;
1388
+ logger.warn(
1389
+ `\u65B0\u3057\u3044\u30D0\u30FC\u30B8\u30E7\u30F3\u304C\u5229\u7528\u53EF\u80FD\u3067\u3059: v${latestVersion} (\u73FE\u5728: v${SDK_VERSION})
1390
+ npm install @feelflow/ffid-sdk@latest \u3067\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u3067\u304D\u307E\u3059`
1391
+ );
1392
+ }
1393
+ }
1394
+
1395
+ // src/client/organization-profile-methods.ts
1396
+ var EXT_PROFILE_ENDPOINT = "/api/v1/organizations/ext/profile";
1397
+ var EXT_PROFILE_LOGO_ENDPOINT = "/api/v1/organizations/ext/profile/logo";
1398
+ var LOGO_WALL_ENDPOINT = "/api/v1/organizations/logo-wall";
1399
+ var DEFAULT_LOGO_UPLOAD_FILENAME = "logo";
1400
+ function isBlank(value) {
1401
+ return !value || !value.trim();
1402
+ }
1403
+ function resolveOrganizationId(organizationIdOrParams) {
1404
+ return typeof organizationIdOrParams === "string" ? organizationIdOrParams : organizationIdOrParams.organizationId;
1405
+ }
1406
+ function resolveUpsertParams(organizationIdOrParams, payload) {
1407
+ if (typeof organizationIdOrParams === "string") {
1408
+ return { ...payload, organizationId: organizationIdOrParams };
1409
+ }
1410
+ return organizationIdOrParams;
1411
+ }
1412
+ function resolveUploadParams(organizationIdOrParams, file) {
1413
+ if (typeof organizationIdOrParams === "string") {
1414
+ return { organizationId: organizationIdOrParams, file };
1415
+ }
1416
+ return organizationIdOrParams;
1417
+ }
1418
+ function buildUpsertBody(params) {
1419
+ const { organizationId, ...body } = params;
1420
+ return body;
1421
+ }
1422
+ function profileQuery(organizationId) {
1423
+ return new URLSearchParams({ organizationId }).toString();
1424
+ }
1425
+ function logoUploadFilename(file) {
1426
+ if (typeof File !== "undefined" && file instanceof File && file.name) {
1427
+ return file.name;
1428
+ }
1429
+ return DEFAULT_LOGO_UPLOAD_FILENAME;
1430
+ }
1431
+ function listingConsentValidationError(listingConsent, createError) {
1432
+ if (!listingConsent || listingConsent.consented !== true) return null;
1433
+ if (isBlank(listingConsent.consentVersion) || isBlank(listingConsent.consentedByUserId)) {
1434
+ return createError(
1435
+ FFID_ORGANIZATION_PROFILE_ERROR_CODES.VALIDATION_ERROR,
1436
+ "\u63B2\u8F09\u540C\u610F\u3092\u8A18\u9332\u3059\u308B\u5834\u5408\u306F consentVersion \u3068 consentedByUserId \u304C\u5FC5\u9808\u3067\u3059"
1437
+ );
1438
+ }
1439
+ return null;
1440
+ }
1441
+ function resolveLogoFile(file, createError) {
1442
+ if (!file) {
1443
+ return {
1444
+ ok: false,
1445
+ error: createError(
1446
+ FFID_ORGANIZATION_PROFILE_ERROR_CODES.MISSING_FILE,
1447
+ "file \u30D5\u30A3\u30FC\u30EB\u30C9\u306B\u30ED\u30B4\u753B\u50CF\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044"
1448
+ )
1449
+ };
1450
+ }
1451
+ if (file.size > FFID_MAX_ORGANIZATION_LOGO_FILE_SIZE_BYTES) {
1452
+ return {
1453
+ ok: false,
1454
+ error: createError(
1455
+ FFID_ORGANIZATION_PROFILE_ERROR_CODES.FILE_TOO_LARGE,
1456
+ `\u30ED\u30B4\u753B\u50CF\u306F${FFID_MAX_ORGANIZATION_LOGO_FILE_SIZE_MB}MB\u4EE5\u4E0B\u306B\u3057\u3066\u304F\u3060\u3055\u3044`
1457
+ )
1458
+ };
1459
+ }
1460
+ if (file.type !== "" && !FFID_ALLOWED_ORGANIZATION_LOGO_MIME_TYPES.includes(file.type)) {
1461
+ return {
1462
+ ok: false,
1463
+ error: createError(
1464
+ FFID_ORGANIZATION_PROFILE_ERROR_CODES.INVALID_FILE_TYPE,
1465
+ "\u30ED\u30B4\u753B\u50CF\u306F PNG / JPEG / WebP \u5F62\u5F0F\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044"
1466
+ )
1467
+ };
1468
+ }
1469
+ return { ok: true, file };
1470
+ }
1471
+ function createOrganizationProfileMethods(deps) {
1472
+ const { fetchWithAuth, createError, authMode, baseUrl, logger, errorCodes } = deps;
1473
+ function serviceKeyModeError() {
1474
+ if (authMode === "service-key") return null;
1475
+ return createError(
1476
+ FFID_ORGANIZATION_PROFILE_ERROR_CODES.VALIDATION_ERROR,
1477
+ "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"
1478
+ );
1479
+ }
1480
+ function requireOrganizationId(organizationId) {
1481
+ if (isBlank(organizationId)) {
1482
+ return createError(
1483
+ FFID_ORGANIZATION_PROFILE_ERROR_CODES.VALIDATION_ERROR,
1484
+ "organizationId \u306F\u5FC5\u9808\u3067\u3059"
1485
+ );
1486
+ }
1487
+ return null;
1488
+ }
1489
+ async function fetchPublic(endpoint, options = {}) {
1490
+ const url = `${baseUrl}${endpoint}`;
1491
+ logger.debug("Fetching (public):", url);
1492
+ let response;
1493
+ try {
1494
+ response = await fetch(url, {
1495
+ ...options,
1496
+ credentials: "omit",
1497
+ headers: {
1498
+ ...sdkHeaders(),
1499
+ ...options.headers
1500
+ }
1501
+ });
1502
+ } catch (error) {
1503
+ logger.error("Network error:", error);
1504
+ return {
1505
+ error: {
1506
+ code: errorCodes.NETWORK_ERROR,
1507
+ message: error instanceof Error ? error.message : "\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F"
1508
+ }
1509
+ };
1510
+ }
1511
+ let parsed;
1512
+ try {
1513
+ parsed = await response.json();
1514
+ } catch (parseError) {
1515
+ logger.error("Parse error:", parseError, "Status:", response.status);
1516
+ return {
1517
+ error: {
1518
+ code: errorCodes.PARSE_ERROR,
1519
+ 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})`
1520
+ }
1521
+ };
1522
+ }
1523
+ if (!parsed || typeof parsed !== "object") {
1524
+ return {
1525
+ error: {
1526
+ code: errorCodes.PARSE_ERROR,
1527
+ 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})`
1528
+ }
1529
+ };
1530
+ }
1531
+ const raw = parsed;
1532
+ logger.debug("Response (public):", response.status, raw);
1533
+ checkVersionHeader(response, logger);
1534
+ if (!response.ok) {
1535
+ return {
1536
+ error: raw.error ?? {
1537
+ code: errorCodes.UNKNOWN_ERROR,
1538
+ message: "\u4E0D\u660E\u306A\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F"
1539
+ }
1540
+ };
1541
+ }
1542
+ if (raw.data === void 0) {
1543
+ return {
1544
+ error: {
1545
+ code: errorCodes.UNKNOWN_ERROR,
1546
+ message: "\u30B5\u30FC\u30D0\u30FC\u304B\u3089\u30C7\u30FC\u30BF\u304C\u8FD4\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F"
1547
+ }
1548
+ };
1549
+ }
1550
+ return { data: raw.data };
1551
+ }
1552
+ async function getOrganizationProfile(organizationIdOrParams) {
1553
+ const modeError = serviceKeyModeError();
1554
+ if (modeError) return { error: modeError };
1555
+ const organizationId = resolveOrganizationId(organizationIdOrParams);
1556
+ const idError = requireOrganizationId(organizationId);
1557
+ if (idError) return { error: idError };
1558
+ return fetchWithAuth(
1559
+ `${EXT_PROFILE_ENDPOINT}?${profileQuery(organizationId)}`
1560
+ );
1561
+ }
1562
+ async function upsertOrganizationProfile(organizationIdOrParams, payload) {
1563
+ const modeError = serviceKeyModeError();
1564
+ if (modeError) return { error: modeError };
1565
+ const params = resolveUpsertParams(organizationIdOrParams, payload);
1566
+ const idError = requireOrganizationId(params.organizationId);
1567
+ if (idError) return { error: idError };
1568
+ const consentError = listingConsentValidationError(params.listingConsent, createError);
1569
+ if (consentError) return { error: consentError };
1570
+ return fetchWithAuth(
1571
+ `${EXT_PROFILE_ENDPOINT}?${profileQuery(params.organizationId)}`,
1572
+ {
1573
+ method: "PUT",
1574
+ body: JSON.stringify(buildUpsertBody(params))
1575
+ }
1576
+ );
1577
+ }
1578
+ async function uploadOrganizationLogo(organizationIdOrParams, file) {
1579
+ const modeError = serviceKeyModeError();
1580
+ if (modeError) return { error: modeError };
1581
+ const params = resolveUploadParams(organizationIdOrParams, file);
1582
+ const idError = requireOrganizationId(params.organizationId);
1583
+ if (idError) return { error: idError };
1584
+ const logoFile = resolveLogoFile(params.file, createError);
1585
+ if (!logoFile.ok) return { error: logoFile.error };
1586
+ const form = new FormData();
1587
+ form.append("file", logoFile.file, logoUploadFilename(logoFile.file));
1588
+ return fetchWithAuth(
1589
+ `${EXT_PROFILE_LOGO_ENDPOINT}?${profileQuery(params.organizationId)}`,
1590
+ { method: "POST", body: form }
1591
+ );
1592
+ }
1593
+ async function getPublicLogoWall() {
1594
+ return fetchPublic(LOGO_WALL_ENDPOINT);
1595
+ }
1596
+ return {
1597
+ getOrganizationProfile,
1598
+ upsertOrganizationProfile,
1599
+ uploadOrganizationLogo,
1600
+ getPublicLogoWall
1601
+ };
1602
+ }
1603
+
1300
1604
  // src/client/provisioning-methods.ts
1301
1605
  var USER_PROVISION_ENDPOINT = "/api/v1/ext/users/provision";
1302
1606
  var USER_WELCOME_EMAIL_ENDPOINT = "/api/v1/ext/users/welcome-email";
@@ -1440,7 +1744,7 @@ function createSeatMethods(deps) {
1440
1744
  }
1441
1745
 
1442
1746
  // src/client/profile-methods.ts
1443
- var EXT_PROFILE_ENDPOINT = "/api/v1/users/ext/me";
1747
+ var EXT_PROFILE_ENDPOINT2 = "/api/v1/users/ext/me";
1444
1748
  function resolveAuthOverride(options, createError) {
1445
1749
  if (!options || options.accessToken === void 0) {
1446
1750
  return {};
@@ -1461,7 +1765,7 @@ function createProfileMethods(deps) {
1461
1765
  async function getProfile(options) {
1462
1766
  const { override, error } = resolveAuthOverride(options, createError);
1463
1767
  if (error) return { error };
1464
- return fetchWithAuth(EXT_PROFILE_ENDPOINT, void 0, override);
1768
+ return fetchWithAuth(EXT_PROFILE_ENDPOINT2, void 0, override);
1465
1769
  }
1466
1770
  async function updateProfile(data, options) {
1467
1771
  if (data === null || typeof data !== "object" || Array.isArray(data)) {
@@ -1477,7 +1781,7 @@ function createProfileMethods(deps) {
1477
1781
  const { override, error } = resolveAuthOverride(options, createError);
1478
1782
  if (error) return { error };
1479
1783
  return fetchWithAuth(
1480
- EXT_PROFILE_ENDPOINT,
1784
+ EXT_PROFILE_ENDPOINT2,
1481
1785
  {
1482
1786
  method: "PUT",
1483
1787
  body: JSON.stringify(data)
@@ -1670,50 +1974,6 @@ function validateTokenResponse(tokenResponse) {
1670
1974
  };
1671
1975
  }
1672
1976
 
1673
- // src/client/version-check.ts
1674
- var SDK_VERSION = "6.0.0";
1675
- var SDK_USER_AGENT = `FFID-SDK/${SDK_VERSION} (TypeScript)`;
1676
- var SDK_VERSION_HEADER = "X-FFID-SDK-Version";
1677
- function sdkHeaders() {
1678
- if (typeof window !== "undefined") return {};
1679
- return {
1680
- "User-Agent": SDK_USER_AGENT,
1681
- [SDK_VERSION_HEADER]: SDK_VERSION
1682
- };
1683
- }
1684
- var LATEST_VERSION_HEADER = "X-FFID-SDK-Latest-Version";
1685
- var SEMVER_PATTERN = /^\d+(\.\d+)*$/;
1686
- var _versionWarningShown = false;
1687
- function compareSemver(a, b) {
1688
- const cleanA = a.replace(/^v/, "");
1689
- const cleanB = b.replace(/^v/, "");
1690
- if (!SEMVER_PATTERN.test(cleanA) || !SEMVER_PATTERN.test(cleanB)) return 0;
1691
- const partsA = cleanA.split(".").map(Number);
1692
- const partsB = cleanB.split(".").map(Number);
1693
- const maxLen = Math.max(partsA.length, partsB.length);
1694
- for (let i = 0; i < maxLen; i++) {
1695
- const numA = partsA[i] ?? 0;
1696
- const numB = partsB[i] ?? 0;
1697
- if (numA < numB) return -1;
1698
- if (numA > numB) return 1;
1699
- }
1700
- return 0;
1701
- }
1702
- function checkVersionHeader(response, logger) {
1703
- if (_versionWarningShown) return;
1704
- if (typeof process !== "undefined" && process.env?.NODE_ENV === "production") return;
1705
- if (!response.headers?.get) return;
1706
- const latestVersion = response.headers.get(LATEST_VERSION_HEADER);
1707
- if (!latestVersion) return;
1708
- if (compareSemver(SDK_VERSION, latestVersion) < 0) {
1709
- _versionWarningShown = true;
1710
- logger.warn(
1711
- `\u65B0\u3057\u3044\u30D0\u30FC\u30B8\u30E7\u30F3\u304C\u5229\u7528\u53EF\u80FD\u3067\u3059: v${latestVersion} (\u73FE\u5728: v${SDK_VERSION})
1712
- npm install @feelflow/ffid-sdk@latest \u3067\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u3067\u304D\u307E\u3059`
1713
- );
1714
- }
1715
- }
1716
-
1717
1977
  // src/client/oauth-token.ts
1718
1978
  var OAUTH_TOKEN_ENDPOINT = "/api/v1/oauth/token";
1719
1979
  var OAUTH_REVOKE_ENDPOINT = "/api/v1/oauth/revoke";
@@ -2534,7 +2794,7 @@ function normalizeRedirectUri(input) {
2534
2794
 
2535
2795
  // src/client/password-reset.ts
2536
2796
  var RESET_PASSWORD_BASE = "/api/v1/auth/reset-password";
2537
- function isBlank(value) {
2797
+ function isBlank2(value) {
2538
2798
  return !value || !value.trim();
2539
2799
  }
2540
2800
  function createPasswordResetMethods(deps) {
@@ -2595,7 +2855,7 @@ function createPasswordResetMethods(deps) {
2595
2855
  return { data: raw.data };
2596
2856
  }
2597
2857
  async function requestPasswordReset(email) {
2598
- if (isBlank(email)) {
2858
+ if (isBlank2(email)) {
2599
2859
  return {
2600
2860
  error: createError("VALIDATION_ERROR", "\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u306F\u5FC5\u9808\u3067\u3059")
2601
2861
  };
@@ -2609,7 +2869,7 @@ function createPasswordResetMethods(deps) {
2609
2869
  );
2610
2870
  }
2611
2871
  async function verifyPasswordResetToken(accessToken) {
2612
- if (isBlank(accessToken)) {
2872
+ if (isBlank2(accessToken)) {
2613
2873
  return {
2614
2874
  error: createError("VALIDATION_ERROR", "\u30A2\u30AF\u30BB\u30B9\u30C8\u30FC\u30AF\u30F3\u306F\u5FC5\u9808\u3067\u3059")
2615
2875
  };
@@ -2623,12 +2883,12 @@ function createPasswordResetMethods(deps) {
2623
2883
  );
2624
2884
  }
2625
2885
  async function establishResetSession(accessToken, refreshToken) {
2626
- if (isBlank(accessToken)) {
2886
+ if (isBlank2(accessToken)) {
2627
2887
  return {
2628
2888
  error: createError("VALIDATION_ERROR", "\u30A2\u30AF\u30BB\u30B9\u30C8\u30FC\u30AF\u30F3\u306F\u5FC5\u9808\u3067\u3059")
2629
2889
  };
2630
2890
  }
2631
- if (isBlank(refreshToken)) {
2891
+ if (isBlank2(refreshToken)) {
2632
2892
  return {
2633
2893
  error: createError("VALIDATION_ERROR", "\u30EA\u30D5\u30EC\u30C3\u30B7\u30E5\u30C8\u30FC\u30AF\u30F3\u306F\u5FC5\u9808\u3067\u3059")
2634
2894
  };
@@ -2642,7 +2902,7 @@ function createPasswordResetMethods(deps) {
2642
2902
  );
2643
2903
  }
2644
2904
  async function confirmPasswordReset(password) {
2645
- if (isBlank(password)) {
2905
+ if (isBlank2(password)) {
2646
2906
  return {
2647
2907
  error: createError("VALIDATION_ERROR", "\u30D1\u30B9\u30EF\u30FC\u30C9\u306F\u5FC5\u9808\u3067\u3059")
2648
2908
  };
@@ -2665,7 +2925,7 @@ function createPasswordResetMethods(deps) {
2665
2925
 
2666
2926
  // src/client/otp.ts
2667
2927
  var OTP_BASE = "/api/v1/auth/otp";
2668
- function isBlank2(value) {
2928
+ function isBlank3(value) {
2669
2929
  return !value || !value.trim();
2670
2930
  }
2671
2931
  function createOtpMethods(deps) {
@@ -2726,7 +2986,7 @@ function createOtpMethods(deps) {
2726
2986
  return { data: raw.data };
2727
2987
  }
2728
2988
  async function sendOtp(email, options) {
2729
- if (isBlank2(email)) {
2989
+ if (isBlank3(email)) {
2730
2990
  return {
2731
2991
  error: createError("VALIDATION_ERROR", "\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u306F\u5FC5\u9808\u3067\u3059")
2732
2992
  };
@@ -2743,12 +3003,12 @@ function createOtpMethods(deps) {
2743
3003
  );
2744
3004
  }
2745
3005
  async function verifyOtp(params) {
2746
- if (isBlank2(params.accessToken)) {
3006
+ if (isBlank3(params.accessToken)) {
2747
3007
  return {
2748
3008
  error: createError("VALIDATION_ERROR", "\u30A2\u30AF\u30BB\u30B9\u30C8\u30FC\u30AF\u30F3\u306F\u5FC5\u9808\u3067\u3059")
2749
3009
  };
2750
3010
  }
2751
- if (isBlank2(params.refreshToken)) {
3011
+ if (isBlank3(params.refreshToken)) {
2752
3012
  return {
2753
3013
  error: createError("VALIDATION_ERROR", "\u30EA\u30D5\u30EC\u30C3\u30B7\u30E5\u30C8\u30FC\u30AF\u30F3\u306F\u5FC5\u9808\u3067\u3059")
2754
3014
  };
@@ -3239,6 +3499,12 @@ function resolveRedirectUri(raw, logger) {
3239
3499
  return raw;
3240
3500
  }
3241
3501
  }
3502
+ function jsonContentTypeHeader(body) {
3503
+ if (typeof FormData !== "undefined" && body instanceof FormData) {
3504
+ return {};
3505
+ }
3506
+ return { "Content-Type": "application/json" };
3507
+ }
3242
3508
  function createFFIDClient(config) {
3243
3509
  if (!config.serviceCode || !config.serviceCode.trim()) {
3244
3510
  throw new Error("FFID Client: serviceCode \u304C\u672A\u8A2D\u5B9A\u3067\u3059");
@@ -3291,7 +3557,7 @@ function createFFIDClient(config) {
3291
3557
  ...options,
3292
3558
  credentials: "omit",
3293
3559
  headers: {
3294
- "Content-Type": "application/json",
3560
+ ...jsonContentTypeHeader(options.body),
3295
3561
  ...sdkHeaders(),
3296
3562
  ...options.headers,
3297
3563
  Authorization: `Bearer ${authOverride.accessToken}`
@@ -3303,7 +3569,7 @@ function createFFIDClient(config) {
3303
3569
  ...options,
3304
3570
  credentials: "omit",
3305
3571
  headers: {
3306
- "Content-Type": "application/json",
3572
+ ...jsonContentTypeHeader(options.body),
3307
3573
  ...sdkHeaders(),
3308
3574
  "X-Service-Api-Key": serviceApiKey,
3309
3575
  ...options.headers
@@ -3313,7 +3579,7 @@ function createFFIDClient(config) {
3313
3579
  if (authMode === "token") {
3314
3580
  const tokens = tokenStore.getTokens();
3315
3581
  const headers = {
3316
- "Content-Type": "application/json",
3582
+ ...jsonContentTypeHeader(options.body),
3317
3583
  ...sdkHeaders(),
3318
3584
  ...options.headers
3319
3585
  };
@@ -3330,7 +3596,7 @@ function createFFIDClient(config) {
3330
3596
  ...options,
3331
3597
  credentials: "include",
3332
3598
  headers: {
3333
- "Content-Type": "application/json",
3599
+ ...jsonContentTypeHeader(options.body),
3334
3600
  ...sdkHeaders(),
3335
3601
  ...options.headers
3336
3602
  }
@@ -3547,6 +3813,19 @@ function createFFIDClient(config) {
3547
3813
  createError,
3548
3814
  serviceCode: config.serviceCode
3549
3815
  });
3816
+ const {
3817
+ getOrganizationProfile,
3818
+ upsertOrganizationProfile,
3819
+ uploadOrganizationLogo,
3820
+ getPublicLogoWall
3821
+ } = createOrganizationProfileMethods({
3822
+ fetchWithAuth,
3823
+ createError,
3824
+ authMode,
3825
+ baseUrl,
3826
+ logger,
3827
+ errorCodes: FFID_ERROR_CODES
3828
+ });
3550
3829
  const { provisionUser, sendProvisionWelcomeEmail, provisionOrganization } = createProvisioningMethods({
3551
3830
  fetchWithAuth,
3552
3831
  createError,
@@ -3647,6 +3926,10 @@ function createFFIDClient(config) {
3647
3926
  addMember,
3648
3927
  updateMemberRole,
3649
3928
  removeMember,
3929
+ getOrganizationProfile,
3930
+ upsertOrganizationProfile,
3931
+ uploadOrganizationLogo,
3932
+ getPublicLogoWall,
3650
3933
  provisionUser,
3651
3934
  sendProvisionWelcomeEmail,
3652
3935
  provisionOrganization,
@@ -4104,4 +4387,4 @@ function clear(opts = {}) {
4104
4387
  }
4105
4388
  var sessionCookies = { serialize, read, clear };
4106
4389
 
4107
- export { ALL_DENIED_EXCEPT_NECESSARY, CATALOG_HASH_PATTERN, CONSENT_COOKIE_NAME, COOKIE_VERSION, FFIDCatalogHashError, FFID_CATALOG_ENVIRONMENTS, FFID_CATALOG_PUBLICATION_STATUSES, FFID_ERROR_CODES, FFID_SESSION_COOKIE_NAME, canonicalizeCatalogValue, computeFFIDCheckoutCopyHash, computeLegalDisclosureHash, computePaymentConfigurationHash, computePraxisCopyHash, computeScopeHash, computeTaxConfigurationHash, createFFIDClient, createKVCacheAdapter, createMemoryCacheAdapter, createServerAuthClient, createTokenStore, createVerifyAccessToken, decodeConsentCookie, encodeConsentCookie, generateServerState, getFFIDConsentFromCookieHeader, getFFIDConsentFromCookies, hashCanonicalJson, sessionCookies, sha256Hex, validatePublishedCatalog };
4390
+ export { ALL_DENIED_EXCEPT_NECESSARY, CATALOG_HASH_PATTERN, CONSENT_COOKIE_NAME, COOKIE_VERSION, FFIDCatalogHashError, FFID_ALLOWED_ORGANIZATION_LOGO_MIME_TYPES, FFID_CATALOG_ENVIRONMENTS, FFID_CATALOG_PUBLICATION_STATUSES, FFID_COMPANY_SIZE_CODES, FFID_ERROR_CODES, FFID_INDUSTRY_CODES, FFID_MAX_ORGANIZATION_LOGO_FILE_SIZE_BYTES, FFID_MAX_ORGANIZATION_LOGO_FILE_SIZE_MB, FFID_ORGANIZATION_PROFILE_ERROR_CODES, FFID_SESSION_COOKIE_NAME, canonicalizeCatalogValue, computeFFIDCheckoutCopyHash, computeLegalDisclosureHash, computePaymentConfigurationHash, computePraxisCopyHash, computeScopeHash, computeTaxConfigurationHash, createFFIDClient, createKVCacheAdapter, createMemoryCacheAdapter, createServerAuthClient, createTokenStore, createVerifyAccessToken, decodeConsentCookie, encodeConsentCookie, generateServerState, getFFIDConsentFromCookieHeader, getFFIDConsentFromCookies, hashCanonicalJson, sessionCookies, sha256Hex, validatePublishedCatalog };
@@ -1,4 +1,4 @@
1
- import { q as FFIDClient, e as FFIDOAuthUserInfo } from '../../ffid-client-C8XV7lUt.cjs';
1
+ import { r as FFIDClient, e as FFIDOAuthUserInfo } from '../../ffid-client-BFgoVPOZ.cjs';
2
2
  import '../../types-Cjb9J0rL.cjs';
3
3
 
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { q as FFIDClient, e as FFIDOAuthUserInfo } from '../../ffid-client-CpVixUM3.js';
1
+ import { r as FFIDClient, e as FFIDOAuthUserInfo } from '../../ffid-client-QNEFA3mv.js';
2
2
  import '../../types-Cjb9J0rL.js';
3
3
 
4
4
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@feelflow/ffid-sdk",
3
- "version": "6.0.0",
3
+ "version": "7.1.0",
4
4
  "description": "FeelFlow ID Platform SDK for React/Next.js applications",
5
5
  "keywords": [
6
6
  "feelflow",