@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.
Files changed (39) hide show
  1. package/dist/document-models/renown-credential/gen/document-model.js +96 -10
  2. package/dist/document-models/renown-credential/gen/manager/actions.d.ts +14 -2
  3. package/dist/document-models/renown-credential/gen/manager/creators.d.ts +5 -2
  4. package/dist/document-models/renown-credential/gen/manager/creators.js +4 -1
  5. package/dist/document-models/renown-credential/gen/manager/error.d.ts +45 -1
  6. package/dist/document-models/renown-credential/gen/manager/error.js +53 -1
  7. package/dist/document-models/renown-credential/gen/manager/object.d.ts +5 -2
  8. package/dist/document-models/renown-credential/gen/manager/object.js +10 -1
  9. package/dist/document-models/renown-credential/gen/manager/operations.d.ts +4 -1
  10. package/dist/document-models/renown-credential/gen/object.d.ts +1 -1
  11. package/dist/document-models/renown-credential/gen/ph-factories.js +11 -5
  12. package/dist/document-models/renown-credential/gen/reducer.d.ts +1 -1
  13. package/dist/document-models/renown-credential/gen/reducer.js +12 -0
  14. package/dist/document-models/renown-credential/gen/schema/types.d.ts +43 -12
  15. package/dist/document-models/renown-credential/gen/schema/zod.d.ts +5 -1
  16. package/dist/document-models/renown-credential/gen/schema/zod.js +48 -10
  17. package/dist/document-models/renown-credential/gen/utils.d.ts +1 -1
  18. package/dist/document-models/renown-credential/gen/utils.js +11 -5
  19. package/dist/document-models/renown-credential/index.d.ts +3 -0
  20. package/dist/document-models/renown-credential/src/reducers/manager.js +69 -15
  21. package/dist/document-models/renown-user/gen/object.d.ts +1 -1
  22. package/dist/document-models/renown-user/gen/profile/object.d.ts +1 -1
  23. package/dist/document-models/renown-user/gen/reducer.d.ts +1 -1
  24. package/dist/document-models/renown-user/gen/utils.d.ts +1 -1
  25. package/dist/processors/index.d.ts +1 -0
  26. package/dist/processors/index.js +1 -0
  27. package/dist/processors/renown-credential/index.d.ts +9 -0
  28. package/dist/processors/renown-credential/index.js +129 -0
  29. package/dist/processors/renown-credential/migrations.d.ts +3 -0
  30. package/dist/processors/renown-credential/migrations.js +77 -0
  31. package/dist/processors/renown-credential/schema.d.ts +27 -0
  32. package/dist/processors/renown-credential/schema.js +1 -0
  33. package/dist/processors/renown-user/migrations.js +2 -2
  34. package/dist/style.css +15 -12
  35. package/dist/subgraphs/renown-credential/resolvers.js +36 -0
  36. package/dist/subgraphs/renown-credential/schema.js +62 -12
  37. package/dist/subgraphs/renown-read-model/resolvers.js +99 -76
  38. package/dist/subgraphs/renown-read-model/schema.js +48 -15
  39. package/package.json +31 -1
@@ -1,5 +1,6 @@
1
1
  import { RenownUserProcessor } from "../../processors/renown-user/index.js";
2
- const mapToProfile = (user) => ({
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
- getProfile: async (parent, args) => {
15
- const { driveId, id, username, ethAddress, searchInput } = args.input;
16
- let query = RenownUserProcessor.query(driveId, db).selectFrom("renown_user");
17
- // Priority: id > username > ethAddress > searchInput
18
- if (id) {
19
- query = query.where("renown_user.document_id", "=", id);
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 (searchInput) {
28
- // Search across username and eth_address
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 id, username, ethAddress, or searchInput must be provided");
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 ? mapToProfile(result) : null;
69
+ return result ? mapToUser(result) : null;
39
70
  },
40
- getProfiles: async (parent, args) => {
41
- const { driveId, ids, usernames, ethAddresses, searchString } = args.input;
42
- let query = RenownUserProcessor.query(driveId, db).selectFrom("renown_user");
43
- // Build OR conditions based on provided inputs
44
- if (ids && ids.length > 0) {
45
- query = query.where((eb) => eb.or([
46
- eb("renown_user.document_id", "in", ids),
47
- ...(usernames && usernames.length > 0
48
- ? [eb("renown_user.username", "in", usernames)]
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
- else if (ethAddresses && ethAddresses.length > 0) {
80
- query = query.where((eb) => eb.or([
81
- eb("renown_user.eth_address", "in", ethAddresses),
82
- ...(searchString
83
- ? [
84
- eb.or([
85
- eb("renown_user.username", "like", `%${searchString}%`),
86
- eb("renown_user.eth_address", "like", `%${searchString}%`),
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
- else if (searchString) {
93
- query = query.where((eb) => eb.or([
94
- eb("renown_user.username", "like", `%${searchString}%`),
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
- else {
99
- throw new Error("At least one of ids, usernames, ethAddresses, or searchString must be provided");
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(mapToProfile);
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 RenownProfile {
6
+ type RenownUser {
7
7
  documentId: String!
8
8
  username: String
9
9
  ethAddress: String
10
10
  userImage: String
11
- createdAt: String
12
- updatedAt: String
11
+ createdAt: DateTime
12
+ updatedAt: DateTime
13
13
  }
14
14
 
15
- input GetProfileInput {
16
- driveId: String!
17
- id: String
18
- username: String
15
+ input RenownUserInput {
16
+ driveId: String
17
+ phid: String
19
18
  ethAddress: String
20
- searchInput: String
19
+ username: String
21
20
  }
22
21
 
23
- input GetProfilesInput {
24
- driveId: String!
25
- ids: [String!]
26
- usernames: [String!]
22
+ input RenownUsersInput {
23
+ driveId: String
24
+ phids: [String!]
27
25
  ethAddresses: [String!]
28
- searchString: String
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
- getProfile(input: GetProfileInput!): RenownProfile
33
- getProfiles(input: GetProfilesInput!): [RenownProfile!]!
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.3",
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",