@powerhousedao/renown-package 0.0.3 → 0.0.4
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/document-models/renown-credential/gen/document-model.js +96 -10
- package/dist/document-models/renown-credential/gen/manager/actions.d.ts +14 -2
- package/dist/document-models/renown-credential/gen/manager/creators.d.ts +5 -2
- package/dist/document-models/renown-credential/gen/manager/creators.js +4 -1
- package/dist/document-models/renown-credential/gen/manager/error.d.ts +45 -1
- package/dist/document-models/renown-credential/gen/manager/error.js +53 -1
- package/dist/document-models/renown-credential/gen/manager/object.d.ts +5 -2
- package/dist/document-models/renown-credential/gen/manager/object.js +10 -1
- package/dist/document-models/renown-credential/gen/manager/operations.d.ts +4 -1
- package/dist/document-models/renown-credential/gen/object.d.ts +1 -1
- package/dist/document-models/renown-credential/gen/ph-factories.js +11 -5
- package/dist/document-models/renown-credential/gen/reducer.d.ts +1 -1
- package/dist/document-models/renown-credential/gen/reducer.js +12 -0
- package/dist/document-models/renown-credential/gen/schema/types.d.ts +43 -12
- package/dist/document-models/renown-credential/gen/schema/zod.d.ts +5 -1
- package/dist/document-models/renown-credential/gen/schema/zod.js +48 -10
- package/dist/document-models/renown-credential/gen/utils.d.ts +1 -1
- package/dist/document-models/renown-credential/gen/utils.js +11 -5
- package/dist/document-models/renown-credential/index.d.ts +3 -0
- package/dist/document-models/renown-credential/src/reducers/manager.js +69 -15
- package/dist/document-models/renown-user/gen/object.d.ts +1 -1
- package/dist/document-models/renown-user/gen/profile/object.d.ts +1 -1
- package/dist/document-models/renown-user/gen/reducer.d.ts +1 -1
- package/dist/document-models/renown-user/gen/utils.d.ts +1 -1
- package/dist/processors/index.d.ts +1 -0
- package/dist/processors/index.js +1 -0
- package/dist/processors/renown-credential/index.d.ts +9 -0
- package/dist/processors/renown-credential/index.js +129 -0
- package/dist/processors/renown-credential/migrations.d.ts +3 -0
- package/dist/processors/renown-credential/migrations.js +77 -0
- package/dist/processors/renown-credential/schema.d.ts +27 -0
- package/dist/processors/renown-credential/schema.js +1 -0
- package/dist/processors/renown-user/migrations.js +2 -2
- package/dist/style.css +15 -12
- package/dist/subgraphs/renown-credential/resolvers.js +36 -0
- package/dist/subgraphs/renown-credential/schema.js +62 -12
- package/dist/subgraphs/renown-read-model/resolvers.js +99 -76
- package/dist/subgraphs/renown-read-model/schema.js +48 -15
- package/package.json +31 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { RenownUserProcessor } from "../../processors/renown-user/index.js";
|
|
2
|
-
|
|
2
|
+
import { RenownCredentialProcessor } from "../../processors/renown-credential/index.js";
|
|
3
|
+
const mapToUser = (user) => ({
|
|
3
4
|
documentId: user.document_id,
|
|
4
5
|
username: user.username,
|
|
5
6
|
ethAddress: user.eth_address,
|
|
@@ -7,99 +8,121 @@ const mapToProfile = (user) => ({
|
|
|
7
8
|
createdAt: user.created_at,
|
|
8
9
|
updatedAt: user.updated_at,
|
|
9
10
|
});
|
|
11
|
+
const mapToCredential = (credential) => ({
|
|
12
|
+
documentId: credential.document_id,
|
|
13
|
+
credentialId: credential.credential_id,
|
|
14
|
+
context: JSON.parse(credential.context),
|
|
15
|
+
type: JSON.parse(credential.type),
|
|
16
|
+
issuer: credential.issuer,
|
|
17
|
+
issuanceDate: credential.issuance_date,
|
|
18
|
+
credentialSubject: credential.credential_subject,
|
|
19
|
+
expirationDate: credential.expiration_date,
|
|
20
|
+
credentialStatus: credential.credential_status_id &&
|
|
21
|
+
credential.credential_status_type &&
|
|
22
|
+
credential.credential_status_purpose &&
|
|
23
|
+
credential.credential_status_list_index &&
|
|
24
|
+
credential.credential_status_list_credential
|
|
25
|
+
? {
|
|
26
|
+
id: credential.credential_status_id,
|
|
27
|
+
type: credential.credential_status_type,
|
|
28
|
+
statusPurpose: credential.credential_status_purpose,
|
|
29
|
+
statusListIndex: credential.credential_status_list_index,
|
|
30
|
+
statusListCredential: credential.credential_status_list_credential,
|
|
31
|
+
}
|
|
32
|
+
: null,
|
|
33
|
+
jwt: credential.jwt,
|
|
34
|
+
revoked: credential.revoked,
|
|
35
|
+
revokedAt: credential.revoked_at,
|
|
36
|
+
revocationReason: credential.revocation_reason,
|
|
37
|
+
createdAt: credential.created_at,
|
|
38
|
+
updatedAt: credential.updated_at,
|
|
39
|
+
});
|
|
40
|
+
const getDriveId = (driveId) => {
|
|
41
|
+
const resolvedDriveId = driveId || process.env.RENOWN_PROFILES_DRIVE_ID;
|
|
42
|
+
if (!resolvedDriveId) {
|
|
43
|
+
throw new Error("Drive ID is required. Provide it in the input or set RENOWN_PROFILES_DRIVE_ID environment variable.");
|
|
44
|
+
}
|
|
45
|
+
return resolvedDriveId;
|
|
46
|
+
};
|
|
10
47
|
export const getResolvers = (subgraph) => {
|
|
11
48
|
const db = subgraph.relationalDb;
|
|
12
49
|
return {
|
|
13
50
|
Query: {
|
|
14
|
-
|
|
15
|
-
const { driveId,
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
else if (username) {
|
|
22
|
-
query = query.where("renown_user.username", "=", username);
|
|
51
|
+
renownUser: async (parent, args) => {
|
|
52
|
+
const { driveId, phid, ethAddress, username } = args.input;
|
|
53
|
+
const resolvedDriveId = getDriveId(driveId);
|
|
54
|
+
let query = RenownUserProcessor.query(resolvedDriveId, db).selectFrom("renown_user");
|
|
55
|
+
// Priority: phid > ethAddress > username
|
|
56
|
+
if (phid) {
|
|
57
|
+
query = query.where("renown_user.document_id", "=", phid);
|
|
23
58
|
}
|
|
24
59
|
else if (ethAddress) {
|
|
25
60
|
query = query.where("renown_user.eth_address", "=", ethAddress);
|
|
26
61
|
}
|
|
27
|
-
else if (
|
|
28
|
-
|
|
29
|
-
query = query.where((eb) => eb.or([
|
|
30
|
-
eb("renown_user.username", "like", `%${searchInput}%`),
|
|
31
|
-
eb("renown_user.eth_address", "like", `%${searchInput}%`),
|
|
32
|
-
]));
|
|
62
|
+
else if (username) {
|
|
63
|
+
query = query.where("renown_user.username", "=", username);
|
|
33
64
|
}
|
|
34
65
|
else {
|
|
35
|
-
throw new Error("At least one of
|
|
66
|
+
throw new Error("At least one of phid, ethAddress, or username must be provided");
|
|
36
67
|
}
|
|
37
68
|
const result = await query.selectAll().executeTakeFirst();
|
|
38
|
-
return result ?
|
|
69
|
+
return result ? mapToUser(result) : null;
|
|
39
70
|
},
|
|
40
|
-
|
|
41
|
-
const { driveId,
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
: []),
|
|
50
|
-
...(ethAddresses && ethAddresses.length > 0
|
|
51
|
-
? [eb("renown_user.eth_address", "in", ethAddresses)]
|
|
52
|
-
: []),
|
|
53
|
-
...(searchString
|
|
54
|
-
? [
|
|
55
|
-
eb.or([
|
|
56
|
-
eb("renown_user.username", "like", `%${searchString}%`),
|
|
57
|
-
eb("renown_user.eth_address", "like", `%${searchString}%`),
|
|
58
|
-
]),
|
|
59
|
-
]
|
|
60
|
-
: []),
|
|
61
|
-
]));
|
|
62
|
-
}
|
|
63
|
-
else if (usernames && usernames.length > 0) {
|
|
64
|
-
query = query.where((eb) => eb.or([
|
|
65
|
-
eb("renown_user.username", "in", usernames),
|
|
66
|
-
...(ethAddresses && ethAddresses.length > 0
|
|
67
|
-
? [eb("renown_user.eth_address", "in", ethAddresses)]
|
|
68
|
-
: []),
|
|
69
|
-
...(searchString
|
|
70
|
-
? [
|
|
71
|
-
eb.or([
|
|
72
|
-
eb("renown_user.username", "like", `%${searchString}%`),
|
|
73
|
-
eb("renown_user.eth_address", "like", `%${searchString}%`),
|
|
74
|
-
]),
|
|
75
|
-
]
|
|
76
|
-
: []),
|
|
77
|
-
]));
|
|
71
|
+
renownUsers: async (parent, args) => {
|
|
72
|
+
const { driveId, phids, ethAddresses, usernames } = args.input;
|
|
73
|
+
const resolvedDriveId = getDriveId(driveId);
|
|
74
|
+
let query = RenownUserProcessor.query(resolvedDriveId, db).selectFrom("renown_user");
|
|
75
|
+
const hasPhids = phids && phids.length > 0;
|
|
76
|
+
const hasEthAddresses = ethAddresses && ethAddresses.length > 0;
|
|
77
|
+
const hasUsernames = usernames && usernames.length > 0;
|
|
78
|
+
if (!hasPhids && !hasEthAddresses && !hasUsernames) {
|
|
79
|
+
throw new Error("At least one of phids, ethAddresses, or usernames must be provided");
|
|
78
80
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
81
|
+
query = query.where((eb) => {
|
|
82
|
+
const conditions = [];
|
|
83
|
+
if (hasPhids) {
|
|
84
|
+
conditions.push(eb("renown_user.document_id", "in", phids));
|
|
85
|
+
}
|
|
86
|
+
if (hasEthAddresses) {
|
|
87
|
+
conditions.push(eb("renown_user.eth_address", "in", ethAddresses));
|
|
88
|
+
}
|
|
89
|
+
if (hasUsernames) {
|
|
90
|
+
conditions.push(eb("renown_user.username", "in", usernames));
|
|
91
|
+
}
|
|
92
|
+
return eb.or(conditions);
|
|
93
|
+
});
|
|
94
|
+
const results = await query.selectAll().execute();
|
|
95
|
+
return results.map(mapToUser);
|
|
96
|
+
},
|
|
97
|
+
renownCredentials: async (parent, args) => {
|
|
98
|
+
const { driveId, ethAddress, did, issuer, includeRevoked = true } = args.input;
|
|
99
|
+
const resolvedDriveId = getDriveId(driveId);
|
|
100
|
+
let query = RenownCredentialProcessor.query(resolvedDriveId, db).selectFrom("renown_credential");
|
|
101
|
+
// Search by ethAddress or DID in credential_subject JSON
|
|
102
|
+
if (ethAddress || did) {
|
|
103
|
+
query = query.where((eb) => {
|
|
104
|
+
const conditions = [];
|
|
105
|
+
if (ethAddress) {
|
|
106
|
+
// Search for ethAddress in credential_subject JSON
|
|
107
|
+
conditions.push(eb("renown_credential.credential_subject", "like", `%${ethAddress}%`));
|
|
108
|
+
}
|
|
109
|
+
if (did) {
|
|
110
|
+
// Search for DID in credential_subject JSON
|
|
111
|
+
conditions.push(eb("renown_credential.credential_subject", "like", `%${did}%`));
|
|
112
|
+
}
|
|
113
|
+
return eb.or(conditions);
|
|
114
|
+
});
|
|
91
115
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
eb("renown_user.eth_address", "like", `%${searchString}%`),
|
|
96
|
-
]));
|
|
116
|
+
// Filter by issuer if provided
|
|
117
|
+
if (issuer) {
|
|
118
|
+
query = query.where("renown_credential.issuer", "=", issuer);
|
|
97
119
|
}
|
|
98
|
-
|
|
99
|
-
|
|
120
|
+
// Filter by revoked status
|
|
121
|
+
if (!includeRevoked) {
|
|
122
|
+
query = query.where("renown_credential.revoked", "=", false);
|
|
100
123
|
}
|
|
101
124
|
const results = await query.selectAll().execute();
|
|
102
|
-
return results.map(
|
|
125
|
+
return results.map(mapToCredential);
|
|
103
126
|
},
|
|
104
127
|
},
|
|
105
128
|
};
|
|
@@ -3,33 +3,66 @@ export const schema = gql `
|
|
|
3
3
|
"""
|
|
4
4
|
Subgraph definition for Renown Read Model
|
|
5
5
|
"""
|
|
6
|
-
type
|
|
6
|
+
type RenownUser {
|
|
7
7
|
documentId: String!
|
|
8
8
|
username: String
|
|
9
9
|
ethAddress: String
|
|
10
10
|
userImage: String
|
|
11
|
-
createdAt:
|
|
12
|
-
updatedAt:
|
|
11
|
+
createdAt: DateTime
|
|
12
|
+
updatedAt: DateTime
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
input
|
|
16
|
-
driveId: String
|
|
17
|
-
|
|
18
|
-
username: String
|
|
15
|
+
input RenownUserInput {
|
|
16
|
+
driveId: String
|
|
17
|
+
phid: String
|
|
19
18
|
ethAddress: String
|
|
20
|
-
|
|
19
|
+
username: String
|
|
21
20
|
}
|
|
22
21
|
|
|
23
|
-
input
|
|
24
|
-
driveId: String
|
|
25
|
-
|
|
26
|
-
usernames: [String!]
|
|
22
|
+
input RenownUsersInput {
|
|
23
|
+
driveId: String
|
|
24
|
+
phids: [String!]
|
|
27
25
|
ethAddresses: [String!]
|
|
28
|
-
|
|
26
|
+
usernames: [String!]
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
type RenownCredential {
|
|
30
|
+
documentId: String!
|
|
31
|
+
credentialId: String
|
|
32
|
+
context: [String!]!
|
|
33
|
+
type: [String!]!
|
|
34
|
+
issuer: String!
|
|
35
|
+
issuanceDate: DateTime!
|
|
36
|
+
credentialSubject: String!
|
|
37
|
+
expirationDate: DateTime
|
|
38
|
+
credentialStatus: CredentialStatus
|
|
39
|
+
jwt: String
|
|
40
|
+
revoked: Boolean!
|
|
41
|
+
revokedAt: DateTime
|
|
42
|
+
revocationReason: String
|
|
43
|
+
createdAt: DateTime
|
|
44
|
+
updatedAt: DateTime
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
type CredentialStatus {
|
|
48
|
+
id: String!
|
|
49
|
+
type: String!
|
|
50
|
+
statusPurpose: String!
|
|
51
|
+
statusListIndex: String!
|
|
52
|
+
statusListCredential: String!
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
input RenownCredentialsInput {
|
|
56
|
+
driveId: String
|
|
57
|
+
ethAddress: String
|
|
58
|
+
did: String
|
|
59
|
+
issuer: String
|
|
60
|
+
includeRevoked: Boolean
|
|
29
61
|
}
|
|
30
62
|
|
|
31
63
|
type Query {
|
|
32
|
-
|
|
33
|
-
|
|
64
|
+
renownUser(input: RenownUserInput!): RenownUser
|
|
65
|
+
renownUsers(input: RenownUsersInput!): [RenownUser!]!
|
|
66
|
+
renownCredentials(input: RenownCredentialsInput!): [RenownCredential!]!
|
|
34
67
|
}
|
|
35
68
|
`;
|
package/package.json
CHANGED
|
@@ -1,12 +1,39 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@powerhousedao/renown-package",
|
|
3
3
|
"description": "",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.4",
|
|
5
5
|
"license": "AGPL-3.0-only",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"files": [
|
|
8
8
|
"/dist"
|
|
9
9
|
],
|
|
10
|
+
"release": {
|
|
11
|
+
"branches": [
|
|
12
|
+
"main",
|
|
13
|
+
{
|
|
14
|
+
"name": "staging",
|
|
15
|
+
"prerelease": "staging"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "dev",
|
|
19
|
+
"prerelease": "dev"
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
"plugins": [
|
|
23
|
+
"@semantic-release/changelog",
|
|
24
|
+
"@semantic-release/git",
|
|
25
|
+
"@semantic-release/commit-analyzer",
|
|
26
|
+
"@semantic-release/release-notes-generator",
|
|
27
|
+
[
|
|
28
|
+
"@semantic-release/npm",
|
|
29
|
+
{
|
|
30
|
+
"npmPublish": true,
|
|
31
|
+
"tarballDir": "dist"
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
"@semantic-release/github"
|
|
35
|
+
]
|
|
36
|
+
},
|
|
10
37
|
"exports": {
|
|
11
38
|
".": {
|
|
12
39
|
"types": "./dist/index.d.ts",
|
|
@@ -59,6 +86,8 @@
|
|
|
59
86
|
"@powerhousedao/reactor-local": "staging",
|
|
60
87
|
"@powerhousedao/scalars": "staging",
|
|
61
88
|
"@powerhousedao/switchboard": "staging",
|
|
89
|
+
"@semantic-release/changelog": "^6.0.3",
|
|
90
|
+
"@semantic-release/git": "^10.0.1",
|
|
62
91
|
"@tailwindcss/cli": "^4.0.15",
|
|
63
92
|
"@testing-library/react": "^16.3.0",
|
|
64
93
|
"@types/node": "^22.13.11",
|
|
@@ -73,6 +102,7 @@
|
|
|
73
102
|
"pm2": "^5.4.3",
|
|
74
103
|
"react": "^18.3.1",
|
|
75
104
|
"react-dom": "^18.3.1",
|
|
105
|
+
"semantic-release": "^24.2.8",
|
|
76
106
|
"tailwindcss": "^4.1.4",
|
|
77
107
|
"typescript": "^5.8.3",
|
|
78
108
|
"typescript-eslint": "^8.30.1",
|