@begin/data
Advanced tools
Comparing version 4.0.2 to 5.0.0-RC.0
{ | ||
"name": "@begin/data", | ||
"version": "4.0.2", | ||
"version": "5.0.0-RC.0", | ||
"description": "Begin Data is a durable and fast key/value document store built on top of DynamoDB", | ||
"main": "src/index.js", | ||
"scripts": { | ||
"t": "tape test/integration-test.js | tap-spec", | ||
"lint": "eslint --fix .", | ||
@@ -27,2 +28,5 @@ "test": "npm run lint && tape test/*-test.js | tap-spec", | ||
"dependencies": { | ||
"@aws-lite/client": "^0.14.3", | ||
"@aws-lite/dynamodb": "^0.3.3", | ||
"@aws-lite/ssm": "^0.2.2", | ||
"@begin/hashid": "^1.0.0", | ||
@@ -33,12 +37,8 @@ "run-parallel": "^1.2.0", | ||
"devDependencies": { | ||
"@architect/eslint-config": "^2.0.1", | ||
"@architect/sandbox": "^5.1.0-RC.0", | ||
"@aws-sdk/client-dynamodb": "^3.216.0", | ||
"@aws-sdk/client-ssm": "^3.216.0", | ||
"@aws-sdk/lib-dynamodb": "^3.216.0", | ||
"aws-sdk": "^2.1261.0", | ||
"eslint": "^8.10.0", | ||
"@architect/eslint-config": "^2.1.2", | ||
"@architect/sandbox": "^6.0.0-RC.1", | ||
"eslint": "^8.56.0", | ||
"tap-spec": "^5.0.0", | ||
"tape": "^5.5.2", | ||
"tiny-json-http": "^7.3.1" | ||
"tape": "^5.7.4", | ||
"tiny-json-http": "^7.5.1" | ||
}, | ||
@@ -45,0 +45,0 @@ "eslintConfig": { |
@@ -5,5 +5,6 @@ /** | ||
let waterfall = require('run-waterfall') | ||
let util = require('util') | ||
let getTableName = require('./helpers/_get-table-name') | ||
let getKey = require('./helpers/_get-key') | ||
let dynamo = require('./helpers/_dynamo').doc | ||
let dynamo = require('./helpers/_dynamo') | ||
@@ -40,3 +41,4 @@ /** | ||
function counts (TableName, doc, callback) { | ||
doc.query({ | ||
let query = util.callbackify(doc.Query) | ||
query({ | ||
TableName, | ||
@@ -43,0 +45,0 @@ Select: 'COUNT', |
@@ -5,6 +5,7 @@ /** | ||
*/ | ||
let util = require('util') | ||
let waterfall = require('run-waterfall') | ||
let getTableName = require('../helpers/_get-table-name') | ||
let getKey = require('../helpers/_get-key') | ||
let dynamo = require('../helpers/_dynamo').doc | ||
let dynamo = require('../helpers/_dynamo') | ||
@@ -37,3 +38,4 @@ /** | ||
query.RequestItems[TableName] = batch | ||
doc.batchWrite(query, callback) | ||
let batchWrite = util.callbackify(doc.BatchWriteItem) | ||
batchWrite(query, callback) | ||
} | ||
@@ -40,0 +42,0 @@ ], |
@@ -5,6 +5,7 @@ /** | ||
*/ | ||
let util = require('util') | ||
let waterfall = require('run-waterfall') | ||
let getTableName = require('../helpers/_get-table-name') | ||
let getKey = require('../helpers/_get-key') | ||
let dynamo = require('../helpers/_dynamo').doc | ||
let dynamo = require('../helpers/_dynamo') | ||
@@ -26,4 +27,5 @@ /** | ||
function destroys (TableName, doc, callback) { | ||
let del = util.callbackify(doc.DeleteItem) | ||
let Key = getKey(params) | ||
doc.delete({ | ||
del({ | ||
TableName, | ||
@@ -30,0 +32,0 @@ Key, |
@@ -5,2 +5,3 @@ /** | ||
*/ | ||
let util = require('util') | ||
let waterfall = require('run-waterfall') | ||
@@ -10,3 +11,3 @@ let getTableName = require('../helpers/_get-table-name') | ||
let unfmt = require('../helpers/_unfmt') | ||
let dynamo = require('../helpers/_dynamo').doc | ||
let dynamo = require('../helpers/_dynamo') | ||
@@ -44,5 +45,6 @@ let badKey = i => !(i['table'] && i['key']) | ||
function gets (table, doc, callback) { | ||
let batchGet = util.callbackify(doc.BatchGetItem) | ||
let query = { RequestItems: {} } | ||
query.RequestItems[table] = { Keys: Keys.map(getKey) } | ||
doc.batchGet(query, function gots (err, result) { | ||
batchGet(query, function gots (err, result) { | ||
if (err) callback(err) | ||
@@ -49,0 +51,0 @@ else { |
@@ -9,3 +9,4 @@ /** | ||
let unfmt = require('../helpers/_unfmt') | ||
let dynamo = require('../helpers/_dynamo').doc | ||
let dynamo = require('../helpers/_dynamo') | ||
let util = require('util') | ||
@@ -36,4 +37,5 @@ /** | ||
function gets (TableName, doc, callback) { | ||
let getItem = util.callbackify(doc.GetItem) | ||
let Key = getKey(params) | ||
doc.get({ | ||
getItem({ | ||
TableName, | ||
@@ -40,0 +42,0 @@ Key |
@@ -9,3 +9,4 @@ /** | ||
let unfmt = require('../helpers/_unfmt') | ||
let dynamo = require('../helpers/_dynamo').doc | ||
let dynamo = require('../helpers/_dynamo') | ||
let util = require('util') | ||
@@ -59,3 +60,4 @@ /** | ||
} | ||
doc.query(query, callback) | ||
let runQuery = util.callbackify(doc.Query) | ||
runQuery(query, callback) | ||
}, | ||
@@ -68,4 +70,5 @@ ], | ||
let returns = result.Items.map(unfmt).filter(exact) | ||
if (result.LastEvaluatedKey) | ||
if (result.LastEvaluatedKey) { | ||
returns.cursor = Buffer.from(JSON.stringify(result.LastEvaluatedKey)).toString('base64') | ||
} | ||
callback(null, returns) | ||
@@ -72,0 +75,0 @@ } |
@@ -7,3 +7,4 @@ /** | ||
let waterfall = require('run-waterfall') | ||
let dynamo = require('./_dynamo').doc | ||
let util = require('util') | ||
let dynamo = require('./_dynamo') | ||
let getTableName = require('./_get-table-name') | ||
@@ -45,5 +46,6 @@ let getKey = require('./_get-key') | ||
}, | ||
function update (TableName, doc, callback) { | ||
function _update (TableName, doc, callback) { | ||
// perform the atomic update and callback w the updated values | ||
doc.update({ | ||
let update = util.callbackify(doc.UpdateItem) | ||
update({ | ||
TableName, | ||
@@ -50,0 +52,0 @@ Key: getKey({ table, key }), |
@@ -7,4 +7,5 @@ /** | ||
let getTableName = require('./_get-table-name') | ||
let dynamo = require('./_dynamo').db | ||
let dynamo = require('./_dynamo') | ||
let Hashids = require('@begin/hashid') | ||
let util = require('util') | ||
let hash = new Hashids | ||
@@ -23,16 +24,16 @@ | ||
function update (TableName, db, callback) { | ||
db.updateItem({ | ||
let updateItem = util.callbackify(db.UpdateItem) | ||
let query = { | ||
TableName, | ||
Key: { | ||
'scopeID': { S: BEGIN_DATA_SCOPE_ID || ARC_APP_NAME }, | ||
'dataID': { S: `${table}-seq` } | ||
'scopeID': BEGIN_DATA_SCOPE_ID || ARC_APP_NAME, | ||
'dataID': `${table}-seq` | ||
}, | ||
AttributeUpdates: { | ||
idx: { | ||
Action: 'ADD', | ||
Value: { N: '1' } | ||
} | ||
UpdateExpression: `SET idx = if_not_exists(idx, :one) + :one`, | ||
ExpressionAttributeValues: { | ||
':one': 1 | ||
}, | ||
ReturnValues: 'UPDATED_NEW' | ||
}, callback) | ||
ReturnValues: 'ALL_NEW' | ||
} | ||
updateItem(query, callback) | ||
} | ||
@@ -44,3 +45,3 @@ ], | ||
let epoc = Date.now() - 1544909702376 // hbd | ||
let seed = Number(result.Attributes.idx.N) | ||
let seed = Number(result.Attributes.idx) | ||
let val = hash.encode([ epoc, seed ]) | ||
@@ -47,0 +48,0 @@ callback(null, val) |
@@ -1,5 +0,6 @@ | ||
let https = require('https') | ||
let getPorts = require('./_get-ports') | ||
let isNode18 = require('./_is-node-18') | ||
let db, doc | ||
let util = require('util') | ||
let awsLite = require('@aws-lite/client') | ||
let aws = util.callbackify(awsLite) | ||
let db = false | ||
@@ -9,42 +10,20 @@ /** | ||
*/ | ||
function getDynamo (type, callback) { | ||
module.exports = function getDynamo (callback) { | ||
let { ARC_ENV, AWS_REGION, ARC_LOCAL } = process.env | ||
if (db && type === 'db') { | ||
return callback(null, db) | ||
} | ||
if (db) return callback(null, db) | ||
if (doc && type === 'doc') { | ||
return callback(null, doc) | ||
} | ||
let DB, Doc | ||
if (isNode18) { | ||
let dynamo = require('@aws-sdk/client-dynamodb') | ||
let docclient = require('@aws-sdk/lib-dynamodb') | ||
DB = dynamo.DynamoDB | ||
Doc = docclient.DynamoDBDocument | ||
} | ||
else { | ||
let dynamo = require('aws-sdk/clients/dynamodb') | ||
DB = dynamo | ||
Doc = dynamo.DocumentClient | ||
} | ||
let local = ARC_ENV === 'testing' || ARC_LOCAL | ||
if (!local) { | ||
let config = { | ||
agent: new https.Agent({ | ||
keepAlive: true, | ||
maxSockets: 50, // Node can set to Infinity; AWS maxes at 50 | ||
rejectUnauthorized: true, | ||
}) | ||
} | ||
db = isNode18 ? new DB : new DB(config) | ||
doc = isNode18 ? Doc.from(db) : new Doc(config) | ||
return callback(null, type === 'db' ? db : doc) | ||
aws(function gotClient (err, { ddb }) { | ||
if (err) callback(err) | ||
else { | ||
db = ddb | ||
callback(null, db) | ||
} | ||
}) | ||
} | ||
else { | ||
getPorts((err, ports) => { | ||
getPorts(function gotPorts (err, ports) { | ||
if (err) callback(err) | ||
@@ -56,9 +35,15 @@ else { | ||
} | ||
let config = { | ||
endpoint: `http://localhost:${port}`, | ||
region: AWS_REGION || 'us-west-2' // Do not assume region is set! | ||
} | ||
db = new DB(config) | ||
doc = isNode18 ? Doc.from(db) : new Doc(config) | ||
return callback(null, type === 'db' ? db : doc) | ||
aws({ | ||
protocol: 'http', | ||
host: 'localhost', | ||
port, | ||
region: AWS_REGION || 'us-west-2' | ||
}, | ||
function gotClient (err, client) { | ||
if (err) callback(err) | ||
else { | ||
db = client.dynamodb | ||
callback(null, db) | ||
} | ||
}) | ||
} | ||
@@ -68,6 +53,1 @@ }) | ||
} | ||
module.exports = { | ||
db: getDynamo.bind({}, 'db'), | ||
doc: getDynamo.bind({}, 'doc'), | ||
} |
@@ -1,3 +0,5 @@ | ||
let isNode18 = require('./_is-node-18') | ||
let toLogicalID = require('./_to-logical-id') | ||
let util = require('util') | ||
let awsLite = require('@aws-lite/client') | ||
let aws = util.callbackify(awsLite) | ||
let configuredPorts | ||
@@ -31,25 +33,33 @@ | ||
let Name = `/${toLogicalID(`${app}-${env}`)}/ARC_SANDBOX/ports` | ||
let port = 2222 | ||
let config = { | ||
endpoint: `http://localhost:${port}/_arc/ssm`, | ||
protocol: 'http', | ||
host: 'localhost', | ||
port: 2222, | ||
endpointPrefix: '_arc/ssm', | ||
// endpoint: `http://localhost:${port}/_arc/ssm`, | ||
region: AWS_REGION || 'us-west-2', | ||
} | ||
let SSM = isNode18 ? require('@aws-sdk/client-ssm').SSM : require('aws-sdk/clients/ssm') | ||
let ssm = new SSM(config) | ||
ssm.getParameter({ Name }, function done (err, result) { | ||
aws(config, function gotClient (err, client) { | ||
if (err) callback(err) | ||
else { | ||
if (!result.Parameter.Value) { | ||
callback(ReferenceError('@begin/data requires Sandbox to be running')) | ||
} | ||
else { | ||
try { | ||
configuredPorts = JSON.parse(result.Parameter.Value) | ||
callback(null, configuredPorts) | ||
let { ssm } = client | ||
let getParameter = util.callbackify(ssm.GetParameter) | ||
getParameter({ Name }, function done (err, result) { | ||
if (err) callback(err) | ||
else { | ||
if (!result.Parameter.Value) { | ||
callback(ReferenceError('@begin/data requires Sandbox to be running')) | ||
} | ||
else { | ||
try { | ||
configuredPorts = JSON.parse(result.Parameter.Value) | ||
callback(null, configuredPorts) | ||
} | ||
catch (err) { | ||
callback(err) | ||
} | ||
} | ||
} | ||
catch (err) { | ||
callback(err) | ||
} | ||
} | ||
}) | ||
} | ||
@@ -56,0 +66,0 @@ }) |
@@ -1,2 +0,4 @@ | ||
let isNode18 = require('./_is-node-18') | ||
let util = require('util') | ||
let awsLite = require('@aws-lite/client') | ||
let aws = util.callbackify(awsLite) | ||
let toLogicalID = require('./_to-logical-id') | ||
@@ -32,3 +34,7 @@ let getPorts = require('./_get-ports') | ||
else go({ | ||
endpoint: `http://localhost:${ports._arc}/_arc/ssm`, | ||
protocol: 'http', | ||
host: 'localhost', | ||
port: ports._arc, | ||
endpointPrefix: '_arc/ssm', | ||
// endpoint: `http://localhost:${ports._arc}/_arc/ssm`, | ||
region: AWS_REGION || 'us-west-2', | ||
@@ -38,19 +44,27 @@ }) | ||
} | ||
else go() | ||
else { | ||
go() | ||
} | ||
function go (config) { | ||
let SSM = isNode18 ? require('@aws-sdk/client-ssm').SSM : require('aws-sdk/clients/ssm') | ||
let ssm = new SSM(config) | ||
ssm.getParameter({ Name }, function done (err, result) { | ||
aws(config, function gotClient (err, client) { | ||
if (err) callback(err) | ||
else { | ||
let table = result.Parameter | ||
if (!table) { | ||
callback(ReferenceError('@begin/data requires a table named data')) | ||
} | ||
else { | ||
tablename = table.Value | ||
callback(null, tablename) | ||
} | ||
let { ssm } = client | ||
let getParameter = util.callbackify(ssm.GetParameter) | ||
getParameter({ Name }, function done (err, result) { | ||
// let ssm = new SSM(config) | ||
// ssm.getParameter({ Name }, function done (err, result) { | ||
if (err) callback(err) | ||
else { | ||
let table = result.Parameter | ||
if (!table) { | ||
callback(ReferenceError('@begin/data requires a table named data')) | ||
} | ||
else { | ||
tablename = table.Value | ||
callback(null, tablename) | ||
} | ||
} | ||
}) | ||
} | ||
@@ -57,0 +71,0 @@ }) |
@@ -13,3 +13,4 @@ /** | ||
let fmt = require('../helpers/_fmt') | ||
let dynamo = require('../helpers/_dynamo').doc | ||
let dynamo = require('../helpers/_dynamo') | ||
let util = require('util') | ||
@@ -47,6 +48,7 @@ /** | ||
validate.size(items) | ||
let batchWrite = util.callbackify(doc.BatchWriteItem) | ||
let batch = items.map(Item => ({ PutRequest: { Item } })) | ||
let query = { RequestItems: {} } | ||
query.RequestItems[TableName] = batch | ||
doc.batchWrite(query, function done (err) { | ||
batchWrite(query, function done (err) { | ||
if (err) callback(err) | ||
@@ -53,0 +55,0 @@ else { |
@@ -11,3 +11,4 @@ /** | ||
let fmt = require('../helpers/_fmt') | ||
let dynamo = require('../helpers/_dynamo').doc | ||
let dynamo = require('../helpers/_dynamo') | ||
let util = require('util') | ||
@@ -41,3 +42,4 @@ /** | ||
validate.size(Item) | ||
doc.put({ | ||
let put = util.callbackify(doc.PutItem) | ||
put({ | ||
TableName, | ||
@@ -44,0 +46,0 @@ Item |
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
6
1031
0
36240
6
25
2
+ Added@aws-lite/client@^0.14.3
+ Added@aws-lite/dynamodb@^0.3.3
+ Added@aws-lite/ssm@^0.2.2
+ Added@aws-lite/client@0.14.3(transitive)
+ Added@aws-lite/dynamodb@0.3.9(transitive)
+ Added@aws-lite/ssm@0.2.5(transitive)
+ Addedaws4@1.13.2(transitive)
+ Addedini@4.1.3(transitive)