Skip to content
This repository was archived by the owner on Mar 25, 2025. It is now read-only.

Commit 78c59cc

Browse files
committed
add global axios monitoring
1 parent 5314ff1 commit 78c59cc

File tree

3 files changed

+34
-4
lines changed

3 files changed

+34
-4
lines changed

src/axios.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,6 @@ export function observeAxiosNotWebContext(
280280
}
281281
export function observeAxiosGlobal(
282282
axiosInstance: AxiosInstance,
283-
urlWildcard: string | undefined = undefined,
284283
redactHeaders: string[] = [],
285284
redactRequestBody: string[] = [],
286285
redactResponseBody: string[] = [],
@@ -289,7 +288,7 @@ export function observeAxiosGlobal(
289288
axiosInstance.interceptors.request.use(onRequest, onRequestError)
290289
axiosInstance.interceptors.response.use(
291290
onResponse(
292-
urlWildcard,
291+
undefined,
293292
redactHeaders,
294293
redactRequestBody,
295294
redactResponseBody,
@@ -298,7 +297,7 @@ export function observeAxiosGlobal(
298297
client
299298
),
300299
onResponseError(
301-
urlWildcard,
300+
undefined,
302301
redactHeaders,
303302
redactRequestBody,
304303
redactResponseBody,

src/middleware/apitoolkit_middleware.ts

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import { v4 as uuidv4 } from 'uuid'
88
import { buildPayload } from 'apitoolkit-js'
99
import { APIToolkitConfig, ClientMetadata, Payload } from '../types.js'
1010
import config from '@adonisjs/core/services/config'
11+
import { observeAxiosGlobal, observeAxiosNotWebContext } from '../axios.js'
12+
import { AxiosStatic } from 'axios'
1113

1214
const defaultConfig = {
1315
rootURL: 'https://app.apitoolkit.io',
@@ -39,6 +41,15 @@ export default class APIToolkitMiddleware {
3941
console.log('apitoolkit: initialized successfully')
4042
console.dir(pubsubClient)
4143
}
44+
if (configs.monitorAxios) {
45+
observeAxiosGlobal(
46+
configs.monitorAxios,
47+
configs.redactHeaders,
48+
configs.redactRequestBody,
49+
configs.redactResponseBody,
50+
this
51+
)
52+
}
4253

4354
this.#topicName = topic_id
4455
this.#pubsub = pubsubClient
@@ -78,6 +89,25 @@ export default class APIToolkitMiddleware {
7889
await this.#pubsub?.close()
7990
}
8091

92+
public getConfig() {
93+
return { project_id: this.#project_id, config: this.#config }
94+
}
95+
public observeAxios(
96+
axios: AxiosStatic,
97+
urlWildcard: string | undefined,
98+
redactHeaders: string[],
99+
redactRequestBody: string[],
100+
redactResponseBody: string[]
101+
) {
102+
return observeAxiosNotWebContext(
103+
axios,
104+
urlWildcard,
105+
redactHeaders,
106+
redactRequestBody,
107+
redactResponseBody,
108+
this
109+
)
110+
}
81111
getClientMetadata(rootURL: string, apiKey: string) {
82112
const resp = fetch(rootURL + '/api/client_metadata', {
83113
method: 'GET',
@@ -107,7 +137,6 @@ export default class APIToolkitMiddleware {
107137
project_id: this.#project_id,
108138
}
109139
}
110-
111140
const reqBody = this.getSafeBody(request.body())
112141
await next()
113142
if (this.#config?.debug) {

src/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { NextFn } from '@adonisjs/core/types/http'
22
import APIToolkitMiddleware from './middleware/apitoolkit_middleware.js'
33
import { HttpContext } from '@adonisjs/core/http'
4+
import { AxiosInstance } from 'axios'
45

56
declare module '@adonisjs/core/http' {
67
interface HttpContext {
@@ -70,6 +71,7 @@ export type APIToolkitConfig = {
7071
serviceVersion?: string
7172
tags?: string[]
7273
disable?: boolean
74+
monitorAxios?: AxiosInstance
7375
}
7476

7577
export interface APIToolkitMiddlewareInstance {

0 commit comments

Comments
 (0)