UNPKG

oidc-lib

Version:

A library for creating OIDC Service Providers

123 lines (99 loc) 3.83 kB
"use strict" Object.defineProperty(exports, "__esModule", { value: true }); // var exchange_mgmt = require('./exchange_sw_mgmt'); var indexed_db_module = require('../claimer_sts/dbs/indexed_db'); var moduleName = 'walletExchange'; var pk; module.exports = { registerEndpoints: registerEndpoints, exchange: exchange } function registerEndpoints(pkInput){ pk = pkInput; } async function fullSync(last_sync_time, sync_time){ if (pk.util.offline){ return resolve(false); } var collectionNames = []; var encoded_databases = {}; var syncResult = {}; /* LATER if (hub_mgmt.syncInForeground() === false){ resolve(false); return; } */ var change_occurred = false; try { for (var dbName in pk.dbs){ var db_info = pk.dbs[dbName]; encoded_databases[dbName] = {}; db_info.suppressHubUpdate = true; for (var collectionName in db_info.collections){ var collection = await db_info.provider.queryCollection(db_info, collectionName, {} ); for (var j=0; j < collection.length; j++){ var localElement = collection[j]; if (localElement.didMeta.object_id === undefined){ localElement.didMeta.object_id = localElement.id; localElement.didMeta.sync_time = sync_time; await db_info.provider.createOrUpdateDocument(db_info, collectionName, localElement, { suppress_time_update: true } ); change_occurred = true; } else{ if (localElement.didMeta.update_time > last_sync_time){ localElement.didMeta.sync_time = sync_time; await db_info.provider.createOrUpdateDocument(db_info, collectionName, localElement, { suppress_time_update: true } ); change_occurred = true; } } } encoded_databases[dbName][collectionName] = collection; } delete db_info.suppressHubUpdate; } syncResult.change_occurred = change_occurred; syncResult.encoded_databases = encoded_databases; return syncResult; } catch(err) { db_info.suppressHubUpdate = false; } } async function exchange(){ var dbPwaInfo; try{ var records = await pk.dbs['wallet'].provider.queryCollection(pk.dbs['wallet'], 'pwa', {} ); if (records && records.length > 0){ dbPwaInfo = records[0]; } } catch(err){ if (err.code !== 404){ pk.util.log_error('exchange', err); } } // initalize modules var modules = ['sts', 'wallet']; var date = new Date(); var sync_time = date.getTime(); var last_sync_time = pk.util.sync_info.last_sync_time; var syncResult = await fullSync(last_sync_time, sync_time); if (!syncResult.change_occurred){ return ('No change in databases: no exchange submitted.') } var device_wallet = { type: 'fullSync', version: '1.0', databases: syncResult.encoded_databases, last_sync_time: last_sync_time, sync_time: sync_time }; var parameters = { w_id: dbPwaInfo.w_id, device_wallet: device_wallet } pk.util.sync_info.last_sync_time = sync_time; var result = await pk.util.queryPwaApi('/wallet/publish_device_wallet', parameters); return ('Changes occurred in databases: device_wallet submitted.'); }