@blocklet/js-sdk 1.16.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs ADDED
@@ -0,0 +1,242 @@
1
+ 'use strict';
2
+
3
+ const constant = require('@abtnode/constant');
4
+ const ufo = require('ufo');
5
+ const Cookie = require('js-cookie');
6
+ const axios = require('axios');
7
+
8
+ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; }
9
+
10
+ const Cookie__default = /*#__PURE__*/_interopDefaultCompat(Cookie);
11
+ const axios__default = /*#__PURE__*/_interopDefaultCompat(axios);
12
+
13
+ var __defProp$1 = Object.defineProperty;
14
+ var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
15
+ var __publicField$1 = (obj, key, value) => {
16
+ __defNormalProp$1(obj, typeof key !== "symbol" ? key + "" : key, value);
17
+ return value;
18
+ };
19
+ class AuthService {
20
+ constructor({ api }) {
21
+ __publicField$1(this, "api");
22
+ this.api = api;
23
+ }
24
+ async getUserPublicInfo({ did }) {
25
+ const { data } = await this.api.get("/api/user", {
26
+ params: { did }
27
+ });
28
+ return data;
29
+ }
30
+ async getUserPrivacyConfig({ did }) {
31
+ const { data } = await this.api.get("/api/user/privacy/config", {
32
+ params: { did }
33
+ });
34
+ return data;
35
+ }
36
+ async saveUserPrivacyConfig(config) {
37
+ const { data } = await this.api.post("/api/user/privacy/config", config);
38
+ return data;
39
+ }
40
+ async getUserNotificationConfig() {
41
+ const { data } = await this.api.get("/api/user/notification/config");
42
+ return data;
43
+ }
44
+ async saveUserNotificationConfig(config) {
45
+ const { data } = await this.api.post("/api/user/notification/config", config);
46
+ return data;
47
+ }
48
+ async testNotificationWebhook(webhook) {
49
+ const { data } = await this.api.put("/api/user/notification/webhook", webhook);
50
+ return data;
51
+ }
52
+ async getProfileUrl({ did, locale }) {
53
+ const url = `${constant.WELLKNOWN_SERVICE_PATH_PREFIX}/user`;
54
+ return ufo.withQuery(url, {
55
+ did,
56
+ locale
57
+ });
58
+ }
59
+ }
60
+
61
+ class TokenService {
62
+ getSessionToken() {
63
+ return Cookie__default.get(constant.SESSION_TOKEN_STORAGE_KEY);
64
+ }
65
+ setSessionToken(value) {
66
+ Cookie__default.set(constant.SESSION_TOKEN_STORAGE_KEY, value);
67
+ }
68
+ removeSessionToken() {
69
+ Cookie__default.remove(constant.SESSION_TOKEN_STORAGE_KEY);
70
+ }
71
+ getRefreshToken() {
72
+ return localStorage.getItem(constant.REFRESH_TOKEN_STORAGE_KEY);
73
+ }
74
+ setRefreshToken(value) {
75
+ localStorage.setItem(constant.REFRESH_TOKEN_STORAGE_KEY, value);
76
+ }
77
+ removeRefreshToken() {
78
+ localStorage.removeItem(constant.REFRESH_TOKEN_STORAGE_KEY);
79
+ }
80
+ }
81
+
82
+ const version = "1.16.22";
83
+
84
+ const sleep = (time = 0) => {
85
+ return new Promise((resolve) => {
86
+ setTimeout(() => {
87
+ resolve();
88
+ }, time);
89
+ });
90
+ };
91
+
92
+ async function sleepForLoading(config, lazyTime) {
93
+ config.metaData.endTime = +/* @__PURE__ */ new Date();
94
+ const { startTime, endTime } = config.metaData;
95
+ const timeDiff = endTime - startTime;
96
+ if (timeDiff < lazyTime)
97
+ await sleep(lazyTime - timeDiff);
98
+ delete config.metaData;
99
+ }
100
+ const createApi = (options = {}, { lazy = false, lazyTime = 300 } = {}) => {
101
+ const instance = axios__default.create({
102
+ ...options,
103
+ headers: {
104
+ ...options.headers,
105
+ "x-blocklet-client-sdk-version": version
106
+ }
107
+ });
108
+ if (lazy) {
109
+ instance.interceptors.request.use(
110
+ (config) => {
111
+ config.metaData = { startTime: +/* @__PURE__ */ new Date() };
112
+ return config;
113
+ },
114
+ (err) => Promise.reject(err)
115
+ );
116
+ instance.interceptors.response.use(
117
+ async (res) => {
118
+ await sleepForLoading(res.config, lazyTime);
119
+ return res;
120
+ },
121
+ async (err) => {
122
+ await sleepForLoading(err.response.config, lazyTime);
123
+ return Promise.reject(err);
124
+ }
125
+ );
126
+ }
127
+ return instance;
128
+ };
129
+
130
+ const baseURL = constant.WELLKNOWN_SERVICE_PATH_PREFIX;
131
+ async function renewRefreshToken(refreshToken) {
132
+ if (!refreshToken) {
133
+ throw new Error("Refresh token not found");
134
+ }
135
+ const refreshApi = createApi({
136
+ baseURL,
137
+ timeout: 10 * 1e3,
138
+ headers: {
139
+ authorization: `Bearer ${encodeURIComponent(refreshToken)}`
140
+ }
141
+ });
142
+ const { data } = await refreshApi.post("api/did/refreshSession");
143
+ return data;
144
+ }
145
+ function createRequest({
146
+ getSessionToken,
147
+ setSessionToken,
148
+ removeSessionToken,
149
+ getRefreshToken,
150
+ setRefreshToken,
151
+ removeRefreshToken,
152
+ onRefreshTokenError,
153
+ onRefreshTokenSuccess
154
+ }, options = {}) {
155
+ let refreshingTokenRequest = null;
156
+ const service = createApi({
157
+ baseURL,
158
+ timeout: 30 * 1e3,
159
+ ...options
160
+ });
161
+ service.interceptors.request.use(
162
+ async (config) => {
163
+ if (!Cookie__default.get(constant.SESSION_TOKEN_STORAGE_KEY)) {
164
+ const token = getSessionToken();
165
+ if (token) {
166
+ config.headers.authorization = `Bearer ${encodeURIComponent(token)}`;
167
+ }
168
+ }
169
+ if (refreshingTokenRequest) {
170
+ await refreshingTokenRequest;
171
+ }
172
+ return config;
173
+ },
174
+ (error) => Promise.reject(error)
175
+ );
176
+ service.interceptors.response.use(
177
+ (response) => response,
178
+ async (error) => {
179
+ const originalRequest = error.config;
180
+ originalRequest.headers = { ...originalRequest?.headers };
181
+ if (error?.response?.status === 401 && !originalRequest._retry) {
182
+ originalRequest._retry = true;
183
+ if (!refreshingTokenRequest) {
184
+ refreshingTokenRequest = renewRefreshToken(getRefreshToken());
185
+ }
186
+ try {
187
+ const tokenData = await refreshingTokenRequest;
188
+ setSessionToken(tokenData.nextToken);
189
+ setRefreshToken(tokenData.nextRefreshToken);
190
+ if (typeof onRefreshTokenSuccess === "function") {
191
+ onRefreshTokenSuccess(tokenData);
192
+ }
193
+ return service(originalRequest);
194
+ } catch (error2) {
195
+ removeSessionToken();
196
+ removeRefreshToken();
197
+ if (typeof onRefreshTokenError === "function") {
198
+ onRefreshTokenError(error2);
199
+ }
200
+ return Promise.reject(error2);
201
+ } finally {
202
+ refreshingTokenRequest = null;
203
+ }
204
+ }
205
+ return Promise.reject(error);
206
+ }
207
+ );
208
+ return service;
209
+ }
210
+
211
+ var __defProp = Object.defineProperty;
212
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
213
+ var __publicField = (obj, key, value) => {
214
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
215
+ return value;
216
+ };
217
+ class BlockletSDK {
218
+ constructor() {
219
+ __publicField(this, "api");
220
+ __publicField(this, "user");
221
+ __publicField(this, "token");
222
+ const tokenService = new TokenService();
223
+ const api = createRequest({
224
+ getSessionToken: tokenService.getSessionToken,
225
+ setSessionToken: tokenService.setSessionToken,
226
+ removeSessionToken: tokenService.removeSessionToken,
227
+ getRefreshToken: tokenService.getRefreshToken,
228
+ setRefreshToken: tokenService.setRefreshToken,
229
+ removeRefreshToken: tokenService.removeRefreshToken,
230
+ onRefreshTokenError: () => {
231
+ console.error("Failed to refresh token");
232
+ },
233
+ onRefreshTokenSuccess: () => {
234
+ }
235
+ });
236
+ this.user = new AuthService({ api });
237
+ this.api = api;
238
+ this.token = tokenService;
239
+ }
240
+ }
241
+
242
+ exports.BlockletSDK = BlockletSDK;
@@ -0,0 +1,55 @@
1
+ import { Axios } from 'axios';
2
+
3
+ type Webhook = {
4
+ type: 'slack' | 'api';
5
+ url: string;
6
+ };
7
+ type NotificationConfig = {
8
+ webhooks?: Webhook[];
9
+ notifications?: {
10
+ email?: boolean;
11
+ wallet?: boolean;
12
+ phone?: boolean;
13
+ };
14
+ };
15
+ type PrivacyConfig = {
16
+ [key: string]: boolean;
17
+ };
18
+ declare class AuthService {
19
+ private api;
20
+ constructor({ api }: {
21
+ api: Axios;
22
+ });
23
+ getUserPublicInfo({ did }: {
24
+ did: string;
25
+ }): Promise<any>;
26
+ getUserPrivacyConfig({ did }: {
27
+ did: string;
28
+ }): Promise<any>;
29
+ saveUserPrivacyConfig(config: PrivacyConfig): Promise<any>;
30
+ getUserNotificationConfig(): Promise<any>;
31
+ saveUserNotificationConfig(config: NotificationConfig): Promise<any>;
32
+ testNotificationWebhook(webhook: Webhook): Promise<any>;
33
+ getProfileUrl({ did, locale }: {
34
+ did: string;
35
+ locale: string;
36
+ }): Promise<string>;
37
+ }
38
+
39
+ declare class TokenService {
40
+ getSessionToken(): string;
41
+ setSessionToken(value: string): void;
42
+ removeSessionToken(): void;
43
+ getRefreshToken(): string;
44
+ setRefreshToken(value: string): void;
45
+ removeRefreshToken(): void;
46
+ }
47
+
48
+ declare class BlockletSDK {
49
+ private api;
50
+ user: AuthService;
51
+ token: TokenService;
52
+ constructor();
53
+ }
54
+
55
+ export { BlockletSDK };
@@ -0,0 +1,55 @@
1
+ import { Axios } from 'axios';
2
+
3
+ type Webhook = {
4
+ type: 'slack' | 'api';
5
+ url: string;
6
+ };
7
+ type NotificationConfig = {
8
+ webhooks?: Webhook[];
9
+ notifications?: {
10
+ email?: boolean;
11
+ wallet?: boolean;
12
+ phone?: boolean;
13
+ };
14
+ };
15
+ type PrivacyConfig = {
16
+ [key: string]: boolean;
17
+ };
18
+ declare class AuthService {
19
+ private api;
20
+ constructor({ api }: {
21
+ api: Axios;
22
+ });
23
+ getUserPublicInfo({ did }: {
24
+ did: string;
25
+ }): Promise<any>;
26
+ getUserPrivacyConfig({ did }: {
27
+ did: string;
28
+ }): Promise<any>;
29
+ saveUserPrivacyConfig(config: PrivacyConfig): Promise<any>;
30
+ getUserNotificationConfig(): Promise<any>;
31
+ saveUserNotificationConfig(config: NotificationConfig): Promise<any>;
32
+ testNotificationWebhook(webhook: Webhook): Promise<any>;
33
+ getProfileUrl({ did, locale }: {
34
+ did: string;
35
+ locale: string;
36
+ }): Promise<string>;
37
+ }
38
+
39
+ declare class TokenService {
40
+ getSessionToken(): string;
41
+ setSessionToken(value: string): void;
42
+ removeSessionToken(): void;
43
+ getRefreshToken(): string;
44
+ setRefreshToken(value: string): void;
45
+ removeRefreshToken(): void;
46
+ }
47
+
48
+ declare class BlockletSDK {
49
+ private api;
50
+ user: AuthService;
51
+ token: TokenService;
52
+ constructor();
53
+ }
54
+
55
+ export { BlockletSDK };
@@ -0,0 +1,55 @@
1
+ import { Axios } from 'axios';
2
+
3
+ type Webhook = {
4
+ type: 'slack' | 'api';
5
+ url: string;
6
+ };
7
+ type NotificationConfig = {
8
+ webhooks?: Webhook[];
9
+ notifications?: {
10
+ email?: boolean;
11
+ wallet?: boolean;
12
+ phone?: boolean;
13
+ };
14
+ };
15
+ type PrivacyConfig = {
16
+ [key: string]: boolean;
17
+ };
18
+ declare class AuthService {
19
+ private api;
20
+ constructor({ api }: {
21
+ api: Axios;
22
+ });
23
+ getUserPublicInfo({ did }: {
24
+ did: string;
25
+ }): Promise<any>;
26
+ getUserPrivacyConfig({ did }: {
27
+ did: string;
28
+ }): Promise<any>;
29
+ saveUserPrivacyConfig(config: PrivacyConfig): Promise<any>;
30
+ getUserNotificationConfig(): Promise<any>;
31
+ saveUserNotificationConfig(config: NotificationConfig): Promise<any>;
32
+ testNotificationWebhook(webhook: Webhook): Promise<any>;
33
+ getProfileUrl({ did, locale }: {
34
+ did: string;
35
+ locale: string;
36
+ }): Promise<string>;
37
+ }
38
+
39
+ declare class TokenService {
40
+ getSessionToken(): string;
41
+ setSessionToken(value: string): void;
42
+ removeSessionToken(): void;
43
+ getRefreshToken(): string;
44
+ setRefreshToken(value: string): void;
45
+ removeRefreshToken(): void;
46
+ }
47
+
48
+ declare class BlockletSDK {
49
+ private api;
50
+ user: AuthService;
51
+ token: TokenService;
52
+ constructor();
53
+ }
54
+
55
+ export { BlockletSDK };
package/dist/index.mjs ADDED
@@ -0,0 +1,235 @@
1
+ import { WELLKNOWN_SERVICE_PATH_PREFIX, SESSION_TOKEN_STORAGE_KEY, REFRESH_TOKEN_STORAGE_KEY } from '@abtnode/constant';
2
+ import { withQuery } from 'ufo';
3
+ import Cookie from 'js-cookie';
4
+ import axios from 'axios';
5
+
6
+ var __defProp$1 = Object.defineProperty;
7
+ var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __publicField$1 = (obj, key, value) => {
9
+ __defNormalProp$1(obj, typeof key !== "symbol" ? key + "" : key, value);
10
+ return value;
11
+ };
12
+ class AuthService {
13
+ constructor({ api }) {
14
+ __publicField$1(this, "api");
15
+ this.api = api;
16
+ }
17
+ async getUserPublicInfo({ did }) {
18
+ const { data } = await this.api.get("/api/user", {
19
+ params: { did }
20
+ });
21
+ return data;
22
+ }
23
+ async getUserPrivacyConfig({ did }) {
24
+ const { data } = await this.api.get("/api/user/privacy/config", {
25
+ params: { did }
26
+ });
27
+ return data;
28
+ }
29
+ async saveUserPrivacyConfig(config) {
30
+ const { data } = await this.api.post("/api/user/privacy/config", config);
31
+ return data;
32
+ }
33
+ async getUserNotificationConfig() {
34
+ const { data } = await this.api.get("/api/user/notification/config");
35
+ return data;
36
+ }
37
+ async saveUserNotificationConfig(config) {
38
+ const { data } = await this.api.post("/api/user/notification/config", config);
39
+ return data;
40
+ }
41
+ async testNotificationWebhook(webhook) {
42
+ const { data } = await this.api.put("/api/user/notification/webhook", webhook);
43
+ return data;
44
+ }
45
+ async getProfileUrl({ did, locale }) {
46
+ const url = `${WELLKNOWN_SERVICE_PATH_PREFIX}/user`;
47
+ return withQuery(url, {
48
+ did,
49
+ locale
50
+ });
51
+ }
52
+ }
53
+
54
+ class TokenService {
55
+ getSessionToken() {
56
+ return Cookie.get(SESSION_TOKEN_STORAGE_KEY);
57
+ }
58
+ setSessionToken(value) {
59
+ Cookie.set(SESSION_TOKEN_STORAGE_KEY, value);
60
+ }
61
+ removeSessionToken() {
62
+ Cookie.remove(SESSION_TOKEN_STORAGE_KEY);
63
+ }
64
+ getRefreshToken() {
65
+ return localStorage.getItem(REFRESH_TOKEN_STORAGE_KEY);
66
+ }
67
+ setRefreshToken(value) {
68
+ localStorage.setItem(REFRESH_TOKEN_STORAGE_KEY, value);
69
+ }
70
+ removeRefreshToken() {
71
+ localStorage.removeItem(REFRESH_TOKEN_STORAGE_KEY);
72
+ }
73
+ }
74
+
75
+ const version = "1.16.22";
76
+
77
+ const sleep = (time = 0) => {
78
+ return new Promise((resolve) => {
79
+ setTimeout(() => {
80
+ resolve();
81
+ }, time);
82
+ });
83
+ };
84
+
85
+ async function sleepForLoading(config, lazyTime) {
86
+ config.metaData.endTime = +/* @__PURE__ */ new Date();
87
+ const { startTime, endTime } = config.metaData;
88
+ const timeDiff = endTime - startTime;
89
+ if (timeDiff < lazyTime)
90
+ await sleep(lazyTime - timeDiff);
91
+ delete config.metaData;
92
+ }
93
+ const createApi = (options = {}, { lazy = false, lazyTime = 300 } = {}) => {
94
+ const instance = axios.create({
95
+ ...options,
96
+ headers: {
97
+ ...options.headers,
98
+ "x-blocklet-client-sdk-version": version
99
+ }
100
+ });
101
+ if (lazy) {
102
+ instance.interceptors.request.use(
103
+ (config) => {
104
+ config.metaData = { startTime: +/* @__PURE__ */ new Date() };
105
+ return config;
106
+ },
107
+ (err) => Promise.reject(err)
108
+ );
109
+ instance.interceptors.response.use(
110
+ async (res) => {
111
+ await sleepForLoading(res.config, lazyTime);
112
+ return res;
113
+ },
114
+ async (err) => {
115
+ await sleepForLoading(err.response.config, lazyTime);
116
+ return Promise.reject(err);
117
+ }
118
+ );
119
+ }
120
+ return instance;
121
+ };
122
+
123
+ const baseURL = WELLKNOWN_SERVICE_PATH_PREFIX;
124
+ async function renewRefreshToken(refreshToken) {
125
+ if (!refreshToken) {
126
+ throw new Error("Refresh token not found");
127
+ }
128
+ const refreshApi = createApi({
129
+ baseURL,
130
+ timeout: 10 * 1e3,
131
+ headers: {
132
+ authorization: `Bearer ${encodeURIComponent(refreshToken)}`
133
+ }
134
+ });
135
+ const { data } = await refreshApi.post("api/did/refreshSession");
136
+ return data;
137
+ }
138
+ function createRequest({
139
+ getSessionToken,
140
+ setSessionToken,
141
+ removeSessionToken,
142
+ getRefreshToken,
143
+ setRefreshToken,
144
+ removeRefreshToken,
145
+ onRefreshTokenError,
146
+ onRefreshTokenSuccess
147
+ }, options = {}) {
148
+ let refreshingTokenRequest = null;
149
+ const service = createApi({
150
+ baseURL,
151
+ timeout: 30 * 1e3,
152
+ ...options
153
+ });
154
+ service.interceptors.request.use(
155
+ async (config) => {
156
+ if (!Cookie.get(SESSION_TOKEN_STORAGE_KEY)) {
157
+ const token = getSessionToken();
158
+ if (token) {
159
+ config.headers.authorization = `Bearer ${encodeURIComponent(token)}`;
160
+ }
161
+ }
162
+ if (refreshingTokenRequest) {
163
+ await refreshingTokenRequest;
164
+ }
165
+ return config;
166
+ },
167
+ (error) => Promise.reject(error)
168
+ );
169
+ service.interceptors.response.use(
170
+ (response) => response,
171
+ async (error) => {
172
+ const originalRequest = error.config;
173
+ originalRequest.headers = { ...originalRequest?.headers };
174
+ if (error?.response?.status === 401 && !originalRequest._retry) {
175
+ originalRequest._retry = true;
176
+ if (!refreshingTokenRequest) {
177
+ refreshingTokenRequest = renewRefreshToken(getRefreshToken());
178
+ }
179
+ try {
180
+ const tokenData = await refreshingTokenRequest;
181
+ setSessionToken(tokenData.nextToken);
182
+ setRefreshToken(tokenData.nextRefreshToken);
183
+ if (typeof onRefreshTokenSuccess === "function") {
184
+ onRefreshTokenSuccess(tokenData);
185
+ }
186
+ return service(originalRequest);
187
+ } catch (error2) {
188
+ removeSessionToken();
189
+ removeRefreshToken();
190
+ if (typeof onRefreshTokenError === "function") {
191
+ onRefreshTokenError(error2);
192
+ }
193
+ return Promise.reject(error2);
194
+ } finally {
195
+ refreshingTokenRequest = null;
196
+ }
197
+ }
198
+ return Promise.reject(error);
199
+ }
200
+ );
201
+ return service;
202
+ }
203
+
204
+ var __defProp = Object.defineProperty;
205
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
206
+ var __publicField = (obj, key, value) => {
207
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
208
+ return value;
209
+ };
210
+ class BlockletSDK {
211
+ constructor() {
212
+ __publicField(this, "api");
213
+ __publicField(this, "user");
214
+ __publicField(this, "token");
215
+ const tokenService = new TokenService();
216
+ const api = createRequest({
217
+ getSessionToken: tokenService.getSessionToken,
218
+ setSessionToken: tokenService.setSessionToken,
219
+ removeSessionToken: tokenService.removeSessionToken,
220
+ getRefreshToken: tokenService.getRefreshToken,
221
+ setRefreshToken: tokenService.setRefreshToken,
222
+ removeRefreshToken: tokenService.removeRefreshToken,
223
+ onRefreshTokenError: () => {
224
+ console.error("Failed to refresh token");
225
+ },
226
+ onRefreshTokenSuccess: () => {
227
+ }
228
+ });
229
+ this.user = new AuthService({ api });
230
+ this.api = api;
231
+ this.token = tokenService;
232
+ }
233
+ }
234
+
235
+ export { BlockletSDK };
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "@blocklet/js-sdk",
3
+ "version": "1.16.22",
4
+ "main": "dist/index.cjs",
5
+ "import": "dist/index.mjs",
6
+ "types": "./dist/index.d.ts",
7
+ "license": "MIT",
8
+ "publishConfig": {
9
+ "access": "public"
10
+ },
11
+ "files": [
12
+ "dist"
13
+ ],
14
+ "bugs": {
15
+ "url": "https://github.com/ArcBlock/blocklet-server/issues"
16
+ },
17
+ "description": "sdk for blocklet development, client only",
18
+ "keywords": [
19
+ "blocklet",
20
+ "client",
21
+ "sdk"
22
+ ],
23
+ "author": "blocklet<blocklet@arcblock.io>",
24
+ "homepage": "https://github.com/ArcBlock/blocklet-server#readme",
25
+ "repository": {
26
+ "type": "git",
27
+ "url": "git+https://github.com/ArcBlock/blocklet-server.git"
28
+ },
29
+ "scripts": {
30
+ "build": "unbuild"
31
+ },
32
+ "dependencies": {
33
+ "@abtnode/constant": "^1.16.22",
34
+ "axios": "^0.27.2",
35
+ "js-cookie": "^3.0.5",
36
+ "ufo": "^1.3.2"
37
+ },
38
+ "devDependencies": {
39
+ "unbuild": "^2.0.0"
40
+ }
41
+ }