This is an automated email from the ASF dual-hosted git repository.

hsluoyz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/casbin-casbin.js.git


The following commit(s) were added to refs/heads/master by this push:
     new 30254d3  feat: replace axios with fetch
30254d3 is described below

commit 30254d3586b8fd05515ebaf9c4cae158ebe55e13
Author: Yang Luo <[email protected]>
AuthorDate: Sat May 23 01:19:50 2026 +0800

    feat: replace axios with fetch
---
 jest.environment.js        | 13 +++++++++++++
 jestconfig.json            |  2 +-
 package.json               |  1 -
 src/Authorizer.ts          | 11 +++++++----
 src/__test__/index.test.ts | 13 -------------
 src/__test__/server.ts     | 10 +++++++++-
 yarn.lock                  |  9 +--------
 7 files changed, 31 insertions(+), 28 deletions(-)

diff --git a/jest.environment.js b/jest.environment.js
new file mode 100644
index 0000000..61f2094
--- /dev/null
+++ b/jest.environment.js
@@ -0,0 +1,13 @@
+const JsDOMEnvironment = require('jest-environment-jsdom').default;
+
+class FetchEnvironment extends JsDOMEnvironment {
+    async setup() {
+        await super.setup();
+        this.global.fetch = fetch;
+        this.global.Headers = Headers;
+        this.global.Request = Request;
+        this.global.Response = Response;
+    }
+}
+
+module.exports = FetchEnvironment;
diff --git a/jestconfig.json b/jestconfig.json
index 51bcb5e..f62c8b4 100644
--- a/jestconfig.json
+++ b/jestconfig.json
@@ -2,7 +2,7 @@
     "transform": {
         "^.+\\.(t|j)sx?$": "ts-jest"
     },
-    "testEnvironment": "jsdom",
+    "testEnvironment": "./jest.environment.js",
     "testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$",
     "moduleFileExtensions": ["ts", "tsx", "js", "jsx", "json", "node"],
     "coveragePathIgnorePatterns": [
diff --git a/package.json b/package.json
index 67293da..f8f4670 100644
--- a/package.json
+++ b/package.json
@@ -54,7 +54,6 @@
   "dependencies": {
     "@babel/core": "^7.14.6",
     "@babel/preset-env": "^7.14.5",
-    "axios": "^0.21.1",
     "babel-loader": ">=8.1.0",
     "casbin-core": "^0.0.0-beta.2",
     "js-cookie": "^2.2.1"
diff --git a/src/Authorizer.ts b/src/Authorizer.ts
index 85e5556..a533a49 100644
--- a/src/Authorizer.ts
+++ b/src/Authorizer.ts
@@ -1,4 +1,3 @@
-import axios from 'axios';
 import * as casbin from 'casbin-core';
 import Permission from './Permission';
 import { StringKV } from './types';
@@ -111,10 +110,14 @@ export class Authorizer {
         if (this.endpoint === undefined || this.endpoint === null) {
             throw Error("Endpoint is null or not specified.");
         }
-        const resp = await 
axios.get<BaseResponse>(`${this.endpoint}?subject=${this.user}`, {
-            headers: this.requestHeaders,
+        const resp = await fetch(`${this.endpoint}?subject=${this.user}`, {
+            headers: this.requestHeaders as unknown as HeadersInit,
         });
-        return resp.data.data;
+        if (!resp.ok) {
+            throw new Error(`HTTP error: ${resp.status}`);
+        }
+        const body: BaseResponse = await resp.json();
+        return body.data;
     }
 
     /**
diff --git a/src/__test__/index.test.ts b/src/__test__/index.test.ts
index 1a73dba..ce8dbe0 100644
--- a/src/__test__/index.test.ts
+++ b/src/__test__/index.test.ts
@@ -1,27 +1,14 @@
-import axios from 'axios';
 import { Authorizer } from '../index';
 import { basicModelStr } from './models';
 import { basicPolicies } from './policies';
 import { removeLocalStorage } from '../Cache';
 import TestServer  from './server';
 
-jest.mock('axios');
-const mockedAxios = axios as jest.Mocked<typeof axios>;
-
 test('Mock functions', () => {
-    const respObj = {
-        m: basicModelStr,
-        p: basicPolicies
-    }
-    const resp = { data: { message: 'ok', data: JSON.stringify(respObj)}};
-    // Specify the returned data of the mockedAxios once
-    mockedAxios.get.mockImplementationOnce(() => Promise.resolve(resp));
     // TODO: Use mock function to get response object
     // const authorizer = new Authorizer('http://localhost:4000');
     // authorizer.setUser('alice');
     // expect(authorizer.getPermission()).toMatchObject(respObj);
-
-    // 
expect(mockedAxios.get('http://localhost:4000/api/permissions?subject=alice')).toMatchObject(respObj);
 });
 
 async function check(authorizer: Authorizer) {
diff --git a/src/__test__/server.ts b/src/__test__/server.ts
index c88bebd..090e559 100644
--- a/src/__test__/server.ts
+++ b/src/__test__/server.ts
@@ -2,7 +2,8 @@ import * as http from "http";
 import express from 'express';
 import { newEnforcer, Enforcer, Model } from 'casbin-core';
 import { StringKV } from '../types';
-import { basicModelStr } from './models'
+import { basicModelStr } from './models';
+import { basicPolicies } from './policies';
 
 class CasbinService {
     private enforcer! : Enforcer;
@@ -11,6 +12,13 @@ class CasbinService {
         // RBAC API doesn't support RBAC w/ domain.
         // this.enforcer = await 
newEnforcer('./src/__test__/example/rbac_with_domains_model.conf', 
'./src/__test__/example/rbac_with_domains_policy.csv');
         this.enforcer = await newEnforcer(new Model(basicModelStr));
+        for (const policy of basicPolicies) {
+            const arr = policy.map(v => v.trim());
+            const pType = arr.shift();
+            if (pType === 'p') {
+                await this.enforcer.addPolicy(...arr);
+            }
+        }
     }
     
     public async getEnforcerConfig(sub: string): Promise<string> {
diff --git a/yarn.lock b/yarn.lock
index 1994c94..fe68c5c 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2099,13 +2099,6 @@ await-lock@^2.0.1:
   resolved 
"https://registry.yarnpkg.com/await-lock/-/await-lock-2.2.2.tgz#a95a9b269bfd2f69d22b17a321686f551152bcef";
   integrity 
sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw==
 
-axios@^0.21.1:
-  version "0.21.4"
-  resolved 
"https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575";
-  integrity 
sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==
-  dependencies:
-    follow-redirects "^1.14.0"
-
 babel-jest@^29.7.0:
   version "29.7.0"
   resolved 
"https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5";
@@ -3802,7 +3795,7 @@ flatted@^3.2.9:
   resolved 
"https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358";
   integrity 
sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==
 
-follow-redirects@^1.0.0, follow-redirects@^1.14.0:
+follow-redirects@^1.0.0:
   version "1.15.11"
   resolved 
"https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340";
   integrity 
sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to