@vectry/react
Version:
React integration for Vectry Analytics. Includes Context, Hooks, and transport for browser-based event tracking.
85 lines (81 loc) • 1.96 kB
JavaScript
// src/sdk/Vectry.ts
import {
defaultConfig,
setRuntimeConfig,
VectryCore
} from "@vectry/js-core";
// src/transport/HttpTransport.ts
import axios from "axios";
var HttpTransport = class {
constructor(config) {
this.client = axios.create({
baseURL: config.baseUrl,
timeout: 1e4,
headers: {
"Content-Type": "application/json",
Accept: "application/json"
}
});
}
async request(method, path, payload) {
const config = {
method,
url: path
};
if (["GET", "DELETE"].includes(method) && payload) {
config.params = payload;
} else if (payload) {
config.data = payload;
}
const response = await this.client.request(config);
return response.data;
}
async get(path, payload) {
return this.request("GET", path, payload);
}
async post(path, payload) {
return this.request("POST", path, payload);
}
async put(path, payload) {
return this.request("PUT", path, payload);
}
async patch(path, payload) {
return this.request("PATCH", path, payload);
}
async delete(path, payload) {
return this.request("DELETE", path, payload);
}
};
// src/context/DefaultContextProvider.ts
var DefaultContextProvider = async () => {
return {
veripass_username: "system",
app_id: "react-app",
session_id: `sess-${Date.now().toString(36)}`
};
};
// src/sdk/Vectry.ts
var Vectry = class extends VectryCore {
constructor(config) {
const mergedConfig = {
...defaultConfig,
...config,
transport: config.transport ?? new HttpTransport(config),
contextProvider: config.contextProvider ?? DefaultContextProvider
};
setRuntimeConfig(mergedConfig);
super({
transport: mergedConfig.transport,
organizationId: mergedConfig.organizationId
});
}
};
function vectry(config) {
return new Vectry(config);
}
export {
DefaultContextProvider,
HttpTransport,
Vectry,
vectry
};