@powerhousedao/renown-package 0.0.2 → 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 +18 -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 +122 -3
  38. package/dist/subgraphs/renown-read-model/schema.js +61 -2
  39. package/package.json +33 -2
@@ -3,14 +3,34 @@ export const schema = gql `
3
3
  """
4
4
  Subgraph definition for RenownCredential (renown/credential)
5
5
  """
6
+ type CredentialStatus {
7
+ id: String!
8
+ type: String!
9
+ statusPurpose: String!
10
+ statusListIndex: String!
11
+ statusListCredential: String!
12
+ }
13
+
6
14
  type RenownCredentialState {
7
- "Add your global state fields here"
15
+ "W3C VC Required Fields"
16
+ context: [String!]!
17
+ id: String
18
+ type: [String!]!
19
+ issuer: String!
20
+ issuanceDate: DateTime!
21
+ credentialSubject: String!
22
+
23
+ "W3C VC Optional Fields"
24
+ expirationDate: DateTime
25
+ credentialStatus: CredentialStatus
26
+
27
+ "JWT Representation"
8
28
  jwt: String
29
+
30
+ "Revocation tracking"
9
31
  revoked: Boolean
10
- issuer: String
11
- subject: String
12
- audience: String
13
- payload: String
32
+ revokedAt: DateTime
33
+ revocationReason: String
14
34
  }
15
35
 
16
36
  """
@@ -41,20 +61,50 @@ export const schema = gql `
41
61
  docId: PHID
42
62
  input: RenownCredential_RevokeInput
43
63
  ): Int
64
+ RenownCredential_updateCredentialSubject(
65
+ driveId: String
66
+ docId: PHID
67
+ input: RenownCredential_UpdateCredentialSubjectInput
68
+ ): Int
69
+ RenownCredential_setJwt(
70
+ driveId: String
71
+ docId: PHID
72
+ input: RenownCredential_SetJwtInput
73
+ ): Int
74
+ RenownCredential_setCredentialStatus(
75
+ driveId: String
76
+ docId: PHID
77
+ input: RenownCredential_SetCredentialStatusInput
78
+ ): Int
44
79
  }
45
80
 
46
81
  """
47
82
  Module: Manager
48
83
  """
49
84
  input RenownCredential_InitInput {
50
- "Add your inputs here"
51
- jwt: String!
52
- issuer: String
53
- subject: String
54
- audience: String
55
- payload: String
85
+ context: [String!]
86
+ id: String
87
+ type: [String!]
88
+ issuer: String!
89
+ issuanceDate: DateTime!
90
+ credentialSubject: String!
91
+ expirationDate: DateTime
56
92
  }
57
93
  input RenownCredential_RevokeInput {
58
- jwt: String
94
+ revokedAt: DateTime!
95
+ reason: String
96
+ }
97
+ input RenownCredential_UpdateCredentialSubjectInput {
98
+ credentialSubject: String!
99
+ }
100
+ input RenownCredential_SetJwtInput {
101
+ jwt: String!
102
+ }
103
+ input RenownCredential_SetCredentialStatusInput {
104
+ statusId: String!
105
+ statusType: String!
106
+ statusPurpose: String!
107
+ statusListIndex: String!
108
+ statusListCredential: String!
59
109
  }
60
110
  `;
@@ -1,9 +1,128 @@
1
+ import { RenownUserProcessor } from "../../processors/renown-user/index.js";
2
+ import { RenownCredentialProcessor } from "../../processors/renown-credential/index.js";
3
+ const mapToUser = (user) => ({
4
+ documentId: user.document_id,
5
+ username: user.username,
6
+ ethAddress: user.eth_address,
7
+ userImage: user.user_image,
8
+ createdAt: user.created_at,
9
+ updatedAt: user.updated_at,
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
+ };
1
47
  export const getResolvers = (subgraph) => {
2
- const reactor = subgraph.reactor;
48
+ const db = subgraph.relationalDb;
3
49
  return {
4
50
  Query: {
5
- example: async (parent, args) => {
6
- return "example";
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);
58
+ }
59
+ else if (ethAddress) {
60
+ query = query.where("renown_user.eth_address", "=", ethAddress);
61
+ }
62
+ else if (username) {
63
+ query = query.where("renown_user.username", "=", username);
64
+ }
65
+ else {
66
+ throw new Error("At least one of phid, ethAddress, or username must be provided");
67
+ }
68
+ const result = await query.selectAll().executeTakeFirst();
69
+ return result ? mapToUser(result) : null;
70
+ },
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");
80
+ }
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
+ });
115
+ }
116
+ // Filter by issuer if provided
117
+ if (issuer) {
118
+ query = query.where("renown_credential.issuer", "=", issuer);
119
+ }
120
+ // Filter by revoked status
121
+ if (!includeRevoked) {
122
+ query = query.where("renown_credential.revoked", "=", false);
123
+ }
124
+ const results = await query.selectAll().execute();
125
+ return results.map(mapToCredential);
7
126
  },
8
127
  },
9
128
  };
@@ -1,9 +1,68 @@
1
1
  import { gql } from "graphql-tag";
2
2
  export const schema = gql `
3
3
  """
4
- Subgraph definition
4
+ Subgraph definition for Renown Read Model
5
5
  """
6
+ type RenownUser {
7
+ documentId: String!
8
+ username: String
9
+ ethAddress: String
10
+ userImage: String
11
+ createdAt: DateTime
12
+ updatedAt: DateTime
13
+ }
14
+
15
+ input RenownUserInput {
16
+ driveId: String
17
+ phid: String
18
+ ethAddress: String
19
+ username: String
20
+ }
21
+
22
+ input RenownUsersInput {
23
+ driveId: String
24
+ phids: [String!]
25
+ ethAddresses: [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
61
+ }
62
+
6
63
  type Query {
7
- example(driveId: String!): String
64
+ renownUser(input: RenownUserInput!): RenownUser
65
+ renownUsers(input: RenownUsersInput!): [RenownUser!]!
66
+ renownCredentials(input: RenownCredentialsInput!): [RenownCredential!]!
8
67
  }
9
68
  `;
package/package.json CHANGED
@@ -1,12 +1,39 @@
1
1
  {
2
2
  "name": "@powerhousedao/renown-package",
3
3
  "description": "",
4
- "version": "0.0.2",
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",
@@ -44,6 +71,7 @@
44
71
  "graphql": "^16.10.0",
45
72
  "graphql-tag": "^2.12.6",
46
73
  "kysely": "^0.28.7",
74
+ "scalars": "link:../powerhouse/packages/scalars",
47
75
  "uuid": "^11.1.0",
48
76
  "zod": "^3.24.2"
49
77
  },
@@ -56,8 +84,10 @@
56
84
  "@powerhousedao/reactor-api": "staging",
57
85
  "@powerhousedao/reactor-browser": "staging",
58
86
  "@powerhousedao/reactor-local": "staging",
59
- "@powerhousedao/scalars": "2.0.1",
87
+ "@powerhousedao/scalars": "staging",
60
88
  "@powerhousedao/switchboard": "staging",
89
+ "@semantic-release/changelog": "^6.0.3",
90
+ "@semantic-release/git": "^10.0.1",
61
91
  "@tailwindcss/cli": "^4.0.15",
62
92
  "@testing-library/react": "^16.3.0",
63
93
  "@types/node": "^22.13.11",
@@ -72,6 +102,7 @@
72
102
  "pm2": "^5.4.3",
73
103
  "react": "^18.3.1",
74
104
  "react-dom": "^18.3.1",
105
+ "semantic-release": "^24.2.8",
75
106
  "tailwindcss": "^4.1.4",
76
107
  "typescript": "^5.8.3",
77
108
  "typescript-eslint": "^8.30.1",