
Research
/Security News
Contagious Interview Campaign Escalates With 67 Malicious npm Packages and New Malware Loader
North Korean threat actors deploy 67 malicious npm packages using the newly discovered XORIndex malware loader.
snpkg-snapi-elasticsearch-resolver-builder
Advanced tools
Graphql resolver builder for elasticsearch based nodes
Build elastic search resolvers
Install by referencing the github location and the release number:
npm install --save social-native/snpkg-snapi-elasticsearch-resolver-builder#v0.1.0
NODE_ENV=development npm run migrate:latest
NODE_ENV=development npm run seed:run
npm run dev
query {
campaign(id: 2143) {
aggregation {
percentageHistogram {
audienceCity {
valueFormat
nameFormat
data {
name
value
}
}
audienceState {
data {
name
value
}
}
audienceCountry {
data {
name
value
}
}
}
sum {
comments {
total
}
reach {
total
}
likes {
total
}
engagements {
total
}
engagementRate {
total
}
contents {
total
}
creators {
total
}
}
distributed {
likes(input: { interval: 10000 }) {
data {
x
y
}
}
engagements(input: { interval: 10000 }) {
data {
x
y
}
}
engagementRate(input: { interval: 100, since: "0", until: "20000000000" }) {
data {
x
y
}
}
reach(input: { interval: 10000 }) {
data {
x
y
}
}
comments(input: { interval: 10000 }) {
data {
x
y
}
}
}
cumulative {
likes(input: { interval: 10000 }) {
data {
x
y
}
}
engagements(input: { interval: 10000 }) {
data {
x
y
}
}
engagementRate(input: { interval: 10000 }) {
data {
x
y
}
}
reach(input: { interval: 10000 }) {
data {
x
y
}
}
comments(input: { interval: 10000 }) {
data {
x
y
}
}
}
}
}
}
import {Base} from 'snpkg-snapi-elasticsearch-resolver-builder';
class SomeBuilder extends Base{}
setState
, queryBuilder
, and nodeBuilder
in the templateclass SomeBuilder extends ResolverBase {
protected setState({args}: IResolverInputObj): IState {
return {
range: this.calcRange(args.input || {}),
// 60 minutes is the default bucket size
interval: args && args.input && args.input.interval ? args.input.interval : 60
};
}
protected buildQuery(
{parent: {id}}: IResolverInputObj,
config: ICumulativePercentageConfig,
state: IState
) {
return {
body: {
size: 0,
query: {
bool: {
filter: [
{term: {campaign_id: id}},
{range: {metric_since_timestamp: state.range}}
]
}
},
sort: [{indexed_timestamp: 'desc'}],
aggs: {
per_day: {
date_histogram: {
field: 'indexed_timestamp',
interval: `${state.interval}m`,
format: 'yyyy-MM-dd',
min_doc_count: 0
},
...etc
}
}
}
};
}
protected buildNode(result: IQueryResult, state: IState) {
const parsedData = (get(result, 'body.aggregations.per_day.buckets') ||
[]) as ICumulativePercentBucket[];
...etc
return <GQLNodeType>;
}
}
import {DefaultQueryExecutor} from 'snpkg-snapi-elasticsearch-resolver-builder';
const queryExecutor = new DefaultQueryExecutor(ELASTIC_SEARCH_INDEX, elasticSearchClient);
import {builders} from 'snpkg-snapi-elasticsearch-resolver-builder';
const sumESResolver = new builders.Sum({queryExecutor});
const uniqueCountESResolver = new builders.UniqueCount({queryExecutor});
const distributedESResolver = new builders.Distributed({queryExecutor});
const cumulativeESResolver = new builders.Cumulative({queryExecutor});
const cumulativePercentESResolver = new builders.CumulativePercent({queryExecutor});
const distributedPercentESResolver = new builders.DistributedPercent({queryExecutor});
const sumPercentESResolver = new builders.SumPercent({queryExecutor});
const percentHistogramESResolver = new builders.PercentHistogram({queryExecutor});
const resolvers = {
sum: {
comments: sumESResolver.buildResolver({fieldToSum: 'comments'}),
engagementRate: sumPercentESResolver.buildResolver({
numeratorFieldToAggregateOver: 'engagements',
denominatorFieldToAggregateOver: 'reach'
}),
engagements: sumESResolver.buildResolver({fieldToSum: 'engagements'}),
likes: sumESResolver.buildResolver({fieldToSum: 'likes'}),
reach: sumESResolver.buildResolver({fieldToSum: 'reach'}),
creators: uniqueCountESResolver.buildResolver({fieldToUniquelyCount: 'creator_id'}),
contents: uniqueCountESResolver.buildResolver({fieldToUniquelyCount: 'content_post_id'})
},
distributed: {
comments: distributedESResolver.buildResolver({fieldToAggregateOver: 'comments'}),
engagementRate: distributedPercentESResolver.buildResolver({
numeratorFieldToAggregateOver: 'engagements',
denominatorFieldToAggregateOver: 'reach'
}),
engagements: distributedESResolver.buildResolver({fieldToAggregateOver: 'engagements'}),
likes: distributedESResolver.buildResolver({fieldToAggregateOver: 'likes'}),
reach: distributedESResolver.buildResolver({fieldToAggregateOver: 'reach'})
},
cumulative: {
comments: cumulativeESResolver.buildResolver({fieldToAggregateOver: 'comments'}),
engagementRate: cumulativePercentESResolver.buildResolver({
numeratorFieldToAggregateOver: 'engagements',
denominatorFieldToAggregateOver: 'reach'
}),
engagements: cumulativeESResolver.buildResolver({fieldToAggregateOver: 'engagements'}),
likes: cumulativeESResolver.buildResolver({fieldToAggregateOver: 'likes'}),
reach: cumulativeESResolver.buildResolver({fieldToAggregateOver: 'reach'})
},
percentageHistogram: {
audienceCountry: percentHistogramESResolver.buildResolver({
numeratorFieldToBucketBy: 'audience_geography_countries.name',
numeratorFieldToCount: 'audience_geography_countries.count',
denominatorFieldToAggregateOver: 'audience_age.count',
nameFormat: percentHistogramESResolver.nameFormats.ISO_COUNTRY_CODE
}),
audienceCity: percentHistogramESResolver.buildResolver({
numeratorFieldToBucketBy: 'audience_geography_cities.name',
numeratorFieldToCount: 'audience_geography_cities.count',
denominatorFieldToAggregateOver: 'audience_age.count',
nameFormat: percentHistogramESResolver.nameFormats.RAW
}),
audienceState: percentHistogramESResolver.buildResolver({
numeratorFieldToBucketBy: 'audience_geography_states.name',
numeratorFieldToCount: 'audience_geography_states.count',
denominatorFieldToAggregateOver: 'audience_age.count',
nameFormat: percentHistogramESResolver.nameFormats.RAW
})
}
};
FAQs
Graphql resolver builder for elasticsearch based nodes
The npm package snpkg-snapi-elasticsearch-resolver-builder receives a total of 0 weekly downloads. As such, snpkg-snapi-elasticsearch-resolver-builder popularity was classified as not popular.
We found that snpkg-snapi-elasticsearch-resolver-builder demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
/Security News
North Korean threat actors deploy 67 malicious npm packages using the newly discovered XORIndex malware loader.
Security News
Meet Socket at Black Hat & DEF CON 2025 for 1:1s, insider security talks at Allegiant Stadium, and a private dinner with top minds in software supply chain security.
Security News
CAI is a new open source AI framework that automates penetration testing tasks like scanning and exploitation up to 3,600× faster than humans.