@pipeline-builder/pipeline-data 0.0.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 (48) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +61 -0
  3. package/drizzle.config.ts +17 -0
  4. package/lib/api/access-control-builder.d.ts +148 -0
  5. package/lib/api/access-control-builder.js +199 -0
  6. package/lib/api/crud-service.d.ts +343 -0
  7. package/lib/api/crud-service.js +849 -0
  8. package/lib/api/query-builders.d.ts +82 -0
  9. package/lib/api/query-builders.js +460 -0
  10. package/lib/api/reporting-service.d.ts +685 -0
  11. package/lib/api/reporting-service.js +1564 -0
  12. package/lib/api/soft-delete-sweep.d.ts +65 -0
  13. package/lib/api/soft-delete-sweep.js +124 -0
  14. package/lib/api/viewer-context.d.ts +29 -0
  15. package/lib/api/viewer-context.js +63 -0
  16. package/lib/core/query-filters.d.ts +263 -0
  17. package/lib/core/query-filters.js +4 -0
  18. package/lib/database/drizzle-schema.d.ts +7357 -0
  19. package/lib/database/drizzle-schema.js +66 -0
  20. package/lib/database/index.d.ts +5 -0
  21. package/lib/database/index.js +8 -0
  22. package/lib/database/migrator.d.ts +20 -0
  23. package/lib/database/migrator.js +80 -0
  24. package/lib/database/postgres-connection.d.ts +201 -0
  25. package/lib/database/postgres-connection.js +413 -0
  26. package/lib/database/retry-strategy.d.ts +68 -0
  27. package/lib/database/retry-strategy.js +122 -0
  28. package/lib/database/schema/alert.d.ts +588 -0
  29. package/lib/database/schema/alert.js +130 -0
  30. package/lib/database/schema/compliance.d.ts +3319 -0
  31. package/lib/database/schema/compliance.js +377 -0
  32. package/lib/database/schema/dashboard.d.ts +474 -0
  33. package/lib/database/schema/dashboard.js +129 -0
  34. package/lib/database/schema/message-attachment.d.ts +183 -0
  35. package/lib/database/schema/message-attachment.js +40 -0
  36. package/lib/database/schema/message.d.ts +411 -0
  37. package/lib/database/schema/message.js +114 -0
  38. package/lib/database/schema/pipeline-template.d.ts +466 -0
  39. package/lib/database/schema/pipeline-template.js +80 -0
  40. package/lib/database/schema/pipeline.d.ts +1613 -0
  41. package/lib/database/schema/pipeline.js +332 -0
  42. package/lib/database/schema/plugin.d.ts +749 -0
  43. package/lib/database/schema/plugin.js +166 -0
  44. package/lib/database/tenancy.d.ts +103 -0
  45. package/lib/database/tenancy.js +167 -0
  46. package/lib/index.d.ts +32 -0
  47. package/lib/index.js +38 -0
  48. package/package.json +161 -0
@@ -0,0 +1,114 @@
1
+ // Copyright 2026 Pipeline Builder Contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import { SYSTEM_ORG_ID } from '@pipeline-builder/api-core';
4
+ import { sql } from 'drizzle-orm';
5
+ import { boolean, varchar, pgTable, text, timestamp, uuid, jsonb, index } from 'drizzle-orm/pg-core';
6
+ /**
7
+ * Table for storing internal messages between organizations and the system org.
8
+ *
9
+ * Features * - Announcements: System org broadcasts to all orgs (recipientOrgId = '*')
10
+ * - Conversations: Two-way threaded messaging between an org and system org
11
+ * - Thread support via threadId (null for root messages, references root for replies)
12
+ * - Read tracking per message
13
+ * - Priority levels (normal, high, urgent)
14
+ * - Soft delete support
15
+ *
16
+ * @table messages
17
+ */
18
+ export const message = pgTable('messages', {
19
+ // Primary key
20
+ id: uuid('id').primaryKey().defaultRandom(),
21
+ // Organization and access control
22
+ orgId: varchar('org_id', { length: 255 })
23
+ .default(SYSTEM_ORG_ID)
24
+ .notNull(),
25
+ // Audit fields
26
+ createdBy: text('created_by')
27
+ .default(SYSTEM_ORG_ID)
28
+ .notNull(),
29
+ createdAt: timestamp('created_at', { withTimezone: true })
30
+ .defaultNow()
31
+ .notNull(),
32
+ updatedBy: text('updated_by')
33
+ .default(SYSTEM_ORG_ID)
34
+ .notNull(),
35
+ updatedAt: timestamp('updated_at', { withTimezone: true })
36
+ .defaultNow()
37
+ .notNull(),
38
+ // Threading
39
+ threadId: uuid('thread_id'),
40
+ // Message routing
41
+ recipientOrgId: varchar('recipient_org_id', { length: 255 })
42
+ .notNull(),
43
+ // Optional per-user targeting WITHIN the recipient org. NULL (default) = the
44
+ // whole recipient org sees it — the original, backward-compatible behavior.
45
+ // When set, only this user (a member of `recipientOrgId`) sees it, enforced in
46
+ // `buildMessageConditions` against the viewer's userId. Announcement broadcasts
47
+ // (`recipientOrgId = '*'`) never set this — they are org-wide by definition.
48
+ recipientUserId: varchar('recipient_user_id', { length: 255 }),
49
+ // Message content
50
+ messageType: varchar('message_type', { length: 20 })
51
+ .$type()
52
+ .default('conversation')
53
+ .notNull(),
54
+ // Logical channel/inbox bucket — 'support', 'help', etc. Nullable so
55
+ // org-to-org conversations (which aren't channel-scoped) can omit it.
56
+ channel: varchar('channel', { length: 50 }),
57
+ subject: varchar('subject', { length: 500 })
58
+ .notNull(),
59
+ content: text('content')
60
+ .notNull(),
61
+ // Set when the author edits the content after sending (NULL = never edited).
62
+ // Distinct from `updatedAt`, which also moves on read-receipt/system updates;
63
+ // `editedAt` marks a human CONTENT edit so the UI can show an "edited" hint.
64
+ editedAt: timestamp('edited_at', { withTimezone: true }),
65
+ // Status
66
+ // `readBy` is the per-participant read-receipt map: orgId → ISO timestamp.
67
+ // Recipient marking the thread does NOT flip sender's view. Empty `{}`
68
+ // means nobody has read it yet.
69
+ readBy: jsonb('read_by')
70
+ .$type()
71
+ .default({})
72
+ .notNull(),
73
+ priority: varchar('priority', { length: 20 })
74
+ .$type()
75
+ .default('normal')
76
+ .notNull(),
77
+ // NOTE: messages carry NO sharing rung. Their visibility is the bespoke
78
+ // sender/recipient/broadcast predicate in `buildMessageConditions` (plus the
79
+ // per-user `recipient_user_id` narrowing) — a ladder would be meaningless and
80
+ // the `access_modifier` column this replaced was written as a hardcoded
81
+ // 'private' on every path and never read.
82
+ isDefault: boolean('is_default')
83
+ .default(false)
84
+ .notNull(),
85
+ isActive: boolean('is_active')
86
+ .default(true)
87
+ .notNull(),
88
+ // Deletion tracking (soft delete)
89
+ deletedAt: timestamp('deleted_at', { withTimezone: true }),
90
+ deletedBy: text('deleted_by'),
91
+ // Soft-delete purge deadline: the retention sweep hard-deletes tombstoned
92
+ // rows once `purge_after` has passed (set on delete alongside deleted_at).
93
+ purgeAfter: timestamp('purge_after', { withTimezone: true }),
94
+ }, (table) => ({
95
+ // Partial index over just the tombstones — drives the retention purge sweep.
96
+ purgeIdx: index('message_purge_idx').on(table.purgeAfter).where(sql `deleted_at IS NOT NULL`),
97
+ // Indexes for common queries
98
+ orgIdIdx: index('message_org_id_idx').on(table.orgId),
99
+ recipientOrgIdIdx: index('message_recipient_org_id_idx').on(table.recipientOrgId),
100
+ threadIdIdx: index('message_thread_id_idx').on(table.threadId),
101
+ messageTypeIdx: index('message_message_type_idx').on(table.messageType),
102
+ channelIdx: index('message_channel_idx').on(table.channel),
103
+ createdAtIdx: index('message_created_at_idx').on(table.createdAt),
104
+ activeIdx: index('message_active_idx').on(table.isActive),
105
+ // Composite index for inbox queries (recipient + active + created)
106
+ recipientActiveCreatedIdx: index('message_recipient_active_created_idx')
107
+ .on(table.recipientOrgId, table.isActive, table.createdAt),
108
+ // Composite index for per-user targeted inbox lookups (recipient org + user).
109
+ recipientUserIdx: index('message_recipient_user_idx')
110
+ .on(table.recipientOrgId, table.recipientUserId, table.isActive),
111
+ // Composite index for org inbox (orgId + active)
112
+ orgActiveIdx: index('message_org_active_idx').on(table.orgId, table.isActive),
113
+ }));
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kYXRhYmFzZS9zY2hlbWEvbWVzc2FnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFZckc7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFVBQVUsRUFBRTtJQUN6QyxjQUFjO0lBQ2QsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxhQUFhLEVBQUU7SUFFM0Msa0NBQWtDO0lBQ2xDLEtBQUssRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO1NBQ3RDLE9BQU8sQ0FBQyxhQUFhLENBQUM7U0FDdEIsT0FBTyxFQUFFO0lBRVosZUFBZTtJQUNmLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQzFCLE9BQU8sQ0FBQyxhQUFhLENBQUM7U0FDdEIsT0FBTyxFQUFFO0lBQ1osU0FBUyxFQUFFLFNBQVMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDdkQsVUFBVSxFQUFFO1NBQ1osT0FBTyxFQUFFO0lBQ1osU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDMUIsT0FBTyxDQUFDLGFBQWEsQ0FBQztTQUN0QixPQUFPLEVBQUU7SUFDWixTQUFTLEVBQUUsU0FBUyxDQUFD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RSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUM7SUFDakYsV0FBVyxFQUFFLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO0lBQzlELGNBQWMsRUFBRSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztJQUN2RSxVQUFVLEVBQUUsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7SUFDMUQsWUFBWSxFQUFFLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO0lBQ2pFLFNBQVMsRUFBRSxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUV6RCxtRUFBbUU7SUFDbkUseUJBQXlCLEVBQUUsS0FBSyxDQUFDLHNDQUFzQyxDQUFDO1NBQ3JFLEVBQUUsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQztJQUU1RCw4RUFBOEU7SUFDOUUsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLDRCQUE0QixDQUFDO1NBQ2xELEVBQUUsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUVsRSxpREFBaUQ7SUFDakQsWUFBWSxFQUFFLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUM7Q0FDOUUsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgU1lTVEVNX09SR19JRCB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IHNxbCB9IGZyb20gJ2RyaXp6bGUtb3JtJztcbmltcG9ydCB7IGJvb2xlYW4sIHZhcmNoYXIsIHBnVGFibGUsIHRleHQsIHRpbWVzdGFtcCwgdXVpZCwganNvbmIsIGluZGV4IH0gZnJvbSAnZHJpenpsZS1vcm0vcGctY29yZSc7XG5cbi8qKlxuICogTWVzc2FnZSB0eXBlIGlkZW50aWZpZXJzXG4gKi9cbmV4cG9ydCB0eXBlIE1lc3NhZ2VUeXBlID0gJ2Fubm91bmNlbWVudCcgfCAnY29udmVyc2F0aW9uJztcblxuLyoqXG4gKiBNZXNzYWdlIHByaW9yaXR5IGxldmVsc1xuICovXG5leHBvcnQgdHlwZSBNZXNzYWdlUHJpb3JpdHkgPSAnbm9ybWFsJyB8ICdoaWdoJyB8ICd1cmdlbnQnO1xuXG4vKipcbiAqIFRhYmxlIGZvciBzdG9yaW5nIGludGVybmFsIG1lc3NhZ2VzIGJldHdlZW4gb3JnYW5pemF0aW9ucyBhbmQgdGhlIHN5c3RlbSBvcmcuXG4gKlxuICogRmVhdHVyZXMgKiAtIEFubm91bmNlbWVudHM6IFN5c3RlbSBvcmcgYnJvYWRjYXN0cyB0byBhbGwgb3JncyAocmVjaXBpZW50T3JnSWQgPSAnKicpXG4gKiAtIENvbnZlcnNhdGlvbnM6IFR3by13YXkgdGhyZWFkZWQgbWVzc2FnaW5nIGJldHdlZW4gYW4gb3JnIGFuZCBzeXN0ZW0gb3JnXG4gKiAtIFRocmVhZCBzdXBwb3J0IHZpYSB0aHJlYWRJZCAobnVsbCBmb3Igcm9vdCBtZXNzYWdlcywgcmVmZXJlbmNlcyByb290IGZvciByZXBsaWVzKVxuICogLSBSZWFkIHRyYWNraW5nIHBlciBtZXNzYWdlXG4gKiAtIFByaW9yaXR5IGxldmVscyAobm9ybWFsLCBoaWdoLCB1cmdlbnQpXG4gKiAtIFNvZnQgZGVsZXRlIHN1cHBvcnRcbiAqXG4gKiBAdGFibGUgbWVzc2FnZXNcbiAqL1xuZXhwb3J0IGNvbnN0IG1lc3NhZ2UgPSBwZ1RhYmxlKCdtZXNzYWdlcycsIHtcbiAgLy8gUHJpbWFyeSBrZXlcbiAgaWQ6IHV1aWQoJ2lkJykucHJpbWFyeUtleSgpLmRlZmF1bHRSYW5kb20oKSxcblxuICAvLyBPcmdhbml6YXRpb24gYW5kIGFjY2VzcyBjb250cm9sXG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pXG4gICAgLmRlZmF1bHQoU1lTVEVNX09SR19JRClcbiAgICAubm90TnVsbCgpLFxuXG4gIC8vIEF1ZGl0IGZpZWxkc1xuICBjcmVhdGVkQnk6IHRleHQoJ2NyZWF0ZWRfYnknKVxuICAgIC5kZWZhdWx0KFNZU1RFTV9PUkdfSUQpXG4gICAgLm5vdE51bGwoKSxcbiAgY3JlYXRlZEF0OiB0aW1lc3RhbXAoJ2NyZWF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KVxuICAgIC5kZWZhdWx0Tm93KClcbiAgICAubm90TnVsbCgpLFxuICB1cGRhdGVkQnk6IHRleHQoJ3VwZGF0ZWRfYnknKVxuICAgIC5kZWZhdWx0KFNZU1RFTV9PUkdfSUQpXG4gICAgLm5vdE51bGwoKSxcbiAgdXBkYXRlZEF0OiB0aW1lc3RhbXAoJ3VwZGF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KVxuICAgIC5kZWZhdWx0Tm93KClcbiAgICAubm90TnVsbCgpLFxuXG4gIC8vIFRocmVhZGluZ1xuICB0aHJlYWRJZDogdXVpZCgndGhyZWFkX2lkJyksXG5cbiAgLy8gTWVzc2FnZSByb3V0aW5nXG4gIHJlY2lwaWVudE9yZ0lkOiB2YXJjaGFyKCdyZWNpcGllbnRfb3JnX2lkJywgeyBsZW5ndGg6IDI1NSB9KVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gT3B0aW9uYWwgcGVyLXVzZXIgdGFyZ2V0aW5nIFdJVEhJTiB0aGUgcmVjaXBpZW50IG9yZy4gTlVMTCAoZGVmYXVsdCkgPSB0aGVcbiAgLy8gd2hvbGUgcmVjaXBpZW50IG9yZyBzZWVzIGl0IOKAlCB0aGUgb3JpZ2luYWwsIGJhY2t3YXJkLWNvbXBhdGlibGUgYmVoYXZpb3IuXG4gIC8vIFdoZW4gc2V0LCBvbmx5IHRoaXMgdXNlciAoYSBtZW1iZXIgb2YgYHJlY2lwaWVudE9yZ0lkYCkgc2VlcyBpdCwgZW5mb3JjZWQgaW5cbiAgLy8gYGJ1aWxkTWVzc2FnZUNvbmRpdGlvbnNgIGFnYWluc3QgdGhlIHZpZXdlcidzIHVzZXJJZC4gQW5ub3VuY2VtZW50IGJyb2FkY2FzdHNcbiAgLy8gKGByZWNpcGllbnRPcmdJZCA9ICcqJ2ApIG5ldmVyIHNldCB0aGlzIOKAlCB0aGV5IGFyZSBvcmctd2lkZSBieSBkZWZpbml0aW9uLlxuICByZWNpcGllbnRVc2VySWQ6IHZhcmNoYXIoJ3JlY2lwaWVudF91c2VyX2lkJywgeyBsZW5ndGg6IDI1NSB9KSxcblxuICAvLyBNZXNzYWdlIGNvbnRlbnRcbiAgbWVzc2FnZVR5cGU6IHZhcmNoYXIoJ21lc3NhZ2VfdHlwZScsIHsgbGVuZ3RoOiAyMCB9KVxuICAgIC4kdHlwZTxNZXNzYWdlVHlwZT4oKVxuICAgIC5kZWZhdWx0KCdjb252ZXJzYXRpb24nIGFzIE1lc3NhZ2VUeXBlKVxuICAgIC5ub3ROdWxsKCksXG4gIC8vIExvZ2ljYWwgY2hhbm5lbC9pbmJveCBidWNrZXQg4oCUICdzdXBwb3J0JywgJ2hlbHAnLCBldGMuIE51bGxhYmxlIHNvXG4gIC8vIG9yZy10by1vcmcgY29udmVyc2F0aW9ucyAod2hpY2ggYXJlbid0IGNoYW5uZWwtc2NvcGVkKSBjYW4gb21pdCBpdC5cbiAgY2hhbm5lbDogdmFyY2hhcignY2hhbm5lbCcsIHsgbGVuZ3RoOiA1MCB9KSxcbiAgc3ViamVjdDogdmFyY2hhcignc3ViamVjdCcsIHsgbGVuZ3RoOiA1MDAgfSlcbiAgICAubm90TnVsbCgpLFxuICBjb250ZW50OiB0ZXh0KCdjb250ZW50JylcbiAgICAubm90TnVsbCgpLFxuICAvLyBTZXQgd2hlbiB0aGUgYXV0aG9yIGVkaXRzIHRoZSBjb250ZW50IGFmdGVyIHNlbmRpbmcgKE5VTEwgPSBuZXZlciBlZGl0ZWQpLlxuICAvLyBEaXN0aW5jdCBmcm9tIGB1cGRhdGVkQXRgLCB3aGljaCBhbHNvIG1vdmVzIG9uIHJlYWQtcmVjZWlwdC9zeXN0ZW0gdXBkYXRlcztcbiAgLy8gYGVkaXRlZEF0YCBtYXJrcyBhIGh1bWFuIENPTlRFTlQgZWRpdCBzbyB0aGUgVUkgY2FuIHNob3cgYW4gXCJlZGl0ZWRcIiBoaW50LlxuICBlZGl0ZWRBdDogdGltZXN0YW1wKCdlZGl0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcblxuICAvLyBTdGF0dXNcbiAgLy8gYHJlYWRCeWAgaXMgdGhlIHBlci1wYXJ0aWNpcGFudCByZWFkLXJlY2VpcHQgbWFwOiBvcmdJZCDihpIgSVNPIHRpbWVzdGFtcC5cbiAgLy8gUmVjaXBpZW50IG1hcmtpbmcgdGhlIHRocmVhZCBkb2VzIE5PVCBmbGlwIHNlbmRlcidzIHZpZXcuIEVtcHR5IGB7fWBcbiAgLy8gbWVhbnMgbm9ib2R5IGhhcyByZWFkIGl0IHlldC5cbiAgcmVhZEJ5OiBqc29uYigncmVhZF9ieScpXG4gICAgLiR0eXBlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KClcbiAgICAuZGVmYXVsdCh7fSlcbiAgICAubm90TnVsbCgpLFxuICBwcmlvcml0eTogdmFyY2hhcigncHJpb3JpdHknLCB7IGxlbmd0aDogMjAgfSlcbiAgICAuJHR5cGU8TWVzc2FnZVByaW9yaXR5PigpXG4gICAgLmRlZmF1bHQoJ25vcm1hbCcgYXMgTWVzc2FnZVByaW9yaXR5KVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gTk9URTogbWVzc2FnZXMgY2FycnkgTk8gc2hhcmluZyBydW5nLiBUaGVpciB2aXNpYmlsaXR5IGlzIHRoZSBiZXNwb2tlXG4gIC8vIHNlbmRlci9yZWNpcGllbnQvYnJvYWRjYXN0IHByZWRpY2F0ZSBpbiBgYnVpbGRNZXNzYWdlQ29uZGl0aW9uc2AgKHBsdXMgdGhlXG4gIC8vIHBlci11c2VyIGByZWNpcGllbnRfdXNlcl9pZGAgbmFycm93aW5nKSDigJQgYSBsYWRkZXIgd291bGQgYmUgbWVhbmluZ2xlc3MgYW5kXG4gIC8vIHRoZSBgYWNjZXNzX21vZGlmaWVyYCBjb2x1bW4gdGhpcyByZXBsYWNlZCB3YXMgd3JpdHRlbiBhcyBhIGhhcmRjb2RlZFxuICAvLyAncHJpdmF0ZScgb24gZXZlcnkgcGF0aCBhbmQgbmV2ZXIgcmVhZC5cbiAgaXNEZWZhdWx0OiBib29sZWFuKCdpc19kZWZhdWx0JylcbiAgICAuZGVmYXVsdChmYWxzZSlcbiAgICAubm90TnVsbCgpLFxuICBpc0FjdGl2ZTogYm9vbGVhbignaXNfYWN0aXZlJylcbiAgICAuZGVmYXVsdCh0cnVlKVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gRGVsZXRpb24gdHJhY2tpbmcgKHNvZnQgZGVsZXRlKVxuICBkZWxldGVkQXQ6IHRpbWVzdGFtcCgnZGVsZXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBkZWxldGVkQnk6IHRleHQoJ2RlbGV0ZWRfYnknKSxcbiAgLy8gU29mdC1kZWxldGUgcHVyZ2UgZGVhZGxpbmU6IHRoZSByZXRlbnRpb24gc3dlZXAgaGFyZC1kZWxldGVzIHRvbWJzdG9uZWRcbiAgLy8gcm93cyBvbmNlIGBwdXJnZV9hZnRlcmAgaGFzIHBhc3NlZCAoc2V0IG9uIGRlbGV0ZSBhbG9uZ3NpZGUgZGVsZXRlZF9hdCkuXG4gIHB1cmdlQWZ0ZXI6IHRpbWVzdGFtcCgncHVyZ2VfYWZ0ZXInLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbn0sICh0YWJsZSkgPT4gKHtcbiAgLy8gUGFydGlhbCBpbmRleCBvdmVyIGp1c3QgdGhlIHRvbWJzdG9uZXMg4oCUIGRyaXZlcyB0aGUgcmV0ZW50aW9uIHB1cmdlIHN3ZWVwLlxuICBwdXJnZUlkeDogaW5kZXgoJ21lc3NhZ2VfcHVyZ2VfaWR4Jykub24odGFibGUucHVyZ2VBZnRlcikud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTk9UIE5VTExgKSxcbiAgLy8gSW5kZXhlcyBmb3IgY29tbW9uIHF1ZXJpZXNcbiAgb3JnSWRJZHg6IGluZGV4KCdtZXNzYWdlX29yZ19pZF9pZHgnKS5vbih0YWJsZS5vcmdJZCksXG4gIHJlY2lwaWVudE9yZ0lkSWR4OiBpbmRleCgnbWVzc2FnZV9yZWNpcGllbnRfb3JnX2lkX2lkeCcpLm9uKHRhYmxlLnJlY2lwaWVudE9yZ0lkKSxcbiAgdGhyZWFkSWRJZHg6IGluZGV4KCdtZXNzYWdlX3RocmVhZF9pZF9pZHgnKS5vbih0YWJsZS50aHJlYWRJZCksXG4gIG1lc3NhZ2VUeXBlSWR4OiBpbmRleCgnbWVzc2FnZV9tZXNzYWdlX3R5cGVfaWR4Jykub24odGFibGUubWVzc2FnZVR5cGUpLFxuICBjaGFubmVsSWR4OiBpbmRleCgnbWVzc2FnZV9jaGFubmVsX2lkeCcpLm9uKHRhYmxlLmNoYW5uZWwpLFxuICBjcmVhdGVkQXRJZHg6IGluZGV4KCdtZXNzYWdlX2NyZWF0ZWRfYXRfaWR4Jykub24odGFibGUuY3JlYXRlZEF0KSxcbiAgYWN0aXZlSWR4OiBpbmRleCgnbWVzc2FnZV9hY3RpdmVfaWR4Jykub24odGFibGUuaXNBY3RpdmUpLFxuXG4gIC8vIENvbXBvc2l0ZSBpbmRleCBmb3IgaW5ib3ggcXVlcmllcyAocmVjaXBpZW50ICsgYWN0aXZlICsgY3JlYXRlZClcbiAgcmVjaXBpZW50QWN0aXZlQ3JlYXRlZElkeDogaW5kZXgoJ21lc3NhZ2VfcmVjaXBpZW50X2FjdGl2ZV9jcmVhdGVkX2lkeCcpXG4gICAgLm9uKHRhYmxlLnJlY2lwaWVudE9yZ0lkLCB0YWJsZS5pc0FjdGl2ZSwgdGFibGUuY3JlYXRlZEF0KSxcblxuICAvLyBDb21wb3NpdGUgaW5kZXggZm9yIHBlci11c2VyIHRhcmdldGVkIGluYm94IGxvb2t1cHMgKHJlY2lwaWVudCBvcmcgKyB1c2VyKS5cbiAgcmVjaXBpZW50VXNlcklkeDogaW5kZXgoJ21lc3NhZ2VfcmVjaXBpZW50X3VzZXJfaWR4JylcbiAgICAub24odGFibGUucmVjaXBpZW50T3JnSWQsIHRhYmxlLnJlY2lwaWVudFVzZXJJZCwgdGFibGUuaXNBY3RpdmUpLFxuXG4gIC8vIENvbXBvc2l0ZSBpbmRleCBmb3Igb3JnIGluYm94IChvcmdJZCArIGFjdGl2ZSlcbiAgb3JnQWN0aXZlSWR4OiBpbmRleCgnbWVzc2FnZV9vcmdfYWN0aXZlX2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5pc0FjdGl2ZSksXG59KSk7XG5cbi8qKlxuICogVHlwZVNjcmlwdCB0eXBlcyByZXByZXNlbnRpbmcgZGF0YWJhc2Ugcm93c1xuICovXG5leHBvcnQgdHlwZSBNZXNzYWdlID0gdHlwZW9mIG1lc3NhZ2UuJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgTWVzc2FnZUluc2VydCA9IHR5cGVvZiBtZXNzYWdlLiRpbmZlckluc2VydDtcblxuLyoqXG4gKiBIZWxwZXIgdHlwZXMgZm9yIHdvcmtpbmcgd2l0aCBwYXJ0aWFsIHVwZGF0ZXNcbiAqL1xuZXhwb3J0IHR5cGUgTWVzc2FnZVVwZGF0ZSA9IFBhcnRpYWw8T21pdDxNZXNzYWdlSW5zZXJ0LCAnaWQnIHwgJ2NyZWF0ZWRBdCcgfCAnY3JlYXRlZEJ5Jz4+O1xuIl19
@@ -0,0 +1,466 @@
1
+ import { type EntityLabels, type EntityLink, type TemplateInput } from '@pipeline-builder/api-core';
2
+ /**
3
+ * Golden-path pipeline templates. A template is a parameterized starter: its
4
+ * `props` is a BuilderProps body with `{{ vars.* }}` placeholders, and `inputs`
5
+ * declares the variables a developer fills in when instantiating it into a real
6
+ * pipeline. System-org public templates form the shared golden-path catalog
7
+ * (visible to every org, same pattern as the sample template catalog / compliance templates).
8
+ *
9
+ * Visibility ladder (three rungs, like `dashboards` — NOT the catalog-wide
10
+ * three-value `visibility` that pipelines/plugins carry):
11
+ * - `private` — only the author (`created_by`) can read/write it; a personal draft
12
+ * - `org` — anyone in the owning org can read it; `pipelines:write` edits it
13
+ * - `public` — shared beyond the org: a team also sees its parent org's public
14
+ * templates, and the system org's public templates are the shared
15
+ * golden-path catalog every org sees. Needs `pipelines:publish`.
16
+ * The read predicate lives in `buildPipelineTemplateConditions`; the write gate
17
+ * in api-core's `requireTemplateWriteAccess`.
18
+ *
19
+ * @table pipeline_templates
20
+ */
21
+ export declare const pipelineTemplate: import("drizzle-orm/pg-core").PgTableWithColumns<{
22
+ name: "pipeline_templates";
23
+ schema: undefined;
24
+ columns: {
25
+ id: import("drizzle-orm/pg-core").PgColumn<{
26
+ name: "id";
27
+ tableName: "pipeline_templates";
28
+ dataType: "string";
29
+ columnType: "PgUUID";
30
+ data: string;
31
+ driverParam: string;
32
+ notNull: true;
33
+ hasDefault: true;
34
+ isPrimaryKey: true;
35
+ isAutoincrement: false;
36
+ hasRuntimeDefault: false;
37
+ enumValues: undefined;
38
+ baseColumn: never;
39
+ identity: undefined;
40
+ generated: undefined;
41
+ }, {}, {}>;
42
+ orgId: import("drizzle-orm/pg-core").PgColumn<{
43
+ name: "org_id";
44
+ tableName: "pipeline_templates";
45
+ dataType: "string";
46
+ columnType: "PgVarchar";
47
+ data: string;
48
+ driverParam: string;
49
+ notNull: true;
50
+ hasDefault: true;
51
+ isPrimaryKey: false;
52
+ isAutoincrement: false;
53
+ hasRuntimeDefault: false;
54
+ enumValues: [string, ...string[]];
55
+ baseColumn: never;
56
+ identity: undefined;
57
+ generated: undefined;
58
+ }, {}, {
59
+ length: 255;
60
+ }>;
61
+ createdBy: import("drizzle-orm/pg-core").PgColumn<{
62
+ name: "created_by";
63
+ tableName: "pipeline_templates";
64
+ dataType: "string";
65
+ columnType: "PgText";
66
+ data: string;
67
+ driverParam: string;
68
+ notNull: true;
69
+ hasDefault: true;
70
+ isPrimaryKey: false;
71
+ isAutoincrement: false;
72
+ hasRuntimeDefault: false;
73
+ enumValues: [string, ...string[]];
74
+ baseColumn: never;
75
+ identity: undefined;
76
+ generated: undefined;
77
+ }, {}, {}>;
78
+ createdAt: import("drizzle-orm/pg-core").PgColumn<{
79
+ name: "created_at";
80
+ tableName: "pipeline_templates";
81
+ dataType: "date";
82
+ columnType: "PgTimestamp";
83
+ data: Date;
84
+ driverParam: string;
85
+ notNull: true;
86
+ hasDefault: true;
87
+ isPrimaryKey: false;
88
+ isAutoincrement: false;
89
+ hasRuntimeDefault: false;
90
+ enumValues: undefined;
91
+ baseColumn: never;
92
+ identity: undefined;
93
+ generated: undefined;
94
+ }, {}, {}>;
95
+ updatedBy: import("drizzle-orm/pg-core").PgColumn<{
96
+ name: "updated_by";
97
+ tableName: "pipeline_templates";
98
+ dataType: "string";
99
+ columnType: "PgText";
100
+ data: string;
101
+ driverParam: string;
102
+ notNull: true;
103
+ hasDefault: true;
104
+ isPrimaryKey: false;
105
+ isAutoincrement: false;
106
+ hasRuntimeDefault: false;
107
+ enumValues: [string, ...string[]];
108
+ baseColumn: never;
109
+ identity: undefined;
110
+ generated: undefined;
111
+ }, {}, {}>;
112
+ updatedAt: import("drizzle-orm/pg-core").PgColumn<{
113
+ name: "updated_at";
114
+ tableName: "pipeline_templates";
115
+ dataType: "date";
116
+ columnType: "PgTimestamp";
117
+ data: Date;
118
+ driverParam: string;
119
+ notNull: true;
120
+ hasDefault: true;
121
+ isPrimaryKey: false;
122
+ isAutoincrement: false;
123
+ hasRuntimeDefault: false;
124
+ enumValues: undefined;
125
+ baseColumn: never;
126
+ identity: undefined;
127
+ generated: undefined;
128
+ }, {}, {}>;
129
+ name: import("drizzle-orm/pg-core").PgColumn<{
130
+ name: "name";
131
+ tableName: "pipeline_templates";
132
+ dataType: "string";
133
+ columnType: "PgVarchar";
134
+ data: string;
135
+ driverParam: string;
136
+ notNull: true;
137
+ hasDefault: false;
138
+ isPrimaryKey: false;
139
+ isAutoincrement: false;
140
+ hasRuntimeDefault: false;
141
+ enumValues: [string, ...string[]];
142
+ baseColumn: never;
143
+ identity: undefined;
144
+ generated: undefined;
145
+ }, {}, {
146
+ length: 255;
147
+ }>;
148
+ description: import("drizzle-orm/pg-core").PgColumn<{
149
+ name: "description";
150
+ tableName: "pipeline_templates";
151
+ dataType: "string";
152
+ columnType: "PgText";
153
+ data: string;
154
+ driverParam: string;
155
+ notNull: false;
156
+ hasDefault: false;
157
+ isPrimaryKey: false;
158
+ isAutoincrement: false;
159
+ hasRuntimeDefault: false;
160
+ enumValues: [string, ...string[]];
161
+ baseColumn: never;
162
+ identity: undefined;
163
+ generated: undefined;
164
+ }, {}, {}>;
165
+ keywords: import("drizzle-orm/pg-core").PgColumn<{
166
+ name: "keywords";
167
+ tableName: "pipeline_templates";
168
+ dataType: "json";
169
+ columnType: "PgJsonb";
170
+ data: string[];
171
+ driverParam: unknown;
172
+ notNull: true;
173
+ hasDefault: true;
174
+ isPrimaryKey: false;
175
+ isAutoincrement: false;
176
+ hasRuntimeDefault: false;
177
+ enumValues: undefined;
178
+ baseColumn: never;
179
+ identity: undefined;
180
+ generated: undefined;
181
+ }, {}, {
182
+ $type: string[];
183
+ }>;
184
+ category: import("drizzle-orm/pg-core").PgColumn<{
185
+ name: "category";
186
+ tableName: "pipeline_templates";
187
+ dataType: "string";
188
+ columnType: "PgVarchar";
189
+ data: string;
190
+ driverParam: string;
191
+ notNull: true;
192
+ hasDefault: true;
193
+ isPrimaryKey: false;
194
+ isAutoincrement: false;
195
+ hasRuntimeDefault: false;
196
+ enumValues: [string, ...string[]];
197
+ baseColumn: never;
198
+ identity: undefined;
199
+ generated: undefined;
200
+ }, {}, {
201
+ length: 50;
202
+ }>;
203
+ props: import("drizzle-orm/pg-core").PgColumn<{
204
+ name: "props";
205
+ tableName: "pipeline_templates";
206
+ dataType: "json";
207
+ columnType: "PgJsonb";
208
+ data: Record<string, unknown>;
209
+ driverParam: unknown;
210
+ notNull: true;
211
+ hasDefault: false;
212
+ isPrimaryKey: false;
213
+ isAutoincrement: false;
214
+ hasRuntimeDefault: false;
215
+ enumValues: undefined;
216
+ baseColumn: never;
217
+ identity: undefined;
218
+ generated: undefined;
219
+ }, {}, {
220
+ $type: Record<string, unknown>;
221
+ }>;
222
+ inputs: import("drizzle-orm/pg-core").PgColumn<{
223
+ name: "inputs";
224
+ tableName: "pipeline_templates";
225
+ dataType: "json";
226
+ columnType: "PgJsonb";
227
+ data: TemplateInput[];
228
+ driverParam: unknown;
229
+ notNull: true;
230
+ hasDefault: true;
231
+ isPrimaryKey: false;
232
+ isAutoincrement: false;
233
+ hasRuntimeDefault: false;
234
+ enumValues: undefined;
235
+ baseColumn: never;
236
+ identity: undefined;
237
+ generated: undefined;
238
+ }, {}, {
239
+ $type: TemplateInput[];
240
+ }>;
241
+ ownerId: import("drizzle-orm/pg-core").PgColumn<{
242
+ name: "owner_id";
243
+ tableName: "pipeline_templates";
244
+ dataType: "string";
245
+ columnType: "PgText";
246
+ data: string;
247
+ driverParam: string;
248
+ notNull: false;
249
+ hasDefault: false;
250
+ isPrimaryKey: false;
251
+ isAutoincrement: false;
252
+ hasRuntimeDefault: false;
253
+ enumValues: [string, ...string[]];
254
+ baseColumn: never;
255
+ identity: undefined;
256
+ generated: undefined;
257
+ }, {}, {}>;
258
+ ownerType: import("drizzle-orm/pg-core").PgColumn<{
259
+ name: "owner_type";
260
+ tableName: "pipeline_templates";
261
+ dataType: "string";
262
+ columnType: "PgVarchar";
263
+ data: "team" | "user";
264
+ driverParam: string;
265
+ notNull: false;
266
+ hasDefault: false;
267
+ isPrimaryKey: false;
268
+ isAutoincrement: false;
269
+ hasRuntimeDefault: false;
270
+ enumValues: [string, ...string[]];
271
+ baseColumn: never;
272
+ identity: undefined;
273
+ generated: undefined;
274
+ }, {}, {
275
+ length: 10;
276
+ $type: "team" | "user";
277
+ }>;
278
+ lifecycle: import("drizzle-orm/pg-core").PgColumn<{
279
+ name: "lifecycle";
280
+ tableName: "pipeline_templates";
281
+ dataType: "string";
282
+ columnType: "PgVarchar";
283
+ data: "deprecated" | "experimental" | "production";
284
+ driverParam: string;
285
+ notNull: true;
286
+ hasDefault: true;
287
+ isPrimaryKey: false;
288
+ isAutoincrement: false;
289
+ hasRuntimeDefault: false;
290
+ enumValues: [string, ...string[]];
291
+ baseColumn: never;
292
+ identity: undefined;
293
+ generated: undefined;
294
+ }, {}, {
295
+ length: 20;
296
+ $type: "deprecated" | "experimental" | "production";
297
+ }>;
298
+ criticality: import("drizzle-orm/pg-core").PgColumn<{
299
+ name: "criticality";
300
+ tableName: "pipeline_templates";
301
+ dataType: "string";
302
+ columnType: "PgVarchar";
303
+ data: "critical" | "high" | "low" | "medium";
304
+ driverParam: string;
305
+ notNull: false;
306
+ hasDefault: false;
307
+ isPrimaryKey: false;
308
+ isAutoincrement: false;
309
+ hasRuntimeDefault: false;
310
+ enumValues: [string, ...string[]];
311
+ baseColumn: never;
312
+ identity: undefined;
313
+ generated: undefined;
314
+ }, {}, {
315
+ length: 10;
316
+ $type: "critical" | "high" | "low" | "medium";
317
+ }>;
318
+ labels: import("drizzle-orm/pg-core").PgColumn<{
319
+ name: "labels";
320
+ tableName: "pipeline_templates";
321
+ dataType: "json";
322
+ columnType: "PgJsonb";
323
+ data: EntityLabels;
324
+ driverParam: unknown;
325
+ notNull: true;
326
+ hasDefault: true;
327
+ isPrimaryKey: false;
328
+ isAutoincrement: false;
329
+ hasRuntimeDefault: false;
330
+ enumValues: undefined;
331
+ baseColumn: never;
332
+ identity: undefined;
333
+ generated: undefined;
334
+ }, {}, {
335
+ $type: EntityLabels;
336
+ }>;
337
+ links: import("drizzle-orm/pg-core").PgColumn<{
338
+ name: "links";
339
+ tableName: "pipeline_templates";
340
+ dataType: "json";
341
+ columnType: "PgJsonb";
342
+ data: EntityLink[];
343
+ driverParam: unknown;
344
+ notNull: true;
345
+ hasDefault: true;
346
+ isPrimaryKey: false;
347
+ isAutoincrement: false;
348
+ hasRuntimeDefault: false;
349
+ enumValues: undefined;
350
+ baseColumn: never;
351
+ identity: undefined;
352
+ generated: undefined;
353
+ }, {}, {
354
+ $type: EntityLink[];
355
+ }>;
356
+ visibility: import("drizzle-orm/pg-core").PgColumn<{
357
+ name: "visibility";
358
+ tableName: "pipeline_templates";
359
+ dataType: "string";
360
+ columnType: "PgVarchar";
361
+ data: "org" | "private" | "public";
362
+ driverParam: string;
363
+ notNull: true;
364
+ hasDefault: true;
365
+ isPrimaryKey: false;
366
+ isAutoincrement: false;
367
+ hasRuntimeDefault: false;
368
+ enumValues: [string, ...string[]];
369
+ baseColumn: never;
370
+ identity: undefined;
371
+ generated: undefined;
372
+ }, {}, {
373
+ length: 10;
374
+ $type: "org" | "private" | "public";
375
+ }>;
376
+ isDefault: import("drizzle-orm/pg-core").PgColumn<{
377
+ name: "is_default";
378
+ tableName: "pipeline_templates";
379
+ dataType: "boolean";
380
+ columnType: "PgBoolean";
381
+ data: boolean;
382
+ driverParam: boolean;
383
+ notNull: true;
384
+ hasDefault: true;
385
+ isPrimaryKey: false;
386
+ isAutoincrement: false;
387
+ hasRuntimeDefault: false;
388
+ enumValues: undefined;
389
+ baseColumn: never;
390
+ identity: undefined;
391
+ generated: undefined;
392
+ }, {}, {}>;
393
+ isActive: import("drizzle-orm/pg-core").PgColumn<{
394
+ name: "is_active";
395
+ tableName: "pipeline_templates";
396
+ dataType: "boolean";
397
+ columnType: "PgBoolean";
398
+ data: boolean;
399
+ driverParam: boolean;
400
+ notNull: true;
401
+ hasDefault: true;
402
+ isPrimaryKey: false;
403
+ isAutoincrement: false;
404
+ hasRuntimeDefault: false;
405
+ enumValues: undefined;
406
+ baseColumn: never;
407
+ identity: undefined;
408
+ generated: undefined;
409
+ }, {}, {}>;
410
+ deletedAt: import("drizzle-orm/pg-core").PgColumn<{
411
+ name: "deleted_at";
412
+ tableName: "pipeline_templates";
413
+ dataType: "date";
414
+ columnType: "PgTimestamp";
415
+ data: Date;
416
+ driverParam: string;
417
+ notNull: false;
418
+ hasDefault: false;
419
+ isPrimaryKey: false;
420
+ isAutoincrement: false;
421
+ hasRuntimeDefault: false;
422
+ enumValues: undefined;
423
+ baseColumn: never;
424
+ identity: undefined;
425
+ generated: undefined;
426
+ }, {}, {}>;
427
+ deletedBy: import("drizzle-orm/pg-core").PgColumn<{
428
+ name: "deleted_by";
429
+ tableName: "pipeline_templates";
430
+ dataType: "string";
431
+ columnType: "PgText";
432
+ data: string;
433
+ driverParam: string;
434
+ notNull: false;
435
+ hasDefault: false;
436
+ isPrimaryKey: false;
437
+ isAutoincrement: false;
438
+ hasRuntimeDefault: false;
439
+ enumValues: [string, ...string[]];
440
+ baseColumn: never;
441
+ identity: undefined;
442
+ generated: undefined;
443
+ }, {}, {}>;
444
+ purgeAfter: import("drizzle-orm/pg-core").PgColumn<{
445
+ name: "purge_after";
446
+ tableName: "pipeline_templates";
447
+ dataType: "date";
448
+ columnType: "PgTimestamp";
449
+ data: Date;
450
+ driverParam: string;
451
+ notNull: false;
452
+ hasDefault: false;
453
+ isPrimaryKey: false;
454
+ isAutoincrement: false;
455
+ hasRuntimeDefault: false;
456
+ enumValues: undefined;
457
+ baseColumn: never;
458
+ identity: undefined;
459
+ generated: undefined;
460
+ }, {}, {}>;
461
+ };
462
+ dialect: 'pg';
463
+ }>;
464
+ export type PipelineTemplate = typeof pipelineTemplate.$inferSelect;
465
+ export type PipelineTemplateInsert = typeof pipelineTemplate.$inferInsert;
466
+ export type PipelineTemplateUpdate = Partial<Omit<PipelineTemplateInsert, 'id' | 'createdAt' | 'createdBy'>>;