Compare commits

..

32 Commits

Author SHA1 Message Date
d216a5e8b9 3.0.35 2024-03-03 10:36:24 +01:00
adca345da1 fix(core): update 2024-03-03 10:36:24 +01:00
ab880d704a 3.0.34 2023-10-20 18:01:13 +02:00
5af1863264 fix(core): update 2023-10-20 18:01:12 +02:00
b43050ff0c 3.0.33 2023-08-27 16:33:11 +02:00
627fc42962 fix(core): update 2023-08-27 16:33:10 +02:00
763afa62cd 3.0.32 2023-07-27 13:59:38 +02:00
ee4ced4395 fix(core): update 2023-07-27 13:59:37 +02:00
8a06f09405 3.0.31 2023-07-27 13:59:22 +02:00
8030851d2e fix(core): update 2023-07-27 13:59:21 +02:00
a8bbec3c17 3.0.30 2023-07-10 22:48:02 +02:00
27f351c541 fix(core): update 2023-07-10 22:48:01 +02:00
342d93e34d 3.0.29 2023-07-10 22:31:55 +02:00
4a0f2288ca fix(core): update 2023-07-10 22:31:55 +02:00
5c7f9e5bfa 3.0.28 2023-07-09 17:24:53 +02:00
14bda0bfa3 fix(core): update 2023-07-09 17:24:52 +02:00
4a57f7070a 3.0.27 2023-07-09 17:20:12 +02:00
f36bdcb181 fix(core): update 2023-07-09 17:20:12 +02:00
d3c90b0e7e 3.0.26 2023-07-03 10:08:45 +02:00
2397e69572 fix(core): update 2023-07-03 10:08:44 +02:00
7f7738d69f 3.0.25 2023-07-03 10:08:16 +02:00
f375e36a99 fix(core): update 2023-07-03 10:08:16 +02:00
0e827e508e 3.0.24 2023-07-03 10:08:05 +02:00
43820d0278 fix(core): update 2023-07-03 10:08:04 +02:00
98a18f4243 3.0.23 2023-05-01 13:11:42 +02:00
ba231de502 fix(core): update 2023-05-01 13:11:41 +02:00
363bc1c025 3.0.22 2023-05-01 12:26:16 +02:00
f28f5b8f46 fix(core): update 2023-05-01 12:26:15 +02:00
b30a7b57d3 3.0.21 2023-03-07 16:04:08 +01:00
240b2fc69a fix(core): update 2023-03-07 16:04:08 +01:00
0e1da04c3c 3.0.20 2023-03-07 11:31:26 +01:00
2a715e5b80 fix(core): update 2023-03-07 11:31:25 +01:00
12 changed files with 3264 additions and 1780 deletions

View File

@ -0,0 +1,66 @@
name: Default (not tags)
on:
push:
tags-ignore:
- '**'
env:
IMAGE: registry.gitlab.com/hosttoday/ht-docker-node:npmci
NPMCI_COMPUTED_REPOURL: https://${{gitea.repository_owner}}:${{secrets.GITEA_TOKEN}}@gitea.lossless.digital/${{gitea.repository}}.git
NPMCI_TOKEN_NPM: ${{secrets.NPMCI_TOKEN_NPM}}
NPMCI_TOKEN_NPM2: ${{secrets.NPMCI_TOKEN_NPM2}}
NPMCI_GIT_GITHUBTOKEN: ${{secrets.NPMCI_GIT_GITHUBTOKEN}}
NPMCI_URL_CLOUDLY: ${{secrets.NPMCI_URL_CLOUDLY}}
jobs:
security:
runs-on: ubuntu-latest
continue-on-error: true
container:
image: ${{ env.IMAGE }}
steps:
- uses: actions/checkout@v3
- name: Install pnpm and npmci
run: |
pnpm install -g pnpm
pnpm install -g @shipzone/npmci
- name: Run npm prepare
run: npmci npm prepare
- name: Audit production dependencies
run: |
npmci command npm config set registry https://registry.npmjs.org
npmci command pnpm audit --audit-level=high --prod
continue-on-error: true
- name: Audit development dependencies
run: |
npmci command npm config set registry https://registry.npmjs.org
npmci command pnpm audit --audit-level=high --dev
continue-on-error: true
test:
if: ${{ always() }}
needs: security
runs-on: ubuntu-latest
container:
image: ${{ env.IMAGE }}
steps:
- uses: actions/checkout@v3
- name: Test stable
run: |
npmci node install stable
npmci npm install
npmci npm test
- name: Test build
run: |
npmci node install stable
npmci npm install
npmci npm build

View File

@ -0,0 +1,124 @@
name: Default (tags)
on:
push:
tags:
- '*'
env:
IMAGE: registry.gitlab.com/hosttoday/ht-docker-node:npmci
NPMCI_COMPUTED_REPOURL: https://${{gitea.repository_owner}}:${{secrets.GITEA_TOKEN}}@gitea.lossless.digital/${{gitea.repository}}.git
NPMCI_TOKEN_NPM: ${{secrets.NPMCI_TOKEN_NPM}}
NPMCI_TOKEN_NPM2: ${{secrets.NPMCI_TOKEN_NPM2}}
NPMCI_GIT_GITHUBTOKEN: ${{secrets.NPMCI_GIT_GITHUBTOKEN}}
NPMCI_URL_CLOUDLY: ${{secrets.NPMCI_URL_CLOUDLY}}
jobs:
security:
runs-on: ubuntu-latest
continue-on-error: true
container:
image: ${{ env.IMAGE }}
steps:
- uses: actions/checkout@v3
- name: Prepare
run: |
pnpm install -g pnpm
pnpm install -g @shipzone/npmci
npmci npm prepare
- name: Audit production dependencies
run: |
npmci command npm config set registry https://registry.npmjs.org
npmci command pnpm audit --audit-level=high --prod
continue-on-error: true
- name: Audit development dependencies
run: |
npmci command npm config set registry https://registry.npmjs.org
npmci command pnpm audit --audit-level=high --dev
continue-on-error: true
test:
if: ${{ always() }}
needs: security
runs-on: ubuntu-latest
container:
image: ${{ env.IMAGE }}
steps:
- uses: actions/checkout@v3
- name: Prepare
run: |
pnpm install -g pnpm
pnpm install -g @shipzone/npmci
npmci npm prepare
- name: Test stable
run: |
npmci node install stable
npmci npm install
npmci npm test
- name: Test build
run: |
npmci node install stable
npmci npm install
npmci npm build
release:
needs: test
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
runs-on: ubuntu-latest
container:
image: ${{ env.IMAGE }}
steps:
- uses: actions/checkout@v3
- name: Prepare
run: |
pnpm install -g pnpm
pnpm install -g @shipzone/npmci
npmci npm prepare
- name: Release
run: |
npmci node install stable
npmci npm publish
metadata:
needs: test
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
runs-on: ubuntu-latest
container:
image: ${{ env.IMAGE }}
continue-on-error: true
steps:
- uses: actions/checkout@v3
- name: Prepare
run: |
pnpm install -g pnpm
pnpm install -g @shipzone/npmci
npmci npm prepare
- name: Code quality
run: |
npmci command npm install -g typescript
npmci npm install
- name: Trigger
run: npmci trigger
- name: Build docs and upload artifacts
run: |
npmci node install stable
npmci npm install
pnpm install -g @gitzone/tsdoc
npmci command tsdoc
continue-on-error: true

View File

@ -1,128 +0,0 @@
# gitzone ci_default
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
cache:
paths:
- .npmci_cache/
key: '$CI_BUILD_STAGE'
stages:
- security
- test
- release
- metadata
before_script:
- pnpm install -g pnpm
- pnpm install -g @shipzone/npmci
- npmci npm prepare
# ====================
# security stage
# ====================
# ====================
# security stage
# ====================
auditProductionDependencies:
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
stage: security
script:
- npmci command npm config set registry https://registry.npmjs.org
- npmci command pnpm audit --audit-level=high --prod
tags:
- lossless
- docker
allow_failure: true
auditDevDependencies:
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
stage: security
script:
- npmci command npm config set registry https://registry.npmjs.org
- npmci command pnpm audit --audit-level=high --dev
tags:
- lossless
- docker
allow_failure: true
# ====================
# test stage
# ====================
testStable:
stage: test
script:
- npmci node install stable
- npmci npm install
- npmci npm test
coverage: /\d+.?\d+?\%\s*coverage/
tags:
- docker
testBuild:
stage: test
script:
- npmci node install stable
- npmci npm install
- npmci npm build
coverage: /\d+.?\d+?\%\s*coverage/
tags:
- docker
release:
stage: release
script:
- npmci node install stable
- npmci npm publish
only:
- tags
tags:
- lossless
- docker
- notpriv
# ====================
# metadata stage
# ====================
codequality:
stage: metadata
allow_failure: true
only:
- tags
script:
- npmci command npm install -g typescript
- npmci npm prepare
- npmci npm install
tags:
- lossless
- docker
- priv
trigger:
stage: metadata
script:
- npmci trigger
only:
- tags
tags:
- lossless
- docker
- notpriv
pages:
stage: metadata
script:
- npmci node install stable
- npmci npm install
- npmci command npm run buildDocs
tags:
- lossless
- docker
- notpriv
only:
- tags
artifacts:
expire_in: 1 week
paths:
- public
allow_failure: true

View File

@ -7,10 +7,10 @@
"projectType": "npm",
"module": {
"githost": "gitlab.com",
"gitscope": "pushrocks",
"gitscope": "push.rocks",
"gitrepo": "webrequest",
"description": "securely request from browsers",
"npmPackagename": "@pushrocks/webrequest",
"npmPackagename": "@push.rocks/webrequest",
"license": "MIT"
}
}

View File

@ -1,6 +1,6 @@
{
"name": "@pushrocks/webrequest",
"version": "3.0.19",
"name": "@push.rocks/webrequest",
"version": "3.0.35",
"private": false,
"description": "securely request from browsers",
"main": "dist_ts/index.js",
@ -14,21 +14,20 @@
"buildDocs": "tsdoc"
},
"devDependencies": {
"@gitzone/tsbuild": "^2.1.65",
"@gitzone/tsbundle": "^2.0.7",
"@gitzone/tsrun": "^1.2.39",
"@gitzone/tstest": "^1.0.73",
"@pushrocks/smartexpress": "^4.0.21",
"@pushrocks/tapbundle": "^5.0.4",
"@types/node": "^18.14.6"
"@api.global/typedserver": "^3.0.26",
"@git.zone/tsbuild": "^2.1.72",
"@git.zone/tsbundle": "^2.0.15",
"@git.zone/tsrun": "^1.2.46",
"@git.zone/tstest": "^1.0.86",
"@push.rocks/tapbundle": "^5.0.15",
"@types/node": "^20.11.24"
},
"dependencies": {
"@adobe/fetch": "^4.0.4",
"@pushrocks/smartdelay": "^2.0.13",
"@pushrocks/smartenv": "^5.0.2",
"@pushrocks/smartjson": "^5.0.1",
"@pushrocks/smartpromise": "^3.1.7",
"@pushrocks/webstore": "^2.0.5"
"@push.rocks/smartdelay": "^3.0.5",
"@push.rocks/smartenv": "^5.0.12",
"@push.rocks/smartjson": "^5.0.14",
"@push.rocks/smartpromise": "^4.0.3",
"@push.rocks/webstore": "^2.0.13"
},
"files": [
"ts/**/*",

4583
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
import { expect, tap } from '@pushrocks/tapbundle';
import { expect, tap } from '@push.rocks/tapbundle';
import * as webrequest from '../ts/index.js';
tap.test('should run multiendpoint request', async (tools) => {

View File

@ -1,13 +1,13 @@
import { expect, tap } from '@pushrocks/tapbundle';
import { expect, tap } from '@push.rocks/tapbundle';
import * as webrequest from '../ts/index.js';
// test dependencies
import * as smartexpress from '@pushrocks/smartexpress';
import * as typedserver from '@api.global/typedserver';
let testServer: smartexpress.Server;
let testServer: typedserver.servertools.Server;
tap.test('setup test server', async () => {
testServer = new smartexpress.Server({
testServer = new typedserver.servertools.Server({
cors: false,
forceSsl: false,
port: 2345,
@ -15,7 +15,7 @@ tap.test('setup test server', async () => {
testServer.addRoute(
'/apiroute1',
new smartexpress.Handler('GET', (req, res) => {
new typedserver.servertools.Handler('GET', (req, res) => {
res.status(429);
res.end();
})
@ -23,7 +23,7 @@ tap.test('setup test server', async () => {
testServer.addRoute(
'/apiroute2',
new smartexpress.Handler('GET', (req, res) => {
new typedserver.servertools.Handler('GET', (req, res) => {
res.status(500);
res.end();
})
@ -31,7 +31,7 @@ tap.test('setup test server', async () => {
testServer.addRoute(
'/apiroute3',
new smartexpress.Handler('GET', (req, res) => {
new typedserver.servertools.Handler('GET', (req, res) => {
res.status(200);
res.send({
hithere: 'hi',

View File

@ -2,7 +2,7 @@
* autocreated commitinfo by @pushrocks/commitinfo
*/
export const commitinfo = {
name: '@pushrocks/webrequest',
version: '3.0.19',
name: '@push.rocks/webrequest',
version: '3.0.35',
description: 'securely request from browsers'
}

View File

@ -8,44 +8,6 @@ export interface IWebrequestContructorOptions {
* web request
*/
export class WebRequest {
private static polyfillStatusEvaluated = false;
private static neededPolyfillsLoadedDeferred = plugins.smartpromise.defer<{
fetch: typeof fetch;
Response: typeof Response;
AbortController?: typeof AbortController;
helixTimeout?: any;
}>();
/**
* loads the needed polyfill
* @returns
*/
public static async loadNeededPolyfills() {
if (this.polyfillStatusEvaluated) {
return this.neededPolyfillsLoadedDeferred.promise;
}
this.polyfillStatusEvaluated = true;
const smartenv = new plugins.smartenv.Smartenv();
if (!smartenv.isBrowser) {
console.log('webrequest using node context.');
this.polyfillStatusEvaluated = true;
const fetchMod = await smartenv.getSafeNodeModule('@adobe/fetch');
this.neededPolyfillsLoadedDeferred.resolve({
fetch: fetchMod.fetch,
Response: fetchMod.Response,
helixTimeout: fetchMod.timeoutSignal,
});
} else {
console.log('webrequest using browser context.');
this.neededPolyfillsLoadedDeferred.resolve({
fetch: (...args) => {
return fetch(...args);
},
Response: globalThis.Response,
AbortController: globalThis.AbortController,
});
}
}
public cacheStore = new plugins.webstore.WebStore({
dbName: 'webrequest',
@ -59,11 +21,9 @@ export class WebRequest {
logging: true,
...optionsArg,
};
WebRequest.loadNeededPolyfills();
}
public async getJson(urlArg: string, useCacheArg: boolean = false) {
await WebRequest.neededPolyfillsLoadedDeferred.promise;
const response: Response = await this.request(urlArg, {
method: 'GET',
useCache: useCacheArg,
@ -77,7 +37,6 @@ export class WebRequest {
* postJson
*/
public async postJson(urlArg: string, requestBody?: any, useCacheArg: boolean = false) {
await WebRequest.neededPolyfillsLoadedDeferred.promise;
const response: Response = await this.request(urlArg, {
method: 'POST',
headers: {
@ -95,7 +54,6 @@ export class WebRequest {
* put js
*/
public async putJson(urlArg: string, requestBody?: any, useStoreAsFallback: boolean = false) {
await WebRequest.neededPolyfillsLoadedDeferred.promise;
const response: Response = await this.request(urlArg, {
method: 'PUT',
headers: {
@ -112,7 +70,6 @@ export class WebRequest {
* put js
*/
public async deleteJson(urlArg: string, useStoreAsFallback: boolean = false) {
await WebRequest.neededPolyfillsLoadedDeferred.promise;
const response: Response = await this.request(urlArg, {
headers: {
'Content-Type': 'application/json',
@ -140,20 +97,10 @@ export class WebRequest {
...optionsArg,
};
const fetchObject = await WebRequest.neededPolyfillsLoadedDeferred.promise;
let controller: AbortController;
if (optionsArg.timeoutMs) {
if (fetchObject.AbortController) {
controller = new fetchObject.AbortController();
plugins.smartdelay.delayFor(optionsArg.timeoutMs).then(() => {
controller.abort();
});
} else {
controller = {
signal: fetchObject.helixTimeout(optionsArg.timeoutMs),
} as any;
}
}
let controller = new AbortController();
plugins.smartdelay.delayFor(optionsArg.timeoutMs).then(() => {
controller.abort();
});
let cachedResponseDeferred = plugins.smartpromise.defer<Response>();
let cacheUsed = false;
if (optionsArg.useCache && (await this.cacheStore.check(urlArg))) {
@ -162,9 +109,8 @@ export class WebRequest {
} else {
cachedResponseDeferred.resolve(null);
}
let response: Response = await fetchObject
.fetch(urlArg, {
signal: controller ? controller.signal : null,
let response: Response = await fetch(urlArg, {
signal: controller.signal,
method: optionsArg.method,
headers: {
...(optionsArg.headers || {}),
@ -203,7 +149,7 @@ export class WebRequest {
headers?: HeadersInit;
}
): Promise<Response> {
await WebRequest.neededPolyfillsLoadedDeferred.promise;
let allUrls: string[];
let usedUrlIndex = 0;

View File

@ -1,7 +1,7 @@
import * as smartdelay from '@pushrocks/smartdelay';
import * as smartenv from '@pushrocks/smartenv';
import * as smartjson from '@pushrocks/smartjson';
import * as smartpromise from '@pushrocks/smartpromise';
import * as webstore from '@pushrocks/webstore';
import * as smartdelay from '@push.rocks/smartdelay';
import * as smartenv from '@push.rocks/smartenv';
import * as smartjson from '@push.rocks/smartjson';
import * as smartpromise from '@push.rocks/smartpromise';
import * as webstore from '@push.rocks/webstore';
export { smartdelay, smartenv, smartjson, smartpromise, webstore };

View File

@ -3,8 +3,12 @@
"experimentalDecorators": true,
"useDefineForClassFields": false,
"target": "ES2022",
"module": "ES2022",
"moduleResolution": "nodenext",
"esModuleInterop": true
}
"module": "NodeNext",
"moduleResolution": "NodeNext",
"esModuleInterop": true,
"verbatimModuleSyntax": true
},
"exclude": [
"dist_*/**/*.d.ts"
]
}