@powerhousedao/vetra-builder-package 0.0.0

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 (185) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +179 -0
  3. package/dist/document-models/builder-account/gen/actions.d.ts +9 -0
  4. package/dist/document-models/builder-account/gen/actions.js +4 -0
  5. package/dist/document-models/builder-account/gen/creators.d.ts +4 -0
  6. package/dist/document-models/builder-account/gen/creators.js +4 -0
  7. package/dist/document-models/builder-account/gen/document-model.d.ts +2 -0
  8. package/dist/document-models/builder-account/gen/document-model.js +253 -0
  9. package/dist/document-models/builder-account/gen/index.d.ts +7 -0
  10. package/dist/document-models/builder-account/gen/index.js +6 -0
  11. package/dist/document-models/builder-account/gen/members/actions.d.ts +11 -0
  12. package/dist/document-models/builder-account/gen/members/actions.js +1 -0
  13. package/dist/document-models/builder-account/gen/members/creators.d.ts +4 -0
  14. package/dist/document-models/builder-account/gen/members/creators.js +4 -0
  15. package/dist/document-models/builder-account/gen/members/error.d.ts +1 -0
  16. package/dist/document-models/builder-account/gen/members/error.js +1 -0
  17. package/dist/document-models/builder-account/gen/members/object.d.ts +7 -0
  18. package/dist/document-models/builder-account/gen/members/object.js +10 -0
  19. package/dist/document-models/builder-account/gen/members/operations.d.ts +7 -0
  20. package/dist/document-models/builder-account/gen/members/operations.js +1 -0
  21. package/dist/document-models/builder-account/gen/object.d.ts +20 -0
  22. package/dist/document-models/builder-account/gen/object.js +36 -0
  23. package/dist/document-models/builder-account/gen/packages/actions.d.ts +23 -0
  24. package/dist/document-models/builder-account/gen/packages/actions.js +1 -0
  25. package/dist/document-models/builder-account/gen/packages/creators.d.ts +7 -0
  26. package/dist/document-models/builder-account/gen/packages/creators.js +7 -0
  27. package/dist/document-models/builder-account/gen/packages/error.d.ts +1 -0
  28. package/dist/document-models/builder-account/gen/packages/error.js +1 -0
  29. package/dist/document-models/builder-account/gen/packages/object.d.ts +10 -0
  30. package/dist/document-models/builder-account/gen/packages/object.js +19 -0
  31. package/dist/document-models/builder-account/gen/packages/operations.d.ts +10 -0
  32. package/dist/document-models/builder-account/gen/packages/operations.js +1 -0
  33. package/dist/document-models/builder-account/gen/ph-factories.d.ts +26 -0
  34. package/dist/document-models/builder-account/gen/ph-factories.js +62 -0
  35. package/dist/document-models/builder-account/gen/profile/actions.d.ts +23 -0
  36. package/dist/document-models/builder-account/gen/profile/actions.js +1 -0
  37. package/dist/document-models/builder-account/gen/profile/creators.d.ts +7 -0
  38. package/dist/document-models/builder-account/gen/profile/creators.js +7 -0
  39. package/dist/document-models/builder-account/gen/profile/error.d.ts +1 -0
  40. package/dist/document-models/builder-account/gen/profile/error.js +1 -0
  41. package/dist/document-models/builder-account/gen/profile/object.d.ts +10 -0
  42. package/dist/document-models/builder-account/gen/profile/object.js +19 -0
  43. package/dist/document-models/builder-account/gen/profile/operations.d.ts +10 -0
  44. package/dist/document-models/builder-account/gen/profile/operations.js +1 -0
  45. package/dist/document-models/builder-account/gen/reducer.d.ts +4 -0
  46. package/dist/document-models/builder-account/gen/reducer.js +87 -0
  47. package/dist/document-models/builder-account/gen/schema/index.d.ts +2 -0
  48. package/dist/document-models/builder-account/gen/schema/index.js +2 -0
  49. package/dist/document-models/builder-account/gen/schema/types.d.ts +269 -0
  50. package/dist/document-models/builder-account/gen/schema/types.js +1 -0
  51. package/dist/document-models/builder-account/gen/schema/zod.d.ts +34 -0
  52. package/dist/document-models/builder-account/gen/schema/zod.js +192 -0
  53. package/dist/document-models/builder-account/gen/spaces/actions.d.ts +23 -0
  54. package/dist/document-models/builder-account/gen/spaces/actions.js +1 -0
  55. package/dist/document-models/builder-account/gen/spaces/creators.d.ts +7 -0
  56. package/dist/document-models/builder-account/gen/spaces/creators.js +7 -0
  57. package/dist/document-models/builder-account/gen/spaces/error.d.ts +13 -0
  58. package/dist/document-models/builder-account/gen/spaces/error.js +11 -0
  59. package/dist/document-models/builder-account/gen/spaces/object.d.ts +10 -0
  60. package/dist/document-models/builder-account/gen/spaces/object.js +19 -0
  61. package/dist/document-models/builder-account/gen/spaces/operations.d.ts +10 -0
  62. package/dist/document-models/builder-account/gen/spaces/operations.js +1 -0
  63. package/dist/document-models/builder-account/gen/types.d.ts +9 -0
  64. package/dist/document-models/builder-account/gen/types.js +1 -0
  65. package/dist/document-models/builder-account/gen/utils.d.ts +21 -0
  66. package/dist/document-models/builder-account/gen/utils.js +54 -0
  67. package/dist/document-models/builder-account/index.d.ts +40 -0
  68. package/dist/document-models/builder-account/index.js +21 -0
  69. package/dist/document-models/builder-account/src/reducers/members.d.ts +2 -0
  70. package/dist/document-models/builder-account/src/reducers/members.js +11 -0
  71. package/dist/document-models/builder-account/src/reducers/packages.d.ts +2 -0
  72. package/dist/document-models/builder-account/src/reducers/packages.js +79 -0
  73. package/dist/document-models/builder-account/src/reducers/profile.d.ts +2 -0
  74. package/dist/document-models/builder-account/src/reducers/profile.js +26 -0
  75. package/dist/document-models/builder-account/src/reducers/spaces.d.ts +2 -0
  76. package/dist/document-models/builder-account/src/reducers/spaces.js +46 -0
  77. package/dist/document-models/builder-account/src/tests/document-model.test.d.ts +5 -0
  78. package/dist/document-models/builder-account/src/tests/document-model.test.js +18 -0
  79. package/dist/document-models/builder-account/src/tests/members.test.d.ts +5 -0
  80. package/dist/document-models/builder-account/src/tests/members.test.js +32 -0
  81. package/dist/document-models/builder-account/src/tests/packages.test.d.ts +5 -0
  82. package/dist/document-models/builder-account/src/tests/packages.test.js +56 -0
  83. package/dist/document-models/builder-account/src/tests/profile.test.d.ts +5 -0
  84. package/dist/document-models/builder-account/src/tests/profile.test.js +56 -0
  85. package/dist/document-models/builder-account/src/tests/spaces.test.d.ts +5 -0
  86. package/dist/document-models/builder-account/src/tests/spaces.test.js +56 -0
  87. package/dist/document-models/builder-account/src/utils.d.ts +1 -0
  88. package/dist/document-models/builder-account/src/utils.js +1 -0
  89. package/dist/document-models/index.d.ts +3 -0
  90. package/dist/document-models/index.js +2 -0
  91. package/dist/document-models/vetra-package/gen/actions.d.ts +3 -0
  92. package/dist/document-models/vetra-package/gen/actions.js +1 -0
  93. package/dist/document-models/vetra-package/gen/creators.d.ts +1 -0
  94. package/dist/document-models/vetra-package/gen/creators.js +1 -0
  95. package/dist/document-models/vetra-package/gen/document-model.d.ts +2 -0
  96. package/dist/document-models/vetra-package/gen/document-model.js +125 -0
  97. package/dist/document-models/vetra-package/gen/index.d.ts +7 -0
  98. package/dist/document-models/vetra-package/gen/index.js +6 -0
  99. package/dist/document-models/vetra-package/gen/meta/actions.d.ts +35 -0
  100. package/dist/document-models/vetra-package/gen/meta/actions.js +1 -0
  101. package/dist/document-models/vetra-package/gen/meta/creators.d.ts +10 -0
  102. package/dist/document-models/vetra-package/gen/meta/creators.js +10 -0
  103. package/dist/document-models/vetra-package/gen/meta/error.d.ts +1 -0
  104. package/dist/document-models/vetra-package/gen/meta/error.js +1 -0
  105. package/dist/document-models/vetra-package/gen/meta/object.d.ts +13 -0
  106. package/dist/document-models/vetra-package/gen/meta/object.js +28 -0
  107. package/dist/document-models/vetra-package/gen/meta/operations.d.ts +13 -0
  108. package/dist/document-models/vetra-package/gen/meta/operations.js +1 -0
  109. package/dist/document-models/vetra-package/gen/object.d.ts +14 -0
  110. package/dist/document-models/vetra-package/gen/object.js +25 -0
  111. package/dist/document-models/vetra-package/gen/ph-factories.d.ts +26 -0
  112. package/dist/document-models/vetra-package/gen/ph-factories.js +59 -0
  113. package/dist/document-models/vetra-package/gen/reducer.d.ts +4 -0
  114. package/dist/document-models/vetra-package/gen/reducer.js +48 -0
  115. package/dist/document-models/vetra-package/gen/schema/index.d.ts +2 -0
  116. package/dist/document-models/vetra-package/gen/schema/index.js +2 -0
  117. package/dist/document-models/vetra-package/gen/schema/types.d.ts +187 -0
  118. package/dist/document-models/vetra-package/gen/schema/types.js +1 -0
  119. package/dist/document-models/vetra-package/gen/schema/zod.d.ts +20 -0
  120. package/dist/document-models/vetra-package/gen/schema/zod.js +73 -0
  121. package/dist/document-models/vetra-package/gen/types.d.ts +9 -0
  122. package/dist/document-models/vetra-package/gen/types.js +1 -0
  123. package/dist/document-models/vetra-package/gen/utils.d.ts +21 -0
  124. package/dist/document-models/vetra-package/gen/utils.js +51 -0
  125. package/dist/document-models/vetra-package/index.d.ts +31 -0
  126. package/dist/document-models/vetra-package/index.js +21 -0
  127. package/dist/document-models/vetra-package/src/reducers/meta.d.ts +2 -0
  128. package/dist/document-models/vetra-package/src/reducers/meta.js +34 -0
  129. package/dist/document-models/vetra-package/src/tests/document-model.test.d.ts +5 -0
  130. package/dist/document-models/vetra-package/src/tests/document-model.test.js +18 -0
  131. package/dist/document-models/vetra-package/src/tests/meta.test.d.ts +5 -0
  132. package/dist/document-models/vetra-package/src/tests/meta.test.js +80 -0
  133. package/dist/document-models/vetra-package/src/utils.d.ts +1 -0
  134. package/dist/document-models/vetra-package/src/utils.js +1 -0
  135. package/dist/editors/builder-account-editor/editor.d.ts +3 -0
  136. package/dist/editors/builder-account-editor/editor.js +202 -0
  137. package/dist/editors/builder-account-editor/index.d.ts +3 -0
  138. package/dist/editors/builder-account-editor/index.js +12 -0
  139. package/dist/editors/index.d.ts +2 -0
  140. package/dist/editors/index.js +1 -0
  141. package/dist/index.d.ts +4 -0
  142. package/dist/index.js +6 -0
  143. package/dist/powerhouse.manifest.json +29 -0
  144. package/dist/processors/factory.d.ts +7 -0
  145. package/dist/processors/factory.js +22 -0
  146. package/dist/processors/index.d.ts +2 -0
  147. package/dist/processors/index.js +1 -0
  148. package/dist/processors/vetra-read-model/factory.d.ts +3 -0
  149. package/dist/processors/vetra-read-model/factory.js +22 -0
  150. package/dist/processors/vetra-read-model/index.d.ts +28 -0
  151. package/dist/processors/vetra-read-model/index.js +349 -0
  152. package/dist/processors/vetra-read-model/migrations.d.ts +3 -0
  153. package/dist/processors/vetra-read-model/migrations.js +127 -0
  154. package/dist/processors/vetra-read-model/schema.d.ts +56 -0
  155. package/dist/processors/vetra-read-model/schema.js +1 -0
  156. package/dist/style.css +10598 -0
  157. package/dist/subgraphs/builder-account/index.d.ts +10 -0
  158. package/dist/subgraphs/builder-account/index.js +11 -0
  159. package/dist/subgraphs/builder-account/resolvers.d.ts +2 -0
  160. package/dist/subgraphs/builder-account/resolvers.js +276 -0
  161. package/dist/subgraphs/builder-account/schema.d.ts +2 -0
  162. package/dist/subgraphs/builder-account/schema.js +267 -0
  163. package/dist/subgraphs/index.d.ts +4 -0
  164. package/dist/subgraphs/index.js +3 -0
  165. package/dist/subgraphs/vetra/index.d.ts +10 -0
  166. package/dist/subgraphs/vetra/index.js +11 -0
  167. package/dist/subgraphs/vetra/resolvers.d.ts +2 -0
  168. package/dist/subgraphs/vetra/resolvers.js +10 -0
  169. package/dist/subgraphs/vetra/schema.d.ts +2 -0
  170. package/dist/subgraphs/vetra/schema.js +9 -0
  171. package/dist/subgraphs/vetra-package/index.d.ts +10 -0
  172. package/dist/subgraphs/vetra-package/index.js +11 -0
  173. package/dist/subgraphs/vetra-package/resolvers.d.ts +2 -0
  174. package/dist/subgraphs/vetra-package/resolvers.js +168 -0
  175. package/dist/subgraphs/vetra-package/schema.d.ts +2 -0
  176. package/dist/subgraphs/vetra-package/schema.js +123 -0
  177. package/dist/subgraphs/vetra-read-model/index.d.ts +10 -0
  178. package/dist/subgraphs/vetra-read-model/index.js +11 -0
  179. package/dist/subgraphs/vetra-read-model/resolvers.d.ts +2 -0
  180. package/dist/subgraphs/vetra-read-model/resolvers.js +134 -0
  181. package/dist/subgraphs/vetra-read-model/schema.d.ts +2 -0
  182. package/dist/subgraphs/vetra-read-model/schema.js +69 -0
  183. package/dist/vitest.config.d.ts +2 -0
  184. package/dist/vitest.config.js +8 -0
  185. package/package.json +131 -0
@@ -0,0 +1,349 @@
1
+ import { RelationalDbProcessor } from "document-drive/processors/relational";
2
+ import { up } from "./migrations.js";
3
+ import { generateId } from "document-model";
4
+ export class VetraReadModelProcessor extends RelationalDbProcessor {
5
+ static getNamespace(driveId) {
6
+ // Default namespace: `${this.name}_${driveId.replaceAll("-", "_")}`
7
+ return super.getNamespace(driveId);
8
+ }
9
+ async initAndUpgrade() {
10
+ await up(this.relationalDb);
11
+ }
12
+ async onStrands(strands) {
13
+ if (strands.length === 0) {
14
+ return;
15
+ }
16
+ for (const strand of strands) {
17
+ if (strand.operations.length === 0) {
18
+ continue;
19
+ }
20
+ for (const operation of strand.operations) {
21
+ await this.handleOperation(strand.documentId, operation.action);
22
+ }
23
+ }
24
+ }
25
+ async handleOperation(documentId, action) {
26
+ switch (action.type) {
27
+ // Profile operations
28
+ case "SET_LOGO":
29
+ await this.handleSetLogo(documentId, action);
30
+ break;
31
+ case "SET_PROFILE_NAME":
32
+ await this.handleSetProfileName(documentId, action);
33
+ break;
34
+ case "SET_SLUG":
35
+ await this.handleSetSlug(documentId, action);
36
+ break;
37
+ case "SET_PROFILE_DESCRIPTION":
38
+ await this.handleSetProfileDescription(documentId, action);
39
+ break;
40
+ case "UPDATE_SOCIALS":
41
+ await this.handleUpdateSocials(documentId, action);
42
+ break;
43
+ // Members operations
44
+ case "ADD_MEMBER":
45
+ await this.handleAddMember(documentId, action);
46
+ break;
47
+ case "REMOVE_MEMBER":
48
+ await this.handleRemoveMember(documentId, action);
49
+ break;
50
+ // Spaces operations
51
+ case "ADD_SPACE":
52
+ await this.handleAddSpace(documentId, action);
53
+ break;
54
+ case "DELETE_SPACE":
55
+ await this.handleDeleteSpace(documentId, action);
56
+ break;
57
+ case "SET_SPACE_TITLE":
58
+ await this.handleSetSpaceTitle(documentId, action);
59
+ break;
60
+ case "SET_SPACE_DESCRIPTION":
61
+ await this.handleSetSpaceDescription(documentId, action);
62
+ break;
63
+ case "REORDER_SPACES":
64
+ await this.handleReorderSpaces(documentId, action);
65
+ break;
66
+ // Packages operations
67
+ case "ADD_PACKAGE":
68
+ await this.handleAddPackage(documentId, action);
69
+ break;
70
+ case "SET_PACKAGE_DRIVE_ID":
71
+ await this.handleSetPackageDriveId(documentId, action);
72
+ break;
73
+ case "UPDATE_PACKAGE":
74
+ await this.handleUpdatePackage(documentId, action);
75
+ break;
76
+ case "REORDER_PACKAGES":
77
+ await this.handleReorderPackages(documentId, action);
78
+ break;
79
+ case "DELETE_PACKAGE":
80
+ await this.handleDeletePackage(documentId, action);
81
+ break;
82
+ }
83
+ }
84
+ // Profile operations
85
+ async handleSetLogo(documentId, action) {
86
+ await this.ensureBuilderAccount(documentId);
87
+ await this.relationalDb
88
+ .updateTable("builder_accounts")
89
+ .set({
90
+ profile_logo: action.input.logoUrl,
91
+ updated_at: new Date(),
92
+ })
93
+ .where("id", "=", documentId)
94
+ .execute();
95
+ }
96
+ async handleSetProfileName(documentId, action) {
97
+ await this.ensureBuilderAccount(documentId);
98
+ await this.relationalDb
99
+ .updateTable("builder_accounts")
100
+ .set({
101
+ profile_name: action.input.name,
102
+ updated_at: new Date(),
103
+ })
104
+ .where("id", "=", documentId)
105
+ .execute();
106
+ }
107
+ async handleSetSlug(documentId, action) {
108
+ await this.ensureBuilderAccount(documentId);
109
+ await this.relationalDb
110
+ .updateTable("builder_accounts")
111
+ .set({
112
+ profile_slug: action.input.slug,
113
+ updated_at: new Date(),
114
+ })
115
+ .where("id", "=", documentId)
116
+ .execute();
117
+ }
118
+ async handleSetProfileDescription(documentId, action) {
119
+ await this.ensureBuilderAccount(documentId);
120
+ await this.relationalDb
121
+ .updateTable("builder_accounts")
122
+ .set({
123
+ profile_description: action.input.description,
124
+ updated_at: new Date(),
125
+ })
126
+ .where("id", "=", documentId)
127
+ .execute();
128
+ }
129
+ async handleUpdateSocials(documentId, action) {
130
+ await this.ensureBuilderAccount(documentId);
131
+ await this.relationalDb
132
+ .updateTable("builder_accounts")
133
+ .set({
134
+ profile_socials_x: action.input.x,
135
+ profile_socials_github: action.input.github,
136
+ profile_socials_website: action.input.website,
137
+ updated_at: new Date(),
138
+ })
139
+ .where("id", "=", documentId)
140
+ .execute();
141
+ }
142
+ // Members operations
143
+ async handleAddMember(documentId, action) {
144
+ await this.ensureBuilderAccount(documentId);
145
+ if (!action.input.ethAddress)
146
+ return;
147
+ // Check if member already exists
148
+ const existingMember = await this.relationalDb
149
+ .selectFrom("builder_account_members")
150
+ .select("id")
151
+ .where("builder_account_id", "=", documentId)
152
+ .where("eth_address", "=", action.input.ethAddress)
153
+ .executeTakeFirst();
154
+ if (!existingMember) {
155
+ await this.relationalDb
156
+ .insertInto("builder_account_members")
157
+ .values({
158
+ id: generateId(),
159
+ builder_account_id: documentId,
160
+ eth_address: action.input.ethAddress,
161
+ created_at: new Date(),
162
+ })
163
+ .execute();
164
+ }
165
+ }
166
+ async handleRemoveMember(documentId, action) {
167
+ if (!action.input.ethAddress)
168
+ return;
169
+ await this.relationalDb
170
+ .deleteFrom("builder_account_members")
171
+ .where("builder_account_id", "=", documentId)
172
+ .where("eth_address", "=", action.input.ethAddress)
173
+ .execute();
174
+ }
175
+ // Spaces operations
176
+ async handleAddSpace(documentId, action) {
177
+ await this.ensureBuilderAccount(documentId);
178
+ const spaceId = generateId();
179
+ await this.relationalDb
180
+ .insertInto("builder_spaces")
181
+ .values({
182
+ id: spaceId,
183
+ builder_account_id: documentId,
184
+ title: action.input.title,
185
+ description: action.input.description || null,
186
+ sort_order: 0,
187
+ created_at: new Date(),
188
+ updated_at: new Date(),
189
+ })
190
+ .onConflict((oc) => oc.column("id").doNothing())
191
+ .execute();
192
+ }
193
+ async handleDeleteSpace(documentId, action) {
194
+ await this.relationalDb
195
+ .deleteFrom("builder_spaces")
196
+ .where("id", "=", action.input.id)
197
+ .where("builder_account_id", "=", documentId)
198
+ .execute();
199
+ }
200
+ async handleSetSpaceTitle(documentId, action) {
201
+ await this.relationalDb
202
+ .updateTable("builder_spaces")
203
+ .set({
204
+ title: action.input.newTitle,
205
+ updated_at: new Date(),
206
+ })
207
+ .where("id", "=", action.input.id)
208
+ .where("builder_account_id", "=", documentId)
209
+ .execute();
210
+ }
211
+ async handleSetSpaceDescription(documentId, action) {
212
+ await this.relationalDb
213
+ .updateTable("builder_spaces")
214
+ .set({
215
+ description: action.input.description,
216
+ updated_at: new Date(),
217
+ })
218
+ .where("id", "=", action.input.id)
219
+ .where("builder_account_id", "=", documentId)
220
+ .execute();
221
+ }
222
+ async handleReorderSpaces(documentId, action) {
223
+ const { ids, insertAfter } = action.input;
224
+ for (let i = 0; i < ids.length; i++) {
225
+ const spaceId = ids[i];
226
+ const sortOrder = insertAfter !== null ? Number(insertAfter) + i + 1 : i;
227
+ await this.relationalDb
228
+ .updateTable("builder_spaces")
229
+ .set({
230
+ sort_order: sortOrder,
231
+ updated_at: new Date(),
232
+ })
233
+ .where("id", "=", spaceId)
234
+ .where("builder_account_id", "=", documentId)
235
+ .execute();
236
+ }
237
+ }
238
+ // Packages operations
239
+ async handleAddPackage(documentId, action) {
240
+ const packageId = generateId();
241
+ await this.relationalDb
242
+ .insertInto("builder_packages")
243
+ .values({
244
+ id: packageId,
245
+ space_id: action.input.spaceId,
246
+ name: action.input.name,
247
+ description: action.input.description || null,
248
+ category: action.input.category || null,
249
+ author_name: action.input.author?.name || "",
250
+ author_website: action.input.author?.website || null,
251
+ github_url: action.input.github || null,
252
+ npm_url: action.input.npm || null,
253
+ vetra_drive_url: action.input.vetraDriveUrl || null,
254
+ drive_id: null,
255
+ sort_order: 0,
256
+ created_at: new Date(),
257
+ updated_at: new Date(),
258
+ })
259
+ .onConflict((oc) => oc.column("id").doNothing())
260
+ .execute();
261
+ // Add keywords if provided
262
+ if (action.input.keywords && action.input.keywords.length > 0) {
263
+ for (const keyword of action.input.keywords) {
264
+ await this.relationalDb
265
+ .insertInto("builder_package_keywords")
266
+ .values({
267
+ id: generateId(),
268
+ package_id: packageId,
269
+ label: keyword,
270
+ created_at: new Date(),
271
+ })
272
+ .execute();
273
+ }
274
+ }
275
+ }
276
+ async handleSetPackageDriveId(documentId, action) {
277
+ await this.relationalDb
278
+ .updateTable("builder_packages")
279
+ .set({
280
+ drive_id: action.input.driveId,
281
+ updated_at: new Date(),
282
+ })
283
+ .where("id", "=", action.input.packageId)
284
+ .execute();
285
+ }
286
+ async handleUpdatePackage(documentId, action) {
287
+ const updates = { updated_at: new Date() };
288
+ if (action.input.title !== undefined) {
289
+ updates.name = action.input.title;
290
+ }
291
+ if (action.input.description !== undefined) {
292
+ updates.description = action.input.description;
293
+ }
294
+ await this.relationalDb
295
+ .updateTable("builder_packages")
296
+ .set(updates)
297
+ .where("id", "=", action.input.id)
298
+ .execute();
299
+ }
300
+ async handleReorderPackages(documentId, action) {
301
+ const { ids, insertAfter, spaceId } = action.input;
302
+ for (let i = 0; i < ids.length; i++) {
303
+ const packageId = ids[i];
304
+ const sortOrder = insertAfter !== null ? Number(insertAfter) + i + 1 : i;
305
+ await this.relationalDb
306
+ .updateTable("builder_packages")
307
+ .set({
308
+ sort_order: sortOrder,
309
+ updated_at: new Date(),
310
+ })
311
+ .where("id", "=", packageId)
312
+ .where("space_id", "=", spaceId)
313
+ .execute();
314
+ }
315
+ }
316
+ async handleDeletePackage(documentId, action) {
317
+ await this.relationalDb
318
+ .deleteFrom("builder_packages")
319
+ .where("id", "=", action.input.id)
320
+ .execute();
321
+ }
322
+ // Helper method to ensure builder account exists
323
+ async ensureBuilderAccount(documentId) {
324
+ const existing = await this.relationalDb
325
+ .selectFrom("builder_accounts")
326
+ .select("id")
327
+ .where("id", "=", documentId)
328
+ .executeTakeFirst();
329
+ if (!existing) {
330
+ await this.relationalDb
331
+ .insertInto("builder_accounts")
332
+ .values({
333
+ id: documentId,
334
+ profile_name: "",
335
+ profile_slug: "",
336
+ profile_logo: null,
337
+ profile_description: null,
338
+ profile_socials_x: null,
339
+ profile_socials_github: null,
340
+ profile_socials_website: null,
341
+ created_at: new Date(),
342
+ updated_at: new Date(),
343
+ })
344
+ .onConflict((oc) => oc.column("id").doNothing())
345
+ .execute();
346
+ }
347
+ }
348
+ async onDisconnect() { }
349
+ }
@@ -0,0 +1,3 @@
1
+ import { type IRelationalDb } from "document-drive/processors/types";
2
+ export declare function up(db: IRelationalDb<any>): Promise<void>;
3
+ export declare function down(db: IRelationalDb<any>): Promise<void>;
@@ -0,0 +1,127 @@
1
+ export async function up(db) {
2
+ // Create builder_accounts table
3
+ await db.schema
4
+ .createTable("builder_accounts")
5
+ .addColumn("id", "varchar(255)", (col) => col.primaryKey())
6
+ .addColumn("profile_name", "varchar(255)", (col) => col.notNull())
7
+ .addColumn("profile_slug", "varchar(255)", (col) => col.notNull())
8
+ .addColumn("profile_logo", "text")
9
+ .addColumn("profile_description", "text")
10
+ .addColumn("profile_socials_x", "text")
11
+ .addColumn("profile_socials_github", "text")
12
+ .addColumn("profile_socials_website", "text")
13
+ .addColumn("created_at", "timestamp", (col) => col.defaultTo("now()").notNull())
14
+ .addColumn("updated_at", "timestamp", (col) => col.defaultTo("now()").notNull())
15
+ .ifNotExists()
16
+ .execute();
17
+ // Create builder_account_members table
18
+ await db.schema
19
+ .createTable("builder_account_members")
20
+ .addColumn("id", "varchar(255)", (col) => col.primaryKey())
21
+ .addColumn("builder_account_id", "varchar(255)", (col) => col.notNull())
22
+ .addColumn("eth_address", "varchar(42)", (col) => col.notNull()) // Ethereum addresses are 42 chars
23
+ .addColumn("created_at", "timestamp", (col) => col.defaultTo("now()").notNull())
24
+ .addForeignKeyConstraint("builder_account_members_account_fk", ["builder_account_id"], "builder_accounts", ["id"], (cb) => cb.onDelete("cascade"))
25
+ .ifNotExists()
26
+ .execute();
27
+ // Create builder_spaces table
28
+ await db.schema
29
+ .createTable("builder_spaces")
30
+ .addColumn("id", "varchar(255)", (col) => col.primaryKey())
31
+ .addColumn("builder_account_id", "varchar(255)", (col) => col.notNull())
32
+ .addColumn("title", "varchar(255)", (col) => col.notNull())
33
+ .addColumn("description", "text")
34
+ .addColumn("sort_order", "integer", (col) => col.defaultTo(0).notNull())
35
+ .addColumn("created_at", "timestamp", (col) => col.defaultTo("now()").notNull())
36
+ .addColumn("updated_at", "timestamp", (col) => col.defaultTo("now()").notNull())
37
+ .addForeignKeyConstraint("builder_spaces_account_fk", ["builder_account_id"], "builder_accounts", ["id"], (cb) => cb.onDelete("cascade"))
38
+ .ifNotExists()
39
+ .execute();
40
+ // Create builder_packages table
41
+ await db.schema
42
+ .createTable("builder_packages")
43
+ .addColumn("id", "varchar(255)", (col) => col.primaryKey())
44
+ .addColumn("space_id", "varchar(255)", (col) => col.notNull())
45
+ .addColumn("name", "varchar(255)", (col) => col.notNull())
46
+ .addColumn("description", "text")
47
+ .addColumn("category", "varchar(255)")
48
+ .addColumn("author_name", "varchar(255)", (col) => col.notNull())
49
+ .addColumn("author_website", "text")
50
+ .addColumn("github_url", "text")
51
+ .addColumn("npm_url", "text")
52
+ .addColumn("vetra_drive_url", "text")
53
+ .addColumn("drive_id", "varchar(255)") // For SetPackageDriveId operation
54
+ .addColumn("sort_order", "integer", (col) => col.defaultTo(0).notNull())
55
+ .addColumn("created_at", "timestamp", (col) => col.defaultTo("now()").notNull())
56
+ .addColumn("updated_at", "timestamp", (col) => col.defaultTo("now()").notNull())
57
+ .addForeignKeyConstraint("builder_packages_space_fk", ["space_id"], "builder_spaces", ["id"], (cb) => cb.onDelete("cascade"))
58
+ .ifNotExists()
59
+ .execute();
60
+ // Create builder_package_keywords table
61
+ await db.schema
62
+ .createTable("builder_package_keywords")
63
+ .addColumn("id", "varchar(255)", (col) => col.primaryKey())
64
+ .addColumn("package_id", "varchar(255)", (col) => col.notNull())
65
+ .addColumn("label", "varchar(255)", (col) => col.notNull())
66
+ .addColumn("created_at", "timestamp", (col) => col.defaultTo("now()").notNull())
67
+ .addForeignKeyConstraint("builder_package_keywords_package_fk", ["package_id"], "builder_packages", ["id"], (cb) => cb.onDelete("cascade"))
68
+ .ifNotExists()
69
+ .execute();
70
+ // Create indexes for better performance
71
+ await db.schema
72
+ .createIndex("idx_builder_accounts_slug")
73
+ .on("builder_accounts")
74
+ .column("profile_slug")
75
+ .ifNotExists()
76
+ .execute();
77
+ await db.schema
78
+ .createIndex("idx_builder_account_members_account")
79
+ .on("builder_account_members")
80
+ .column("builder_account_id")
81
+ .ifNotExists()
82
+ .execute();
83
+ await db.schema
84
+ .createIndex("idx_builder_account_members_eth_address")
85
+ .on("builder_account_members")
86
+ .column("eth_address")
87
+ .ifNotExists()
88
+ .execute();
89
+ await db.schema
90
+ .createIndex("idx_builder_spaces_account")
91
+ .on("builder_spaces")
92
+ .column("builder_account_id")
93
+ .ifNotExists()
94
+ .execute();
95
+ await db.schema
96
+ .createIndex("idx_builder_spaces_sort_order")
97
+ .on("builder_spaces")
98
+ .column("sort_order")
99
+ .ifNotExists()
100
+ .execute();
101
+ await db.schema
102
+ .createIndex("idx_builder_packages_space")
103
+ .on("builder_packages")
104
+ .column("space_id")
105
+ .ifNotExists()
106
+ .execute();
107
+ await db.schema
108
+ .createIndex("idx_builder_packages_sort_order")
109
+ .on("builder_packages")
110
+ .column("sort_order")
111
+ .ifNotExists()
112
+ .execute();
113
+ await db.schema
114
+ .createIndex("idx_builder_package_keywords_package")
115
+ .on("builder_package_keywords")
116
+ .column("package_id")
117
+ .ifNotExists()
118
+ .execute();
119
+ }
120
+ export async function down(db) {
121
+ // Drop tables in reverse order due to foreign key constraints
122
+ await db.schema.dropTable("builder_package_keywords").ifExists().execute();
123
+ await db.schema.dropTable("builder_packages").ifExists().execute();
124
+ await db.schema.dropTable("builder_spaces").ifExists().execute();
125
+ await db.schema.dropTable("builder_account_members").ifExists().execute();
126
+ await db.schema.dropTable("builder_accounts").ifExists().execute();
127
+ }
@@ -0,0 +1,56 @@
1
+ export interface BuilderAccount {
2
+ id: string;
3
+ profile_name: string;
4
+ profile_slug: string;
5
+ profile_logo: string | null;
6
+ profile_description: string | null;
7
+ profile_socials_x: string | null;
8
+ profile_socials_github: string | null;
9
+ profile_socials_website: string | null;
10
+ created_at: Date;
11
+ updated_at: Date;
12
+ }
13
+ export interface BuilderAccountMember {
14
+ id: string;
15
+ builder_account_id: string;
16
+ eth_address: string;
17
+ created_at: Date;
18
+ }
19
+ export interface BuilderSpace {
20
+ id: string;
21
+ builder_account_id: string;
22
+ title: string;
23
+ description: string | null;
24
+ sort_order: number;
25
+ created_at: Date;
26
+ updated_at: Date;
27
+ }
28
+ export interface BuilderPackage {
29
+ id: string;
30
+ space_id: string;
31
+ name: string;
32
+ description: string | null;
33
+ category: string | null;
34
+ author_name: string;
35
+ author_website: string | null;
36
+ github_url: string | null;
37
+ npm_url: string | null;
38
+ vetra_drive_url: string | null;
39
+ drive_id: string | null;
40
+ sort_order: number;
41
+ created_at: Date;
42
+ updated_at: Date;
43
+ }
44
+ export interface BuilderPackageKeyword {
45
+ id: string;
46
+ package_id: string;
47
+ label: string;
48
+ created_at: Date;
49
+ }
50
+ export interface DB {
51
+ builder_accounts: BuilderAccount;
52
+ builder_account_members: BuilderAccountMember;
53
+ builder_spaces: BuilderSpace;
54
+ builder_packages: BuilderPackage;
55
+ builder_package_keywords: BuilderPackageKeyword;
56
+ }
@@ -0,0 +1 @@
1
+ export {};