@feelflow/ffid-sdk 3.0.0 → 4.0.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/dist/{chunk-XWI4BFKW.js → chunk-P35ULJLM.js} +25 -17
- package/dist/{chunk-JNR4AKL5.cjs → chunk-XQL4YSTL.cjs} +25 -17
- package/dist/components/index.cjs +8 -8
- package/dist/components/index.d.cts +1 -1
- package/dist/components/index.d.ts +1 -1
- package/dist/components/index.js +1 -1
- package/dist/{ffid-client-B26jbUp5.d.cts → ffid-client-ZcJhRbD6.d.cts} +21 -1
- package/dist/{ffid-client-B26jbUp5.d.ts → ffid-client-ZcJhRbD6.d.ts} +21 -1
- package/dist/{index-C3zyNa4j.d.cts → index-Cn8-3hgb.d.cts} +32 -12
- package/dist/{index-C3zyNa4j.d.ts → index-Cn8-3hgb.d.ts} +32 -12
- package/dist/index.cjs +32 -32
- package/dist/index.d.cts +34 -5
- package/dist/index.d.ts +34 -5
- package/dist/index.js +2 -2
- package/dist/server/index.cjs +11 -7
- package/dist/server/index.d.cts +2 -2
- package/dist/server/index.d.ts +2 -2
- package/dist/server/index.js +11 -7
- package/dist/server/test/index.d.cts +1 -1
- package/dist/server/test/index.d.ts +1 -1
- package/package.json +1 -1
|
@@ -806,7 +806,7 @@ function createProfileMethods(deps) {
|
|
|
806
806
|
}
|
|
807
807
|
|
|
808
808
|
// src/client/version-check.ts
|
|
809
|
-
var SDK_VERSION = "
|
|
809
|
+
var SDK_VERSION = "4.0.0";
|
|
810
810
|
var SDK_USER_AGENT = `FFID-SDK/${SDK_VERSION} (TypeScript)`;
|
|
811
811
|
var SDK_VERSION_HEADER = "X-FFID-SDK-Version";
|
|
812
812
|
function sdkHeaders() {
|
|
@@ -1367,6 +1367,8 @@ function base64UrlEncode(buffer) {
|
|
|
1367
1367
|
// src/client/redirect.ts
|
|
1368
1368
|
var OAUTH_AUTHORIZE_ENDPOINT = "/api/v1/oauth/authorize";
|
|
1369
1369
|
var AUTH_LOGOUT_ENDPOINT = "/api/v1/auth/logout";
|
|
1370
|
+
var SCREEN_HINT_SIGNUP = "signup";
|
|
1371
|
+
var SCREEN_HINT_PARAM = "screen_hint";
|
|
1370
1372
|
var STATE_RANDOM_BYTES = 16;
|
|
1371
1373
|
var HEX_BASE2 = 16;
|
|
1372
1374
|
var REDIRECT_LOOP_KEY = "ffid_sdk_redirect_loop_history";
|
|
@@ -1534,6 +1536,9 @@ function createRedirectMethods(deps) {
|
|
|
1534
1536
|
}
|
|
1535
1537
|
params.set("organization_id", trimmedOrgId);
|
|
1536
1538
|
}
|
|
1539
|
+
if (options?.screenHint === SCREEN_HINT_SIGNUP) {
|
|
1540
|
+
params.set(SCREEN_HINT_PARAM, SCREEN_HINT_SIGNUP);
|
|
1541
|
+
}
|
|
1537
1542
|
const authorizeUrl = `${baseUrl}${OAUTH_AUTHORIZE_ENDPOINT}?${params.toString()}`;
|
|
1538
1543
|
logger.debug("Redirecting to authorize:", authorizeUrl);
|
|
1539
1544
|
recordRedirectAttempt(authorizeKey, now, logger);
|
|
@@ -1545,18 +1550,17 @@ function createRedirectMethods(deps) {
|
|
|
1545
1550
|
}
|
|
1546
1551
|
return { success: true };
|
|
1547
1552
|
}
|
|
1548
|
-
async function redirectToLogin() {
|
|
1553
|
+
async function redirectToLogin(options) {
|
|
1549
1554
|
if (typeof window === "undefined") {
|
|
1550
1555
|
logger.warn("SSR \u74B0\u5883\u3067\u306F\u30EA\u30C0\u30A4\u30EC\u30AF\u30C8\u3067\u304D\u307E\u305B\u3093");
|
|
1551
1556
|
return { success: false, error: "SSR \u74B0\u5883\u3067\u306F\u30EA\u30C0\u30A4\u30EC\u30AF\u30C8\u3067\u304D\u307E\u305B\u3093" };
|
|
1552
1557
|
}
|
|
1553
1558
|
if (authMode === "token") {
|
|
1554
|
-
return redirectToAuthorize();
|
|
1559
|
+
return redirectToAuthorize(options);
|
|
1555
1560
|
}
|
|
1556
|
-
const
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
window.location.href = loginUrl;
|
|
1561
|
+
const targetUrl = options?.screenHint === SCREEN_HINT_SIGNUP ? getSignupUrl() : getLoginUrl();
|
|
1562
|
+
logger.debug("Redirecting to auth page:", targetUrl);
|
|
1563
|
+
window.location.href = targetUrl;
|
|
1560
1564
|
return { success: true };
|
|
1561
1565
|
}
|
|
1562
1566
|
function getLoginUrl(redirectUrl) {
|
|
@@ -2689,8 +2693,8 @@ function FFIDProvider({
|
|
|
2689
2693
|
setIsLoading(false);
|
|
2690
2694
|
}
|
|
2691
2695
|
}, [client]);
|
|
2692
|
-
const login = useCallback(() => {
|
|
2693
|
-
client.redirectToLogin().catch((err) => {
|
|
2696
|
+
const login = useCallback((options) => {
|
|
2697
|
+
client.redirectToLogin(options).catch((err) => {
|
|
2694
2698
|
client.logger.error("\u30ED\u30B0\u30A4\u30F3\u30EA\u30C0\u30A4\u30EC\u30AF\u30C8\u306B\u5931\u6557\u3057\u307E\u3057\u305F:", err);
|
|
2695
2699
|
});
|
|
2696
2700
|
}, [client]);
|
|
@@ -4119,6 +4123,7 @@ var DEFAULT_CATEGORY_LABELS_JA = {
|
|
|
4119
4123
|
};
|
|
4120
4124
|
function defaultCategories() {
|
|
4121
4125
|
return FFID_INQUIRY_CATEGORIES.map((value) => ({
|
|
4126
|
+
kind: "flat",
|
|
4122
4127
|
value,
|
|
4123
4128
|
label: DEFAULT_CATEGORY_LABELS_JA[value]
|
|
4124
4129
|
}));
|
|
@@ -4128,7 +4133,7 @@ function warnOnGroupLabelConflicts(options) {
|
|
|
4128
4133
|
const firstExplicitLabel = /* @__PURE__ */ new Map();
|
|
4129
4134
|
const warnedGroups = /* @__PURE__ */ new Set();
|
|
4130
4135
|
for (const opt of options) {
|
|
4131
|
-
if (
|
|
4136
|
+
if (opt.kind !== "grouped") continue;
|
|
4132
4137
|
const firstLabel = firstExplicitLabel.get(opt.group);
|
|
4133
4138
|
if (firstLabel === void 0) {
|
|
4134
4139
|
firstExplicitLabel.set(opt.group, opt.groupLabel);
|
|
@@ -4141,20 +4146,22 @@ function warnOnGroupLabelConflicts(options) {
|
|
|
4141
4146
|
}
|
|
4142
4147
|
}
|
|
4143
4148
|
function renderCategoryOptions(options) {
|
|
4144
|
-
const hasAnyGroup = options.some((o) =>
|
|
4149
|
+
const hasAnyGroup = options.some((o) => o.kind === "grouped");
|
|
4145
4150
|
if (!hasAnyGroup) {
|
|
4146
4151
|
return options.map((opt) => /* @__PURE__ */ jsx("option", { value: opt.value, children: opt.label }, opt.value));
|
|
4147
4152
|
}
|
|
4148
|
-
const ungrouped = options.filter(
|
|
4153
|
+
const ungrouped = options.filter(
|
|
4154
|
+
(o) => o.kind === "flat"
|
|
4155
|
+
);
|
|
4149
4156
|
const groupKeys = [];
|
|
4150
4157
|
const groupLabelByKey = /* @__PURE__ */ new Map();
|
|
4151
4158
|
const itemsByKey = /* @__PURE__ */ new Map();
|
|
4152
4159
|
for (const opt of options) {
|
|
4153
|
-
if (
|
|
4160
|
+
if (opt.kind !== "grouped") continue;
|
|
4154
4161
|
if (!itemsByKey.has(opt.group)) {
|
|
4155
4162
|
groupKeys.push(opt.group);
|
|
4156
4163
|
itemsByKey.set(opt.group, []);
|
|
4157
|
-
groupLabelByKey.set(opt.group, opt.groupLabel
|
|
4164
|
+
groupLabelByKey.set(opt.group, opt.groupLabel);
|
|
4158
4165
|
}
|
|
4159
4166
|
itemsByKey.get(opt.group).push(opt);
|
|
4160
4167
|
}
|
|
@@ -4177,7 +4184,7 @@ function FFIDInquiryForm({
|
|
|
4177
4184
|
turnstileSlot,
|
|
4178
4185
|
onSubmit,
|
|
4179
4186
|
onChange,
|
|
4180
|
-
|
|
4187
|
+
legalLayout = "combined",
|
|
4181
4188
|
messagePlaceholder,
|
|
4182
4189
|
requireCategorySelection = false,
|
|
4183
4190
|
unstyled = false,
|
|
@@ -4188,6 +4195,7 @@ function FFIDInquiryForm({
|
|
|
4188
4195
|
const isAuth = mode === "authenticated";
|
|
4189
4196
|
const isNameReadOnly = isAuth && !!prefill?.name;
|
|
4190
4197
|
const isEmailReadOnly = isAuth;
|
|
4198
|
+
const usesSeparateLegalCheckboxes = legalLayout === "separate";
|
|
4191
4199
|
const categoryOptions = useMemo(
|
|
4192
4200
|
() => categories && categories.length > 0 ? categories : defaultCategories(),
|
|
4193
4201
|
[categories]
|
|
@@ -4283,7 +4291,7 @@ function FFIDInquiryForm({
|
|
|
4283
4291
|
async function handleSubmit(e) {
|
|
4284
4292
|
e.preventDefault();
|
|
4285
4293
|
setFormError(null);
|
|
4286
|
-
if (
|
|
4294
|
+
if (usesSeparateLegalCheckboxes) {
|
|
4287
4295
|
const termsInvalid = !agreedTerms;
|
|
4288
4296
|
const privacyInvalid = !agreedPrivacy;
|
|
4289
4297
|
setAgreedTermsError(termsInvalid);
|
|
@@ -4545,7 +4553,7 @@ function FFIDInquiryForm({
|
|
|
4545
4553
|
]
|
|
4546
4554
|
}
|
|
4547
4555
|
),
|
|
4548
|
-
|
|
4556
|
+
usesSeparateLegalCheckboxes ? /* @__PURE__ */ jsxs("div", { style: s(fieldsetStyle), className: classNames?.legalBlock, children: [
|
|
4549
4557
|
/* @__PURE__ */ jsxs("label", { style: s(legalRowFirst), className: classNames?.legalRow, children: [
|
|
4550
4558
|
/* @__PURE__ */ jsx(
|
|
4551
4559
|
"input",
|
|
@@ -808,7 +808,7 @@ function createProfileMethods(deps) {
|
|
|
808
808
|
}
|
|
809
809
|
|
|
810
810
|
// src/client/version-check.ts
|
|
811
|
-
var SDK_VERSION = "
|
|
811
|
+
var SDK_VERSION = "4.0.0";
|
|
812
812
|
var SDK_USER_AGENT = `FFID-SDK/${SDK_VERSION} (TypeScript)`;
|
|
813
813
|
var SDK_VERSION_HEADER = "X-FFID-SDK-Version";
|
|
814
814
|
function sdkHeaders() {
|
|
@@ -1369,6 +1369,8 @@ function base64UrlEncode(buffer) {
|
|
|
1369
1369
|
// src/client/redirect.ts
|
|
1370
1370
|
var OAUTH_AUTHORIZE_ENDPOINT = "/api/v1/oauth/authorize";
|
|
1371
1371
|
var AUTH_LOGOUT_ENDPOINT = "/api/v1/auth/logout";
|
|
1372
|
+
var SCREEN_HINT_SIGNUP = "signup";
|
|
1373
|
+
var SCREEN_HINT_PARAM = "screen_hint";
|
|
1372
1374
|
var STATE_RANDOM_BYTES = 16;
|
|
1373
1375
|
var HEX_BASE2 = 16;
|
|
1374
1376
|
var REDIRECT_LOOP_KEY = "ffid_sdk_redirect_loop_history";
|
|
@@ -1536,6 +1538,9 @@ function createRedirectMethods(deps) {
|
|
|
1536
1538
|
}
|
|
1537
1539
|
params.set("organization_id", trimmedOrgId);
|
|
1538
1540
|
}
|
|
1541
|
+
if (options?.screenHint === SCREEN_HINT_SIGNUP) {
|
|
1542
|
+
params.set(SCREEN_HINT_PARAM, SCREEN_HINT_SIGNUP);
|
|
1543
|
+
}
|
|
1539
1544
|
const authorizeUrl = `${baseUrl}${OAUTH_AUTHORIZE_ENDPOINT}?${params.toString()}`;
|
|
1540
1545
|
logger.debug("Redirecting to authorize:", authorizeUrl);
|
|
1541
1546
|
recordRedirectAttempt(authorizeKey, now, logger);
|
|
@@ -1547,18 +1552,17 @@ function createRedirectMethods(deps) {
|
|
|
1547
1552
|
}
|
|
1548
1553
|
return { success: true };
|
|
1549
1554
|
}
|
|
1550
|
-
async function redirectToLogin() {
|
|
1555
|
+
async function redirectToLogin(options) {
|
|
1551
1556
|
if (typeof window === "undefined") {
|
|
1552
1557
|
logger.warn("SSR \u74B0\u5883\u3067\u306F\u30EA\u30C0\u30A4\u30EC\u30AF\u30C8\u3067\u304D\u307E\u305B\u3093");
|
|
1553
1558
|
return { success: false, error: "SSR \u74B0\u5883\u3067\u306F\u30EA\u30C0\u30A4\u30EC\u30AF\u30C8\u3067\u304D\u307E\u305B\u3093" };
|
|
1554
1559
|
}
|
|
1555
1560
|
if (authMode === "token") {
|
|
1556
|
-
return redirectToAuthorize();
|
|
1561
|
+
return redirectToAuthorize(options);
|
|
1557
1562
|
}
|
|
1558
|
-
const
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
window.location.href = loginUrl;
|
|
1563
|
+
const targetUrl = options?.screenHint === SCREEN_HINT_SIGNUP ? getSignupUrl() : getLoginUrl();
|
|
1564
|
+
logger.debug("Redirecting to auth page:", targetUrl);
|
|
1565
|
+
window.location.href = targetUrl;
|
|
1562
1566
|
return { success: true };
|
|
1563
1567
|
}
|
|
1564
1568
|
function getLoginUrl(redirectUrl) {
|
|
@@ -2691,8 +2695,8 @@ function FFIDProvider({
|
|
|
2691
2695
|
setIsLoading(false);
|
|
2692
2696
|
}
|
|
2693
2697
|
}, [client]);
|
|
2694
|
-
const login = react.useCallback(() => {
|
|
2695
|
-
client.redirectToLogin().catch((err) => {
|
|
2698
|
+
const login = react.useCallback((options) => {
|
|
2699
|
+
client.redirectToLogin(options).catch((err) => {
|
|
2696
2700
|
client.logger.error("\u30ED\u30B0\u30A4\u30F3\u30EA\u30C0\u30A4\u30EC\u30AF\u30C8\u306B\u5931\u6557\u3057\u307E\u3057\u305F:", err);
|
|
2697
2701
|
});
|
|
2698
2702
|
}, [client]);
|
|
@@ -4121,6 +4125,7 @@ var DEFAULT_CATEGORY_LABELS_JA = {
|
|
|
4121
4125
|
};
|
|
4122
4126
|
function defaultCategories() {
|
|
4123
4127
|
return FFID_INQUIRY_CATEGORIES.map((value) => ({
|
|
4128
|
+
kind: "flat",
|
|
4124
4129
|
value,
|
|
4125
4130
|
label: DEFAULT_CATEGORY_LABELS_JA[value]
|
|
4126
4131
|
}));
|
|
@@ -4130,7 +4135,7 @@ function warnOnGroupLabelConflicts(options) {
|
|
|
4130
4135
|
const firstExplicitLabel = /* @__PURE__ */ new Map();
|
|
4131
4136
|
const warnedGroups = /* @__PURE__ */ new Set();
|
|
4132
4137
|
for (const opt of options) {
|
|
4133
|
-
if (
|
|
4138
|
+
if (opt.kind !== "grouped") continue;
|
|
4134
4139
|
const firstLabel = firstExplicitLabel.get(opt.group);
|
|
4135
4140
|
if (firstLabel === void 0) {
|
|
4136
4141
|
firstExplicitLabel.set(opt.group, opt.groupLabel);
|
|
@@ -4143,20 +4148,22 @@ function warnOnGroupLabelConflicts(options) {
|
|
|
4143
4148
|
}
|
|
4144
4149
|
}
|
|
4145
4150
|
function renderCategoryOptions(options) {
|
|
4146
|
-
const hasAnyGroup = options.some((o) =>
|
|
4151
|
+
const hasAnyGroup = options.some((o) => o.kind === "grouped");
|
|
4147
4152
|
if (!hasAnyGroup) {
|
|
4148
4153
|
return options.map((opt) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: opt.value, children: opt.label }, opt.value));
|
|
4149
4154
|
}
|
|
4150
|
-
const ungrouped = options.filter(
|
|
4155
|
+
const ungrouped = options.filter(
|
|
4156
|
+
(o) => o.kind === "flat"
|
|
4157
|
+
);
|
|
4151
4158
|
const groupKeys = [];
|
|
4152
4159
|
const groupLabelByKey = /* @__PURE__ */ new Map();
|
|
4153
4160
|
const itemsByKey = /* @__PURE__ */ new Map();
|
|
4154
4161
|
for (const opt of options) {
|
|
4155
|
-
if (
|
|
4162
|
+
if (opt.kind !== "grouped") continue;
|
|
4156
4163
|
if (!itemsByKey.has(opt.group)) {
|
|
4157
4164
|
groupKeys.push(opt.group);
|
|
4158
4165
|
itemsByKey.set(opt.group, []);
|
|
4159
|
-
groupLabelByKey.set(opt.group, opt.groupLabel
|
|
4166
|
+
groupLabelByKey.set(opt.group, opt.groupLabel);
|
|
4160
4167
|
}
|
|
4161
4168
|
itemsByKey.get(opt.group).push(opt);
|
|
4162
4169
|
}
|
|
@@ -4179,7 +4186,7 @@ function FFIDInquiryForm({
|
|
|
4179
4186
|
turnstileSlot,
|
|
4180
4187
|
onSubmit,
|
|
4181
4188
|
onChange,
|
|
4182
|
-
|
|
4189
|
+
legalLayout = "combined",
|
|
4183
4190
|
messagePlaceholder,
|
|
4184
4191
|
requireCategorySelection = false,
|
|
4185
4192
|
unstyled = false,
|
|
@@ -4190,6 +4197,7 @@ function FFIDInquiryForm({
|
|
|
4190
4197
|
const isAuth = mode === "authenticated";
|
|
4191
4198
|
const isNameReadOnly = isAuth && !!prefill?.name;
|
|
4192
4199
|
const isEmailReadOnly = isAuth;
|
|
4200
|
+
const usesSeparateLegalCheckboxes = legalLayout === "separate";
|
|
4193
4201
|
const categoryOptions = react.useMemo(
|
|
4194
4202
|
() => categories && categories.length > 0 ? categories : defaultCategories(),
|
|
4195
4203
|
[categories]
|
|
@@ -4285,7 +4293,7 @@ function FFIDInquiryForm({
|
|
|
4285
4293
|
async function handleSubmit(e) {
|
|
4286
4294
|
e.preventDefault();
|
|
4287
4295
|
setFormError(null);
|
|
4288
|
-
if (
|
|
4296
|
+
if (usesSeparateLegalCheckboxes) {
|
|
4289
4297
|
const termsInvalid = !agreedTerms;
|
|
4290
4298
|
const privacyInvalid = !agreedPrivacy;
|
|
4291
4299
|
setAgreedTermsError(termsInvalid);
|
|
@@ -4547,7 +4555,7 @@ function FFIDInquiryForm({
|
|
|
4547
4555
|
]
|
|
4548
4556
|
}
|
|
4549
4557
|
),
|
|
4550
|
-
|
|
4558
|
+
usesSeparateLegalCheckboxes ? /* @__PURE__ */ jsxRuntime.jsxs("div", { style: s(fieldsetStyle), className: classNames?.legalBlock, children: [
|
|
4551
4559
|
/* @__PURE__ */ jsxRuntime.jsxs("label", { style: s(legalRowFirst), className: classNames?.legalRow, children: [
|
|
4552
4560
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4553
4561
|
"input",
|
|
@@ -1,34 +1,34 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkXQL4YSTL_cjs = require('../chunk-XQL4YSTL.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 chunkXQL4YSTL_cjs.FFIDAnnouncementBadge; }
|
|
10
10
|
});
|
|
11
11
|
Object.defineProperty(exports, "FFIDAnnouncementList", {
|
|
12
12
|
enumerable: true,
|
|
13
|
-
get: function () { return
|
|
13
|
+
get: function () { return chunkXQL4YSTL_cjs.FFIDAnnouncementList; }
|
|
14
14
|
});
|
|
15
15
|
Object.defineProperty(exports, "FFIDInquiryForm", {
|
|
16
16
|
enumerable: true,
|
|
17
|
-
get: function () { return
|
|
17
|
+
get: function () { return chunkXQL4YSTL_cjs.FFIDInquiryForm; }
|
|
18
18
|
});
|
|
19
19
|
Object.defineProperty(exports, "FFIDLoginButton", {
|
|
20
20
|
enumerable: true,
|
|
21
|
-
get: function () { return
|
|
21
|
+
get: function () { return chunkXQL4YSTL_cjs.FFIDLoginButton; }
|
|
22
22
|
});
|
|
23
23
|
Object.defineProperty(exports, "FFIDOrganizationSwitcher", {
|
|
24
24
|
enumerable: true,
|
|
25
|
-
get: function () { return
|
|
25
|
+
get: function () { return chunkXQL4YSTL_cjs.FFIDOrganizationSwitcher; }
|
|
26
26
|
});
|
|
27
27
|
Object.defineProperty(exports, "FFIDSubscriptionBadge", {
|
|
28
28
|
enumerable: true,
|
|
29
|
-
get: function () { return
|
|
29
|
+
get: function () { return chunkXQL4YSTL_cjs.FFIDSubscriptionBadge; }
|
|
30
30
|
});
|
|
31
31
|
Object.defineProperty(exports, "FFIDUserMenu", {
|
|
32
32
|
enumerable: true,
|
|
33
|
-
get: function () { return
|
|
33
|
+
get: function () { return chunkXQL4YSTL_cjs.FFIDUserMenu; }
|
|
34
34
|
});
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { N as FFIDAnnouncementBadge,
|
|
1
|
+
export { N as FFIDAnnouncementBadge, an as FFIDAnnouncementBadgeClassNames, ao as FFIDAnnouncementBadgeProps, O as FFIDAnnouncementList, ap as FFIDAnnouncementListClassNames, aq as FFIDAnnouncementListProps, W as FFIDInquiryForm, X as FFIDInquiryFormCategoryItem, Y as FFIDInquiryFormClassNames, Z as FFIDInquiryFormLegalLayout, _ as FFIDInquiryFormOrganization, $ as FFIDInquiryFormPlaceholderContext, a0 as FFIDInquiryFormPrefill, a1 as FFIDInquiryFormProps, a2 as FFIDInquiryFormSubmitData, a3 as FFIDInquiryFormSubmitResult, a5 as FFIDLoginButton, ar as FFIDLoginButtonProps, ab as FFIDOrganizationSwitcher, as as FFIDOrganizationSwitcherClassNames, at as FFIDOrganizationSwitcherProps, ae as FFIDSubscriptionBadge, au as FFIDSubscriptionBadgeClassNames, av as FFIDSubscriptionBadgeProps, ag as FFIDUserMenu, aw as FFIDUserMenuClassNames, ax as FFIDUserMenuProps } from '../index-Cn8-3hgb.cjs';
|
|
2
2
|
import 'react/jsx-runtime';
|
|
3
3
|
import 'react';
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { N as FFIDAnnouncementBadge,
|
|
1
|
+
export { N as FFIDAnnouncementBadge, an as FFIDAnnouncementBadgeClassNames, ao as FFIDAnnouncementBadgeProps, O as FFIDAnnouncementList, ap as FFIDAnnouncementListClassNames, aq as FFIDAnnouncementListProps, W as FFIDInquiryForm, X as FFIDInquiryFormCategoryItem, Y as FFIDInquiryFormClassNames, Z as FFIDInquiryFormLegalLayout, _ as FFIDInquiryFormOrganization, $ as FFIDInquiryFormPlaceholderContext, a0 as FFIDInquiryFormPrefill, a1 as FFIDInquiryFormProps, a2 as FFIDInquiryFormSubmitData, a3 as FFIDInquiryFormSubmitResult, a5 as FFIDLoginButton, ar as FFIDLoginButtonProps, ab as FFIDOrganizationSwitcher, as as FFIDOrganizationSwitcherClassNames, at as FFIDOrganizationSwitcherProps, ae as FFIDSubscriptionBadge, au as FFIDSubscriptionBadgeClassNames, av as FFIDSubscriptionBadgeProps, ag as FFIDUserMenu, aw as FFIDUserMenuClassNames, ax as FFIDUserMenuProps } from '../index-Cn8-3hgb.js';
|
|
2
2
|
import 'react/jsx-runtime';
|
|
3
3
|
import 'react';
|
package/dist/components/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { FFIDAnnouncementBadge, FFIDAnnouncementList, FFIDInquiryForm, FFIDLoginButton, FFIDOrganizationSwitcher, FFIDSubscriptionBadge, FFIDUserMenu } from '../chunk-
|
|
1
|
+
export { FFIDAnnouncementBadge, FFIDAnnouncementList, FFIDInquiryForm, FFIDLoginButton, FFIDOrganizationSwitcher, FFIDSubscriptionBadge, FFIDUserMenu } from '../chunk-P35ULJLM.js';
|
|
@@ -1056,10 +1056,30 @@ interface ContractWizardSubscriptionOptions {
|
|
|
1056
1056
|
|
|
1057
1057
|
/** Redirect and URL generation - redirectToLogin / redirectToAuthorize / redirectToLogout / getLoginUrl / getSignupUrl / getLogoutUrl */
|
|
1058
1058
|
|
|
1059
|
+
/**
|
|
1060
|
+
* `screen_hint=signup` query value for `/oauth/authorize` (#2908 / #2911).
|
|
1061
|
+
* Forwards to Supabase Auth signup screen; only the `'signup'` value is
|
|
1062
|
+
* propagated (no-op when `'login'` or omitted).
|
|
1063
|
+
*/
|
|
1064
|
+
declare const SCREEN_HINT_SIGNUP: "signup";
|
|
1059
1065
|
/** Options for redirectToAuthorize */
|
|
1060
1066
|
interface RedirectToAuthorizeOptions {
|
|
1061
1067
|
/** Target organization ID — triggers org-scoped OAuth re-authorization */
|
|
1062
1068
|
organizationId?: string;
|
|
1069
|
+
/**
|
|
1070
|
+
* Initial Supabase Auth screen hint (#2908 / #2911).
|
|
1071
|
+
*
|
|
1072
|
+
* - `'signup'`: forwards `?screen_hint=signup` so the FFID OAuth flow lands
|
|
1073
|
+
* on the signup screen (used by external services that want to deep-link
|
|
1074
|
+
* new users into the signup CTA).
|
|
1075
|
+
* - `'login'` / `undefined`: no `screen_hint` param is added — the default
|
|
1076
|
+
* login screen is shown.
|
|
1077
|
+
*
|
|
1078
|
+
* In cookie mode, `'signup'` redirects to the FFID `/signup` page instead
|
|
1079
|
+
* of `/login` so the SDK contract (signup-screen intent) stays consistent
|
|
1080
|
+
* regardless of `authMode`.
|
|
1081
|
+
*/
|
|
1082
|
+
screenHint?: typeof SCREEN_HINT_SIGNUP | 'login';
|
|
1063
1083
|
}
|
|
1064
1084
|
|
|
1065
1085
|
/**
|
|
@@ -1107,7 +1127,7 @@ declare function createTokenStore(storageType?: 'localStorage' | 'memory'): Toke
|
|
|
1107
1127
|
declare function createFFIDClient(config: FFIDConfig): {
|
|
1108
1128
|
getSession: () => Promise<FFIDApiResponse<FFIDSessionResponse>>;
|
|
1109
1129
|
signOut: () => Promise<FFIDApiResponse<void>>;
|
|
1110
|
-
redirectToLogin: () => Promise<FFIDRedirectResult>;
|
|
1130
|
+
redirectToLogin: (options?: RedirectToAuthorizeOptions) => Promise<FFIDRedirectResult>;
|
|
1111
1131
|
redirectToAuthorize: (options?: RedirectToAuthorizeOptions) => Promise<FFIDRedirectResult>;
|
|
1112
1132
|
redirectToLogout: (postLogoutRedirectUri?: string) => FFIDRedirectResult;
|
|
1113
1133
|
getLoginUrl: (redirectUrl?: string) => string;
|
|
@@ -1056,10 +1056,30 @@ interface ContractWizardSubscriptionOptions {
|
|
|
1056
1056
|
|
|
1057
1057
|
/** Redirect and URL generation - redirectToLogin / redirectToAuthorize / redirectToLogout / getLoginUrl / getSignupUrl / getLogoutUrl */
|
|
1058
1058
|
|
|
1059
|
+
/**
|
|
1060
|
+
* `screen_hint=signup` query value for `/oauth/authorize` (#2908 / #2911).
|
|
1061
|
+
* Forwards to Supabase Auth signup screen; only the `'signup'` value is
|
|
1062
|
+
* propagated (no-op when `'login'` or omitted).
|
|
1063
|
+
*/
|
|
1064
|
+
declare const SCREEN_HINT_SIGNUP: "signup";
|
|
1059
1065
|
/** Options for redirectToAuthorize */
|
|
1060
1066
|
interface RedirectToAuthorizeOptions {
|
|
1061
1067
|
/** Target organization ID — triggers org-scoped OAuth re-authorization */
|
|
1062
1068
|
organizationId?: string;
|
|
1069
|
+
/**
|
|
1070
|
+
* Initial Supabase Auth screen hint (#2908 / #2911).
|
|
1071
|
+
*
|
|
1072
|
+
* - `'signup'`: forwards `?screen_hint=signup` so the FFID OAuth flow lands
|
|
1073
|
+
* on the signup screen (used by external services that want to deep-link
|
|
1074
|
+
* new users into the signup CTA).
|
|
1075
|
+
* - `'login'` / `undefined`: no `screen_hint` param is added — the default
|
|
1076
|
+
* login screen is shown.
|
|
1077
|
+
*
|
|
1078
|
+
* In cookie mode, `'signup'` redirects to the FFID `/signup` page instead
|
|
1079
|
+
* of `/login` so the SDK contract (signup-screen intent) stays consistent
|
|
1080
|
+
* regardless of `authMode`.
|
|
1081
|
+
*/
|
|
1082
|
+
screenHint?: typeof SCREEN_HINT_SIGNUP | 'login';
|
|
1063
1083
|
}
|
|
1064
1084
|
|
|
1065
1085
|
/**
|
|
@@ -1107,7 +1127,7 @@ declare function createTokenStore(storageType?: 'localStorage' | 'memory'): Toke
|
|
|
1107
1127
|
declare function createFFIDClient(config: FFIDConfig): {
|
|
1108
1128
|
getSession: () => Promise<FFIDApiResponse<FFIDSessionResponse>>;
|
|
1109
1129
|
signOut: () => Promise<FFIDApiResponse<void>>;
|
|
1110
|
-
redirectToLogin: () => Promise<FFIDRedirectResult>;
|
|
1130
|
+
redirectToLogin: (options?: RedirectToAuthorizeOptions) => Promise<FFIDRedirectResult>;
|
|
1111
1131
|
redirectToAuthorize: (options?: RedirectToAuthorizeOptions) => Promise<FFIDRedirectResult>;
|
|
1112
1132
|
redirectToLogout: (postLogoutRedirectUri?: string) => FFIDRedirectResult;
|
|
1113
1133
|
getLoginUrl: (redirectUrl?: string) => string;
|
|
@@ -302,8 +302,17 @@ interface FFIDContextValue {
|
|
|
302
302
|
isAuthenticated: boolean;
|
|
303
303
|
/** Any authentication error */
|
|
304
304
|
error: FFIDError | null;
|
|
305
|
-
/**
|
|
306
|
-
|
|
305
|
+
/**
|
|
306
|
+
* Redirect to FFID login page.
|
|
307
|
+
*
|
|
308
|
+
* @param options.screenHint `'signup'` to deep-link into the signup screen
|
|
309
|
+
* (forwards `screen_hint=signup` in token mode / redirects to `/signup`
|
|
310
|
+
* in cookie mode). `'login'` and `undefined` use the default login flow.
|
|
311
|
+
* See `RedirectToAuthorizeOptions` (#2908 / #2911).
|
|
312
|
+
*/
|
|
313
|
+
login: (options?: {
|
|
314
|
+
screenHint?: 'signup' | 'login';
|
|
315
|
+
}) => void;
|
|
307
316
|
/** Sign out and clear session */
|
|
308
317
|
logout: () => Promise<void>;
|
|
309
318
|
/**
|
|
@@ -1194,13 +1203,24 @@ declare function FFIDAnnouncementList({ announcements, isLoading, className, cla
|
|
|
1194
1203
|
* The single source of truth for consumers is `FFIDInquiryForm.tsx`.
|
|
1195
1204
|
*/
|
|
1196
1205
|
|
|
1197
|
-
/**
|
|
1198
|
-
|
|
1206
|
+
/** Legal agreement layout rendered by the inquiry form. */
|
|
1207
|
+
type FFIDInquiryFormLegalLayout = 'combined' | 'separate';
|
|
1208
|
+
/** Category option rendered as a top-level `<option>`. */
|
|
1209
|
+
interface FFIDInquiryFormFlatCategoryItem {
|
|
1210
|
+
kind: 'flat';
|
|
1199
1211
|
value: string;
|
|
1200
1212
|
label: string;
|
|
1201
|
-
group?: string;
|
|
1202
|
-
groupLabel?: string;
|
|
1203
1213
|
}
|
|
1214
|
+
/** Category option rendered inside an `<optgroup>`. */
|
|
1215
|
+
interface FFIDInquiryFormGroupedCategoryItem {
|
|
1216
|
+
kind: 'grouped';
|
|
1217
|
+
value: string;
|
|
1218
|
+
label: string;
|
|
1219
|
+
group: string;
|
|
1220
|
+
groupLabel: string;
|
|
1221
|
+
}
|
|
1222
|
+
/** Category option rendered in the form select. */
|
|
1223
|
+
type FFIDInquiryFormCategoryItem = FFIDInquiryFormFlatCategoryItem | FFIDInquiryFormGroupedCategoryItem;
|
|
1204
1224
|
/**
|
|
1205
1225
|
* Per-slot `className` overrides. Every key is optional; when omitted,
|
|
1206
1226
|
* the slot falls back to SDK defaults. Intended to be combined with
|
|
@@ -1365,11 +1385,11 @@ interface FFIDInquiryFormProps {
|
|
|
1365
1385
|
*/
|
|
1366
1386
|
onChange?: (data: FFIDInquiryFormSubmitData) => void;
|
|
1367
1387
|
/**
|
|
1368
|
-
*
|
|
1369
|
-
*
|
|
1370
|
-
* single-checkbox behavior from SDK ≤
|
|
1388
|
+
* Controls whether legal agreement is rendered as one combined checkbox
|
|
1389
|
+
* or two independent terms / privacy checkboxes. Defaults to `combined`,
|
|
1390
|
+
* preserving the single-checkbox behavior from SDK ≤ 3.x.
|
|
1371
1391
|
*/
|
|
1372
|
-
|
|
1392
|
+
legalLayout?: FFIDInquiryFormLegalLayout;
|
|
1373
1393
|
/**
|
|
1374
1394
|
* Overrides the `<textarea>` placeholder. A plain string is applied
|
|
1375
1395
|
* verbatim; a function is called with the currently selected category
|
|
@@ -1420,6 +1440,6 @@ interface FFIDInquiryFormProps {
|
|
|
1420
1440
|
interface FFIDInquiryFormPlaceholderContext {
|
|
1421
1441
|
category: string | null;
|
|
1422
1442
|
}
|
|
1423
|
-
declare function FFIDInquiryForm({ mode, prefill, organizations, preselectedOrganizationId, categories, termsVersion, privacyVersion, termsHref, privacyHref, turnstileToken, turnstileSlot, onSubmit, onChange,
|
|
1443
|
+
declare function FFIDInquiryForm({ mode, prefill, organizations, preselectedOrganizationId, categories, termsVersion, privacyVersion, termsHref, privacyHref, turnstileToken, turnstileSlot, onSubmit, onChange, legalLayout, messagePlaceholder, requireCategorySelection, unstyled, classNames, locale, className, }: FFIDInquiryFormProps): react_jsx_runtime.JSX.Element;
|
|
1424
1444
|
|
|
1425
|
-
export { type
|
|
1445
|
+
export { type FFIDInquiryFormPlaceholderContext as $, type FFIDOrganization as A, type FFIDSubscription as B, type FFIDSubscriptionContextValue as C, type FFIDAnnouncementsClientConfig as D, type EffectiveSubscriptionStatus as E, type FFIDSubscriptionStatus as F, type FFIDAnnouncementsApiResponse as G, type AnnouncementListResponse as H, type FFIDAnnouncementsLogger as I, type Announcement as J, type AnnouncementStatus as K, type ListAnnouncementsOptions as L, type AnnouncementType as M, FFIDAnnouncementBadge as N, FFIDAnnouncementList as O, type FFIDAnnouncementsError as P, type FFIDAnnouncementsErrorCode as Q, type FFIDAnnouncementsServerResponse as R, type FFIDCacheConfig as S, type FFIDContextValue as T, type FFIDInquiryCategory as U, type FFIDInquiryCategorySite2026 as V, FFIDInquiryForm as W, type FFIDInquiryFormCategoryItem as X, type FFIDInquiryFormClassNames as Y, type FFIDInquiryFormLegalLayout as Z, type FFIDInquiryFormOrganization as _, type FFIDConfig as a, type FFIDInquiryFormPrefill as a0, type FFIDInquiryFormProps as a1, type FFIDInquiryFormSubmitData as a2, type FFIDInquiryFormSubmitResult as a3, type FFIDJwtClaims as a4, FFIDLoginButton as a5, type FFIDMemberStatus as a6, type FFIDOAuthTokenResponse as a7, type FFIDOAuthUserInfoMemberRole as a8, type FFIDOAuthUserInfoSubscription as a9, type FFIDOrganizationMember as aa, FFIDOrganizationSwitcher as ab, type FFIDRedirectErrorCode as ac, type FFIDSeatModel as ad, FFIDSubscriptionBadge as ae, type FFIDTokenIntrospectionResponse as af, FFIDUserMenu as ag, FFID_INQUIRY_CATEGORIES as ah, FFID_INQUIRY_CATEGORIES_SITE_2026 as ai, type UseFFIDAnnouncementsOptions as aj, type UseFFIDAnnouncementsReturn as ak, isFFIDInquiryCategorySite2026 as al, useFFIDAnnouncements as am, type FFIDAnnouncementBadgeClassNames as an, type FFIDAnnouncementBadgeProps as ao, type FFIDAnnouncementListClassNames as ap, type FFIDAnnouncementListProps as aq, type FFIDLoginButtonProps as ar, type FFIDOrganizationSwitcherClassNames as as, type FFIDOrganizationSwitcherProps as at, type FFIDSubscriptionBadgeClassNames as au, type FFIDSubscriptionBadgeProps as av, type FFIDUserMenuClassNames as aw, type FFIDUserMenuProps as ax, type FFIDApiResponse as b, type FFIDSessionResponse as c, type FFIDRedirectResult as d, type FFIDError as e, type FFIDSubscriptionCheckResponse as f, type FFIDListMembersResponse as g, type FFIDMemberRole as h, type FFIDUpdateMemberRoleResponse as i, type FFIDRemoveMemberResponse as j, type FFIDProfileCallOptions as k, type FFIDUserProfile as l, type FFIDUpdateUserProfileRequest as m, type FFIDAnalyticsConfig as n, type FFIDCreateCheckoutParams as o, type FFIDCheckoutSessionResponse as p, type FFIDCreatePortalParams as q, type FFIDPortalSessionResponse as r, type FFIDVerifyAccessTokenOptions as s, type FFIDOAuthUserInfo as t, type FFIDInquiryCreateParams as u, type FFIDInquiryCreateResponse as v, type FFIDAuthMode as w, type FFIDLogger as x, type FFIDCacheAdapter as y, type FFIDUser as z };
|
|
@@ -302,8 +302,17 @@ interface FFIDContextValue {
|
|
|
302
302
|
isAuthenticated: boolean;
|
|
303
303
|
/** Any authentication error */
|
|
304
304
|
error: FFIDError | null;
|
|
305
|
-
/**
|
|
306
|
-
|
|
305
|
+
/**
|
|
306
|
+
* Redirect to FFID login page.
|
|
307
|
+
*
|
|
308
|
+
* @param options.screenHint `'signup'` to deep-link into the signup screen
|
|
309
|
+
* (forwards `screen_hint=signup` in token mode / redirects to `/signup`
|
|
310
|
+
* in cookie mode). `'login'` and `undefined` use the default login flow.
|
|
311
|
+
* See `RedirectToAuthorizeOptions` (#2908 / #2911).
|
|
312
|
+
*/
|
|
313
|
+
login: (options?: {
|
|
314
|
+
screenHint?: 'signup' | 'login';
|
|
315
|
+
}) => void;
|
|
307
316
|
/** Sign out and clear session */
|
|
308
317
|
logout: () => Promise<void>;
|
|
309
318
|
/**
|
|
@@ -1194,13 +1203,24 @@ declare function FFIDAnnouncementList({ announcements, isLoading, className, cla
|
|
|
1194
1203
|
* The single source of truth for consumers is `FFIDInquiryForm.tsx`.
|
|
1195
1204
|
*/
|
|
1196
1205
|
|
|
1197
|
-
/**
|
|
1198
|
-
|
|
1206
|
+
/** Legal agreement layout rendered by the inquiry form. */
|
|
1207
|
+
type FFIDInquiryFormLegalLayout = 'combined' | 'separate';
|
|
1208
|
+
/** Category option rendered as a top-level `<option>`. */
|
|
1209
|
+
interface FFIDInquiryFormFlatCategoryItem {
|
|
1210
|
+
kind: 'flat';
|
|
1199
1211
|
value: string;
|
|
1200
1212
|
label: string;
|
|
1201
|
-
group?: string;
|
|
1202
|
-
groupLabel?: string;
|
|
1203
1213
|
}
|
|
1214
|
+
/** Category option rendered inside an `<optgroup>`. */
|
|
1215
|
+
interface FFIDInquiryFormGroupedCategoryItem {
|
|
1216
|
+
kind: 'grouped';
|
|
1217
|
+
value: string;
|
|
1218
|
+
label: string;
|
|
1219
|
+
group: string;
|
|
1220
|
+
groupLabel: string;
|
|
1221
|
+
}
|
|
1222
|
+
/** Category option rendered in the form select. */
|
|
1223
|
+
type FFIDInquiryFormCategoryItem = FFIDInquiryFormFlatCategoryItem | FFIDInquiryFormGroupedCategoryItem;
|
|
1204
1224
|
/**
|
|
1205
1225
|
* Per-slot `className` overrides. Every key is optional; when omitted,
|
|
1206
1226
|
* the slot falls back to SDK defaults. Intended to be combined with
|
|
@@ -1365,11 +1385,11 @@ interface FFIDInquiryFormProps {
|
|
|
1365
1385
|
*/
|
|
1366
1386
|
onChange?: (data: FFIDInquiryFormSubmitData) => void;
|
|
1367
1387
|
/**
|
|
1368
|
-
*
|
|
1369
|
-
*
|
|
1370
|
-
* single-checkbox behavior from SDK ≤
|
|
1388
|
+
* Controls whether legal agreement is rendered as one combined checkbox
|
|
1389
|
+
* or two independent terms / privacy checkboxes. Defaults to `combined`,
|
|
1390
|
+
* preserving the single-checkbox behavior from SDK ≤ 3.x.
|
|
1371
1391
|
*/
|
|
1372
|
-
|
|
1392
|
+
legalLayout?: FFIDInquiryFormLegalLayout;
|
|
1373
1393
|
/**
|
|
1374
1394
|
* Overrides the `<textarea>` placeholder. A plain string is applied
|
|
1375
1395
|
* verbatim; a function is called with the currently selected category
|
|
@@ -1420,6 +1440,6 @@ interface FFIDInquiryFormProps {
|
|
|
1420
1440
|
interface FFIDInquiryFormPlaceholderContext {
|
|
1421
1441
|
category: string | null;
|
|
1422
1442
|
}
|
|
1423
|
-
declare function FFIDInquiryForm({ mode, prefill, organizations, preselectedOrganizationId, categories, termsVersion, privacyVersion, termsHref, privacyHref, turnstileToken, turnstileSlot, onSubmit, onChange,
|
|
1443
|
+
declare function FFIDInquiryForm({ mode, prefill, organizations, preselectedOrganizationId, categories, termsVersion, privacyVersion, termsHref, privacyHref, turnstileToken, turnstileSlot, onSubmit, onChange, legalLayout, messagePlaceholder, requireCategorySelection, unstyled, classNames, locale, className, }: FFIDInquiryFormProps): react_jsx_runtime.JSX.Element;
|
|
1424
1444
|
|
|
1425
|
-
export { type
|
|
1445
|
+
export { type FFIDInquiryFormPlaceholderContext as $, type FFIDOrganization as A, type FFIDSubscription as B, type FFIDSubscriptionContextValue as C, type FFIDAnnouncementsClientConfig as D, type EffectiveSubscriptionStatus as E, type FFIDSubscriptionStatus as F, type FFIDAnnouncementsApiResponse as G, type AnnouncementListResponse as H, type FFIDAnnouncementsLogger as I, type Announcement as J, type AnnouncementStatus as K, type ListAnnouncementsOptions as L, type AnnouncementType as M, FFIDAnnouncementBadge as N, FFIDAnnouncementList as O, type FFIDAnnouncementsError as P, type FFIDAnnouncementsErrorCode as Q, type FFIDAnnouncementsServerResponse as R, type FFIDCacheConfig as S, type FFIDContextValue as T, type FFIDInquiryCategory as U, type FFIDInquiryCategorySite2026 as V, FFIDInquiryForm as W, type FFIDInquiryFormCategoryItem as X, type FFIDInquiryFormClassNames as Y, type FFIDInquiryFormLegalLayout as Z, type FFIDInquiryFormOrganization as _, type FFIDConfig as a, type FFIDInquiryFormPrefill as a0, type FFIDInquiryFormProps as a1, type FFIDInquiryFormSubmitData as a2, type FFIDInquiryFormSubmitResult as a3, type FFIDJwtClaims as a4, FFIDLoginButton as a5, type FFIDMemberStatus as a6, type FFIDOAuthTokenResponse as a7, type FFIDOAuthUserInfoMemberRole as a8, type FFIDOAuthUserInfoSubscription as a9, type FFIDOrganizationMember as aa, FFIDOrganizationSwitcher as ab, type FFIDRedirectErrorCode as ac, type FFIDSeatModel as ad, FFIDSubscriptionBadge as ae, type FFIDTokenIntrospectionResponse as af, FFIDUserMenu as ag, FFID_INQUIRY_CATEGORIES as ah, FFID_INQUIRY_CATEGORIES_SITE_2026 as ai, type UseFFIDAnnouncementsOptions as aj, type UseFFIDAnnouncementsReturn as ak, isFFIDInquiryCategorySite2026 as al, useFFIDAnnouncements as am, type FFIDAnnouncementBadgeClassNames as an, type FFIDAnnouncementBadgeProps as ao, type FFIDAnnouncementListClassNames as ap, type FFIDAnnouncementListProps as aq, type FFIDLoginButtonProps as ar, type FFIDOrganizationSwitcherClassNames as as, type FFIDOrganizationSwitcherProps as at, type FFIDSubscriptionBadgeClassNames as au, type FFIDSubscriptionBadgeProps as av, type FFIDUserMenuClassNames as aw, type FFIDUserMenuProps as ax, type FFIDApiResponse as b, type FFIDSessionResponse as c, type FFIDRedirectResult as d, type FFIDError as e, type FFIDSubscriptionCheckResponse as f, type FFIDListMembersResponse as g, type FFIDMemberRole as h, type FFIDUpdateMemberRoleResponse as i, type FFIDRemoveMemberResponse as j, type FFIDProfileCallOptions as k, type FFIDUserProfile as l, type FFIDUpdateUserProfileRequest as m, type FFIDAnalyticsConfig as n, type FFIDCreateCheckoutParams as o, type FFIDCheckoutSessionResponse as p, type FFIDCreatePortalParams as q, type FFIDPortalSessionResponse as r, type FFIDVerifyAccessTokenOptions as s, type FFIDOAuthUserInfo as t, type FFIDInquiryCreateParams as u, type FFIDInquiryCreateResponse as v, type FFIDAuthMode as w, type FFIDLogger as x, type FFIDCacheAdapter as y, type FFIDUser as z };
|
package/dist/index.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkXQL4YSTL_cjs = require('./chunk-XQL4YSTL.cjs');
|
|
4
4
|
var react = require('react');
|
|
5
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
6
|
|
|
@@ -53,8 +53,8 @@ function defaultRedirect(url) {
|
|
|
53
53
|
}
|
|
54
54
|
function useRequireActiveSubscription(options) {
|
|
55
55
|
const { redirectTo, allowGrace = true, onRedirect } = options;
|
|
56
|
-
const { isLoading, error } =
|
|
57
|
-
const { effectiveStatus, isBlocked, isGrace } =
|
|
56
|
+
const { isLoading, error } = chunkXQL4YSTL_cjs.useFFIDContext();
|
|
57
|
+
const { effectiveStatus, isBlocked, isGrace } = chunkXQL4YSTL_cjs.useSubscription();
|
|
58
58
|
const hasFetchError = error !== null && effectiveStatus === null;
|
|
59
59
|
const shouldRedirect = !isLoading && !hasFetchError && (isBlocked || !allowGrace && isGrace || effectiveStatus === null);
|
|
60
60
|
react.useEffect(() => {
|
|
@@ -75,7 +75,7 @@ function useRequireActiveSubscription(options) {
|
|
|
75
75
|
}
|
|
76
76
|
function withFFIDAuth(Component, options = {}) {
|
|
77
77
|
const WrappedComponent = (props) => {
|
|
78
|
-
const { isLoading, isAuthenticated, login } =
|
|
78
|
+
const { isLoading, isAuthenticated, login } = chunkXQL4YSTL_cjs.useFFIDContext();
|
|
79
79
|
const hasRedirected = react.useRef(false);
|
|
80
80
|
react.useEffect(() => {
|
|
81
81
|
if (!isLoading && !isAuthenticated && options.redirectToLogin && !hasRedirected.current) {
|
|
@@ -104,115 +104,115 @@ var FFID_NEWSLETTER_DISPATCH_MAX_RECIPIENTS = 1e3;
|
|
|
104
104
|
|
|
105
105
|
Object.defineProperty(exports, "DEFAULT_API_BASE_URL", {
|
|
106
106
|
enumerable: true,
|
|
107
|
-
get: function () { return
|
|
107
|
+
get: function () { return chunkXQL4YSTL_cjs.DEFAULT_API_BASE_URL; }
|
|
108
108
|
});
|
|
109
109
|
Object.defineProperty(exports, "DEFAULT_OAUTH_SCOPES", {
|
|
110
110
|
enumerable: true,
|
|
111
|
-
get: function () { return
|
|
111
|
+
get: function () { return chunkXQL4YSTL_cjs.DEFAULT_OAUTH_SCOPES; }
|
|
112
112
|
});
|
|
113
113
|
Object.defineProperty(exports, "FFIDAnnouncementBadge", {
|
|
114
114
|
enumerable: true,
|
|
115
|
-
get: function () { return
|
|
115
|
+
get: function () { return chunkXQL4YSTL_cjs.FFIDAnnouncementBadge; }
|
|
116
116
|
});
|
|
117
117
|
Object.defineProperty(exports, "FFIDAnnouncementList", {
|
|
118
118
|
enumerable: true,
|
|
119
|
-
get: function () { return
|
|
119
|
+
get: function () { return chunkXQL4YSTL_cjs.FFIDAnnouncementList; }
|
|
120
120
|
});
|
|
121
121
|
Object.defineProperty(exports, "FFIDInquiryForm", {
|
|
122
122
|
enumerable: true,
|
|
123
|
-
get: function () { return
|
|
123
|
+
get: function () { return chunkXQL4YSTL_cjs.FFIDInquiryForm; }
|
|
124
124
|
});
|
|
125
125
|
Object.defineProperty(exports, "FFIDLoginButton", {
|
|
126
126
|
enumerable: true,
|
|
127
|
-
get: function () { return
|
|
127
|
+
get: function () { return chunkXQL4YSTL_cjs.FFIDLoginButton; }
|
|
128
128
|
});
|
|
129
129
|
Object.defineProperty(exports, "FFIDOrganizationSwitcher", {
|
|
130
130
|
enumerable: true,
|
|
131
|
-
get: function () { return
|
|
131
|
+
get: function () { return chunkXQL4YSTL_cjs.FFIDOrganizationSwitcher; }
|
|
132
132
|
});
|
|
133
133
|
Object.defineProperty(exports, "FFIDProvider", {
|
|
134
134
|
enumerable: true,
|
|
135
|
-
get: function () { return
|
|
135
|
+
get: function () { return chunkXQL4YSTL_cjs.FFIDProvider; }
|
|
136
136
|
});
|
|
137
137
|
Object.defineProperty(exports, "FFIDSDKError", {
|
|
138
138
|
enumerable: true,
|
|
139
|
-
get: function () { return
|
|
139
|
+
get: function () { return chunkXQL4YSTL_cjs.FFIDSDKError; }
|
|
140
140
|
});
|
|
141
141
|
Object.defineProperty(exports, "FFIDSubscriptionBadge", {
|
|
142
142
|
enumerable: true,
|
|
143
|
-
get: function () { return
|
|
143
|
+
get: function () { return chunkXQL4YSTL_cjs.FFIDSubscriptionBadge; }
|
|
144
144
|
});
|
|
145
145
|
Object.defineProperty(exports, "FFIDUserMenu", {
|
|
146
146
|
enumerable: true,
|
|
147
|
-
get: function () { return
|
|
147
|
+
get: function () { return chunkXQL4YSTL_cjs.FFIDUserMenu; }
|
|
148
148
|
});
|
|
149
149
|
Object.defineProperty(exports, "FFID_ANNOUNCEMENTS_ERROR_CODES", {
|
|
150
150
|
enumerable: true,
|
|
151
|
-
get: function () { return
|
|
151
|
+
get: function () { return chunkXQL4YSTL_cjs.FFID_ANNOUNCEMENTS_ERROR_CODES; }
|
|
152
152
|
});
|
|
153
153
|
Object.defineProperty(exports, "FFID_INQUIRY_CATEGORIES", {
|
|
154
154
|
enumerable: true,
|
|
155
|
-
get: function () { return
|
|
155
|
+
get: function () { return chunkXQL4YSTL_cjs.FFID_INQUIRY_CATEGORIES; }
|
|
156
156
|
});
|
|
157
157
|
Object.defineProperty(exports, "FFID_INQUIRY_CATEGORIES_SITE_2026", {
|
|
158
158
|
enumerable: true,
|
|
159
|
-
get: function () { return
|
|
159
|
+
get: function () { return chunkXQL4YSTL_cjs.FFID_INQUIRY_CATEGORIES_SITE_2026; }
|
|
160
160
|
});
|
|
161
161
|
Object.defineProperty(exports, "computeEffectiveStatusFromSession", {
|
|
162
162
|
enumerable: true,
|
|
163
|
-
get: function () { return
|
|
163
|
+
get: function () { return chunkXQL4YSTL_cjs.computeEffectiveStatusFromSession; }
|
|
164
164
|
});
|
|
165
165
|
Object.defineProperty(exports, "createFFIDAnnouncementsClient", {
|
|
166
166
|
enumerable: true,
|
|
167
|
-
get: function () { return
|
|
167
|
+
get: function () { return chunkXQL4YSTL_cjs.createFFIDAnnouncementsClient; }
|
|
168
168
|
});
|
|
169
169
|
Object.defineProperty(exports, "createFFIDClient", {
|
|
170
170
|
enumerable: true,
|
|
171
|
-
get: function () { return
|
|
171
|
+
get: function () { return chunkXQL4YSTL_cjs.createFFIDClient; }
|
|
172
172
|
});
|
|
173
173
|
Object.defineProperty(exports, "createTokenStore", {
|
|
174
174
|
enumerable: true,
|
|
175
|
-
get: function () { return
|
|
175
|
+
get: function () { return chunkXQL4YSTL_cjs.createTokenStore; }
|
|
176
176
|
});
|
|
177
177
|
Object.defineProperty(exports, "generateCodeChallenge", {
|
|
178
178
|
enumerable: true,
|
|
179
|
-
get: function () { return
|
|
179
|
+
get: function () { return chunkXQL4YSTL_cjs.generateCodeChallenge; }
|
|
180
180
|
});
|
|
181
181
|
Object.defineProperty(exports, "generateCodeVerifier", {
|
|
182
182
|
enumerable: true,
|
|
183
|
-
get: function () { return
|
|
183
|
+
get: function () { return chunkXQL4YSTL_cjs.generateCodeVerifier; }
|
|
184
184
|
});
|
|
185
185
|
Object.defineProperty(exports, "isFFIDInquiryCategorySite2026", {
|
|
186
186
|
enumerable: true,
|
|
187
|
-
get: function () { return
|
|
187
|
+
get: function () { return chunkXQL4YSTL_cjs.isFFIDInquiryCategorySite2026; }
|
|
188
188
|
});
|
|
189
189
|
Object.defineProperty(exports, "normalizeRedirectUri", {
|
|
190
190
|
enumerable: true,
|
|
191
|
-
get: function () { return
|
|
191
|
+
get: function () { return chunkXQL4YSTL_cjs.normalizeRedirectUri; }
|
|
192
192
|
});
|
|
193
193
|
Object.defineProperty(exports, "retrieveCodeVerifier", {
|
|
194
194
|
enumerable: true,
|
|
195
|
-
get: function () { return
|
|
195
|
+
get: function () { return chunkXQL4YSTL_cjs.retrieveCodeVerifier; }
|
|
196
196
|
});
|
|
197
197
|
Object.defineProperty(exports, "storeCodeVerifier", {
|
|
198
198
|
enumerable: true,
|
|
199
|
-
get: function () { return
|
|
199
|
+
get: function () { return chunkXQL4YSTL_cjs.storeCodeVerifier; }
|
|
200
200
|
});
|
|
201
201
|
Object.defineProperty(exports, "useFFID", {
|
|
202
202
|
enumerable: true,
|
|
203
|
-
get: function () { return
|
|
203
|
+
get: function () { return chunkXQL4YSTL_cjs.useFFID; }
|
|
204
204
|
});
|
|
205
205
|
Object.defineProperty(exports, "useFFIDAnnouncements", {
|
|
206
206
|
enumerable: true,
|
|
207
|
-
get: function () { return
|
|
207
|
+
get: function () { return chunkXQL4YSTL_cjs.useFFIDAnnouncements; }
|
|
208
208
|
});
|
|
209
209
|
Object.defineProperty(exports, "useSubscription", {
|
|
210
210
|
enumerable: true,
|
|
211
|
-
get: function () { return
|
|
211
|
+
get: function () { return chunkXQL4YSTL_cjs.useSubscription; }
|
|
212
212
|
});
|
|
213
213
|
Object.defineProperty(exports, "withSubscription", {
|
|
214
214
|
enumerable: true,
|
|
215
|
-
get: function () { return
|
|
215
|
+
get: function () { return chunkXQL4YSTL_cjs.withSubscription; }
|
|
216
216
|
});
|
|
217
217
|
exports.FFID_NEWSLETTER_DISPATCH_MAX_RECIPIENTS = FFID_NEWSLETTER_DISPATCH_MAX_RECIPIENTS;
|
|
218
218
|
exports.FFID_NEWSLETTER_TYPES = FFID_NEWSLETTER_TYPES;
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { F as FFIDSubscriptionStatus, a as FFIDConfig, b as FFIDApiResponse, c as FFIDSessionResponse, d as FFIDRedirectResult, e as FFIDError, f as FFIDSubscriptionCheckResponse, g as FFIDListMembersResponse, h as FFIDMemberRole, i as FFIDUpdateMemberRoleResponse, j as FFIDRemoveMemberResponse, k as FFIDProfileCallOptions, l as FFIDUserProfile, m as FFIDUpdateUserProfileRequest, n as FFIDAnalyticsConfig, o as FFIDCreateCheckoutParams, p as FFIDCheckoutSessionResponse, q as FFIDCreatePortalParams, r as FFIDPortalSessionResponse, s as FFIDVerifyAccessTokenOptions, t as FFIDOAuthUserInfo, u as FFIDInquiryCreateParams, v as FFIDInquiryCreateResponse, w as FFIDAuthMode, x as FFIDLogger, y as FFIDCacheAdapter, z as FFIDUser, A as FFIDOrganization, B as FFIDSubscription, C as FFIDSubscriptionContextValue, E as EffectiveSubscriptionStatus, D as FFIDAnnouncementsClientConfig, L as ListAnnouncementsOptions, G as FFIDAnnouncementsApiResponse, H as AnnouncementListResponse, I as FFIDAnnouncementsLogger } from './index-
|
|
2
|
-
export { J as Announcement, K as AnnouncementStatus, M as AnnouncementType, N as FFIDAnnouncementBadge, O as FFIDAnnouncementList, P as FFIDAnnouncementsError, Q as FFIDAnnouncementsErrorCode, R as FFIDAnnouncementsServerResponse, S as FFIDCacheConfig, T as FFIDContextValue, U as FFIDInquiryCategory, V as FFIDInquiryCategorySite2026, W as FFIDInquiryForm, X as FFIDInquiryFormCategoryItem, Y as FFIDInquiryFormClassNames, Z as
|
|
1
|
+
import { F as FFIDSubscriptionStatus, a as FFIDConfig, b as FFIDApiResponse, c as FFIDSessionResponse, d as FFIDRedirectResult, e as FFIDError, f as FFIDSubscriptionCheckResponse, g as FFIDListMembersResponse, h as FFIDMemberRole, i as FFIDUpdateMemberRoleResponse, j as FFIDRemoveMemberResponse, k as FFIDProfileCallOptions, l as FFIDUserProfile, m as FFIDUpdateUserProfileRequest, n as FFIDAnalyticsConfig, o as FFIDCreateCheckoutParams, p as FFIDCheckoutSessionResponse, q as FFIDCreatePortalParams, r as FFIDPortalSessionResponse, s as FFIDVerifyAccessTokenOptions, t as FFIDOAuthUserInfo, u as FFIDInquiryCreateParams, v as FFIDInquiryCreateResponse, w as FFIDAuthMode, x as FFIDLogger, y as FFIDCacheAdapter, z as FFIDUser, A as FFIDOrganization, B as FFIDSubscription, C as FFIDSubscriptionContextValue, E as EffectiveSubscriptionStatus, D as FFIDAnnouncementsClientConfig, L as ListAnnouncementsOptions, G as FFIDAnnouncementsApiResponse, H as AnnouncementListResponse, I as FFIDAnnouncementsLogger } from './index-Cn8-3hgb.cjs';
|
|
2
|
+
export { J as Announcement, K as AnnouncementStatus, M as AnnouncementType, N as FFIDAnnouncementBadge, O as FFIDAnnouncementList, P as FFIDAnnouncementsError, Q as FFIDAnnouncementsErrorCode, R as FFIDAnnouncementsServerResponse, S as FFIDCacheConfig, T as FFIDContextValue, U as FFIDInquiryCategory, V as FFIDInquiryCategorySite2026, W as FFIDInquiryForm, X as FFIDInquiryFormCategoryItem, Y as FFIDInquiryFormClassNames, Z as FFIDInquiryFormLegalLayout, _ as FFIDInquiryFormOrganization, $ as FFIDInquiryFormPlaceholderContext, a0 as FFIDInquiryFormPrefill, a1 as FFIDInquiryFormProps, a2 as FFIDInquiryFormSubmitData, a3 as FFIDInquiryFormSubmitResult, a4 as FFIDJwtClaims, a5 as FFIDLoginButton, a6 as FFIDMemberStatus, a7 as FFIDOAuthTokenResponse, a8 as FFIDOAuthUserInfoMemberRole, a9 as FFIDOAuthUserInfoSubscription, aa as FFIDOrganizationMember, ab as FFIDOrganizationSwitcher, ac as FFIDRedirectErrorCode, ad as FFIDSeatModel, ae as FFIDSubscriptionBadge, af as FFIDTokenIntrospectionResponse, ag as FFIDUserMenu, ah as FFID_INQUIRY_CATEGORIES, ai as FFID_INQUIRY_CATEGORIES_SITE_2026, aj as UseFFIDAnnouncementsOptions, ak as UseFFIDAnnouncementsReturn, al as isFFIDInquiryCategorySite2026, am as useFFIDAnnouncements } from './index-Cn8-3hgb.cjs';
|
|
3
3
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
4
4
|
import { ReactNode, ComponentType, FC } from 'react';
|
|
5
5
|
|
|
@@ -493,17 +493,37 @@ interface ContractWizardSubscriptionOptions {
|
|
|
493
493
|
|
|
494
494
|
/** Redirect and URL generation - redirectToLogin / redirectToAuthorize / redirectToLogout / getLoginUrl / getSignupUrl / getLogoutUrl */
|
|
495
495
|
|
|
496
|
+
/**
|
|
497
|
+
* `screen_hint=signup` query value for `/oauth/authorize` (#2908 / #2911).
|
|
498
|
+
* Forwards to Supabase Auth signup screen; only the `'signup'` value is
|
|
499
|
+
* propagated (no-op when `'login'` or omitted).
|
|
500
|
+
*/
|
|
501
|
+
declare const SCREEN_HINT_SIGNUP: "signup";
|
|
496
502
|
/** Options for redirectToAuthorize */
|
|
497
503
|
interface RedirectToAuthorizeOptions {
|
|
498
504
|
/** Target organization ID — triggers org-scoped OAuth re-authorization */
|
|
499
505
|
organizationId?: string;
|
|
506
|
+
/**
|
|
507
|
+
* Initial Supabase Auth screen hint (#2908 / #2911).
|
|
508
|
+
*
|
|
509
|
+
* - `'signup'`: forwards `?screen_hint=signup` so the FFID OAuth flow lands
|
|
510
|
+
* on the signup screen (used by external services that want to deep-link
|
|
511
|
+
* new users into the signup CTA).
|
|
512
|
+
* - `'login'` / `undefined`: no `screen_hint` param is added — the default
|
|
513
|
+
* login screen is shown.
|
|
514
|
+
*
|
|
515
|
+
* In cookie mode, `'signup'` redirects to the FFID `/signup` page instead
|
|
516
|
+
* of `/login` so the SDK contract (signup-screen intent) stays consistent
|
|
517
|
+
* regardless of `authMode`.
|
|
518
|
+
*/
|
|
519
|
+
screenHint?: typeof SCREEN_HINT_SIGNUP | 'login';
|
|
500
520
|
}
|
|
501
521
|
|
|
502
522
|
/** Creates an FFID API client instance */
|
|
503
523
|
declare function createFFIDClient(config: FFIDConfig): {
|
|
504
524
|
getSession: () => Promise<FFIDApiResponse<FFIDSessionResponse>>;
|
|
505
525
|
signOut: () => Promise<FFIDApiResponse<void>>;
|
|
506
|
-
redirectToLogin: () => Promise<FFIDRedirectResult>;
|
|
526
|
+
redirectToLogin: (options?: RedirectToAuthorizeOptions) => Promise<FFIDRedirectResult>;
|
|
507
527
|
redirectToAuthorize: (options?: RedirectToAuthorizeOptions) => Promise<FFIDRedirectResult>;
|
|
508
528
|
redirectToLogout: (postLogoutRedirectUri?: string) => FFIDRedirectResult;
|
|
509
529
|
getLoginUrl: (redirectUrl?: string) => string;
|
|
@@ -679,8 +699,17 @@ interface UseFFIDReturn {
|
|
|
679
699
|
isAuthenticated: boolean;
|
|
680
700
|
/** Any authentication error that occurred */
|
|
681
701
|
error: FFIDError | null;
|
|
682
|
-
/**
|
|
683
|
-
|
|
702
|
+
/**
|
|
703
|
+
* Redirect to login page.
|
|
704
|
+
*
|
|
705
|
+
* @param options.screenHint `'signup'` to deep-link into the signup screen
|
|
706
|
+
* (forwards `screen_hint=signup` in token mode / redirects to `/signup`
|
|
707
|
+
* in cookie mode). `'login'` and `undefined` use the default login flow.
|
|
708
|
+
* See `RedirectToAuthorizeOptions` (#2908 / #2911).
|
|
709
|
+
*/
|
|
710
|
+
login: (options?: {
|
|
711
|
+
screenHint?: 'signup' | 'login';
|
|
712
|
+
}) => void;
|
|
684
713
|
/** Sign out */
|
|
685
714
|
logout: () => Promise<void>;
|
|
686
715
|
/**
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { F as FFIDSubscriptionStatus, a as FFIDConfig, b as FFIDApiResponse, c as FFIDSessionResponse, d as FFIDRedirectResult, e as FFIDError, f as FFIDSubscriptionCheckResponse, g as FFIDListMembersResponse, h as FFIDMemberRole, i as FFIDUpdateMemberRoleResponse, j as FFIDRemoveMemberResponse, k as FFIDProfileCallOptions, l as FFIDUserProfile, m as FFIDUpdateUserProfileRequest, n as FFIDAnalyticsConfig, o as FFIDCreateCheckoutParams, p as FFIDCheckoutSessionResponse, q as FFIDCreatePortalParams, r as FFIDPortalSessionResponse, s as FFIDVerifyAccessTokenOptions, t as FFIDOAuthUserInfo, u as FFIDInquiryCreateParams, v as FFIDInquiryCreateResponse, w as FFIDAuthMode, x as FFIDLogger, y as FFIDCacheAdapter, z as FFIDUser, A as FFIDOrganization, B as FFIDSubscription, C as FFIDSubscriptionContextValue, E as EffectiveSubscriptionStatus, D as FFIDAnnouncementsClientConfig, L as ListAnnouncementsOptions, G as FFIDAnnouncementsApiResponse, H as AnnouncementListResponse, I as FFIDAnnouncementsLogger } from './index-
|
|
2
|
-
export { J as Announcement, K as AnnouncementStatus, M as AnnouncementType, N as FFIDAnnouncementBadge, O as FFIDAnnouncementList, P as FFIDAnnouncementsError, Q as FFIDAnnouncementsErrorCode, R as FFIDAnnouncementsServerResponse, S as FFIDCacheConfig, T as FFIDContextValue, U as FFIDInquiryCategory, V as FFIDInquiryCategorySite2026, W as FFIDInquiryForm, X as FFIDInquiryFormCategoryItem, Y as FFIDInquiryFormClassNames, Z as
|
|
1
|
+
import { F as FFIDSubscriptionStatus, a as FFIDConfig, b as FFIDApiResponse, c as FFIDSessionResponse, d as FFIDRedirectResult, e as FFIDError, f as FFIDSubscriptionCheckResponse, g as FFIDListMembersResponse, h as FFIDMemberRole, i as FFIDUpdateMemberRoleResponse, j as FFIDRemoveMemberResponse, k as FFIDProfileCallOptions, l as FFIDUserProfile, m as FFIDUpdateUserProfileRequest, n as FFIDAnalyticsConfig, o as FFIDCreateCheckoutParams, p as FFIDCheckoutSessionResponse, q as FFIDCreatePortalParams, r as FFIDPortalSessionResponse, s as FFIDVerifyAccessTokenOptions, t as FFIDOAuthUserInfo, u as FFIDInquiryCreateParams, v as FFIDInquiryCreateResponse, w as FFIDAuthMode, x as FFIDLogger, y as FFIDCacheAdapter, z as FFIDUser, A as FFIDOrganization, B as FFIDSubscription, C as FFIDSubscriptionContextValue, E as EffectiveSubscriptionStatus, D as FFIDAnnouncementsClientConfig, L as ListAnnouncementsOptions, G as FFIDAnnouncementsApiResponse, H as AnnouncementListResponse, I as FFIDAnnouncementsLogger } from './index-Cn8-3hgb.js';
|
|
2
|
+
export { J as Announcement, K as AnnouncementStatus, M as AnnouncementType, N as FFIDAnnouncementBadge, O as FFIDAnnouncementList, P as FFIDAnnouncementsError, Q as FFIDAnnouncementsErrorCode, R as FFIDAnnouncementsServerResponse, S as FFIDCacheConfig, T as FFIDContextValue, U as FFIDInquiryCategory, V as FFIDInquiryCategorySite2026, W as FFIDInquiryForm, X as FFIDInquiryFormCategoryItem, Y as FFIDInquiryFormClassNames, Z as FFIDInquiryFormLegalLayout, _ as FFIDInquiryFormOrganization, $ as FFIDInquiryFormPlaceholderContext, a0 as FFIDInquiryFormPrefill, a1 as FFIDInquiryFormProps, a2 as FFIDInquiryFormSubmitData, a3 as FFIDInquiryFormSubmitResult, a4 as FFIDJwtClaims, a5 as FFIDLoginButton, a6 as FFIDMemberStatus, a7 as FFIDOAuthTokenResponse, a8 as FFIDOAuthUserInfoMemberRole, a9 as FFIDOAuthUserInfoSubscription, aa as FFIDOrganizationMember, ab as FFIDOrganizationSwitcher, ac as FFIDRedirectErrorCode, ad as FFIDSeatModel, ae as FFIDSubscriptionBadge, af as FFIDTokenIntrospectionResponse, ag as FFIDUserMenu, ah as FFID_INQUIRY_CATEGORIES, ai as FFID_INQUIRY_CATEGORIES_SITE_2026, aj as UseFFIDAnnouncementsOptions, ak as UseFFIDAnnouncementsReturn, al as isFFIDInquiryCategorySite2026, am as useFFIDAnnouncements } from './index-Cn8-3hgb.js';
|
|
3
3
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
4
4
|
import { ReactNode, ComponentType, FC } from 'react';
|
|
5
5
|
|
|
@@ -493,17 +493,37 @@ interface ContractWizardSubscriptionOptions {
|
|
|
493
493
|
|
|
494
494
|
/** Redirect and URL generation - redirectToLogin / redirectToAuthorize / redirectToLogout / getLoginUrl / getSignupUrl / getLogoutUrl */
|
|
495
495
|
|
|
496
|
+
/**
|
|
497
|
+
* `screen_hint=signup` query value for `/oauth/authorize` (#2908 / #2911).
|
|
498
|
+
* Forwards to Supabase Auth signup screen; only the `'signup'` value is
|
|
499
|
+
* propagated (no-op when `'login'` or omitted).
|
|
500
|
+
*/
|
|
501
|
+
declare const SCREEN_HINT_SIGNUP: "signup";
|
|
496
502
|
/** Options for redirectToAuthorize */
|
|
497
503
|
interface RedirectToAuthorizeOptions {
|
|
498
504
|
/** Target organization ID — triggers org-scoped OAuth re-authorization */
|
|
499
505
|
organizationId?: string;
|
|
506
|
+
/**
|
|
507
|
+
* Initial Supabase Auth screen hint (#2908 / #2911).
|
|
508
|
+
*
|
|
509
|
+
* - `'signup'`: forwards `?screen_hint=signup` so the FFID OAuth flow lands
|
|
510
|
+
* on the signup screen (used by external services that want to deep-link
|
|
511
|
+
* new users into the signup CTA).
|
|
512
|
+
* - `'login'` / `undefined`: no `screen_hint` param is added — the default
|
|
513
|
+
* login screen is shown.
|
|
514
|
+
*
|
|
515
|
+
* In cookie mode, `'signup'` redirects to the FFID `/signup` page instead
|
|
516
|
+
* of `/login` so the SDK contract (signup-screen intent) stays consistent
|
|
517
|
+
* regardless of `authMode`.
|
|
518
|
+
*/
|
|
519
|
+
screenHint?: typeof SCREEN_HINT_SIGNUP | 'login';
|
|
500
520
|
}
|
|
501
521
|
|
|
502
522
|
/** Creates an FFID API client instance */
|
|
503
523
|
declare function createFFIDClient(config: FFIDConfig): {
|
|
504
524
|
getSession: () => Promise<FFIDApiResponse<FFIDSessionResponse>>;
|
|
505
525
|
signOut: () => Promise<FFIDApiResponse<void>>;
|
|
506
|
-
redirectToLogin: () => Promise<FFIDRedirectResult>;
|
|
526
|
+
redirectToLogin: (options?: RedirectToAuthorizeOptions) => Promise<FFIDRedirectResult>;
|
|
507
527
|
redirectToAuthorize: (options?: RedirectToAuthorizeOptions) => Promise<FFIDRedirectResult>;
|
|
508
528
|
redirectToLogout: (postLogoutRedirectUri?: string) => FFIDRedirectResult;
|
|
509
529
|
getLoginUrl: (redirectUrl?: string) => string;
|
|
@@ -679,8 +699,17 @@ interface UseFFIDReturn {
|
|
|
679
699
|
isAuthenticated: boolean;
|
|
680
700
|
/** Any authentication error that occurred */
|
|
681
701
|
error: FFIDError | null;
|
|
682
|
-
/**
|
|
683
|
-
|
|
702
|
+
/**
|
|
703
|
+
* Redirect to login page.
|
|
704
|
+
*
|
|
705
|
+
* @param options.screenHint `'signup'` to deep-link into the signup screen
|
|
706
|
+
* (forwards `screen_hint=signup` in token mode / redirects to `/signup`
|
|
707
|
+
* in cookie mode). `'login'` and `undefined` use the default login flow.
|
|
708
|
+
* See `RedirectToAuthorizeOptions` (#2908 / #2911).
|
|
709
|
+
*/
|
|
710
|
+
login: (options?: {
|
|
711
|
+
screenHint?: 'signup' | 'login';
|
|
712
|
+
}) => void;
|
|
684
713
|
/** Sign out */
|
|
685
714
|
logout: () => Promise<void>;
|
|
686
715
|
/**
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { useFFIDContext, useSubscription } from './chunk-
|
|
2
|
-
export { DEFAULT_API_BASE_URL, DEFAULT_OAUTH_SCOPES, FFIDAnnouncementBadge, FFIDAnnouncementList, FFIDInquiryForm, FFIDLoginButton, FFIDOrganizationSwitcher, FFIDProvider, FFIDSDKError, FFIDSubscriptionBadge, FFIDUserMenu, FFID_ANNOUNCEMENTS_ERROR_CODES, FFID_INQUIRY_CATEGORIES, FFID_INQUIRY_CATEGORIES_SITE_2026, computeEffectiveStatusFromSession, createFFIDAnnouncementsClient, createFFIDClient, createTokenStore, generateCodeChallenge, generateCodeVerifier, isFFIDInquiryCategorySite2026, normalizeRedirectUri, retrieveCodeVerifier, storeCodeVerifier, useFFID, useFFIDAnnouncements, useSubscription, withSubscription } from './chunk-
|
|
1
|
+
import { useFFIDContext, useSubscription } from './chunk-P35ULJLM.js';
|
|
2
|
+
export { DEFAULT_API_BASE_URL, DEFAULT_OAUTH_SCOPES, FFIDAnnouncementBadge, FFIDAnnouncementList, FFIDInquiryForm, FFIDLoginButton, FFIDOrganizationSwitcher, FFIDProvider, FFIDSDKError, FFIDSubscriptionBadge, FFIDUserMenu, FFID_ANNOUNCEMENTS_ERROR_CODES, FFID_INQUIRY_CATEGORIES, FFID_INQUIRY_CATEGORIES_SITE_2026, computeEffectiveStatusFromSession, createFFIDAnnouncementsClient, createFFIDClient, createTokenStore, generateCodeChallenge, generateCodeVerifier, isFFIDInquiryCategorySite2026, normalizeRedirectUri, retrieveCodeVerifier, storeCodeVerifier, useFFID, useFFIDAnnouncements, useSubscription, withSubscription } from './chunk-P35ULJLM.js';
|
|
3
3
|
import { useEffect, useRef } from 'react';
|
|
4
4
|
import { jsx, Fragment } from 'react/jsx-runtime';
|
|
5
5
|
|
package/dist/server/index.cjs
CHANGED
|
@@ -803,7 +803,7 @@ function createProfileMethods(deps) {
|
|
|
803
803
|
}
|
|
804
804
|
|
|
805
805
|
// src/client/version-check.ts
|
|
806
|
-
var SDK_VERSION = "
|
|
806
|
+
var SDK_VERSION = "4.0.0";
|
|
807
807
|
var SDK_USER_AGENT = `FFID-SDK/${SDK_VERSION} (TypeScript)`;
|
|
808
808
|
var SDK_VERSION_HEADER = "X-FFID-SDK-Version";
|
|
809
809
|
function sdkHeaders() {
|
|
@@ -1325,6 +1325,8 @@ function base64UrlEncode(buffer) {
|
|
|
1325
1325
|
// src/client/redirect.ts
|
|
1326
1326
|
var OAUTH_AUTHORIZE_ENDPOINT = "/api/v1/oauth/authorize";
|
|
1327
1327
|
var AUTH_LOGOUT_ENDPOINT = "/api/v1/auth/logout";
|
|
1328
|
+
var SCREEN_HINT_SIGNUP = "signup";
|
|
1329
|
+
var SCREEN_HINT_PARAM = "screen_hint";
|
|
1328
1330
|
var STATE_RANDOM_BYTES = 16;
|
|
1329
1331
|
var HEX_BASE2 = 16;
|
|
1330
1332
|
var REDIRECT_LOOP_KEY = "ffid_sdk_redirect_loop_history";
|
|
@@ -1492,6 +1494,9 @@ function createRedirectMethods(deps) {
|
|
|
1492
1494
|
}
|
|
1493
1495
|
params.set("organization_id", trimmedOrgId);
|
|
1494
1496
|
}
|
|
1497
|
+
if (options?.screenHint === SCREEN_HINT_SIGNUP) {
|
|
1498
|
+
params.set(SCREEN_HINT_PARAM, SCREEN_HINT_SIGNUP);
|
|
1499
|
+
}
|
|
1495
1500
|
const authorizeUrl = `${baseUrl}${OAUTH_AUTHORIZE_ENDPOINT}?${params.toString()}`;
|
|
1496
1501
|
logger.debug("Redirecting to authorize:", authorizeUrl);
|
|
1497
1502
|
recordRedirectAttempt(authorizeKey, now, logger);
|
|
@@ -1503,18 +1508,17 @@ function createRedirectMethods(deps) {
|
|
|
1503
1508
|
}
|
|
1504
1509
|
return { success: true };
|
|
1505
1510
|
}
|
|
1506
|
-
async function redirectToLogin() {
|
|
1511
|
+
async function redirectToLogin(options) {
|
|
1507
1512
|
if (typeof window === "undefined") {
|
|
1508
1513
|
logger.warn("SSR \u74B0\u5883\u3067\u306F\u30EA\u30C0\u30A4\u30EC\u30AF\u30C8\u3067\u304D\u307E\u305B\u3093");
|
|
1509
1514
|
return { success: false, error: "SSR \u74B0\u5883\u3067\u306F\u30EA\u30C0\u30A4\u30EC\u30AF\u30C8\u3067\u304D\u307E\u305B\u3093" };
|
|
1510
1515
|
}
|
|
1511
1516
|
if (authMode === "token") {
|
|
1512
|
-
return redirectToAuthorize();
|
|
1517
|
+
return redirectToAuthorize(options);
|
|
1513
1518
|
}
|
|
1514
|
-
const
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
window.location.href = loginUrl;
|
|
1519
|
+
const targetUrl = options?.screenHint === SCREEN_HINT_SIGNUP ? getSignupUrl() : getLoginUrl();
|
|
1520
|
+
logger.debug("Redirecting to auth page:", targetUrl);
|
|
1521
|
+
window.location.href = targetUrl;
|
|
1518
1522
|
return { success: true };
|
|
1519
1523
|
}
|
|
1520
1524
|
function getLoginUrl(redirectUrl) {
|
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 } from '../ffid-client-
|
|
2
|
-
export { f as FFIDCacheConfig, g as FFIDClient, h as FFIDConfig, i as FFIDOrganization, j as FFIDOtpSendResponse, k as FFIDOtpVerifyResponse, l as FFIDPasswordResetConfirmResponse, m as FFIDPasswordResetResponse, n as FFIDPasswordResetVerifyResponse, o as FFIDProfileCallOptions, p as FFIDResetSessionResponse, q as FFIDSubscription, r as FFIDUpdateUserProfileRequest, s as FFIDUser, t as FFIDUserProfile, T as TokenData, u as TokenStore, v as createFFIDClient, w as createTokenStore } from '../ffid-client-
|
|
1
|
+
import { F as FFIDLogger, a as FFIDError, b as FFIDCacheAdapter, c as FFIDVerifyAccessTokenOptions, d as FFIDApiResponse, e as FFIDOAuthUserInfo } from '../ffid-client-ZcJhRbD6.cjs';
|
|
2
|
+
export { f as FFIDCacheConfig, g as FFIDClient, h as FFIDConfig, i as FFIDOrganization, j as FFIDOtpSendResponse, k as FFIDOtpVerifyResponse, l as FFIDPasswordResetConfirmResponse, m as FFIDPasswordResetResponse, n as FFIDPasswordResetVerifyResponse, o as FFIDProfileCallOptions, p as FFIDResetSessionResponse, q as FFIDSubscription, r as FFIDUpdateUserProfileRequest, s as FFIDUser, t as FFIDUserProfile, T as TokenData, u as TokenStore, v as createFFIDClient, w as createTokenStore } from '../ffid-client-ZcJhRbD6.cjs';
|
|
3
3
|
export { D as DEFAULT_API_BASE_URL, a as DEFAULT_OAUTH_SCOPES } from '../constants-D61jqRIO.cjs';
|
|
4
4
|
|
|
5
5
|
/** Token verification - verifyAccessToken() implementation */
|
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 } from '../ffid-client-
|
|
2
|
-
export { f as FFIDCacheConfig, g as FFIDClient, h as FFIDConfig, i as FFIDOrganization, j as FFIDOtpSendResponse, k as FFIDOtpVerifyResponse, l as FFIDPasswordResetConfirmResponse, m as FFIDPasswordResetResponse, n as FFIDPasswordResetVerifyResponse, o as FFIDProfileCallOptions, p as FFIDResetSessionResponse, q as FFIDSubscription, r as FFIDUpdateUserProfileRequest, s as FFIDUser, t as FFIDUserProfile, T as TokenData, u as TokenStore, v as createFFIDClient, w as createTokenStore } from '../ffid-client-
|
|
1
|
+
import { F as FFIDLogger, a as FFIDError, b as FFIDCacheAdapter, c as FFIDVerifyAccessTokenOptions, d as FFIDApiResponse, e as FFIDOAuthUserInfo } from '../ffid-client-ZcJhRbD6.js';
|
|
2
|
+
export { f as FFIDCacheConfig, g as FFIDClient, h as FFIDConfig, i as FFIDOrganization, j as FFIDOtpSendResponse, k as FFIDOtpVerifyResponse, l as FFIDPasswordResetConfirmResponse, m as FFIDPasswordResetResponse, n as FFIDPasswordResetVerifyResponse, o as FFIDProfileCallOptions, p as FFIDResetSessionResponse, q as FFIDSubscription, r as FFIDUpdateUserProfileRequest, s as FFIDUser, t as FFIDUserProfile, T as TokenData, u as TokenStore, v as createFFIDClient, w as createTokenStore } from '../ffid-client-ZcJhRbD6.js';
|
|
3
3
|
export { D as DEFAULT_API_BASE_URL, a as DEFAULT_OAUTH_SCOPES } from '../constants-D61jqRIO.js';
|
|
4
4
|
|
|
5
5
|
/** Token verification - verifyAccessToken() implementation */
|
package/dist/server/index.js
CHANGED
|
@@ -802,7 +802,7 @@ function createProfileMethods(deps) {
|
|
|
802
802
|
}
|
|
803
803
|
|
|
804
804
|
// src/client/version-check.ts
|
|
805
|
-
var SDK_VERSION = "
|
|
805
|
+
var SDK_VERSION = "4.0.0";
|
|
806
806
|
var SDK_USER_AGENT = `FFID-SDK/${SDK_VERSION} (TypeScript)`;
|
|
807
807
|
var SDK_VERSION_HEADER = "X-FFID-SDK-Version";
|
|
808
808
|
function sdkHeaders() {
|
|
@@ -1324,6 +1324,8 @@ function base64UrlEncode(buffer) {
|
|
|
1324
1324
|
// src/client/redirect.ts
|
|
1325
1325
|
var OAUTH_AUTHORIZE_ENDPOINT = "/api/v1/oauth/authorize";
|
|
1326
1326
|
var AUTH_LOGOUT_ENDPOINT = "/api/v1/auth/logout";
|
|
1327
|
+
var SCREEN_HINT_SIGNUP = "signup";
|
|
1328
|
+
var SCREEN_HINT_PARAM = "screen_hint";
|
|
1327
1329
|
var STATE_RANDOM_BYTES = 16;
|
|
1328
1330
|
var HEX_BASE2 = 16;
|
|
1329
1331
|
var REDIRECT_LOOP_KEY = "ffid_sdk_redirect_loop_history";
|
|
@@ -1491,6 +1493,9 @@ function createRedirectMethods(deps) {
|
|
|
1491
1493
|
}
|
|
1492
1494
|
params.set("organization_id", trimmedOrgId);
|
|
1493
1495
|
}
|
|
1496
|
+
if (options?.screenHint === SCREEN_HINT_SIGNUP) {
|
|
1497
|
+
params.set(SCREEN_HINT_PARAM, SCREEN_HINT_SIGNUP);
|
|
1498
|
+
}
|
|
1494
1499
|
const authorizeUrl = `${baseUrl}${OAUTH_AUTHORIZE_ENDPOINT}?${params.toString()}`;
|
|
1495
1500
|
logger.debug("Redirecting to authorize:", authorizeUrl);
|
|
1496
1501
|
recordRedirectAttempt(authorizeKey, now, logger);
|
|
@@ -1502,18 +1507,17 @@ function createRedirectMethods(deps) {
|
|
|
1502
1507
|
}
|
|
1503
1508
|
return { success: true };
|
|
1504
1509
|
}
|
|
1505
|
-
async function redirectToLogin() {
|
|
1510
|
+
async function redirectToLogin(options) {
|
|
1506
1511
|
if (typeof window === "undefined") {
|
|
1507
1512
|
logger.warn("SSR \u74B0\u5883\u3067\u306F\u30EA\u30C0\u30A4\u30EC\u30AF\u30C8\u3067\u304D\u307E\u305B\u3093");
|
|
1508
1513
|
return { success: false, error: "SSR \u74B0\u5883\u3067\u306F\u30EA\u30C0\u30A4\u30EC\u30AF\u30C8\u3067\u304D\u307E\u305B\u3093" };
|
|
1509
1514
|
}
|
|
1510
1515
|
if (authMode === "token") {
|
|
1511
|
-
return redirectToAuthorize();
|
|
1516
|
+
return redirectToAuthorize(options);
|
|
1512
1517
|
}
|
|
1513
|
-
const
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
window.location.href = loginUrl;
|
|
1518
|
+
const targetUrl = options?.screenHint === SCREEN_HINT_SIGNUP ? getSignupUrl() : getLoginUrl();
|
|
1519
|
+
logger.debug("Redirecting to auth page:", targetUrl);
|
|
1520
|
+
window.location.href = targetUrl;
|
|
1517
1521
|
return { success: true };
|
|
1518
1522
|
}
|
|
1519
1523
|
function getLoginUrl(redirectUrl) {
|