{"version":3,"sources":["jsdelivr-header.js","/npm/bitmark@0.0.53/lib/webcredits.js"],"names":[],"mappings":"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","file":"/npm/bitmark@0.0.53/lib/webcredits.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/bitmark@0.0.53/lib/webcredits.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","#!/usr/bin/env node\n\nmodule.exports = {\n  insert        : insert,\n  setupDB       : setupDB,\n  createDB      : createDB,\n  createTables  : createTables,\n  balance       : balance,\n  getBalance    : getBalance,\n  genesis       : genesis,\n  genesisInit   : genesisInit,\n  reputation    : reputation,\n  getReputation : getReputation,\n  getConfig     : getConfig,\n  getCredit     : getCredit,\n  today         : today\n};\n\n\n// requires\nvar Sequelize = require('sequelize');\nvar jsonld = require('jsonld');\nvar crypto = require('crypto');\nvar promises = jsonld.promises;\n\n/**\n* setup database\n* @param  {string} dialect type of db mysql|sqlite\n* @param  {string} storage file used for sqlite, default ./credit.db\n* @return {Object} sequelize db object\n*/\nfunction setupDB(config) {\n  var sequelize;\n  var defaultStorage = 'credit.db';\n\n  if (config.dialect === 'sqlite') {\n    if (!config.storage) {\n      config.storage = defaultStorage;\n    }\n\n    sequelize = new Sequelize(config.database, config.username, config.password, {\n      host: config.host,\n      dialect: config.dialect,\n      storage: config.storage,\n      logging: false\n    });\n  } else {\n    sequelize = new Sequelize(config.database, config.username, config.password, {\n      host: config.host,\n      dialect: config.dialect,\n      logging: false\n    });\n  }\n  return sequelize;\n}\n\n\n/**\n * gets the current config\n * @return {Object} The config\n */\nfunction getConfig() {\n  var config = require(\"../config/dbconfig\");\n  return config;\n}\n\n/**\n* create tables\n* @param  {Object} sequelize db object\n* @param  {Object} config    config object\n* @param  {Object} callback  callback\n*/\nfunction createTables(sequelize, config, callback) {\n\n  if (!config.wallet) {\n    config.wallet = null;\n  }\n\n  var coinbase = 'https://w3id.org/cc#coinbase';\n  var currency = config.currency || 'https://w3id.org/cc#bit';\n  var wallet   = config.wallet;\n  var initial  = 1000000;\n\n\n  var create_credit = 'CREATE TABLE Credit ( \\\n    `@id` TEXT, \\\n    `source` TEXT, \\\n    `amount` REAL, \\\n    `currency` VARCHAR(255) DEFAULT \\''+ currency +'\\', \\\n    `destination` TEXT, \\\n    `timestamp` TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, \\\n    `context` TEXT, \\\n    `description` TEXT, \\\n    `wallet` TEXT \\\n  );';\n\n  var create_ledger = 'CREATE TABLE Ledger ( \\\n    `source` TEXT, \\\n    `amount` REAL, \\\n    `currency` VARCHAR(255) DEFAULT \\''+ currency +'\\', \\\n    `wallet` TEXT \\\n  );';\n\n  var create_genesis = 'CREATE TABLE Genesis ( \\\n    `source` TEXT, \\\n    `amount` REAL, \\\n    `currency` VARCHAR(255) DEFAULT \\''+ currency +'\\', \\\n    `wallet` TEXT \\\n  );'\n\n  sequelize.query(create_credit).then(function(res) {\n  }).then(function(){\n    sequelize.query(create_ledger);\n  }).then(function(){\n    sequelize.query(create_genesis);\n  }).then(function(){\n    console.log('Sucessfully created tables!');\n  }).then(function() {\n    //sequelize.close();\n    callback(null, 'complete');\n  }).catch(function(err){\n    console.log('Failed to create tables.', err);\n    //sequelize.close();\n    callback(err);\n  });\n}\n\n/**\n * get credit\n * @param  {Object} credit    the web credit\n * @param  {Object} sequelize the DB connection\n * @param  {Object} config    the config\n * @param  {Object} callback  callback\n * @return {Object}           the web credit if exists\n */\nfunction getCredit(credit, sequelize, config, callback) {\n\n  if (!config.wallet) {\n    config.wallet = null;\n  }\n\n  var coinbase = 'https://w3id.org/cc#coinbase';\n  var currency = config.currency || 'https://w3id.org/cc#bit';\n  var wallet   = config.wallet;\n\n  var sql = 'Select * from Credit where description = :description and wallet = :wallet and currency = :currency ;';\n\n  sequelize.query(sql,  { replacements: { currency: currency, wallet: config.wallet, description: credit[\"http://purl.org/dc/terms/description\"] } }).then(function(res) {\n    return res;\n  }).catch(function(err){\n    console.log('Not found.', err);\n    callback(err);\n  }).then(function(res) {\n    if (res[0][0]) {\n      console.log(res[0][0]);\n      //sequelize.close();\n      callback(null, res[0][0]);\n    }\n  });\n}\n\n\n/**\n* createDB function\n* @param  {Object} config   config\n* @param  {Object} callback callback\n*/\nfunction createDB(config, callback) {\n  // vars\n  var sequelize;\n\n  // run main\n  sequelize = setupDB(config);\n  createTables(sequelize, config, callback);\n}\n\n/**\n * get balance\n * @param  {String}   source    the source\n * @param  {Object}   sequelize sequelize object\n * @param  {Object}   config    config\n * @param  {Function} callback  callback\n */\nfunction getBalance(source, sequelize, config, callback) {\n\n  if (!config.wallet) {\n    config.wallet = null;\n  }\n\n  var coinbase = 'https://w3id.org/cc#coinbase';\n  var currency = config.currency || 'https://w3id.org/cc#bit';\n  var wallet   = config.wallet;\n  var initial  = 1000000;\n\n\n  var balanceSql = 'Select sum(amount) amount from Ledger where source = :source and wallet = :wallet and currency = :currency ;';\n\n  sequelize.query(balanceSql,  { replacements: { currency: currency, wallet: config.wallet, source: source } }).then(function(res) {\n    return res;\n  }).catch(function(err){\n    console.log('Balance Failed.', err);\n    callback(err);\n  }).then(function(res) {\n    if (res[0][0]) {\n      //console.log(res[0][0].amount);\n      //sequelize.close();\n      callback(null, res[0][0].amount);\n    }\n  });\n}\n\n/**\n * genesis initialization\n * @param  {Object}   config   config\n * @param  {Function} callback callback\n */\nfunction genesisInit(sequelize, config, callback) {\n\n  if (!config.wallet) {\n    config.wallet = null;\n  }\n\n  var coinbase = 'https://w3id.org/cc#coinbase';\n  var currency = config.currency || 'https://w3id.org/cc#bit';\n  var wallet   = config.wallet;\n  var initial  = 1000000;\n\n  var coinbaseSql = 'Insert into Ledger values ( \\''+ coinbase +'\\', '+ initial +', \\''+ currency +'\\', :wallet );';\n  var genesisSql  = 'Insert into Genesis values ( \\''+ coinbase +'\\', '+ initial +', \\''+ currency +'\\', :wallet );';\n\n  sequelize.query(coinbaseSql,  { replacements: { wallet: config.wallet } }).then(function(res) {\n  }).then(function(){\n    sequelize.query(genesisSql,  { replacements: { wallet: config.wallet } });\n  }).then(function(){\n    console.log('Genesis successful!');\n  }).catch(function(err){\n    console.log('Genesis Failed.', err);\n    callback(err);\n  }).then(function() {\n    callback(null, 'complete');\n    //sequelize.close();\n  });\n}\n\n/**\n * genesis\n * @param  {Object}   config   config\n * @param  {Function} callback callback\n */\nfunction genesis(config, callback) {\n  // vars\n  var sequelize;\n\n  // run main\n  sequelize = setupDB(config);\n  genesisInit(sequelize, config, callback);\n}\n\n /**\n  * get balance\n  * @param  {String}   source    the source\n  * @param  {Object}   sequelize sequelize object\n  * @param  {Object}   config    config\n  * @param  {Function} callback  callback\n  */\nfunction balance(source, config, callback) {\n  // vars\n  var sequelize;\n\n  // run main\n  sequelize = setupDB(config);\n  var res = getBalance(source, sequelize, config, callback);\n}\n\n\n/**\n * get balance\n * @param  {String}   source    the source\n * @param  {Object}   sequelize sequelize object\n * @param  {Object}   config    config\n * @param  {Function} callback  callback\n */\nfunction getReputation(source, sequelize, config, callback) {\n\n  if (!config.wallet) {\n    config.wallet = null;\n  }\n\n  var coinbase = 'https://w3id.org/cc#coinbase';\n  var currency = config.currency || 'https://w3id.org/cc#bit';\n  var wallet   = config.wallet;\n  var initial  = 1000000;\n\n\n  var coinbaseSql = 'Select sum(amount) amount from Credit where destination = :source and wallet = :wallet and currency = :currency  ;';\n\n  sequelize.query(coinbaseSql,  { replacements: { currency: currency, wallet: wallet, source: source } }).then(function(res) {\n    return res;\n  }).catch(function(err){\n    console.log('Reputation Failed.', err);\n    callback(err);\n  }).then(function(res) {\n    if (res[0][0]) {\n      callback(null, res[0][0].amount);\n      //sequelize.close();\n    }\n  });\n\n}\n\n/**\n * Today's credits\n * @param  {Object}   credit    a web credit\n * @param  {Object}   sequelize db connection\n * @param  {Object}   config    config\n * @param  {Function} callback  callback\n */\nfunction today(source, sequelize, config, callback) {\n\n  if (!config.wallet) {\n    config.wallet = null;\n  }\n\n  var coinbase = 'https://w3id.org/cc#coinbase';\n  var currency = config.currency || 'https://w3id.org/cc#bit';\n  var wallet   = config.wallet;\n  var initial  = 1000000;\n\n  var coinbaseSql = 'Select sum(amount) amount from Credit where destination = :source and wallet = :wallet and DATE(`timestamp`) = CURDATE() and currency = :currency ;';\n\n  sequelize.query(coinbaseSql,  { replacements: { currency: currency, wallet: config.wallet, source: source } }).then(function(res) {\n    return res;\n  }).catch(function(err){\n    console.log('Today Failed.', err);\n    callback(err);\n  }).then(function(res) {\n    if (res[0][0]) {\n      console.log(res[0][0].amount);\n      callback(null, res[0][0].amount);\n      //sequelize.close();\n    }\n  });\n}\n\n/**\n* reputation function\n* @param  {Object} config [description]\n*/\nfunction reputation(source, config) {\n  // vars\n  var sequelize;\n\n  // run main\n  sequelize = setupDB(config);\n  var res = getReputation(source, sequelize, config);\n}\n\n/**\n * Insert into webcredits\n * @param  {Object}   credit    a web credit\n * @param  {Object}   sequelize db connection\n * @param  {Object}   config    config\n * @param  {Function} callback  callback\n */\nfunction insert(credit, sequelize, config, callback) {\n\n  if (!config.wallet) {\n    config.wallet = null;\n  }\n\n  var coinbase = 'https://w3id.org/cc#coinbase';\n  var currency = config.currency || 'https://w3id.org/cc#bit';\n  var wallet   = config.wallet;\n  var initial  = 1000000;\n\n\n  // main\n  console.log('source : ' + credit[\"https://w3id.org/cc#source\"]);\n  console.log('amount : ' + credit[\"https://w3id.org/cc#amount\"]);\n  console.log('unit : ' + credit[\"https://w3id.org/cc#currency\"]);\n  console.log('destination : ' + credit[\"https://w3id.org/cc#destination\"]);\n  console.log('description : ' + credit[\"http://purl.org/dc/terms/description\"]);\n  console.log('timestamp : ' + credit[\"https://w3id.org/cc#created\"]);\n  console.log('wallet : ' + config.wallet);\n\n\n  credit[\"http://purl.org/dc/terms/description\"] = credit[\"http://purl.org/dc/terms/description\"] || null;\n  credit[\"http://purl.org/dc/terms/created\"] = credit[\"http://purl.org/dc/terms/created\"] || null;\n  config.wallet = config.wallet || null;\n\n  var existsSql = \"SELECT * FROM Credit where source = '\"+ credit[\"https://w3id.org/cc#source\"] + \"' and destination = \" + \":destination\" + \" and amount = \" + credit[\"https://w3id.org/cc#amount\"];\n  existsSql +=  \" and description = :description \";\n  existsSql +=  \" and timestamp = :created \";\n  existsSql +=  \" and wallet = :wallet \";\n\n  console.log(existsSql);\n\n  sequelize.query(existsSql, { replacements: { description: credit[\"http://purl.org/dc/terms/description\"],\n  created: credit[\"http://purl.org/dc/terms/created\"], \"destination\" : credit[\"https://w3id.org/cc#destination\"], wallet: config.wallet } }).then(function(res) {\n    console.log('checking if row exists');\n    console.log(res);\n    if (res[0][0]) {\n      console.log('row exists');\n      throw ('row exists');\n    } else {\n      console.log('row does not exist');\n      console.log('Getting balance');\n      var balanceSql = \"SELECT * FROM Ledger where source = '\" + credit[\"https://w3id.org/cc#source\"] + \"' and wallet = :wallet \";\n\n      return sequelize.query(balanceSql, { replacements: { wallet: config.wallet } });\n    }\n  }).then(function(res){\n    if (res[0][0] && res[0][0].amount) {\n      console.log('balance is ' + res[0][0].amount);\n      if (res[0][0].amount >= credit[\"https://w3id.org/cc#amount\"]) {\n        console.log('funds available');\n\n\n        if (credit[\"https://w3id.org/cc#timestamp\"]) {\n          credit[\"https://w3id.org/cc#timestamp\"] = credit[\"https://w3id.org/cc#timestamp\"].replace(' ', 'T');\n          if (credit[\"https://w3id.org/cc#timestamp\"].charAt(credit[\"https://w3id.org/cc#timestamp\"].length-1) != 'Z') {\n            credit[\"https://w3id.org/cc#timestamp\"] += 'Z';\n          }\n        } else {\n          credit[\"https://w3id.org/cc#timestamp\"] = new Date().toISOString();\n        }\n\n\n        var doc = {\n          \"https://w3id.org/cc#created\": { \"@value\" : credit[\"https://w3id.org/cc#created\"], \"@type\" : \"http://www.w3.org/2001/XMLSchema#dateTime\" } ,\n          \"https://w3id.org/cc#source\": { \"@id\": credit[\"https://w3id.org/cc#source\"] },\n          \"https://w3id.org/cc#amount\": { \"@value\" : credit[\"https://w3id.org/cc#amount\"], \"@type\" : \"http://www.w3.org/2001/XMLSchema#decimal\" } ,\n          \"https://w3id.org/cc#destination\": { \"@id\": credit[\"https://w3id.org/cc#destination\"] },\n          \"https://w3id.org/cc#currency\": { \"@id\": credit[\"https://w3id.org/cc#currency\"] },\n          \"@type\": \"https://w3id.org/cc#Credit\"\n        };\n        console.log(doc);\n        return promises.normalize(doc, {format: 'application/nquads'});\n\n      } else {\n        throw ('not enough funds');\n      }\n    } else {\n      throw ('could not find balance');\n    }\n  }).then(function(doc){\n    console.log('Sucessfully normalized doc to json ld!');\n    var hash = crypto.createHash('sha256').update(doc).digest('base64');\n    console.log(hash);\n\n    var id = 'ni:///sha-256;' + new Buffer(hash).toString('base64').replace('+', '-').replace('/', '_').replace('=', '');\n    credit['@id'] = id;\n    console.log(credit);\n\n\n\n    var insertSql = \"INSERT INTO Credit(\\`@id\\`, `source`, `destination`, `amount`, `timestamp`, `currency`\";\n    if (credit[\"http://purl.org/dc/terms/description\"]) insertSql += \", `description`\";\n    if (config.wallet) insertSql += \", `wallet`\";\n    insertSql += \") values ( '\" + credit['@id'] + \"', '\"+ credit[\"https://w3id.org/cc#source\"] + \"' , \" + \":destination\" + \" , \" + credit[\"https://w3id.org/cc#amount\"];\n    insertSql += \" , '\" + credit[\"https://w3id.org/cc#timestamp\"] + \"'\" + \" , '\" + credit[\"https://w3id.org/cc#currency\"] + \"'\";\n    if (credit[\"http://purl.org/dc/terms/description\"]) insertSql+= \" , '\" + credit[\"http://purl.org/dc/terms/description\"] + \"'\";\n    if (config.wallet) insertSql+= \" , '\" + config.wallet + \"'\";\n    insertSql += \" )\";\n\n    console.log(insertSql);\n\n    return sequelize.query(insertSql, {replacements: { \"destination\" : credit[\"https://w3id.org/cc#destination\"] } });\n\n  }).then(function(res){\n    console.log('decrementing source');\n    var decrementSql = \"UPDATE Ledger set amount = amount - \" + credit[\"https://w3id.org/cc#amount\"] + \" where source = '\"+ credit[\"https://w3id.org/cc#source\"] + \"' and wallet = :wallet\";\n    return sequelize.query(decrementSql, { replacements: { wallet: config.wallet } });\n\n  }).then(function(res){\n    console.log('incrementing or creating destination');\n    var checkSql = \"SELECT * from Ledger where `source` =  :destination and wallet = :wallet\";\n    return sequelize.query(checkSql, { replacements: { wallet: config.wallet , \"destination\" : credit[\"https://w3id.org/cc#destination\"] }});\n  }).then(function(res){\n    var incrementSql;\n    if (res[0][0] && !isNaN(res[0][0].amount)) {\n      if (config.wallet) {\n        incrementSql = \"UPDATE Ledger set `amount` = `amount` + \" + credit[\"https://w3id.org/cc#amount\"] + \" where `source` =  :destination and wallet = '\"+ config.wallet +\"'\";\n      } else {\n        incrementSql = \"UPDATE Ledger set `amount` = `amount` + \" + credit[\"https://w3id.org/cc#amount\"] + \" where `source` =  `source` =  :destination\";\n      }\n    } else {\n      if (config.wallet) {\n        incrementSql = \"INSERT into Ledger (`source`, `amount`, `wallet`) values (:destination, \"+credit[\"https://w3id.org/cc#amount\"] +\", '\"+ config.wallet +\"')\";\n      } else {\n        incrementSql = \"INSERT into Ledger (`source`, `amount`) values (:destination, \"+credit[\"https://w3id.org/cc#amount\"] +\")\";\n      }\n    }\n    console.log(incrementSql);\n    return sequelize.query(incrementSql, {replacements: { \"destination\" : credit[\"https://w3id.org/cc#destination\"] }} );\n\n  }).then(function() {\n    console.log('Complete');\n    //sequelize.close();\n    callback(null, 'Complete');\n    // hook\n\n  }).catch(function(err){\n    console.log('Failed to insert credit.', err);\n    callback(err);\n  });\n}\n"]}