@sanvika/auth 2.2.1 → 2.3.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/dist/server.js +122 -0
- package/package.json +4 -3
package/dist/server.js
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
// server.js
|
|
2
|
+
var _saUrl = () => {
|
|
3
|
+
var _a;
|
|
4
|
+
return typeof process !== "undefined" && ((_a = process.env) == null ? void 0 : _a.SA_URL) || "https://accounts.sanvikaproduction.com";
|
|
5
|
+
};
|
|
6
|
+
var _serviceKey = () => {
|
|
7
|
+
var _a;
|
|
8
|
+
return typeof process !== "undefined" && ((_a = process.env) == null ? void 0 : _a.AUTH_SERVICE_KEY) || "";
|
|
9
|
+
};
|
|
10
|
+
var _s2sHeaders = () => ({
|
|
11
|
+
"Content-Type": "application/json",
|
|
12
|
+
..._serviceKey() ? { "x-service-key": _serviceKey() } : {}
|
|
13
|
+
});
|
|
14
|
+
async function verifySAToken(request) {
|
|
15
|
+
try {
|
|
16
|
+
const auth = request.headers.get("authorization");
|
|
17
|
+
if (!(auth == null ? void 0 : auth.startsWith("Bearer "))) return null;
|
|
18
|
+
const res = await fetch(`${_saUrl()}/api/auth/verify-token`, {
|
|
19
|
+
method: "GET",
|
|
20
|
+
headers: { Authorization: auth }
|
|
21
|
+
});
|
|
22
|
+
if (!res.ok) return null;
|
|
23
|
+
const json = await res.json();
|
|
24
|
+
return (json == null ? void 0 : json.success) ? json.payload : null;
|
|
25
|
+
} catch {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
async function extractSAUid(request) {
|
|
30
|
+
const payload = await verifySAToken(request);
|
|
31
|
+
return (payload == null ? void 0 : payload.sub) || null;
|
|
32
|
+
}
|
|
33
|
+
async function getUserFromSA(uid) {
|
|
34
|
+
if (!uid) return null;
|
|
35
|
+
try {
|
|
36
|
+
const res = await fetch(`${_saUrl()}/api/user/profile?uid=${uid}`, {
|
|
37
|
+
headers: _s2sHeaders(),
|
|
38
|
+
signal: AbortSignal.timeout(5e3)
|
|
39
|
+
});
|
|
40
|
+
if (!res.ok) return null;
|
|
41
|
+
const data = await res.json();
|
|
42
|
+
return data.success ? data.data : null;
|
|
43
|
+
} catch {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
async function getUserLocationFromSA(uid) {
|
|
48
|
+
if (!uid) return null;
|
|
49
|
+
try {
|
|
50
|
+
const res = await fetch(`${_saUrl()}/api/location?uid=${uid}`, {
|
|
51
|
+
headers: _s2sHeaders(),
|
|
52
|
+
signal: AbortSignal.timeout(5e3)
|
|
53
|
+
});
|
|
54
|
+
if (!res.ok) return null;
|
|
55
|
+
const data = await res.json();
|
|
56
|
+
return data.success ? data.data : null;
|
|
57
|
+
} catch {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
async function getUserByMobileFromSA(mobile, authToken = "") {
|
|
62
|
+
var _a;
|
|
63
|
+
if (!mobile) return null;
|
|
64
|
+
try {
|
|
65
|
+
const headers = {
|
|
66
|
+
..._s2sHeaders(),
|
|
67
|
+
...authToken ? { Authorization: `Bearer ${authToken}` } : {}
|
|
68
|
+
};
|
|
69
|
+
const res = await fetch(
|
|
70
|
+
`${_saUrl()}/api/admin/users?search=${encodeURIComponent(mobile)}&limit=1`,
|
|
71
|
+
{ headers, signal: AbortSignal.timeout(5e3) }
|
|
72
|
+
);
|
|
73
|
+
if (!res.ok) return null;
|
|
74
|
+
const data = await res.json();
|
|
75
|
+
return data.success && ((_a = data.users) == null ? void 0 : _a.length) > 0 ? data.users[0] : null;
|
|
76
|
+
} catch {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
async function batchGetUsersFromSA(uids) {
|
|
81
|
+
const results = /* @__PURE__ */ new Map();
|
|
82
|
+
const batchSize = 10;
|
|
83
|
+
for (let i = 0; i < uids.length; i += batchSize) {
|
|
84
|
+
const batch = uids.slice(i, i + batchSize);
|
|
85
|
+
await Promise.all(
|
|
86
|
+
batch.map(async (uid) => {
|
|
87
|
+
const user = await getUserFromSA(uid);
|
|
88
|
+
if (user) results.set(uid, user);
|
|
89
|
+
})
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
return results;
|
|
93
|
+
}
|
|
94
|
+
async function listUsersFromSA({ page = 1, limit = 20, search = "", authToken = "" } = {}) {
|
|
95
|
+
const empty = { users: [], pagination: { page, limit, total: 0, pages: 0 } };
|
|
96
|
+
try {
|
|
97
|
+
const params = new URLSearchParams({ page: String(page), limit: String(limit) });
|
|
98
|
+
if (search) params.set("search", search);
|
|
99
|
+
const headers = {
|
|
100
|
+
..._s2sHeaders(),
|
|
101
|
+
...authToken ? { Authorization: `Bearer ${authToken}` } : {}
|
|
102
|
+
};
|
|
103
|
+
const res = await fetch(`${_saUrl()}/api/admin/users?${params}`, {
|
|
104
|
+
headers,
|
|
105
|
+
signal: AbortSignal.timeout(8e3)
|
|
106
|
+
});
|
|
107
|
+
if (!res.ok) return empty;
|
|
108
|
+
const data = await res.json();
|
|
109
|
+
return data.success ? { users: data.users || [], pagination: data.pagination || empty.pagination } : empty;
|
|
110
|
+
} catch {
|
|
111
|
+
return empty;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
export {
|
|
115
|
+
batchGetUsersFromSA,
|
|
116
|
+
extractSAUid,
|
|
117
|
+
getUserByMobileFromSA,
|
|
118
|
+
getUserFromSA,
|
|
119
|
+
getUserLocationFromSA,
|
|
120
|
+
listUsersFromSA,
|
|
121
|
+
verifySAToken
|
|
122
|
+
};
|
package/package.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sanvika/auth",
|
|
3
|
-
"version": "2.
|
|
4
|
-
"description": "Sanvika Auth SDK — React components
|
|
3
|
+
"version": "2.3.0",
|
|
4
|
+
"description": "Sanvika Auth SDK — React components/hooks + server-side token verification and user proxy",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"module": "dist/index.js",
|
|
8
8
|
"exports": {
|
|
9
|
-
".": "./dist/index.js"
|
|
9
|
+
".": "./dist/index.js",
|
|
10
|
+
"./server": "./dist/server.js"
|
|
10
11
|
},
|
|
11
12
|
"files": [
|
|
12
13
|
"dist"
|