@powerhousedao/network-admin 0.0.38 → 0.0.39

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 (61) hide show
  1. package/dist/document-models/network-profile/gen/reducer.d.ts +1 -1
  2. package/dist/document-models/network-profile/gen/reducer.d.ts.map +1 -1
  3. package/dist/document-models/request-for-proposals/gen/ph-factories.js +1 -1
  4. package/dist/document-models/request-for-proposals/gen/utils.js +1 -1
  5. package/dist/document-models/workstream/hooks.d.ts +1 -1
  6. package/dist/document-models/workstream/hooks.d.ts.map +1 -1
  7. package/dist/document-models/workstream/module.d.ts +1 -1
  8. package/dist/document-models/workstream/module.d.ts.map +1 -1
  9. package/dist/powerhouse.manifest.json +9 -1
  10. package/dist/subgraphs/index.d.ts +0 -5
  11. package/dist/subgraphs/index.d.ts.map +1 -1
  12. package/dist/subgraphs/index.js +0 -5
  13. package/package.json +15 -15
  14. package/dist/scripts/sow-mirror/mirror_sow_state.d.ts +0 -3
  15. package/dist/scripts/sow-mirror/mirror_sow_state.d.ts.map +0 -1
  16. package/dist/scripts/sow-mirror/mirror_sow_state.js +0 -441
  17. package/dist/subgraphs/networks/index.d.ts +0 -11
  18. package/dist/subgraphs/networks/index.d.ts.map +0 -1
  19. package/dist/subgraphs/networks/index.js +0 -11
  20. package/dist/subgraphs/networks/resolvers.d.ts +0 -3
  21. package/dist/subgraphs/networks/resolvers.d.ts.map +0 -1
  22. package/dist/subgraphs/networks/resolvers.js +0 -42
  23. package/dist/subgraphs/networks/schema.d.ts +0 -3
  24. package/dist/subgraphs/networks/schema.d.ts.map +0 -1
  25. package/dist/subgraphs/networks/schema.js +0 -39
  26. package/dist/subgraphs/payment-terms/index.d.ts +0 -11
  27. package/dist/subgraphs/payment-terms/index.d.ts.map +0 -1
  28. package/dist/subgraphs/payment-terms/index.js +0 -11
  29. package/dist/subgraphs/payment-terms/resolvers.d.ts +0 -3
  30. package/dist/subgraphs/payment-terms/resolvers.d.ts.map +0 -1
  31. package/dist/subgraphs/payment-terms/resolvers.js +0 -264
  32. package/dist/subgraphs/payment-terms/schema.d.ts +0 -3
  33. package/dist/subgraphs/payment-terms/schema.d.ts.map +0 -1
  34. package/dist/subgraphs/payment-terms/schema.js +0 -199
  35. package/dist/subgraphs/request-for-proposals/index.d.ts +0 -11
  36. package/dist/subgraphs/request-for-proposals/index.d.ts.map +0 -1
  37. package/dist/subgraphs/request-for-proposals/index.js +0 -11
  38. package/dist/subgraphs/request-for-proposals/resolvers.d.ts +0 -3
  39. package/dist/subgraphs/request-for-proposals/resolvers.d.ts.map +0 -1
  40. package/dist/subgraphs/request-for-proposals/resolvers.js +0 -144
  41. package/dist/subgraphs/request-for-proposals/schema.d.ts +0 -3
  42. package/dist/subgraphs/request-for-proposals/schema.d.ts.map +0 -1
  43. package/dist/subgraphs/request-for-proposals/schema.js +0 -141
  44. package/dist/subgraphs/workstream/index.d.ts +0 -11
  45. package/dist/subgraphs/workstream/index.d.ts.map +0 -1
  46. package/dist/subgraphs/workstream/index.js +0 -11
  47. package/dist/subgraphs/workstream/resolvers.d.ts +0 -3
  48. package/dist/subgraphs/workstream/resolvers.d.ts.map +0 -1
  49. package/dist/subgraphs/workstream/resolvers.js +0 -180
  50. package/dist/subgraphs/workstream/schema.d.ts +0 -3
  51. package/dist/subgraphs/workstream/schema.d.ts.map +0 -1
  52. package/dist/subgraphs/workstream/schema.js +0 -146
  53. package/dist/subgraphs/workstreams/index.d.ts +0 -11
  54. package/dist/subgraphs/workstreams/index.d.ts.map +0 -1
  55. package/dist/subgraphs/workstreams/index.js +0 -11
  56. package/dist/subgraphs/workstreams/resolvers.d.ts +0 -3
  57. package/dist/subgraphs/workstreams/resolvers.d.ts.map +0 -1
  58. package/dist/subgraphs/workstreams/resolvers.js +0 -380
  59. package/dist/subgraphs/workstreams/schema.d.ts +0 -3
  60. package/dist/subgraphs/workstreams/schema.d.ts.map +0 -1
  61. package/dist/subgraphs/workstreams/schema.js +0 -326
@@ -1,11 +0,0 @@
1
- import { BaseSubgraph } from "@powerhousedao/reactor-api";
2
- import { schema } from "./schema.js";
3
- import { getResolvers } from "./resolvers.js";
4
- export class WorkstreamsSubgraph extends BaseSubgraph {
5
- name = "workstreams";
6
- typeDefs = schema;
7
- resolvers = getResolvers(this);
8
- additionalContextFields = {};
9
- async onSetup() { }
10
- async onDisconnect() { }
11
- }
@@ -1,3 +0,0 @@
1
- import { type ISubgraph } from "@powerhousedao/reactor-api";
2
- export declare const getResolvers: (subgraph: ISubgraph) => Record<string, unknown>;
3
- //# sourceMappingURL=resolvers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolvers.d.ts","sourceRoot":"","sources":["../../../subgraphs/workstreams/resolvers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAmC5D,eAAO,MAAM,YAAY,GAAI,UAAU,SAAS,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAqdxE,CAAC"}
@@ -1,380 +0,0 @@
1
- import {} from "@powerhousedao/reactor-api";
2
- import { WorkstreamsProcessor } from "../../processors/workstreams/index.js";
3
- import {} from "../../document-models/request-for-proposals/index.js";
4
- import {} from "../../document-models/workstream/index.js";
5
- export const getResolvers = (subgraph) => {
6
- const reactor = subgraph.reactor;
7
- const db = subgraph.relationalDb;
8
- const deriveSlug = (name) => name.toLowerCase().trim().split(/\s+/).join("-");
9
- const getCandidateDrives = async () => {
10
- try {
11
- const drives = await reactor.getDrives?.();
12
- if (Array.isArray(drives) && drives.length > 0)
13
- return drives;
14
- }
15
- catch { }
16
- return [];
17
- };
18
- const loadLinkedDocument = async (id) => {
19
- if (!id)
20
- return null;
21
- try {
22
- const linked = await reactor.getDocument(id);
23
- return { id, stateJSON: linked.state.global };
24
- }
25
- catch {
26
- return { id, stateJSON: null };
27
- }
28
- };
29
- const loadRfpDetails = async (rfpRef) => {
30
- if (!rfpRef?.id) {
31
- return null;
32
- }
33
- try {
34
- const rfpDoc = await reactor.getDocument(rfpRef.id);
35
- const rfpState = rfpDoc.state.global;
36
- return {
37
- id: rfpRef.id,
38
- code: rfpState?.code ?? null,
39
- title: rfpRef.title ?? rfpState?.title ?? null,
40
- status: rfpState?.status ?? null,
41
- summary: rfpState?.summary ?? null,
42
- submissionDeadline: rfpState?.deadline ?? null,
43
- budgetMin: rfpState?.budgetRange?.min ?? null,
44
- budgetMax: rfpState?.budgetRange?.max ?? null,
45
- budgetCurrency: rfpState?.budgetRange?.currency ?? null,
46
- eligibilityCriteria: rfpState?.eligibilityCriteria ?? null,
47
- evaluationCriteria: rfpState?.evaluationCriteria ?? null,
48
- briefing: rfpState?.briefing ?? null,
49
- };
50
- }
51
- catch {
52
- return {
53
- id: rfpRef.id,
54
- code: null,
55
- title: rfpRef.title ?? null,
56
- status: null,
57
- summary: null,
58
- submissionDeadline: null,
59
- budgetMin: null,
60
- budgetMax: null,
61
- budgetCurrency: null,
62
- eligibilityCriteria: null,
63
- evaluationCriteria: null,
64
- briefing: null,
65
- };
66
- }
67
- };
68
- const hydrateWorkstreamRow = async (row) => {
69
- try {
70
- const doc = await reactor.getDocument(row.workstream_phid);
71
- const state = doc.state.global;
72
- const initialProposalBase = state.initialProposal
73
- ? {
74
- id: state.initialProposal.id,
75
- status: state.initialProposal.status,
76
- author: state.initialProposal.author,
77
- }
78
- : null;
79
- const alternativeProposalsBase = (state.alternativeProposals || []).map((p) => ({
80
- id: p.id,
81
- status: p.status,
82
- author: p.author,
83
- }));
84
- const [topSowDoc, topPaymentTermsDoc, initialSowDoc, initialPaymentTermsDoc, altSowDocs, altPaymentDocs, rfpDetails,] = await Promise.all([
85
- loadLinkedDocument(state.sow || row.sow_phid || null),
86
- loadLinkedDocument(state.paymentTerms || null),
87
- loadLinkedDocument(state.initialProposal?.sow || row.sow_phid || null),
88
- loadLinkedDocument(state.initialProposal?.paymentTerms || null),
89
- Promise.all((state.alternativeProposals || []).map((p) => loadLinkedDocument(p.sow || null))),
90
- Promise.all((state.alternativeProposals || []).map((p) => loadLinkedDocument(p.paymentTerms || null))),
91
- loadRfpDetails(state.rfp || null),
92
- ]);
93
- const client = state.client ??
94
- (row.network_phid
95
- ? { id: row.network_phid, name: row.network_slug, icon: null }
96
- : null);
97
- return {
98
- code: state.code || null,
99
- title: state.title || row.workstream_title || null,
100
- status: state.status || row.workstream_status || null,
101
- client,
102
- rfp: rfpDetails,
103
- initialProposal: initialProposalBase
104
- ? {
105
- ...initialProposalBase,
106
- sow: initialSowDoc?.stateJSON || null,
107
- paymentTerms: initialPaymentTermsDoc?.stateJSON || null,
108
- }
109
- : null,
110
- alternativeProposals: alternativeProposalsBase.map((proposal, index) => ({
111
- ...proposal,
112
- sow: altSowDocs[index]?.stateJSON || null,
113
- paymentTerms: altPaymentDocs[index]?.stateJSON || null,
114
- })),
115
- sow: topSowDoc?.stateJSON || null,
116
- paymentTerms: topPaymentTermsDoc?.stateJSON || null,
117
- paymentRequests: state.paymentRequests || [],
118
- };
119
- }
120
- catch {
121
- return {
122
- code: row.workstream_title || null,
123
- title: row.workstream_title || null,
124
- status: row.workstream_status || null,
125
- client: row.network_phid
126
- ? { id: row.network_phid, name: row.network_slug, icon: null }
127
- : null,
128
- rfp: null,
129
- initialProposal: null,
130
- alternativeProposals: [],
131
- sow: null,
132
- paymentTerms: null,
133
- paymentRequests: [],
134
- };
135
- }
136
- };
137
- const applyWorkstreamFilters = (qb, filters, wantedSlug) => {
138
- if (filters.workstreamId) {
139
- qb = qb.where("workstream_phid", "=", filters.workstreamId);
140
- }
141
- else if (filters.workstreamSlug) {
142
- qb = qb.where("workstream_slug", "=", filters.workstreamSlug);
143
- }
144
- if (filters.networkId) {
145
- qb = qb.where("network_phid", "=", filters.networkId);
146
- }
147
- else if (filters.networkSlug) {
148
- qb = qb.where("network_slug", "=", filters.networkSlug);
149
- }
150
- else if (filters.networkName && wantedSlug) {
151
- qb = qb.where("network_slug", "=", wantedSlug);
152
- }
153
- const statuses = (filters.workstreamStatuses || []).filter((status) => Boolean(status));
154
- if (statuses.length > 0) {
155
- qb = qb.where("workstream_status", "in", statuses);
156
- }
157
- else if (filters.workstreamStatus) {
158
- qb = qb.where("workstream_status", "=", filters.workstreamStatus);
159
- }
160
- return qb;
161
- };
162
- const applyScopeOfWorkFilters = (qb, filters, wantedSlug) => {
163
- if (filters.workstreamId) {
164
- qb = qb.where("workstream_phid", "=", filters.workstreamId);
165
- }
166
- else if (filters.workstreamSlug) {
167
- qb = qb.where("workstream_slug", "=", filters.workstreamSlug);
168
- }
169
- if (filters.networkId) {
170
- qb = qb.where("network_phid", "=", filters.networkId);
171
- }
172
- else if (filters.networkSlug) {
173
- qb = qb.where("network_slug", "=", filters.networkSlug);
174
- }
175
- else if (filters.networkName && wantedSlug) {
176
- qb = qb.where("network_slug", "=", wantedSlug);
177
- }
178
- if (filters.workstreamStatus) {
179
- qb = qb.where("workstream_status", "=", filters.workstreamStatus);
180
- }
181
- return qb;
182
- };
183
- return {
184
- Query: {
185
- processorWorkstreams: async (parent, args) => {
186
- const drives = await getCandidateDrives();
187
- const allProcessorWorkstreams = await Promise.all(drives.map(async (driveId) => {
188
- return WorkstreamsProcessor.query(driveId, db)
189
- .selectFrom("workstreams")
190
- .selectAll()
191
- .execute();
192
- }));
193
- // Flatten the array of arrays into a single array
194
- const flattenedWorkstreams = allProcessorWorkstreams.flat();
195
- return flattenedWorkstreams.map((workstream) => ({
196
- network_phid: workstream.network_phid,
197
- network_slug: workstream.network_slug,
198
- workstream_phid: workstream.workstream_phid,
199
- workstream_slug: workstream.workstream_slug,
200
- workstream_title: workstream.workstream_title,
201
- workstream_status: workstream.workstream_status,
202
- sow_phid: workstream.sow_phid,
203
- roadmap_oid: workstream.roadmap_oid,
204
- final_milestone_target: workstream.final_milestone_target,
205
- initial_proposal_status: workstream.initial_proposal_status,
206
- initial_proposal_author: workstream.initial_proposal_author,
207
- }));
208
- },
209
- workstream: async (parent, args) => {
210
- const filters = args.filter || {};
211
- const candidateDrives = await getCandidateDrives();
212
- const wantedSlug = filters.networkSlug ||
213
- (filters.networkName ? deriveSlug(filters.networkName) : undefined);
214
- let resolved = null;
215
- for (const driveId of candidateDrives) {
216
- let qb = WorkstreamsProcessor.query(driveId, db)
217
- .selectFrom("workstreams")
218
- .selectAll();
219
- qb = applyWorkstreamFilters(qb, filters, wantedSlug);
220
- const row = await qb.executeTakeFirst();
221
- if (!row)
222
- continue;
223
- resolved = await hydrateWorkstreamRow(row);
224
- break;
225
- }
226
- return resolved;
227
- },
228
- workstreams: async (parent, args) => {
229
- const filters = args.filter || {};
230
- const candidateDrives = await getCandidateDrives();
231
- // Check if any filters are provided
232
- const hasFilters = filters.networkId ||
233
- filters.networkSlug ||
234
- filters.networkName ||
235
- filters.workstreamStatus ||
236
- (filters.workstreamStatuses &&
237
- filters.workstreamStatuses.length > 0);
238
- const wantedSlug = filters.networkSlug ||
239
- (filters.networkName ? deriveSlug(filters.networkName) : undefined);
240
- const results = [];
241
- for (const driveId of candidateDrives) {
242
- let qb = WorkstreamsProcessor.query(driveId, db)
243
- .selectFrom("workstreams")
244
- .selectAll();
245
- // Only apply filters if any are provided
246
- if (hasFilters) {
247
- const filterArgs = {
248
- networkId: filters.networkId,
249
- networkSlug: filters.networkSlug,
250
- networkName: filters.networkName,
251
- workstreamStatus: filters.workstreamStatus,
252
- workstreamStatuses: filters.workstreamStatuses,
253
- };
254
- qb = applyWorkstreamFilters(qb, filterArgs, wantedSlug);
255
- }
256
- const rows = await qb.execute();
257
- if (rows.length === 0) {
258
- continue;
259
- }
260
- for (const row of rows) {
261
- const hydrated = await hydrateWorkstreamRow(row);
262
- results.push(hydrated);
263
- }
264
- }
265
- return results;
266
- },
267
- rfpByWorkstream: async (parent, args) => {
268
- const filters = args.filter || {};
269
- const candidateDrives = await getCandidateDrives();
270
- const wantedSlug = filters.networkSlug ||
271
- (filters.networkName ? deriveSlug(filters.networkName) : undefined);
272
- const results = [];
273
- for (const driveId of candidateDrives) {
274
- let qb = WorkstreamsProcessor.query(driveId, db)
275
- .selectFrom("workstreams")
276
- .selectAll();
277
- qb = applyWorkstreamFilters(qb, filters, wantedSlug);
278
- const rows = await qb.execute();
279
- if (rows.length === 0) {
280
- continue;
281
- }
282
- for (const row of rows) {
283
- const hydrated = await hydrateWorkstreamRow(row);
284
- results.push({
285
- code: hydrated.code,
286
- title: hydrated.title,
287
- status: hydrated.status,
288
- rfp: hydrated.rfp,
289
- });
290
- }
291
- if (filters.workstreamId || filters.workstreamSlug) {
292
- break;
293
- }
294
- }
295
- return results;
296
- },
297
- scopeOfWorkByNetworkOrStatus: async (parent, args) => {
298
- const filters = args.filter || {};
299
- const candidateDrives = await getCandidateDrives();
300
- const wantedSlug = filters.networkSlug ||
301
- (filters.networkName ? deriveSlug(filters.networkName) : undefined);
302
- const results = [];
303
- for (const driveId of candidateDrives) {
304
- let qb = WorkstreamsProcessor.query(driveId, db)
305
- .selectFrom("workstreams")
306
- .selectAll();
307
- qb = applyScopeOfWorkFilters(qb, filters, wantedSlug);
308
- const rows = await qb.execute();
309
- if (rows.length === 0) {
310
- continue;
311
- }
312
- for (const row of rows) {
313
- const hydrated = await hydrateWorkstreamRow(row);
314
- // Collect SOWs based on proposalRole filter
315
- const sowDocs = [];
316
- if (!filters.proposalRole) {
317
- // If no proposalRole specified, include all SOWs
318
- if (hydrated.sow) {
319
- sowDocs.push(hydrated.sow);
320
- }
321
- if (hydrated.initialProposal?.sow) {
322
- sowDocs.push(hydrated.initialProposal.sow);
323
- }
324
- for (const altProposal of hydrated.alternativeProposals || []) {
325
- if (altProposal.sow) {
326
- sowDocs.push(altProposal.sow);
327
- }
328
- }
329
- }
330
- else if (filters.proposalRole === "INITIAL") {
331
- if (hydrated.initialProposal?.sow) {
332
- sowDocs.push(hydrated.initialProposal.sow);
333
- }
334
- }
335
- else if (filters.proposalRole === "ALTERNATIVE") {
336
- for (const altProposal of hydrated.alternativeProposals || []) {
337
- if (altProposal.sow) {
338
- sowDocs.push(altProposal.sow);
339
- }
340
- }
341
- }
342
- else if (filters.proposalRole === "AWARDED") {
343
- // For AWARDED, we check if the workstream status is AWARDED
344
- // and return the initial proposal's SOW (as it's typically the awarded one)
345
- if (hydrated.status === "AWARDED" && hydrated.initialProposal?.sow) {
346
- sowDocs.push(hydrated.initialProposal.sow);
347
- }
348
- }
349
- // Filter out null/undefined SOWs and add to results
350
- for (const sow of sowDocs) {
351
- if (sow) {
352
- results.push(sow);
353
- }
354
- }
355
- }
356
- if (filters.workstreamId || filters.workstreamSlug) {
357
- break;
358
- }
359
- }
360
- return results;
361
- },
362
- },
363
- SOW_Progress: {
364
- __resolveType(obj) {
365
- if (obj && typeof obj === "object") {
366
- if (Object.prototype.hasOwnProperty.call(obj, "total") && Object.prototype.hasOwnProperty.call(obj, "completed")) {
367
- return "SOW_StoryPoint";
368
- }
369
- if (Object.prototype.hasOwnProperty.call(obj, "value")) {
370
- return "SOW_Percentage";
371
- }
372
- if (Object.prototype.hasOwnProperty.call(obj, "done")) {
373
- return "SOW_Binary";
374
- }
375
- }
376
- return null;
377
- }
378
- }
379
- };
380
- };
@@ -1,3 +0,0 @@
1
- import type { DocumentNode } from "graphql";
2
- export declare const schema: DocumentNode;
3
- //# sourceMappingURL=schema.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../subgraphs/workstreams/schema.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,eAAO,MAAM,MAAM,EAAE,YAoUpB,CAAC"}