UNPKG

jinaga

Version:

Data management for web and mobile applications.

124 lines 5.24 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.JinagaBrowser = void 0; const authentication_noop_1 = require("./authentication/authentication-noop"); const authentication_offline_1 = require("./authentication/authentication-offline"); const authentication_web_client_1 = require("./authentication/authentication-web-client"); const pass_through_fork_1 = require("./fork/pass-through-fork"); const persistent_fork_1 = require("./fork/persistent-fork"); const transient_fork_1 = require("./fork/transient-fork"); const fetch_1 = require("./http/fetch"); const httpNetwork_1 = require("./http/httpNetwork"); const web_client_1 = require("./http/web-client"); const indexeddb_login_store_1 = require("./indexeddb/indexeddb-login-store"); const indexeddb_queue_1 = require("./indexeddb/indexeddb-queue"); const indexeddb_store_1 = require("./indexeddb/indexeddb-store"); const jinaga_1 = require("./jinaga"); const factManager_1 = require("./managers/factManager"); const NetworkManager_1 = require("./managers/NetworkManager"); const memory_store_1 = require("./memory/memory-store"); const observable_1 = require("./observable/observable"); const purgeConditions_1 = require("./purge/purgeConditions"); const validate_1 = require("./purge/validate"); class JinagaBrowser { static create(config) { const store = createStore(config); const observableSource = new observable_1.ObservableSource(store); const syncStatusNotifier = new web_client_1.SyncStatusNotifier(); const webClient = createWebClient(config, syncStatusNotifier); const fork = createFork(config, store, webClient); const authentication = createAuthentication(config, webClient); const network = createNetwork(webClient); const purgeConditions = createPurgeConditions(config); const factManager = new factManager_1.FactManager(fork, observableSource, store, network, purgeConditions, config.feedRefreshIntervalSeconds); return new jinaga_1.Jinaga(authentication, factManager, syncStatusNotifier); } } exports.JinagaBrowser = JinagaBrowser; function createStore(config) { if (config.indexedDb) { return new indexeddb_store_1.IndexedDBStore(config.indexedDb); } else { return new memory_store_1.MemoryStore(); } } function createWebClient(config, syncStatusNotifier) { if (config.httpEndpoint) { const provider = config.httpAuthenticationProvider; const getHeaders = provider ? () => provider.getHeaders() : () => Promise.resolve({}); const reauthenticate = provider ? () => provider.reauthenticate() : () => Promise.resolve(false); const httpConnection = new fetch_1.FetchConnection(config.httpEndpoint, getHeaders, reauthenticate); const httpTimeoutSeconds = config.httpTimeoutSeconds || 30; const webClient = new web_client_1.WebClient(httpConnection, syncStatusNotifier, { timeoutSeconds: httpTimeoutSeconds }); return webClient; } else { return null; } } function createFork(config, store, webClient) { if (webClient) { if (config.indexedDb) { const queue = new indexeddb_queue_1.IndexedDBQueue(config.indexedDb); const queueProcessingDelay = config.queueProcessingDelayMs || 100; const fork = new persistent_fork_1.PersistentFork(store, queue, webClient, queueProcessingDelay); fork.initialize(); return fork; } else { const fork = new transient_fork_1.TransientFork(store, webClient); return fork; } } else { const fork = new pass_through_fork_1.PassThroughFork(store); return fork; } } function createAuthentication(config, webClient) { if (webClient) { if (config.indexedDb) { const loginStore = new indexeddb_login_store_1.IndexedDBLoginStore(config.indexedDb); const authentication = new authentication_offline_1.AuthenticationOffline(loginStore, webClient); return authentication; } else { const authentication = new authentication_web_client_1.AuthenticationWebClient(webClient); return authentication; } } else { const authentication = new authentication_noop_1.AuthenticationNoOp(); return authentication; } } function createNetwork(webClient) { if (webClient) { const network = new httpNetwork_1.HttpNetwork(webClient); return network; } else { return new NetworkManager_1.NetworkNoOp(); } } function createPurgeConditions(config) { if (config.purgeConditions) { var specifications = config.purgeConditions(new purgeConditions_1.PurgeConditions([])).specifications; var validationFailures = specifications.map(specification => (0, validate_1.validatePurgeSpecification)(specification)).flat(); if (validationFailures.length > 0) { throw new Error(validationFailures.join("\n")); } return specifications; } else { return []; } } //# sourceMappingURL=jinaga-browser.js.map