@cat-factory/node-server 0.95.2 → 0.96.1

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 (52) hide show
  1. package/dist/container.d.ts.map +1 -1
  2. package/dist/container.js +16 -5
  3. package/dist/container.js.map +1 -1
  4. package/dist/repositories/drizzle/_shared.d.ts +2 -0
  5. package/dist/repositories/drizzle/_shared.d.ts.map +1 -0
  6. package/dist/repositories/drizzle/_shared.js +11 -0
  7. package/dist/repositories/drizzle/_shared.js.map +1 -0
  8. package/dist/repositories/drizzle/accounts.d.ts +62 -0
  9. package/dist/repositories/drizzle/accounts.d.ts.map +1 -0
  10. package/dist/repositories/drizzle/accounts.js +438 -0
  11. package/dist/repositories/drizzle/accounts.js.map +1 -0
  12. package/dist/repositories/drizzle/board.d.ts +74 -0
  13. package/dist/repositories/drizzle/board.d.ts.map +1 -0
  14. package/dist/repositories/drizzle/board.js +489 -0
  15. package/dist/repositories/drizzle/board.js.map +1 -0
  16. package/dist/repositories/drizzle/connections.d.ts +84 -0
  17. package/dist/repositories/drizzle/connections.d.ts.map +1 -0
  18. package/dist/repositories/drizzle/connections.js +391 -0
  19. package/dist/repositories/drizzle/connections.js.map +1 -0
  20. package/dist/repositories/drizzle/execution.d.ts +58 -0
  21. package/dist/repositories/drizzle/execution.d.ts.map +1 -0
  22. package/dist/repositories/drizzle/execution.js +585 -0
  23. package/dist/repositories/drizzle/execution.js.map +1 -0
  24. package/dist/repositories/drizzle/initiatives.d.ts +54 -0
  25. package/dist/repositories/drizzle/initiatives.d.ts.map +1 -0
  26. package/dist/repositories/drizzle/initiatives.js +343 -0
  27. package/dist/repositories/drizzle/initiatives.js.map +1 -0
  28. package/dist/repositories/drizzle/kaizen.d.ts +34 -0
  29. package/dist/repositories/drizzle/kaizen.d.ts.map +1 -0
  30. package/dist/repositories/drizzle/kaizen.js +192 -0
  31. package/dist/repositories/drizzle/kaizen.js.map +1 -0
  32. package/dist/repositories/drizzle/reviews.d.ts +75 -0
  33. package/dist/repositories/drizzle/reviews.d.ts.map +1 -0
  34. package/dist/repositories/drizzle/reviews.js +449 -0
  35. package/dist/repositories/drizzle/reviews.js.map +1 -0
  36. package/dist/repositories/drizzle/sandbox.d.ts +61 -0
  37. package/dist/repositories/drizzle/sandbox.d.ts.map +1 -0
  38. package/dist/repositories/drizzle/sandbox.js +370 -0
  39. package/dist/repositories/drizzle/sandbox.js.map +1 -0
  40. package/dist/repositories/drizzle/settings.d.ts +76 -0
  41. package/dist/repositories/drizzle/settings.d.ts.map +1 -0
  42. package/dist/repositories/drizzle/settings.js +377 -0
  43. package/dist/repositories/drizzle/settings.js.map +1 -0
  44. package/dist/repositories/drizzle/telemetry.d.ts +60 -0
  45. package/dist/repositories/drizzle/telemetry.d.ts.map +1 -0
  46. package/dist/repositories/drizzle/telemetry.js +559 -0
  47. package/dist/repositories/drizzle/telemetry.js.map +1 -0
  48. package/dist/repositories/drizzle.d.ts +6 -113
  49. package/dist/repositories/drizzle.d.ts.map +1 -1
  50. package/dist/repositories/drizzle.js +20 -4118
  51. package/dist/repositories/drizzle.js.map +1 -1
  52. package/package.json +7 -7
@@ -0,0 +1,438 @@
1
+ // Drizzle/Postgres implementations of the core kernel repository ports, split by
2
+ // domain (mirrors the Cloudflare D1 per-repository layout). The row<->domain mapping
3
+ // is the SAME shared mapping the D1 repos use (@cat-factory/server), so behaviour
4
+ // matches across stores; this layer only owns the Drizzle queries. Assembled into the
5
+ // CoreRepositories set by ./drizzle.ts (the barrel).
6
+ import { and, desc, eq, inArray, isNull, lt } from 'drizzle-orm';
7
+ import { accountInvitations, accounts, emailConnections, memberships, passwordResetTokens, userIdentities, users, } from '../../db/schema.js';
8
+ function rowToAccount(row) {
9
+ return {
10
+ id: row.id,
11
+ type: row.type === 'org' ? 'org' : 'personal',
12
+ name: row.name,
13
+ githubAccountLogin: row.github_account_login,
14
+ ownerUserId: row.owner_user_id,
15
+ createdAt: row.created_at,
16
+ ...(row.default_cloud_provider
17
+ ? { defaultCloudProvider: row.default_cloud_provider }
18
+ : {}),
19
+ ...(row.spend_monthly_limit != null ? { spendMonthlyLimit: row.spend_monthly_limit } : {}),
20
+ };
21
+ }
22
+ export class DrizzleAccountRepository {
23
+ db;
24
+ constructor(db) {
25
+ this.db = db;
26
+ }
27
+ async get(id) {
28
+ const [row] = await this.db.select().from(accounts).where(eq(accounts.id, id));
29
+ return row ? rowToAccount(row) : null;
30
+ }
31
+ async listByIds(ids) {
32
+ if (ids.length === 0)
33
+ return [];
34
+ const out = [];
35
+ // Chunk the IN list to stay well under the bind-parameter limit.
36
+ for (let i = 0; i < ids.length; i += 500) {
37
+ const rows = await this.db
38
+ .select()
39
+ .from(accounts)
40
+ .where(inArray(accounts.id, ids.slice(i, i + 500)));
41
+ for (const row of rows)
42
+ out.push(rowToAccount(row));
43
+ }
44
+ return out;
45
+ }
46
+ async create(account) {
47
+ await this.db.insert(accounts).values({
48
+ id: account.id,
49
+ type: account.type,
50
+ name: account.name,
51
+ github_account_login: account.githubAccountLogin,
52
+ owner_user_id: account.ownerUserId,
53
+ created_at: account.createdAt,
54
+ default_cloud_provider: account.defaultCloudProvider ?? null,
55
+ spend_monthly_limit: account.spendMonthlyLimit ?? null,
56
+ });
57
+ }
58
+ async ensurePersonal(account) {
59
+ // Atomic get-or-create: `ON CONFLICT DO NOTHING` no-ops when a personal account already
60
+ // exists for this owner (the partial unique index `idx_accounts_personal` arbitrates), so
61
+ // concurrent first-sign-in callers converge on the one surviving row instead of racing to
62
+ // a duplicate-key error. Re-select to return whichever row won.
63
+ await this.db
64
+ .insert(accounts)
65
+ .values({
66
+ id: account.id,
67
+ type: account.type,
68
+ name: account.name,
69
+ github_account_login: account.githubAccountLogin,
70
+ owner_user_id: account.ownerUserId,
71
+ created_at: account.createdAt,
72
+ default_cloud_provider: account.defaultCloudProvider ?? null,
73
+ spend_monthly_limit: account.spendMonthlyLimit ?? null,
74
+ })
75
+ .onConflictDoNothing();
76
+ const row = await this.findPersonalByUser(account.ownerUserId ?? '');
77
+ if (!row) {
78
+ throw new Error(`ensurePersonal: personal account missing after insert for ${account.ownerUserId}`);
79
+ }
80
+ return row;
81
+ }
82
+ async rename(id, name) {
83
+ await this.db.update(accounts).set({ name }).where(eq(accounts.id, id));
84
+ }
85
+ async updateSettings(id, patch) {
86
+ const set = {};
87
+ if ('defaultCloudProvider' in patch) {
88
+ set.default_cloud_provider = patch.defaultCloudProvider ?? null;
89
+ }
90
+ if ('spendMonthlyLimit' in patch) {
91
+ set.spend_monthly_limit = patch.spendMonthlyLimit ?? null;
92
+ }
93
+ if (Object.keys(set).length === 0)
94
+ return;
95
+ await this.db.update(accounts).set(set).where(eq(accounts.id, id));
96
+ }
97
+ async findPersonalByUser(userId) {
98
+ const [row] = await this.db
99
+ .select()
100
+ .from(accounts)
101
+ .where(and(eq(accounts.type, 'personal'), eq(accounts.owner_user_id, userId)));
102
+ return row ? rowToAccount(row) : null;
103
+ }
104
+ }
105
+ /** Parse the CSV `roles` column into a non-empty role set (defaults to developer). */
106
+ function parseRoles(csv) {
107
+ const roles = (csv ?? '')
108
+ .split(',')
109
+ .map((r) => r.trim())
110
+ .filter((r) => r === 'admin' || r === 'developer' || r === 'product');
111
+ return roles.length > 0 ? [...new Set(roles)] : ['developer'];
112
+ }
113
+ function rowToMembership(row) {
114
+ return {
115
+ accountId: row.account_id,
116
+ userId: row.user_id,
117
+ roles: parseRoles(row.roles),
118
+ createdAt: row.created_at,
119
+ };
120
+ }
121
+ export class DrizzleMembershipRepository {
122
+ db;
123
+ constructor(db) {
124
+ this.db = db;
125
+ }
126
+ async listByUser(userId) {
127
+ const rows = await this.db
128
+ .select()
129
+ .from(memberships)
130
+ .where(eq(memberships.user_id, userId))
131
+ .orderBy(memberships.created_at);
132
+ return rows.map(rowToMembership);
133
+ }
134
+ async listByAccount(accountId) {
135
+ const rows = await this.db
136
+ .select()
137
+ .from(memberships)
138
+ .where(eq(memberships.account_id, accountId))
139
+ .orderBy(memberships.created_at);
140
+ return rows.map(rowToMembership);
141
+ }
142
+ async get(accountId, userId) {
143
+ const [row] = await this.db
144
+ .select()
145
+ .from(memberships)
146
+ .where(and(eq(memberships.account_id, accountId), eq(memberships.user_id, userId)));
147
+ return row ? rowToMembership(row) : null;
148
+ }
149
+ async upsert(membership) {
150
+ await this.db
151
+ .insert(memberships)
152
+ .values({
153
+ account_id: membership.accountId,
154
+ user_id: membership.userId,
155
+ roles: membership.roles.join(','),
156
+ created_at: membership.createdAt,
157
+ })
158
+ .onConflictDoUpdate({
159
+ target: [memberships.account_id, memberships.user_id],
160
+ set: { roles: membership.roles.join(',') },
161
+ });
162
+ }
163
+ async remove(accountId, userId) {
164
+ await this.db
165
+ .delete(memberships)
166
+ .where(and(eq(memberships.account_id, accountId), eq(memberships.user_id, userId)));
167
+ }
168
+ }
169
+ function rowToUser(row) {
170
+ return {
171
+ id: row.id,
172
+ name: row.name,
173
+ email: row.email,
174
+ avatarUrl: row.avatar_url,
175
+ createdAt: row.created_at,
176
+ };
177
+ }
178
+ function rowToIdentity(row) {
179
+ return {
180
+ userId: row.user_id,
181
+ provider: row.provider,
182
+ subject: row.subject,
183
+ secret: row.secret,
184
+ metadata: row.metadata,
185
+ createdAt: row.created_at,
186
+ };
187
+ }
188
+ export class DrizzleUserRepository {
189
+ db;
190
+ constructor(db) {
191
+ this.db = db;
192
+ }
193
+ async get(id) {
194
+ const [row] = await this.db.select().from(users).where(eq(users.id, id));
195
+ return row ? rowToUser(row) : null;
196
+ }
197
+ async create(user) {
198
+ await this.db.insert(users).values({
199
+ id: user.id,
200
+ name: user.name,
201
+ email: user.email,
202
+ avatar_url: user.avatarUrl,
203
+ created_at: user.createdAt,
204
+ });
205
+ }
206
+ async update(id, patch) {
207
+ const set = {};
208
+ if ('name' in patch)
209
+ set.name = patch.name;
210
+ if ('email' in patch)
211
+ set.email = patch.email;
212
+ if ('avatarUrl' in patch)
213
+ set.avatar_url = patch.avatarUrl;
214
+ if (Object.keys(set).length === 0)
215
+ return;
216
+ await this.db.update(users).set(set).where(eq(users.id, id));
217
+ }
218
+ async findByIdentity(provider, subject) {
219
+ const [row] = await this.db
220
+ .select()
221
+ .from(users)
222
+ .innerJoin(userIdentities, eq(userIdentities.user_id, users.id))
223
+ .where(and(eq(userIdentities.provider, provider), eq(userIdentities.subject, subject)));
224
+ return row ? rowToUser(row.users) : null;
225
+ }
226
+ async findByEmail(email) {
227
+ const [row] = await this.db
228
+ .select()
229
+ .from(users)
230
+ .where(eq(users.email, email.toLowerCase().trim()));
231
+ return row ? rowToUser(row) : null;
232
+ }
233
+ async listByIds(ids) {
234
+ if (ids.length === 0)
235
+ return [];
236
+ const rows = await this.db.select().from(users).where(inArray(users.id, ids));
237
+ return rows.map(rowToUser);
238
+ }
239
+ async getIdentity(provider, subject) {
240
+ const [row] = await this.db
241
+ .select()
242
+ .from(userIdentities)
243
+ .where(and(eq(userIdentities.provider, provider), eq(userIdentities.subject, subject)));
244
+ return row ? rowToIdentity(row) : null;
245
+ }
246
+ async linkIdentity(identity) {
247
+ await this.db
248
+ .insert(userIdentities)
249
+ .values({
250
+ user_id: identity.userId,
251
+ provider: identity.provider,
252
+ subject: identity.subject,
253
+ secret: identity.secret,
254
+ metadata: identity.metadata,
255
+ created_at: identity.createdAt,
256
+ })
257
+ .onConflictDoUpdate({
258
+ target: [userIdentities.provider, userIdentities.subject],
259
+ set: { user_id: identity.userId, secret: identity.secret, metadata: identity.metadata },
260
+ });
261
+ }
262
+ async listIdentities(userId) {
263
+ const rows = await this.db
264
+ .select()
265
+ .from(userIdentities)
266
+ .where(eq(userIdentities.user_id, userId));
267
+ return rows.map(rowToIdentity);
268
+ }
269
+ }
270
+ function rowToInvitation(row) {
271
+ return {
272
+ id: row.id,
273
+ accountId: row.account_id,
274
+ email: row.email,
275
+ roles: parseRoles(row.roles),
276
+ tokenHash: row.token_hash,
277
+ invitedBy: row.invited_by,
278
+ status: row.status,
279
+ expiresAt: row.expires_at,
280
+ createdAt: row.created_at,
281
+ };
282
+ }
283
+ export class DrizzleAccountInvitationRepository {
284
+ db;
285
+ constructor(db) {
286
+ this.db = db;
287
+ }
288
+ async create(record) {
289
+ await this.db.insert(accountInvitations).values({
290
+ id: record.id,
291
+ account_id: record.accountId,
292
+ email: record.email,
293
+ roles: record.roles.join(','),
294
+ token_hash: record.tokenHash,
295
+ invited_by: record.invitedBy,
296
+ status: record.status,
297
+ expires_at: record.expiresAt,
298
+ created_at: record.createdAt,
299
+ });
300
+ }
301
+ async get(id) {
302
+ const [row] = await this.db
303
+ .select()
304
+ .from(accountInvitations)
305
+ .where(eq(accountInvitations.id, id));
306
+ return row ? rowToInvitation(row) : null;
307
+ }
308
+ async findByTokenHash(tokenHash) {
309
+ const [row] = await this.db
310
+ .select()
311
+ .from(accountInvitations)
312
+ .where(eq(accountInvitations.token_hash, tokenHash));
313
+ return row ? rowToInvitation(row) : null;
314
+ }
315
+ async listByAccount(accountId) {
316
+ const rows = await this.db
317
+ .select()
318
+ .from(accountInvitations)
319
+ .where(eq(accountInvitations.account_id, accountId))
320
+ .orderBy(desc(accountInvitations.created_at));
321
+ return rows.map(rowToInvitation);
322
+ }
323
+ async setStatus(id, status) {
324
+ await this.db.update(accountInvitations).set({ status }).where(eq(accountInvitations.id, id));
325
+ }
326
+ }
327
+ function rowToPasswordResetToken(row) {
328
+ return {
329
+ id: row.id,
330
+ userId: row.user_id,
331
+ tokenHash: row.token_hash,
332
+ status: row.status,
333
+ expiresAt: row.expires_at,
334
+ createdAt: row.created_at,
335
+ };
336
+ }
337
+ export class DrizzlePasswordResetTokenRepository {
338
+ db;
339
+ constructor(db) {
340
+ this.db = db;
341
+ }
342
+ async create(record) {
343
+ await this.db.insert(passwordResetTokens).values({
344
+ id: record.id,
345
+ user_id: record.userId,
346
+ token_hash: record.tokenHash,
347
+ status: record.status,
348
+ expires_at: record.expiresAt,
349
+ created_at: record.createdAt,
350
+ });
351
+ }
352
+ async findByTokenHash(tokenHash) {
353
+ const [row] = await this.db
354
+ .select()
355
+ .from(passwordResetTokens)
356
+ .where(eq(passwordResetTokens.token_hash, tokenHash));
357
+ return row ? rowToPasswordResetToken(row) : null;
358
+ }
359
+ async listPendingByUser(userId) {
360
+ const rows = await this.db
361
+ .select()
362
+ .from(passwordResetTokens)
363
+ .where(and(eq(passwordResetTokens.user_id, userId), eq(passwordResetTokens.status, 'pending')))
364
+ .orderBy(desc(passwordResetTokens.created_at));
365
+ return rows.map(rowToPasswordResetToken);
366
+ }
367
+ async setStatus(id, status) {
368
+ await this.db.update(passwordResetTokens).set({ status }).where(eq(passwordResetTokens.id, id));
369
+ }
370
+ async consume(id) {
371
+ // Conditional on `status='pending'` so concurrent redemptions can't both win.
372
+ const result = await this.db
373
+ .update(passwordResetTokens)
374
+ .set({ status: 'used' })
375
+ .where(and(eq(passwordResetTokens.id, id), eq(passwordResetTokens.status, 'pending')));
376
+ return (result.rowCount ?? 0) > 0;
377
+ }
378
+ async deleteExpired(before) {
379
+ const result = await this.db
380
+ .delete(passwordResetTokens)
381
+ .where(lt(passwordResetTokens.expires_at, before));
382
+ return result.rowCount ?? 0;
383
+ }
384
+ }
385
+ function rowToEmailConnection(row) {
386
+ return {
387
+ accountId: row.account_id,
388
+ provider: row.provider,
389
+ fromAddress: row.from_address,
390
+ apiKeyCipher: row.api_key_cipher,
391
+ createdAt: row.created_at,
392
+ updatedAt: row.updated_at,
393
+ deletedAt: row.deleted_at,
394
+ };
395
+ }
396
+ export class DrizzleEmailConnectionRepository {
397
+ db;
398
+ constructor(db) {
399
+ this.db = db;
400
+ }
401
+ async getByAccount(accountId) {
402
+ const [row] = await this.db
403
+ .select()
404
+ .from(emailConnections)
405
+ .where(and(eq(emailConnections.account_id, accountId), isNull(emailConnections.deleted_at)));
406
+ return row ? rowToEmailConnection(row) : null;
407
+ }
408
+ async upsert(record) {
409
+ await this.db
410
+ .insert(emailConnections)
411
+ .values({
412
+ account_id: record.accountId,
413
+ provider: record.provider,
414
+ from_address: record.fromAddress,
415
+ api_key_cipher: record.apiKeyCipher,
416
+ created_at: record.createdAt,
417
+ updated_at: record.updatedAt,
418
+ deleted_at: record.deletedAt,
419
+ })
420
+ .onConflictDoUpdate({
421
+ target: emailConnections.account_id,
422
+ set: {
423
+ provider: record.provider,
424
+ from_address: record.fromAddress,
425
+ api_key_cipher: record.apiKeyCipher,
426
+ updated_at: record.updatedAt,
427
+ deleted_at: record.deletedAt,
428
+ },
429
+ });
430
+ }
431
+ async softDelete(accountId, at) {
432
+ await this.db
433
+ .update(emailConnections)
434
+ .set({ deleted_at: at, updated_at: at })
435
+ .where(eq(emailConnections.account_id, accountId));
436
+ }
437
+ }
438
+ //# sourceMappingURL=accounts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../../src/repositories/drizzle/accounts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import type { Block, BlockPatch, BlockRepository, Service, ServiceFragmentDefaultsRepository, ServicePatch, ServiceRehome, ServiceRepository, Workspace, WorkspaceMount, WorkspaceMountPatch, WorkspaceMountRepository, WorkspaceRepository, WorkspaceVisibility } from '@cat-factory/kernel';
2
+ import type { DrizzleDb } from '../../db/client.js';
3
+ export declare class DrizzleWorkspaceRepository implements WorkspaceRepository {
4
+ private readonly db;
5
+ constructor(db: DrizzleDb);
6
+ listVisible(scope: WorkspaceVisibility): Promise<Workspace[]>;
7
+ get(id: string): Promise<Workspace | null>;
8
+ ownerOf(id: string): Promise<string | null | undefined>;
9
+ accountOf(id: string): Promise<string | null | undefined>;
10
+ create(workspace: Workspace, ownerUserId: string | null, accountId: string | null): Promise<void>;
11
+ rename(id: string, name: string): Promise<void>;
12
+ setDescription(id: string, description: string | null): Promise<void>;
13
+ delete(id: string, rehome?: ServiceRehome[]): Promise<void>;
14
+ }
15
+ export declare class DrizzleBlockRepository implements BlockRepository {
16
+ private readonly db;
17
+ constructor(db: DrizzleDb);
18
+ listByWorkspace(workspaceId: string): Promise<Block[]>;
19
+ listByService(serviceId: string): Promise<Block[]>;
20
+ listByServices(serviceIds: string[]): Promise<Block[]>;
21
+ get(workspaceId: string, id: string): Promise<Block | null>;
22
+ findById(blockId: string): Promise<{
23
+ workspaceId: string;
24
+ serviceId: string | null;
25
+ block: Block;
26
+ } | null>;
27
+ findByIds(blockIds: string[]): Promise<Array<{
28
+ workspaceId: string;
29
+ serviceId: string | null;
30
+ block: Block;
31
+ }>>;
32
+ insert(workspaceId: string, block: Block, serviceId?: string | null): Promise<void>;
33
+ update(workspaceId: string, id: string, patch: BlockPatch): Promise<void>;
34
+ setService(workspaceId: string, ids: string[], serviceId: string | null): Promise<void>;
35
+ deleteMany(workspaceId: string, ids: string[]): Promise<void>;
36
+ countActiveInternal(workspaceId: string): Promise<number>;
37
+ }
38
+ export declare class DrizzleServiceFragmentDefaultsRepository implements ServiceFragmentDefaultsRepository {
39
+ private readonly db;
40
+ constructor(db: DrizzleDb);
41
+ get(workspaceId: string): Promise<string[]>;
42
+ set(workspaceId: string, fragmentIds: string[]): Promise<void>;
43
+ }
44
+ /** Account-owned services (migration 0030). The canonical, shareable board unit. */
45
+ export declare class DrizzleServiceRepository implements ServiceRepository {
46
+ private readonly db;
47
+ constructor(db: DrizzleDb);
48
+ get(id: string): Promise<Service | null>;
49
+ getByFrameBlock(frameBlockId: string): Promise<Service | null>;
50
+ listByFrameBlocks(frameBlockIds: string[]): Promise<Service[]>;
51
+ listByAccount(accountId: string | null): Promise<Service[]>;
52
+ listByIds(ids: string[]): Promise<Service[]>;
53
+ getByRepo(installationId: number, repoGithubId: number): Promise<Service | null>;
54
+ insert(service: Service): Promise<void>;
55
+ update(id: string, patch: ServicePatch): Promise<void>;
56
+ delete(id: string): Promise<void>;
57
+ deleteMany(ids: string[]): Promise<void>;
58
+ }
59
+ /** A service mounted onto a workspace board + its per-workspace layout (migration 0030). */
60
+ export declare class DrizzleWorkspaceMountRepository implements WorkspaceMountRepository {
61
+ private readonly db;
62
+ constructor(db: DrizzleDb);
63
+ listByWorkspace(workspaceId: string): Promise<WorkspaceMount[]>;
64
+ listByService(serviceId: string): Promise<WorkspaceMount[]>;
65
+ listByServiceIds(serviceIds: string[]): Promise<WorkspaceMount[]>;
66
+ listWorkspaceIdsMountingBlock(originWorkspaceId: string, blockId: string): Promise<string[]>;
67
+ countByServiceIds(serviceIds: string[]): Promise<Record<string, number>>;
68
+ get(workspaceId: string, serviceId: string): Promise<WorkspaceMount | null>;
69
+ upsert(mount: WorkspaceMount): Promise<void>;
70
+ update(workspaceId: string, serviceId: string, patch: WorkspaceMountPatch): Promise<void>;
71
+ remove(workspaceId: string, serviceId: string): Promise<void>;
72
+ removeByServices(serviceIds: string[]): Promise<void>;
73
+ }
74
+ //# sourceMappingURL=board.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board.d.ts","sourceRoot":"","sources":["../../../src/repositories/drizzle/board.ts"],"names":[],"mappings":"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"}