@feelflow/ffid-sdk 5.27.0 → 5.28.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.
@@ -1643,7 +1643,7 @@ function validateTokenResponse(tokenResponse) {
1643
1643
  }
1644
1644
 
1645
1645
  // src/client/version-check.ts
1646
- var SDK_VERSION = "5.27.0";
1646
+ var SDK_VERSION = "5.28.0";
1647
1647
  var SDK_USER_AGENT = `FFID-SDK/${SDK_VERSION} (TypeScript)`;
1648
1648
  var SDK_VERSION_HEADER = "X-FFID-SDK-Version";
1649
1649
  function sdkHeaders() {
@@ -3150,6 +3150,11 @@ function createInquiryMethods(deps) {
3150
3150
  name,
3151
3151
  message,
3152
3152
  category: params.category,
3153
+ // Normalize null ("survey not collected", e.g. forwarded verbatim
3154
+ // from FFIDInquiryFormSubmitData) to undefined so JSON.stringify
3155
+ // drops the key entirely — older FFID deployments never see it and
3156
+ // current ones treat the omission as NULL.
3157
+ acquisitionSource: params.acquisitionSource ?? void 0,
3153
3158
  company: params.company,
3154
3159
  phone: params.phone,
3155
3160
  locale: params.locale,
@@ -5360,6 +5365,19 @@ var FFID_INQUIRY_CATEGORIES_SITE_2026 = [
5360
5365
  "other"
5361
5366
  ];
5362
5367
  var isFFIDInquiryCategorySite2026 = (value) => FFID_INQUIRY_CATEGORIES_SITE_2026.includes(value);
5368
+ var FFID_INQUIRY_ACQUISITION_SOURCES = [
5369
+ "referral",
5370
+ "generative-ai",
5371
+ "social-media",
5372
+ "networking-event",
5373
+ "web-search",
5374
+ "company-blog",
5375
+ "sales-outreach",
5376
+ "press-release",
5377
+ "web-advertising",
5378
+ "other"
5379
+ ];
5380
+ var isFFIDInquiryAcquisitionSource = (value) => FFID_INQUIRY_ACQUISITION_SOURCES.includes(value);
5363
5381
  var CATEGORY_PLACEHOLDER_LABEL_JA = "\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044";
5364
5382
  var CATEGORY_REQUIRED_ERROR_JA = "\u304A\u554F\u3044\u5408\u308F\u305B\u7A2E\u5225\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002";
5365
5383
  var TERMS_REQUIRED_ERROR_JA = "\u5229\u7528\u898F\u7D04\u3078\u306E\u540C\u610F\u304C\u5FC5\u8981\u3067\u3059\u3002";
@@ -5492,6 +5510,7 @@ function FFIDInquiryForm({
5492
5510
  termsHref,
5493
5511
  privacyHref,
5494
5512
  turnstileToken = null,
5513
+ acquisitionSource = null,
5495
5514
  turnstileSlot,
5496
5515
  onSubmit,
5497
5516
  onChange,
@@ -5573,6 +5592,7 @@ function FFIDInquiryForm({
5573
5592
  company: company.trim() || null,
5574
5593
  phone: phone.trim() || null,
5575
5594
  category,
5595
+ acquisitionSource,
5576
5596
  message: message.trim(),
5577
5597
  organizationId,
5578
5598
  inquiryFollowupOptIn: inquiryFollowup,
@@ -5588,6 +5608,7 @@ function FFIDInquiryForm({
5588
5608
  company,
5589
5609
  phone,
5590
5610
  category,
5611
+ acquisitionSource,
5591
5612
  message,
5592
5613
  organizationId,
5593
5614
  inquiryFollowup,
@@ -5636,6 +5657,7 @@ function FFIDInquiryForm({
5636
5657
  company: company.trim() || null,
5637
5658
  phone: phone.trim() || null,
5638
5659
  category,
5660
+ acquisitionSource,
5639
5661
  message: message.trim(),
5640
5662
  organizationId,
5641
5663
  inquiryFollowupOptIn: inquiryFollowup,
@@ -5954,4 +5976,4 @@ function FFIDInquiryForm({
5954
5976
  );
5955
5977
  }
5956
5978
 
5957
- export { ACCESS_GRANTING_EFFECTIVE_STATUSES, BLOCKING_EFFECTIVE_STATUSES, CATALOG_HASH_PATTERN, DEFAULT_API_BASE_URL, DEFAULT_OAUTH_SCOPES, EFFECTIVE_SUBSCRIPTION_STATUSES, FFIDAnnouncementBadge, FFIDAnnouncementList, FFIDCatalogHashError, FFIDInquiryForm, FFIDLoginButton, FFIDOrganizationSwitcher, FFIDProvider, FFIDSDKError, FFIDSubscriptionBadge, FFIDUserMenu, FFID_ANNOUNCEMENTS_ERROR_CODES, FFID_CATALOG_ENVIRONMENTS, FFID_CATALOG_PUBLICATION_STATUSES, FFID_ERROR_CODES, FFID_INQUIRY_CATEGORIES, FFID_INQUIRY_CATEGORIES_SITE_2026, canonicalizeCatalogValue, cleanupStateStorage, computeEffectiveStatusFromSession, computeFFIDCheckoutCopyHash, computeLegalDisclosureHash, computePaymentConfigurationHash, computePraxisCopyHash, computeScopeHash, computeTaxConfigurationHash, createFFIDAnnouncementsClient, createFFIDClient, createTokenStore, generateCodeChallenge, generateCodeVerifier, handleRedirectCallback, hasAccessFromUserinfo, hashCanonicalJson, isBlockedFromUserinfo, isFFIDInquiryCategorySite2026, normalizeRedirectUri, retrieveCodeVerifier, retrieveState, sha256Hex, storeCodeVerifier, storeState, useFFID, useFFIDAnnouncements, useFFIDContext, useSubscription, validatePublishedCatalog, withSubscription };
5979
+ export { ACCESS_GRANTING_EFFECTIVE_STATUSES, BLOCKING_EFFECTIVE_STATUSES, CATALOG_HASH_PATTERN, DEFAULT_API_BASE_URL, DEFAULT_OAUTH_SCOPES, EFFECTIVE_SUBSCRIPTION_STATUSES, FFIDAnnouncementBadge, FFIDAnnouncementList, FFIDCatalogHashError, FFIDInquiryForm, FFIDLoginButton, FFIDOrganizationSwitcher, FFIDProvider, FFIDSDKError, FFIDSubscriptionBadge, FFIDUserMenu, FFID_ANNOUNCEMENTS_ERROR_CODES, FFID_CATALOG_ENVIRONMENTS, FFID_CATALOG_PUBLICATION_STATUSES, FFID_ERROR_CODES, FFID_INQUIRY_ACQUISITION_SOURCES, FFID_INQUIRY_CATEGORIES, FFID_INQUIRY_CATEGORIES_SITE_2026, canonicalizeCatalogValue, cleanupStateStorage, computeEffectiveStatusFromSession, computeFFIDCheckoutCopyHash, computeLegalDisclosureHash, computePaymentConfigurationHash, computePraxisCopyHash, computeScopeHash, computeTaxConfigurationHash, createFFIDAnnouncementsClient, createFFIDClient, createTokenStore, generateCodeChallenge, generateCodeVerifier, handleRedirectCallback, hasAccessFromUserinfo, hashCanonicalJson, isBlockedFromUserinfo, isFFIDInquiryAcquisitionSource, isFFIDInquiryCategorySite2026, normalizeRedirectUri, retrieveCodeVerifier, retrieveState, sha256Hex, storeCodeVerifier, storeState, useFFID, useFFIDAnnouncements, useFFIDContext, useSubscription, validatePublishedCatalog, withSubscription };
@@ -1645,7 +1645,7 @@ function validateTokenResponse(tokenResponse) {
1645
1645
  }
1646
1646
 
1647
1647
  // src/client/version-check.ts
1648
- var SDK_VERSION = "5.27.0";
1648
+ var SDK_VERSION = "5.28.0";
1649
1649
  var SDK_USER_AGENT = `FFID-SDK/${SDK_VERSION} (TypeScript)`;
1650
1650
  var SDK_VERSION_HEADER = "X-FFID-SDK-Version";
1651
1651
  function sdkHeaders() {
@@ -3152,6 +3152,11 @@ function createInquiryMethods(deps) {
3152
3152
  name,
3153
3153
  message,
3154
3154
  category: params.category,
3155
+ // Normalize null ("survey not collected", e.g. forwarded verbatim
3156
+ // from FFIDInquiryFormSubmitData) to undefined so JSON.stringify
3157
+ // drops the key entirely — older FFID deployments never see it and
3158
+ // current ones treat the omission as NULL.
3159
+ acquisitionSource: params.acquisitionSource ?? void 0,
3155
3160
  company: params.company,
3156
3161
  phone: params.phone,
3157
3162
  locale: params.locale,
@@ -5362,6 +5367,19 @@ var FFID_INQUIRY_CATEGORIES_SITE_2026 = [
5362
5367
  "other"
5363
5368
  ];
5364
5369
  var isFFIDInquiryCategorySite2026 = (value) => FFID_INQUIRY_CATEGORIES_SITE_2026.includes(value);
5370
+ var FFID_INQUIRY_ACQUISITION_SOURCES = [
5371
+ "referral",
5372
+ "generative-ai",
5373
+ "social-media",
5374
+ "networking-event",
5375
+ "web-search",
5376
+ "company-blog",
5377
+ "sales-outreach",
5378
+ "press-release",
5379
+ "web-advertising",
5380
+ "other"
5381
+ ];
5382
+ var isFFIDInquiryAcquisitionSource = (value) => FFID_INQUIRY_ACQUISITION_SOURCES.includes(value);
5365
5383
  var CATEGORY_PLACEHOLDER_LABEL_JA = "\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044";
5366
5384
  var CATEGORY_REQUIRED_ERROR_JA = "\u304A\u554F\u3044\u5408\u308F\u305B\u7A2E\u5225\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002";
5367
5385
  var TERMS_REQUIRED_ERROR_JA = "\u5229\u7528\u898F\u7D04\u3078\u306E\u540C\u610F\u304C\u5FC5\u8981\u3067\u3059\u3002";
@@ -5494,6 +5512,7 @@ function FFIDInquiryForm({
5494
5512
  termsHref,
5495
5513
  privacyHref,
5496
5514
  turnstileToken = null,
5515
+ acquisitionSource = null,
5497
5516
  turnstileSlot,
5498
5517
  onSubmit,
5499
5518
  onChange,
@@ -5575,6 +5594,7 @@ function FFIDInquiryForm({
5575
5594
  company: company.trim() || null,
5576
5595
  phone: phone.trim() || null,
5577
5596
  category,
5597
+ acquisitionSource,
5578
5598
  message: message.trim(),
5579
5599
  organizationId,
5580
5600
  inquiryFollowupOptIn: inquiryFollowup,
@@ -5590,6 +5610,7 @@ function FFIDInquiryForm({
5590
5610
  company,
5591
5611
  phone,
5592
5612
  category,
5613
+ acquisitionSource,
5593
5614
  message,
5594
5615
  organizationId,
5595
5616
  inquiryFollowup,
@@ -5638,6 +5659,7 @@ function FFIDInquiryForm({
5638
5659
  company: company.trim() || null,
5639
5660
  phone: phone.trim() || null,
5640
5661
  category,
5662
+ acquisitionSource,
5641
5663
  message: message.trim(),
5642
5664
  organizationId,
5643
5665
  inquiryFollowupOptIn: inquiryFollowup,
@@ -5976,6 +5998,7 @@ exports.FFID_ANNOUNCEMENTS_ERROR_CODES = FFID_ANNOUNCEMENTS_ERROR_CODES;
5976
5998
  exports.FFID_CATALOG_ENVIRONMENTS = FFID_CATALOG_ENVIRONMENTS;
5977
5999
  exports.FFID_CATALOG_PUBLICATION_STATUSES = FFID_CATALOG_PUBLICATION_STATUSES;
5978
6000
  exports.FFID_ERROR_CODES = FFID_ERROR_CODES;
6001
+ exports.FFID_INQUIRY_ACQUISITION_SOURCES = FFID_INQUIRY_ACQUISITION_SOURCES;
5979
6002
  exports.FFID_INQUIRY_CATEGORIES = FFID_INQUIRY_CATEGORIES;
5980
6003
  exports.FFID_INQUIRY_CATEGORIES_SITE_2026 = FFID_INQUIRY_CATEGORIES_SITE_2026;
5981
6004
  exports.canonicalizeCatalogValue = canonicalizeCatalogValue;
@@ -5996,6 +6019,7 @@ exports.handleRedirectCallback = handleRedirectCallback;
5996
6019
  exports.hasAccessFromUserinfo = hasAccessFromUserinfo;
5997
6020
  exports.hashCanonicalJson = hashCanonicalJson;
5998
6021
  exports.isBlockedFromUserinfo = isBlockedFromUserinfo;
6022
+ exports.isFFIDInquiryAcquisitionSource = isFFIDInquiryAcquisitionSource;
5999
6023
  exports.isFFIDInquiryCategorySite2026 = isFFIDInquiryCategorySite2026;
6000
6024
  exports.normalizeRedirectUri = normalizeRedirectUri;
6001
6025
  exports.retrieveCodeVerifier = retrieveCodeVerifier;
@@ -1,34 +1,34 @@
1
1
  'use strict';
2
2
 
3
- var chunkR4KUHR4S_cjs = require('../chunk-R4KUHR4S.cjs');
3
+ var chunkS5FV6H2U_cjs = require('../chunk-S5FV6H2U.cjs');
4
4
 
5
5
 
6
6
 
7
7
  Object.defineProperty(exports, "FFIDAnnouncementBadge", {
8
8
  enumerable: true,
9
- get: function () { return chunkR4KUHR4S_cjs.FFIDAnnouncementBadge; }
9
+ get: function () { return chunkS5FV6H2U_cjs.FFIDAnnouncementBadge; }
10
10
  });
11
11
  Object.defineProperty(exports, "FFIDAnnouncementList", {
12
12
  enumerable: true,
13
- get: function () { return chunkR4KUHR4S_cjs.FFIDAnnouncementList; }
13
+ get: function () { return chunkS5FV6H2U_cjs.FFIDAnnouncementList; }
14
14
  });
15
15
  Object.defineProperty(exports, "FFIDInquiryForm", {
16
16
  enumerable: true,
17
- get: function () { return chunkR4KUHR4S_cjs.FFIDInquiryForm; }
17
+ get: function () { return chunkS5FV6H2U_cjs.FFIDInquiryForm; }
18
18
  });
19
19
  Object.defineProperty(exports, "FFIDLoginButton", {
20
20
  enumerable: true,
21
- get: function () { return chunkR4KUHR4S_cjs.FFIDLoginButton; }
21
+ get: function () { return chunkS5FV6H2U_cjs.FFIDLoginButton; }
22
22
  });
23
23
  Object.defineProperty(exports, "FFIDOrganizationSwitcher", {
24
24
  enumerable: true,
25
- get: function () { return chunkR4KUHR4S_cjs.FFIDOrganizationSwitcher; }
25
+ get: function () { return chunkS5FV6H2U_cjs.FFIDOrganizationSwitcher; }
26
26
  });
27
27
  Object.defineProperty(exports, "FFIDSubscriptionBadge", {
28
28
  enumerable: true,
29
- get: function () { return chunkR4KUHR4S_cjs.FFIDSubscriptionBadge; }
29
+ get: function () { return chunkS5FV6H2U_cjs.FFIDSubscriptionBadge; }
30
30
  });
31
31
  Object.defineProperty(exports, "FFIDUserMenu", {
32
32
  enumerable: true,
33
- get: function () { return chunkR4KUHR4S_cjs.FFIDUserMenu; }
33
+ get: function () { return chunkS5FV6H2U_cjs.FFIDUserMenu; }
34
34
  });
@@ -1,3 +1,3 @@
1
- export { G as FFIDAnnouncementBadge, aj as FFIDAnnouncementBadgeClassNames, ak as FFIDAnnouncementBadgeProps, H as FFIDAnnouncementList, al as FFIDAnnouncementListClassNames, am as FFIDAnnouncementListProps, R as FFIDInquiryForm, S as FFIDInquiryFormCategoryItem, U as FFIDInquiryFormClassNames, V as FFIDInquiryFormLegalLayout, W as FFIDInquiryFormOrganization, X as FFIDInquiryFormPlaceholderContext, Y as FFIDInquiryFormPrefill, Z as FFIDInquiryFormProps, _ as FFIDInquiryFormSubmitData, $ as FFIDInquiryFormSubmitResult, a1 as FFIDLoginButton, an as FFIDLoginButtonProps, a3 as FFIDOrganizationSwitcher, ao as FFIDOrganizationSwitcherClassNames, ap as FFIDOrganizationSwitcherProps, a9 as FFIDSubscriptionBadge, aq as FFIDSubscriptionBadgeClassNames, ar as FFIDSubscriptionBadgeProps, aa as FFIDUserMenu, as as FFIDUserMenuClassNames, at as FFIDUserMenuProps } from '../index-D3S_Pkkv.cjs';
1
+ export { G as FFIDAnnouncementBadge, am as FFIDAnnouncementBadgeClassNames, an as FFIDAnnouncementBadgeProps, H as FFIDAnnouncementList, ao as FFIDAnnouncementListClassNames, ap as FFIDAnnouncementListProps, S as FFIDInquiryForm, U as FFIDInquiryFormCategoryItem, V as FFIDInquiryFormClassNames, W as FFIDInquiryFormLegalLayout, X as FFIDInquiryFormOrganization, Y as FFIDInquiryFormPlaceholderContext, Z as FFIDInquiryFormPrefill, _ as FFIDInquiryFormProps, $ as FFIDInquiryFormSubmitData, a0 as FFIDInquiryFormSubmitResult, a2 as FFIDLoginButton, aq as FFIDLoginButtonProps, a4 as FFIDOrganizationSwitcher, ar as FFIDOrganizationSwitcherClassNames, as as FFIDOrganizationSwitcherProps, aa as FFIDSubscriptionBadge, at as FFIDSubscriptionBadgeClassNames, au as FFIDSubscriptionBadgeProps, ab as FFIDUserMenu, av as FFIDUserMenuClassNames, aw as FFIDUserMenuProps } from '../index-_-MqJCN3.cjs';
2
2
  import 'react/jsx-runtime';
3
3
  import 'react';
@@ -1,3 +1,3 @@
1
- export { G as FFIDAnnouncementBadge, aj as FFIDAnnouncementBadgeClassNames, ak as FFIDAnnouncementBadgeProps, H as FFIDAnnouncementList, al as FFIDAnnouncementListClassNames, am as FFIDAnnouncementListProps, R as FFIDInquiryForm, S as FFIDInquiryFormCategoryItem, U as FFIDInquiryFormClassNames, V as FFIDInquiryFormLegalLayout, W as FFIDInquiryFormOrganization, X as FFIDInquiryFormPlaceholderContext, Y as FFIDInquiryFormPrefill, Z as FFIDInquiryFormProps, _ as FFIDInquiryFormSubmitData, $ as FFIDInquiryFormSubmitResult, a1 as FFIDLoginButton, an as FFIDLoginButtonProps, a3 as FFIDOrganizationSwitcher, ao as FFIDOrganizationSwitcherClassNames, ap as FFIDOrganizationSwitcherProps, a9 as FFIDSubscriptionBadge, aq as FFIDSubscriptionBadgeClassNames, ar as FFIDSubscriptionBadgeProps, aa as FFIDUserMenu, as as FFIDUserMenuClassNames, at as FFIDUserMenuProps } from '../index-D3S_Pkkv.js';
1
+ export { G as FFIDAnnouncementBadge, am as FFIDAnnouncementBadgeClassNames, an as FFIDAnnouncementBadgeProps, H as FFIDAnnouncementList, ao as FFIDAnnouncementListClassNames, ap as FFIDAnnouncementListProps, S as FFIDInquiryForm, U as FFIDInquiryFormCategoryItem, V as FFIDInquiryFormClassNames, W as FFIDInquiryFormLegalLayout, X as FFIDInquiryFormOrganization, Y as FFIDInquiryFormPlaceholderContext, Z as FFIDInquiryFormPrefill, _ as FFIDInquiryFormProps, $ as FFIDInquiryFormSubmitData, a0 as FFIDInquiryFormSubmitResult, a2 as FFIDLoginButton, aq as FFIDLoginButtonProps, a4 as FFIDOrganizationSwitcher, ar as FFIDOrganizationSwitcherClassNames, as as FFIDOrganizationSwitcherProps, aa as FFIDSubscriptionBadge, at as FFIDSubscriptionBadgeClassNames, au as FFIDSubscriptionBadgeProps, ab as FFIDUserMenu, av as FFIDUserMenuClassNames, aw as FFIDUserMenuProps } from '../index-_-MqJCN3.js';
2
2
  import 'react/jsx-runtime';
3
3
  import 'react';
@@ -1 +1 @@
1
- export { FFIDAnnouncementBadge, FFIDAnnouncementList, FFIDInquiryForm, FFIDLoginButton, FFIDOrganizationSwitcher, FFIDSubscriptionBadge, FFIDUserMenu } from '../chunk-JZB2IM7Y.js';
1
+ export { FFIDAnnouncementBadge, FFIDAnnouncementList, FFIDInquiryForm, FFIDLoginButton, FFIDOrganizationSwitcher, FFIDSubscriptionBadge, FFIDUserMenu } from '../chunk-75UNNOLV.js';
@@ -46,6 +46,20 @@ type FFIDInquiryCategory = (typeof FFID_INQUIRY_CATEGORIES)[number];
46
46
  */
47
47
  declare const FFID_INQUIRY_CATEGORIES_SITE_2026: readonly ["consulting", "saas", "development", "agent-hub", "ai-feel-chatbot", "knowledge-db", "biz-simulator", "discussion-board", "realtime-ai", "partnership", "media", "recruiting", "other"];
48
48
  type FFIDInquiryCategorySite2026 = (typeof FFID_INQUIRY_CATEGORIES_SITE_2026)[number];
49
+ /**
50
+ * Acquisition-source ("how did you first hear about us") survey slugs
51
+ * accepted by `/api/v1/ext/inquiry` (feelflow-id-platform#4377). Mirrors
52
+ * feelflow-website-2026 `ACQUISITION_SOURCE_OPTIONS`
53
+ * (`feelflow-site/src/lib/acquisition-source.ts`); FFID
54
+ * `src/lib/inquiry/acquisition-sources.ts` is the persistence-side
55
+ * source of truth.
56
+ *
57
+ * Unlike `category`, the server validates this field strictly: a value
58
+ * outside this list is rejected with `INQUIRY_VALIDATION_ERROR` rather than
59
+ * stored as-is. Ship a new slug to FFID first, then start sending it.
60
+ */
61
+ declare const FFID_INQUIRY_ACQUISITION_SOURCES: readonly ["referral", "generative-ai", "social-media", "networking-event", "web-search", "company-blog", "sales-outreach", "press-release", "web-advertising", "other"];
62
+ type FFIDInquiryAcquisitionSource = (typeof FFID_INQUIRY_ACQUISITION_SOURCES)[number];
49
63
  /**
50
64
  * Parameters for `client.inquiry.create()`. When submitting from a
51
65
  * server-side SDK (Service API Key), set `source` to a stable
@@ -65,6 +79,18 @@ interface FFIDInquiryCreateParams {
65
79
  name: string;
66
80
  message: string;
67
81
  category?: FFIDInquiryCategorySite2026 | FFIDInquiryCategory | (string & {});
82
+ /**
83
+ * "How did you first hear about us" survey answer (#4377). Optional and
84
+ * backward compatible — `undefined` and `null` are both normalized to
85
+ * an omitted key on the wire (`null` is accepted so
86
+ * `FFIDInquiryFormSubmitData.acquisitionSource` can be forwarded
87
+ * verbatim) and the row is stored with NULL.
88
+ * Server-side validation is a strict allowlist (unlike `category`):
89
+ * values outside {@link FFID_INQUIRY_ACQUISITION_SOURCES} fail with
90
+ * `INQUIRY_VALIDATION_ERROR`. Narrow untrusted strings with
91
+ * {@link isFFIDInquiryAcquisitionSource} before submitting.
92
+ */
93
+ acquisitionSource?: FFIDInquiryAcquisitionSource | null;
68
94
  company?: string;
69
95
  phone?: string;
70
96
  locale?: 'ja' | 'en';
@@ -2242,4 +2268,4 @@ declare function createFFIDClient(config: FFIDConfig): {
2242
2268
  /** Type of the FFID client */
2243
2269
  type FFIDClient = ReturnType<typeof createFFIDClient>;
2244
2270
 
2245
- export { type FFIDProvisionOrganizationDryRun as A, type FFIDProvisionOrganizationMemberInput as B, type FFIDProvisionOrganizationOutcome as C, type FFIDProvisionOrganizationParams as D, type FFIDProvisionOrganizationResponse as E, type FFIDLogger as F, type FFIDProvisionUserDryRun as G, type FFIDProvisionUserOutcome as H, type FFIDProvisionUserParams as I, type FFIDProvisionUserProfileInput as J, type FFIDProvisionUserResponse as K, type FFIDProvisionedOrganization as L, type FFIDProvisionedUser as M, type FFIDRemoveMemberResponse as N, type FFIDResetSessionResponse as O, type FFIDSubscription as P, type FFIDUpdateMemberRoleResponse as Q, type FFIDUpdateUserProfileRequest as R, type FFIDUser as S, type FFIDUserProfile as T, type TokenData as U, type TokenStore as V, createFFIDClient as W, createTokenStore as X, type FFIDError as a, type FFIDCacheAdapter as b, type FFIDVerifyAccessTokenOptions as c, type FFIDApiResponse as d, type FFIDOAuthUserInfo as e, type FFIDAddMemberParams as f, type FFIDAddMemberRequest as g, type FFIDAddMemberResponse as h, type FFIDAssignableMemberRole as i, type FFIDCacheConfig as j, type FFIDClient as k, type FFIDConfig as l, type FFIDListMembersResponse as m, type FFIDMemberRole as n, type FFIDOrganization as o, type FFIDOrganizationMember as p, type FFIDOtpSendResponse as q, type FFIDOtpVerifyResponse as r, type FFIDPasswordResetConfirmResponse as s, type FFIDPasswordResetResponse as t, type FFIDPasswordResetVerifyResponse as u, type FFIDProfileCallOptions as v, type FFIDProvisionMemberPlan as w, type FFIDProvisionMemberPlanStatus as x, type FFIDProvisionMemberResult as y, type FFIDProvisionMemberStatus as z };
2271
+ export { FFID_CATALOG_ENVIRONMENTS as $, type FFIDPasswordResetVerifyResponse as A, type FFIDProfileCallOptions as B, type FFIDProvisionMemberPlan as C, type FFIDProvisionMemberPlanStatus as D, type FFIDProvisionMemberResult as E, type FFIDLogger as F, type FFIDProvisionMemberStatus as G, type FFIDProvisionOrganizationDryRun as H, type FFIDProvisionOrganizationMemberInput as I, type FFIDProvisionOrganizationOutcome as J, type FFIDProvisionOrganizationParams as K, type FFIDProvisionOrganizationResponse as L, type FFIDProvisionUserDryRun as M, type FFIDProvisionUserOutcome as N, type FFIDProvisionUserParams as O, type FFIDProvisionUserProfileInput as P, type FFIDProvisionUserResponse as Q, type FFIDProvisionedOrganization as R, type FFIDProvisionedUser as S, type FFIDPublishedPlan as T, type FFIDRemoveMemberResponse as U, type FFIDResetSessionResponse as V, type FFIDSubscription as W, type FFIDUpdateMemberRoleResponse as X, type FFIDUpdateUserProfileRequest as Y, type FFIDUser as Z, type FFIDUserProfile as _, type FFIDError as a, FFID_CATALOG_PUBLICATION_STATUSES as a0, type TokenData as a1, type TokenStore as a2, createFFIDClient as a3, createTokenStore as a4, type FFIDCacheAdapter as b, type FFIDVerifyAccessTokenOptions as c, type FFIDApiResponse as d, type FFIDOAuthUserInfo as e, type FFIDCatalogEnvironment as f, type FFIDBillingInterval as g, type FFIDTaxBehavior as h, type FFIDPublishedCatalog as i, type FFIDAddMemberParams as j, type FFIDAddMemberRequest as k, type FFIDAddMemberResponse as l, type FFIDAssignableMemberRole as m, type FFIDCacheConfig as n, type FFIDCatalogPublication as o, type FFIDCatalogPublicationStatus as p, type FFIDClient as q, type FFIDConfig as r, type FFIDListMembersResponse as s, type FFIDMemberRole as t, type FFIDOrganization as u, type FFIDOrganizationMember as v, type FFIDOtpSendResponse as w, type FFIDOtpVerifyResponse as x, type FFIDPasswordResetConfirmResponse as y, type FFIDPasswordResetResponse as z };
@@ -46,6 +46,20 @@ type FFIDInquiryCategory = (typeof FFID_INQUIRY_CATEGORIES)[number];
46
46
  */
47
47
  declare const FFID_INQUIRY_CATEGORIES_SITE_2026: readonly ["consulting", "saas", "development", "agent-hub", "ai-feel-chatbot", "knowledge-db", "biz-simulator", "discussion-board", "realtime-ai", "partnership", "media", "recruiting", "other"];
48
48
  type FFIDInquiryCategorySite2026 = (typeof FFID_INQUIRY_CATEGORIES_SITE_2026)[number];
49
+ /**
50
+ * Acquisition-source ("how did you first hear about us") survey slugs
51
+ * accepted by `/api/v1/ext/inquiry` (feelflow-id-platform#4377). Mirrors
52
+ * feelflow-website-2026 `ACQUISITION_SOURCE_OPTIONS`
53
+ * (`feelflow-site/src/lib/acquisition-source.ts`); FFID
54
+ * `src/lib/inquiry/acquisition-sources.ts` is the persistence-side
55
+ * source of truth.
56
+ *
57
+ * Unlike `category`, the server validates this field strictly: a value
58
+ * outside this list is rejected with `INQUIRY_VALIDATION_ERROR` rather than
59
+ * stored as-is. Ship a new slug to FFID first, then start sending it.
60
+ */
61
+ declare const FFID_INQUIRY_ACQUISITION_SOURCES: readonly ["referral", "generative-ai", "social-media", "networking-event", "web-search", "company-blog", "sales-outreach", "press-release", "web-advertising", "other"];
62
+ type FFIDInquiryAcquisitionSource = (typeof FFID_INQUIRY_ACQUISITION_SOURCES)[number];
49
63
  /**
50
64
  * Parameters for `client.inquiry.create()`. When submitting from a
51
65
  * server-side SDK (Service API Key), set `source` to a stable
@@ -65,6 +79,18 @@ interface FFIDInquiryCreateParams {
65
79
  name: string;
66
80
  message: string;
67
81
  category?: FFIDInquiryCategorySite2026 | FFIDInquiryCategory | (string & {});
82
+ /**
83
+ * "How did you first hear about us" survey answer (#4377). Optional and
84
+ * backward compatible — `undefined` and `null` are both normalized to
85
+ * an omitted key on the wire (`null` is accepted so
86
+ * `FFIDInquiryFormSubmitData.acquisitionSource` can be forwarded
87
+ * verbatim) and the row is stored with NULL.
88
+ * Server-side validation is a strict allowlist (unlike `category`):
89
+ * values outside {@link FFID_INQUIRY_ACQUISITION_SOURCES} fail with
90
+ * `INQUIRY_VALIDATION_ERROR`. Narrow untrusted strings with
91
+ * {@link isFFIDInquiryAcquisitionSource} before submitting.
92
+ */
93
+ acquisitionSource?: FFIDInquiryAcquisitionSource | null;
68
94
  company?: string;
69
95
  phone?: string;
70
96
  locale?: 'ja' | 'en';
@@ -2242,4 +2268,4 @@ declare function createFFIDClient(config: FFIDConfig): {
2242
2268
  /** Type of the FFID client */
2243
2269
  type FFIDClient = ReturnType<typeof createFFIDClient>;
2244
2270
 
2245
- export { type FFIDProvisionOrganizationDryRun as A, type FFIDProvisionOrganizationMemberInput as B, type FFIDProvisionOrganizationOutcome as C, type FFIDProvisionOrganizationParams as D, type FFIDProvisionOrganizationResponse as E, type FFIDLogger as F, type FFIDProvisionUserDryRun as G, type FFIDProvisionUserOutcome as H, type FFIDProvisionUserParams as I, type FFIDProvisionUserProfileInput as J, type FFIDProvisionUserResponse as K, type FFIDProvisionedOrganization as L, type FFIDProvisionedUser as M, type FFIDRemoveMemberResponse as N, type FFIDResetSessionResponse as O, type FFIDSubscription as P, type FFIDUpdateMemberRoleResponse as Q, type FFIDUpdateUserProfileRequest as R, type FFIDUser as S, type FFIDUserProfile as T, type TokenData as U, type TokenStore as V, createFFIDClient as W, createTokenStore as X, type FFIDError as a, type FFIDCacheAdapter as b, type FFIDVerifyAccessTokenOptions as c, type FFIDApiResponse as d, type FFIDOAuthUserInfo as e, type FFIDAddMemberParams as f, type FFIDAddMemberRequest as g, type FFIDAddMemberResponse as h, type FFIDAssignableMemberRole as i, type FFIDCacheConfig as j, type FFIDClient as k, type FFIDConfig as l, type FFIDListMembersResponse as m, type FFIDMemberRole as n, type FFIDOrganization as o, type FFIDOrganizationMember as p, type FFIDOtpSendResponse as q, type FFIDOtpVerifyResponse as r, type FFIDPasswordResetConfirmResponse as s, type FFIDPasswordResetResponse as t, type FFIDPasswordResetVerifyResponse as u, type FFIDProfileCallOptions as v, type FFIDProvisionMemberPlan as w, type FFIDProvisionMemberPlanStatus as x, type FFIDProvisionMemberResult as y, type FFIDProvisionMemberStatus as z };
2271
+ export { FFID_CATALOG_ENVIRONMENTS as $, type FFIDPasswordResetVerifyResponse as A, type FFIDProfileCallOptions as B, type FFIDProvisionMemberPlan as C, type FFIDProvisionMemberPlanStatus as D, type FFIDProvisionMemberResult as E, type FFIDLogger as F, type FFIDProvisionMemberStatus as G, type FFIDProvisionOrganizationDryRun as H, type FFIDProvisionOrganizationMemberInput as I, type FFIDProvisionOrganizationOutcome as J, type FFIDProvisionOrganizationParams as K, type FFIDProvisionOrganizationResponse as L, type FFIDProvisionUserDryRun as M, type FFIDProvisionUserOutcome as N, type FFIDProvisionUserParams as O, type FFIDProvisionUserProfileInput as P, type FFIDProvisionUserResponse as Q, type FFIDProvisionedOrganization as R, type FFIDProvisionedUser as S, type FFIDPublishedPlan as T, type FFIDRemoveMemberResponse as U, type FFIDResetSessionResponse as V, type FFIDSubscription as W, type FFIDUpdateMemberRoleResponse as X, type FFIDUpdateUserProfileRequest as Y, type FFIDUser as Z, type FFIDUserProfile as _, type FFIDError as a, FFID_CATALOG_PUBLICATION_STATUSES as a0, type TokenData as a1, type TokenStore as a2, createFFIDClient as a3, createTokenStore as a4, type FFIDCacheAdapter as b, type FFIDVerifyAccessTokenOptions as c, type FFIDApiResponse as d, type FFIDOAuthUserInfo as e, type FFIDCatalogEnvironment as f, type FFIDBillingInterval as g, type FFIDTaxBehavior as h, type FFIDPublishedCatalog as i, type FFIDAddMemberParams as j, type FFIDAddMemberRequest as k, type FFIDAddMemberResponse as l, type FFIDAssignableMemberRole as m, type FFIDCacheConfig as n, type FFIDCatalogPublication as o, type FFIDCatalogPublicationStatus as p, type FFIDClient as q, type FFIDConfig as r, type FFIDListMembersResponse as s, type FFIDMemberRole as t, type FFIDOrganization as u, type FFIDOrganizationMember as v, type FFIDOtpSendResponse as w, type FFIDOtpVerifyResponse as x, type FFIDPasswordResetConfirmResponse as y, type FFIDPasswordResetResponse as z };
@@ -1036,6 +1036,26 @@ type FFIDInquiryCategorySite2026 = (typeof FFID_INQUIRY_CATEGORIES_SITE_2026)[nu
1036
1036
  * parameter) to the canonical union.
1037
1037
  */
1038
1038
  declare const isFFIDInquiryCategorySite2026: (value: string) => value is FFIDInquiryCategorySite2026;
1039
+ /**
1040
+ * Acquisition-source ("how did you first hear about us") survey slugs
1041
+ * accepted by `/api/v1/ext/inquiry` (feelflow-id-platform#4377). Mirrors
1042
+ * feelflow-website-2026 `ACQUISITION_SOURCE_OPTIONS`
1043
+ * (`feelflow-site/src/lib/acquisition-source.ts`); FFID
1044
+ * `src/lib/inquiry/acquisition-sources.ts` is the persistence-side
1045
+ * source of truth.
1046
+ *
1047
+ * Unlike `category`, the server validates this field strictly: a value
1048
+ * outside this list is rejected with `INQUIRY_VALIDATION_ERROR` rather than
1049
+ * stored as-is. Ship a new slug to FFID first, then start sending it.
1050
+ */
1051
+ declare const FFID_INQUIRY_ACQUISITION_SOURCES: readonly ["referral", "generative-ai", "social-media", "networking-event", "web-search", "company-blog", "sales-outreach", "press-release", "web-advertising", "other"];
1052
+ type FFIDInquiryAcquisitionSource = (typeof FFID_INQUIRY_ACQUISITION_SOURCES)[number];
1053
+ /**
1054
+ * Runtime type guard for the acquisition-source allowlist. Use when
1055
+ * narrowing an unknown string (e.g., a URL query parameter or analytics
1056
+ * value) before passing it to `client.inquiry.create()`.
1057
+ */
1058
+ declare const isFFIDInquiryAcquisitionSource: (value: string) => value is FFIDInquiryAcquisitionSource;
1039
1059
  /**
1040
1060
  * Parameters for `client.inquiry.create()`. When submitting from a
1041
1061
  * server-side SDK (Service API Key), set `source` to a stable
@@ -1055,6 +1075,18 @@ interface FFIDInquiryCreateParams {
1055
1075
  name: string;
1056
1076
  message: string;
1057
1077
  category?: FFIDInquiryCategorySite2026 | FFIDInquiryCategory | (string & {});
1078
+ /**
1079
+ * "How did you first hear about us" survey answer (#4377). Optional and
1080
+ * backward compatible — `undefined` and `null` are both normalized to
1081
+ * an omitted key on the wire (`null` is accepted so
1082
+ * `FFIDInquiryFormSubmitData.acquisitionSource` can be forwarded
1083
+ * verbatim) and the row is stored with NULL.
1084
+ * Server-side validation is a strict allowlist (unlike `category`):
1085
+ * values outside {@link FFID_INQUIRY_ACQUISITION_SOURCES} fail with
1086
+ * `INQUIRY_VALIDATION_ERROR`. Narrow untrusted strings with
1087
+ * {@link isFFIDInquiryAcquisitionSource} before submitting.
1088
+ */
1089
+ acquisitionSource?: FFIDInquiryAcquisitionSource | null;
1058
1090
  company?: string;
1059
1091
  phone?: string;
1060
1092
  locale?: 'ja' | 'en';
@@ -1420,6 +1452,15 @@ interface FFIDInquiryFormSubmitData {
1420
1452
  company: string | null;
1421
1453
  phone: string | null;
1422
1454
  category: string;
1455
+ /**
1456
+ * Acquisition-source slug forwarded verbatim from the
1457
+ * `acquisitionSource` prop (#4377). `null` when the consumer does not
1458
+ * collect the survey — existing `onSubmit` handlers that ignore the
1459
+ * field keep working unchanged. Typed as the closed allowlist union so
1460
+ * the payload can be handed to `client.inquiry.create()` without a
1461
+ * re-narrowing cast.
1462
+ */
1463
+ acquisitionSource: FFIDInquiryAcquisitionSource | null;
1423
1464
  message: string;
1424
1465
  organizationId: string | null;
1425
1466
  inquiryFollowupOptIn: boolean;
@@ -1449,6 +1490,19 @@ interface FFIDInquiryFormProps {
1449
1490
  privacyHref?: string;
1450
1491
  /** Must be refreshed by the consumer when the Turnstile widget reissues a token. */
1451
1492
  turnstileToken?: string | null;
1493
+ /**
1494
+ * Acquisition-source survey answer collected by the consumer's own UI
1495
+ * (#4377). The form renders no input for it — like `turnstileToken`,
1496
+ * it is a consumer-controlled value passed through into
1497
+ * `FFIDInquiryFormSubmitData.acquisitionSource` on every submit /
1498
+ * `onChange` broadcast. Typed as the closed
1499
+ * `FFID_INQUIRY_ACQUISITION_SOURCES` union so an invalid slug (e.g. a
1500
+ * display label, or a new value not yet deployed to FFID) fails at the
1501
+ * consumer's compile step instead of rejecting every end-user
1502
+ * submission with `INQUIRY_VALIDATION_ERROR` at runtime. Narrow
1503
+ * untrusted strings with `isFFIDInquiryAcquisitionSource` first.
1504
+ */
1505
+ acquisitionSource?: FFIDInquiryAcquisitionSource | null;
1452
1506
  /** Slot for the consumer's Turnstile widget (anonymous mode only). */
1453
1507
  turnstileSlot?: ReactNode;
1454
1508
  onSubmit: (data: FFIDInquiryFormSubmitData) => Promise<FFIDInquiryFormSubmitResult>;
@@ -1534,6 +1588,6 @@ interface FFIDInquiryFormProps {
1534
1588
  interface FFIDInquiryFormPlaceholderContext {
1535
1589
  category: string | null;
1536
1590
  }
1537
- 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;
1591
+ declare function FFIDInquiryForm({ mode, prefill, organizations, preselectedOrganizationId, categories, termsVersion, privacyVersion, termsHref, privacyHref, turnstileToken, acquisitionSource, turnstileSlot, onSubmit, onChange, legalLayout, messagePlaceholder, requireCategorySelection, unstyled, classNames, locale, className, }: FFIDInquiryFormProps): react_jsx_runtime.JSX.Element;
1538
1592
 
1539
- export { type FFIDInquiryFormSubmitResult as $, type AnnouncementListResponse as A, type AnnouncementStatus as B, type AnnouncementType as C, EFFECTIVE_SUBSCRIPTION_STATUSES as D, type EffectiveSubscriptionStatus as E, type FFIDSubscriptionStatus as F, FFIDAnnouncementBadge as G, FFIDAnnouncementList as H, type FFIDAnnouncementsError as I, type FFIDAnnouncementsErrorCode as J, type FFIDAnnouncementsServerResponse as K, type ListAnnouncementsOptions as L, type FFIDApiResponseMeta as M, type FFIDCacheConfig as N, type FFIDContextValue as O, type FFIDInquiryCategory as P, type FFIDInquiryCategorySite2026 as Q, FFIDInquiryForm as R, type FFIDInquiryFormCategoryItem as S, type TokenStore as T, type FFIDInquiryFormClassNames as U, type FFIDInquiryFormLegalLayout as V, type FFIDInquiryFormOrganization as W, type FFIDInquiryFormPlaceholderContext as X, type FFIDInquiryFormPrefill as Y, type FFIDInquiryFormProps as Z, type FFIDInquiryFormSubmitData as _, type FFIDOAuthUserInfoSubscription as a, type FFIDJwtClaims as a0, FFIDLoginButton as a1, type FFIDOAuthUserInfoMemberRole as a2, FFIDOrganizationSwitcher as a3, type FFIDSeatAssignmentClaim as a4, type FFIDSeatAssignmentStatus as a5, type FFIDSeatModel as a6, type FFIDServiceAccessDenialReason as a7, type FFIDServiceAccessFailPolicy as a8, FFIDSubscriptionBadge as a9, FFIDUserMenu as aa, FFID_INQUIRY_CATEGORIES as ab, FFID_INQUIRY_CATEGORIES_SITE_2026 as ac, type TokenData as ad, type UseFFIDAnnouncementsOptions as ae, type UseFFIDAnnouncementsReturn as af, createTokenStore as ag, isFFIDInquiryCategorySite2026 as ah, useFFIDAnnouncements as ai, type FFIDAnnouncementBadgeClassNames as aj, type FFIDAnnouncementBadgeProps as ak, type FFIDAnnouncementListClassNames as al, type FFIDAnnouncementListProps as am, type FFIDLoginButtonProps as an, type FFIDOrganizationSwitcherClassNames as ao, type FFIDOrganizationSwitcherProps as ap, type FFIDSubscriptionBadgeClassNames as aq, type FFIDSubscriptionBadgeProps as ar, type FFIDUserMenuClassNames as as, type FFIDUserMenuProps as at, type FFIDPrompt as b, type FFIDConfig as c, type FFIDApiResponse as d, type FFIDSessionResponse as e, type FFIDSignOutResult as f, type FFIDError as g, type FFIDSubscriptionCheckResponse as h, type FFIDCheckServiceAccessParams as i, type FFIDServiceAccessDecision as j, type FFIDAnalyticsConfig as k, type FFIDVerifyAccessTokenOptions as l, type FFIDOAuthUserInfo as m, type FFIDInquiryCreateParams as n, type FFIDInquiryCreateResponse as o, type FFIDAuthMode as p, type FFIDLogger as q, type FFIDCacheAdapter as r, type FFIDUser as s, type FFIDOrganization as t, type FFIDSubscription as u, type FFIDSubscriptionContextValue as v, type FFIDAnnouncementsClientConfig as w, type FFIDAnnouncementsApiResponse as x, type FFIDAnnouncementsLogger as y, type Announcement as z };
1593
+ export { type FFIDInquiryFormSubmitData as $, type AnnouncementListResponse as A, type AnnouncementStatus as B, type AnnouncementType as C, EFFECTIVE_SUBSCRIPTION_STATUSES as D, type EffectiveSubscriptionStatus as E, type FFIDSubscriptionStatus as F, FFIDAnnouncementBadge as G, FFIDAnnouncementList as H, type FFIDAnnouncementsError as I, type FFIDAnnouncementsErrorCode as J, type FFIDAnnouncementsServerResponse as K, type ListAnnouncementsOptions as L, type FFIDApiResponseMeta as M, type FFIDCacheConfig as N, type FFIDContextValue as O, type FFIDInquiryAcquisitionSource as P, type FFIDInquiryCategory as Q, type FFIDInquiryCategorySite2026 as R, FFIDInquiryForm as S, type TokenStore as T, type FFIDInquiryFormCategoryItem as U, type FFIDInquiryFormClassNames as V, type FFIDInquiryFormLegalLayout as W, type FFIDInquiryFormOrganization as X, type FFIDInquiryFormPlaceholderContext as Y, type FFIDInquiryFormPrefill as Z, type FFIDInquiryFormProps as _, type FFIDOAuthUserInfoSubscription as a, type FFIDInquiryFormSubmitResult as a0, type FFIDJwtClaims as a1, FFIDLoginButton as a2, type FFIDOAuthUserInfoMemberRole as a3, FFIDOrganizationSwitcher as a4, type FFIDSeatAssignmentClaim as a5, type FFIDSeatAssignmentStatus as a6, type FFIDSeatModel as a7, type FFIDServiceAccessDenialReason as a8, type FFIDServiceAccessFailPolicy as a9, FFIDSubscriptionBadge as aa, FFIDUserMenu as ab, FFID_INQUIRY_ACQUISITION_SOURCES as ac, FFID_INQUIRY_CATEGORIES as ad, FFID_INQUIRY_CATEGORIES_SITE_2026 as ae, type TokenData as af, type UseFFIDAnnouncementsOptions as ag, type UseFFIDAnnouncementsReturn as ah, createTokenStore as ai, isFFIDInquiryAcquisitionSource as aj, isFFIDInquiryCategorySite2026 as ak, useFFIDAnnouncements as al, type FFIDAnnouncementBadgeClassNames as am, type FFIDAnnouncementBadgeProps as an, type FFIDAnnouncementListClassNames as ao, type FFIDAnnouncementListProps as ap, type FFIDLoginButtonProps as aq, type FFIDOrganizationSwitcherClassNames as ar, type FFIDOrganizationSwitcherProps as as, type FFIDSubscriptionBadgeClassNames as at, type FFIDSubscriptionBadgeProps as au, type FFIDUserMenuClassNames as av, type FFIDUserMenuProps as aw, type FFIDPrompt as b, type FFIDConfig as c, type FFIDApiResponse as d, type FFIDSessionResponse as e, type FFIDSignOutResult as f, type FFIDError as g, type FFIDSubscriptionCheckResponse as h, type FFIDCheckServiceAccessParams as i, type FFIDServiceAccessDecision as j, type FFIDAnalyticsConfig as k, type FFIDVerifyAccessTokenOptions as l, type FFIDOAuthUserInfo as m, type FFIDInquiryCreateParams as n, type FFIDInquiryCreateResponse as o, type FFIDAuthMode as p, type FFIDLogger as q, type FFIDCacheAdapter as r, type FFIDUser as s, type FFIDOrganization as t, type FFIDSubscription as u, type FFIDSubscriptionContextValue as v, type FFIDAnnouncementsClientConfig as w, type FFIDAnnouncementsApiResponse as x, type FFIDAnnouncementsLogger as y, type Announcement as z };
@@ -1036,6 +1036,26 @@ type FFIDInquiryCategorySite2026 = (typeof FFID_INQUIRY_CATEGORIES_SITE_2026)[nu
1036
1036
  * parameter) to the canonical union.
1037
1037
  */
1038
1038
  declare const isFFIDInquiryCategorySite2026: (value: string) => value is FFIDInquiryCategorySite2026;
1039
+ /**
1040
+ * Acquisition-source ("how did you first hear about us") survey slugs
1041
+ * accepted by `/api/v1/ext/inquiry` (feelflow-id-platform#4377). Mirrors
1042
+ * feelflow-website-2026 `ACQUISITION_SOURCE_OPTIONS`
1043
+ * (`feelflow-site/src/lib/acquisition-source.ts`); FFID
1044
+ * `src/lib/inquiry/acquisition-sources.ts` is the persistence-side
1045
+ * source of truth.
1046
+ *
1047
+ * Unlike `category`, the server validates this field strictly: a value
1048
+ * outside this list is rejected with `INQUIRY_VALIDATION_ERROR` rather than
1049
+ * stored as-is. Ship a new slug to FFID first, then start sending it.
1050
+ */
1051
+ declare const FFID_INQUIRY_ACQUISITION_SOURCES: readonly ["referral", "generative-ai", "social-media", "networking-event", "web-search", "company-blog", "sales-outreach", "press-release", "web-advertising", "other"];
1052
+ type FFIDInquiryAcquisitionSource = (typeof FFID_INQUIRY_ACQUISITION_SOURCES)[number];
1053
+ /**
1054
+ * Runtime type guard for the acquisition-source allowlist. Use when
1055
+ * narrowing an unknown string (e.g., a URL query parameter or analytics
1056
+ * value) before passing it to `client.inquiry.create()`.
1057
+ */
1058
+ declare const isFFIDInquiryAcquisitionSource: (value: string) => value is FFIDInquiryAcquisitionSource;
1039
1059
  /**
1040
1060
  * Parameters for `client.inquiry.create()`. When submitting from a
1041
1061
  * server-side SDK (Service API Key), set `source` to a stable
@@ -1055,6 +1075,18 @@ interface FFIDInquiryCreateParams {
1055
1075
  name: string;
1056
1076
  message: string;
1057
1077
  category?: FFIDInquiryCategorySite2026 | FFIDInquiryCategory | (string & {});
1078
+ /**
1079
+ * "How did you first hear about us" survey answer (#4377). Optional and
1080
+ * backward compatible — `undefined` and `null` are both normalized to
1081
+ * an omitted key on the wire (`null` is accepted so
1082
+ * `FFIDInquiryFormSubmitData.acquisitionSource` can be forwarded
1083
+ * verbatim) and the row is stored with NULL.
1084
+ * Server-side validation is a strict allowlist (unlike `category`):
1085
+ * values outside {@link FFID_INQUIRY_ACQUISITION_SOURCES} fail with
1086
+ * `INQUIRY_VALIDATION_ERROR`. Narrow untrusted strings with
1087
+ * {@link isFFIDInquiryAcquisitionSource} before submitting.
1088
+ */
1089
+ acquisitionSource?: FFIDInquiryAcquisitionSource | null;
1058
1090
  company?: string;
1059
1091
  phone?: string;
1060
1092
  locale?: 'ja' | 'en';
@@ -1420,6 +1452,15 @@ interface FFIDInquiryFormSubmitData {
1420
1452
  company: string | null;
1421
1453
  phone: string | null;
1422
1454
  category: string;
1455
+ /**
1456
+ * Acquisition-source slug forwarded verbatim from the
1457
+ * `acquisitionSource` prop (#4377). `null` when the consumer does not
1458
+ * collect the survey — existing `onSubmit` handlers that ignore the
1459
+ * field keep working unchanged. Typed as the closed allowlist union so
1460
+ * the payload can be handed to `client.inquiry.create()` without a
1461
+ * re-narrowing cast.
1462
+ */
1463
+ acquisitionSource: FFIDInquiryAcquisitionSource | null;
1423
1464
  message: string;
1424
1465
  organizationId: string | null;
1425
1466
  inquiryFollowupOptIn: boolean;
@@ -1449,6 +1490,19 @@ interface FFIDInquiryFormProps {
1449
1490
  privacyHref?: string;
1450
1491
  /** Must be refreshed by the consumer when the Turnstile widget reissues a token. */
1451
1492
  turnstileToken?: string | null;
1493
+ /**
1494
+ * Acquisition-source survey answer collected by the consumer's own UI
1495
+ * (#4377). The form renders no input for it — like `turnstileToken`,
1496
+ * it is a consumer-controlled value passed through into
1497
+ * `FFIDInquiryFormSubmitData.acquisitionSource` on every submit /
1498
+ * `onChange` broadcast. Typed as the closed
1499
+ * `FFID_INQUIRY_ACQUISITION_SOURCES` union so an invalid slug (e.g. a
1500
+ * display label, or a new value not yet deployed to FFID) fails at the
1501
+ * consumer's compile step instead of rejecting every end-user
1502
+ * submission with `INQUIRY_VALIDATION_ERROR` at runtime. Narrow
1503
+ * untrusted strings with `isFFIDInquiryAcquisitionSource` first.
1504
+ */
1505
+ acquisitionSource?: FFIDInquiryAcquisitionSource | null;
1452
1506
  /** Slot for the consumer's Turnstile widget (anonymous mode only). */
1453
1507
  turnstileSlot?: ReactNode;
1454
1508
  onSubmit: (data: FFIDInquiryFormSubmitData) => Promise<FFIDInquiryFormSubmitResult>;
@@ -1534,6 +1588,6 @@ interface FFIDInquiryFormProps {
1534
1588
  interface FFIDInquiryFormPlaceholderContext {
1535
1589
  category: string | null;
1536
1590
  }
1537
- 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;
1591
+ declare function FFIDInquiryForm({ mode, prefill, organizations, preselectedOrganizationId, categories, termsVersion, privacyVersion, termsHref, privacyHref, turnstileToken, acquisitionSource, turnstileSlot, onSubmit, onChange, legalLayout, messagePlaceholder, requireCategorySelection, unstyled, classNames, locale, className, }: FFIDInquiryFormProps): react_jsx_runtime.JSX.Element;
1538
1592
 
1539
- export { type FFIDInquiryFormSubmitResult as $, type AnnouncementListResponse as A, type AnnouncementStatus as B, type AnnouncementType as C, EFFECTIVE_SUBSCRIPTION_STATUSES as D, type EffectiveSubscriptionStatus as E, type FFIDSubscriptionStatus as F, FFIDAnnouncementBadge as G, FFIDAnnouncementList as H, type FFIDAnnouncementsError as I, type FFIDAnnouncementsErrorCode as J, type FFIDAnnouncementsServerResponse as K, type ListAnnouncementsOptions as L, type FFIDApiResponseMeta as M, type FFIDCacheConfig as N, type FFIDContextValue as O, type FFIDInquiryCategory as P, type FFIDInquiryCategorySite2026 as Q, FFIDInquiryForm as R, type FFIDInquiryFormCategoryItem as S, type TokenStore as T, type FFIDInquiryFormClassNames as U, type FFIDInquiryFormLegalLayout as V, type FFIDInquiryFormOrganization as W, type FFIDInquiryFormPlaceholderContext as X, type FFIDInquiryFormPrefill as Y, type FFIDInquiryFormProps as Z, type FFIDInquiryFormSubmitData as _, type FFIDOAuthUserInfoSubscription as a, type FFIDJwtClaims as a0, FFIDLoginButton as a1, type FFIDOAuthUserInfoMemberRole as a2, FFIDOrganizationSwitcher as a3, type FFIDSeatAssignmentClaim as a4, type FFIDSeatAssignmentStatus as a5, type FFIDSeatModel as a6, type FFIDServiceAccessDenialReason as a7, type FFIDServiceAccessFailPolicy as a8, FFIDSubscriptionBadge as a9, FFIDUserMenu as aa, FFID_INQUIRY_CATEGORIES as ab, FFID_INQUIRY_CATEGORIES_SITE_2026 as ac, type TokenData as ad, type UseFFIDAnnouncementsOptions as ae, type UseFFIDAnnouncementsReturn as af, createTokenStore as ag, isFFIDInquiryCategorySite2026 as ah, useFFIDAnnouncements as ai, type FFIDAnnouncementBadgeClassNames as aj, type FFIDAnnouncementBadgeProps as ak, type FFIDAnnouncementListClassNames as al, type FFIDAnnouncementListProps as am, type FFIDLoginButtonProps as an, type FFIDOrganizationSwitcherClassNames as ao, type FFIDOrganizationSwitcherProps as ap, type FFIDSubscriptionBadgeClassNames as aq, type FFIDSubscriptionBadgeProps as ar, type FFIDUserMenuClassNames as as, type FFIDUserMenuProps as at, type FFIDPrompt as b, type FFIDConfig as c, type FFIDApiResponse as d, type FFIDSessionResponse as e, type FFIDSignOutResult as f, type FFIDError as g, type FFIDSubscriptionCheckResponse as h, type FFIDCheckServiceAccessParams as i, type FFIDServiceAccessDecision as j, type FFIDAnalyticsConfig as k, type FFIDVerifyAccessTokenOptions as l, type FFIDOAuthUserInfo as m, type FFIDInquiryCreateParams as n, type FFIDInquiryCreateResponse as o, type FFIDAuthMode as p, type FFIDLogger as q, type FFIDCacheAdapter as r, type FFIDUser as s, type FFIDOrganization as t, type FFIDSubscription as u, type FFIDSubscriptionContextValue as v, type FFIDAnnouncementsClientConfig as w, type FFIDAnnouncementsApiResponse as x, type FFIDAnnouncementsLogger as y, type Announcement as z };
1593
+ export { type FFIDInquiryFormSubmitData as $, type AnnouncementListResponse as A, type AnnouncementStatus as B, type AnnouncementType as C, EFFECTIVE_SUBSCRIPTION_STATUSES as D, type EffectiveSubscriptionStatus as E, type FFIDSubscriptionStatus as F, FFIDAnnouncementBadge as G, FFIDAnnouncementList as H, type FFIDAnnouncementsError as I, type FFIDAnnouncementsErrorCode as J, type FFIDAnnouncementsServerResponse as K, type ListAnnouncementsOptions as L, type FFIDApiResponseMeta as M, type FFIDCacheConfig as N, type FFIDContextValue as O, type FFIDInquiryAcquisitionSource as P, type FFIDInquiryCategory as Q, type FFIDInquiryCategorySite2026 as R, FFIDInquiryForm as S, type TokenStore as T, type FFIDInquiryFormCategoryItem as U, type FFIDInquiryFormClassNames as V, type FFIDInquiryFormLegalLayout as W, type FFIDInquiryFormOrganization as X, type FFIDInquiryFormPlaceholderContext as Y, type FFIDInquiryFormPrefill as Z, type FFIDInquiryFormProps as _, type FFIDOAuthUserInfoSubscription as a, type FFIDInquiryFormSubmitResult as a0, type FFIDJwtClaims as a1, FFIDLoginButton as a2, type FFIDOAuthUserInfoMemberRole as a3, FFIDOrganizationSwitcher as a4, type FFIDSeatAssignmentClaim as a5, type FFIDSeatAssignmentStatus as a6, type FFIDSeatModel as a7, type FFIDServiceAccessDenialReason as a8, type FFIDServiceAccessFailPolicy as a9, FFIDSubscriptionBadge as aa, FFIDUserMenu as ab, FFID_INQUIRY_ACQUISITION_SOURCES as ac, FFID_INQUIRY_CATEGORIES as ad, FFID_INQUIRY_CATEGORIES_SITE_2026 as ae, type TokenData as af, type UseFFIDAnnouncementsOptions as ag, type UseFFIDAnnouncementsReturn as ah, createTokenStore as ai, isFFIDInquiryAcquisitionSource as aj, isFFIDInquiryCategorySite2026 as ak, useFFIDAnnouncements as al, type FFIDAnnouncementBadgeClassNames as am, type FFIDAnnouncementBadgeProps as an, type FFIDAnnouncementListClassNames as ao, type FFIDAnnouncementListProps as ap, type FFIDLoginButtonProps as aq, type FFIDOrganizationSwitcherClassNames as ar, type FFIDOrganizationSwitcherProps as as, type FFIDSubscriptionBadgeClassNames as at, type FFIDSubscriptionBadgeProps as au, type FFIDUserMenuClassNames as av, type FFIDUserMenuProps as aw, type FFIDPrompt as b, type FFIDConfig as c, type FFIDApiResponse as d, type FFIDSessionResponse as e, type FFIDSignOutResult as f, type FFIDError as g, type FFIDSubscriptionCheckResponse as h, type FFIDCheckServiceAccessParams as i, type FFIDServiceAccessDecision as j, type FFIDAnalyticsConfig as k, type FFIDVerifyAccessTokenOptions as l, type FFIDOAuthUserInfo as m, type FFIDInquiryCreateParams as n, type FFIDInquiryCreateResponse as o, type FFIDAuthMode as p, type FFIDLogger as q, type FFIDCacheAdapter as r, type FFIDUser as s, type FFIDOrganization as t, type FFIDSubscription as u, type FFIDSubscriptionContextValue as v, type FFIDAnnouncementsClientConfig as w, type FFIDAnnouncementsApiResponse as x, type FFIDAnnouncementsLogger as y, type Announcement as z };