Skip to content
This repository was archived by the owner on Nov 10, 2021. It is now read-only.

Commit 10cad1e

Browse files
author
hicetnunc2000
committed
latest
0 parents  commit 10cad1e

File tree

7 files changed

+349
-0
lines changed

7 files changed

+349
-0
lines changed

.README.md.swp

1 KB
Binary file not shown.

.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# package directories
2+
node_modules
3+
jspm_packages
4+
package-lock.json
5+
# Serverless directories
6+
.serverless

Dockerfile

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
FROM node:latest
2+
3+
WORKDIR /usr/src/app
4+
5+
COPY package*.json ./
6+
7+
RUN npm install
8+
9+
COPY . .
10+
11+
EXPOSE 3001
12+
CMD [ "node", "handler.js" ]

README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# hicetnunc-api
2+
3+
```
4+
the present repository presents a microservice for querying data and forging operations for hDAO dApp
5+
```
6+
```
7+
docker image build -t hicetnunc:1.0 .
8+
docker run -it -p 3001:3001 hicetnunc:1.0
9+
```

handler.js

Lines changed: 270 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,270 @@
1+
const serverless = require('serverless-http')
2+
const axios = require('axios')
3+
const IPFS = require('ipfs-api')
4+
const express = require('express')
5+
const cors = require('cors')
6+
const _ = require('lodash')
7+
8+
const ipfs = new IPFS({
9+
host: 'ipfs.infura.io',
10+
port: 5001,
11+
protocol: 'https'
12+
})
13+
14+
const test = async () => console.log(await ipfs.add(Buffer.from(JSON.stringify({oi : 'oi'}))))
15+
//test()
16+
const testnet = {
17+
objkts: 'KT1XFvSpHLUqtR1wyTwR8GJ2GswFJHfamGvT',
18+
ledgerPtr: 74453,
19+
metadataPtr: 74456,
20+
network: 'delphinet',
21+
protocol: 'KT1QfY5MgsbFayqSqvn7EJangrUAF4xt4B49',
22+
swapsPtr: 74465
23+
}
24+
25+
const mainnet = {
26+
objkts: 'KT1RJ6PbjHpwc3M5rw5s2Nbmefwbuwbdxton',
27+
ledgerPtr: 511,
28+
metadataPtr: 514,
29+
network: 'mainnet',
30+
protocol: 'KT1Hkg5qeNhfwpKW4fXvq7HGZB9z2EnmCCA9',
31+
swapsPtr: 523,
32+
hDAO : 'KT1AFA2mwNUMNd4SsujE1YYp29vd8BZejyKW',
33+
curations : 'KT1TybhR7XraG75JFYKSrh7KnxukMBT5dor6',
34+
curationsPtr : 519,
35+
royaltiesPtr : 522,
36+
ledgerPtr2 : 515
37+
}
38+
39+
const getStorage = async (config, kt) => {
40+
await axios.get(`https://better-call.dev/v1/contract/${config.network}/${kt}/storage`).then(res => console.log(res.data))
41+
}
42+
43+
//getStorage(mainnet, mainnet.curations)
44+
45+
const getSwaps = async (config) => {
46+
return await axios.get(`https://better-call.dev/v1/bigmap/${config.network}/${config.swapsPtr}/keys?size=2000`).then(res => {
47+
return (res.data).map(e => {
48+
var obj = {}
49+
obj['swap_id'] = e.data.key.value
50+
e.data.value != null ? e.data.value.children.map(e => obj[e.name] = e.value) : null
51+
return obj
52+
})
53+
})
54+
}
55+
/* .map(e => e.data.value != null ? (e.data.value.children).map(e => { return { key : e.name, value : e.value }} ) : null )) */
56+
57+
const getObjktLedger = async (config) => {
58+
return await axios.get(`https://better-call.dev/v1/bigmap/${config.network}/${config.ledgerPtr}/keys?size=2000`).then(res => res.data.map(e => ({ amount: parseInt(e.data.value.value), tz: e.data.key.children[0].value, tk_id: parseInt(e.data.key.children[1].value) })))
59+
}
60+
61+
const getObjktMetadata = async (config) => {
62+
return await axios.get(`https://better-call.dev/v1/bigmap/${config.network}/${config.metadataPtr}/keys?size=2000`).then(res => res.data.map(e => ({ tk_id: parseInt(e.data.key.value), metadata: e.data.value.children[1].children[0].value.split('//')[1] })))
63+
}
64+
65+
const getObjktLedgerOffset = async (config, offset) => { return await axios.get(`https://better-call.dev/v1/bigmap/${config.network}/${config.metadataPtr}/keys?offset=${offset * 10}`).then(res => res.data.map(e => ({ amount: parseInt(e.data.value.value), tz: e.data.key.children[0].value, tk_id: parseInt(e.data.key.children[1].value) }))) }
66+
67+
const objktById = async (config, id, res) => {
68+
69+
var ledger = await getObjktLedger(config)
70+
var objkt = feed(ledger).filter(e => e.tk_id == id)
71+
var metadata = await getObjktMetadata(config)
72+
var swaps = await getSwaps(config)
73+
var addrs = await owners(id)
74+
console.log(objkt)
75+
//objkt = [objkt[0].owners = addrs]
76+
//console.log('objktId', id, merge(objkt, metadata))
77+
readMetadata(mergeSwaps(merge(objkt, metadata), swaps), res)
78+
}
79+
80+
// get lower swap prices
81+
82+
const getFeed = async (config, offset, res) => {
83+
84+
var ledger = await getObjktLedger(config)
85+
var metadata = await getObjktMetadata(config)
86+
var swaps = await getSwaps(config)
87+
88+
89+
//console.log(mergeSwaps(ledger, swaps))
90+
//console.log(feed(desc(ledger)))
91+
//console.log(desc(feed(merge(ledger, metadata))))
92+
//console.log(merge(ledger, metadata))
93+
//console.log(ledger)
94+
//console.log(await updateAmount(ledger))
95+
//mergePromise(updateAmount(feed(merge(ledger, metadata))))
96+
//console.log(mergeSwaps(merge(offsetFunction(feed(desc(ledger)), offset), metadata), swaps))
97+
//mergePromise(updateAmount(merge(offsetFunction(desc(ledger), offset), metadata)))
98+
99+
readMetadata(mergeSwaps(merge(offsetFunction(feed(desc(ledger)), offset), metadata), swaps), res)
100+
101+
}
102+
103+
104+
/* const mergePromise = async (arg1, arg2) => {
105+
106+
var promise = Promise.all([arg1.map(e => e), arg2.map(e => e))
107+
promise.then(results => {
108+
results.map(e => console.log(e))
109+
})
110+
} */
111+
112+
const getTzLedger = async (config, tz, res) => {
113+
var ledger = await getObjktLedger(config)
114+
var metadata = await getObjktMetadata(config)
115+
var swaps = await getSwaps(config)
116+
117+
var filtered = filter(merge(ledger, metadata), tz)
118+
//updateAmount(filtered)
119+
readMetadata(mergeSwaps(filtered, swaps), res)
120+
121+
// profile info
122+
123+
}
124+
125+
const readMetadata = (arr, res) => {
126+
127+
var arr = arr.map(async e => {
128+
e.metadata = (JSON.parse(JSON.stringify((await ipfs.files.get(e.metadata))[0].content.toString('utf-8'))))
129+
return e
130+
})
131+
132+
/* resolve promise and dispatch answer */
133+
134+
var promise = Promise.all(arr.map(e => e))
135+
promise.then((results) => {
136+
aux_arr = results.map(e => e)
137+
138+
aux_arr = aux_arr.map(async e1 => {
139+
e1.total_amount = 0
140+
var aux_arr = (await getObjktLedger(mainnet))
141+
aux_arr.map(e2 => parseInt(e1.tk_id) == parseInt(e2.tk_id) ? e1.total_amount += e2.amount : null)
142+
return e1
143+
})
144+
145+
var internalPromise = Promise.all(aux_arr.map(e => e))
146+
internalPromise.then((results) => {
147+
aux_arr2 = results.map(e => e)
148+
149+
res.json({ result : jsonParse(aux_arr2) })
150+
})
151+
//console.log(jsonParse(aux_arr))
152+
//res.json({ result : jsonParse(aux_arr) })
153+
//console.log(aux_arr)
154+
/* feed order */
155+
//console.log(aux_arr)
156+
// func != null ? func(desc(aux_arr)) : desc(aux_arr) // treat json metadata
157+
158+
})
159+
160+
/* height */
161+
162+
}
163+
164+
const owners = async (id) => {
165+
const ledger = await getObjktLedger(testnet)
166+
return ledger.filter(e => e.tk_id == id)
167+
}
168+
169+
const updateAmount = async (arr) => {
170+
171+
//console.log(arr)
172+
173+
var arr = arr.map(async e1 => {
174+
e1.total_amount = 0
175+
var aux_arr = (await getObjktLedger(testnet))
176+
aux_arr.map(e2 => e1.tk_id == e2.tk_id ? e1.total_amount += e2.amount : null)
177+
//console.log(e1)
178+
return e1
179+
})
180+
181+
var aux_arr = []
182+
183+
var promise = Promise.all(arr.map(e => e))
184+
promise.then((results) => {
185+
aux_arr = results.map(e => e)
186+
console.log(aux_arr)
187+
/* aux_arr.map(async e => {
188+
var res = e.metadata.formats[0].mimeType == 'text/plain' ? await axios.get(e.metadata.formats[0].uri).then(res => res.data) : null
189+
res != null ? e.metadata.text = res : null
190+
//console.log(e)
191+
}) */
192+
193+
//console.log(aux_arr)
194+
195+
})
196+
}
197+
198+
/* aux functions */
199+
200+
// feed desc order
201+
const desc = arr => _.sortBy(arr, o => o.tk_id).reverse()
202+
203+
// get lower price from swaps
204+
205+
const mergeSwaps = (arr, swaps) => {
206+
arr.forEach((e1) => {
207+
208+
e1.swaps = []
209+
210+
swaps.forEach((e2) => {
211+
if (parseInt(e1.tk_id) === parseInt(e2.objkt_id)) {
212+
e1.swaps.push(e2)
213+
}
214+
})
215+
})
216+
return arr
217+
}
218+
219+
// offset
220+
221+
const offsetFunction = (arr, set) => arr.slice(set * 5, set * 5 + 5)
222+
223+
const jsonParse = arr => arr.map(e => { return { ...e, metadata: JSON.parse(e.metadata) } })
224+
225+
const filter = (data, tz) => _.filter(data, { tz: tz })
226+
227+
const feed = (data) => (_.uniqBy(data, 'tk_id'))
228+
229+
const getText = async (url) => await axios.get(url).then(res => res.data)
230+
231+
const merge = (a, b) => {
232+
a.forEach((e1) => {
233+
b.forEach((e2) => {
234+
if (e1.tk_id === e2.tk_id) {
235+
_.assign(e1, e2)
236+
}
237+
})
238+
})
239+
return a
240+
}
241+
242+
//getLedgerPtrs(objkts_testnet, 'delphinet')
243+
//getObjktLedger(testnet)
244+
//getObjktMetadata('delphinet')
245+
//getTzLedger(testnet, 'tz1Zz4MmtM6mpzh5XWiAEXGeP9iWsT7PSmzg')
246+
//getFeed(testnet, 2)
247+
//getObjktLedgerOffset(testnet)
248+
//getSwaps(testnet)
249+
//objktById(mainnet, 154)
250+
//getFeed(mainnet, 0)
251+
//getTzLedger(mainnet, 'tz1UBZUkXpKGhYsP5KtzDNqLLchwF4uHrGjw')
252+
253+
const app = express()
254+
255+
app.use(express.json())
256+
app.use(cors({origin : '*'}))
257+
258+
app.post('/feed', (req, res) => {
259+
getFeed(mainnet, req.body.counter, res)
260+
})
261+
262+
app.post('/tz', (req, res) => {
263+
getTzLedger(mainnet, req.body.tz, res)
264+
})
265+
266+
app.post('/objkt', (req, res) => {
267+
objktById(mainnet, parseInt(req.body.id), res)
268+
})
269+
270+
module.exports.handler = serverless(app)

package.json

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"name": "hicetnunc-api",
3+
"version": "1.0.0",
4+
"description": "",
5+
"main": "handler.js",
6+
"scripts": {
7+
"test": "echo \"Error: no test specified\" && exit 1"
8+
},
9+
"author": "",
10+
"license": "ISC",
11+
"dependencies": {
12+
"axios": "^0.21.1",
13+
"cors": "^2.8.5",
14+
"express": "^4.17.1",
15+
"ipfs-api": "^26.1.2",
16+
"lodash": "^4.17.21",
17+
"serverless-http": "^2.6.0",
18+
"serverless-plugin-include-dependencies": "^4.1.0"
19+
}
20+
}

serverless.yml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
2+
service: hicetnunc-api
3+
4+
frameworkVersion: '2.8.0'
5+
6+
package:
7+
exclude:
8+
- node_modules/**
9+
10+
plugins:
11+
- serverless-plugin-include-dependencies
12+
13+
provider:
14+
name: aws
15+
runtime: nodejs12.x
16+
17+
functions:
18+
handler:
19+
handler: handler.handler
20+
timeout: 120
21+
events:
22+
- http:
23+
path: /
24+
method: ANY
25+
cors:
26+
origin: '*'
27+
- http:
28+
path: /{proxy+}
29+
method: ANY
30+
cors:
31+
origin: '*'
32+

0 commit comments

Comments
 (0)