Compare commits

..

No commits in common. "master" and "v1.0.3" have entirely different histories.

19 changed files with 309 additions and 7500 deletions

View File

@ -120,7 +120,7 @@ pages:
stage: metadata stage: metadata
script: script:
- npmci node install lts - npmci node install lts
- npmci command npm install -g @git.zone/tsdoc - npmci command npm install -g @gitzone/tsdoc
- npmci npm prepare - npmci npm prepare
- npmci npm install - npmci npm install
- npmci command tsdoc - npmci command tsdoc

4
.vscode/launch.json vendored
View File

@ -8,7 +8,7 @@
"args": [ "args": [
"${relativeFile}" "${relativeFile}"
], ],
"runtimeArgs": ["-r", "@git.zone/tsrun"], "runtimeArgs": ["-r", "@gitzone/tsrun"],
"cwd": "${workspaceRoot}", "cwd": "${workspaceRoot}",
"protocol": "inspector", "protocol": "inspector",
"internalConsoleOptions": "openOnSessionStart" "internalConsoleOptions": "openOnSessionStart"
@ -20,7 +20,7 @@
"args": [ "args": [
"test/test.ts" "test/test.ts"
], ],
"runtimeArgs": ["-r", "@git.zone/tsrun"], "runtimeArgs": ["-r", "@gitzone/tsrun"],
"cwd": "${workspaceRoot}", "cwd": "${workspaceRoot}",
"protocol": "inspector", "protocol": "inspector",
"internalConsoleOptions": "openOnSessionStart" "internalConsoleOptions": "openOnSessionStart"

View File

@ -1,34 +0,0 @@
# Changelog
## 2024-07-02 - 1.0.7 - fix(metadata)
Update project metadata and readme for new scope and descriptions
- Updated package name and description in package.json
- Updated repository and scope information in npmextra.json
- Expanded readme with detailed usage instructions and examples
## 2024-07-01 - 1.0.6 - fix(medium)
Fix various bugs and improve async handling.
- Update @push.rocks/qenv dependency to ^6.0.5
- Fix bug in test: await getEnvVarOnDemand
- Improve error handling in getAccountInfo
- Simplify fetching publications by refactoring methods in MediumPublication and MediumAccount classes
## 2024-07-01 - 1.0.5 - fix(core)
Fixed module name inconsistencies and documentation links
- Corrected module names in package.json and VSCode launch configuration.
- Updated npm package name from '@pushrocks' to '@push.rocks' in readme.md and package.json.
- Fixed test imports and improved test scripts.
- Added updated TypeScript configuration file tsconfig.json.
## 2020-11-17 - 1.0.4 - No significant changes
No significant changes made in this version update.
## 2020-11-16 - 1.0.3 to 1.0.1 - Core Updates
Routine maintenance and updates in the core functionality.
- fix(core): update

View File

@ -2,30 +2,13 @@
"gitzone": { "gitzone": {
"projectType": "npm", "projectType": "npm",
"module": { "module": {
"githost": "code.foss.global", "githost": "gitlab.com",
"gitscope": "apiclient.xyz", "gitscope": "mojoio",
"gitrepo": "medium", "gitrepo": "medium",
"shortDescription": "an unofficial medium.com API package", "shortDescription": "an unofficial medium.com API package",
"npmPackagename": "@apiclient.xyz/medium", "npmPackagename": "@pushrocks/medium",
"license": "MIT", "license": "MIT",
"projectDomain": "apiclient.xyz", "projectDomain": "mojo.io"
"description": "An unofficial Medium.com API package that enables interaction with Medium's features using Node.js.",
"keywords": [
"Medium",
"API",
"Medium API",
"unofficial",
"Node.js",
"TypeScript",
"publications",
"posts",
"account management",
"automation",
"JavaScript",
"blogging",
"content creation",
"web development"
]
} }
}, },
"npmci": { "npmci": {

372
package-lock.json generated
View File

@ -1,6 +1,6 @@
{ {
"name": "@mojoio/medium", "name": "@mojoio/medium",
"version": "1.0.7", "version": "1.0.3",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {
@ -11,11 +11,11 @@
"dev": true, "dev": true,
"requires": { "requires": {
"@apiglobal/typedrequest-interfaces": "^1.0.15", "@apiglobal/typedrequest-interfaces": "^1.0.15",
"@push.rocks/isounique": "^1.0.4", "@pushrocks/isounique": "^1.0.4",
"@push.rocks/lik": "^4.0.17", "@pushrocks/lik": "^4.0.17",
"@push.rocks/smartdelay": "^2.0.10", "@pushrocks/smartdelay": "^2.0.10",
"@push.rocks/smartpromise": "^3.0.6", "@pushrocks/smartpromise": "^3.0.6",
"@push.rocks/webrequest": "^2.0.12" "@pushrocks/webrequest": "^2.0.12"
} }
}, },
"@apiglobal/typedrequest-interfaces": { "@apiglobal/typedrequest-interfaces": {
@ -1121,22 +1121,22 @@
"to-fast-properties": "^2.0.0" "to-fast-properties": "^2.0.0"
} }
}, },
"@git.zone/tsbuild": { "@gitzone/tsbuild": {
"version": "2.1.25", "version": "2.1.25",
"resolved": "https://verdaccio.lossless.one/@gitzone%2ftsbuild/-/tsbuild-2.1.25.tgz", "resolved": "https://verdaccio.lossless.one/@gitzone%2ftsbuild/-/tsbuild-2.1.25.tgz",
"integrity": "sha512-KtesoQEm96x0/x1800R3pcj06RcYTdqwBhG9oje+jQW4qZs/bnUirWZXkRMSLAK92cVm899KzZtYkq/fKga2+A==", "integrity": "sha512-KtesoQEm96x0/x1800R3pcj06RcYTdqwBhG9oje+jQW4qZs/bnUirWZXkRMSLAK92cVm899KzZtYkq/fKga2+A==",
"dev": true, "dev": true,
"requires": { "requires": {
"@push.rocks/early": "^3.0.6", "@pushrocks/early": "^3.0.6",
"@push.rocks/smartcli": "^3.0.12", "@pushrocks/smartcli": "^3.0.12",
"@push.rocks/smartfile": "^8.0.0", "@pushrocks/smartfile": "^8.0.0",
"@push.rocks/smartlog": "^2.0.36", "@pushrocks/smartlog": "^2.0.36",
"@push.rocks/smartpath": "^4.0.3", "@pushrocks/smartpath": "^4.0.3",
"@push.rocks/smartpromise": "^3.0.6", "@pushrocks/smartpromise": "^3.0.6",
"typescript": "^3.9.7" "typescript": "^3.9.7"
} }
}, },
"@git.zone/tsbundle": { "@gitzone/tsbundle": {
"version": "1.0.78", "version": "1.0.78",
"resolved": "https://verdaccio.lossless.one/@gitzone%2ftsbundle/-/tsbundle-1.0.78.tgz", "resolved": "https://verdaccio.lossless.one/@gitzone%2ftsbundle/-/tsbundle-1.0.78.tgz",
"integrity": "sha512-QcjzUPYfp7w2uaNom2eOFiBBPabVOqmaI7Cun1P+BBB+a8JwNlpyNOwDY6cPr2MEW2t9Picbiz9yyqkG1qYrtw==", "integrity": "sha512-QcjzUPYfp7w2uaNom2eOFiBBPabVOqmaI7Cun1P+BBB+a8JwNlpyNOwDY6cPr2MEW2t9Picbiz9yyqkG1qYrtw==",
@ -1148,12 +1148,12 @@
"@babel/plugin-transform-runtime": "^7.11.0", "@babel/plugin-transform-runtime": "^7.11.0",
"@babel/preset-env": "^7.11.0", "@babel/preset-env": "^7.11.0",
"@babel/runtime": "^7.11.2", "@babel/runtime": "^7.11.2",
"@push.rocks/early": "^3.0.6", "@pushrocks/early": "^3.0.6",
"@push.rocks/smartcli": "^3.0.12", "@pushrocks/smartcli": "^3.0.12",
"@push.rocks/smartfile": "^8.0.0", "@pushrocks/smartfile": "^8.0.0",
"@push.rocks/smartlog": "^2.0.36", "@pushrocks/smartlog": "^2.0.36",
"@push.rocks/smartlog-destination-local": "^8.0.8", "@pushrocks/smartlog-destination-local": "^8.0.8",
"@push.rocks/smartparcel": "^1.0.5", "@pushrocks/smartparcel": "^1.0.5",
"@rollup/plugin-commonjs": "^14.0.0", "@rollup/plugin-commonjs": "^14.0.0",
"@rollup/plugin-json": "^4.1.0", "@rollup/plugin-json": "^4.1.0",
"@rollup/plugin-node-resolve": "^8.4.0", "@rollup/plugin-node-resolve": "^8.4.0",
@ -1168,28 +1168,28 @@
"typescript": "^3.9.7" "typescript": "^3.9.7"
} }
}, },
"@git.zone/tsrun": { "@gitzone/tsrun": {
"version": "1.2.12", "version": "1.2.12",
"resolved": "https://verdaccio.lossless.one/@gitzone%2ftsrun/-/tsrun-1.2.12.tgz", "resolved": "https://verdaccio.lossless.one/@gitzone%2ftsrun/-/tsrun-1.2.12.tgz",
"integrity": "sha512-xR+Ry3dj1L4fR72cYgEAmlE9colXXSPNg0i2jRJFudGO7ZqeGn+mPDOXmg/g7RbEd1wa9uJepgsOy4IlC9JB+g==", "integrity": "sha512-xR+Ry3dj1L4fR72cYgEAmlE9colXXSPNg0i2jRJFudGO7ZqeGn+mPDOXmg/g7RbEd1wa9uJepgsOy4IlC9JB+g==",
"dev": true, "dev": true,
"requires": { "requires": {
"@push.rocks/smartfile": "^7.0.12", "@pushrocks/smartfile": "^7.0.12",
"ts-node": "^8.10.2", "ts-node": "^8.10.2",
"typescript": "^3.9.3" "typescript": "^3.9.3"
}, },
"dependencies": { "dependencies": {
"@push.rocks/smartfile": { "@pushrocks/smartfile": {
"version": "7.0.12", "version": "7.0.12",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartfile/-/smartfile-7.0.12.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartfile/-/smartfile-7.0.12.tgz",
"integrity": "sha512-/4T4K07WqOXGvQQ/VFyRMUd8kN1RdqQgmrqHjZE/vMDLz7RYsqU9FlEN6OGX1G1E6pR9IdHnT4ClXPlvzClHYg==", "integrity": "sha512-/4T4K07WqOXGvQQ/VFyRMUd8kN1RdqQgmrqHjZE/vMDLz7RYsqU9FlEN6OGX1G1E6pR9IdHnT4ClXPlvzClHYg==",
"dev": true, "dev": true,
"requires": { "requires": {
"@push.rocks/smarthash": "^2.1.6", "@pushrocks/smarthash": "^2.1.6",
"@push.rocks/smartmime": "^1.0.3", "@pushrocks/smartmime": "^1.0.3",
"@push.rocks/smartpath": "^4.0.1", "@pushrocks/smartpath": "^4.0.1",
"@push.rocks/smartpromise": "^3.0.6", "@pushrocks/smartpromise": "^3.0.6",
"@push.rocks/smartrequest": "^1.1.47", "@pushrocks/smartrequest": "^1.1.47",
"@types/fs-extra": "^8.1.0", "@types/fs-extra": "^8.1.0",
"fs-extra": "^8.1.0", "fs-extra": "^8.1.0",
"glob": "^7.1.6", "glob": "^7.1.6",
@ -1233,23 +1233,23 @@
} }
} }
}, },
"@git.zone/tstest": { "@gitzone/tstest": {
"version": "1.0.52", "version": "1.0.52",
"resolved": "https://verdaccio.lossless.one/@gitzone%2ftstest/-/tstest-1.0.52.tgz", "resolved": "https://verdaccio.lossless.one/@gitzone%2ftstest/-/tstest-1.0.52.tgz",
"integrity": "sha512-9n6mhGAd1MKMb4lcXstJvoG9bIl+mb+M9wdajbFe/jzv9q62P5RL9pSdyW4Yk8I7ObJmyggBvr8cLaOUsaqzAQ==", "integrity": "sha512-9n6mhGAd1MKMb4lcXstJvoG9bIl+mb+M9wdajbFe/jzv9q62P5RL9pSdyW4Yk8I7ObJmyggBvr8cLaOUsaqzAQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"@git.zone/tsbundle": "^1.0.78", "@gitzone/tsbundle": "^1.0.78",
"@git.zone/tsrun": "^1.2.12", "@gitzone/tsrun": "^1.2.12",
"@push.rocks/consolecolor": "^2.0.1", "@pushrocks/consolecolor": "^2.0.1",
"@push.rocks/smartbrowser": "^1.0.17", "@pushrocks/smartbrowser": "^1.0.17",
"@push.rocks/smartdelay": "^2.0.10", "@pushrocks/smartdelay": "^2.0.10",
"@push.rocks/smartexpress": "^3.0.76", "@pushrocks/smartexpress": "^3.0.76",
"@push.rocks/smartfile": "^8.0.0", "@pushrocks/smartfile": "^8.0.0",
"@push.rocks/smartlog": "^2.0.39", "@pushrocks/smartlog": "^2.0.39",
"@push.rocks/smartpromise": "^3.0.6", "@pushrocks/smartpromise": "^3.0.6",
"@push.rocks/smartshell": "^2.0.25", "@pushrocks/smartshell": "^2.0.25",
"@push.rocks/tapbundle": "^3.2.9", "@pushrocks/tapbundle": "^3.2.9",
"@types/figures": "^3.0.1", "@types/figures": "^3.0.1",
"figures": "^3.0.0" "figures": "^3.0.0"
} }
@ -1343,7 +1343,7 @@
"physical-cpu-count": "^2.0.0" "physical-cpu-count": "^2.0.0"
} }
}, },
"@push.rocks/consolecolor": { "@pushrocks/consolecolor": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fconsolecolor/-/consolecolor-2.0.1.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fconsolecolor/-/consolecolor-2.0.1.tgz",
"integrity": "sha512-iOFCHVeFZ2OywbdwSxVI4/wokkcLrXVdHLgvMmkNhJ220eeLgjNZWx3EJo3vNW3zq5ybCSCUIq0878djBxrWpw==", "integrity": "sha512-iOFCHVeFZ2OywbdwSxVI4/wokkcLrXVdHLgvMmkNhJ220eeLgjNZWx3EJo3vNW3zq5ybCSCUIq0878djBxrWpw==",
@ -1352,56 +1352,56 @@
"ansi-256-colors": "^1.1.0" "ansi-256-colors": "^1.1.0"
} }
}, },
"@push.rocks/early": { "@pushrocks/early": {
"version": "3.0.6", "version": "3.0.6",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fearly/-/early-3.0.6.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fearly/-/early-3.0.6.tgz",
"integrity": "sha512-ifUU0bbR/p3Vpe+nMg3LYHCPvM9QmRpL83pEYBvZ8KjbkrCxeXTJuNkeO3T8NGfeEL/q+SS8a9oEnpzoT/SGvw==", "integrity": "sha512-ifUU0bbR/p3Vpe+nMg3LYHCPvM9QmRpL83pEYBvZ8KjbkrCxeXTJuNkeO3T8NGfeEL/q+SS8a9oEnpzoT/SGvw==",
"dev": true, "dev": true,
"requires": { "requires": {
"@git.zone/tsbuild": "^2.1.24", "@gitzone/tsbuild": "^2.1.24",
"@push.rocks/consolecolor": "^2.0.1", "@pushrocks/consolecolor": "^2.0.1",
"@push.rocks/smartpromise": "^3.0.6" "@pushrocks/smartpromise": "^3.0.6"
} }
}, },
"@push.rocks/isounique": { "@pushrocks/isounique": {
"version": "1.0.4", "version": "1.0.4",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fisounique/-/isounique-1.0.4.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fisounique/-/isounique-1.0.4.tgz",
"integrity": "sha512-P1xLsuA1+8LQpoWCo2nP2vIQXKGUl5wDWU6CD7xTDZc3uw0He5V/qCPHM5zpIZsS7IuZOxDDpWb7aFveB11tXw==" "integrity": "sha512-P1xLsuA1+8LQpoWCo2nP2vIQXKGUl5wDWU6CD7xTDZc3uw0He5V/qCPHM5zpIZsS7IuZOxDDpWb7aFveB11tXw=="
}, },
"@push.rocks/lik": { "@pushrocks/lik": {
"version": "4.0.17", "version": "4.0.17",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2flik/-/lik-4.0.17.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2flik/-/lik-4.0.17.tgz",
"integrity": "sha512-K5dX3k3i7iVxFMJ+IYwJRljewukJCc2zgj6+88R18/8SajVAq7ITOl3/FTbmEPFCJv5rl/LQ9FtcMynWlwSlzQ==", "integrity": "sha512-K5dX3k3i7iVxFMJ+IYwJRljewukJCc2zgj6+88R18/8SajVAq7ITOl3/FTbmEPFCJv5rl/LQ9FtcMynWlwSlzQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"@push.rocks/smartdelay": "^2.0.10", "@pushrocks/smartdelay": "^2.0.10",
"@push.rocks/smartmatch": "^1.0.7", "@pushrocks/smartmatch": "^1.0.7",
"@push.rocks/smartpromise": "^3.0.6", "@pushrocks/smartpromise": "^3.0.6",
"@push.rocks/smartrx": "^2.0.17", "@pushrocks/smartrx": "^2.0.17",
"@push.rocks/smarttime": "^3.0.24", "@pushrocks/smarttime": "^3.0.24",
"@types/minimatch": "^3.0.3", "@types/minimatch": "^3.0.3",
"symbol-tree": "^3.2.4" "symbol-tree": "^3.2.4"
} }
}, },
"@push.rocks/qenv": { "@pushrocks/qenv": {
"version": "4.0.10", "version": "4.0.10",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fqenv/-/qenv-4.0.10.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fqenv/-/qenv-4.0.10.tgz",
"integrity": "sha512-bQknJrGa9zXDTmohi2W0fi/gZ5H36J1138WsRgdR2u/9D/0gwjBasL0kqBokH9sddcLSYe/H9itGFxbT7i7MCg==", "integrity": "sha512-bQknJrGa9zXDTmohi2W0fi/gZ5H36J1138WsRgdR2u/9D/0gwjBasL0kqBokH9sddcLSYe/H9itGFxbT7i7MCg==",
"requires": { "requires": {
"@push.rocks/smartfile": "^7.0.12", "@pushrocks/smartfile": "^7.0.12",
"@push.rocks/smartlog": "^2.0.26" "@pushrocks/smartlog": "^2.0.26"
}, },
"dependencies": { "dependencies": {
"@push.rocks/smartfile": { "@pushrocks/smartfile": {
"version": "7.0.12", "version": "7.0.12",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartfile/-/smartfile-7.0.12.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartfile/-/smartfile-7.0.12.tgz",
"integrity": "sha512-/4T4K07WqOXGvQQ/VFyRMUd8kN1RdqQgmrqHjZE/vMDLz7RYsqU9FlEN6OGX1G1E6pR9IdHnT4ClXPlvzClHYg==", "integrity": "sha512-/4T4K07WqOXGvQQ/VFyRMUd8kN1RdqQgmrqHjZE/vMDLz7RYsqU9FlEN6OGX1G1E6pR9IdHnT4ClXPlvzClHYg==",
"requires": { "requires": {
"@push.rocks/smarthash": "^2.1.6", "@pushrocks/smarthash": "^2.1.6",
"@push.rocks/smartmime": "^1.0.3", "@pushrocks/smartmime": "^1.0.3",
"@push.rocks/smartpath": "^4.0.1", "@pushrocks/smartpath": "^4.0.1",
"@push.rocks/smartpromise": "^3.0.6", "@pushrocks/smartpromise": "^3.0.6",
"@push.rocks/smartrequest": "^1.1.47", "@pushrocks/smartrequest": "^1.1.47",
"@types/fs-extra": "^8.1.0", "@types/fs-extra": "^8.1.0",
"fs-extra": "^8.1.0", "fs-extra": "^8.1.0",
"glob": "^7.1.6", "glob": "^7.1.6",
@ -1441,66 +1441,66 @@
} }
} }
}, },
"@push.rocks/smartbrowser": { "@pushrocks/smartbrowser": {
"version": "1.0.17", "version": "1.0.17",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartbrowser/-/smartbrowser-1.0.17.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartbrowser/-/smartbrowser-1.0.17.tgz",
"integrity": "sha512-tTULtPZX8/uEqmiGy1l2mGISvL3R6VYvzt64qrUvzIOI2kWmPammnY5IumNQQKVpYqkunCWUpEGeV9gYdixrqA==", "integrity": "sha512-tTULtPZX8/uEqmiGy1l2mGISvL3R6VYvzt64qrUvzIOI2kWmPammnY5IumNQQKVpYqkunCWUpEGeV9gYdixrqA==",
"dev": true, "dev": true,
"requires": { "requires": {
"@push.rocks/smartdelay": "^2.0.9", "@pushrocks/smartdelay": "^2.0.9",
"@push.rocks/smartpdf": "^2.0.2", "@pushrocks/smartpdf": "^2.0.2",
"@push.rocks/smartpuppeteer": "^1.0.15", "@pushrocks/smartpuppeteer": "^1.0.15",
"@push.rocks/smartunique": "^3.0.3" "@pushrocks/smartunique": "^3.0.3"
} }
}, },
"@push.rocks/smartcache": { "@pushrocks/smartcache": {
"version": "1.0.13", "version": "1.0.13",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartcache/-/smartcache-1.0.13.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartcache/-/smartcache-1.0.13.tgz",
"integrity": "sha512-Yc4W0zlvKya1/25v40ZJnNLj/l8AxpxUZq+Ch361frSUpITgGiRpNwk1/VAmlbEqwj/WJ+wPsQ47eS+afWgKQw==", "integrity": "sha512-Yc4W0zlvKya1/25v40ZJnNLj/l8AxpxUZq+Ch361frSUpITgGiRpNwk1/VAmlbEqwj/WJ+wPsQ47eS+afWgKQw==",
"dev": true, "dev": true,
"requires": { "requires": {
"@push.rocks/smartdelay": "^2.0.6", "@pushrocks/smartdelay": "^2.0.6",
"@push.rocks/smarterror": "^2.0.1", "@pushrocks/smarterror": "^2.0.1",
"@push.rocks/smarthash": "^2.1.6", "@pushrocks/smarthash": "^2.1.6",
"@push.rocks/smartpromise": "^3.0.6", "@pushrocks/smartpromise": "^3.0.6",
"@push.rocks/smarttime": "^3.0.12" "@pushrocks/smarttime": "^3.0.12"
} }
}, },
"@push.rocks/smartcli": { "@pushrocks/smartcli": {
"version": "3.0.12", "version": "3.0.12",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartcli/-/smartcli-3.0.12.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartcli/-/smartcli-3.0.12.tgz",
"integrity": "sha512-iRaLxCvdl3jTHr6uJqxzPtFAfQVv3jXhNsz4D2bZfrzqd+vpl0oJJdEj6AOF6wAG0Gyrgbmq+x7nukFf3Bly3A==", "integrity": "sha512-iRaLxCvdl3jTHr6uJqxzPtFAfQVv3jXhNsz4D2bZfrzqd+vpl0oJJdEj6AOF6wAG0Gyrgbmq+x7nukFf3Bly3A==",
"dev": true, "dev": true,
"requires": { "requires": {
"@push.rocks/lik": "^4.0.13", "@pushrocks/lik": "^4.0.13",
"@push.rocks/smartlog": "^2.0.21", "@pushrocks/smartlog": "^2.0.21",
"@push.rocks/smartparam": "^1.1.6", "@pushrocks/smartparam": "^1.1.6",
"@push.rocks/smartpromise": "^3.0.6", "@pushrocks/smartpromise": "^3.0.6",
"@types/yargs": "^15.0.5", "@types/yargs": "^15.0.5",
"rxjs": "^6.5.5", "rxjs": "^6.5.5",
"yargs": "^15.3.1" "yargs": "^15.3.1"
} }
}, },
"@push.rocks/smartdelay": { "@pushrocks/smartdelay": {
"version": "2.0.10", "version": "2.0.10",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartdelay/-/smartdelay-2.0.10.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartdelay/-/smartdelay-2.0.10.tgz",
"integrity": "sha512-JOFpEfYiKnqcQYoUrL/jDyBDZUmlgJNm5U30MQQ3f+yci+rlFnMY5VvBBEYn5WgoX0ilwU+E15mtpDWhXcmhzg==", "integrity": "sha512-JOFpEfYiKnqcQYoUrL/jDyBDZUmlgJNm5U30MQQ3f+yci+rlFnMY5VvBBEYn5WgoX0ilwU+E15mtpDWhXcmhzg==",
"dev": true, "dev": true,
"requires": { "requires": {
"@push.rocks/smartpromise": "^3.0.6" "@pushrocks/smartpromise": "^3.0.6"
} }
}, },
"@push.rocks/smartenv": { "@pushrocks/smartenv": {
"version": "4.0.16", "version": "4.0.16",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartenv/-/smartenv-4.0.16.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartenv/-/smartenv-4.0.16.tgz",
"integrity": "sha512-NwYMONDc/NjY6BGvzZzLMteF83kPQTF9BCGfqWbktUUruEtdqL+nGw6ecoLFi2b5u7XPb8jK1TKIcSvpNJ7SyA==", "integrity": "sha512-NwYMONDc/NjY6BGvzZzLMteF83kPQTF9BCGfqWbktUUruEtdqL+nGw6ecoLFi2b5u7XPb8jK1TKIcSvpNJ7SyA==",
"dev": true, "dev": true,
"requires": { "requires": {
"@push.rocks/smartpromise": "^3.0.6", "@pushrocks/smartpromise": "^3.0.6",
"@types/node": "^14.11.2" "@types/node": "^14.11.2"
} }
}, },
"@push.rocks/smarterror": { "@pushrocks/smarterror": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmarterror/-/smarterror-2.0.1.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmarterror/-/smarterror-2.0.1.tgz",
"integrity": "sha512-3OrF5me+/sy5VgwR/tfCqs7qhb0Ywzgn8tTThRUZnCGas0aindISzMiW7cIro3RlFykmtPmdTztC9Ostu2ioeA==", "integrity": "sha512-3OrF5me+/sy5VgwR/tfCqs7qhb0Ywzgn8tTThRUZnCGas0aindISzMiW7cIro3RlFykmtPmdTztC9Ostu2ioeA==",
@ -1510,28 +1510,28 @@
"make-error-cause": "^2.2.0" "make-error-cause": "^2.2.0"
} }
}, },
"@push.rocks/smartexit": { "@pushrocks/smartexit": {
"version": "1.0.15", "version": "1.0.15",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartexit/-/smartexit-1.0.15.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartexit/-/smartexit-1.0.15.tgz",
"integrity": "sha512-pvJBmF13spcDN+O8rSpYlKBOObyfW+omZKQr3hhSMT1VHMEYV8e/njsA19Cg4C2DfLPv+cRFFgPn27zJpleRsQ==", "integrity": "sha512-pvJBmF13spcDN+O8rSpYlKBOObyfW+omZKQr3hhSMT1VHMEYV8e/njsA19Cg4C2DfLPv+cRFFgPn27zJpleRsQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"@push.rocks/lik": "^3.0.5", "@pushrocks/lik": "^3.0.5",
"@push.rocks/smartdelay": "^2.0.3", "@pushrocks/smartdelay": "^2.0.3",
"@push.rocks/smartlog-source-ora": "^1.0.7" "@pushrocks/smartlog-source-ora": "^1.0.7"
}, },
"dependencies": { "dependencies": {
"@push.rocks/lik": { "@pushrocks/lik": {
"version": "3.0.19", "version": "3.0.19",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2flik/-/lik-3.0.19.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2flik/-/lik-3.0.19.tgz",
"integrity": "sha512-N9uTtQmTJ/iZ/V7LMCKbVx/ZAmP+b8uId0pxV9Au9T0Ulu9wcg3vNpyTQARgdWfG+tI9Qc0NHgOEa9H5mbDcDA==", "integrity": "sha512-N9uTtQmTJ/iZ/V7LMCKbVx/ZAmP+b8uId0pxV9Au9T0Ulu9wcg3vNpyTQARgdWfG+tI9Qc0NHgOEa9H5mbDcDA==",
"dev": true, "dev": true,
"requires": { "requires": {
"@push.rocks/smartdelay": "^2.0.6", "@pushrocks/smartdelay": "^2.0.6",
"@push.rocks/smartpromise": "^3.0.6", "@pushrocks/smartpromise": "^3.0.6",
"@push.rocks/smartrx": "^2.0.5", "@pushrocks/smartrx": "^2.0.5",
"@push.rocks/smarttime": "^3.0.12", "@pushrocks/smarttime": "^3.0.12",
"@push.rocks/smartunique": "^3.0.1", "@pushrocks/smartunique": "^3.0.1",
"@types/minimatch": "^3.0.3", "@types/minimatch": "^3.0.3",
"minimatch": "^3.0.4", "minimatch": "^3.0.4",
"symbol-tree": "^3.2.4" "symbol-tree": "^3.2.4"
@ -1539,22 +1539,22 @@
} }
} }
}, },
"@push.rocks/smartexpress": { "@pushrocks/smartexpress": {
"version": "3.0.97", "version": "3.0.97",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartexpress/-/smartexpress-3.0.97.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartexpress/-/smartexpress-3.0.97.tgz",
"integrity": "sha512-mg7sAanDRpDgUGvUNY3fvaG8RWDN45JQIiv7d71O5Li8MACOpEGThJ05400RzHZ51EgXWwAUstikXsgN+iXUNg==", "integrity": "sha512-mg7sAanDRpDgUGvUNY3fvaG8RWDN45JQIiv7d71O5Li8MACOpEGThJ05400RzHZ51EgXWwAUstikXsgN+iXUNg==",
"dev": true, "dev": true,
"requires": { "requires": {
"@apiglobal/typedrequest": "^1.0.53", "@apiglobal/typedrequest": "^1.0.53",
"@push.rocks/lik": "^4.0.17", "@pushrocks/lik": "^4.0.17",
"@push.rocks/smartfeed": "^1.0.9", "@pushrocks/smartfeed": "^1.0.9",
"@push.rocks/smartfile": "^8.0.8", "@pushrocks/smartfile": "^8.0.8",
"@push.rocks/smartmanifest": "^1.0.8", "@pushrocks/smartmanifest": "^1.0.8",
"@push.rocks/smartmime": "^1.0.3", "@pushrocks/smartmime": "^1.0.3",
"@push.rocks/smartpromise": "^3.1.3", "@pushrocks/smartpromise": "^3.1.3",
"@push.rocks/smartrequest": "^1.1.51", "@pushrocks/smartrequest": "^1.1.51",
"@push.rocks/smartsitemap": "^1.0.11", "@pushrocks/smartsitemap": "^1.0.11",
"@push.rocks/smarttime": "^3.0.37", "@pushrocks/smarttime": "^3.0.37",
"@tsclass/tsclass": "^3.0.29", "@tsclass/tsclass": "^3.0.29",
"@types/cors": "^2.8.8", "@types/cors": "^2.8.8",
"@types/express": "^4.17.9", "@types/express": "^4.17.9",
@ -1567,7 +1567,7 @@
"helmet": "^4.2.0" "helmet": "^4.2.0"
} }
}, },
"@push.rocks/smartfeed": { "@pushrocks/smartfeed": {
"version": "1.0.9", "version": "1.0.9",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartfeed/-/smartfeed-1.0.9.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartfeed/-/smartfeed-1.0.9.tgz",
"integrity": "sha512-ntkvG/uGw8X7NO93LRuCAH7FkTVSRih1gLM8z/gilIQh6L5pMX9plnlx9w8RvspKgU4YMfl2Lw0kXUXzr79Cwg==", "integrity": "sha512-ntkvG/uGw8X7NO93LRuCAH7FkTVSRih1gLM8z/gilIQh6L5pMX9plnlx9w8RvspKgU4YMfl2Lw0kXUXzr79Cwg==",
@ -1578,19 +1578,19 @@
"rss-parser": "^3.9.0" "rss-parser": "^3.9.0"
} }
}, },
"@push.rocks/smartfile": { "@pushrocks/smartfile": {
"version": "8.0.8", "version": "8.0.8",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartfile/-/smartfile-8.0.8.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartfile/-/smartfile-8.0.8.tgz",
"integrity": "sha512-htZgOZSZESnonq/k/LMhXoy8iKHBYLNXBbw0p3ZUxbfSs+dGsMfRGqJN7+QfByjg+BOKn1PrDtCNxJUi0e7gAA==", "integrity": "sha512-htZgOZSZESnonq/k/LMhXoy8iKHBYLNXBbw0p3ZUxbfSs+dGsMfRGqJN7+QfByjg+BOKn1PrDtCNxJUi0e7gAA==",
"dev": true, "dev": true,
"requires": { "requires": {
"@push.rocks/smartfile-interfaces": "^1.0.7", "@pushrocks/smartfile-interfaces": "^1.0.7",
"@push.rocks/smarthash": "^2.1.6", "@pushrocks/smarthash": "^2.1.6",
"@push.rocks/smartjson": "^4.0.3", "@pushrocks/smartjson": "^4.0.3",
"@push.rocks/smartmime": "^1.0.3", "@pushrocks/smartmime": "^1.0.3",
"@push.rocks/smartpath": "^4.0.3", "@pushrocks/smartpath": "^4.0.3",
"@push.rocks/smartpromise": "^3.0.6", "@pushrocks/smartpromise": "^3.0.6",
"@push.rocks/smartrequest": "^1.1.51", "@pushrocks/smartrequest": "^1.1.51",
"@types/fs-extra": "^9.0.1", "@types/fs-extra": "^9.0.1",
"@types/glob": "^7.1.3", "@types/glob": "^7.1.3",
"@types/js-yaml": "^3.12.5", "@types/js-yaml": "^3.12.5",
@ -1599,24 +1599,24 @@
"js-yaml": "^3.14.0" "js-yaml": "^3.14.0"
} }
}, },
"@push.rocks/smartfile-interfaces": { "@pushrocks/smartfile-interfaces": {
"version": "1.0.7", "version": "1.0.7",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartfile-interfaces/-/smartfile-interfaces-1.0.7.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartfile-interfaces/-/smartfile-interfaces-1.0.7.tgz",
"integrity": "sha512-C/v9Scbx1J+ByMk3YBZrlLRYXdObty/Uz/h6kSZqsO8ghYuT9l7OVpEcyduiSVPakaMi6YnzfME3Nfs3oLj//Q==", "integrity": "sha512-C/v9Scbx1J+ByMk3YBZrlLRYXdObty/Uz/h6kSZqsO8ghYuT9l7OVpEcyduiSVPakaMi6YnzfME3Nfs3oLj//Q==",
"dev": true "dev": true
}, },
"@push.rocks/smarthash": { "@pushrocks/smarthash": {
"version": "2.1.6", "version": "2.1.6",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmarthash/-/smarthash-2.1.6.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmarthash/-/smarthash-2.1.6.tgz",
"integrity": "sha512-TYa3wECYkeDoE8SomxcCJFg5Kt4+G4MtNMu3yATJCCoPLJIbyV1CwUvYuFYkkce2W4ZvH9h/N6dsHc69oI5Jcw==", "integrity": "sha512-TYa3wECYkeDoE8SomxcCJFg5Kt4+G4MtNMu3yATJCCoPLJIbyV1CwUvYuFYkkce2W4ZvH9h/N6dsHc69oI5Jcw==",
"requires": { "requires": {
"@push.rocks/smartjson": "^3.0.10", "@pushrocks/smartjson": "^3.0.10",
"@push.rocks/smartpromise": "^3.0.6", "@pushrocks/smartpromise": "^3.0.6",
"@types/through2": "^2.0.34", "@types/through2": "^2.0.34",
"through2": "^3.0.1" "through2": "^3.0.1"
}, },
"dependencies": { "dependencies": {
"@push.rocks/smartjson": { "@pushrocks/smartjson": {
"version": "3.0.10", "version": "3.0.10",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartjson/-/smartjson-3.0.10.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartjson/-/smartjson-3.0.10.tgz",
"integrity": "sha512-0tBkET2yjmSSIf4DlgeyU8U/J2EshTmQGuMY28EjPq9VvuCFXLh72WmETpA4QqKRMqhWp1+P+RZgnQupW3GQxQ==", "integrity": "sha512-0tBkET2yjmSSIf4DlgeyU8U/J2EshTmQGuMY28EjPq9VvuCFXLh72WmETpA4QqKRMqhWp1+P+RZgnQupW3GQxQ==",
@ -1628,7 +1628,7 @@
} }
} }
}, },
"@push.rocks/smartjson": { "@pushrocks/smartjson": {
"version": "4.0.5", "version": "4.0.5",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartjson/-/smartjson-4.0.5.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartjson/-/smartjson-4.0.5.tgz",
"integrity": "sha512-i4kBjZSbs1t8swcAPEdPkDJHci2higzvMIkNUKTgXWrcxUFMuOis/B5huUnnIqg/Td8R+mAdf/B/CMfgjABTlg==", "integrity": "sha512-i4kBjZSbs1t8swcAPEdPkDJHci2higzvMIkNUKTgXWrcxUFMuOis/B5huUnnIqg/Td8R+mAdf/B/CMfgjABTlg==",
@ -1641,27 +1641,27 @@
"lodash.clonedeep": "^4.5.0" "lodash.clonedeep": "^4.5.0"
} }
}, },
"@push.rocks/smartlog": { "@pushrocks/smartlog": {
"version": "2.0.39", "version": "2.0.39",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartlog/-/smartlog-2.0.39.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartlog/-/smartlog-2.0.39.tgz",
"integrity": "sha512-fHCoBLwKM+F3jN5nZH6QEcEVWtgyESN+ysT9KLxmM/wrhIibG98yLxp6kwfZZbv6aKmHWbtKEvBmv+Vd4Hfwlg==", "integrity": "sha512-fHCoBLwKM+F3jN5nZH6QEcEVWtgyESN+ysT9KLxmM/wrhIibG98yLxp6kwfZZbv6aKmHWbtKEvBmv+Vd4Hfwlg==",
"requires": { "requires": {
"@push.rocks/isounique": "^1.0.4", "@pushrocks/isounique": "^1.0.4",
"@push.rocks/smartlog-interfaces": "^2.0.20" "@pushrocks/smartlog-interfaces": "^2.0.20"
} }
}, },
"@push.rocks/smartlog-destination-local": { "@pushrocks/smartlog-destination-local": {
"version": "8.0.8", "version": "8.0.8",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartlog-destination-local/-/smartlog-destination-local-8.0.8.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartlog-destination-local/-/smartlog-destination-local-8.0.8.tgz",
"integrity": "sha512-h6zTJnneX7lFFHeUMIdwGU2ZvbTGpZw6nutdSbx2t4d0OcExeKx3a/BjgKJmM3DGOv29gqLuEPeTHm0Yy95iWg==", "integrity": "sha512-h6zTJnneX7lFFHeUMIdwGU2ZvbTGpZw6nutdSbx2t4d0OcExeKx3a/BjgKJmM3DGOv29gqLuEPeTHm0Yy95iWg==",
"dev": true, "dev": true,
"requires": { "requires": {
"@push.rocks/consolecolor": "^2.0.1", "@pushrocks/consolecolor": "^2.0.1",
"@push.rocks/smartlog-interfaces": "^2.0.20", "@pushrocks/smartlog-interfaces": "^2.0.20",
"@push.rocks/smartpromise": "^3.0.6" "@pushrocks/smartpromise": "^3.0.6"
} }
}, },
"@push.rocks/smartlog-interfaces": { "@pushrocks/smartlog-interfaces": {
"version": "2.0.22", "version": "2.0.22",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartlog-interfaces/-/smartlog-interfaces-2.0.22.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartlog-interfaces/-/smartlog-interfaces-2.0.22.tgz",
"integrity": "sha512-blvtNLgYz08F5EhftxfzLEkQ3VE9uoXRVQukbVpwJ4Zk0QRkNg2VCkuJu/kkfbtlCEOEOG2HCZDyhbxeEeq0pA==", "integrity": "sha512-blvtNLgYz08F5EhftxfzLEkQ3VE9uoXRVQukbVpwJ4Zk0QRkNg2VCkuJu/kkfbtlCEOEOG2HCZDyhbxeEeq0pA==",
@ -1669,13 +1669,13 @@
"@apiglobal/typedrequest-interfaces": "^1.0.15" "@apiglobal/typedrequest-interfaces": "^1.0.15"
} }
}, },
"@push.rocks/smartlog-source-ora": { "@pushrocks/smartlog-source-ora": {
"version": "1.0.9", "version": "1.0.9",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartlog-source-ora/-/smartlog-source-ora-1.0.9.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartlog-source-ora/-/smartlog-source-ora-1.0.9.tgz",
"integrity": "sha512-CcFpMJeCZ0kl7Ai6F5wTGlPrsAhjhq38WSg8BRyFxUByQ/Nluy0AhrTb7GbPTLKWMo6sq//zO2Oh0wAzUYHuQg==", "integrity": "sha512-CcFpMJeCZ0kl7Ai6F5wTGlPrsAhjhq38WSg8BRyFxUByQ/Nluy0AhrTb7GbPTLKWMo6sq//zO2Oh0wAzUYHuQg==",
"dev": true, "dev": true,
"requires": { "requires": {
"@push.rocks/smartlog-interfaces": "^2.0.15", "@pushrocks/smartlog-interfaces": "^2.0.15",
"ora": "^4.0.4" "ora": "^4.0.4"
}, },
"dependencies": { "dependencies": {
@ -1829,13 +1829,13 @@
} }
} }
}, },
"@push.rocks/smartmanifest": { "@pushrocks/smartmanifest": {
"version": "1.0.8", "version": "1.0.8",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartmanifest/-/smartmanifest-1.0.8.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartmanifest/-/smartmanifest-1.0.8.tgz",
"integrity": "sha512-inHmTp58Z8xl+c6mdOrfxc9IjUKuqho1i+WUI74G7rn6HwEn3cMd/06R1v80Xlx+95EYWzBwnYtuo7j7DafrdQ==", "integrity": "sha512-inHmTp58Z8xl+c6mdOrfxc9IjUKuqho1i+WUI74G7rn6HwEn3cMd/06R1v80Xlx+95EYWzBwnYtuo7j7DafrdQ==",
"dev": true "dev": true
}, },
"@push.rocks/smartmatch": { "@pushrocks/smartmatch": {
"version": "1.0.7", "version": "1.0.7",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartmatch/-/smartmatch-1.0.7.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartmatch/-/smartmatch-1.0.7.tgz",
"integrity": "sha512-D+lK5HIKO4Kj1Jm/ycKvy1VzDJ3V6ucHqmf5DMBFdm18BrMj2Zb6M7wN8HUKtkfHvOI7ig85JMuANSEyO7kAPg==", "integrity": "sha512-D+lK5HIKO4Kj1Jm/ycKvy1VzDJ3V6ucHqmf5DMBFdm18BrMj2Zb6M7wN8HUKtkfHvOI7ig85JMuANSEyO7kAPg==",
@ -1844,7 +1844,7 @@
"matcher": "^3.0.0" "matcher": "^3.0.0"
} }
}, },
"@push.rocks/smartmime": { "@pushrocks/smartmime": {
"version": "1.0.3", "version": "1.0.3",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartmime/-/smartmime-1.0.3.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartmime/-/smartmime-1.0.3.tgz",
"integrity": "sha512-hLOZwwAzYOOFobUmYy4OyjJJgM3Cw4fQQySF0zqTjd7UIMuAi6cighCNB5M68YHmPr1+XZw/UtHDX8z3tYiehg==", "integrity": "sha512-hLOZwwAzYOOFobUmYy4OyjJJgM3Cw4fQQySF0zqTjd7UIMuAi6cighCNB5M68YHmPr1+XZw/UtHDX8z3tYiehg==",
@ -1853,14 +1853,14 @@
"mime-types": "^2.1.26" "mime-types": "^2.1.26"
} }
}, },
"@push.rocks/smartnetwork": { "@pushrocks/smartnetwork": {
"version": "1.1.22", "version": "1.1.22",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartnetwork/-/smartnetwork-1.1.22.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartnetwork/-/smartnetwork-1.1.22.tgz",
"integrity": "sha512-dOiLYuv7Y14haMnnBN2C2CCw1FzCKQ7N/wec3x5yM798cATqduLWbIHekAgMcZXGRUJizoxQn7rQ9U+16IQ9SA==", "integrity": "sha512-dOiLYuv7Y14haMnnBN2C2CCw1FzCKQ7N/wec3x5yM798cATqduLWbIHekAgMcZXGRUJizoxQn7rQ9U+16IQ9SA==",
"dev": true, "dev": true,
"requires": { "requires": {
"@push.rocks/smartpromise": "^3.0.6", "@pushrocks/smartpromise": "^3.0.6",
"@push.rocks/smartstring": "^3.0.18", "@pushrocks/smartstring": "^3.0.18",
"@types/default-gateway": "^3.0.1", "@types/default-gateway": "^3.0.1",
"default-gateway": "^5.0.5", "default-gateway": "^5.0.5",
"isopen": "^1.3.0", "isopen": "^1.3.0",
@ -1869,59 +1869,59 @@
"systeminformation": "^4.26.10" "systeminformation": "^4.26.10"
} }
}, },
"@push.rocks/smartparam": { "@pushrocks/smartparam": {
"version": "1.1.6", "version": "1.1.6",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartparam/-/smartparam-1.1.6.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartparam/-/smartparam-1.1.6.tgz",
"integrity": "sha512-1El/F2QTWYDGy4Nh6vz9Ry1JVg1FEeyexB7Uvi4zHElpXYVxwso6xImRTLj+SW50JAg7nwEZ+ljkzTG9XvnwWA==", "integrity": "sha512-1El/F2QTWYDGy4Nh6vz9Ry1JVg1FEeyexB7Uvi4zHElpXYVxwso6xImRTLj+SW50JAg7nwEZ+ljkzTG9XvnwWA==",
"dev": true, "dev": true,
"requires": { "requires": {
"@push.rocks/smartpromise": "^3.0.6", "@pushrocks/smartpromise": "^3.0.6",
"is-promise": "^2.1.0", "is-promise": "^2.1.0",
"minimatch": "^3.0.4" "minimatch": "^3.0.4"
} }
}, },
"@push.rocks/smartparcel": { "@pushrocks/smartparcel": {
"version": "1.0.5", "version": "1.0.5",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartparcel/-/smartparcel-1.0.5.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartparcel/-/smartparcel-1.0.5.tgz",
"integrity": "sha512-FCGjHC6JjvuoSzHoVTaBy+eF3xQlNGeuI/R6Z4OCgepLPFbWSqcbwdHJ1ePVEG1poCSuV4IRz7xll/psAmHjhQ==", "integrity": "sha512-FCGjHC6JjvuoSzHoVTaBy+eF3xQlNGeuI/R6Z4OCgepLPFbWSqcbwdHJ1ePVEG1poCSuV4IRz7xll/psAmHjhQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"@push.rocks/smartpath": "^4.0.3", "@pushrocks/smartpath": "^4.0.3",
"@types/parcel-bundler": "^1.12.1", "@types/parcel-bundler": "^1.12.1",
"parcel-bundler": "^1.12.4" "parcel-bundler": "^1.12.4"
} }
}, },
"@push.rocks/smartpath": { "@pushrocks/smartpath": {
"version": "4.0.3", "version": "4.0.3",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartpath/-/smartpath-4.0.3.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartpath/-/smartpath-4.0.3.tgz",
"integrity": "sha512-KWz4DWOrB0sPfk6L4i+CPOo+UK5HXNaLI7ZAaqJe1nEWoDrpyeds1dNDaqVAmSgX4riLGxVpslKH5MnABCPsPg==" "integrity": "sha512-KWz4DWOrB0sPfk6L4i+CPOo+UK5HXNaLI7ZAaqJe1nEWoDrpyeds1dNDaqVAmSgX4riLGxVpslKH5MnABCPsPg=="
}, },
"@push.rocks/smartpdf": { "@pushrocks/smartpdf": {
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartpdf/-/smartpdf-2.0.2.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartpdf/-/smartpdf-2.0.2.tgz",
"integrity": "sha512-fzKFWCBbmx76h/rStJckx3dGHOgWRuMalBBCLKLtY+KZk4/fT/kL88Bax4dZ3cCGKDaBfSiJNL9CJX7gsHl70w==", "integrity": "sha512-fzKFWCBbmx76h/rStJckx3dGHOgWRuMalBBCLKLtY+KZk4/fT/kL88Bax4dZ3cCGKDaBfSiJNL9CJX7gsHl70w==",
"dev": true, "dev": true,
"requires": { "requires": {
"@push.rocks/smartfile": "^7.0.6", "@pushrocks/smartfile": "^7.0.6",
"@push.rocks/smartnetwork": "^1.1.14", "@pushrocks/smartnetwork": "^1.1.14",
"@push.rocks/smartpromise": "^3.0.6", "@pushrocks/smartpromise": "^3.0.6",
"@push.rocks/smartpuppeteer": "^1.0.11", "@pushrocks/smartpuppeteer": "^1.0.11",
"@push.rocks/smartunique": "^3.0.1", "@pushrocks/smartunique": "^3.0.1",
"@types/express": "^4.17.2", "@types/express": "^4.17.2",
"express": "^4.17.1" "express": "^4.17.1"
}, },
"dependencies": { "dependencies": {
"@push.rocks/smartfile": { "@pushrocks/smartfile": {
"version": "7.0.12", "version": "7.0.12",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartfile/-/smartfile-7.0.12.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartfile/-/smartfile-7.0.12.tgz",
"integrity": "sha512-/4T4K07WqOXGvQQ/VFyRMUd8kN1RdqQgmrqHjZE/vMDLz7RYsqU9FlEN6OGX1G1E6pR9IdHnT4ClXPlvzClHYg==", "integrity": "sha512-/4T4K07WqOXGvQQ/VFyRMUd8kN1RdqQgmrqHjZE/vMDLz7RYsqU9FlEN6OGX1G1E6pR9IdHnT4ClXPlvzClHYg==",
"dev": true, "dev": true,
"requires": { "requires": {
"@push.rocks/smarthash": "^2.1.6", "@pushrocks/smarthash": "^2.1.6",
"@push.rocks/smartmime": "^1.0.3", "@pushrocks/smartmime": "^1.0.3",
"@push.rocks/smartpath": "^4.0.1", "@pushrocks/smartpath": "^4.0.1",
"@push.rocks/smartpromise": "^3.0.6", "@pushrocks/smartpromise": "^3.0.6",
"@push.rocks/smartrequest": "^1.1.47", "@pushrocks/smartrequest": "^1.1.47",
"@types/fs-extra": "^8.1.0", "@types/fs-extra": "^8.1.0",
"fs-extra": "^8.1.0", "fs-extra": "^8.1.0",
"glob": "^7.1.6", "glob": "^7.1.6",
@ -1965,72 +1965,72 @@
} }
} }
}, },
"@push.rocks/smartpromise": { "@pushrocks/smartpromise": {
"version": "3.1.3", "version": "3.1.3",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartpromise/-/smartpromise-3.1.3.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartpromise/-/smartpromise-3.1.3.tgz",
"integrity": "sha512-KENdm++8uuzxDz1cbUbXtz6InfReP28TYC5zxRgRtwsXh7ZWUkSA+/82IbO97PcSCAfIpg7dwj77G6KGSsTKEQ==" "integrity": "sha512-KENdm++8uuzxDz1cbUbXtz6InfReP28TYC5zxRgRtwsXh7ZWUkSA+/82IbO97PcSCAfIpg7dwj77G6KGSsTKEQ=="
}, },
"@push.rocks/smartpuppeteer": { "@pushrocks/smartpuppeteer": {
"version": "1.0.15", "version": "1.0.15",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartpuppeteer/-/smartpuppeteer-1.0.15.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartpuppeteer/-/smartpuppeteer-1.0.15.tgz",
"integrity": "sha512-hGa8lxQ4yXzLu9/+zin0/KUERo29PUYPumYPAnO8WjU0vRUOmOy2ABSkKfTRl86yiEyFV5tUlf5GPQeg03XNNg==", "integrity": "sha512-hGa8lxQ4yXzLu9/+zin0/KUERo29PUYPumYPAnO8WjU0vRUOmOy2ABSkKfTRl86yiEyFV5tUlf5GPQeg03XNNg==",
"dev": true, "dev": true,
"requires": { "requires": {
"@push.rocks/smartdelay": "^2.0.6", "@pushrocks/smartdelay": "^2.0.6",
"@push.rocks/smartenv": "^4.0.8", "@pushrocks/smartenv": "^4.0.8",
"@types/puppeteer": "^2.0.0", "@types/puppeteer": "^2.0.0",
"puppeteer": "^2.1.1" "puppeteer": "^2.1.1"
} }
}, },
"@push.rocks/smartrequest": { "@pushrocks/smartrequest": {
"version": "1.1.51", "version": "1.1.51",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartrequest/-/smartrequest-1.1.51.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartrequest/-/smartrequest-1.1.51.tgz",
"integrity": "sha512-RJUvo7MEIAm+gFueJrmf8LcpVals5jp7PgOZ+ebGTvDoVwCpor0Z6nmJDOs9ykjFCIvvPhfiterQeb6hJr2uDw==", "integrity": "sha512-RJUvo7MEIAm+gFueJrmf8LcpVals5jp7PgOZ+ebGTvDoVwCpor0Z6nmJDOs9ykjFCIvvPhfiterQeb6hJr2uDw==",
"requires": { "requires": {
"@push.rocks/smartpromise": "^3.0.6", "@pushrocks/smartpromise": "^3.0.6",
"agentkeepalive": "^4.1.3", "agentkeepalive": "^4.1.3",
"form-data": "^3.0.0" "form-data": "^3.0.0"
} }
}, },
"@push.rocks/smartrx": { "@pushrocks/smartrx": {
"version": "2.0.19", "version": "2.0.19",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartrx/-/smartrx-2.0.19.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartrx/-/smartrx-2.0.19.tgz",
"integrity": "sha512-xKuN2qKpewq4LLwQfGRv6+hG+gFjzoKB6uij3M0NpaPcj/BbO3afnbOv+sczGThf/goMxTTKdQRPXYOp8Rt+Cw==", "integrity": "sha512-xKuN2qKpewq4LLwQfGRv6+hG+gFjzoKB6uij3M0NpaPcj/BbO3afnbOv+sczGThf/goMxTTKdQRPXYOp8Rt+Cw==",
"dev": true, "dev": true,
"requires": { "requires": {
"@push.rocks/lik": "^4.0.17", "@pushrocks/lik": "^4.0.17",
"@push.rocks/smartpromise": "^3.0.6", "@pushrocks/smartpromise": "^3.0.6",
"rxjs": "^6.6.3" "rxjs": "^6.6.3"
} }
}, },
"@push.rocks/smartshell": { "@pushrocks/smartshell": {
"version": "2.0.26", "version": "2.0.26",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartshell/-/smartshell-2.0.26.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartshell/-/smartshell-2.0.26.tgz",
"integrity": "sha512-5ynxufz/HogctNARgrKxS9om4zT73uzrYJKTnPTJ4FoU7GU1vCVVDZ2F8CqsdkYxWpKiqtwwoF6l7QBWPUoHiw==", "integrity": "sha512-5ynxufz/HogctNARgrKxS9om4zT73uzrYJKTnPTJ4FoU7GU1vCVVDZ2F8CqsdkYxWpKiqtwwoF6l7QBWPUoHiw==",
"dev": true, "dev": true,
"requires": { "requires": {
"@push.rocks/smartdelay": "^2.0.3", "@pushrocks/smartdelay": "^2.0.3",
"@push.rocks/smartexit": "^1.0.15", "@pushrocks/smartexit": "^1.0.15",
"@push.rocks/smartpromise": "^3.0.2", "@pushrocks/smartpromise": "^3.0.2",
"@types/which": "^1.3.1", "@types/which": "^1.3.1",
"tree-kill": "^1.2.2", "tree-kill": "^1.2.2",
"which": "^1.3.1" "which": "^1.3.1"
} }
}, },
"@push.rocks/smartsitemap": { "@pushrocks/smartsitemap": {
"version": "1.0.11", "version": "1.0.11",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartsitemap/-/smartsitemap-1.0.11.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartsitemap/-/smartsitemap-1.0.11.tgz",
"integrity": "sha512-IGJ8UASrZKTwszW0coGFEPtYr+gZjbxQBMAzb2pft6VFv3CLIN1RmzgEqcHNlG8Czp125xOoR0mnKKq94XOVKg==", "integrity": "sha512-IGJ8UASrZKTwszW0coGFEPtYr+gZjbxQBMAzb2pft6VFv3CLIN1RmzgEqcHNlG8Czp125xOoR0mnKKq94XOVKg==",
"dev": true, "dev": true,
"requires": { "requires": {
"@push.rocks/smartcache": "^1.0.13", "@pushrocks/smartcache": "^1.0.13",
"@push.rocks/smartfeed": "^1.0.5", "@pushrocks/smartfeed": "^1.0.5",
"@push.rocks/smartxml": "^1.0.6", "@pushrocks/smartxml": "^1.0.6",
"@push.rocks/smartyaml": "^2.0.5", "@pushrocks/smartyaml": "^2.0.5",
"@tsclass/tsclass": "^3.0.25" "@tsclass/tsclass": "^3.0.25"
} }
}, },
"@push.rocks/smartstring": { "@pushrocks/smartstring": {
"version": "3.0.18", "version": "3.0.18",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartstring/-/smartstring-3.0.18.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartstring/-/smartstring-3.0.18.tgz",
"integrity": "sha512-34Ca5HW6w8fcG2sdbRVDViOZ0vdOHXc/1Qof2KhM5bvWFajU6VASlJjCYNJBrjGg9VCeC2rH6bGIgvd7prSRkg==", "integrity": "sha512-34Ca5HW6w8fcG2sdbRVDViOZ0vdOHXc/1Qof2KhM5bvWFajU6VASlJjCYNJBrjGg9VCeC2rH6bGIgvd7prSRkg==",
@ -2043,21 +2043,21 @@
"strip-indent": "^3.0.0" "strip-indent": "^3.0.0"
} }
}, },
"@push.rocks/smarttime": { "@pushrocks/smarttime": {
"version": "3.0.37", "version": "3.0.37",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmarttime/-/smarttime-3.0.37.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmarttime/-/smarttime-3.0.37.tgz",
"integrity": "sha512-QhucXSSB8vdQkqVzKP/aX23DwZwXG3aUvF2MJ1EruvLcQypK2xFsCoaToXN5j//jG8EBAI0ybXpGzFdx38XqIQ==", "integrity": "sha512-QhucXSSB8vdQkqVzKP/aX23DwZwXG3aUvF2MJ1EruvLcQypK2xFsCoaToXN5j//jG8EBAI0ybXpGzFdx38XqIQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"@push.rocks/lik": "^4.0.17", "@pushrocks/lik": "^4.0.17",
"@push.rocks/smartdelay": "^2.0.10", "@pushrocks/smartdelay": "^2.0.10",
"@push.rocks/smartpromise": "^3.0.2", "@pushrocks/smartpromise": "^3.0.2",
"croner": "^1.1.23", "croner": "^1.1.23",
"dayjs": "^1.9.1", "dayjs": "^1.9.1",
"is-nan": "^1.3.0" "is-nan": "^1.3.0"
} }
}, },
"@push.rocks/smartunique": { "@pushrocks/smartunique": {
"version": "3.0.3", "version": "3.0.3",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartunique/-/smartunique-3.0.3.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartunique/-/smartunique-3.0.3.tgz",
"integrity": "sha512-f+c3s2WzzjASoRHyYTLU0kHDVWREg4sZVdi5L42bTA3CTUWNrcGUC62h4wP4U4BiPl3bopTr3LPhClZHJ738oA==", "integrity": "sha512-f+c3s2WzzjASoRHyYTLU0kHDVWREg4sZVdi5L42bTA3CTUWNrcGUC62h4wP4U4BiPl3bopTr3LPhClZHJ738oA==",
@ -2077,7 +2077,7 @@
} }
} }
}, },
"@push.rocks/smartxml": { "@pushrocks/smartxml": {
"version": "1.0.6", "version": "1.0.6",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartxml/-/smartxml-1.0.6.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartxml/-/smartxml-1.0.6.tgz",
"integrity": "sha512-Cy//pxzdpplqE64h9/sAwvAkUBv9t3Nw9v6k2c+erXH779iOtuyGiiyWqgbRTX1wo2CRhMJqWGJx6xd2Ljq5kw==", "integrity": "sha512-Cy//pxzdpplqE64h9/sAwvAkUBv9t3Nw9v6k2c+erXH779iOtuyGiiyWqgbRTX1wo2CRhMJqWGJx6xd2Ljq5kw==",
@ -2086,7 +2086,7 @@
"fast-xml-parser": "^3.17.4" "fast-xml-parser": "^3.17.4"
} }
}, },
"@push.rocks/smartyaml": { "@pushrocks/smartyaml": {
"version": "2.0.5", "version": "2.0.5",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartyaml/-/smartyaml-2.0.5.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartyaml/-/smartyaml-2.0.5.tgz",
"integrity": "sha512-nJGqvJ56vAst5evLqaPYQ4mO5uJVnXVlriyL3D6s89YMUoWGS3qj/jK+V8hDgznFCnd46pNjnc0GfQBCDpZ6eg==", "integrity": "sha512-nJGqvJ56vAst5evLqaPYQ4mO5uJVnXVlriyL3D6s89YMUoWGS3qj/jK+V8hDgznFCnd46pNjnc0GfQBCDpZ6eg==",
@ -2096,28 +2096,28 @@
"js-yaml": "^3.14.0" "js-yaml": "^3.14.0"
} }
}, },
"@push.rocks/tapbundle": { "@pushrocks/tapbundle": {
"version": "3.2.9", "version": "3.2.9",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2ftapbundle/-/tapbundle-3.2.9.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2ftapbundle/-/tapbundle-3.2.9.tgz",
"integrity": "sha512-vtmYL/l7BZvAzySh7cYnnTG6CFMp5zYtowJuMAmqUjhIaQaWW1Tvbrpjp7lVwRXj2JlL/i69KcJ6RVdLItK+rA==", "integrity": "sha512-vtmYL/l7BZvAzySh7cYnnTG6CFMp5zYtowJuMAmqUjhIaQaWW1Tvbrpjp7lVwRXj2JlL/i69KcJ6RVdLItK+rA==",
"dev": true, "dev": true,
"requires": { "requires": {
"@push.rocks/smartdelay": "^2.0.9", "@pushrocks/smartdelay": "^2.0.9",
"@push.rocks/smartenv": "^4.0.10", "@pushrocks/smartenv": "^4.0.10",
"@push.rocks/smartpromise": "^3.0.2", "@pushrocks/smartpromise": "^3.0.2",
"@push.rocks/smarttime": "^3.0.19", "@pushrocks/smarttime": "^3.0.19",
"smartchai": "^2.0.1" "smartchai": "^2.0.1"
} }
}, },
"@push.rocks/webrequest": { "@pushrocks/webrequest": {
"version": "2.0.13", "version": "2.0.13",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fwebrequest/-/webrequest-2.0.13.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fwebrequest/-/webrequest-2.0.13.tgz",
"integrity": "sha512-FNRthRBrBmc3Eu+NRkVrPudbmWMphph/Y15feHo7tUj7Y4MhP0uSy2/95vM3b5LcXQldOEH3GA9SB7VYJ1+VPw==", "integrity": "sha512-FNRthRBrBmc3Eu+NRkVrPudbmWMphph/Y15feHo7tUj7Y4MhP0uSy2/95vM3b5LcXQldOEH3GA9SB7VYJ1+VPw==",
"dev": true, "dev": true,
"requires": { "requires": {
"@push.rocks/smartdelay": "^2.0.10", "@pushrocks/smartdelay": "^2.0.10",
"@push.rocks/smartenv": "^4.0.15", "@pushrocks/smartenv": "^4.0.15",
"@push.rocks/smartjson": "^4.0.5", "@pushrocks/smartjson": "^4.0.5",
"node-fetch": "^2.6.1" "node-fetch": "^2.6.1"
} }
}, },
@ -2213,7 +2213,7 @@
"integrity": "sha512-LmFE1efF6gBP0CiAW7MUZKo35Z7DKuLaf1Fp5lqrNC6TKAeoayDi4W1CwPktex9GhyxgLds5Ef0stJ7rEjTFrg==", "integrity": "sha512-LmFE1efF6gBP0CiAW7MUZKo35Z7DKuLaf1Fp5lqrNC6TKAeoayDi4W1CwPktex9GhyxgLds5Ef0stJ7rEjTFrg==",
"dev": true, "dev": true,
"requires": { "requires": {
"@push.rocks/tapbundle": "^3.2.9", "@pushrocks/tapbundle": "^3.2.9",
"type-fest": "^0.16.0" "type-fest": "^0.16.0"
}, },
"dependencies": { "dependencies": {

View File

@ -1,29 +1,28 @@
{ {
"name": "@apiclient.xyz/medium", "name": "@mojoio/medium",
"version": "1.0.7", "version": "1.0.3",
"private": false, "private": false,
"description": "An unofficial Medium.com API package that enables interaction with Medium's features using Node.js.", "description": "an unofficial medium.com API package",
"main": "dist_ts/index.js", "main": "dist_ts/index.js",
"typings": "dist_ts/index.d.ts", "typings": "dist_ts/index.d.ts",
"type": "module", "author": "Lossless GmbH",
"author": "Task Venture Capital GmbH",
"license": "MIT", "license": "MIT",
"scripts": { "scripts": {
"test": "(tstest test/ --web)", "test": "(tstest test/ --web)",
"build": "(tsbuild --web)" "build": "(tsbuild --web)"
}, },
"devDependencies": { "devDependencies": {
"@git.zone/tsbuild": "^2.1.25", "@gitzone/tsbuild": "^2.1.25",
"@git.zone/tsbundle": "^2.0.8", "@gitzone/tsbundle": "^1.0.78",
"@git.zone/tsrun": "^1.2.49", "@gitzone/tstest": "^1.0.44",
"@git.zone/tstest": "^1.0.44", "@pushrocks/tapbundle": "^3.2.9",
"@push.rocks/tapbundle": "^5.0.8", "@types/node": "^14.11.2",
"@types/node": "^20.14.9" "tslint": "^6.1.3",
"tslint-config-prettier": "^1.15.0"
}, },
"dependencies": { "dependencies": {
"@push.rocks/qenv": "^6.0.5", "@pushrocks/qenv": "^4.0.10",
"@push.rocks/smartpromise": "^4.0.2", "@pushrocks/smartrequest": "^1.1.51"
"@push.rocks/smartrequest": "^2.0.15"
}, },
"browserslist": [ "browserslist": [
"last 1 chrome versions" "last 1 chrome versions"
@ -39,21 +38,5 @@
"cli.js", "cli.js",
"npmextra.json", "npmextra.json",
"readme.md" "readme.md"
],
"keywords": [
"Medium",
"API",
"Medium API",
"unofficial",
"Node.js",
"TypeScript",
"publications",
"posts",
"account management",
"automation",
"JavaScript",
"blogging",
"content creation",
"web development"
] ]
} }

6711
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

261
readme.md
View File

@ -1,244 +1,39 @@
# @apiclient.xyz/medium # @mojoio/medium
an unofficial medium.com API package
An unofficial Medium.com API package that allows interaction with Medium's features using Node.js. ## Availabililty and Links
* [npmjs.org (npm package)](https://www.npmjs.com/package/@pushrocks/medium)
* [gitlab.com (source)](https://gitlab.com/mojoio/medium)
* [github.com (source mirror)](https://github.com/mojoio/medium)
* [docs (typedoc)](https://mojoio.gitlab.io/medium/)
## Install ## Status for master
To install the `@apiclient.xyz/medium` package, ensure you have Node.js and npm installed on your system. Then, run the following command in your terminal: Status Category | Status Badge
-- | --
```bash GitLab Pipelines | [![pipeline status](https://gitlab.com/mojoio/medium/badges/master/pipeline.svg)](https://lossless.cloud)
npm install @apiclient.xyz/medium GitLab Pipline Test Coverage | [![coverage report](https://gitlab.com/mojoio/medium/badges/master/coverage.svg)](https://lossless.cloud)
``` npm | [![npm downloads per month](https://badgen.net/npm/dy/@pushrocks/medium)](https://lossless.cloud)
Snyk | [![Known Vulnerabilities](https://badgen.net/snyk/mojoio/medium)](https://lossless.cloud)
TypeScript Support | [![TypeScript](https://badgen.net/badge/TypeScript/>=%203.x/blue?icon=typescript)](https://lossless.cloud)
node Support | [![node](https://img.shields.io/badge/node->=%2010.x.x-blue.svg)](https://nodejs.org/dist/latest-v10.x/docs/api/)
Code Style | [![Code Style](https://badgen.net/badge/style/prettier/purple)](https://lossless.cloud)
PackagePhobia (total standalone install weight) | [![PackagePhobia](https://badgen.net/packagephobia/install/@pushrocks/medium)](https://lossless.cloud)
PackagePhobia (package size on registry) | [![PackagePhobia](https://badgen.net/packagephobia/publish/@pushrocks/medium)](https://lossless.cloud)
BundlePhobia (total size when bundled) | [![BundlePhobia](https://badgen.net/bundlephobia/minzip/@pushrocks/medium)](https://lossless.cloud)
Platform support | [![Supports Windows 10](https://badgen.net/badge/supports%20Windows%2010/yes/green?icon=windows)](https://lossless.cloud) [![Supports Mac OS X](https://badgen.net/badge/supports%20Mac%20OS%20X/yes/green?icon=apple)](https://lossless.cloud)
## Usage ## Usage
This guide will walk you through how to use the `@apiclient.xyz/medium` package to interact with the Medium API. This includes steps to initialize your Medium account, retrieve account and publication information, and create new posts. The examples will use ESM syntax and TypeScript to ensure you have the best experience with code intelligence and type safety. Use TypeScript for best in class intellisense
### 1. Importing Required Classes ## Contribution
Start by importing the necessary classes from the `@apiclient.xyz/medium` package. We are always happy for code contributions. If you are not the code contributing type that is ok. Still, maintaining Open Source repositories takes considerable time and thought. If you like the quality of what we do and our modules are useful to you we would appreciate a little monthly contribution: You can [contribute one time](https://lossless.link/contribute-onetime) or [contribute monthly](https://lossless.link/contribute). :)
```typescript For further information read the linked docs at the top of this readme.
import { MediumAccount, MediumPublication, MediumPost, IPostData } from '@apiclient.xyz/medium';
```
### 2. Initializing a Medium Account > MIT licensed | **©** [Lossless GmbH](https://lossless.gmbh)
| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy)
To use the Medium API, you'll need to initialize a `MediumAccount` object with your access token. [![repo-footer](https://lossless.gitlab.io/publicrelations/repofooter.svg)](https://maintainedby.lossless.com)
```typescript
const mediumAccount = new MediumAccount('YOUR_ACCESS_TOKEN_HERE');
// Wait for the account to be ready
await mediumAccount.readyDeferred.promise;
```
### 3. Fetching Account Information
Retrieve account information such as ID, username, URL, and image URL.
```typescript
const accountInfo = await mediumAccount.getAccountInfo();
console.log(accountInfo);
```
### 4. Working with Publications
You can interact with publications associated with your account by fetching all publications, getting publications you own, and fetching publications by their names.
#### Fetch All Publications
```typescript
const publications = await mediumAccount.getAllPublications();
publications.forEach(pub => console.log(pub.name, pub.id));
```
#### Fetch Publications Owned By You
```typescript
const ownPublications = await mediumAccount.getOwnPublications();
ownPublications.forEach(pub => console.log(pub.name, pub.id));
```
#### Fetch a Publication by Name
```typescript
const pubName = 'Your Publication Name';
const specificPublication = await mediumAccount.getPublicationByName(pubName);
if (specificPublication) {
console.log(specificPublication);
} else {
console.log(`Publication with name ${pubName} not found.`);
}
```
### 5. Creating and Managing Posts
To create posts within a publication, you need to define the post data and use the publication object to create a post.
#### Define Post Data
```typescript
const newPostData: IPostData = {
title: 'My First Post',
contentFormat: 'markdown',
content: '# Hello World\nThis is my first post!',
canonicalUrl: 'https://yourcoolsite.com/first-post',
tags: ['example', 'first', 'post'],
publishStatus: 'draft'
};
```
#### Create a New Post
```typescript
if (specificPublication) {
const newPost = await specificPublication.createPost(newPostData);
console.log(newPost);
}
```
### 6. Error Handling
Effective error handling is essential when interacting with APIs. Make sure to wrap your asynchronous code in try/catch blocks to handle any rejected promises.
```typescript
try {
const result = await mediumAccount.getAccountInfo();
console.log(result);
} catch (error) {
console.error('Failed to fetch account information:', error);
}
```
### Complete Example
Here is a complete example script that demonstrates the major functionalities of the `@apiclient.xyz/medium` package.
```typescript
import { MediumAccount, IPostData } from '@apiclient.xyz/medium';
async function run() {
const mediumAccount = new MediumAccount('YOUR_ACCESS_TOKEN_HERE');
await mediumAccount.readyDeferred.promise;
// Fetch and display account information
const accountInfo = await mediumAccount.getAccountInfo();
console.log('Account Info:', accountInfo);
// Fetch and display all publications
const publications = await mediumAccount.getAllPublications();
publications.forEach(pub => console.log('Publication Name:', pub.name, 'ID:', pub.id));
// Fetch and display publications owned by the user
const ownPublications = await mediumAccount.getOwnPublications();
ownPublications.forEach(pub => console.log('Own Publication Name:', pub.name, 'ID:', pub.id));
// Fetch a specific publication by name
const pubName = 'Your Publication Name';
const specificPublication = await mediumAccount.getPublicationByName(pubName);
if (specificPublication) {
console.log('Specific Publication:', specificPublication);
// Define new post data
const newPostData: IPostData = {
title: 'My First Post',
contentFormat: 'markdown',
content: '# Hello World\nThis is my first post!',
canonicalUrl: 'https://yourcoolsite.com/first-post',
tags: ['example', 'first', 'post'],
publishStatus: 'draft'
};
// Create a new post
const newPost = await specificPublication.createPost(newPostData);
console.log('New Post:', newPost);
} else {
console.log(`Publication with name ${pubName} not found.`);
}
}
run().catch(error => {
console.error('Error:', error);
});
```
### Fetching Publication Contributors
If you want to see the contributors of a publication, you can fetch them and display the relevant details:
```typescript
const fetchContributors = async (publicationId: string) => {
const response = await mediumAccount.request(`/publications/${publicationId}/contributors`, 'GET');
const contributors: { publicationId: string; userId: string; role: string; }[] = response.data;
contributors.forEach(contributor => {
console.log(`User ID: ${contributor.userId}, Role: ${contributor.role}`);
});
};
await fetchContributors('SamplePublicationId');
```
### Advanced Post Management
Depending on the use case, you might need to fetch posts by specific criteria, update posts, or delete them. For this example, let's assume updating and deleting posts functions are supported by the Medium API, even though those capabilities aren't documented here.
#### Fetch a Post by ID
```typescript
const fetchPostById = async (publication: MediumPublication, postId: string) => {
const response = await mediumAccount.request(`/publications/${publication.id}/posts/${postId}`, 'GET');
const post = response.data;
console.log(post);
};
await fetchPostById(specificPublication, 'SamplePostId');
```
#### Update a Post
Let's assume we have an endpoint for updating posts. The method might look like this:
```typescript
const updatePost = async (publication: MediumPublication, postId: string, newData: Partial<IPostData>) => {
const response = await mediumAccount.request(`/publications/${publication.id}/posts/${postId}`, 'PUT', newData);
console.log('Updated Post:', response.data);
};
const updatedData: Partial<IPostData> = {
title: 'Updated Title',
content: '# Updated Content'
};
await updatePost(specificPublication, 'SamplePostId', updatedData);
```
#### Delete a Post
Similarly, assuming an endpoint exists for deleting posts:
```typescript
const deletePost = async (publication: MediumPublication, postId: string) => {
const response = await mediumAccount.request(`/publications/${publication.id}/posts/${postId}`, 'DELETE');
console.log('Deleted Post', response.statusCode);
};
await deletePost(specificPublication, 'SamplePostId');
```
By following this guide, you should be able to leverage the extensive features provided by the `@apiclient.xyz/medium` package. From account management to creating and managing posts within publications, this guide offers the complete scenarios you need in order to interact effectively with the Medium API using Node.js and TypeScript.
### Extensions
Consider creating more complex interactions by combining different endpoint requests. For example:
- Creating a scheduled post by integrating with a scheduling library like node-schedule.
- Fetching and analyzing post stats if such endpoints are provided by Medium.
- Automating cross-platform publication by combining Medium's API with other platforms' APIs.
The flexibility and power of Node.js along with the typed safety of TypeScript provide a robust environment for developing applications that interact with web APIs efficiently and effectively.
Start by running the complete example script to get familiar with the basic functionalities. Build upon these examples to create feature-rich applications that make extensive use of Medium's capabilities.
Always ensure to consult Medium's API documentation for any updates or additional features that may be available for further enhancement and optimization of your integrations.
undefined

View File

@ -1,47 +1,19 @@
import { expect, tap } from '@push.rocks/tapbundle'; import { expect, tap } from '@pushrocks/tapbundle';
import * as medium from '../ts/index.js'; import * as medium from '../ts/index';
import {Qenv} from '@push.rocks/qenv'; import {Qenv} from '@pushrocks/qenv';
const testQenv = new Qenv('./', './.nogit/'); const testQenv = new Qenv('./', './.nogit/');
let testMediumAccount: medium.MediumAccount; let testMediumAccount: medium.MediumAccount;
tap.test('first test', async () => { tap.test('first test', async () => {
testMediumAccount = new medium.MediumAccount(await testQenv.getEnvVarOnDemand('MEDIUM_API_TOKEN')); testMediumAccount = new medium.MediumAccount(testQenv.getEnvVarOnDemand('MEDIUM_API_TOKEN'));
expect(testMediumAccount).toBeInstanceOf(medium.MediumAccount); expect(testMediumAccount).to.be.instanceOf(medium.MediumAccount);
}); });
tap.test('should get me info', async () => { tap.test('should get me info', async () => {
const result = await testMediumAccount.getAccountInfo(); const result = await testMediumAccount.getUserInfo();
console.log(result);
});
tap.test('should get publications', async () => {
const result = await testMediumAccount.getAllPublications();
// console.log(result); // console.log(result);
}); });
tap.test('should get own publications', async () => {
const result = await testMediumAccount.getOwnPublications();
// console.log(result);
});
tap.test('should get a publication by name', async () => {
const result = await testMediumAccount.getPublicationByName('mojoio-test');
console.log(result);
});
tap.test('should create a post', async () => {
const mojoioTestPublication = await testMediumAccount.getPublicationByName('mojoio-test');
const newPost = await mojoioTestPublication.createPost({
title: 'a test title',
contentFormat: 'html',
canonicalUrl: 'https://mojo.io/testarticle',
content: '<h1>hello</1> So awesome',
publishStatus: 'draft',
tags: []
});
console.log(newPost);
})
tap.start(); tap.start();

View File

@ -1,8 +0,0 @@
/**
* autocreated commitinfo by @push.rocks/commitinfo
*/
export const commitinfo = {
name: '@apiclient.xyz/medium',
version: '1.0.7',
description: 'An unofficial Medium.com API package that enables interaction with Medium's features using Node.js.'
}

View File

@ -1,3 +1 @@
export * from './medium.classes.account.js'; export * from './medium.classes.mediumaccount';
export * from './medium.classes.publication.js';
export * from './medium.classes.post.js';

View File

@ -1,125 +0,0 @@
import { MediumPublication } from './medium.classes.publication.js';
import * as plugins from './medium.plugins.js';
export interface IMediumAccountData {
id: string;
username: string;
url: string;
imageUrl: string;
}
/**
* Represents a Medium account with various functionalities to interact with Medium's API.
*/
export class MediumAccount implements IMediumAccountData {
// INSTANCE
private accessToken: string;
public readyDeferred = plugins.smartpromise.defer();
public baseApiDomain = 'https://api.medium.com/v1';
id: string;
username: string;
url: string;
imageUrl: string;
/**
* Initializes a new instance of the MediumAccount class.
* @param accessTokenArg - The access token for the Medium API.
*/
constructor(accessTokenArg: string) {
this.accessToken = accessTokenArg;
this.getAccountInfo().then((dataArg) => {
if (dataArg) {
Object.assign(this, dataArg);
this.readyDeferred.resolve();
} else {
this.readyDeferred.reject('Failed to fetch account info.');
}
}).catch(error => {
console.error('Error fetching account info:', error);
this.readyDeferred.reject(error);
});
}
/**
* Fetches the account information from Medium.
* @returns A promise that resolves to the account data.
*/
public async getAccountInfo(): Promise<IMediumAccountData | undefined> {
try {
const result = await this.request('/me', 'GET');
console.log(result.statusCode);
const accountData: IMediumAccountData = result.body.data;
return accountData;
} catch (error) {
console.error('Error in getAccountInfo:', error);
return undefined;
}
}
/**
* Fetches all publications associated with this account.
* @returns A promise that resolves to an array of MediumPublication objects.
*/
public async getAllPublications(): Promise<MediumPublication[]> {
const result = await this.request(`/users/${this.id}/publications`, 'GET');
return result.data.map((pub: any) => new MediumPublication(this, pub));
}
/**
* Fetches all publications authored by this account.
* @returns A promise that resolves to an array of MediumPublication objects.
*/
public async getOwnPublications(): Promise<MediumPublication[]> {
const allPublications = await this.getAllPublications();
const ownPublications: MediumPublication[] = [];
for (const publication of allPublications) {
const response = await this.request(`/publications/${publication.id}/contributors`, 'GET');
const contributors: { publicationId: string; userId: string; role: string; }[] = response.data;
if (contributors.some(contributor => contributor.userId === this.id)) {
ownPublications.push(publication);
}
}
return ownPublications;
}
/**
* Fetches a publication by its name.
* @param nameArg - The name of the publication.
* @returns A promise that resolves to the MediumPublication object.
*/
public async getPublicationByName(nameArg: string): Promise<MediumPublication | undefined> {
const publications = await this.getAllPublications();
return publications.find(publication => publication.name === nameArg);
}
/**
* Makes an authenticated request to the Medium API.
* @param routeArg - The API route to request.
* @param methodArg - The HTTP method to use for the request.
* @param payloadArg - Optional payload for POST requests.
* @returns A promise that resolves to the API response.
*/
public async request(routeArg: string, methodArg: 'POST' | 'GET', payloadArg?: any): Promise<any> {
try {
const response = await plugins.smartrequest.request(`${this.baseApiDomain}${routeArg}`, {
headers: {
Authorization: `Bearer ${this.accessToken}`,
'Content-Type': 'application/json',
Accept: 'application/json',
'Accept-Charset': 'utf-8',
},
method: methodArg,
keepAlive: false,
requestBody: payloadArg ? JSON.stringify(payloadArg) : null
});
return response;
} catch (error) {
console.error('Error in request:', error);
throw error;
}
}
}

View File

@ -0,0 +1,43 @@
import { MediumPublication } from './medium.classes.publication';
import * as plugins from './medium.plugins';
/**
*
*/
export class MediumAccount {
public baseApiDomain = 'https://api.medium.com/v1';
private accessToken: string;
constructor(accessTokenArg: string) {
this.accessToken = accessTokenArg;
}
public async getUserInfo(): Promise<{
id: string,
username: string,
name: string,
url: string,
imageUrl: string
}> {
const result = await this.request('/me', 'GET');
return result.body.data;
}
public async getPublications(): Promise<MediumPublication[]> {
return MediumPublication.getPublications(this);
}
public async request(routeArg: string, methodArg: string, payloadArg?: any) {
const response = await plugins.smartrequest.request(`${this.baseApiDomain}${routeArg}`, {
headers: {
Authorization: `Bearer ${this.accessToken}`,
'Content-Type': 'application/json',
Accept: 'application/json',
'Accept-Charset': 'utf-8',
},
method: methodArg,
requestBody: payloadArg ? JSON.stringify(payloadArg) : null
});
return response;
}
}

View File

@ -1,35 +0,0 @@
import { MediumPublication } from './medium.classes.publication.js';
import * as plugins from './medium.plugins.js';
export interface IPostData {
title: string;
contentFormat: 'html' | 'markdown';
content: string;
canonicalUrl: string;
tags: string[];
publishStatus: 'public' | 'draft' | 'unlisted';
}
export class MediumPost implements IPostData {
// STATIC
public static async createPost(mediumPublication: MediumPublication, data: IPostData): Promise<MediumPost> {
const response = await mediumPublication.mediumAccountRef.request(`/publications/${mediumPublication.id}/posts`, 'POST', data);
const post = new MediumPost(mediumPublication, response.data);
return post;
}
// INSTANCE
mediumPublicationRef: MediumPublication;
title: string;
contentFormat: 'html' | 'markdown';
content: string;
canonicalUrl: string;
tags: string[];
publishStatus: 'public' | 'draft' | 'unlisted';
constructor(mediumPublication: MediumPublication, data: IPostData) {
this.mediumPublicationRef = mediumPublication;
Object.assign(this, data);
}
}

View File

@ -1,62 +1,9 @@
import { MediumAccount } from './medium.classes.account.js'; import { MediumAccount } from './medium.classes.mediumaccount';
import { type IPostData, MediumPost } from './medium.classes.post.js'; import * as plugins from './medium.plugins';
import * as plugins from './medium.plugins.js';
export interface IMediumPublication { export class MediumPublication {
id: string; public static getPublications(mediumAccount: MediumAccount) {
name: string; const returnArray: MediumPublication[] = [];
description: string; return returnArray;
url: string;
imageUrl: string;
}
export class MediumPublication implements IMediumPublication {
// STATIC
public static async getAllPublications(mediumAccount: MediumAccount): Promise<MediumPublication[]> {
await mediumAccount.readyDeferred.promise;
const response = await mediumAccount.request(`/users/${mediumAccount.id}/publications`, 'GET');
const publicationsDataArray: IMediumPublication[] = response.data;
return publicationsDataArray.map(publicationData => new MediumPublication(mediumAccount, publicationData));
}
public static async getOwnPublications(mediumAccount: MediumAccount): Promise<MediumPublication[]> {
await mediumAccount.readyDeferred.promise;
const allPublications = await this.getAllPublications(mediumAccount);
const ownPublications: MediumPublication[] = [];
for (const publication of allPublications) {
const response = await mediumAccount.request(`/publications/${publication.id}/contributors`, 'GET');
const contributors: { publicationId: string; userId: string; role: string; }[] = response.data;
if (contributors.some(contributor => contributor.userId === mediumAccount.id)) {
ownPublications.push(publication);
}
}
return ownPublications;
}
public static async getPublicationByName(mediumAccount: MediumAccount, publicationName: string): Promise<MediumPublication | undefined> {
const publications = await this.getAllPublications(mediumAccount);
return publications.find(publication => publication.name === publicationName);
}
// INSTANCE
public mediumAccountRef: MediumAccount;
id: string;
name: string;
description: string;
url: string;
imageUrl: string;
constructor(mediumAccount: MediumAccount, data: IMediumPublication) {
this.mediumAccountRef = mediumAccount;
Object.assign(this, data);
}
public async createPost(data: IPostData): Promise<MediumPost> {
const result = await MediumPost.createPost(this, data);
return result;
} }
} }

View File

@ -1,7 +1,5 @@
import * as smartpromise from '@push.rocks/smartpromise'; import * as smartrequest from '@pushrocks/smartrequest';
import * as smartrequest from '@push.rocks/smartrequest';
export { export {
smartpromise,
smartrequest smartrequest
}; };

View File

@ -1,14 +0,0 @@
{
"compilerOptions": {
"experimentalDecorators": true,
"useDefineForClassFields": false,
"target": "ES2022",
"module": "NodeNext",
"moduleResolution": "NodeNext",
"esModuleInterop": true,
"verbatimModuleSyntax": true
},
"exclude": [
"dist_*/**/*.d.ts"
]
}

17
tslint.json Normal file
View File

@ -0,0 +1,17 @@
{
"extends": ["tslint:latest", "tslint-config-prettier"],
"rules": {
"semicolon": [true, "always"],
"no-console": false,
"ordered-imports": false,
"object-literal-sort-keys": false,
"member-ordering": {
"options":{
"order": [
"static-method"
]
}
}
},
"defaultSeverity": "warning"
}