strip html from description

This commit is contained in:
2023-11-24 14:39:28 -05:00
parent f7c6034fb0
commit 5f6e638903
526 changed files with 4373 additions and 23270 deletions
+10 -2
View File
@@ -16,7 +16,7 @@ setup:
--region us-east-1 --region us-east-1
awslocal ssm put-parameter \ awslocal ssm put-parameter \
--name /rss-nostr-lambda/last-run-time \ --name /rss-nostr-lambda/last-run-time \
--value "2023-11-24T00:00:00Z" \ --value "2023-11-23T14:46:56Z" \
--overwrite --overwrite
rm handler.zip rm handler.zip
@@ -25,7 +25,15 @@ invoke:
--region us-east-1 \ --region us-east-1 \
--function-name rss-nostr-lambda \ --function-name rss-nostr-lambda \
--cli-binary-format raw-in-base64-out \ --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 response.json
recreate: recreate:
+47 -37
View File
@@ -13,8 +13,17 @@ const toHexString = nsec => {
return s + hex; 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) => { export const handler = async (event) => {
const region = process.env.AWS_REGION || "us-east-1" const region = process.env.AWS_REGION || "us-east-1"
const feed = event.feedUrl const feed = event.feedUrl
@@ -39,87 +48,88 @@ export const handler = async (event) => {
const ssmGetCommand = new GetParameterCommand(params); const ssmGetCommand = new GetParameterCommand(params);
let since = new Date() let since = new Date()
ssmClient.send(ssmGetCommand) await ssmClient.send(ssmGetCommand)
.then(data => { .then(data => {
console.log("Using since date:", data.Parameter.Value)
since = data.Parameter.Value since = data.Parameter.Value
}).catch(err => { }).catch(err => {
console.error(err) console.dir(err)
response.errors.push(err) response.errors.push(err)
return response return response
}) })
if (feed === "") { if (feed === "") {
console.error("feedUrl was not set.") console.dir("feedUrl was not set.")
return { return {
statusCode: 400, statusCode: 400,
body: "feedUrl must be provided in payload." body: "feedUrl must be provided in payload."
} }
} }
const ndk = new NDK({ const ndk = new NDK({
signer: new NDKPrivateKeySigner(privkey),
explicitRelayUrls: [ explicitRelayUrls: [
"wss://nostr.mom", "wss://nostr.mom",
"wss://nostr.snort.social", "wss://nostr.snort.social",
"wss://nostr.lol" "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 => { await ndk.connect(6000).catch(err => {
console.error(err) console.dir(err)
response.errors.push ("failed to connect to relay", 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 => { .catch(err => {
console.error(err.error); console.dir(err);
return response 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 response.totalItems = filtered.length
for (let item of filtered) { for (let item of filtered) {
let ndkEvent = new NDKEvent(ndk, { let ndkEvent = new NDKEvent(ndk, {
kind: 1, kind: 1,
pubkey: user.hexpubkey, pubkey: ndk.signer.user().hexpubkey,
content: `${item.description}\n${item.link}`, content: htmlToAscii(item.description),
created_at: Math.floor(Date.now() / 1000), created_at: Math.floor(Date.now() / 1000),
}) })
if (dryrun) { if (dryrun) {
console.dir(ndkEvent)
response.successes++ response.successes++
continue continue
} }
await ndkEvent.publish() try {
.then(() => { await ndkEvent.sign(ndk.signer)
const published = await ndkEvent.publish()
if (published) {
response.successes++ response.successes++
}).catch(err => {
console.error(err) params.Name = lastRunTimeParam
response.errors.push(err) params.Value = new Date().toISOString()
}) params.Type = "String"
} params.Overwrite = true
params.Name = lastRunTimeParam const ssmPutCommand = new PutParameterCommand(params)
params.Value = new Date().toISOString() await ssmClient.send(ssmPutCommand)
params.Type = "String" .catch(err => {
params.Overwrite = true console.dir(err)
response.errors.push(err)
const ssmPutCommand = new PutParameterCommand(params) return response
ssmClient.send(ssmPutCommand) })
.catch(err => { }
console.error(err) } catch(e) {
response.errors.push(err) console.dir(e)
response.errors.push(e)
return response return response
}) }
}
return response return response
} }
+60 -71
View File
@@ -624,6 +624,28 @@
"url": "https://paulmillr.com/funding/" "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": { "node_modules/@noble/hashes": {
"version": "1.3.2", "version": "1.3.2",
"resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz",
@@ -647,40 +669,23 @@
] ]
}, },
"node_modules/@nostr-dev-kit/ndk": { "node_modules/@nostr-dev-kit/ndk": {
"version": "2.0.5", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/@nostr-dev-kit/ndk/-/ndk-2.0.5.tgz", "resolved": "https://registry.npmjs.org/@nostr-dev-kit/ndk/-/ndk-2.1.1.tgz",
"integrity": "sha512-EvVr43y+4N9lMSZIIe5V8jFWYlKTVkMyyJfbgRaDGCGiBZAm9iy0wcO2Yi+W57awOAlvr3mjT5fAwG9RDb6HSA==", "integrity": "sha512-sMD4re3QVpSVMzoyvJAFiftPxJBXkhjRInrK5DcjhSkkPTlJhI+oiVXCpcvCJ3PHT5PilhDgKkg3LyOvv135UQ==",
"dependencies": { "dependencies": {
"@noble/hashes": "^1.3.1", "@noble/hashes": "^1.3.1",
"@noble/secp256k1": "^2.0.0", "@noble/secp256k1": "^2.0.0",
"@scure/base": "^1.1.1", "@scure/base": "^1.1.1",
"debug": "^4.3.4", "debug": "^4.3.4",
"eventemitter3": "^5.0.1",
"light-bolt11-decoder": "^3.0.0", "light-bolt11-decoder": "^3.0.0",
"node-fetch": "^3.3.1", "node-fetch": "^3.3.1",
"nostr-tools": "^1.15.0", "nostr-tools": "^1.15.0",
"tseep": "^1.1.1",
"typescript-lru-cache": "^2.0.0", "typescript-lru-cache": "^2.0.0",
"utf8-buffer": "^1.0.0", "utf8-buffer": "^1.0.0",
"websocket-polyfill": "^0.0.3" "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": { "node_modules/@scure/base": {
"version": "1.1.3", "version": "1.1.3",
"resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.3.tgz", "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.3.tgz",
@@ -702,28 +707,6 @@
"url": "https://paulmillr.com/funding/" "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": { "node_modules/@scure/bip39": {
"version": "1.2.1", "version": "1.2.1",
"resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz", "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz",
@@ -1291,6 +1274,25 @@
"node-fetch": "^2.6.12" "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": { "node_modules/d": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
@@ -1357,11 +1359,6 @@
"ext": "^1.1.2" "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": { "node_modules/ext": {
"version": "1.7.0", "version": "1.7.0",
"resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz",
@@ -1505,22 +1502,20 @@
} }
}, },
"node_modules/node-fetch": { "node_modules/node-fetch": {
"version": "2.7.0", "version": "3.3.2",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz",
"integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==",
"dependencies": { "dependencies": {
"whatwg-url": "^5.0.0" "data-uri-to-buffer": "^4.0.0",
"fetch-blob": "^3.1.4",
"formdata-polyfill": "^4.0.10"
}, },
"engines": { "engines": {
"node": "4.x || >=6.0.0" "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
}, },
"peerDependencies": { "funding": {
"encoding": "^0.1.0" "type": "opencollective",
}, "url": "https://opencollective.com/node-fetch"
"peerDependenciesMeta": {
"encoding": {
"optional": true
}
} }
}, },
"node_modules/node-gyp-build": { "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": { "node_modules/nostr-tools/node_modules/@noble/hashes": {
"version": "1.3.1", "version": "1.3.1",
"resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", "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", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" "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": { "node_modules/tslib": {
"version": "2.6.2", "version": "2.6.2",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",

Some files were not shown because too many files have changed in this diff Show More