switch to official cloudflare api client while keeping class based approach
This commit is contained in:
parent
1d2e0974b2
commit
f39f8cd33c
@ -32,7 +32,8 @@
|
|||||||
"@push.rocks/smartpromise": "^4.0.2",
|
"@push.rocks/smartpromise": "^4.0.2",
|
||||||
"@push.rocks/smartrequest": "^2.0.15",
|
"@push.rocks/smartrequest": "^2.0.15",
|
||||||
"@push.rocks/smartstring": "^4.0.5",
|
"@push.rocks/smartstring": "^4.0.5",
|
||||||
"@tsclass/tsclass": "^4.0.42"
|
"@tsclass/tsclass": "^4.0.58",
|
||||||
|
"cloudflare": "^3.2.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@git.zone/tsbuild": "^2.1.66",
|
"@git.zone/tsbuild": "^2.1.66",
|
||||||
|
102
pnpm-lock.yaml
generated
102
pnpm-lock.yaml
generated
@ -24,8 +24,11 @@ importers:
|
|||||||
specifier: ^4.0.5
|
specifier: ^4.0.5
|
||||||
version: 4.0.15
|
version: 4.0.15
|
||||||
'@tsclass/tsclass':
|
'@tsclass/tsclass':
|
||||||
specifier: ^4.0.42
|
specifier: ^4.0.58
|
||||||
version: 4.0.55
|
version: 4.0.58
|
||||||
|
cloudflare:
|
||||||
|
specifier: ^3.2.0
|
||||||
|
version: 3.2.0
|
||||||
devDependencies:
|
devDependencies:
|
||||||
'@git.zone/tsbuild':
|
'@git.zone/tsbuild':
|
||||||
specifier: ^2.1.66
|
specifier: ^2.1.66
|
||||||
@ -629,8 +632,8 @@ packages:
|
|||||||
'@tsclass/tsclass@3.0.48':
|
'@tsclass/tsclass@3.0.48':
|
||||||
resolution: {integrity: sha512-hC65UvDlp9qvsl6OcIZXz0JNiWZ0gyzsTzbXpg215sGxopgbkOLCr6E0s4qCTnweYm95gt2AdY95uP7M7kExaQ==}
|
resolution: {integrity: sha512-hC65UvDlp9qvsl6OcIZXz0JNiWZ0gyzsTzbXpg215sGxopgbkOLCr6E0s4qCTnweYm95gt2AdY95uP7M7kExaQ==}
|
||||||
|
|
||||||
'@tsclass/tsclass@4.0.55':
|
'@tsclass/tsclass@4.0.58':
|
||||||
resolution: {integrity: sha512-zg774JF90/3/rJ7xk4LyGgxcUzxdKIQcwtBVxez4LhvegESxvHiFmX42WL105iBpE53ISJ8sctLWlwG1JQZdlA==}
|
resolution: {integrity: sha512-H9b9m83TXMEF+xrW4IdGO0vGgIdC6t/Cv55bHHzUbbFxR+AgcPxMxMKtEYjkwrwtl4QNYez3Q5VuomF3WqaiIA==}
|
||||||
|
|
||||||
'@tsconfig/node10@1.0.11':
|
'@tsconfig/node10@1.0.11':
|
||||||
resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==}
|
resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==}
|
||||||
@ -770,6 +773,12 @@ packages:
|
|||||||
'@types/ms@0.7.34':
|
'@types/ms@0.7.34':
|
||||||
resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==}
|
resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==}
|
||||||
|
|
||||||
|
'@types/node-fetch@2.6.11':
|
||||||
|
resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==}
|
||||||
|
|
||||||
|
'@types/node@18.19.34':
|
||||||
|
resolution: {integrity: sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==}
|
||||||
|
|
||||||
'@types/node@20.14.2':
|
'@types/node@20.14.2':
|
||||||
resolution: {integrity: sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==}
|
resolution: {integrity: sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==}
|
||||||
|
|
||||||
@ -865,6 +874,10 @@ packages:
|
|||||||
resolution: {integrity: sha512-G0D3mv9jvR+5xILENchPP9v1ZjBf3QVlzarMLR5jedCNbgntzcayF0LeW5wh5uyafGZJH28cYm9jGrJvGipoPQ==}
|
resolution: {integrity: sha512-G0D3mv9jvR+5xILENchPP9v1ZjBf3QVlzarMLR5jedCNbgntzcayF0LeW5wh5uyafGZJH28cYm9jGrJvGipoPQ==}
|
||||||
engines: {node: '>=18.0.0'}
|
engines: {node: '>=18.0.0'}
|
||||||
|
|
||||||
|
abort-controller@3.0.0:
|
||||||
|
resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
|
||||||
|
engines: {node: '>=6.5'}
|
||||||
|
|
||||||
accepts@1.3.8:
|
accepts@1.3.8:
|
||||||
resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
|
resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
|
||||||
engines: {node: '>= 0.6'}
|
engines: {node: '>= 0.6'}
|
||||||
@ -1085,6 +1098,9 @@ packages:
|
|||||||
resolution: {integrity: sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=}
|
resolution: {integrity: sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=}
|
||||||
engines: {node: '>=0.8'}
|
engines: {node: '>=0.8'}
|
||||||
|
|
||||||
|
cloudflare@3.2.0:
|
||||||
|
resolution: {integrity: sha512-L6X3ky8rj+vFv6wf+/MxVVkwzMcxm+rjHtPAznHejYp3UC3ESovv+z8a6SZv6uXIXkAXHbCMCsbegiM4NNvXsg==}
|
||||||
|
|
||||||
co-body@6.2.0:
|
co-body@6.2.0:
|
||||||
resolution: {integrity: sha512-Kbpv2Yd1NdL1V/V4cwLVxraHDV6K8ayohr2rmH0J87Er8+zJjcTa6dAn9QMPC9CRgU8+aNajKbSf1TzDB1yKPA==}
|
resolution: {integrity: sha512-Kbpv2Yd1NdL1V/V4cwLVxraHDV6K8ayohr2rmH0J87Er8+zJjcTa6dAn9QMPC9CRgU8+aNajKbSf1TzDB1yKPA==}
|
||||||
engines: {node: '>=8.0.0'}
|
engines: {node: '>=8.0.0'}
|
||||||
@ -1385,6 +1401,10 @@ packages:
|
|||||||
resolution: {integrity: sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=}
|
resolution: {integrity: sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=}
|
||||||
engines: {node: '>= 0.6'}
|
engines: {node: '>= 0.6'}
|
||||||
|
|
||||||
|
event-target-shim@5.0.1:
|
||||||
|
resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
|
||||||
|
engines: {node: '>=6'}
|
||||||
|
|
||||||
eventemitter3@4.0.7:
|
eventemitter3@4.0.7:
|
||||||
resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
|
resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
|
||||||
|
|
||||||
@ -1466,6 +1486,9 @@ packages:
|
|||||||
resolution: {integrity: sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==}
|
resolution: {integrity: sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==}
|
||||||
engines: {node: '>=14'}
|
engines: {node: '>=14'}
|
||||||
|
|
||||||
|
form-data-encoder@1.7.2:
|
||||||
|
resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==}
|
||||||
|
|
||||||
form-data-encoder@2.1.4:
|
form-data-encoder@2.1.4:
|
||||||
resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==}
|
resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==}
|
||||||
engines: {node: '>= 14.17'}
|
engines: {node: '>= 14.17'}
|
||||||
@ -1478,6 +1501,10 @@ packages:
|
|||||||
resolution: {integrity: sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=}
|
resolution: {integrity: sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=}
|
||||||
engines: {node: '>=0.4.x'}
|
engines: {node: '>=0.4.x'}
|
||||||
|
|
||||||
|
formdata-node@4.4.1:
|
||||||
|
resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==}
|
||||||
|
engines: {node: '>= 12.20'}
|
||||||
|
|
||||||
forwarded@0.2.0:
|
forwarded@0.2.0:
|
||||||
resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
|
resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
|
||||||
engines: {node: '>= 0.6'}
|
engines: {node: '>= 0.6'}
|
||||||
@ -2183,6 +2210,10 @@ packages:
|
|||||||
no-case@2.3.2:
|
no-case@2.3.2:
|
||||||
resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==}
|
resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==}
|
||||||
|
|
||||||
|
node-domexception@1.0.0:
|
||||||
|
resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
|
||||||
|
engines: {node: '>=10.5.0'}
|
||||||
|
|
||||||
node-fetch@2.6.7:
|
node-fetch@2.6.7:
|
||||||
resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==}
|
resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==}
|
||||||
engines: {node: 4.x || >=6.0.0}
|
engines: {node: 4.x || >=6.0.0}
|
||||||
@ -2887,6 +2918,14 @@ packages:
|
|||||||
web-namespaces@2.0.1:
|
web-namespaces@2.0.1:
|
||||||
resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==}
|
resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==}
|
||||||
|
|
||||||
|
web-streams-polyfill@3.3.3:
|
||||||
|
resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==}
|
||||||
|
engines: {node: '>= 8'}
|
||||||
|
|
||||||
|
web-streams-polyfill@4.0.0-beta.3:
|
||||||
|
resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==}
|
||||||
|
engines: {node: '>= 14'}
|
||||||
|
|
||||||
webidl-conversions@3.0.1:
|
webidl-conversions@3.0.1:
|
||||||
resolution: {integrity: sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=}
|
resolution: {integrity: sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=}
|
||||||
|
|
||||||
@ -3080,7 +3119,7 @@ snapshots:
|
|||||||
'@push.rocks/taskbuffer': 3.1.7
|
'@push.rocks/taskbuffer': 3.1.7
|
||||||
'@push.rocks/webrequest': 3.0.37
|
'@push.rocks/webrequest': 3.0.37
|
||||||
'@push.rocks/webstore': 2.0.20
|
'@push.rocks/webstore': 2.0.20
|
||||||
'@tsclass/tsclass': 4.0.55
|
'@tsclass/tsclass': 4.0.58
|
||||||
'@types/express': 4.17.21
|
'@types/express': 4.17.21
|
||||||
body-parser: 1.20.2
|
body-parser: 1.20.2
|
||||||
cors: 2.8.5
|
cors: 2.8.5
|
||||||
@ -3587,7 +3626,7 @@ snapshots:
|
|||||||
'@push.rocks/smartlog-interfaces@3.0.2':
|
'@push.rocks/smartlog-interfaces@3.0.2':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@api.global/typedrequest-interfaces': 2.0.2
|
'@api.global/typedrequest-interfaces': 2.0.2
|
||||||
'@tsclass/tsclass': 4.0.55
|
'@tsclass/tsclass': 4.0.58
|
||||||
|
|
||||||
'@push.rocks/smartlog@3.0.7':
|
'@push.rocks/smartlog@3.0.7':
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -3667,7 +3706,7 @@ snapshots:
|
|||||||
'@push.rocks/smartpromise': 4.0.3
|
'@push.rocks/smartpromise': 4.0.3
|
||||||
'@push.rocks/smartpuppeteer': 2.0.2
|
'@push.rocks/smartpuppeteer': 2.0.2
|
||||||
'@push.rocks/smartunique': 3.0.9
|
'@push.rocks/smartunique': 3.0.9
|
||||||
'@tsclass/tsclass': 4.0.55
|
'@tsclass/tsclass': 4.0.58
|
||||||
'@types/express': 4.17.21
|
'@types/express': 4.17.21
|
||||||
express: 4.19.2
|
express: 4.19.2
|
||||||
pdf-lib: 1.17.1
|
pdf-lib: 1.17.1
|
||||||
@ -3725,7 +3764,7 @@ snapshots:
|
|||||||
'@push.rocks/smartxml': 1.0.8
|
'@push.rocks/smartxml': 1.0.8
|
||||||
'@push.rocks/smartyaml': 2.0.5
|
'@push.rocks/smartyaml': 2.0.5
|
||||||
'@push.rocks/webrequest': 3.0.37
|
'@push.rocks/webrequest': 3.0.37
|
||||||
'@tsclass/tsclass': 4.0.55
|
'@tsclass/tsclass': 4.0.58
|
||||||
|
|
||||||
'@push.rocks/smartsocket@2.0.27':
|
'@push.rocks/smartsocket@2.0.27':
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -3859,7 +3898,7 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
'@pushrocks/smartdelay': 3.0.1
|
'@pushrocks/smartdelay': 3.0.1
|
||||||
'@pushrocks/smartpromise': 4.0.2
|
'@pushrocks/smartpromise': 4.0.2
|
||||||
'@tsclass/tsclass': 4.0.55
|
'@tsclass/tsclass': 4.0.58
|
||||||
|
|
||||||
'@push.rocks/webstore@2.0.20':
|
'@push.rocks/webstore@2.0.20':
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -4035,7 +4074,7 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
type-fest: 2.19.0
|
type-fest: 2.19.0
|
||||||
|
|
||||||
'@tsclass/tsclass@4.0.55':
|
'@tsclass/tsclass@4.0.58':
|
||||||
dependencies:
|
dependencies:
|
||||||
type-fest: 4.20.0
|
type-fest: 4.20.0
|
||||||
|
|
||||||
@ -4198,6 +4237,15 @@ snapshots:
|
|||||||
|
|
||||||
'@types/ms@0.7.34': {}
|
'@types/ms@0.7.34': {}
|
||||||
|
|
||||||
|
'@types/node-fetch@2.6.11':
|
||||||
|
dependencies:
|
||||||
|
'@types/node': 20.14.2
|
||||||
|
form-data: 4.0.0
|
||||||
|
|
||||||
|
'@types/node@18.19.34':
|
||||||
|
dependencies:
|
||||||
|
undici-types: 5.26.5
|
||||||
|
|
||||||
'@types/node@20.14.2':
|
'@types/node@20.14.2':
|
||||||
dependencies:
|
dependencies:
|
||||||
undici-types: 5.26.5
|
undici-types: 5.26.5
|
||||||
@ -4349,6 +4397,10 @@ snapshots:
|
|||||||
- supports-color
|
- supports-color
|
||||||
- utf-8-validate
|
- utf-8-validate
|
||||||
|
|
||||||
|
abort-controller@3.0.0:
|
||||||
|
dependencies:
|
||||||
|
event-target-shim: 5.0.1
|
||||||
|
|
||||||
accepts@1.3.8:
|
accepts@1.3.8:
|
||||||
dependencies:
|
dependencies:
|
||||||
mime-types: 2.1.35
|
mime-types: 2.1.35
|
||||||
@ -4575,6 +4627,21 @@ snapshots:
|
|||||||
|
|
||||||
clone@2.1.2: {}
|
clone@2.1.2: {}
|
||||||
|
|
||||||
|
cloudflare@3.2.0:
|
||||||
|
dependencies:
|
||||||
|
'@types/node': 18.19.34
|
||||||
|
'@types/node-fetch': 2.6.11
|
||||||
|
'@types/qs': 6.9.15
|
||||||
|
abort-controller: 3.0.0
|
||||||
|
agentkeepalive: 4.5.0
|
||||||
|
form-data-encoder: 1.7.2
|
||||||
|
formdata-node: 4.4.1
|
||||||
|
node-fetch: 2.7.0
|
||||||
|
qs: 6.12.1
|
||||||
|
web-streams-polyfill: 3.3.3
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- encoding
|
||||||
|
|
||||||
co-body@6.2.0:
|
co-body@6.2.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@hapi/bourne': 3.0.0
|
'@hapi/bourne': 3.0.0
|
||||||
@ -4847,6 +4914,8 @@ snapshots:
|
|||||||
|
|
||||||
etag@1.8.1: {}
|
etag@1.8.1: {}
|
||||||
|
|
||||||
|
event-target-shim@5.0.1: {}
|
||||||
|
|
||||||
eventemitter3@4.0.7: {}
|
eventemitter3@4.0.7: {}
|
||||||
|
|
||||||
express-force-ssl@0.3.2:
|
express-force-ssl@0.3.2:
|
||||||
@ -4980,6 +5049,8 @@ snapshots:
|
|||||||
cross-spawn: 7.0.3
|
cross-spawn: 7.0.3
|
||||||
signal-exit: 4.1.0
|
signal-exit: 4.1.0
|
||||||
|
|
||||||
|
form-data-encoder@1.7.2: {}
|
||||||
|
|
||||||
form-data-encoder@2.1.4: {}
|
form-data-encoder@2.1.4: {}
|
||||||
|
|
||||||
form-data@4.0.0:
|
form-data@4.0.0:
|
||||||
@ -4990,6 +5061,11 @@ snapshots:
|
|||||||
|
|
||||||
format@0.2.2: {}
|
format@0.2.2: {}
|
||||||
|
|
||||||
|
formdata-node@4.4.1:
|
||||||
|
dependencies:
|
||||||
|
node-domexception: 1.0.0
|
||||||
|
web-streams-polyfill: 4.0.0-beta.3
|
||||||
|
|
||||||
forwarded@0.2.0: {}
|
forwarded@0.2.0: {}
|
||||||
|
|
||||||
fresh@0.5.2: {}
|
fresh@0.5.2: {}
|
||||||
@ -5955,6 +6031,8 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
lower-case: 1.1.4
|
lower-case: 1.1.4
|
||||||
|
|
||||||
|
node-domexception@1.0.0: {}
|
||||||
|
|
||||||
node-fetch@2.6.7:
|
node-fetch@2.6.7:
|
||||||
dependencies:
|
dependencies:
|
||||||
whatwg-url: 5.0.0
|
whatwg-url: 5.0.0
|
||||||
@ -6701,6 +6779,10 @@ snapshots:
|
|||||||
|
|
||||||
web-namespaces@2.0.1: {}
|
web-namespaces@2.0.1: {}
|
||||||
|
|
||||||
|
web-streams-polyfill@3.3.3: {}
|
||||||
|
|
||||||
|
web-streams-polyfill@4.0.0-beta.3: {}
|
||||||
|
|
||||||
webidl-conversions@3.0.1: {}
|
webidl-conversions@3.0.1: {}
|
||||||
|
|
||||||
webidl-conversions@4.0.2: {}
|
webidl-conversions@4.0.2: {}
|
||||||
|
@ -18,6 +18,7 @@ tap.test('.listZones() -> should display an entire account', async (tools) => {
|
|||||||
tools.timeout(600000);
|
tools.timeout(600000);
|
||||||
const result = await testCloudflareAccount.convenience.listZones();
|
const result = await testCloudflareAccount.convenience.listZones();
|
||||||
console.log(result);
|
console.log(result);
|
||||||
|
await tools.delayFor(10000);
|
||||||
});
|
});
|
||||||
|
|
||||||
tap.test(
|
tap.test(
|
||||||
|
@ -13,24 +13,17 @@ export class CloudflareAccount {
|
|||||||
public workerManager = new WorkerManager(this);
|
public workerManager = new WorkerManager(this);
|
||||||
public zoneManager = new ZoneManager(this);
|
public zoneManager = new ZoneManager(this);
|
||||||
|
|
||||||
|
public apiAccount: plugins.cloudflare.Cloudflare;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* constructor sets auth information on the CloudflareAccountInstance
|
* constructor sets auth information on the CloudflareAccountInstance
|
||||||
* @param optionsArg
|
* @param optionsArg
|
||||||
*/
|
*/
|
||||||
constructor(authTokenArg: string) {
|
constructor(authTokenArg: string) {
|
||||||
this.authToken = authTokenArg;
|
this.authToken = authTokenArg;
|
||||||
}
|
this.apiAccount = new plugins.cloudflare.Cloudflare({
|
||||||
|
apiToken: this.authToken,
|
||||||
/**
|
});
|
||||||
* gets you the account identifier
|
|
||||||
*/
|
|
||||||
public async getAccountIdentifier() {
|
|
||||||
if (!this.accountIdentifier) {
|
|
||||||
const route = `/accounts?page=1&per_page=20&direction=desc`;
|
|
||||||
const response: any = await this.request('GET', route);
|
|
||||||
this.accountIdentifier = response.result[0].id;
|
|
||||||
}
|
|
||||||
return this.accountIdentifier;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public convenience = {
|
public convenience = {
|
||||||
@ -59,7 +52,7 @@ export class CloudflareAccount {
|
|||||||
getRecord: async (
|
getRecord: async (
|
||||||
domainNameArg: string,
|
domainNameArg: string,
|
||||||
typeArg: plugins.tsclass.network.TDnsRecordType
|
typeArg: plugins.tsclass.network.TDnsRecordType
|
||||||
): Promise<interfaces.ICflareRecord> => {
|
): Promise<plugins.ICloudflareTypes['Record']> => {
|
||||||
const domain = new plugins.smartstring.Domain(domainNameArg);
|
const domain = new plugins.smartstring.Domain(domainNameArg);
|
||||||
const recordArrayArg = await this.convenience.listRecords(domain.zoneName);
|
const recordArrayArg = await this.convenience.listRecords(domain.zoneName);
|
||||||
const filteredResponse = recordArrayArg.filter((recordArg) => {
|
const filteredResponse = recordArrayArg.filter((recordArg) => {
|
||||||
@ -77,18 +70,14 @@ export class CloudflareAccount {
|
|||||||
ttlArg = 1
|
ttlArg = 1
|
||||||
): Promise<any> => {
|
): Promise<any> => {
|
||||||
const domain = new plugins.smartstring.Domain(domainNameArg);
|
const domain = new plugins.smartstring.Domain(domainNameArg);
|
||||||
const domainIdArg = await this.convenience.getZoneId(domain.zoneName);
|
const zoneId = await this.convenience.getZoneId(domain.zoneName);
|
||||||
const dataObject = {
|
const response = await this.apiAccount.dns.records.create({
|
||||||
|
zone_id: zoneId,
|
||||||
|
type: typeArg as any,
|
||||||
name: domain.fullName,
|
name: domain.fullName,
|
||||||
type: typeArg,
|
|
||||||
content: contentArg,
|
content: contentArg,
|
||||||
ttl: ttlArg,
|
ttl: ttlArg,
|
||||||
};
|
})
|
||||||
const response = await this.request(
|
|
||||||
'POST',
|
|
||||||
'/zones/' + domainIdArg + '/dns_records',
|
|
||||||
dataObject
|
|
||||||
);
|
|
||||||
return response;
|
return response;
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
@ -101,20 +90,36 @@ export class CloudflareAccount {
|
|||||||
typeArg: plugins.tsclass.network.TDnsRecordType
|
typeArg: plugins.tsclass.network.TDnsRecordType
|
||||||
): Promise<any> => {
|
): Promise<any> => {
|
||||||
const domain = new plugins.smartstring.Domain(domainNameArg);
|
const domain = new plugins.smartstring.Domain(domainNameArg);
|
||||||
const cflareRecord = await this.convenience.getRecord(domain.fullName, typeArg);
|
const zoneId = await this.convenience.getZoneId(domain.zoneName);
|
||||||
if (cflareRecord) {
|
const records = await this.convenience.listRecords(domain.zoneName);
|
||||||
const requestRoute: string = `/zones/${cflareRecord.zone_id}/dns_records/${cflareRecord.id}`;
|
const recordToDelete = records.find((recordArg) => {
|
||||||
return await this.request('DELETE', requestRoute);
|
return recordArg.name === domainNameArg && recordArg.type === typeArg;
|
||||||
|
});
|
||||||
|
if (recordToDelete) {
|
||||||
|
await this.apiAccount.dns.records.delete(recordToDelete.id, {
|
||||||
|
zone_id: zoneId,
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
throw new Error(`could not remove record for ${domainNameArg} with type ${typeArg}`);
|
logger.log('warn', `record ${domainNameArg} of type ${typeArg} not found`);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cleanrecord allows the cleaning of any previous records to avoid unwanted sideeffects
|
* cleanrecord allows the cleaning of any previous records to avoid unwanted sideeffects
|
||||||
*/
|
*/
|
||||||
cleanRecord: async (domainNameArg: string, typeArg: plugins.tsclass.network.TDnsRecordType) => {
|
cleanRecord: async (domainNameArg: string, typeArg: plugins.tsclass.network.TDnsRecordType) => {
|
||||||
console.log(`cleaning record for ${domainNameArg}`);
|
console.log(`cleaning record for ${domainNameArg}`);
|
||||||
|
const records = await this.convenience.listRecords(domainNameArg);
|
||||||
|
const recordsToDelete = records.filter((recordArg) => {
|
||||||
|
return recordArg.type === typeArg;
|
||||||
|
});
|
||||||
|
for (const recordToDelete of recordsToDelete) {
|
||||||
|
await this.apiAccount.dns.records.delete(recordToDelete.id, {
|
||||||
|
zone_id: recordToDelete.zone_id,
|
||||||
|
});
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* updates a record
|
* updates a record
|
||||||
* @param domainNameArg
|
* @param domainNameArg
|
||||||
@ -133,45 +138,40 @@ export class CloudflareAccount {
|
|||||||
* list all records of a specified domain name
|
* list all records of a specified domain name
|
||||||
* @param domainNameArg - the domain name that you want to get the records from
|
* @param domainNameArg - the domain name that you want to get the records from
|
||||||
*/
|
*/
|
||||||
listRecords: async (domainNameArg: string): Promise<interfaces.ICflareRecord[]> => {
|
listRecords: async (domainNameArg: string) => {
|
||||||
const domain = new plugins.smartstring.Domain(domainNameArg);
|
const domain = new plugins.smartstring.Domain(domainNameArg);
|
||||||
const domainId = await this.convenience.getZoneId(domain.zoneName);
|
const zoneId = await this.convenience.getZoneId(domain.zoneName);
|
||||||
const responseArg: any = await this.request(
|
const records: plugins.ICloudflareTypes['Record'][] = [];
|
||||||
'GET',
|
for await (const record of this.apiAccount.dns.records.list({
|
||||||
'/zones/' + domainId + '/dns_records?per_page=100'
|
zone_id: zoneId,
|
||||||
);
|
})) {
|
||||||
const result: interfaces.ICflareRecord[] = responseArg.result;
|
records.push(record);
|
||||||
return result;
|
}
|
||||||
|
return records;
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* list all zones in the associated authenticated account
|
* list all zones in the associated authenticated account
|
||||||
* @param domainName
|
* @param domainName
|
||||||
*/
|
*/
|
||||||
listZones: async (domainName?: string): Promise<interfaces.ICflareZone[]> => {
|
listZones: async (domainName?: string) => {
|
||||||
// TODO: handle pagination
|
const zones: plugins.ICloudflareTypes['Zone'][] = [];
|
||||||
let requestRoute = `/zones?per_page=50`;
|
for await (const zone of this.apiAccount.zones.list()) {
|
||||||
|
zones.push(zone);
|
||||||
// may be optionally filtered by domain name
|
|
||||||
if (domainName) {
|
|
||||||
requestRoute = `${requestRoute}&name=${domainName}`;
|
|
||||||
}
|
}
|
||||||
|
return zones;
|
||||||
const response: any = await this.request('GET', requestRoute);
|
|
||||||
const result = response.result;
|
|
||||||
return result;
|
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* purges a zone
|
* purges a zone
|
||||||
*/
|
*/
|
||||||
purgeZone: async (domainName: string): Promise<void> => {
|
purgeZone: async (domainName: string): Promise<void> => {
|
||||||
const domain = new plugins.smartstring.Domain(domainName);
|
const domain = new plugins.smartstring.Domain(domainName);
|
||||||
const domainId = await this.convenience.getZoneId(domain.zoneName);
|
const zoneId = await this.convenience.getZoneId(domain.zoneName);
|
||||||
const requestUrl = `/zones/${domainId}/purge_cache`;
|
await this.apiAccount.cache.purge({
|
||||||
const payload = {
|
zone_id: zoneId,
|
||||||
purge_everything: true,
|
purge_everything: true,
|
||||||
};
|
});
|
||||||
const respone = await this.request('DELETE', requestUrl, payload);
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// acme convenience functions
|
// acme convenience functions
|
||||||
acmeSetDnsChallenge: async (dnsChallenge: plugins.tsclass.network.IDnsChallenge) => {
|
acmeSetDnsChallenge: async (dnsChallenge: plugins.tsclass.network.IDnsChallenge) => {
|
||||||
await this.convenience.cleanRecord(dnsChallenge.hostName, 'TXT');
|
await this.convenience.cleanRecord(dnsChallenge.hostName, 'TXT');
|
||||||
@ -186,105 +186,4 @@ export class CloudflareAccount {
|
|||||||
await this.convenience.removeRecord(dnsChallenge.hostName, 'TXT');
|
await this.convenience.removeRecord(dnsChallenge.hostName, 'TXT');
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
public async request(
|
|
||||||
methodArg: string,
|
|
||||||
routeArg: string,
|
|
||||||
dataArg: any = {},
|
|
||||||
requestHeadersArg = {}
|
|
||||||
): Promise<any> {
|
|
||||||
const options: plugins.smartrequest.ISmartRequestOptions = {
|
|
||||||
method: methodArg,
|
|
||||||
headers: {
|
|
||||||
'Content-Type': 'application/json',
|
|
||||||
Authorization: `Bearer ${this.authToken}`,
|
|
||||||
'Content-Length': Buffer.byteLength(JSON.stringify(dataArg)),
|
|
||||||
...requestHeadersArg,
|
|
||||||
},
|
|
||||||
requestBody: dataArg,
|
|
||||||
};
|
|
||||||
|
|
||||||
// route analysis
|
|
||||||
const routeWithoutQuery = routeArg.split('?')[0];
|
|
||||||
let queryParams: string[] = [];
|
|
||||||
if (routeArg.split('?').length > 1) {
|
|
||||||
queryParams = routeArg.split('?')[1].split('&');
|
|
||||||
}
|
|
||||||
|
|
||||||
// console.log(options);
|
|
||||||
|
|
||||||
let retryCount = 0; // count the amount of retries
|
|
||||||
let pageCount = 1;
|
|
||||||
|
|
||||||
const getQueryParams = () => {
|
|
||||||
let result = '';
|
|
||||||
if (queryParams.length > 0) {
|
|
||||||
result += '?';
|
|
||||||
} else {
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
let isFirst = true;
|
|
||||||
for (const queryParam of queryParams) {
|
|
||||||
if (!isFirst) {
|
|
||||||
result += '&';
|
|
||||||
}
|
|
||||||
isFirst = false;
|
|
||||||
const queryParamSerialized = queryParam.split('=');
|
|
||||||
if (queryParam === 'page') {
|
|
||||||
result += `page=${pageCount}`;
|
|
||||||
} else {
|
|
||||||
result += queryParam;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
||||||
const makeRequest = async (): Promise<plugins.smartrequest.IExtendedIncomingMessage> => {
|
|
||||||
const requestUrl = `https://api.cloudflare.com/client/v4${routeWithoutQuery}${getQueryParams()}`;
|
|
||||||
const response = await plugins.smartrequest.request(requestUrl, options);
|
|
||||||
if (response.statusCode === 200) {
|
|
||||||
if (response.body.result_info) {
|
|
||||||
const rI = response.body.result_info;
|
|
||||||
if (rI.total_count / rI.per_page > pageCount) {
|
|
||||||
pageCount++;
|
|
||||||
const subresponse = await makeRequest();
|
|
||||||
response.body.result = response.body.result.concat(subresponse.body.result);
|
|
||||||
return response;
|
|
||||||
} else {
|
|
||||||
return response;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return response;
|
|
||||||
}
|
|
||||||
} else if (response.statusCode === 429) {
|
|
||||||
console.log('rate limited! Waiting for retry!');
|
|
||||||
return await retryRequest();
|
|
||||||
} else if (response.statusCode === 400) {
|
|
||||||
console.log(`bad request for route ${requestUrl}!`);
|
|
||||||
console.log(response.body);
|
|
||||||
throw new Error(`request failed for ${requestUrl}`);
|
|
||||||
} else {
|
|
||||||
console.log(response.body);
|
|
||||||
throw new Error(`request failed for ${requestUrl} with status${response.statusCode}}`);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const retryRequest = async (
|
|
||||||
delayTimeArg = Math.floor(Math.random() * (60000 - 8000) + 8000)
|
|
||||||
) => {
|
|
||||||
console.log(`retry started and waiting for ${delayTimeArg} ms`);
|
|
||||||
await plugins.smartdelay.delayFor(delayTimeArg);
|
|
||||||
if (retryCount < 10) {
|
|
||||||
retryCount++;
|
|
||||||
return await makeRequest();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const response = await makeRequest();
|
|
||||||
return response.body;
|
|
||||||
}
|
|
||||||
|
|
||||||
private authCheck() {
|
|
||||||
return !!this.authToken; // check if auth is available
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,50 +1,9 @@
|
|||||||
import * as plugins from './cloudflare.plugins.js';
|
import * as plugins from './cloudflare.plugins.js';
|
||||||
import * as interfaces from './interfaces/index.js';
|
|
||||||
|
|
||||||
export class CloudflareZone implements interfaces.ICflareZone {
|
export class CloudflareZone {
|
||||||
public static createFromApiObject(apiObject: interfaces.ICflareZone) {
|
public static createFromApiObject(apiObject: plugins.ICloudflareTypes['Zone']) {
|
||||||
const cloudflareZone = new CloudflareZone();
|
const cloudflareZone = new CloudflareZone();
|
||||||
Object.assign(cloudflareZone, apiObject);
|
Object.assign(cloudflareZone, apiObject);
|
||||||
return cloudflareZone;
|
return cloudflareZone;
|
||||||
}
|
}
|
||||||
|
|
||||||
id: string;
|
|
||||||
name: string;
|
|
||||||
development_mode: number;
|
|
||||||
original_name_servers: string[];
|
|
||||||
original_registrar: string;
|
|
||||||
original_dnshost: string;
|
|
||||||
created_on: string;
|
|
||||||
modified_on: string;
|
|
||||||
name_servers: string[];
|
|
||||||
owner: {
|
|
||||||
id: string;
|
|
||||||
email: string;
|
|
||||||
owner_type: string;
|
|
||||||
};
|
|
||||||
permissions: string[];
|
|
||||||
plan: {
|
|
||||||
id: string;
|
|
||||||
name: string;
|
|
||||||
price: number;
|
|
||||||
currency: string;
|
|
||||||
frequency: string;
|
|
||||||
legacy_id: string;
|
|
||||||
is_subscribed: boolean;
|
|
||||||
can_subscribe: boolean;
|
|
||||||
};
|
|
||||||
plan_pending: {
|
|
||||||
id: string;
|
|
||||||
name: string;
|
|
||||||
price: number;
|
|
||||||
currency: string;
|
|
||||||
frequency: string;
|
|
||||||
legacy_id: string;
|
|
||||||
is_subscribed: string;
|
|
||||||
can_subscribe: string;
|
|
||||||
};
|
|
||||||
status: string;
|
|
||||||
paused: boolean;
|
|
||||||
type: string;
|
|
||||||
checked_on: string;
|
|
||||||
}
|
}
|
||||||
|
@ -6,3 +6,15 @@ import * as smartstring from '@push.rocks/smartstring';
|
|||||||
import * as tsclass from '@tsclass/tsclass';
|
import * as tsclass from '@tsclass/tsclass';
|
||||||
|
|
||||||
export { smartlog, smartpromise, smartdelay, smartrequest, smartstring, tsclass };
|
export { smartlog, smartpromise, smartdelay, smartrequest, smartstring, tsclass };
|
||||||
|
|
||||||
|
// third party
|
||||||
|
import * as cloudflare from 'cloudflare';
|
||||||
|
import type { Zone } from 'cloudflare/resources/zones/zones.js';
|
||||||
|
import type { Record } from 'cloudflare/resources/dns/records.js';
|
||||||
|
|
||||||
|
export interface ICloudflareTypes {
|
||||||
|
Zone: Zone;
|
||||||
|
Record: Record;
|
||||||
|
}
|
||||||
|
|
||||||
|
export { cloudflare };
|
||||||
|
@ -1,15 +0,0 @@
|
|||||||
export interface ICflareRecord {
|
|
||||||
id: string;
|
|
||||||
type: string;
|
|
||||||
name: string;
|
|
||||||
content: string;
|
|
||||||
proxiable: boolean;
|
|
||||||
proxied: boolean;
|
|
||||||
ttl: number;
|
|
||||||
locked: boolean;
|
|
||||||
zone_id: string;
|
|
||||||
zone_name: string;
|
|
||||||
created_on: string;
|
|
||||||
modified_on: string;
|
|
||||||
data: any;
|
|
||||||
}
|
|
@ -1,41 +0,0 @@
|
|||||||
export interface ICflareZone {
|
|
||||||
id: string;
|
|
||||||
name: string;
|
|
||||||
development_mode: number;
|
|
||||||
original_name_servers: string[];
|
|
||||||
original_registrar: string;
|
|
||||||
original_dnshost: string;
|
|
||||||
created_on: string;
|
|
||||||
modified_on: string;
|
|
||||||
name_servers: string[];
|
|
||||||
owner: {
|
|
||||||
id: string;
|
|
||||||
email: string;
|
|
||||||
owner_type: string;
|
|
||||||
};
|
|
||||||
permissions: string[];
|
|
||||||
plan: {
|
|
||||||
id: string;
|
|
||||||
name: string;
|
|
||||||
price: number;
|
|
||||||
currency: string;
|
|
||||||
frequency: string;
|
|
||||||
legacy_id: string;
|
|
||||||
is_subscribed: boolean;
|
|
||||||
can_subscribe: boolean;
|
|
||||||
};
|
|
||||||
plan_pending: {
|
|
||||||
id: string;
|
|
||||||
name: string;
|
|
||||||
price: number;
|
|
||||||
currency: string;
|
|
||||||
frequency: string;
|
|
||||||
legacy_id: string;
|
|
||||||
is_subscribed: string;
|
|
||||||
can_subscribe: string;
|
|
||||||
};
|
|
||||||
status: string;
|
|
||||||
paused: boolean;
|
|
||||||
type: string;
|
|
||||||
checked_on: string;
|
|
||||||
}
|
|
@ -1,3 +1 @@
|
|||||||
export * from './cloudflare.api.record.js';
|
|
||||||
export * from './cloudflare.api.zone.js';
|
|
||||||
export * from './cloudflare.api.workerroute.js';
|
export * from './cloudflare.api.workerroute.js';
|
||||||
|
Loading…
Reference in New Issue
Block a user