@namiml/sdk-core 3.4.12-dev.202609252349 → 3.4.12-dev.202609281859

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/index.d.ts CHANGED
@@ -1894,6 +1894,11 @@ type ProductGroup = {
1894
1894
  products: PaywallSKU[];
1895
1895
  ref: string;
1896
1896
  };
1897
+ /**
1898
+ * Where a paywall object came from (NAM-4357). `initialConfig` marks bodies bundled with the app,
1899
+ * which never enter the per-URL body cache.
1900
+ */
1901
+ type PaywallFetchSource = 'fetched' | 'cacheHit' | 'cacheAfterFetchFailure' | 'initialConfig';
1897
1902
  interface IPaywall {
1898
1903
  id: string;
1899
1904
  name: string;
@@ -1901,6 +1906,10 @@ interface IPaywall {
1901
1906
  sku_menus: ISkuMenu[];
1902
1907
  template: TPaywallTemplate;
1903
1908
  fonts: FontCollection;
1909
+ /** Runtime only — never written into the aggregate `api_paywalls` cache. */
1910
+ fetchSource?: PaywallFetchSource;
1911
+ /** Runtime only: the `content_hash` of the URL this paywall was resolved for, if it had one. */
1912
+ contentHash?: string;
1904
1913
  }
1905
1914
  interface ISkuMenu {
1906
1915
  id: string;
@@ -2933,6 +2942,13 @@ declare class StorageService {
2933
2942
  setCampaignRules(key: string, campaignRules: NamiCampaign[]): void;
2934
2943
  getCampaignRules(key: string): NamiCampaign[] | null;
2935
2944
  setPaywalls(key: string, paywalls: IPaywall[]): void;
2945
+ /**
2946
+ * Writes the aggregate `api_paywalls` as the list of URLs a per-URL resolution produced, rather
2947
+ * than a second copy of their bodies (NAM-4357): the bodies already live in the per-URL body
2948
+ * cache, and `getPaywalls(API_PAYWALLS)` rebuilds the paywall objects from it. The legacy bulk
2949
+ * path still writes whole objects through `setPaywalls`.
2950
+ */
2951
+ setApiPaywallsFromBodyCache(urls: string[]): void;
2936
2952
  getPaywalls(key: string): IPaywall[] | null;
2937
2953
  setActiveEntitlements(key: string, entitlements: IEntitlements[]): void;
2938
2954
  getActiveEntitlements(key: string): IEntitlements[];
@@ -2983,7 +2999,12 @@ declare class StorageService {
2983
2999
  setApiCampaignSessionTimestamp(): void;
2984
3000
  getApiCampaignSessionTimestamp(): number | null;
2985
3001
  purgeApiCampaignCache(): void;
2986
- private getCampaignCacheTtl;
3002
+ /**
3003
+ * The effective `campaign_cache_ttl`: a `campaignCacheTTL=<n>` namiCommand first, then the API
3004
+ * config, then the initial config. Lives here rather than in `utils/config` because this service
3005
+ * needs it to decide where the aggregate caches go, and `utils/config` already imports this one.
3006
+ */
3007
+ getCampaignCacheTtl(): number | null;
2987
3008
  private isLegacyTimestampedCache;
2988
3009
  /**
2989
3010
  * Set an item in localStorage.
@@ -3132,6 +3153,12 @@ type Session = {
3132
3153
  };
3133
3154
  type Impression = {
3134
3155
  id?: string;
3156
+ /**
3157
+ * When the page was presented, as an ISO-8601 string. Distinct from when the request is sent:
3158
+ * the POST is retried on failure, so arrival time would date a retried page view by its last
3159
+ * attempt and file it in the wrong reporting period (NAM-4421 / NAM-4419).
3160
+ */
3161
+ impression_date?: string;
3135
3162
  session?: string;
3136
3163
  segment?: string;
3137
3164
  call_to_action?: string;
@@ -3197,6 +3224,8 @@ declare const LOG_HTTP_TRAFFIC: string;
3197
3224
  declare const API_TRAFFIC_OBSERVER: string;
3198
3225
  declare const STARTUP_TELEMETRY: string;
3199
3226
  declare const SIMULATE_CONFIG_FETCH_FAILURE: string;
3227
+ declare const SIMULATE_PAYWALL_FETCH_FAILURE: string;
3228
+ declare const CAMPAIGN_CACHE_TTL_PREFIX: string;
3200
3229
  declare const EXTENDED_PLATFORM: string;
3201
3230
  declare const EXTENDED_PLATFORM_VERSION: string;
3202
3231
  declare const API_MAX_CALLS_LIMIT: number;
@@ -3632,6 +3661,11 @@ declare class InternalServerError extends APIError {
3632
3661
  }
3633
3662
  declare const handleErrors: (status: number, path: string) => void;
3634
3663
 
3664
+ /** Campaign rules as fetched, and whether they came from the network or the stored copy. */
3665
+ type CampaignRulesFetch = {
3666
+ campaigns: NamiCampaign[];
3667
+ fromNetwork: boolean;
3668
+ };
3635
3669
  declare class CampaignRuleRepository {
3636
3670
  currentFormFactor: TDevice;
3637
3671
  splitPosition: number;
@@ -3650,11 +3684,18 @@ declare class CampaignRuleRepository {
3650
3684
  fetchCampaignRules(paywalls: IPaywall[]): Promise<NamiCampaign[]>;
3651
3685
  static extractPaywallUrls(campaigns: NamiCampaign[]): string[];
3652
3686
  static hasPaywallUrls(campaigns: NamiCampaign[]): boolean;
3653
- fetchCampaignRulesRaw(): Promise<NamiCampaign[]>;
3687
+ /**
3688
+ * The campaign rules for this form factor, unvalidated, plus whether they came from the network.
3689
+ * `fromNetwork` is false when the stored rules stood in for a failed fetch (or updates are
3690
+ * disabled): the per-URL body cache must then neither resolve nor evict (NAM-4357).
3691
+ */
3692
+ fetchCampaignRulesRaw(): Promise<CampaignRulesFetch>;
3654
3693
  finalizeCampaignRules(campaignRules: NamiCampaign[], paywalls: IPaywall[]): NamiCampaign[];
3655
3694
  invokeAvailableCampaignsResponseHandler(): void;
3656
3695
  private getAnonymousCampaigns;
3657
3696
  private getCampaigns;
3697
+ private fetchAnonymousCampaigns;
3698
+ private fetchCampaigns;
3658
3699
  private fallbackData;
3659
3700
  }
3660
3701
 
@@ -3742,25 +3783,129 @@ declare class EntitlementRepository {
3742
3783
  }
3743
3784
 
3744
3785
  /**
3745
- * Result of a single per-paywall CDN fetch — carries the parsed body
3746
- * alongside the number of retries it took to land. Aggregated upstream
3747
- * by PaywallRepository.fetchPaywallsByUrls and surfaced in telemetry.
3786
+ * Per-URL paywall body cache (NAM-4357), the Core/Web port of Apple's and Android's
3787
+ * `NamiPaywallBodyCache` (NAM-4356, NAM-4358). The contract is
3788
+ * `docs/technical-designs/api-resilience-and-caching.md` § 2.2.
3789
+ *
3790
+ * An entry is keyed on the **exact** URL `campaign_rules` delivered and holds the raw response
3791
+ * text, so a cached body goes through the same decode as a fetched one. The cache only stores and
3792
+ * ages entries — which entry is served when is `PaywallRepository.resolvePaywallsByUrls`' call.
3793
+ *
3794
+ * Entries live in the platform storage adapter (localStorage on web, the CLI's file store), and
3795
+ * this is the ONLY copy of the bodies: the aggregate `api_paywalls` records which URLs the last
3796
+ * resolution produced and is rebuilt from these entries (`StorageService.getPaywalls`). Measured
3797
+ * 2026-09-28, NFL Web Prod's largest set is 66 bodies / 2.1 MB, well inside localStorage's ~5 MB;
3798
+ * a second copy beside an aggregate would have doubled that. Under `campaign_cache_ttl == 0`
3799
+ * entries are held in memory instead. Every storage failure degrades to "not cached".
3748
3800
  */
3749
- type CdnFetchResult<T> = {
3750
- data: T;
3751
- retryCount: number;
3801
+ type PaywallBodyMeta = {
3802
+ url: string;
3803
+ /** The URL's `content_hash`, absent for an un-hashed URL. */
3804
+ contentHash?: string;
3805
+ /** Epoch milliseconds at which this entry was stored. */
3806
+ savedAt: number;
3807
+ };
3808
+ type PaywallBodyEntry = {
3809
+ meta: PaywallBodyMeta;
3810
+ body: string;
3752
3811
  };
3812
+ declare class PaywallBodyCache {
3813
+ private readonly storage;
3814
+ readonly maxEntries: number;
3815
+ /** Set under `campaign_cache_ttl == 0`: entries live here, in this process only. */
3816
+ private memory;
3817
+ /** Metadata of every persisted entry, loaded once from the storage adapter. */
3818
+ private index;
3819
+ constructor(storage?: () => IStorageAdapter, maxEntries?: number);
3820
+ get count(): number;
3821
+ /**
3822
+ * Applies `campaign_cache_ttl` at the start of a resolution. `null` keeps everything, `n > 0`
3823
+ * purges entries whose own age is `>= n` seconds, and `0` purges the persistent store and keeps
3824
+ * this process's entries in memory only.
3825
+ */
3826
+ evaluateTtl(ttl: number | null, now?: number): void;
3827
+ /**
3828
+ * The entry stored under this exact URL, or null when there is none, it is past `ttl`, or its
3829
+ * body is missing (a half-written entry, which is deleted here).
3830
+ */
3831
+ validEntry(url: string, ttl: number | null, now?: number): PaywallBodyEntry | null;
3832
+ /**
3833
+ * The stored body for this exact URL, read straight from storage rather than through the index,
3834
+ * with no TTL check. This is what rebuilds the aggregate `api_paywalls`, so it also sees an entry
3835
+ * a host wrote after the index was loaded (the web test apps inject local test paywalls that way).
3836
+ */
3837
+ bodyFor(url: string): string | null;
3838
+ /** Stores a body under its exact URL. Returns false when the write did not land (quota, I/O). */
3839
+ store(url: string, contentHash: string | undefined, body: string, now?: number): boolean;
3840
+ /** Stores a bundled body unless an entry already exists — a body the SDK fetched always wins. */
3841
+ seedIfAbsent(url: string, contentHash: string | undefined, body: string, now?: number): boolean;
3842
+ /** Deletes one entry — used for an undecodable body. Not eviction. */
3843
+ remove(url: string): void;
3844
+ /**
3845
+ * Eviction, run once per resolution after a complete `campaign_rules` fetch: delete every entry
3846
+ * whose URL this resolution did not name, then cap the store at `maxEntries`, oldest first.
3847
+ */
3848
+ reconcile(currentUrls: Set<string>): void;
3849
+ /** Empties the store — persisted and in-memory entries alike. Called by `Nami.reset()`. */
3850
+ purgeAll(): void;
3851
+ /** Builds the index from the metadata keys, clearing away half-written and unreadable entries. */
3852
+ private loadIndex;
3853
+ private dropPersisted;
3854
+ private read;
3855
+ private write;
3856
+ private removeKey;
3857
+ }
3753
3858
 
3859
+ /** Counts for one resolution — the fields of the `Paywall fetch telemetry:` line. */
3860
+ type PaywallResolutionOutcome = {
3861
+ /** Valid paywall objects handed to the caller (`count`). */
3862
+ paywalls: IPaywall[];
3863
+ urls: number;
3864
+ hashed: number;
3865
+ cacheHits: number;
3866
+ /** Network 2xx only; a body served after a failure never counts here. */
3867
+ fetched: number;
3868
+ cacheAfterFetchFailure: number;
3869
+ failed: number;
3870
+ retryCount: number;
3871
+ };
3754
3872
  declare class PaywallRepository {
3873
+ private readonly bodyCache;
3755
3874
  static instance: PaywallRepository;
3875
+ constructor(bodyCache?: PaywallBodyCache);
3756
3876
  fetchPaywalls(): Promise<IPaywall[]>;
3757
3877
  private getAnonymousPaywalls;
3758
3878
  private getPaywalls;
3759
- fetchPaywallByUrl(url: string): Promise<CdnFetchResult<IPaywall>>;
3760
- fetchPaywallsByUrls(urls: string[]): Promise<{
3761
- paywalls: IPaywall[];
3762
- retryCount: number;
3763
- }>;
3879
+ /**
3880
+ * Resolves the URL set named by `campaign_rules` into paywall objects — the decision table of
3881
+ * `api-resilience-and-caching.md` § 2.2, run identically at startup and on `refresh()`:
3882
+ *
3883
+ * | URL | entry for the exact URL within TTL | action | provenance |
3884
+ * |-----------|------------------------------------|-------------------------------|--------------------------|
3885
+ * | hashed | yes | serve it, no request | `cacheHit` |
3886
+ * | hashed | no | fetch; store the 2xx body | `fetched` |
3887
+ * | un-hashed | not consulted | fetch; store the 2xx body | `fetched` |
3888
+ * | either | fetch failed, entry within TTL | serve it, keep it | `cacheAfterFetchFailure` |
3889
+ * | either | fetch failed, no entry | no body | counts `failed` |
3890
+ *
3891
+ * Writes the aggregate `api_paywalls` — as the URLs of every body this resolution produced, since
3892
+ * the bodies themselves are already in the body cache — unless it produced none, so an outage
3893
+ * cannot overwrite a good aggregate with an empty one. Eviction is the caller's: it runs only
3894
+ * after a complete `campaign_rules` fetch.
3895
+ */
3896
+ resolvePaywallsByUrls(urls: string[]): Promise<PaywallResolutionOutcome>;
3897
+ /**
3898
+ * Seeds the body cache from the initial-config bundle (§ 2.2 "Seeding"): every **hashed** bundled
3899
+ * URL whose paywall id matches a bundled body is stored under that exact URL unless an entry
3900
+ * already exists. A hash in a bundled URL was minted against the bundled body, so the pair is
3901
+ * exact. Runs at configure, before the first resolution.
3902
+ */
3903
+ seedFromInitialConfig(campaignRules: NamiAnonymousCampaign[], paywalls: IPaywall[]): void;
3904
+ /** One row of the decision table. Never throws. */
3905
+ private resolvePaywall;
3906
+ /** The stored body for this exact URL, decoded; an undecodable one is deleted (not eviction). */
3907
+ private decodeCached;
3908
+ private fetchPaywallText;
3764
3909
  private validatePaywalls;
3765
3910
  private fallbackData;
3766
3911
  }
@@ -4220,5 +4365,5 @@ declare namespace internal {
4220
4365
  };
4221
4366
  }
4222
4367
 
4223
- export { ALREADY_CONFIGURED, ANONYMOUS_MODE, ANONYMOUS_MODE_ALREADY_OFF, ANONYMOUS_MODE_ALREADY_ON, ANONYMOUS_MODE_LOGIN_NOT_ALLOWED, ANONYMOUS_UUID, APIError, API_ACTIVE_ENTITLEMENTS, API_CAMPAIGN_RULES, API_CAMPAIGN_SESSION_TIMESTAMP, API_CONFIG, API_MAX_CALLS_LIMIT, API_PAYWALLS, API_PRODUCTS, API_RETRY_DELAY_SEC, API_TIMEOUT_LIMIT, API_TRAFFIC_OBSERVER, API_VERSION, AUTH_DEVICE, AVAILABLE_ACTIVE_ENTITLEMENTS_CHANGED, AVAILABLE_CAMPAIGNS_CHANGED, AccountStateAction, AnonymousCDPError, AnonymousLoginError, AnonymousModeAlreadyOffError, AnonymousModeAlreadyOnError, BASE_STAGING_URL, BASE_URL, BASE_URL_PATH, BadRequestError, BasicNamiFlow, BorderMap, BorderSideMap, CAMPAIGN_NOT_AVAILABLE, CONFIG_API_TIMEOUT_LIMIT, CONFIG_MAX_ATTEMPTS, CUSTOMER_ATTRIBUTES_KEY_PREFIX, CUSTOMER_JOURNEY_STATE_CHANGED, CUSTOM_HOST_PREFIX, CampaignNotAvailableError, CampaignRuleConversionEventType, CampaignRuleRepository, Capabilities, ClientError, ConfigRepository, ConflictError, CustomerJourneyRepository, DEFAULT_JOURNEY_SETTINGS, DEVELOPMENT, DEVICE_API_TIMEOUT_LIMIT, DEVICE_ID_NOT_SET, DEVICE_ID_REQUIRED, DISABLE_ASYNC_LOGIN_LOGOUT, DeviceIDRequiredError, DeviceRepository, EXTENDED_CLIENT_INFO_DELIMITER, EXTENDED_CLIENT_INFO_PREFIX, EXTENDED_PLATFORM, EXTENDED_PLATFORM_VERSION, EXTERNAL_ID_REQUIRED, EntitlementRepository, EntitlementUtils, ExternalIDRequiredError, FLOW_SCREENS_NOT_AVAILABLE, FlowScreensNotAvailableError, HTML_REGEX, INITIAL_APP_CONFIG, INITIAL_CAMPAIGN_RULES, INITIAL_PAYWALLS, INITIAL_PRODUCTS, INITIAL_SESSION_COUNTER_VALUE, INITIAL_SUCCESS, InternalServerError, KEY_SESSION_COUNTER, LIQUID_VARIABLE_REGEX, LOCAL_NAMI_ENTITLEMENTS, LOG_HTTP_REQUESTS, LOG_HTTP_TRAFFIC, LaunchCampaignError, LaunchContextResolver, LogLevel, NAMI_CONFIGURATION, NAMI_CUSTOMER_JOURNEY_STATE, NAMI_LANGUAGE_CODE, NAMI_LAST_IMPRESSION_ID, NAMI_LAUNCH_ID, NAMI_PROFILE, NAMI_PURCHASE_CHANNEL, NAMI_PURCHASE_IMPRESSION_ID, NAMI_SDK_PACKAGE_VERSION, NAMI_SDK_VERSION, NAMI_SESSION_ID, NAMI_STORAGE_KEYS, Nami, NamiAPI, NamiAnimationType, NamiCampaignManager$2 as NamiCampaignManager, NamiCampaignRuleType, NamiConditionEvaluator, NamiCustomerManager$2 as NamiCustomerManager, NamiEntitlementManager$2 as NamiEntitlementManager, NamiEventEmitter, NamiFlow, NamiFlowActionFunction, NamiFlowManager$1 as NamiFlowManager, NamiFlowStepType, NamiHandoffTag, NamiPaywallAction, NamiPaywallManager$2 as NamiPaywallManager, PaywallManagerEvents as NamiPaywallManagerEvents, NamiPermissionOutcome, NamiPurchaseManager$2 as NamiPurchaseManager, NamiRefs, NamiReservedActions, NotFoundError, PAYWALL_ACTION_EVENT, PLATFORM_ID_REQUIRED, PRODUCTION, PaywallManagerEvents, PaywallRepository, PaywallState, PlacementLabelResolver, PlatformIDRequiredError, ProductRepository, RECONFIG_SUCCESS, RESUME_THROTTLE_MS, RetryLimitExceededError, SDKNotInitializedError, SDK_NOT_INITIALIZED, SERVER_NAMI_ENTITLEMENTS, SESSION_REQUIRED, SHOULD_SHOW_LOADING_INDICATOR, SIMULATE_CONFIG_FETCH_FAILURE, SKU_TEXT_REGEX, SMART_TEXT_PATTERN, STARTUP_TELEMETRY, STATUS_BAD_REQUEST, STATUS_CONFLICT, STATUS_INTERNAL_SERVER_ERROR, STATUS_NOT_FOUND, STATUS_SUCCESS, SessionService, SimpleEventTarget, StorageService, TRANSPORT_FAILURE_STATUS, UNABLE_TO_UPDATE_CDP_ID, USE_STAGING_API, VALIDATE_PRODUCT_GROUPS, VAR_REGEX, NamiProfileManager$1 as _NamiProfileManager, internal as _internal, activateEntitlementByPurchase, activeEntitlements, aggregateScreenreaderText, allCampaigns, allPaywalls, applyEntitlementActivation, audienceSplitPosition, bestUrlCampaignMatch, bigintToUuid, checkAnySkuHasPromoOffer, checkAnySkuHasTrialOffer, convertISO8601PeriodToText, convertLocale, convertOfferToPricingPhase, createNamiEntitlements, currentSku, didReceiveResponse, empty, extractStandardPricingPhases, formatDate, formattedPrice, generateUUID, getApiCampaigns, getApiPaywalls, getBaseUrl, getBillingPeriodNumber, getCurrencyFormat, getDeviceData, getDeviceFormFactor, getDeviceScaleFactor, getEffectiveWebStyle, getEntitlementRefIdsForSku, getExtendedClientInfo, getFreeTrialPeriod, getInitialCampaigns, getInitialPaywalls, getJourneySettings, getPaywall, getPaywallDataFromLabel, getPercentagePriceDifference, getPeriodNumberInDays, getPeriodNumberInWeeks, getPlatformAdapters, getPriceDifference, getPricePerMonth, getProductDetail, getPurchaseAdapter, getReferenceSku, getSkuProductDetailKeys, getSkuSmartTextValue, getSlideSmartTextValue, getStandardBillingPeriod, getTranslate, getUrlParams, handleErrors, hasAllPaywalls, hasCapability, hasPurchaseManagement, initialState, invokeHandler, isAnonymousMode, isInitialConfigCompressed, isNamiFlowCampaign, isSubscription, isValidISODate, isValidUrl, logger, mapAnonymousCampaigns, namiBuySKU, normalizeLaunchContext, parseToSemver, postConversion, productDetail, registerAPITrafficObserver, registerPlatformAdapters, registerPurchaseAdapter, resolveLoopSource, selectSegment, setActiveNamiEntitlements, shouldValidateProductGroups, skuItems, skuMapFromEntitlements, storageService, toDouble, toNamiEntitlements, toNamiSKU, tryParseB64Gzip, tryParseJson, updateRelatedSKUsForNamiEntitlement, uuidFromSplitPosition, validateForm, validateMinSDKVersion, validateTextInput };
4368
+ export { ALREADY_CONFIGURED, ANONYMOUS_MODE, ANONYMOUS_MODE_ALREADY_OFF, ANONYMOUS_MODE_ALREADY_ON, ANONYMOUS_MODE_LOGIN_NOT_ALLOWED, ANONYMOUS_UUID, APIError, API_ACTIVE_ENTITLEMENTS, API_CAMPAIGN_RULES, API_CAMPAIGN_SESSION_TIMESTAMP, API_CONFIG, API_MAX_CALLS_LIMIT, API_PAYWALLS, API_PRODUCTS, API_RETRY_DELAY_SEC, API_TIMEOUT_LIMIT, API_TRAFFIC_OBSERVER, API_VERSION, AUTH_DEVICE, AVAILABLE_ACTIVE_ENTITLEMENTS_CHANGED, AVAILABLE_CAMPAIGNS_CHANGED, AccountStateAction, AnonymousCDPError, AnonymousLoginError, AnonymousModeAlreadyOffError, AnonymousModeAlreadyOnError, BASE_STAGING_URL, BASE_URL, BASE_URL_PATH, BadRequestError, BasicNamiFlow, BorderMap, BorderSideMap, CAMPAIGN_CACHE_TTL_PREFIX, CAMPAIGN_NOT_AVAILABLE, CONFIG_API_TIMEOUT_LIMIT, CONFIG_MAX_ATTEMPTS, CUSTOMER_ATTRIBUTES_KEY_PREFIX, CUSTOMER_JOURNEY_STATE_CHANGED, CUSTOM_HOST_PREFIX, CampaignNotAvailableError, CampaignRuleConversionEventType, CampaignRuleRepository, Capabilities, ClientError, ConfigRepository, ConflictError, CustomerJourneyRepository, DEFAULT_JOURNEY_SETTINGS, DEVELOPMENT, DEVICE_API_TIMEOUT_LIMIT, DEVICE_ID_NOT_SET, DEVICE_ID_REQUIRED, DISABLE_ASYNC_LOGIN_LOGOUT, DeviceIDRequiredError, DeviceRepository, EXTENDED_CLIENT_INFO_DELIMITER, EXTENDED_CLIENT_INFO_PREFIX, EXTENDED_PLATFORM, EXTENDED_PLATFORM_VERSION, EXTERNAL_ID_REQUIRED, EntitlementRepository, EntitlementUtils, ExternalIDRequiredError, FLOW_SCREENS_NOT_AVAILABLE, FlowScreensNotAvailableError, HTML_REGEX, INITIAL_APP_CONFIG, INITIAL_CAMPAIGN_RULES, INITIAL_PAYWALLS, INITIAL_PRODUCTS, INITIAL_SESSION_COUNTER_VALUE, INITIAL_SUCCESS, InternalServerError, KEY_SESSION_COUNTER, LIQUID_VARIABLE_REGEX, LOCAL_NAMI_ENTITLEMENTS, LOG_HTTP_REQUESTS, LOG_HTTP_TRAFFIC, LaunchCampaignError, LaunchContextResolver, LogLevel, NAMI_CONFIGURATION, NAMI_CUSTOMER_JOURNEY_STATE, NAMI_LANGUAGE_CODE, NAMI_LAST_IMPRESSION_ID, NAMI_LAUNCH_ID, NAMI_PROFILE, NAMI_PURCHASE_CHANNEL, NAMI_PURCHASE_IMPRESSION_ID, NAMI_SDK_PACKAGE_VERSION, NAMI_SDK_VERSION, NAMI_SESSION_ID, NAMI_STORAGE_KEYS, Nami, NamiAPI, NamiAnimationType, NamiCampaignManager$2 as NamiCampaignManager, NamiCampaignRuleType, NamiConditionEvaluator, NamiCustomerManager$2 as NamiCustomerManager, NamiEntitlementManager$2 as NamiEntitlementManager, NamiEventEmitter, NamiFlow, NamiFlowActionFunction, NamiFlowManager$1 as NamiFlowManager, NamiFlowStepType, NamiHandoffTag, NamiPaywallAction, NamiPaywallManager$2 as NamiPaywallManager, PaywallManagerEvents as NamiPaywallManagerEvents, NamiPermissionOutcome, NamiPurchaseManager$2 as NamiPurchaseManager, NamiRefs, NamiReservedActions, NotFoundError, PAYWALL_ACTION_EVENT, PLATFORM_ID_REQUIRED, PRODUCTION, PaywallManagerEvents, PaywallRepository, PaywallState, PlacementLabelResolver, PlatformIDRequiredError, ProductRepository, RECONFIG_SUCCESS, RESUME_THROTTLE_MS, RetryLimitExceededError, SDKNotInitializedError, SDK_NOT_INITIALIZED, SERVER_NAMI_ENTITLEMENTS, SESSION_REQUIRED, SHOULD_SHOW_LOADING_INDICATOR, SIMULATE_CONFIG_FETCH_FAILURE, SIMULATE_PAYWALL_FETCH_FAILURE, SKU_TEXT_REGEX, SMART_TEXT_PATTERN, STARTUP_TELEMETRY, STATUS_BAD_REQUEST, STATUS_CONFLICT, STATUS_INTERNAL_SERVER_ERROR, STATUS_NOT_FOUND, STATUS_SUCCESS, SessionService, SimpleEventTarget, StorageService, TRANSPORT_FAILURE_STATUS, UNABLE_TO_UPDATE_CDP_ID, USE_STAGING_API, VALIDATE_PRODUCT_GROUPS, VAR_REGEX, NamiProfileManager$1 as _NamiProfileManager, internal as _internal, activateEntitlementByPurchase, activeEntitlements, aggregateScreenreaderText, allCampaigns, allPaywalls, applyEntitlementActivation, audienceSplitPosition, bestUrlCampaignMatch, bigintToUuid, checkAnySkuHasPromoOffer, checkAnySkuHasTrialOffer, convertISO8601PeriodToText, convertLocale, convertOfferToPricingPhase, createNamiEntitlements, currentSku, didReceiveResponse, empty, extractStandardPricingPhases, formatDate, formattedPrice, generateUUID, getApiCampaigns, getApiPaywalls, getBaseUrl, getBillingPeriodNumber, getCurrencyFormat, getDeviceData, getDeviceFormFactor, getDeviceScaleFactor, getEffectiveWebStyle, getEntitlementRefIdsForSku, getExtendedClientInfo, getFreeTrialPeriod, getInitialCampaigns, getInitialPaywalls, getJourneySettings, getPaywall, getPaywallDataFromLabel, getPercentagePriceDifference, getPeriodNumberInDays, getPeriodNumberInWeeks, getPlatformAdapters, getPriceDifference, getPricePerMonth, getProductDetail, getPurchaseAdapter, getReferenceSku, getSkuProductDetailKeys, getSkuSmartTextValue, getSlideSmartTextValue, getStandardBillingPeriod, getTranslate, getUrlParams, handleErrors, hasAllPaywalls, hasCapability, hasPurchaseManagement, initialState, invokeHandler, isAnonymousMode, isInitialConfigCompressed, isNamiFlowCampaign, isSubscription, isValidISODate, isValidUrl, logger, mapAnonymousCampaigns, namiBuySKU, normalizeLaunchContext, parseToSemver, postConversion, productDetail, registerAPITrafficObserver, registerPlatformAdapters, registerPurchaseAdapter, resolveLoopSource, selectSegment, setActiveNamiEntitlements, shouldValidateProductGroups, skuItems, skuMapFromEntitlements, storageService, toDouble, toNamiEntitlements, toNamiSKU, tryParseB64Gzip, tryParseJson, updateRelatedSKUsForNamiEntitlement, uuidFromSplitPosition, validateForm, validateMinSDKVersion, validateTextInput };
4224
4369
  export type { AccountStateHandler$1 as AccountStateHandler, AlignmentType, AmazonProduct, ApiResponse, AppleProduct, AvailableCampaignsResponseHandler, BorderLocationType, BorderSideType, Callback$1 as Callback, CloseHandler, CustomerJourneyState, DeepLinkUrlHandler, Device, DevicePayload, DeviceProfile, DirectionType, ExtendedPlatformInfo, FlexDirectionObject, FlowNavigationOptions, FontCollection, FontDetails, FormFactor, FormFieldValidator, GoogleProduct, IConfig, IDeviceAdapter, IEntitlements$1 as IEntitlements, IPaywall, IPlatformAdapters, IProductsWithComponents, IPurchaseAdapter, ISkuMenu, IStorageAdapter, IUIAdapter, Impression, InitialConfig, InitialConfigCompressed, InitiateStateGroup, JourneySettings, LoginResponse, NamiAPITrafficKind, NamiAPITrafficObserver, NamiAPITrafficRecord, NamiAnimation, NamiAnimationObjectSpec, NamiAnimationSpec, NamiAnonymousCampaign, NamiAppSuppliedVideoDetails, NamiCampaign, NamiCampaignManagerStatic, NamiCampaignSegment, NamiCompletionResult, NamiConfiguration, NamiConfigurationState, NamiCustomAttributeValue, NamiCustomerManagerStatic, NamiEntitlement$1 as NamiEntitlement, NamiEntitlementManagerStatic, NamiFlowAction, NamiFlowAnimation, NamiFlowCampaign, NamiFlowCompletionCondition, NamiFlowDTO, NamiFlowEventHandler, NamiFlowHandoffStepHandler, NamiFlowManagerStatic, NamiFlowObjectDTO, NamiFlowOn, NamiFlowStep, NamiFlowTransition, NamiFlowTransitionDirection, NamiFlowWithObject, NamiHandoffAttributeValue, NamiHandoffComplete, NamiHandoffOutcome, NamiHandoffTagValue, NamiInitialConfig, NamiKnownHandoffTag, NamiLanguageCodes, NamiLogLevel, NamiLoginSuccess, NamiPaywallActionHandler, NamiPaywallComponentChange, NamiPaywallEvent, NamiPaywallEventVideoMetadata, NamiPaywallLaunchContext, NamiPaywallManagerStatic, NamiPresentationStyle, NamiProductDetails, NamiProductOffer, NamiProfile, NamiPurchase, NamiPurchaseCompleteResult, NamiPurchaseDetails, NamiPurchaseManagerStatic, NamiPurchaseSuccess, NamiPurchasesState, NamiSKU, NamiSKUType, NamiSubscriptionInterval, NamiSubscriptionPeriod, NamiUserDataEnvelope, None, NoneSpec, PaywallActionEvent, PaywallHandle, PaywallResultHandler, PaywallSKU, PricingPhase, ProductGroup, Pulse, PulseSpec, PurchaseContext, PurchaseResult, PurchaseValidationRequest, SKU, SKUActionHandler, ScreenInfo, Session, TBaseComponent, TButtonContainer, TCarouselContainer, TCarouselSlide, TCarouselSlidesState, TCollapseContainer, TComponent, TConditionalAttributes, TConditionalComponent, TContainer, TContainerPosition, TCountdownTimerTextComponent, TDevice, TDisabledButton, TField, TFieldSettings, TFlexProductContainer, THeaderFooter, TImageComponent, TInitialState, TMediaTypes, TOffer, TPages, TPaywallContext, TPaywallLaunchContext, TPaywallMedia, TPaywallTemplate, TPlayPauseButton, TProductContainer, TProductGroup, TProgressBarComponent, TProgressIndicatorComponent, TQRCodeComponent, TRadioButton, TRepeatingGrid, TResponsiveGrid, TSegmentPicker, TSegmentPickerItem, TSemverObj, TSlot, TSlotGroupSelector, TSpacerComponent, TStack, TSvgImageComponent, TSymbolComponent, TTestObject, TTextComponent, TTextInputComponent, TTextInputType, TTextLikeComponent, TTextListComponent, TTimelineRail, TToggleButtonComponent, TToggleSwitch, TVariablePattern, TVideoComponent, TVolumeButton, TimerState, TransactionRequest, UserAction, UserActionParameters, Wave, WaveSpec };