@apowerb/apowerb-sdk 0.0.0

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/src/config.js ADDED
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Configuration du client d'API th2agent.
3
+ *
4
+ * Avant, `api.js` codait `const BASE = ""` : chaque appel partait en
5
+ * relatif vers `/api/...`, ce qui suppose d'être servi par l'application
6
+ * Next qui proxie ces routes. La couche d'accès au backend était donc
7
+ * inutilisable ailleurs.
8
+ *
9
+ * Tout passe désormais par ce module. Les valeurs par défaut reproduisent
10
+ * exactement l'ancien comportement — base vide, jeton dans localStorage,
11
+ * évènement `auth:unauthorized` sur le window — donc l'application Next
12
+ * ne change pas d'un octet. Un autre consommateur appelle
13
+ * `configureClient()` et pointe le backend de son choix.
14
+ */
15
+
16
+ import { authStorage } from "./authStorage.js";
17
+
18
+ const DEFAULTS = Object.freeze({
19
+ // Vide = requêtes relatives, comme historiquement.
20
+ baseUrl: "",
21
+ storage: authStorage,
22
+ // Laissé configurable pour les consommateurs sans DOM (Node, CLI, tests).
23
+ onUnauthorized: defaultOnUnauthorized,
24
+ });
25
+
26
+ let config = { ...DEFAULTS };
27
+
28
+ function defaultOnUnauthorized() {
29
+ // Le front écoute cet évènement pour rediriger vers la page de connexion.
30
+ // Hors navigateur, il n'y a rien à notifier : on ne casse pas pour autant.
31
+ if (typeof window !== "undefined" && typeof CustomEvent !== "undefined") {
32
+ window.dispatchEvent(new CustomEvent("auth:unauthorized"));
33
+ }
34
+ }
35
+
36
+ /**
37
+ * Configure le client. Les clés omises gardent leur valeur courante.
38
+ *
39
+ * @param {object} options
40
+ * @param {string} [options.baseUrl] Racine du backend th2agent, ex.
41
+ * `https://agent.example.com`. Vide = relatif.
42
+ * @param {object} [options.storage] Doit exposer `getToken()`, et
43
+ * idéalement `setToken()` / `clear()`.
44
+ * @param {Function} [options.onUnauthorized] Appelé sur un 401 définitif.
45
+ */
46
+ export function configureClient(options = {}) {
47
+ config = { ...config, ...options };
48
+ return getClientConfig();
49
+ }
50
+
51
+ export function getClientConfig() {
52
+ return { ...config };
53
+ }
54
+
55
+ /** Rétablit les valeurs par défaut — utile entre deux tests. */
56
+ export function resetClientConfig() {
57
+ config = { ...DEFAULTS };
58
+ }
59
+
60
+ /**
61
+ * Construit l'URL absolue d'un chemin d'API.
62
+ *
63
+ * Le slash final éventuel de `baseUrl` est retiré : `.../` + `/api/x`
64
+ * donnerait `//api/x`, que certains reverse proxies traitent comme un
65
+ * hôte protocole-relatif.
66
+ */
67
+ export function apiUrl(path) {
68
+ const base = config.baseUrl || "";
69
+ return base ? `${base.replace(/\/+$/, "")}${path}` : path;
70
+ }
71
+
72
+ export function getAuthToken() {
73
+ return config.storage?.getToken?.() ?? null;
74
+ }
75
+
76
+ export function setAuthToken(token) {
77
+ config.storage?.setToken?.(token);
78
+ }
79
+
80
+ export function clearAuth() {
81
+ config.storage?.clear?.();
82
+ }
83
+
84
+ export function notifyUnauthorized() {
85
+ config.onUnauthorized?.();
86
+ }
package/src/index.js ADDED
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Point d'entrée du client d'API th2agent.
3
+ *
4
+ * Usage hors de l'application Next :
5
+ *
6
+ * import { configureClient, listAgents } from "@apowerb/apowerb-sdk";
7
+ *
8
+ * configureClient({
9
+ * baseUrl: "https://agent.example.com",
10
+ * storage: { getToken: () => process.env.TH2AGENT_TOKEN },
11
+ * });
12
+ *
13
+ * const agents = await listAgents();
14
+ *
15
+ * Sans appel à `configureClient`, le comportement est celui d'origine :
16
+ * requêtes relatives et jeton lu dans localStorage.
17
+ */
18
+
19
+ export * from "./api.js";
20
+ export * from "./authStorage.js";
21
+ export {
22
+ apiUrl,
23
+ configureClient,
24
+ getClientConfig,
25
+ resetClientConfig,
26
+ } from "./config.js";