strip html from description
This commit is contained in:
@@ -16,7 +16,7 @@ setup:
|
||||
--region us-east-1
|
||||
awslocal ssm put-parameter \
|
||||
--name /rss-nostr-lambda/last-run-time \
|
||||
--value "2023-11-24T00:00:00Z" \
|
||||
--value "2023-11-23T14:46:56Z" \
|
||||
--overwrite
|
||||
rm handler.zip
|
||||
|
||||
@@ -25,7 +25,15 @@ invoke:
|
||||
--region us-east-1 \
|
||||
--function-name rss-nostr-lambda \
|
||||
--cli-binary-format raw-in-base64-out \
|
||||
--payload '{"dryRun":true,"feedUrl":"https://nitter.1d4.us/culturaltutor/rss","nostrNsec":"nsec1wp68lflspznnmelmjh5ktflyv6c4ljf8xrlkey0w8yqr4305awcs8wyakj","lastRunTimeParam":"/rss-nostr-lambda/last-run-time"}' \
|
||||
--payload '{"feedUrl":"https://nitter.1d4.us/culturaltutor/rss","nostrNsec":"nsec1eg458xl7d3eywld94rpfx8daa6h2hqfqxylmk43dz6ep8q388e2sfe4thg","lastRunTimeParam":"/rss-nostr-lambda/last-run-time"}' \
|
||||
response.json
|
||||
|
||||
invoke-dryrun:
|
||||
awslocal lambda invoke \
|
||||
--region us-east-1 \
|
||||
--function-name rss-nostr-lambda \
|
||||
--cli-binary-format raw-in-base64-out \
|
||||
--payload '{"dryRun":true,"feedUrl":"https://nitter.1d4.us/culturaltutor/rss","nostrNsec":"nsec1eg458xl7d3eywld94rpfx8daa6h2hqfqxylmk43dz6ep8q388e2sfe4thg","lastRunTimeParam":"/rss-nostr-lambda/last-run-time"}' \
|
||||
response.json
|
||||
|
||||
recreate:
|
||||
|
||||
@@ -13,8 +13,17 @@ const toHexString = nsec => {
|
||||
return s + hex;
|
||||
}, '');
|
||||
}
|
||||
|
||||
|
||||
const htmlToAscii = html => {
|
||||
let ascii = html
|
||||
ascii = ascii.replaceAll("<p>", "")
|
||||
ascii = ascii.replaceAll("</p>", "")
|
||||
ascii = ascii.replaceAll("<br>", "")
|
||||
ascii = ascii.replaceAll("<img src=\"", "")
|
||||
ascii = ascii.replaceAll("\" style=\"max-width:250px;\" />", "")
|
||||
return ascii
|
||||
}
|
||||
|
||||
export const handler = async (event) => {
|
||||
const region = process.env.AWS_REGION || "us-east-1"
|
||||
const feed = event.feedUrl
|
||||
@@ -39,87 +48,88 @@ export const handler = async (event) => {
|
||||
const ssmGetCommand = new GetParameterCommand(params);
|
||||
|
||||
let since = new Date()
|
||||
ssmClient.send(ssmGetCommand)
|
||||
await ssmClient.send(ssmGetCommand)
|
||||
.then(data => {
|
||||
console.log("Using since date:", data.Parameter.Value)
|
||||
since = data.Parameter.Value
|
||||
}).catch(err => {
|
||||
console.error(err)
|
||||
console.dir(err)
|
||||
response.errors.push(err)
|
||||
return response
|
||||
})
|
||||
|
||||
|
||||
if (feed === "") {
|
||||
console.error("feedUrl was not set.")
|
||||
console.dir("feedUrl was not set.")
|
||||
return {
|
||||
statusCode: 400,
|
||||
body: "feedUrl must be provided in payload."
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
const ndk = new NDK({
|
||||
signer: new NDKPrivateKeySigner(privkey),
|
||||
explicitRelayUrls: [
|
||||
"wss://nostr.mom",
|
||||
"wss://nostr.snort.social",
|
||||
"wss://nostr.lol"
|
||||
]
|
||||
})
|
||||
const user = await ndk.signer.user()
|
||||
|
||||
for (let url of user.relayUrls) {
|
||||
ndk.pool.relays.push(url)
|
||||
}
|
||||
|
||||
await ndk.connect(6000).catch(err => {
|
||||
console.error(err)
|
||||
response.errors.push ("failed to connect to relay", err)
|
||||
console.dir(err)
|
||||
response.errors.push("failed to connect to relay", err)
|
||||
})
|
||||
|
||||
let rss = await extract(feed)
|
||||
const signer = new NDKPrivateKeySigner(privkey)
|
||||
ndk.signer = signer
|
||||
|
||||
let rss = await extract(feed, { descriptionMaxLen: 0, normalization: false })
|
||||
.catch(err => {
|
||||
console.error(err.error);
|
||||
console.dir(err);
|
||||
return response
|
||||
})
|
||||
|
||||
let filtered = rss.entries.filter(item => moment(item.published).isAfter(since))
|
||||
let filtered = rss.item.filter(item => moment(item.published).isAfter(since))
|
||||
response.totalItems = filtered.length
|
||||
|
||||
for (let item of filtered) {
|
||||
let ndkEvent = new NDKEvent(ndk, {
|
||||
kind: 1,
|
||||
pubkey: user.hexpubkey,
|
||||
content: `${item.description}\n${item.link}`,
|
||||
pubkey: ndk.signer.user().hexpubkey,
|
||||
content: htmlToAscii(item.description),
|
||||
created_at: Math.floor(Date.now() / 1000),
|
||||
})
|
||||
|
||||
if (dryrun) {
|
||||
console.dir(ndkEvent)
|
||||
response.successes++
|
||||
continue
|
||||
}
|
||||
|
||||
await ndkEvent.publish()
|
||||
.then(() => {
|
||||
try {
|
||||
await ndkEvent.sign(ndk.signer)
|
||||
const published = await ndkEvent.publish()
|
||||
if (published) {
|
||||
response.successes++
|
||||
}).catch(err => {
|
||||
console.error(err)
|
||||
response.errors.push(err)
|
||||
})
|
||||
}
|
||||
|
||||
params.Name = lastRunTimeParam
|
||||
params.Value = new Date().toISOString()
|
||||
params.Type = "String"
|
||||
params.Overwrite = true
|
||||
|
||||
params.Name = lastRunTimeParam
|
||||
params.Value = new Date().toISOString()
|
||||
params.Type = "String"
|
||||
params.Overwrite = true
|
||||
|
||||
const ssmPutCommand = new PutParameterCommand(params)
|
||||
ssmClient.send(ssmPutCommand)
|
||||
.catch(err => {
|
||||
console.error(err)
|
||||
response.errors.push(err)
|
||||
const ssmPutCommand = new PutParameterCommand(params)
|
||||
await ssmClient.send(ssmPutCommand)
|
||||
.catch(err => {
|
||||
console.dir(err)
|
||||
response.errors.push(err)
|
||||
return response
|
||||
})
|
||||
}
|
||||
} catch(e) {
|
||||
console.dir(e)
|
||||
response.errors.push(e)
|
||||
return response
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
return response
|
||||
}
|
||||
|
||||
+60
-71
@@ -624,6 +624,28 @@
|
||||
"url": "https://paulmillr.com/funding/"
|
||||
}
|
||||
},
|
||||
"node_modules/@noble/curves": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz",
|
||||
"integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==",
|
||||
"dependencies": {
|
||||
"@noble/hashes": "1.3.1"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://paulmillr.com/funding/"
|
||||
}
|
||||
},
|
||||
"node_modules/@noble/curves/node_modules/@noble/hashes": {
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz",
|
||||
"integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==",
|
||||
"engines": {
|
||||
"node": ">= 16"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://paulmillr.com/funding/"
|
||||
}
|
||||
},
|
||||
"node_modules/@noble/hashes": {
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz",
|
||||
@@ -647,40 +669,23 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@nostr-dev-kit/ndk": {
|
||||
"version": "2.0.5",
|
||||
"resolved": "https://registry.npmjs.org/@nostr-dev-kit/ndk/-/ndk-2.0.5.tgz",
|
||||
"integrity": "sha512-EvVr43y+4N9lMSZIIe5V8jFWYlKTVkMyyJfbgRaDGCGiBZAm9iy0wcO2Yi+W57awOAlvr3mjT5fAwG9RDb6HSA==",
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/@nostr-dev-kit/ndk/-/ndk-2.1.1.tgz",
|
||||
"integrity": "sha512-sMD4re3QVpSVMzoyvJAFiftPxJBXkhjRInrK5DcjhSkkPTlJhI+oiVXCpcvCJ3PHT5PilhDgKkg3LyOvv135UQ==",
|
||||
"dependencies": {
|
||||
"@noble/hashes": "^1.3.1",
|
||||
"@noble/secp256k1": "^2.0.0",
|
||||
"@scure/base": "^1.1.1",
|
||||
"debug": "^4.3.4",
|
||||
"eventemitter3": "^5.0.1",
|
||||
"light-bolt11-decoder": "^3.0.0",
|
||||
"node-fetch": "^3.3.1",
|
||||
"nostr-tools": "^1.15.0",
|
||||
"tseep": "^1.1.1",
|
||||
"typescript-lru-cache": "^2.0.0",
|
||||
"utf8-buffer": "^1.0.0",
|
||||
"websocket-polyfill": "^0.0.3"
|
||||
}
|
||||
},
|
||||
"node_modules/@nostr-dev-kit/ndk/node_modules/node-fetch": {
|
||||
"version": "3.3.2",
|
||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz",
|
||||
"integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==",
|
||||
"dependencies": {
|
||||
"data-uri-to-buffer": "^4.0.0",
|
||||
"fetch-blob": "^3.1.4",
|
||||
"formdata-polyfill": "^4.0.10"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/node-fetch"
|
||||
}
|
||||
},
|
||||
"node_modules/@scure/base": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.3.tgz",
|
||||
@@ -702,28 +707,6 @@
|
||||
"url": "https://paulmillr.com/funding/"
|
||||
}
|
||||
},
|
||||
"node_modules/@scure/bip32/node_modules/@noble/curves": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz",
|
||||
"integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==",
|
||||
"dependencies": {
|
||||
"@noble/hashes": "1.3.1"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://paulmillr.com/funding/"
|
||||
}
|
||||
},
|
||||
"node_modules/@scure/bip32/node_modules/@noble/hashes": {
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz",
|
||||
"integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==",
|
||||
"engines": {
|
||||
"node": ">= 16"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://paulmillr.com/funding/"
|
||||
}
|
||||
},
|
||||
"node_modules/@scure/bip39": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz",
|
||||
@@ -1291,6 +1274,25 @@
|
||||
"node-fetch": "^2.6.12"
|
||||
}
|
||||
},
|
||||
"node_modules/cross-fetch/node_modules/node-fetch": {
|
||||
"version": "2.7.0",
|
||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
|
||||
"integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
|
||||
"dependencies": {
|
||||
"whatwg-url": "^5.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "4.x || >=6.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"encoding": "^0.1.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"encoding": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/d": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
|
||||
@@ -1357,11 +1359,6 @@
|
||||
"ext": "^1.1.2"
|
||||
}
|
||||
},
|
||||
"node_modules/eventemitter3": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
|
||||
"integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="
|
||||
},
|
||||
"node_modules/ext": {
|
||||
"version": "1.7.0",
|
||||
"resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz",
|
||||
@@ -1505,22 +1502,20 @@
|
||||
}
|
||||
},
|
||||
"node_modules/node-fetch": {
|
||||
"version": "2.7.0",
|
||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
|
||||
"integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
|
||||
"version": "3.3.2",
|
||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz",
|
||||
"integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==",
|
||||
"dependencies": {
|
||||
"whatwg-url": "^5.0.0"
|
||||
"data-uri-to-buffer": "^4.0.0",
|
||||
"fetch-blob": "^3.1.4",
|
||||
"formdata-polyfill": "^4.0.10"
|
||||
},
|
||||
"engines": {
|
||||
"node": "4.x || >=6.0.0"
|
||||
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"encoding": "^0.1.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"encoding": {
|
||||
"optional": true
|
||||
}
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/node-fetch"
|
||||
}
|
||||
},
|
||||
"node_modules/node-gyp-build": {
|
||||
@@ -1554,17 +1549,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/nostr-tools/node_modules/@noble/curves": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz",
|
||||
"integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==",
|
||||
"dependencies": {
|
||||
"@noble/hashes": "1.3.1"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://paulmillr.com/funding/"
|
||||
}
|
||||
},
|
||||
"node_modules/nostr-tools/node_modules/@noble/hashes": {
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz",
|
||||
@@ -1597,6 +1581,11 @@
|
||||
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
|
||||
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
|
||||
},
|
||||
"node_modules/tseep": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/tseep/-/tseep-1.1.3.tgz",
|
||||
"integrity": "sha512-deBIcIlXUMlr3xaN0UEochqjU/zXGaZGPqHPd1rxo4w6DklBdRM6WQQtsk7bekIF+qY6QTeen3nE6OA7BxL9rg=="
|
||||
},
|
||||
"node_modules/tslib": {
|
||||
"version": "2.6.2",
|
||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
|
||||
|
||||
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user