Compare commits
8 Commits
main
...
web/bug/fi
Author | SHA1 | Date | |
---|---|---|---|
1c9e4652f9 | |||
079ed7bf4c | |||
430278712f | |||
2aad79b5db | |||
0fcf1ebf94 | |||
ed7c1b9b3e | |||
e71e875056 | |||
705f096e3f |
10391
web/package-lock.json
generated
10391
web/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -75,10 +75,10 @@
|
|||||||
"@types/showdown": "^2.0.6",
|
"@types/showdown": "^2.0.6",
|
||||||
"@typescript-eslint/eslint-plugin": "^8.7.0",
|
"@typescript-eslint/eslint-plugin": "^8.7.0",
|
||||||
"@typescript-eslint/parser": "^8.7.0",
|
"@typescript-eslint/parser": "^8.7.0",
|
||||||
"@wdio/browser-runner": "^9.1.2",
|
"@wdio/browser-runner": "^8.40.5",
|
||||||
"@wdio/cli": "^9.1.2",
|
"@wdio/cli": "^8.40.5",
|
||||||
"@wdio/mocha-framework": "^9.1.2",
|
"@wdio/mocha-framework": "^9.1.0",
|
||||||
"@wdio/spec-reporter": "^9.1.2",
|
"@wdio/spec-reporter": "^9.1.0",
|
||||||
"babel-plugin-macros": "^3.1.0",
|
"babel-plugin-macros": "^3.1.0",
|
||||||
"babel-plugin-tsconfig-paths": "^1.0.3",
|
"babel-plugin-tsconfig-paths": "^1.0.3",
|
||||||
"chokidar": "^4.0.1",
|
"chokidar": "^4.0.1",
|
||||||
@ -86,7 +86,6 @@
|
|||||||
"esbuild": "^0.24.0",
|
"esbuild": "^0.24.0",
|
||||||
"eslint": "^9.11.1",
|
"eslint": "^9.11.1",
|
||||||
"eslint-plugin-lit": "^1.14.0",
|
"eslint-plugin-lit": "^1.14.0",
|
||||||
"eslint-plugin-sonarjs": "^2.0.2",
|
|
||||||
"eslint-plugin-wc": "^2.1.0",
|
"eslint-plugin-wc": "^2.1.0",
|
||||||
"github-slugger": "^2.0.0",
|
"github-slugger": "^2.0.0",
|
||||||
"glob": "^11.0.0",
|
"glob": "^11.0.0",
|
||||||
@ -330,14 +329,14 @@
|
|||||||
"command": "node scripts/build-storybook-import-maps.mjs"
|
"command": "node scripts/build-storybook-import-maps.mjs"
|
||||||
},
|
},
|
||||||
"test": {
|
"test": {
|
||||||
"command": "wdio run ./wdio.conf.ts --logLevel=warn",
|
"command": "wdio ./wdio.conf.ts --logLevel=info",
|
||||||
"env": {
|
"env": {
|
||||||
"CI": "true",
|
"CI": "true",
|
||||||
"TS_NODE_PROJECT": "tsconfig.test.json"
|
"TS_NODE_PROJECT": "tsconfig.test.json"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"test-watch": {
|
"test-watch": {
|
||||||
"command": "wdio run ./wdio.conf.ts",
|
"command": "wdio ./wdio.conf.ts",
|
||||||
"env": {
|
"env": {
|
||||||
"TS_NODE_PROJECT": "tsconfig.test.json"
|
"TS_NODE_PROJECT": "tsconfig.test.json"
|
||||||
}
|
}
|
||||||
|
@ -1,67 +0,0 @@
|
|||||||
import { execFileSync } from "child_process";
|
|
||||||
import { ESLint } from "eslint";
|
|
||||||
import path from "path";
|
|
||||||
import process from "process";
|
|
||||||
|
|
||||||
// Code assumes this script is in the './web/scripts' folder.
|
|
||||||
const projectRoot = execFileSync("git", ["rev-parse", "--show-toplevel"], {
|
|
||||||
encoding: "utf8",
|
|
||||||
}).replace("\n", "");
|
|
||||||
process.chdir(path.join(projectRoot, "./web"));
|
|
||||||
|
|
||||||
const eslintConfig = {
|
|
||||||
fix: true,
|
|
||||||
overrideConfig: {
|
|
||||||
env: {
|
|
||||||
browser: true,
|
|
||||||
es2021: true,
|
|
||||||
},
|
|
||||||
extends: [
|
|
||||||
"eslint:recommended",
|
|
||||||
"plugin:@typescript-eslint/recommended",
|
|
||||||
"plugin:lit/recommended",
|
|
||||||
"plugin:custom-elements/recommended",
|
|
||||||
"plugin:storybook/recommended",
|
|
||||||
"plugin:sonarjs/recommended",
|
|
||||||
],
|
|
||||||
parser: "@typescript-eslint/parser",
|
|
||||||
parserOptions: {
|
|
||||||
ecmaVersion: 12,
|
|
||||||
sourceType: "module",
|
|
||||||
project: true,
|
|
||||||
},
|
|
||||||
plugins: ["@typescript-eslint", "lit", "custom-elements", "sonarjs"],
|
|
||||||
ignorePatterns: ["authentik-live-tests/**", "./.storybook/**/*.ts"],
|
|
||||||
rules: {
|
|
||||||
"indent": "off",
|
|
||||||
"linebreak-style": ["error", "unix"],
|
|
||||||
"quotes": ["error", "double", { avoidEscape: true }],
|
|
||||||
"semi": ["error", "always"],
|
|
||||||
"@typescript-eslint/ban-ts-comment": "off",
|
|
||||||
"no-unused-vars": "off",
|
|
||||||
"sonarjs/cognitive-complexity": ["warn", 9],
|
|
||||||
"sonarjs/no-duplicate-string": "off",
|
|
||||||
"sonarjs/no-nested-template-literals": "off",
|
|
||||||
"@typescript-eslint/no-unused-vars": [
|
|
||||||
"error",
|
|
||||||
{
|
|
||||||
argsIgnorePattern: "^_",
|
|
||||||
varsIgnorePattern: "^_",
|
|
||||||
caughtErrorsIgnorePattern: "^_",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
"no-console": ["error", { allow: ["debug", "warn", "error"] }],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
const updated = ["./src/", "./build.mjs", "./scripts/*.mjs"];
|
|
||||||
|
|
||||||
const eslint = new ESLint(eslintConfig);
|
|
||||||
const results = await eslint.lintFiles(updated);
|
|
||||||
const formatter = await eslint.loadFormatter("stylish");
|
|
||||||
const resultText = formatter.format(results);
|
|
||||||
const errors = results.reduce((acc, result) => acc + result.errorCount, 0);
|
|
||||||
|
|
||||||
console.log(resultText);
|
|
||||||
process.exit(errors > 1 ? 1 : 0);
|
|
@ -1,94 +0,0 @@
|
|||||||
import { execFileSync } from "child_process";
|
|
||||||
import { ESLint } from "eslint";
|
|
||||||
import path from "path";
|
|
||||||
import process from "process";
|
|
||||||
|
|
||||||
// Code assumes this script is in the './web/scripts' folder.
|
|
||||||
const projectRoot = execFileSync("git", ["rev-parse", "--show-toplevel"], {
|
|
||||||
encoding: "utf8",
|
|
||||||
}).replace("\n", "");
|
|
||||||
process.chdir(path.join(projectRoot, "./web"));
|
|
||||||
|
|
||||||
const eslintConfig = {
|
|
||||||
fix: true,
|
|
||||||
overrideConfig: {
|
|
||||||
env: {
|
|
||||||
browser: true,
|
|
||||||
es2021: true,
|
|
||||||
},
|
|
||||||
extends: [
|
|
||||||
"eslint:recommended",
|
|
||||||
"plugin:@typescript-eslint/recommended",
|
|
||||||
"plugin:lit/recommended",
|
|
||||||
"plugin:custom-elements/recommended",
|
|
||||||
"plugin:storybook/recommended",
|
|
||||||
"plugin:sonarjs/recommended",
|
|
||||||
],
|
|
||||||
parser: "@typescript-eslint/parser",
|
|
||||||
parserOptions: {
|
|
||||||
ecmaVersion: 12,
|
|
||||||
sourceType: "module",
|
|
||||||
project: true,
|
|
||||||
},
|
|
||||||
plugins: ["@typescript-eslint", "lit", "custom-elements", "sonarjs"],
|
|
||||||
ignorePatterns: ["authentik-live-tests/**", "./.storybook/**/*.ts"],
|
|
||||||
rules: {
|
|
||||||
"indent": "off",
|
|
||||||
"linebreak-style": ["error", "unix"],
|
|
||||||
"quotes": ["error", "double", { avoidEscape: true }],
|
|
||||||
"semi": ["error", "always"],
|
|
||||||
"@typescript-eslint/ban-ts-comment": "off",
|
|
||||||
"no-unused-vars": "off",
|
|
||||||
"sonarjs/cognitive-complexity": ["warn", 9],
|
|
||||||
"sonarjs/no-duplicate-string": "off",
|
|
||||||
"sonarjs/no-nested-template-literals": "off",
|
|
||||||
"@typescript-eslint/no-unused-vars": [
|
|
||||||
"error",
|
|
||||||
{
|
|
||||||
argsIgnorePattern: "^_",
|
|
||||||
varsIgnorePattern: "^_",
|
|
||||||
caughtErrorsIgnorePattern: "^_",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
"no-console": ["error", { allow: ["debug", "warn", "error"] }],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
const porcelainV1 = /^(..)\s+(.*$)/;
|
|
||||||
const gitStatus = execFileSync("git", ["status", "--porcelain", "."], { encoding: "utf8" });
|
|
||||||
|
|
||||||
const statuses = gitStatus.split("\n").reduce((acc, line) => {
|
|
||||||
const match = porcelainV1.exec(line.replace("\n"));
|
|
||||||
if (!match) {
|
|
||||||
return acc;
|
|
||||||
}
|
|
||||||
const [status, path] = Array.from(match).slice(1, 3);
|
|
||||||
return [...acc, [status, path.split("\x00")[0]]];
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
const isModified = /^(M|\?|\s)(M|\?|\s)/;
|
|
||||||
const modified = (s) => isModified.test(s);
|
|
||||||
|
|
||||||
const isCheckable = /\.(ts|js|mjs)$/;
|
|
||||||
const checkable = (s) => isCheckable.test(s);
|
|
||||||
|
|
||||||
const ignored = /\/\.storybook\//;
|
|
||||||
const notIgnored = (s) => !ignored.test(s);
|
|
||||||
|
|
||||||
const updated = statuses.reduce(
|
|
||||||
(acc, [status, filename]) =>
|
|
||||||
modified(status) && checkable(filename) && notIgnored(filename)
|
|
||||||
? [...acc, path.join(projectRoot, filename)]
|
|
||||||
: acc,
|
|
||||||
[],
|
|
||||||
);
|
|
||||||
|
|
||||||
const eslint = new ESLint(eslintConfig);
|
|
||||||
const results = await eslint.lintFiles(updated);
|
|
||||||
const formatter = await eslint.loadFormatter("stylish");
|
|
||||||
const resultText = formatter.format(results);
|
|
||||||
const errors = results.reduce((acc, result) => acc + result.errorCount, 0);
|
|
||||||
|
|
||||||
console.log(resultText);
|
|
||||||
process.exit(errors > 1 ? 1 : 0);
|
|
@ -1,7 +1,6 @@
|
|||||||
import eslint from "@eslint/js";
|
import eslint from "@eslint/js";
|
||||||
import tsparser from "@typescript-eslint/parser";
|
import tsparser from "@typescript-eslint/parser";
|
||||||
import litconf from "eslint-plugin-lit";
|
import litconf from "eslint-plugin-lit";
|
||||||
import sonar from "eslint-plugin-sonarjs";
|
|
||||||
import wcconf from "eslint-plugin-wc";
|
import wcconf from "eslint-plugin-wc";
|
||||||
import globals from "globals";
|
import globals from "globals";
|
||||||
import tseslint from "typescript-eslint";
|
import tseslint from "typescript-eslint";
|
||||||
@ -9,7 +8,9 @@ import tseslint from "typescript-eslint";
|
|||||||
const MAX_DEPTH = 4;
|
const MAX_DEPTH = 4;
|
||||||
const MAX_NESTED_CALLBACKS = 4;
|
const MAX_NESTED_CALLBACKS = 4;
|
||||||
const MAX_PARAMS = 5;
|
const MAX_PARAMS = 5;
|
||||||
const MAX_COGNITIVE_COMPLEXITY = 9;
|
|
||||||
|
// Waiting for SonarJS to be compatible
|
||||||
|
// const MAX_COGNITIVE_COMPLEXITY = 9;
|
||||||
|
|
||||||
const rules = {
|
const rules = {
|
||||||
"accessor-pairs": "error",
|
"accessor-pairs": "error",
|
||||||
@ -128,9 +129,11 @@ const rules = {
|
|||||||
|
|
||||||
"no-unused-vars": "off",
|
"no-unused-vars": "off",
|
||||||
"no-console": ["error", { allow: ["debug", "warn", "error"] }],
|
"no-console": ["error", { allow: ["debug", "warn", "error"] }],
|
||||||
"sonarjs/cognitive-complexity": ["off", MAX_COGNITIVE_COMPLEXITY],
|
// SonarJS is not yet compatible with ESLint 9. Commenting these out
|
||||||
"sonarjs/no-duplicate-string": "off",
|
// until it is.
|
||||||
"sonarjs/no-nested-template-literals": "off",
|
// "sonarjs/cognitive-complexity": ["off", MAX_COGNITIVE_COMPLEXITY],
|
||||||
|
// "sonarjs/no-duplicate-string": "off",
|
||||||
|
// "sonarjs/no-nested-template-literals": "off",
|
||||||
"@typescript-eslint/ban-ts-comment": "off",
|
"@typescript-eslint/ban-ts-comment": "off",
|
||||||
"@typescript-eslint/no-unused-vars": [
|
"@typescript-eslint/no-unused-vars": [
|
||||||
"error",
|
"error",
|
||||||
@ -167,7 +170,7 @@ export default [
|
|||||||
wcconf.configs["flat/recommended"],
|
wcconf.configs["flat/recommended"],
|
||||||
litconf.configs["flat/recommended"],
|
litconf.configs["flat/recommended"],
|
||||||
...tseslint.configs.recommended,
|
...tseslint.configs.recommended,
|
||||||
sonar.configs.recommended,
|
// sonar.configs.recommended,
|
||||||
{
|
{
|
||||||
languageOptions: {
|
languageOptions: {
|
||||||
parser: tsparser,
|
parser: tsparser,
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
import eslint from "@eslint/js";
|
import eslint from "@eslint/js";
|
||||||
import tsparser from "@typescript-eslint/parser";
|
import tsparser from "@typescript-eslint/parser";
|
||||||
import litconf from "eslint-plugin-lit";
|
import litconf from "eslint-plugin-lit";
|
||||||
import sonar from "eslint-plugin-sonarjs";
|
|
||||||
import wcconf from "eslint-plugin-wc";
|
import wcconf from "eslint-plugin-wc";
|
||||||
import globals from "globals";
|
import globals from "globals";
|
||||||
import tseslint from "typescript-eslint";
|
import tseslint from "typescript-eslint";
|
||||||
@ -30,7 +29,7 @@ export default [
|
|||||||
wcconf.configs["flat/recommended"],
|
wcconf.configs["flat/recommended"],
|
||||||
litconf.configs["flat/recommended"],
|
litconf.configs["flat/recommended"],
|
||||||
...tseslint.configs.recommended,
|
...tseslint.configs.recommended,
|
||||||
sonar.configs.recommended,
|
// sonar.configs.recommended,
|
||||||
{
|
{
|
||||||
languageOptions: {
|
languageOptions: {
|
||||||
parser: tsparser,
|
parser: tsparser,
|
||||||
@ -43,9 +42,11 @@ export default [
|
|||||||
rules: {
|
rules: {
|
||||||
"no-unused-vars": "off",
|
"no-unused-vars": "off",
|
||||||
"no-console": ["error", { allow: ["debug", "warn", "error"] }],
|
"no-console": ["error", { allow: ["debug", "warn", "error"] }],
|
||||||
"sonarjs/cognitive-complexity": ["off", 9],
|
// SonarJS is not yet compatible with ESLint 9. Commenting these out
|
||||||
"sonarjs/no-duplicate-string": "off",
|
// until it is.
|
||||||
"sonarjs/no-nested-template-literals": "off",
|
// "sonarjs/cognitive-complexity": ["off", 9],
|
||||||
|
// "sonarjs/no-duplicate-string": "off",
|
||||||
|
// "sonarjs/no-nested-template-literals": "off",
|
||||||
"@typescript-eslint/ban-ts-comment": "off",
|
"@typescript-eslint/ban-ts-comment": "off",
|
||||||
"@typescript-eslint/no-unused-vars": [
|
"@typescript-eslint/no-unused-vars": [
|
||||||
"error",
|
"error",
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
"private": true,
|
"private": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@goauthentik/api": "^2024.6.3-1724414734",
|
"@goauthentik/api": "^2024.8.3-1727449099",
|
||||||
"base64-js": "^1.5.1",
|
"base64-js": "^1.5.1",
|
||||||
"bootstrap": "^4.6.1",
|
"bootstrap": "^4.6.1",
|
||||||
"formdata-polyfill": "^4.0.10",
|
"formdata-polyfill": "^4.0.10",
|
||||||
|
@ -35,7 +35,7 @@ describe("ak-quick-actions-card", () => {
|
|||||||
></ak-quick-actions-card>`,
|
></ak-quick-actions-card>`,
|
||||||
);
|
);
|
||||||
const component = await $("ak-quick-actions-card");
|
const component = await $("ak-quick-actions-card");
|
||||||
const items = await component.$$(">>>.pf-c-list li").getElements();
|
const items = await component.$$(">>>.pf-c-list li");
|
||||||
await expect(Array.from(items).length).toEqual(5);
|
await expect(Array.from(items).length).toEqual(5);
|
||||||
await expect(await component.$(">>>.pf-c-list li:nth-of-type(4)")).toHaveText(
|
await expect(await component.$(">>>.pf-c-list li:nth-of-type(4)")).toHaveText(
|
||||||
"Manage users",
|
"Manage users",
|
||||||
|
@ -39,7 +39,7 @@ export class AkSearchSelectViewDriver {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
const id = await element.getAttribute("data-ouia-component-id");
|
const id = await element.getAttribute("data-ouia-component-id");
|
||||||
const menu = await $(`[data-ouia-component-id="menu-${id}"]`).getElement();
|
const menu = await $(`[data-ouia-component-id="menu-${id}"]`);
|
||||||
return new AkSearchSelectViewDriver(element, menu);
|
return new AkSearchSelectViewDriver(element, menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -52,7 +52,7 @@ export class AkSearchSelectViewDriver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async listElements() {
|
async listElements() {
|
||||||
return await this.menu.$$(">>>li").getElements();
|
return await this.menu.$$(">>>li");
|
||||||
}
|
}
|
||||||
|
|
||||||
async focusOnInput() {
|
async focusOnInput() {
|
||||||
|
@ -21,9 +21,7 @@ describe("Search select: Test Input Field", () => {
|
|||||||
html`<ak-search-select-view .options=${longGoodForYouPairs}> </ak-search-select-view>`,
|
html`<ak-search-select-view .options=${longGoodForYouPairs}> </ak-search-select-view>`,
|
||||||
document.body,
|
document.body,
|
||||||
);
|
);
|
||||||
select = await AkSearchSelectViewDriver.build(
|
select = await AkSearchSelectViewDriver.build(await $("ak-search-select-view"));
|
||||||
await $("ak-search-select-view").getElement(),
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should open the menu when the input is clicked", async () => {
|
it("should open the menu when the input is clicked", async () => {
|
||||||
@ -58,9 +56,7 @@ describe("Search select: Test Input Field", () => {
|
|||||||
expect(await select.open).toBe(false);
|
expect(await select.open).toBe(false);
|
||||||
expect(await select.menuIsVisible()).toBe(false);
|
expect(await select.menuIsVisible()).toBe(false);
|
||||||
await browser.keys("A");
|
await browser.keys("A");
|
||||||
select = await AkSearchSelectViewDriver.build(
|
select = await AkSearchSelectViewDriver.build(await $("ak-search-select-view"));
|
||||||
await $("ak-search-select-view").getElement(),
|
|
||||||
);
|
|
||||||
expect(await select.open).toBe(true);
|
expect(await select.open).toBe(true);
|
||||||
expect(await select.menuIsVisible()).toBe(true);
|
expect(await select.menuIsVisible()).toBe(true);
|
||||||
});
|
});
|
||||||
|
@ -97,9 +97,7 @@ describe("Search select: event driven startup", () => {
|
|||||||
mock?.dispatchEvent(new Event("resolve"));
|
mock?.dispatchEvent(new Event("resolve"));
|
||||||
});
|
});
|
||||||
expect(await $(">>>ak-search-select-loading-indicator")).not.toBeDisplayed();
|
expect(await $(">>>ak-search-select-loading-indicator")).not.toBeDisplayed();
|
||||||
select = await AkSearchSelectViewDriver.build(
|
select = await AkSearchSelectViewDriver.build(await $(">>>ak-search-select-view"));
|
||||||
await $(">>>ak-search-select-view").getElement(),
|
|
||||||
);
|
|
||||||
expect(await select).toBeExisting();
|
expect(await select).toBeExisting();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import replace from "@rollup/plugin-replace";
|
import replace from "@rollup/plugin-replace";
|
||||||
|
import type { Options } from "@wdio/types";
|
||||||
import { cwd } from "process";
|
import { cwd } from "process";
|
||||||
import postcssLit from "rollup-plugin-postcss-lit";
|
import postcssLit from "rollup-plugin-postcss-lit";
|
||||||
import type { UserConfig } from "vite";
|
import type { UserConfig } from "vite";
|
||||||
@ -14,7 +15,7 @@ const maxInstances =
|
|||||||
? 10
|
? 10
|
||||||
: 1;
|
: 1;
|
||||||
|
|
||||||
export const config: WebdriverIO.Config = {
|
export const config: Options.Testrunner = {
|
||||||
//
|
//
|
||||||
// ====================
|
// ====================
|
||||||
// Runner Configuration
|
// Runner Configuration
|
||||||
@ -42,7 +43,13 @@ export const config: WebdriverIO.Config = {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|
||||||
tsConfigPath: "./tsconfig.json",
|
autoCompileOpts: {
|
||||||
|
autoCompile: true,
|
||||||
|
tsNodeOpts: {
|
||||||
|
project: "./tsconfig.json",
|
||||||
|
transpileOnly: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
//
|
//
|
||||||
// ==================
|
// ==================
|
||||||
@ -133,11 +140,11 @@ export const config: WebdriverIO.Config = {
|
|||||||
// baseUrl: 'http://localhost:8080',
|
// baseUrl: 'http://localhost:8080',
|
||||||
//
|
//
|
||||||
// Default timeout for all waitFor* commands.
|
// Default timeout for all waitFor* commands.
|
||||||
waitforTimeout: 10000,
|
waitforTimeout: 12000,
|
||||||
//
|
//
|
||||||
// Default timeout in milliseconds for request
|
// Default timeout in milliseconds for request
|
||||||
// if browser driver or grid doesn't send response
|
// if browser driver or grid doesn't send response
|
||||||
connectionRetryTimeout: 120000,
|
connectionRetryTimeout: 12000,
|
||||||
//
|
//
|
||||||
// Default request retries count
|
// Default request retries count
|
||||||
connectionRetryCount: 3,
|
connectionRetryCount: 3,
|
||||||
|
Reference in New Issue
Block a user