@feelflow/ffid-sdk 7.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.
- package/README.md +47 -0
- package/dist/{chunk-BI6UM2EJ.cjs → chunk-CI4N7KJK.cjs} +350 -61
- package/dist/{chunk-32VOLLNV.js → chunk-Y4TUICQZ.js} +345 -62
- 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 +350 -61
- package/dist/server/index.d.cts +2 -2
- package/dist/server/index.d.ts +2 -2
- package/dist/server/index.js +345 -62
- package/dist/server/test/index.d.cts +1 -1
- package/dist/server/test/index.d.ts +1 -1
- package/package.json +1 -1
package/dist/server/index.cjs
CHANGED
|
@@ -1298,6 +1298,310 @@ function createMembersMethods(deps) {
|
|
|
1298
1298
|
return { listMembers, addMember, updateMemberRole, removeMember };
|
|
1299
1299
|
}
|
|
1300
1300
|
|
|
1301
|
+
// src/types/organization-profile.ts
|
|
1302
|
+
var FFID_INDUSTRY_CODES = [
|
|
1303
|
+
"agriculture",
|
|
1304
|
+
"construction",
|
|
1305
|
+
"manufacturing",
|
|
1306
|
+
"it-software",
|
|
1307
|
+
"telecom",
|
|
1308
|
+
"media",
|
|
1309
|
+
"retail",
|
|
1310
|
+
"wholesale",
|
|
1311
|
+
"finance-insurance",
|
|
1312
|
+
"real-estate",
|
|
1313
|
+
"transport-logistics",
|
|
1314
|
+
"hospitality-food",
|
|
1315
|
+
"healthcare",
|
|
1316
|
+
"education",
|
|
1317
|
+
"professional-services",
|
|
1318
|
+
"marketing-advertising",
|
|
1319
|
+
"energy-utilities",
|
|
1320
|
+
"public-sector",
|
|
1321
|
+
"nonprofit",
|
|
1322
|
+
"other"
|
|
1323
|
+
];
|
|
1324
|
+
var FFID_COMPANY_SIZE_CODES = [
|
|
1325
|
+
"1-10",
|
|
1326
|
+
"11-50",
|
|
1327
|
+
"51-200",
|
|
1328
|
+
"201-500",
|
|
1329
|
+
"501-1000",
|
|
1330
|
+
"1001+"
|
|
1331
|
+
];
|
|
1332
|
+
var BYTES_PER_KB = 1024;
|
|
1333
|
+
var KB_PER_MB = 1024;
|
|
1334
|
+
var FFID_MAX_ORGANIZATION_LOGO_FILE_SIZE_MB = 2;
|
|
1335
|
+
var FFID_MAX_ORGANIZATION_LOGO_FILE_SIZE_BYTES = FFID_MAX_ORGANIZATION_LOGO_FILE_SIZE_MB * KB_PER_MB * BYTES_PER_KB;
|
|
1336
|
+
var FFID_ALLOWED_ORGANIZATION_LOGO_MIME_TYPES = [
|
|
1337
|
+
"image/png",
|
|
1338
|
+
"image/jpeg",
|
|
1339
|
+
"image/webp"
|
|
1340
|
+
];
|
|
1341
|
+
var FFID_ORGANIZATION_PROFILE_ERROR_CODES = {
|
|
1342
|
+
VALIDATION_ERROR: "VALIDATION_ERROR",
|
|
1343
|
+
ORGANIZATION_NOT_FOUND: "ORGANIZATION_NOT_FOUND",
|
|
1344
|
+
CONSENTED_BY_NOT_MEMBER: "CONSENTED_BY_NOT_MEMBER",
|
|
1345
|
+
MISSING_FILE: "MISSING_FILE",
|
|
1346
|
+
INVALID_FILE_TYPE: "INVALID_FILE_TYPE",
|
|
1347
|
+
FILE_TOO_LARGE: "FILE_TOO_LARGE",
|
|
1348
|
+
INVALID_IMAGE: "INVALID_IMAGE",
|
|
1349
|
+
LOGO_UPLOAD_FAILED: "LOGO_UPLOAD_FAILED"
|
|
1350
|
+
};
|
|
1351
|
+
|
|
1352
|
+
// src/client/version-check.ts
|
|
1353
|
+
var SDK_VERSION = "7.1.0";
|
|
1354
|
+
var SDK_USER_AGENT = `FFID-SDK/${SDK_VERSION} (TypeScript)`;
|
|
1355
|
+
var SDK_VERSION_HEADER = "X-FFID-SDK-Version";
|
|
1356
|
+
function sdkHeaders() {
|
|
1357
|
+
if (typeof window !== "undefined") return {};
|
|
1358
|
+
return {
|
|
1359
|
+
"User-Agent": SDK_USER_AGENT,
|
|
1360
|
+
[SDK_VERSION_HEADER]: SDK_VERSION
|
|
1361
|
+
};
|
|
1362
|
+
}
|
|
1363
|
+
var LATEST_VERSION_HEADER = "X-FFID-SDK-Latest-Version";
|
|
1364
|
+
var SEMVER_PATTERN = /^\d+(\.\d+)*$/;
|
|
1365
|
+
var _versionWarningShown = false;
|
|
1366
|
+
function compareSemver(a, b) {
|
|
1367
|
+
const cleanA = a.replace(/^v/, "");
|
|
1368
|
+
const cleanB = b.replace(/^v/, "");
|
|
1369
|
+
if (!SEMVER_PATTERN.test(cleanA) || !SEMVER_PATTERN.test(cleanB)) return 0;
|
|
1370
|
+
const partsA = cleanA.split(".").map(Number);
|
|
1371
|
+
const partsB = cleanB.split(".").map(Number);
|
|
1372
|
+
const maxLen = Math.max(partsA.length, partsB.length);
|
|
1373
|
+
for (let i = 0; i < maxLen; i++) {
|
|
1374
|
+
const numA = partsA[i] ?? 0;
|
|
1375
|
+
const numB = partsB[i] ?? 0;
|
|
1376
|
+
if (numA < numB) return -1;
|
|
1377
|
+
if (numA > numB) return 1;
|
|
1378
|
+
}
|
|
1379
|
+
return 0;
|
|
1380
|
+
}
|
|
1381
|
+
function checkVersionHeader(response, logger) {
|
|
1382
|
+
if (_versionWarningShown) return;
|
|
1383
|
+
if (typeof process !== "undefined" && process.env?.NODE_ENV === "production") return;
|
|
1384
|
+
if (!response.headers?.get) return;
|
|
1385
|
+
const latestVersion = response.headers.get(LATEST_VERSION_HEADER);
|
|
1386
|
+
if (!latestVersion) return;
|
|
1387
|
+
if (compareSemver(SDK_VERSION, latestVersion) < 0) {
|
|
1388
|
+
_versionWarningShown = true;
|
|
1389
|
+
logger.warn(
|
|
1390
|
+
`\u65B0\u3057\u3044\u30D0\u30FC\u30B8\u30E7\u30F3\u304C\u5229\u7528\u53EF\u80FD\u3067\u3059: v${latestVersion} (\u73FE\u5728: v${SDK_VERSION})
|
|
1391
|
+
npm install @feelflow/ffid-sdk@latest \u3067\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u3067\u304D\u307E\u3059`
|
|
1392
|
+
);
|
|
1393
|
+
}
|
|
1394
|
+
}
|
|
1395
|
+
|
|
1396
|
+
// src/client/organization-profile-methods.ts
|
|
1397
|
+
var EXT_PROFILE_ENDPOINT = "/api/v1/organizations/ext/profile";
|
|
1398
|
+
var EXT_PROFILE_LOGO_ENDPOINT = "/api/v1/organizations/ext/profile/logo";
|
|
1399
|
+
var LOGO_WALL_ENDPOINT = "/api/v1/organizations/logo-wall";
|
|
1400
|
+
var DEFAULT_LOGO_UPLOAD_FILENAME = "logo";
|
|
1401
|
+
function isBlank(value) {
|
|
1402
|
+
return !value || !value.trim();
|
|
1403
|
+
}
|
|
1404
|
+
function resolveOrganizationId(organizationIdOrParams) {
|
|
1405
|
+
return typeof organizationIdOrParams === "string" ? organizationIdOrParams : organizationIdOrParams.organizationId;
|
|
1406
|
+
}
|
|
1407
|
+
function resolveUpsertParams(organizationIdOrParams, payload) {
|
|
1408
|
+
if (typeof organizationIdOrParams === "string") {
|
|
1409
|
+
return { ...payload, organizationId: organizationIdOrParams };
|
|
1410
|
+
}
|
|
1411
|
+
return organizationIdOrParams;
|
|
1412
|
+
}
|
|
1413
|
+
function resolveUploadParams(organizationIdOrParams, file) {
|
|
1414
|
+
if (typeof organizationIdOrParams === "string") {
|
|
1415
|
+
return { organizationId: organizationIdOrParams, file };
|
|
1416
|
+
}
|
|
1417
|
+
return organizationIdOrParams;
|
|
1418
|
+
}
|
|
1419
|
+
function buildUpsertBody(params) {
|
|
1420
|
+
const { organizationId, ...body } = params;
|
|
1421
|
+
return body;
|
|
1422
|
+
}
|
|
1423
|
+
function profileQuery(organizationId) {
|
|
1424
|
+
return new URLSearchParams({ organizationId }).toString();
|
|
1425
|
+
}
|
|
1426
|
+
function logoUploadFilename(file) {
|
|
1427
|
+
if (typeof File !== "undefined" && file instanceof File && file.name) {
|
|
1428
|
+
return file.name;
|
|
1429
|
+
}
|
|
1430
|
+
return DEFAULT_LOGO_UPLOAD_FILENAME;
|
|
1431
|
+
}
|
|
1432
|
+
function listingConsentValidationError(listingConsent, createError) {
|
|
1433
|
+
if (!listingConsent || listingConsent.consented !== true) return null;
|
|
1434
|
+
if (isBlank(listingConsent.consentVersion) || isBlank(listingConsent.consentedByUserId)) {
|
|
1435
|
+
return createError(
|
|
1436
|
+
FFID_ORGANIZATION_PROFILE_ERROR_CODES.VALIDATION_ERROR,
|
|
1437
|
+
"\u63B2\u8F09\u540C\u610F\u3092\u8A18\u9332\u3059\u308B\u5834\u5408\u306F consentVersion \u3068 consentedByUserId \u304C\u5FC5\u9808\u3067\u3059"
|
|
1438
|
+
);
|
|
1439
|
+
}
|
|
1440
|
+
return null;
|
|
1441
|
+
}
|
|
1442
|
+
function resolveLogoFile(file, createError) {
|
|
1443
|
+
if (!file) {
|
|
1444
|
+
return {
|
|
1445
|
+
ok: false,
|
|
1446
|
+
error: createError(
|
|
1447
|
+
FFID_ORGANIZATION_PROFILE_ERROR_CODES.MISSING_FILE,
|
|
1448
|
+
"file \u30D5\u30A3\u30FC\u30EB\u30C9\u306B\u30ED\u30B4\u753B\u50CF\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044"
|
|
1449
|
+
)
|
|
1450
|
+
};
|
|
1451
|
+
}
|
|
1452
|
+
if (file.size > FFID_MAX_ORGANIZATION_LOGO_FILE_SIZE_BYTES) {
|
|
1453
|
+
return {
|
|
1454
|
+
ok: false,
|
|
1455
|
+
error: createError(
|
|
1456
|
+
FFID_ORGANIZATION_PROFILE_ERROR_CODES.FILE_TOO_LARGE,
|
|
1457
|
+
`\u30ED\u30B4\u753B\u50CF\u306F${FFID_MAX_ORGANIZATION_LOGO_FILE_SIZE_MB}MB\u4EE5\u4E0B\u306B\u3057\u3066\u304F\u3060\u3055\u3044`
|
|
1458
|
+
)
|
|
1459
|
+
};
|
|
1460
|
+
}
|
|
1461
|
+
if (file.type !== "" && !FFID_ALLOWED_ORGANIZATION_LOGO_MIME_TYPES.includes(file.type)) {
|
|
1462
|
+
return {
|
|
1463
|
+
ok: false,
|
|
1464
|
+
error: createError(
|
|
1465
|
+
FFID_ORGANIZATION_PROFILE_ERROR_CODES.INVALID_FILE_TYPE,
|
|
1466
|
+
"\u30ED\u30B4\u753B\u50CF\u306F PNG / JPEG / WebP \u5F62\u5F0F\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044"
|
|
1467
|
+
)
|
|
1468
|
+
};
|
|
1469
|
+
}
|
|
1470
|
+
return { ok: true, file };
|
|
1471
|
+
}
|
|
1472
|
+
function createOrganizationProfileMethods(deps) {
|
|
1473
|
+
const { fetchWithAuth, createError, authMode, baseUrl, logger, errorCodes } = deps;
|
|
1474
|
+
function serviceKeyModeError() {
|
|
1475
|
+
if (authMode === "service-key") return null;
|
|
1476
|
+
return createError(
|
|
1477
|
+
FFID_ORGANIZATION_PROFILE_ERROR_CODES.VALIDATION_ERROR,
|
|
1478
|
+
"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"
|
|
1479
|
+
);
|
|
1480
|
+
}
|
|
1481
|
+
function requireOrganizationId(organizationId) {
|
|
1482
|
+
if (isBlank(organizationId)) {
|
|
1483
|
+
return createError(
|
|
1484
|
+
FFID_ORGANIZATION_PROFILE_ERROR_CODES.VALIDATION_ERROR,
|
|
1485
|
+
"organizationId \u306F\u5FC5\u9808\u3067\u3059"
|
|
1486
|
+
);
|
|
1487
|
+
}
|
|
1488
|
+
return null;
|
|
1489
|
+
}
|
|
1490
|
+
async function fetchPublic(endpoint, options = {}) {
|
|
1491
|
+
const url = `${baseUrl}${endpoint}`;
|
|
1492
|
+
logger.debug("Fetching (public):", url);
|
|
1493
|
+
let response;
|
|
1494
|
+
try {
|
|
1495
|
+
response = await fetch(url, {
|
|
1496
|
+
...options,
|
|
1497
|
+
credentials: "omit",
|
|
1498
|
+
headers: {
|
|
1499
|
+
...sdkHeaders(),
|
|
1500
|
+
...options.headers
|
|
1501
|
+
}
|
|
1502
|
+
});
|
|
1503
|
+
} catch (error) {
|
|
1504
|
+
logger.error("Network error:", error);
|
|
1505
|
+
return {
|
|
1506
|
+
error: {
|
|
1507
|
+
code: errorCodes.NETWORK_ERROR,
|
|
1508
|
+
message: error instanceof Error ? error.message : "\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F"
|
|
1509
|
+
}
|
|
1510
|
+
};
|
|
1511
|
+
}
|
|
1512
|
+
let parsed;
|
|
1513
|
+
try {
|
|
1514
|
+
parsed = await response.json();
|
|
1515
|
+
} catch (parseError) {
|
|
1516
|
+
logger.error("Parse error:", parseError, "Status:", response.status);
|
|
1517
|
+
return {
|
|
1518
|
+
error: {
|
|
1519
|
+
code: errorCodes.PARSE_ERROR,
|
|
1520
|
+
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})`
|
|
1521
|
+
}
|
|
1522
|
+
};
|
|
1523
|
+
}
|
|
1524
|
+
if (!parsed || typeof parsed !== "object") {
|
|
1525
|
+
return {
|
|
1526
|
+
error: {
|
|
1527
|
+
code: errorCodes.PARSE_ERROR,
|
|
1528
|
+
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})`
|
|
1529
|
+
}
|
|
1530
|
+
};
|
|
1531
|
+
}
|
|
1532
|
+
const raw = parsed;
|
|
1533
|
+
logger.debug("Response (public):", response.status, raw);
|
|
1534
|
+
checkVersionHeader(response, logger);
|
|
1535
|
+
if (!response.ok) {
|
|
1536
|
+
return {
|
|
1537
|
+
error: raw.error ?? {
|
|
1538
|
+
code: errorCodes.UNKNOWN_ERROR,
|
|
1539
|
+
message: "\u4E0D\u660E\u306A\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F"
|
|
1540
|
+
}
|
|
1541
|
+
};
|
|
1542
|
+
}
|
|
1543
|
+
if (raw.data === void 0) {
|
|
1544
|
+
return {
|
|
1545
|
+
error: {
|
|
1546
|
+
code: errorCodes.UNKNOWN_ERROR,
|
|
1547
|
+
message: "\u30B5\u30FC\u30D0\u30FC\u304B\u3089\u30C7\u30FC\u30BF\u304C\u8FD4\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F"
|
|
1548
|
+
}
|
|
1549
|
+
};
|
|
1550
|
+
}
|
|
1551
|
+
return { data: raw.data };
|
|
1552
|
+
}
|
|
1553
|
+
async function getOrganizationProfile(organizationIdOrParams) {
|
|
1554
|
+
const modeError = serviceKeyModeError();
|
|
1555
|
+
if (modeError) return { error: modeError };
|
|
1556
|
+
const organizationId = resolveOrganizationId(organizationIdOrParams);
|
|
1557
|
+
const idError = requireOrganizationId(organizationId);
|
|
1558
|
+
if (idError) return { error: idError };
|
|
1559
|
+
return fetchWithAuth(
|
|
1560
|
+
`${EXT_PROFILE_ENDPOINT}?${profileQuery(organizationId)}`
|
|
1561
|
+
);
|
|
1562
|
+
}
|
|
1563
|
+
async function upsertOrganizationProfile(organizationIdOrParams, payload) {
|
|
1564
|
+
const modeError = serviceKeyModeError();
|
|
1565
|
+
if (modeError) return { error: modeError };
|
|
1566
|
+
const params = resolveUpsertParams(organizationIdOrParams, payload);
|
|
1567
|
+
const idError = requireOrganizationId(params.organizationId);
|
|
1568
|
+
if (idError) return { error: idError };
|
|
1569
|
+
const consentError = listingConsentValidationError(params.listingConsent, createError);
|
|
1570
|
+
if (consentError) return { error: consentError };
|
|
1571
|
+
return fetchWithAuth(
|
|
1572
|
+
`${EXT_PROFILE_ENDPOINT}?${profileQuery(params.organizationId)}`,
|
|
1573
|
+
{
|
|
1574
|
+
method: "PUT",
|
|
1575
|
+
body: JSON.stringify(buildUpsertBody(params))
|
|
1576
|
+
}
|
|
1577
|
+
);
|
|
1578
|
+
}
|
|
1579
|
+
async function uploadOrganizationLogo(organizationIdOrParams, file) {
|
|
1580
|
+
const modeError = serviceKeyModeError();
|
|
1581
|
+
if (modeError) return { error: modeError };
|
|
1582
|
+
const params = resolveUploadParams(organizationIdOrParams, file);
|
|
1583
|
+
const idError = requireOrganizationId(params.organizationId);
|
|
1584
|
+
if (idError) return { error: idError };
|
|
1585
|
+
const logoFile = resolveLogoFile(params.file, createError);
|
|
1586
|
+
if (!logoFile.ok) return { error: logoFile.error };
|
|
1587
|
+
const form = new FormData();
|
|
1588
|
+
form.append("file", logoFile.file, logoUploadFilename(logoFile.file));
|
|
1589
|
+
return fetchWithAuth(
|
|
1590
|
+
`${EXT_PROFILE_LOGO_ENDPOINT}?${profileQuery(params.organizationId)}`,
|
|
1591
|
+
{ method: "POST", body: form }
|
|
1592
|
+
);
|
|
1593
|
+
}
|
|
1594
|
+
async function getPublicLogoWall() {
|
|
1595
|
+
return fetchPublic(LOGO_WALL_ENDPOINT);
|
|
1596
|
+
}
|
|
1597
|
+
return {
|
|
1598
|
+
getOrganizationProfile,
|
|
1599
|
+
upsertOrganizationProfile,
|
|
1600
|
+
uploadOrganizationLogo,
|
|
1601
|
+
getPublicLogoWall
|
|
1602
|
+
};
|
|
1603
|
+
}
|
|
1604
|
+
|
|
1301
1605
|
// src/client/provisioning-methods.ts
|
|
1302
1606
|
var USER_PROVISION_ENDPOINT = "/api/v1/ext/users/provision";
|
|
1303
1607
|
var USER_WELCOME_EMAIL_ENDPOINT = "/api/v1/ext/users/welcome-email";
|
|
@@ -1441,7 +1745,7 @@ function createSeatMethods(deps) {
|
|
|
1441
1745
|
}
|
|
1442
1746
|
|
|
1443
1747
|
// src/client/profile-methods.ts
|
|
1444
|
-
var
|
|
1748
|
+
var EXT_PROFILE_ENDPOINT2 = "/api/v1/users/ext/me";
|
|
1445
1749
|
function resolveAuthOverride(options, createError) {
|
|
1446
1750
|
if (!options || options.accessToken === void 0) {
|
|
1447
1751
|
return {};
|
|
@@ -1462,7 +1766,7 @@ function createProfileMethods(deps) {
|
|
|
1462
1766
|
async function getProfile(options) {
|
|
1463
1767
|
const { override, error } = resolveAuthOverride(options, createError);
|
|
1464
1768
|
if (error) return { error };
|
|
1465
|
-
return fetchWithAuth(
|
|
1769
|
+
return fetchWithAuth(EXT_PROFILE_ENDPOINT2, void 0, override);
|
|
1466
1770
|
}
|
|
1467
1771
|
async function updateProfile(data, options) {
|
|
1468
1772
|
if (data === null || typeof data !== "object" || Array.isArray(data)) {
|
|
@@ -1478,7 +1782,7 @@ function createProfileMethods(deps) {
|
|
|
1478
1782
|
const { override, error } = resolveAuthOverride(options, createError);
|
|
1479
1783
|
if (error) return { error };
|
|
1480
1784
|
return fetchWithAuth(
|
|
1481
|
-
|
|
1785
|
+
EXT_PROFILE_ENDPOINT2,
|
|
1482
1786
|
{
|
|
1483
1787
|
method: "PUT",
|
|
1484
1788
|
body: JSON.stringify(data)
|
|
@@ -1671,50 +1975,6 @@ function validateTokenResponse(tokenResponse) {
|
|
|
1671
1975
|
};
|
|
1672
1976
|
}
|
|
1673
1977
|
|
|
1674
|
-
// src/client/version-check.ts
|
|
1675
|
-
var SDK_VERSION = "7.0.0";
|
|
1676
|
-
var SDK_USER_AGENT = `FFID-SDK/${SDK_VERSION} (TypeScript)`;
|
|
1677
|
-
var SDK_VERSION_HEADER = "X-FFID-SDK-Version";
|
|
1678
|
-
function sdkHeaders() {
|
|
1679
|
-
if (typeof window !== "undefined") return {};
|
|
1680
|
-
return {
|
|
1681
|
-
"User-Agent": SDK_USER_AGENT,
|
|
1682
|
-
[SDK_VERSION_HEADER]: SDK_VERSION
|
|
1683
|
-
};
|
|
1684
|
-
}
|
|
1685
|
-
var LATEST_VERSION_HEADER = "X-FFID-SDK-Latest-Version";
|
|
1686
|
-
var SEMVER_PATTERN = /^\d+(\.\d+)*$/;
|
|
1687
|
-
var _versionWarningShown = false;
|
|
1688
|
-
function compareSemver(a, b) {
|
|
1689
|
-
const cleanA = a.replace(/^v/, "");
|
|
1690
|
-
const cleanB = b.replace(/^v/, "");
|
|
1691
|
-
if (!SEMVER_PATTERN.test(cleanA) || !SEMVER_PATTERN.test(cleanB)) return 0;
|
|
1692
|
-
const partsA = cleanA.split(".").map(Number);
|
|
1693
|
-
const partsB = cleanB.split(".").map(Number);
|
|
1694
|
-
const maxLen = Math.max(partsA.length, partsB.length);
|
|
1695
|
-
for (let i = 0; i < maxLen; i++) {
|
|
1696
|
-
const numA = partsA[i] ?? 0;
|
|
1697
|
-
const numB = partsB[i] ?? 0;
|
|
1698
|
-
if (numA < numB) return -1;
|
|
1699
|
-
if (numA > numB) return 1;
|
|
1700
|
-
}
|
|
1701
|
-
return 0;
|
|
1702
|
-
}
|
|
1703
|
-
function checkVersionHeader(response, logger) {
|
|
1704
|
-
if (_versionWarningShown) return;
|
|
1705
|
-
if (typeof process !== "undefined" && process.env?.NODE_ENV === "production") return;
|
|
1706
|
-
if (!response.headers?.get) return;
|
|
1707
|
-
const latestVersion = response.headers.get(LATEST_VERSION_HEADER);
|
|
1708
|
-
if (!latestVersion) return;
|
|
1709
|
-
if (compareSemver(SDK_VERSION, latestVersion) < 0) {
|
|
1710
|
-
_versionWarningShown = true;
|
|
1711
|
-
logger.warn(
|
|
1712
|
-
`\u65B0\u3057\u3044\u30D0\u30FC\u30B8\u30E7\u30F3\u304C\u5229\u7528\u53EF\u80FD\u3067\u3059: v${latestVersion} (\u73FE\u5728: v${SDK_VERSION})
|
|
1713
|
-
npm install @feelflow/ffid-sdk@latest \u3067\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u3067\u304D\u307E\u3059`
|
|
1714
|
-
);
|
|
1715
|
-
}
|
|
1716
|
-
}
|
|
1717
|
-
|
|
1718
1978
|
// src/client/oauth-token.ts
|
|
1719
1979
|
var OAUTH_TOKEN_ENDPOINT = "/api/v1/oauth/token";
|
|
1720
1980
|
var OAUTH_REVOKE_ENDPOINT = "/api/v1/oauth/revoke";
|
|
@@ -2535,7 +2795,7 @@ function normalizeRedirectUri(input) {
|
|
|
2535
2795
|
|
|
2536
2796
|
// src/client/password-reset.ts
|
|
2537
2797
|
var RESET_PASSWORD_BASE = "/api/v1/auth/reset-password";
|
|
2538
|
-
function
|
|
2798
|
+
function isBlank2(value) {
|
|
2539
2799
|
return !value || !value.trim();
|
|
2540
2800
|
}
|
|
2541
2801
|
function createPasswordResetMethods(deps) {
|
|
@@ -2596,7 +2856,7 @@ function createPasswordResetMethods(deps) {
|
|
|
2596
2856
|
return { data: raw.data };
|
|
2597
2857
|
}
|
|
2598
2858
|
async function requestPasswordReset(email) {
|
|
2599
|
-
if (
|
|
2859
|
+
if (isBlank2(email)) {
|
|
2600
2860
|
return {
|
|
2601
2861
|
error: createError("VALIDATION_ERROR", "\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u306F\u5FC5\u9808\u3067\u3059")
|
|
2602
2862
|
};
|
|
@@ -2610,7 +2870,7 @@ function createPasswordResetMethods(deps) {
|
|
|
2610
2870
|
);
|
|
2611
2871
|
}
|
|
2612
2872
|
async function verifyPasswordResetToken(accessToken) {
|
|
2613
|
-
if (
|
|
2873
|
+
if (isBlank2(accessToken)) {
|
|
2614
2874
|
return {
|
|
2615
2875
|
error: createError("VALIDATION_ERROR", "\u30A2\u30AF\u30BB\u30B9\u30C8\u30FC\u30AF\u30F3\u306F\u5FC5\u9808\u3067\u3059")
|
|
2616
2876
|
};
|
|
@@ -2624,12 +2884,12 @@ function createPasswordResetMethods(deps) {
|
|
|
2624
2884
|
);
|
|
2625
2885
|
}
|
|
2626
2886
|
async function establishResetSession(accessToken, refreshToken) {
|
|
2627
|
-
if (
|
|
2887
|
+
if (isBlank2(accessToken)) {
|
|
2628
2888
|
return {
|
|
2629
2889
|
error: createError("VALIDATION_ERROR", "\u30A2\u30AF\u30BB\u30B9\u30C8\u30FC\u30AF\u30F3\u306F\u5FC5\u9808\u3067\u3059")
|
|
2630
2890
|
};
|
|
2631
2891
|
}
|
|
2632
|
-
if (
|
|
2892
|
+
if (isBlank2(refreshToken)) {
|
|
2633
2893
|
return {
|
|
2634
2894
|
error: createError("VALIDATION_ERROR", "\u30EA\u30D5\u30EC\u30C3\u30B7\u30E5\u30C8\u30FC\u30AF\u30F3\u306F\u5FC5\u9808\u3067\u3059")
|
|
2635
2895
|
};
|
|
@@ -2643,7 +2903,7 @@ function createPasswordResetMethods(deps) {
|
|
|
2643
2903
|
);
|
|
2644
2904
|
}
|
|
2645
2905
|
async function confirmPasswordReset(password) {
|
|
2646
|
-
if (
|
|
2906
|
+
if (isBlank2(password)) {
|
|
2647
2907
|
return {
|
|
2648
2908
|
error: createError("VALIDATION_ERROR", "\u30D1\u30B9\u30EF\u30FC\u30C9\u306F\u5FC5\u9808\u3067\u3059")
|
|
2649
2909
|
};
|
|
@@ -2666,7 +2926,7 @@ function createPasswordResetMethods(deps) {
|
|
|
2666
2926
|
|
|
2667
2927
|
// src/client/otp.ts
|
|
2668
2928
|
var OTP_BASE = "/api/v1/auth/otp";
|
|
2669
|
-
function
|
|
2929
|
+
function isBlank3(value) {
|
|
2670
2930
|
return !value || !value.trim();
|
|
2671
2931
|
}
|
|
2672
2932
|
function createOtpMethods(deps) {
|
|
@@ -2727,7 +2987,7 @@ function createOtpMethods(deps) {
|
|
|
2727
2987
|
return { data: raw.data };
|
|
2728
2988
|
}
|
|
2729
2989
|
async function sendOtp(email, options) {
|
|
2730
|
-
if (
|
|
2990
|
+
if (isBlank3(email)) {
|
|
2731
2991
|
return {
|
|
2732
2992
|
error: createError("VALIDATION_ERROR", "\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u306F\u5FC5\u9808\u3067\u3059")
|
|
2733
2993
|
};
|
|
@@ -2744,12 +3004,12 @@ function createOtpMethods(deps) {
|
|
|
2744
3004
|
);
|
|
2745
3005
|
}
|
|
2746
3006
|
async function verifyOtp(params) {
|
|
2747
|
-
if (
|
|
3007
|
+
if (isBlank3(params.accessToken)) {
|
|
2748
3008
|
return {
|
|
2749
3009
|
error: createError("VALIDATION_ERROR", "\u30A2\u30AF\u30BB\u30B9\u30C8\u30FC\u30AF\u30F3\u306F\u5FC5\u9808\u3067\u3059")
|
|
2750
3010
|
};
|
|
2751
3011
|
}
|
|
2752
|
-
if (
|
|
3012
|
+
if (isBlank3(params.refreshToken)) {
|
|
2753
3013
|
return {
|
|
2754
3014
|
error: createError("VALIDATION_ERROR", "\u30EA\u30D5\u30EC\u30C3\u30B7\u30E5\u30C8\u30FC\u30AF\u30F3\u306F\u5FC5\u9808\u3067\u3059")
|
|
2755
3015
|
};
|
|
@@ -3240,6 +3500,12 @@ function resolveRedirectUri(raw, logger) {
|
|
|
3240
3500
|
return raw;
|
|
3241
3501
|
}
|
|
3242
3502
|
}
|
|
3503
|
+
function jsonContentTypeHeader(body) {
|
|
3504
|
+
if (typeof FormData !== "undefined" && body instanceof FormData) {
|
|
3505
|
+
return {};
|
|
3506
|
+
}
|
|
3507
|
+
return { "Content-Type": "application/json" };
|
|
3508
|
+
}
|
|
3243
3509
|
function createFFIDClient(config) {
|
|
3244
3510
|
if (!config.serviceCode || !config.serviceCode.trim()) {
|
|
3245
3511
|
throw new Error("FFID Client: serviceCode \u304C\u672A\u8A2D\u5B9A\u3067\u3059");
|
|
@@ -3292,7 +3558,7 @@ function createFFIDClient(config) {
|
|
|
3292
3558
|
...options,
|
|
3293
3559
|
credentials: "omit",
|
|
3294
3560
|
headers: {
|
|
3295
|
-
|
|
3561
|
+
...jsonContentTypeHeader(options.body),
|
|
3296
3562
|
...sdkHeaders(),
|
|
3297
3563
|
...options.headers,
|
|
3298
3564
|
Authorization: `Bearer ${authOverride.accessToken}`
|
|
@@ -3304,7 +3570,7 @@ function createFFIDClient(config) {
|
|
|
3304
3570
|
...options,
|
|
3305
3571
|
credentials: "omit",
|
|
3306
3572
|
headers: {
|
|
3307
|
-
|
|
3573
|
+
...jsonContentTypeHeader(options.body),
|
|
3308
3574
|
...sdkHeaders(),
|
|
3309
3575
|
"X-Service-Api-Key": serviceApiKey,
|
|
3310
3576
|
...options.headers
|
|
@@ -3314,7 +3580,7 @@ function createFFIDClient(config) {
|
|
|
3314
3580
|
if (authMode === "token") {
|
|
3315
3581
|
const tokens = tokenStore.getTokens();
|
|
3316
3582
|
const headers = {
|
|
3317
|
-
|
|
3583
|
+
...jsonContentTypeHeader(options.body),
|
|
3318
3584
|
...sdkHeaders(),
|
|
3319
3585
|
...options.headers
|
|
3320
3586
|
};
|
|
@@ -3331,7 +3597,7 @@ function createFFIDClient(config) {
|
|
|
3331
3597
|
...options,
|
|
3332
3598
|
credentials: "include",
|
|
3333
3599
|
headers: {
|
|
3334
|
-
|
|
3600
|
+
...jsonContentTypeHeader(options.body),
|
|
3335
3601
|
...sdkHeaders(),
|
|
3336
3602
|
...options.headers
|
|
3337
3603
|
}
|
|
@@ -3548,6 +3814,19 @@ function createFFIDClient(config) {
|
|
|
3548
3814
|
createError,
|
|
3549
3815
|
serviceCode: config.serviceCode
|
|
3550
3816
|
});
|
|
3817
|
+
const {
|
|
3818
|
+
getOrganizationProfile,
|
|
3819
|
+
upsertOrganizationProfile,
|
|
3820
|
+
uploadOrganizationLogo,
|
|
3821
|
+
getPublicLogoWall
|
|
3822
|
+
} = createOrganizationProfileMethods({
|
|
3823
|
+
fetchWithAuth,
|
|
3824
|
+
createError,
|
|
3825
|
+
authMode,
|
|
3826
|
+
baseUrl,
|
|
3827
|
+
logger,
|
|
3828
|
+
errorCodes: FFID_ERROR_CODES
|
|
3829
|
+
});
|
|
3551
3830
|
const { provisionUser, sendProvisionWelcomeEmail, provisionOrganization } = createProvisioningMethods({
|
|
3552
3831
|
fetchWithAuth,
|
|
3553
3832
|
createError,
|
|
@@ -3648,6 +3927,10 @@ function createFFIDClient(config) {
|
|
|
3648
3927
|
addMember,
|
|
3649
3928
|
updateMemberRole,
|
|
3650
3929
|
removeMember,
|
|
3930
|
+
getOrganizationProfile,
|
|
3931
|
+
upsertOrganizationProfile,
|
|
3932
|
+
uploadOrganizationLogo,
|
|
3933
|
+
getPublicLogoWall,
|
|
3651
3934
|
provisionUser,
|
|
3652
3935
|
sendProvisionWelcomeEmail,
|
|
3653
3936
|
provisionOrganization,
|
|
@@ -4118,9 +4401,15 @@ exports.CATALOG_HASH_PATTERN = CATALOG_HASH_PATTERN;
|
|
|
4118
4401
|
exports.CONSENT_COOKIE_NAME = CONSENT_COOKIE_NAME;
|
|
4119
4402
|
exports.COOKIE_VERSION = COOKIE_VERSION;
|
|
4120
4403
|
exports.FFIDCatalogHashError = FFIDCatalogHashError;
|
|
4404
|
+
exports.FFID_ALLOWED_ORGANIZATION_LOGO_MIME_TYPES = FFID_ALLOWED_ORGANIZATION_LOGO_MIME_TYPES;
|
|
4121
4405
|
exports.FFID_CATALOG_ENVIRONMENTS = FFID_CATALOG_ENVIRONMENTS;
|
|
4122
4406
|
exports.FFID_CATALOG_PUBLICATION_STATUSES = FFID_CATALOG_PUBLICATION_STATUSES;
|
|
4407
|
+
exports.FFID_COMPANY_SIZE_CODES = FFID_COMPANY_SIZE_CODES;
|
|
4123
4408
|
exports.FFID_ERROR_CODES = FFID_ERROR_CODES;
|
|
4409
|
+
exports.FFID_INDUSTRY_CODES = FFID_INDUSTRY_CODES;
|
|
4410
|
+
exports.FFID_MAX_ORGANIZATION_LOGO_FILE_SIZE_BYTES = FFID_MAX_ORGANIZATION_LOGO_FILE_SIZE_BYTES;
|
|
4411
|
+
exports.FFID_MAX_ORGANIZATION_LOGO_FILE_SIZE_MB = FFID_MAX_ORGANIZATION_LOGO_FILE_SIZE_MB;
|
|
4412
|
+
exports.FFID_ORGANIZATION_PROFILE_ERROR_CODES = FFID_ORGANIZATION_PROFILE_ERROR_CODES;
|
|
4124
4413
|
exports.FFID_SESSION_COOKIE_NAME = FFID_SESSION_COOKIE_NAME;
|
|
4125
4414
|
exports.canonicalizeCatalogValue = canonicalizeCatalogValue;
|
|
4126
4415
|
exports.computeFFIDCheckoutCopyHash = computeFFIDCheckoutCopyHash;
|
package/dist/server/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { F as FFIDLogger, a as FFIDError, b as FFIDCacheAdapter, c as FFIDVerifyAccessTokenOptions, d as FFIDApiResponse, e as FFIDOAuthUserInfo, f as FFIDCatalogEnvironment, g as FFIDBillingInterval, h as FFIDTaxBehavior, i as FFIDPublishedCatalog } from '../ffid-client-
|
|
2
|
-
export { j as FFIDAddMemberParams, k as FFIDAddMemberRequest, l as FFIDAddMemberResponse, m as
|
|
1
|
+
import { F as FFIDLogger, a as FFIDError, b as FFIDCacheAdapter, c as FFIDVerifyAccessTokenOptions, d as FFIDApiResponse, e as FFIDOAuthUserInfo, f as FFIDCatalogEnvironment, g as FFIDBillingInterval, h as FFIDTaxBehavior, i as FFIDPublishedCatalog } from '../ffid-client-BFgoVPOZ.cjs';
|
|
2
|
+
export { j as FFIDAddMemberParams, k as FFIDAddMemberRequest, l as FFIDAddMemberResponse, m as FFIDAllowedLogoMimeType, n as FFIDAssignableMemberRole, o as FFIDCacheConfig, p as FFIDCatalogPublication, q as FFIDCatalogPublicationStatus, r as FFIDClient, s as FFIDCompanySizeCode, t as FFIDConfig, u as FFIDIndustryCode, v as FFIDListMembersResponse, w as FFIDListingConsentInput, x as FFIDLogoWallEntry, y as FFIDLogoWallResponse, z as FFIDMemberRole, A as FFIDOrganization, B as FFIDOrganizationLogoUploadResponse, C as FFIDOrganizationMember, D as FFIDOrganizationProfile, E as FFIDOrganizationProfileErrorCode, G as FFIDOrganizationProfileResponse, H as FFIDOtpSendResponse, I as FFIDOtpVerifyResponse, J as FFIDPasswordResetConfirmResponse, K as FFIDPasswordResetResponse, L as FFIDPasswordResetVerifyResponse, M as FFIDProfileCallOptions, N as FFIDProvisionMemberPlan, O as FFIDProvisionMemberPlanStatus, P as FFIDProvisionMemberResult, Q as FFIDProvisionMemberStatus, R as FFIDProvisionOrganizationDryRun, S as FFIDProvisionOrganizationMemberInput, T as FFIDProvisionOrganizationOutcome, U as FFIDProvisionOrganizationParams, V as FFIDProvisionOrganizationResponse, W as FFIDProvisionUserDryRun, X as FFIDProvisionUserOutcome, Y as FFIDProvisionUserParams, Z as FFIDProvisionUserProfileInput, _ as FFIDProvisionUserResponse, $ as FFIDProvisionedOrganization, a0 as FFIDProvisionedUser, a1 as FFIDPublishedPlan, a2 as FFIDRemoveMemberResponse, a3 as FFIDResetSessionResponse, a4 as FFIDSubscription, a5 as FFIDUpdateMemberRoleResponse, a6 as FFIDUpdateUserProfileRequest, a7 as FFIDUploadOrganizationLogoParams, a8 as FFIDUpsertOrganizationProfileParams, a9 as FFIDUpsertOrganizationProfileRequest, aa as FFIDUser, ab as FFIDUserProfile, ac as FFID_ALLOWED_ORGANIZATION_LOGO_MIME_TYPES, ad as FFID_CATALOG_ENVIRONMENTS, ae as FFID_CATALOG_PUBLICATION_STATUSES, af as FFID_COMPANY_SIZE_CODES, ag as FFID_INDUSTRY_CODES, ah as FFID_MAX_ORGANIZATION_LOGO_FILE_SIZE_BYTES, ai as FFID_MAX_ORGANIZATION_LOGO_FILE_SIZE_MB, aj as FFID_ORGANIZATION_PROFILE_ERROR_CODES, ak as TokenData, al as TokenStore, am as createFFIDClient, an as createTokenStore } from '../ffid-client-BFgoVPOZ.cjs';
|
|
3
3
|
export { D as DEFAULT_API_BASE_URL, a as DEFAULT_OAUTH_SCOPES } from '../constants-Ce2eXQtB.cjs';
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
import '../types-Cjb9J0rL.cjs';
|
package/dist/server/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { F as FFIDLogger, a as FFIDError, b as FFIDCacheAdapter, c as FFIDVerifyAccessTokenOptions, d as FFIDApiResponse, e as FFIDOAuthUserInfo, f as FFIDCatalogEnvironment, g as FFIDBillingInterval, h as FFIDTaxBehavior, i as FFIDPublishedCatalog } from '../ffid-client-
|
|
2
|
-
export { j as FFIDAddMemberParams, k as FFIDAddMemberRequest, l as FFIDAddMemberResponse, m as
|
|
1
|
+
import { F as FFIDLogger, a as FFIDError, b as FFIDCacheAdapter, c as FFIDVerifyAccessTokenOptions, d as FFIDApiResponse, e as FFIDOAuthUserInfo, f as FFIDCatalogEnvironment, g as FFIDBillingInterval, h as FFIDTaxBehavior, i as FFIDPublishedCatalog } from '../ffid-client-QNEFA3mv.js';
|
|
2
|
+
export { j as FFIDAddMemberParams, k as FFIDAddMemberRequest, l as FFIDAddMemberResponse, m as FFIDAllowedLogoMimeType, n as FFIDAssignableMemberRole, o as FFIDCacheConfig, p as FFIDCatalogPublication, q as FFIDCatalogPublicationStatus, r as FFIDClient, s as FFIDCompanySizeCode, t as FFIDConfig, u as FFIDIndustryCode, v as FFIDListMembersResponse, w as FFIDListingConsentInput, x as FFIDLogoWallEntry, y as FFIDLogoWallResponse, z as FFIDMemberRole, A as FFIDOrganization, B as FFIDOrganizationLogoUploadResponse, C as FFIDOrganizationMember, D as FFIDOrganizationProfile, E as FFIDOrganizationProfileErrorCode, G as FFIDOrganizationProfileResponse, H as FFIDOtpSendResponse, I as FFIDOtpVerifyResponse, J as FFIDPasswordResetConfirmResponse, K as FFIDPasswordResetResponse, L as FFIDPasswordResetVerifyResponse, M as FFIDProfileCallOptions, N as FFIDProvisionMemberPlan, O as FFIDProvisionMemberPlanStatus, P as FFIDProvisionMemberResult, Q as FFIDProvisionMemberStatus, R as FFIDProvisionOrganizationDryRun, S as FFIDProvisionOrganizationMemberInput, T as FFIDProvisionOrganizationOutcome, U as FFIDProvisionOrganizationParams, V as FFIDProvisionOrganizationResponse, W as FFIDProvisionUserDryRun, X as FFIDProvisionUserOutcome, Y as FFIDProvisionUserParams, Z as FFIDProvisionUserProfileInput, _ as FFIDProvisionUserResponse, $ as FFIDProvisionedOrganization, a0 as FFIDProvisionedUser, a1 as FFIDPublishedPlan, a2 as FFIDRemoveMemberResponse, a3 as FFIDResetSessionResponse, a4 as FFIDSubscription, a5 as FFIDUpdateMemberRoleResponse, a6 as FFIDUpdateUserProfileRequest, a7 as FFIDUploadOrganizationLogoParams, a8 as FFIDUpsertOrganizationProfileParams, a9 as FFIDUpsertOrganizationProfileRequest, aa as FFIDUser, ab as FFIDUserProfile, ac as FFID_ALLOWED_ORGANIZATION_LOGO_MIME_TYPES, ad as FFID_CATALOG_ENVIRONMENTS, ae as FFID_CATALOG_PUBLICATION_STATUSES, af as FFID_COMPANY_SIZE_CODES, ag as FFID_INDUSTRY_CODES, ah as FFID_MAX_ORGANIZATION_LOGO_FILE_SIZE_BYTES, ai as FFID_MAX_ORGANIZATION_LOGO_FILE_SIZE_MB, aj as FFID_ORGANIZATION_PROFILE_ERROR_CODES, ak as TokenData, al as TokenStore, am as createFFIDClient, an as createTokenStore } from '../ffid-client-QNEFA3mv.js';
|
|
3
3
|
export { D as DEFAULT_API_BASE_URL, a as DEFAULT_OAUTH_SCOPES } from '../constants-Ce2eXQtB.js';
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
import '../types-Cjb9J0rL.js';
|