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

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.
@@ -3197,6 +3218,8 @@ declare const LOG_HTTP_TRAFFIC: string;
3197
3218
  declare const API_TRAFFIC_OBSERVER: string;
3198
3219
  declare const STARTUP_TELEMETRY: string;
3199
3220
  declare const SIMULATE_CONFIG_FETCH_FAILURE: string;
3221
+ declare const SIMULATE_PAYWALL_FETCH_FAILURE: string;
3222
+ declare const CAMPAIGN_CACHE_TTL_PREFIX: string;
3200
3223
  declare const EXTENDED_PLATFORM: string;
3201
3224
  declare const EXTENDED_PLATFORM_VERSION: string;
3202
3225
  declare const API_MAX_CALLS_LIMIT: number;
@@ -3632,6 +3655,11 @@ declare class InternalServerError extends APIError {
3632
3655
  }
3633
3656
  declare const handleErrors: (status: number, path: string) => void;
3634
3657
 
3658
+ /** Campaign rules as fetched, and whether they came from the network or the stored copy. */
3659
+ type CampaignRulesFetch = {
3660
+ campaigns: NamiCampaign[];
3661
+ fromNetwork: boolean;
3662
+ };
3635
3663
  declare class CampaignRuleRepository {
3636
3664
  currentFormFactor: TDevice;
3637
3665
  splitPosition: number;
@@ -3650,11 +3678,18 @@ declare class CampaignRuleRepository {
3650
3678
  fetchCampaignRules(paywalls: IPaywall[]): Promise<NamiCampaign[]>;
3651
3679
  static extractPaywallUrls(campaigns: NamiCampaign[]): string[];
3652
3680
  static hasPaywallUrls(campaigns: NamiCampaign[]): boolean;
3653
- fetchCampaignRulesRaw(): Promise<NamiCampaign[]>;
3681
+ /**
3682
+ * The campaign rules for this form factor, unvalidated, plus whether they came from the network.
3683
+ * `fromNetwork` is false when the stored rules stood in for a failed fetch (or updates are
3684
+ * disabled): the per-URL body cache must then neither resolve nor evict (NAM-4357).
3685
+ */
3686
+ fetchCampaignRulesRaw(): Promise<CampaignRulesFetch>;
3654
3687
  finalizeCampaignRules(campaignRules: NamiCampaign[], paywalls: IPaywall[]): NamiCampaign[];
3655
3688
  invokeAvailableCampaignsResponseHandler(): void;
3656
3689
  private getAnonymousCampaigns;
3657
3690
  private getCampaigns;
3691
+ private fetchAnonymousCampaigns;
3692
+ private fetchCampaigns;
3658
3693
  private fallbackData;
3659
3694
  }
3660
3695
 
@@ -3742,25 +3777,129 @@ declare class EntitlementRepository {
3742
3777
  }
3743
3778
 
3744
3779
  /**
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.
3780
+ * Per-URL paywall body cache (NAM-4357), the Core/Web port of Apple's and Android's
3781
+ * `NamiPaywallBodyCache` (NAM-4356, NAM-4358). The contract is
3782
+ * `docs/technical-designs/api-resilience-and-caching.md` § 2.2.
3783
+ *
3784
+ * An entry is keyed on the **exact** URL `campaign_rules` delivered and holds the raw response
3785
+ * text, so a cached body goes through the same decode as a fetched one. The cache only stores and
3786
+ * ages entries — which entry is served when is `PaywallRepository.resolvePaywallsByUrls`' call.
3787
+ *
3788
+ * Entries live in the platform storage adapter (localStorage on web, the CLI's file store), and
3789
+ * this is the ONLY copy of the bodies: the aggregate `api_paywalls` records which URLs the last
3790
+ * resolution produced and is rebuilt from these entries (`StorageService.getPaywalls`). Measured
3791
+ * 2026-09-28, NFL Web Prod's largest set is 66 bodies / 2.1 MB, well inside localStorage's ~5 MB;
3792
+ * a second copy beside an aggregate would have doubled that. Under `campaign_cache_ttl == 0`
3793
+ * entries are held in memory instead. Every storage failure degrades to "not cached".
3748
3794
  */
3749
- type CdnFetchResult<T> = {
3750
- data: T;
3751
- retryCount: number;
3795
+ type PaywallBodyMeta = {
3796
+ url: string;
3797
+ /** The URL's `content_hash`, absent for an un-hashed URL. */
3798
+ contentHash?: string;
3799
+ /** Epoch milliseconds at which this entry was stored. */
3800
+ savedAt: number;
3752
3801
  };
3802
+ type PaywallBodyEntry = {
3803
+ meta: PaywallBodyMeta;
3804
+ body: string;
3805
+ };
3806
+ declare class PaywallBodyCache {
3807
+ private readonly storage;
3808
+ readonly maxEntries: number;
3809
+ /** Set under `campaign_cache_ttl == 0`: entries live here, in this process only. */
3810
+ private memory;
3811
+ /** Metadata of every persisted entry, loaded once from the storage adapter. */
3812
+ private index;
3813
+ constructor(storage?: () => IStorageAdapter, maxEntries?: number);
3814
+ get count(): number;
3815
+ /**
3816
+ * Applies `campaign_cache_ttl` at the start of a resolution. `null` keeps everything, `n > 0`
3817
+ * purges entries whose own age is `>= n` seconds, and `0` purges the persistent store and keeps
3818
+ * this process's entries in memory only.
3819
+ */
3820
+ evaluateTtl(ttl: number | null, now?: number): void;
3821
+ /**
3822
+ * The entry stored under this exact URL, or null when there is none, it is past `ttl`, or its
3823
+ * body is missing (a half-written entry, which is deleted here).
3824
+ */
3825
+ validEntry(url: string, ttl: number | null, now?: number): PaywallBodyEntry | null;
3826
+ /**
3827
+ * The stored body for this exact URL, read straight from storage rather than through the index,
3828
+ * with no TTL check. This is what rebuilds the aggregate `api_paywalls`, so it also sees an entry
3829
+ * a host wrote after the index was loaded (the web test apps inject local test paywalls that way).
3830
+ */
3831
+ bodyFor(url: string): string | null;
3832
+ /** Stores a body under its exact URL. Returns false when the write did not land (quota, I/O). */
3833
+ store(url: string, contentHash: string | undefined, body: string, now?: number): boolean;
3834
+ /** Stores a bundled body unless an entry already exists — a body the SDK fetched always wins. */
3835
+ seedIfAbsent(url: string, contentHash: string | undefined, body: string, now?: number): boolean;
3836
+ /** Deletes one entry — used for an undecodable body. Not eviction. */
3837
+ remove(url: string): void;
3838
+ /**
3839
+ * Eviction, run once per resolution after a complete `campaign_rules` fetch: delete every entry
3840
+ * whose URL this resolution did not name, then cap the store at `maxEntries`, oldest first.
3841
+ */
3842
+ reconcile(currentUrls: Set<string>): void;
3843
+ /** Empties the store — persisted and in-memory entries alike. Called by `Nami.reset()`. */
3844
+ purgeAll(): void;
3845
+ /** Builds the index from the metadata keys, clearing away half-written and unreadable entries. */
3846
+ private loadIndex;
3847
+ private dropPersisted;
3848
+ private read;
3849
+ private write;
3850
+ private removeKey;
3851
+ }
3753
3852
 
3853
+ /** Counts for one resolution — the fields of the `Paywall fetch telemetry:` line. */
3854
+ type PaywallResolutionOutcome = {
3855
+ /** Valid paywall objects handed to the caller (`count`). */
3856
+ paywalls: IPaywall[];
3857
+ urls: number;
3858
+ hashed: number;
3859
+ cacheHits: number;
3860
+ /** Network 2xx only; a body served after a failure never counts here. */
3861
+ fetched: number;
3862
+ cacheAfterFetchFailure: number;
3863
+ failed: number;
3864
+ retryCount: number;
3865
+ };
3754
3866
  declare class PaywallRepository {
3867
+ private readonly bodyCache;
3755
3868
  static instance: PaywallRepository;
3869
+ constructor(bodyCache?: PaywallBodyCache);
3756
3870
  fetchPaywalls(): Promise<IPaywall[]>;
3757
3871
  private getAnonymousPaywalls;
3758
3872
  private getPaywalls;
3759
- fetchPaywallByUrl(url: string): Promise<CdnFetchResult<IPaywall>>;
3760
- fetchPaywallsByUrls(urls: string[]): Promise<{
3761
- paywalls: IPaywall[];
3762
- retryCount: number;
3763
- }>;
3873
+ /**
3874
+ * Resolves the URL set named by `campaign_rules` into paywall objects — the decision table of
3875
+ * `api-resilience-and-caching.md` § 2.2, run identically at startup and on `refresh()`:
3876
+ *
3877
+ * | URL | entry for the exact URL within TTL | action | provenance |
3878
+ * |-----------|------------------------------------|-------------------------------|--------------------------|
3879
+ * | hashed | yes | serve it, no request | `cacheHit` |
3880
+ * | hashed | no | fetch; store the 2xx body | `fetched` |
3881
+ * | un-hashed | not consulted | fetch; store the 2xx body | `fetched` |
3882
+ * | either | fetch failed, entry within TTL | serve it, keep it | `cacheAfterFetchFailure` |
3883
+ * | either | fetch failed, no entry | no body | counts `failed` |
3884
+ *
3885
+ * Writes the aggregate `api_paywalls` — as the URLs of every body this resolution produced, since
3886
+ * the bodies themselves are already in the body cache — unless it produced none, so an outage
3887
+ * cannot overwrite a good aggregate with an empty one. Eviction is the caller's: it runs only
3888
+ * after a complete `campaign_rules` fetch.
3889
+ */
3890
+ resolvePaywallsByUrls(urls: string[]): Promise<PaywallResolutionOutcome>;
3891
+ /**
3892
+ * Seeds the body cache from the initial-config bundle (§ 2.2 "Seeding"): every **hashed** bundled
3893
+ * URL whose paywall id matches a bundled body is stored under that exact URL unless an entry
3894
+ * already exists. A hash in a bundled URL was minted against the bundled body, so the pair is
3895
+ * exact. Runs at configure, before the first resolution.
3896
+ */
3897
+ seedFromInitialConfig(campaignRules: NamiAnonymousCampaign[], paywalls: IPaywall[]): void;
3898
+ /** One row of the decision table. Never throws. */
3899
+ private resolvePaywall;
3900
+ /** The stored body for this exact URL, decoded; an undecodable one is deleted (not eviction). */
3901
+ private decodeCached;
3902
+ private fetchPaywallText;
3764
3903
  private validatePaywalls;
3765
3904
  private fallbackData;
3766
3905
  }
@@ -4220,5 +4359,5 @@ declare namespace internal {
4220
4359
  };
4221
4360
  }
4222
4361
 
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 };
4362
+ 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
4363
  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 };