oidc-lib
Version:
A library for creating OIDC Service Providers
123 lines (99 loc) • 3.83 kB
JavaScript
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.');
}