@powerhousedao/reactor-api 4.1.0-staging.1 → 5.0.0-staging.2
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/src/graphql/drive/index.d.ts.map +1 -1
- package/dist/src/graphql/drive/index.js +16 -8
- package/dist/src/graphql/drive/index.js.map +1 -1
- package/dist/src/graphql/graphql-manager.d.ts.map +1 -1
- package/dist/src/graphql/graphql-manager.js +42 -2
- package/dist/src/graphql/graphql-manager.js.map +1 -1
- package/dist/src/graphql/reactor/index.d.ts +5 -0
- package/dist/src/graphql/reactor/index.d.ts.map +1 -0
- package/dist/src/graphql/reactor/index.js +5 -0
- package/dist/src/graphql/reactor/index.js.map +1 -0
- package/dist/src/packages/package-manager.js.map +1 -1
- package/dist/src/packages/util.d.ts.map +1 -1
- package/dist/src/packages/util.js +8 -3
- package/dist/src/packages/util.js.map +1 -1
- package/dist/src/server.d.ts.map +1 -1
- package/dist/src/server.js +19 -58
- package/dist/src/server.js.map +1 -1
- package/dist/src/services/auth.service.d.ts +64 -0
- package/dist/src/services/auth.service.d.ts.map +1 -0
- package/dist/src/services/auth.service.js +154 -0
- package/dist/src/services/auth.service.js.map +1 -0
- package/dist/tsconfig.lib.tsbuildinfo +1 -1
- package/package.json +6 -6
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { verifyAuthBearerToken } from "@renown/sdk";
|
|
2
|
+
export class AuthService {
|
|
3
|
+
config;
|
|
4
|
+
constructor(config) {
|
|
5
|
+
this.config = config;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Middleware function to authenticate requests
|
|
9
|
+
*/
|
|
10
|
+
async authenticate(req, res, next) {
|
|
11
|
+
if (!this.config.enabled ||
|
|
12
|
+
req.method === "OPTIONS" ||
|
|
13
|
+
req.method === "GET") {
|
|
14
|
+
next();
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
// Set auth lists on request
|
|
18
|
+
req.admins = this.config.admins;
|
|
19
|
+
req.users = this.config.users;
|
|
20
|
+
req.guests = this.config.guests;
|
|
21
|
+
req.auth_enabled = this.config.enabled;
|
|
22
|
+
const token = req.headers.authorization?.split(" ")[1];
|
|
23
|
+
if (!token) {
|
|
24
|
+
res.status(400).json({ error: "Missing authorization token" });
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
try {
|
|
28
|
+
const verified = (await this.verifyToken(token));
|
|
29
|
+
if (!verified) {
|
|
30
|
+
res.status(401).json({ error: "Verification failed" });
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const user = this.extractUserFromVerification(verified);
|
|
34
|
+
if (!user) {
|
|
35
|
+
res.status(401).json({ error: "Missing credentials" });
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
// Verify that the credentials still exist on the Renown API
|
|
39
|
+
const credentialExists = await this.verifyCredentialExists(user.address, user.chainId, verified.issuer);
|
|
40
|
+
if (!credentialExists) {
|
|
41
|
+
res.status(401).json({ error: "Credentials no longer valid" });
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
req.user = user;
|
|
45
|
+
// Check if user is in allowed lists
|
|
46
|
+
if (!this.isUserAllowed(user.address)) {
|
|
47
|
+
res.status(403).json({ error: "Forbidden" });
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
next();
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
res.status(401).json({ error: "Authentication failed" });
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Verify the auth bearer token
|
|
58
|
+
*/
|
|
59
|
+
async verifyToken(token) {
|
|
60
|
+
return await verifyAuthBearerToken(token);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Extract user information from verification result
|
|
64
|
+
*/
|
|
65
|
+
extractUserFromVerification(verified) {
|
|
66
|
+
if (!verified)
|
|
67
|
+
return null;
|
|
68
|
+
try {
|
|
69
|
+
const { address, chainId, networkId } = verified.verifiableCredential?.credentialSubject || {};
|
|
70
|
+
if (!address || !chainId || !networkId) {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
address,
|
|
75
|
+
chainId,
|
|
76
|
+
networkId,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Check if user address is in allowed lists
|
|
85
|
+
*/
|
|
86
|
+
isUserAllowed(address) {
|
|
87
|
+
const all = [
|
|
88
|
+
...this.config.admins,
|
|
89
|
+
...this.config.users,
|
|
90
|
+
...this.config.guests,
|
|
91
|
+
];
|
|
92
|
+
return all.includes(address.toLocaleLowerCase());
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Get additional context fields for GraphQL
|
|
96
|
+
*/
|
|
97
|
+
getAdditionalContextFields() {
|
|
98
|
+
if (!this.config.enabled) {
|
|
99
|
+
return {
|
|
100
|
+
isGuest: (address) => true,
|
|
101
|
+
isUser: (address) => true,
|
|
102
|
+
isAdmin: (address) => true,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
return {
|
|
106
|
+
isGuest: (address) => this.config.enabled &&
|
|
107
|
+
this.config.guests?.includes(address.toLowerCase()),
|
|
108
|
+
isUser: (address) => this.config.enabled &&
|
|
109
|
+
this.config.users?.includes(address.toLowerCase()),
|
|
110
|
+
isAdmin: (address) => this.config.enabled &&
|
|
111
|
+
this.config.admins?.includes(address.toLowerCase()),
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Get user context for GraphQL
|
|
116
|
+
*/
|
|
117
|
+
getUserContext(user) {
|
|
118
|
+
if (!user)
|
|
119
|
+
return {};
|
|
120
|
+
return {
|
|
121
|
+
user: {
|
|
122
|
+
address: user.address.toLowerCase(),
|
|
123
|
+
chainId: user.chainId,
|
|
124
|
+
networkId: user.networkId,
|
|
125
|
+
},
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Verify that the credential still exists on the Renown API
|
|
130
|
+
*/
|
|
131
|
+
async verifyCredentialExists(address, chainId, connectId) {
|
|
132
|
+
const url = `https://auth.renown.id/api/auth/credential?address=${address}&chainId=${chainId}&connectId=${connectId}`;
|
|
133
|
+
try {
|
|
134
|
+
const response = await fetch(url, {
|
|
135
|
+
method: "GET",
|
|
136
|
+
});
|
|
137
|
+
const body = (await response.json());
|
|
138
|
+
const credential = body.credential;
|
|
139
|
+
const connectIdVerfied = credential.credentialSubject.id.id;
|
|
140
|
+
const addressVerfied = credential.issuer.id.split(":")[4];
|
|
141
|
+
const chainIdVerfied = credential.issuer.id.split(":")[3];
|
|
142
|
+
if (response.status !== 200) {
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
return (connectIdVerfied === connectId &&
|
|
146
|
+
addressVerfied.toLocaleLowerCase() === address.toLocaleLowerCase() &&
|
|
147
|
+
chainIdVerfied === chainId.toString());
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=auth.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.service.js","sourceRoot":"","sources":["../../../src/services/auth.service.ts"],"names":[],"mappings":"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"}
|