@pipeline-builder/pipeline-data 3.4.114 → 3.4.116

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.
@@ -2,6 +2,7 @@ export * from './schema/plugin.js';
2
2
  export * from './schema/pipeline.js';
3
3
  export * from './schema/pipeline-template.js';
4
4
  export * from './schema/message.js';
5
+ export * from './schema/message-attachment.js';
5
6
  export * from './schema/compliance.js';
6
7
  export * from './schema/dashboard.js';
7
8
  export * from './schema/alert.js';
@@ -1757,6 +1758,25 @@ export declare const schema: {
1757
1758
  }, {}, {
1758
1759
  length: 255;
1759
1760
  }>;
1761
+ recipientUserId: import("drizzle-orm/pg-core").PgColumn<{
1762
+ name: "recipient_user_id";
1763
+ tableName: "messages";
1764
+ dataType: "string";
1765
+ columnType: "PgVarchar";
1766
+ data: string;
1767
+ driverParam: string;
1768
+ notNull: false;
1769
+ hasDefault: false;
1770
+ isPrimaryKey: false;
1771
+ isAutoincrement: false;
1772
+ hasRuntimeDefault: false;
1773
+ enumValues: [string, ...string[]];
1774
+ baseColumn: never;
1775
+ identity: undefined;
1776
+ generated: undefined;
1777
+ }, {}, {
1778
+ length: 255;
1779
+ }>;
1760
1780
  messageType: import("drizzle-orm/pg-core").PgColumn<{
1761
1781
  name: "message_type";
1762
1782
  tableName: "messages";
@@ -1832,6 +1852,23 @@ export declare const schema: {
1832
1852
  identity: undefined;
1833
1853
  generated: undefined;
1834
1854
  }, {}, {}>;
1855
+ editedAt: import("drizzle-orm/pg-core").PgColumn<{
1856
+ name: "edited_at";
1857
+ tableName: "messages";
1858
+ dataType: "date";
1859
+ columnType: "PgTimestamp";
1860
+ data: Date;
1861
+ driverParam: string;
1862
+ notNull: false;
1863
+ hasDefault: false;
1864
+ isPrimaryKey: false;
1865
+ isAutoincrement: false;
1866
+ hasRuntimeDefault: false;
1867
+ enumValues: undefined;
1868
+ baseColumn: never;
1869
+ identity: undefined;
1870
+ generated: undefined;
1871
+ }, {}, {}>;
1835
1872
  readBy: import("drizzle-orm/pg-core").PgColumn<{
1836
1873
  name: "read_by";
1837
1874
  tableName: "messages";
@@ -1979,6 +2016,174 @@ export declare const schema: {
1979
2016
  };
1980
2017
  dialect: 'pg';
1981
2018
  }>;
2019
+ readonly messageAttachment: import("drizzle-orm/pg-core").PgTableWithColumns<{
2020
+ name: "message_attachments";
2021
+ schema: undefined;
2022
+ columns: {
2023
+ id: import("drizzle-orm/pg-core").PgColumn<{
2024
+ name: "id";
2025
+ tableName: "message_attachments";
2026
+ dataType: "string";
2027
+ columnType: "PgUUID";
2028
+ data: string;
2029
+ driverParam: string;
2030
+ notNull: true;
2031
+ hasDefault: true;
2032
+ isPrimaryKey: true;
2033
+ isAutoincrement: false;
2034
+ hasRuntimeDefault: false;
2035
+ enumValues: undefined;
2036
+ baseColumn: never;
2037
+ identity: undefined;
2038
+ generated: undefined;
2039
+ }, {}, {}>;
2040
+ orgId: import("drizzle-orm/pg-core").PgColumn<{
2041
+ name: "org_id";
2042
+ tableName: "message_attachments";
2043
+ dataType: "string";
2044
+ columnType: "PgVarchar";
2045
+ data: string;
2046
+ driverParam: string;
2047
+ notNull: true;
2048
+ hasDefault: false;
2049
+ isPrimaryKey: false;
2050
+ isAutoincrement: false;
2051
+ hasRuntimeDefault: false;
2052
+ enumValues: [string, ...string[]];
2053
+ baseColumn: never;
2054
+ identity: undefined;
2055
+ generated: undefined;
2056
+ }, {}, {
2057
+ length: 255;
2058
+ }>;
2059
+ messageId: import("drizzle-orm/pg-core").PgColumn<{
2060
+ name: "message_id";
2061
+ tableName: "message_attachments";
2062
+ dataType: "string";
2063
+ columnType: "PgUUID";
2064
+ data: string;
2065
+ driverParam: string;
2066
+ notNull: false;
2067
+ hasDefault: false;
2068
+ isPrimaryKey: false;
2069
+ isAutoincrement: false;
2070
+ hasRuntimeDefault: false;
2071
+ enumValues: undefined;
2072
+ baseColumn: never;
2073
+ identity: undefined;
2074
+ generated: undefined;
2075
+ }, {}, {}>;
2076
+ uploadedBy: import("drizzle-orm/pg-core").PgColumn<{
2077
+ name: "uploaded_by";
2078
+ tableName: "message_attachments";
2079
+ dataType: "string";
2080
+ columnType: "PgText";
2081
+ data: string;
2082
+ driverParam: string;
2083
+ notNull: true;
2084
+ hasDefault: false;
2085
+ isPrimaryKey: false;
2086
+ isAutoincrement: false;
2087
+ hasRuntimeDefault: false;
2088
+ enumValues: [string, ...string[]];
2089
+ baseColumn: never;
2090
+ identity: undefined;
2091
+ generated: undefined;
2092
+ }, {}, {}>;
2093
+ filename: import("drizzle-orm/pg-core").PgColumn<{
2094
+ name: "filename";
2095
+ tableName: "message_attachments";
2096
+ dataType: "string";
2097
+ columnType: "PgVarchar";
2098
+ data: string;
2099
+ driverParam: string;
2100
+ notNull: true;
2101
+ hasDefault: false;
2102
+ isPrimaryKey: false;
2103
+ isAutoincrement: false;
2104
+ hasRuntimeDefault: false;
2105
+ enumValues: [string, ...string[]];
2106
+ baseColumn: never;
2107
+ identity: undefined;
2108
+ generated: undefined;
2109
+ }, {}, {
2110
+ length: 255;
2111
+ }>;
2112
+ contentType: import("drizzle-orm/pg-core").PgColumn<{
2113
+ name: "content_type";
2114
+ tableName: "message_attachments";
2115
+ dataType: "string";
2116
+ columnType: "PgVarchar";
2117
+ data: string;
2118
+ driverParam: string;
2119
+ notNull: true;
2120
+ hasDefault: false;
2121
+ isPrimaryKey: false;
2122
+ isAutoincrement: false;
2123
+ hasRuntimeDefault: false;
2124
+ enumValues: [string, ...string[]];
2125
+ baseColumn: never;
2126
+ identity: undefined;
2127
+ generated: undefined;
2128
+ }, {}, {
2129
+ length: 128;
2130
+ }>;
2131
+ sizeBytes: import("drizzle-orm/pg-core").PgColumn<{
2132
+ name: "size_bytes";
2133
+ tableName: "message_attachments";
2134
+ dataType: "number";
2135
+ columnType: "PgInteger";
2136
+ data: number;
2137
+ driverParam: string | number;
2138
+ notNull: true;
2139
+ hasDefault: false;
2140
+ isPrimaryKey: false;
2141
+ isAutoincrement: false;
2142
+ hasRuntimeDefault: false;
2143
+ enumValues: undefined;
2144
+ baseColumn: never;
2145
+ identity: undefined;
2146
+ generated: undefined;
2147
+ }, {}, {}>;
2148
+ storageKey: import("drizzle-orm/pg-core").PgColumn<{
2149
+ name: "storage_key";
2150
+ tableName: "message_attachments";
2151
+ dataType: "string";
2152
+ columnType: "PgVarchar";
2153
+ data: string;
2154
+ driverParam: string;
2155
+ notNull: true;
2156
+ hasDefault: false;
2157
+ isPrimaryKey: false;
2158
+ isAutoincrement: false;
2159
+ hasRuntimeDefault: false;
2160
+ enumValues: [string, ...string[]];
2161
+ baseColumn: never;
2162
+ identity: undefined;
2163
+ generated: undefined;
2164
+ }, {}, {
2165
+ length: 512;
2166
+ }>;
2167
+ createdAt: import("drizzle-orm/pg-core").PgColumn<{
2168
+ name: "created_at";
2169
+ tableName: "message_attachments";
2170
+ dataType: "date";
2171
+ columnType: "PgTimestamp";
2172
+ data: Date;
2173
+ driverParam: string;
2174
+ notNull: true;
2175
+ hasDefault: true;
2176
+ isPrimaryKey: false;
2177
+ isAutoincrement: false;
2178
+ hasRuntimeDefault: false;
2179
+ enumValues: undefined;
2180
+ baseColumn: never;
2181
+ identity: undefined;
2182
+ generated: undefined;
2183
+ }, {}, {}>;
2184
+ };
2185
+ dialect: 'pg';
2186
+ }>;
1982
2187
  readonly pipelineRegistry: import("drizzle-orm/pg-core").PgTableWithColumns<{
1983
2188
  name: "pipeline_registry";
1984
2189
  schema: undefined;
@@ -11,12 +11,14 @@ export * from './schema/plugin.js';
11
11
  export * from './schema/pipeline.js';
12
12
  export * from './schema/pipeline-template.js';
13
13
  export * from './schema/message.js';
14
+ export * from './schema/message-attachment.js';
14
15
  export * from './schema/compliance.js';
15
16
  export * from './schema/dashboard.js';
16
17
  export * from './schema/alert.js';
17
18
  import { orgAlertDestination, orgAlertRule } from './schema/alert.js';
18
19
  import { compliancePolicy, complianceRule, complianceRuleHistory, complianceAuditLog, complianceExemption, complianceRuleSubscription, complianceScan, complianceScanSchedule, complianceNotificationPreference, complianceNotificationLog, complianceRole, complianceReport, complianceReportSchedule, } from './schema/compliance.js';
19
20
  import { dashboard, dashboardPanel } from './schema/dashboard.js';
21
+ import { messageAttachment } from './schema/message-attachment.js';
20
22
  import { message } from './schema/message.js';
21
23
  import { pipelineTemplate } from './schema/pipeline-template.js';
22
24
  import { pipeline, pipelineRegistry, pipelineEvent } from './schema/pipeline.js';
@@ -29,6 +31,7 @@ export const schema = {
29
31
  pipeline,
30
32
  pipelineTemplate,
31
33
  message,
34
+ messageAttachment,
32
35
  pipelineRegistry,
33
36
  pipelineEvent,
34
37
  // Observability dashboards (user-editable replacement for code-defined dashboards)
@@ -53,4 +56,4 @@ export const schema = {
53
56
  complianceReport,
54
57
  complianceReportSchedule,
55
58
  };
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJpenpsZS1zY2hlbWEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YWJhc2UvZHJpenpsZS1zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxFQUFFO0FBQ0YsK0VBQStFO0FBQy9FLDRFQUE0RTtBQUM1RSw0RUFBNEU7QUFDNUUsOEVBQThFO0FBQzlFLDJEQUEyRDtBQUMzRCxFQUFFO0FBRUYsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxtQkFBbUIsQ0FBQztBQUVsQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEUsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixjQUFjLEVBQ2QscUJBQXFCLEVBQ3JCLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIsMEJBQTBCLEVBQzFCLGNBQWMsRUFDZCxzQkFBc0IsRUFDdEIsZ0NBQWdDLEVBQ2hDLHlCQUF5QixFQUN6QixjQUFjLEVBQ2QsZ0JBQWdCLEVBQ2hCLHdCQUF3QixHQUN6QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTVDOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHO0lBQ3BCLE1BQU07SUFDTixRQUFRO0lBQ1IsZ0JBQWdCO0lBQ2hCLE9BQU87SUFDUCxnQkFBZ0I7SUFDaEIsYUFBYTtJQUNiLG1GQUFtRjtJQUNuRixTQUFTO0lBQ1QsY0FBYztJQUNkLGtFQUFrRTtJQUNsRSxtQkFBbUI7SUFDbkIsc0VBQXNFO0lBQ3RFLFlBQVk7SUFDWixvQkFBb0I7SUFDcEIsZ0JBQWdCO0lBQ2hCLGNBQWM7SUFDZCxxQkFBcUI7SUFDckIsa0JBQWtCO0lBQ2xCLG1CQUFtQjtJQUNuQiwwQkFBMEI7SUFDMUIsY0FBYztJQUNkLHNCQUFzQjtJQUN0QixnQ0FBZ0M7SUFDaEMseUJBQXlCO0lBQ3pCLGNBQWM7SUFDZCxnQkFBZ0I7SUFDaEIsd0JBQXdCO0NBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLy9cbi8vIEJhcnJlbCBmb3IgdGhlIERyaXp6bGUgc2NoZW1hLiBUaGUgdGFibGUvdHlwZSBkZWZpbml0aW9ucyBsaXZlIGluIHBlci1kb21haW5cbi8vIGZpbGVzIHVuZGVyIGAuL3NjaGVtYS8qYDsgdGhpcyBtb2R1bGUgcmUtZXhwb3J0cyBldmVyeSBvbmUgb2YgdGhlbSBzbyB0aGVcbi8vIHB1YmxpYyBBUEkgaXMgYnl0ZS1pZGVudGljYWwgdG8gdGhlIHByZXZpb3VzIHNpbmdsZS1maWxlIHNjaGVtYS4gRXhpc3Rpbmdcbi8vIGBpbXBvcnQgeyAuLi4gfSBmcm9tICcuLi4vZHJpenpsZS1zY2hlbWEnYCBzaXRlcyBhbmQgdGhlIGFnZ3JlZ2F0ZSBgc2NoZW1hYFxuLy8gb2JqZWN0IGJlbG93IGJvdGggY29udGludWUgdG8gcmVzb2x2ZSBleGFjdGx5IGFzIGJlZm9yZS5cbi8vXG5cbmV4cG9ydCAqIGZyb20gJy4vc2NoZW1hL3BsdWdpbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NjaGVtYS9waXBlbGluZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NjaGVtYS9waXBlbGluZS10ZW1wbGF0ZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NjaGVtYS9tZXNzYWdlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc2NoZW1hL2NvbXBsaWFuY2UuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zY2hlbWEvZGFzaGJvYXJkLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc2NoZW1hL2FsZXJ0LmpzJztcblxuaW1wb3J0IHsgb3JnQWxlcnREZXN0aW5hdGlvbiwgb3JnQWxlcnRSdWxlIH0gZnJvbSAnLi9zY2hlbWEvYWxlcnQuanMnO1xuaW1wb3J0IHtcbiAgY29tcGxpYW5jZVBvbGljeSxcbiAgY29tcGxpYW5jZVJ1bGUsXG4gIGNvbXBsaWFuY2VSdWxlSGlzdG9yeSxcbiAgY29tcGxpYW5jZUF1ZGl0TG9nLFxuICBjb21wbGlhbmNlRXhlbXB0aW9uLFxuICBjb21wbGlhbmNlUnVsZVN1YnNjcmlwdGlvbixcbiAgY29tcGxpYW5jZVNjYW4sXG4gIGNvbXBsaWFuY2VTY2FuU2NoZWR1bGUsXG4gIGNvbXBsaWFuY2VOb3RpZmljYXRpb25QcmVmZXJlbmNlLFxuICBjb21wbGlhbmNlTm90aWZpY2F0aW9uTG9nLFxuICBjb21wbGlhbmNlUm9sZSxcbiAgY29tcGxpYW5jZVJlcG9ydCxcbiAgY29tcGxpYW5jZVJlcG9ydFNjaGVkdWxlLFxufSBmcm9tICcuL3NjaGVtYS9jb21wbGlhbmNlLmpzJztcbmltcG9ydCB7IGRhc2hib2FyZCwgZGFzaGJvYXJkUGFuZWwgfSBmcm9tICcuL3NjaGVtYS9kYXNoYm9hcmQuanMnO1xuaW1wb3J0IHsgbWVzc2FnZSB9IGZyb20gJy4vc2NoZW1hL21lc3NhZ2UuanMnO1xuaW1wb3J0IHsgcGlwZWxpbmVUZW1wbGF0ZSB9IGZyb20gJy4vc2NoZW1hL3BpcGVsaW5lLXRlbXBsYXRlLmpzJztcbmltcG9ydCB7IHBpcGVsaW5lLCBwaXBlbGluZVJlZ2lzdHJ5LCBwaXBlbGluZUV2ZW50IH0gZnJvbSAnLi9zY2hlbWEvcGlwZWxpbmUuanMnO1xuaW1wb3J0IHsgcGx1Z2luIH0gZnJvbSAnLi9zY2hlbWEvcGx1Z2luLmpzJztcblxuLyoqXG4gKiBDb21wbGV0ZSBEcml6emxlIHNjaGVtYSBleHBvcnRcbiAqL1xuZXhwb3J0IGNvbnN0IHNjaGVtYSA9IHtcbiAgcGx1Z2luLFxuICBwaXBlbGluZSxcbiAgcGlwZWxpbmVUZW1wbGF0ZSxcbiAgbWVzc2FnZSxcbiAgcGlwZWxpbmVSZWdpc3RyeSxcbiAgcGlwZWxpbmVFdmVudCxcbiAgLy8gT2JzZXJ2YWJpbGl0eSBkYXNoYm9hcmRzICh1c2VyLWVkaXRhYmxlIHJlcGxhY2VtZW50IGZvciBjb2RlLWRlZmluZWQgZGFzaGJvYXJkcylcbiAgZGFzaGJvYXJkLFxuICBkYXNoYm9hcmRQYW5lbCxcbiAgLy8gUGVyLW9yZyBhbGVydCBub3RpZmljYXRpb24gZGVzdGluYXRpb25zIChtdWx0aS10ZW5hbnQgYWxlcnRpbmcpXG4gIG9yZ0FsZXJ0RGVzdGluYXRpb24sXG4gIC8vIHBlci1vcmcgb3BlcmF0b3ItYXV0aG9yZWQgYWxlcnQgcnVsZXMgIG1hdGVyaWFsaXplZCBpbnRvIFByb20gWUFNTC5cbiAgb3JnQWxlcnRSdWxlLFxuICAvLyBDb21wbGlhbmNlIHRhYmxlc1xuICBjb21wbGlhbmNlUG9saWN5LFxuICBjb21wbGlhbmNlUnVsZSxcbiAgY29tcGxpYW5jZVJ1bGVIaXN0b3J5LFxuICBjb21wbGlhbmNlQXVkaXRMb2csXG4gIGNvbXBsaWFuY2VFeGVtcHRpb24sXG4gIGNvbXBsaWFuY2VSdWxlU3Vic2NyaXB0aW9uLFxuICBjb21wbGlhbmNlU2NhbixcbiAgY29tcGxpYW5jZVNjYW5TY2hlZHVsZSxcbiAgY29tcGxpYW5jZU5vdGlmaWNhdGlvblByZWZlcmVuY2UsXG4gIGNvbXBsaWFuY2VOb3RpZmljYXRpb25Mb2csXG4gIGNvbXBsaWFuY2VSb2xlLFxuICBjb21wbGlhbmNlUmVwb3J0LFxuICBjb21wbGlhbmNlUmVwb3J0U2NoZWR1bGUsXG59IGFzIGNvbnN0O1xuIl19
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJpenpsZS1zY2hlbWEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YWJhc2UvZHJpenpsZS1zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxFQUFFO0FBQ0YsK0VBQStFO0FBQy9FLDRFQUE0RTtBQUM1RSw0RUFBNEU7QUFDNUUsOEVBQThFO0FBQzlFLDJEQUEyRDtBQUMzRCxFQUFFO0FBRUYsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLG1CQUFtQixDQUFDO0FBRWxDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN0RSxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGNBQWMsRUFDZCxxQkFBcUIsRUFDckIsa0JBQWtCLEVBQ2xCLG1CQUFtQixFQUNuQiwwQkFBMEIsRUFDMUIsY0FBYyxFQUNkLHNCQUFzQixFQUN0QixnQ0FBZ0MsRUFDaEMseUJBQXlCLEVBQ3pCLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsd0JBQXdCLEdBQ3pCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFNUM7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUc7SUFDcEIsTUFBTTtJQUNOLFFBQVE7SUFDUixnQkFBZ0I7SUFDaEIsT0FBTztJQUNQLGlCQUFpQjtJQUNqQixnQkFBZ0I7SUFDaEIsYUFBYTtJQUNiLG1GQUFtRjtJQUNuRixTQUFTO0lBQ1QsY0FBYztJQUNkLGtFQUFrRTtJQUNsRSxtQkFBbUI7SUFDbkIsc0VBQXNFO0lBQ3RFLFlBQVk7SUFDWixvQkFBb0I7SUFDcEIsZ0JBQWdCO0lBQ2hCLGNBQWM7SUFDZCxxQkFBcUI7SUFDckIsa0JBQWtCO0lBQ2xCLG1CQUFtQjtJQUNuQiwwQkFBMEI7SUFDMUIsY0FBYztJQUNkLHNCQUFzQjtJQUN0QixnQ0FBZ0M7SUFDaEMseUJBQXlCO0lBQ3pCLGNBQWM7SUFDZCxnQkFBZ0I7SUFDaEIsd0JBQXdCO0NBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLy9cbi8vIEJhcnJlbCBmb3IgdGhlIERyaXp6bGUgc2NoZW1hLiBUaGUgdGFibGUvdHlwZSBkZWZpbml0aW9ucyBsaXZlIGluIHBlci1kb21haW5cbi8vIGZpbGVzIHVuZGVyIGAuL3NjaGVtYS8qYDsgdGhpcyBtb2R1bGUgcmUtZXhwb3J0cyBldmVyeSBvbmUgb2YgdGhlbSBzbyB0aGVcbi8vIHB1YmxpYyBBUEkgaXMgYnl0ZS1pZGVudGljYWwgdG8gdGhlIHByZXZpb3VzIHNpbmdsZS1maWxlIHNjaGVtYS4gRXhpc3Rpbmdcbi8vIGBpbXBvcnQgeyAuLi4gfSBmcm9tICcuLi4vZHJpenpsZS1zY2hlbWEnYCBzaXRlcyBhbmQgdGhlIGFnZ3JlZ2F0ZSBgc2NoZW1hYFxuLy8gb2JqZWN0IGJlbG93IGJvdGggY29udGludWUgdG8gcmVzb2x2ZSBleGFjdGx5IGFzIGJlZm9yZS5cbi8vXG5cbmV4cG9ydCAqIGZyb20gJy4vc2NoZW1hL3BsdWdpbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NjaGVtYS9waXBlbGluZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NjaGVtYS9waXBlbGluZS10ZW1wbGF0ZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NjaGVtYS9tZXNzYWdlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc2NoZW1hL21lc3NhZ2UtYXR0YWNobWVudC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NjaGVtYS9jb21wbGlhbmNlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc2NoZW1hL2Rhc2hib2FyZC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NjaGVtYS9hbGVydC5qcyc7XG5cbmltcG9ydCB7IG9yZ0FsZXJ0RGVzdGluYXRpb24sIG9yZ0FsZXJ0UnVsZSB9IGZyb20gJy4vc2NoZW1hL2FsZXJ0LmpzJztcbmltcG9ydCB7XG4gIGNvbXBsaWFuY2VQb2xpY3ksXG4gIGNvbXBsaWFuY2VSdWxlLFxuICBjb21wbGlhbmNlUnVsZUhpc3RvcnksXG4gIGNvbXBsaWFuY2VBdWRpdExvZyxcbiAgY29tcGxpYW5jZUV4ZW1wdGlvbixcbiAgY29tcGxpYW5jZVJ1bGVTdWJzY3JpcHRpb24sXG4gIGNvbXBsaWFuY2VTY2FuLFxuICBjb21wbGlhbmNlU2NhblNjaGVkdWxlLFxuICBjb21wbGlhbmNlTm90aWZpY2F0aW9uUHJlZmVyZW5jZSxcbiAgY29tcGxpYW5jZU5vdGlmaWNhdGlvbkxvZyxcbiAgY29tcGxpYW5jZVJvbGUsXG4gIGNvbXBsaWFuY2VSZXBvcnQsXG4gIGNvbXBsaWFuY2VSZXBvcnRTY2hlZHVsZSxcbn0gZnJvbSAnLi9zY2hlbWEvY29tcGxpYW5jZS5qcyc7XG5pbXBvcnQgeyBkYXNoYm9hcmQsIGRhc2hib2FyZFBhbmVsIH0gZnJvbSAnLi9zY2hlbWEvZGFzaGJvYXJkLmpzJztcbmltcG9ydCB7IG1lc3NhZ2VBdHRhY2htZW50IH0gZnJvbSAnLi9zY2hlbWEvbWVzc2FnZS1hdHRhY2htZW50LmpzJztcbmltcG9ydCB7IG1lc3NhZ2UgfSBmcm9tICcuL3NjaGVtYS9tZXNzYWdlLmpzJztcbmltcG9ydCB7IHBpcGVsaW5lVGVtcGxhdGUgfSBmcm9tICcuL3NjaGVtYS9waXBlbGluZS10ZW1wbGF0ZS5qcyc7XG5pbXBvcnQgeyBwaXBlbGluZSwgcGlwZWxpbmVSZWdpc3RyeSwgcGlwZWxpbmVFdmVudCB9IGZyb20gJy4vc2NoZW1hL3BpcGVsaW5lLmpzJztcbmltcG9ydCB7IHBsdWdpbiB9IGZyb20gJy4vc2NoZW1hL3BsdWdpbi5qcyc7XG5cbi8qKlxuICogQ29tcGxldGUgRHJpenpsZSBzY2hlbWEgZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBzY2hlbWEgPSB7XG4gIHBsdWdpbixcbiAgcGlwZWxpbmUsXG4gIHBpcGVsaW5lVGVtcGxhdGUsXG4gIG1lc3NhZ2UsXG4gIG1lc3NhZ2VBdHRhY2htZW50LFxuICBwaXBlbGluZVJlZ2lzdHJ5LFxuICBwaXBlbGluZUV2ZW50LFxuICAvLyBPYnNlcnZhYmlsaXR5IGRhc2hib2FyZHMgKHVzZXItZWRpdGFibGUgcmVwbGFjZW1lbnQgZm9yIGNvZGUtZGVmaW5lZCBkYXNoYm9hcmRzKVxuICBkYXNoYm9hcmQsXG4gIGRhc2hib2FyZFBhbmVsLFxuICAvLyBQZXItb3JnIGFsZXJ0IG5vdGlmaWNhdGlvbiBkZXN0aW5hdGlvbnMgKG11bHRpLXRlbmFudCBhbGVydGluZylcbiAgb3JnQWxlcnREZXN0aW5hdGlvbixcbiAgLy8gcGVyLW9yZyBvcGVyYXRvci1hdXRob3JlZCBhbGVydCBydWxlcyAgbWF0ZXJpYWxpemVkIGludG8gUHJvbSBZQU1MLlxuICBvcmdBbGVydFJ1bGUsXG4gIC8vIENvbXBsaWFuY2UgdGFibGVzXG4gIGNvbXBsaWFuY2VQb2xpY3ksXG4gIGNvbXBsaWFuY2VSdWxlLFxuICBjb21wbGlhbmNlUnVsZUhpc3RvcnksXG4gIGNvbXBsaWFuY2VBdWRpdExvZyxcbiAgY29tcGxpYW5jZUV4ZW1wdGlvbixcbiAgY29tcGxpYW5jZVJ1bGVTdWJzY3JpcHRpb24sXG4gIGNvbXBsaWFuY2VTY2FuLFxuICBjb21wbGlhbmNlU2NhblNjaGVkdWxlLFxuICBjb21wbGlhbmNlTm90aWZpY2F0aW9uUHJlZmVyZW5jZSxcbiAgY29tcGxpYW5jZU5vdGlmaWNhdGlvbkxvZyxcbiAgY29tcGxpYW5jZVJvbGUsXG4gIGNvbXBsaWFuY2VSZXBvcnQsXG4gIGNvbXBsaWFuY2VSZXBvcnRTY2hlZHVsZSxcbn0gYXMgY29uc3Q7XG4iXX0=
@@ -74,7 +74,10 @@ export const dashboard = pgTable('dashboards', {
74
74
  // Same-org duplicate-name guard. The (orgId, name) tuple is unique among
75
75
  // non-deleted rows; soft-deleted rows are excluded so name reuse after
76
76
  // deletion works.
77
- nameUnique: uniqueIndex('dashboard_org_name_unique').on(table.orgId, table.name),
77
+ // Partial (live-rows only) to match the deployed DDL + the sibling
78
+ // orgAlertRule.orgNameUq — a tombstone must not reserve its name, so a live
79
+ // namesake can coexist (and restore can 409 on collision, handled in the route).
80
+ nameUnique: uniqueIndex('dashboard_org_name_unique').on(table.orgId, table.name).where(sql `deleted_at IS NULL`),
78
81
  }));
79
82
  /**
80
83
  * A single panel inside a dashboard. The catalog `queryKey` is the only thing
@@ -123,4 +126,4 @@ export const dashboardPanel = pgTable('dashboard_panels', {
123
126
  dashboardPositionIdx: index('dashboard_panel_dashboard_position_idx')
124
127
  .on(table.dashboardId, table.position),
125
128
  }));
126
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RhdGFiYXNlL3NjaGVtYS9kYXNoYm9hcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVsSDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsWUFBWSxFQUFFO0lBQzdDLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsYUFBYSxFQUFFO0lBRTNDLGdCQUFnQjtJQUNoQixLQUFLLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztTQUN0QyxPQUFPLENBQUMsYUFBYSxDQUFDO1NBQ3RCLE9BQU8sRUFBRTtJQUNaLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQzFCLE9BQU8sQ0FBQyxhQUFhLENBQUM7U0FDdEIsT0FBTyxFQUFFO0lBQ1osU0FBUyxFQUFFLFNBQVMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDdkQsVUFBVSxFQUFFO1NBQ1osT0FBTyxFQUFFO0lBQ1osU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDMUIsT0FBTyxDQUFDLGFBQWEsQ0FBQztTQUN0QixPQUFPLEVBQUU7SUFDWixTQUFTLEVBQUUsU0FBUyxD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b0VBQW9FO0lBQ3BFLE9BQU8sRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQzVDLDZEQUE2RDtJQUM3RCxNQUFNLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUN6Qyx1RUFBdUU7SUFDdkUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUM7U0FDMUIsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUNWLE9BQU8sRUFBRTtJQUNaLHlFQUF5RTtJQUN6RSwwRUFBMEU7SUFDMUUsNkJBQTZCO0lBQzdCLElBQUksRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO1NBQ2hCLEtBQUssRUFBMEI7U0FDL0IsT0FBTyxDQUFDLEVBQUUsQ0FBQztTQUNYLE9BQU8sRUFBRTtDQUNiLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDYixrRUFBa0U7SUFDbEUsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLHdDQUF3QyxDQUFDO1NBQ2xFLEVBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUM7Q0FDekMsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgU1lTVEVNX09SR19JRCB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IHNxbCB9IGZyb20gJ2RyaXp6bGUtb3JtJztcbmltcG9ydCB7IGludGVnZXIsIHZhcmNoYXIsIHBnVGFibGUsIHRleHQsIHRpbWVzdGFtcCwgdXVpZCwganNvbmIsIGluZGV4LCB1bmlxdWVJbmRleCB9IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnO1xuXG4vKipcbiAqIFVzZXItZWRpdGFibGUgb2JzZXJ2YWJpbGl0eSBkYXNoYm9hcmQuIFJlcGxhY2VzIHRoZSBjb2RlLWRlZmluZWQgZGFzaGJvYXJkc1xuICogdW5kZXIgYGZyb250ZW5kL3NyYy9saWIvZGFzaGJvYXJkcy8qLnRzYCBzbyBvcGVyYXRvcnMgY2FuIGFkZCBwYW5lbHMgYW5kXG4gKiBjdXN0b21pemUgbGF5b3V0IHBlci1vcmcgd2l0aG91dCBhIHJlZGVwbG95LlxuICpcbiAqIGBsYXlvdXRKc29uYCBjYXJyaWVzIHRoZSByZWFjdC1ncmlkLWxheW91dCBjb29yZGluYXRlIHNldCBrZXllZCBieSBwYW5lbCBpZDtcbiAqIGBkYXNoYm9hcmRfcGFuZWxzYCBob2xkcyB0aGUgcGFuZWwtY29udGVudCByb3dzIHNvIGFuIE4tcGFuZWwgZGFzaGJvYXJkXG4gKiBkb2Vzbid0IGJsb2F0IG9uZSByb3cncyBKU09OIHRvIHNldmVyYWwgS0IuIFRoZSBjYXRhbG9nIHF1ZXJ5IGlzIHJlZmVyZW5jZWRcbiAqIGJ5IGtleSBvbmx5IChzZWUgcGxhdGZvcm0vc3JjL29ic2VydmFiaWxpdHkvY2F0YWxvZy50cykgIHRoZSBkYXNoYm9hcmRcbiAqIHJlY29yZCBuZXZlciBjYXJyaWVzIHJhdyBQcm9tUUwvTG9nUUwsIGtlZXBpbmcgdGhlIGNhdGFsb2cgYXMgdGhlIHNlY3VyaXR5XG4gKiBib3VuZGFyeSBmb3IgdXBzdHJlYW0gcXVlcnkgZXhlY3V0aW9uLlxuICpcbiAqIFZpc2liaWxpdHkgbGFkZGVyICogLSBgcHJpdmF0ZWAgIG9ubHkgdGhlIGNyZWF0b3IgY2FuIHJlYWQvd3JpdGVcbiAqIC0gYG9yZ2AgIGFueW9uZSBpbiB0aGUgc2FtZSBvcmcgY2FuIHJlYWQ7IG9yZyBhZG1pbnMgKyBjcmVhdG9yIGNhbiB3cml0ZVxuICogLSBgcHVibGljYCAgZXZlcnkgYXV0aGVudGljYXRlZCB1c2VyIGNhbiByZWFkOyBvbmx5IHN5c2FkbWlucyBjYW4gd3JpdGUuXG4gKiBVc2VkIGZvciB0aGUgNSBkZWZhdWx0IGRhc2hib2FyZHMgKGBvcmdfaWQ9J3N5c3RlbSdgKSBzbyB0aGVcbiAqIGV4aXN0aW5nIHN5c3RlbS1vcmcgdmlzaWJpbGl0eSBydWxlIGNvdmVycyB0aGVtIGJ5IGRlZmF1bHQuXG4gKlxuICogQHRhYmxlIGRhc2hib2FyZHNcbiAqL1xuZXhwb3J0IGNvbnN0IGRhc2hib2FyZCA9IHBnVGFibGUoJ2Rhc2hib2FyZHMnLCB7XG4gIGlkOiB1dWlkKCdpZCcpLnByaW1hcnlLZXkoKS5kZWZhdWx0UmFuZG9tKCksXG5cbiAgLy8gT3JnICsgY3JlYXRvclxuICBvcmdJZDogdmFyY2hhcignb3JnX2lkJywgeyBsZW5ndGg6IDI1NSB9KVxuICAgIC5kZWZhdWx0KFNZU1RFTV9PUkdfSUQpXG4gICAgLm5vdE51bGwoKSxcbiAgY3JlYXRlZEJ5OiB0ZXh0KCdjcmVhdGVkX2J5JylcbiAgICAuZGVmYXVsdChTWVNURU1fT1JHX0lEKVxuICAgIC5ub3ROdWxsKCksXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wKCdjcmVhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSlcbiAgICAuZGVmYXVsdE5vdygpXG4gICAgLm5vdE51bGwoKSxcbiAgdXBkYXRlZEJ5OiB0ZXh0KCd1cGRhdGVkX2J5JylcbiAgICAuZGVmYXVsdChTWVNURU1fT1JHX0lEKVxuICAgIC5ub3ROdWxsKCksXG4gIHVwZGF0ZWRBdDogdGltZXN0YW1wKCd1cGRhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSlcbiAgICAuZGVmYXVsdE5vdygpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBJZGVudGl0eVxuICBuYW1lOiB2YXJjaGFyKCduYW1lJywgeyBsZW5ndGg6IDE1MCB9KVxuICAgIC5ub3ROdWxsKCksXG4gIGRlc2NyaXB0aW9uOiB0ZXh0KCdkZXNjcmlwdGlvbicpLFxuXG4gIC8vIHJlYWN0LWdyaWQtbGF5b3V0IGNvb3JkaW5hdGUgc2V0IGtleWVkIGJ5IHBhbmVsIGlkLlxuICAvLyBTaGFwZTogeyBbcGFuZWxJZF06IHsgeCwgeSwgdywgaCwgbWluVz8sIG1pbkg/IH0gfVxuICBsYXlvdXRKc29uOiBqc29uYignbGF5b3V0X2pzb24nKVxuICAgIC4kdHlwZTxSZWNvcmQ8c3RyaW5nLCB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB3OiBudW1iZXI7IGg6IG51bWJlcjsgbWluVz86IG51bWJlcjsgbWluSD86IG51bWJlciB9Pj4oKVxuICAgIC5kZWZhdWx0KHt9KVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gVmlzaWJpbGl0eSAgc2VlIGhlYWRlciBmb3IgbGFkZGVyIHNlbWFudGljcy4gQ29uc3RyYWluZWQgYXQgdGhlIFNRTFxuICAvLyBsYXllciB0b28gdmlhIGEgQ0hFQ0sgaW4gcG9zdGdyZXMtaW5pdC5zcWwgdG8ga2VlcCB0eXBvcyBmcm9tIHNuZWFraW5nXG4gIC8vIHBhc3QgdGhlIGFwcGxpY2F0aW9uIGxheWVyLlxuICB2aXNpYmlsaXR5OiB2YXJjaGFyKCd2aXNpYmlsaXR5JywgeyBsZW5ndGg6IDEwIH0pXG4gICAgLiR0eXBlPCdwcml2YXRlJyB8ICdvcmcnIHwgJ3B1YmxpYyc+KClcbiAgICAuZGVmYXVsdCgncHJpdmF0ZScpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBTb2Z0IGRlbGV0ZSAobWF0Y2hlcyB0aGUgcmVzdCBvZiB0aGUgc2NoZW1hJ3MgY29udmVudGlvbilcbiAgZGVsZXRlZEF0OiB0aW1lc3RhbXAoJ2RlbGV0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbiAgZGVsZXRlZEJ5OiB0ZXh0KCdkZWxldGVkX2J5JyksXG4gIC8vIFNvZnQtZGVsZXRlIHB1cmdlIGRlYWRsaW5lOiB0aGUgcmV0ZW50aW9uIHN3ZWVwIGhhcmQtZGVsZXRlcyB0b21ic3RvbmVkXG4gIC8vIHJvd3Mgb25jZSBgcHVyZ2VfYWZ0ZXJgIGhhcyBwYXNzZWQgKHNldCBvbiBkZWxldGUgYWxvbmdzaWRlIGRlbGV0ZWRfYXQpLlxuICBwdXJnZUFmdGVyOiB0aW1lc3RhbXAoJ3B1cmdlX2FmdGVyJywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG59LCAodGFibGUpID0+ICh7XG4gIC8vIFBhcnRpYWwgaW5kZXggb3ZlciBqdXN0IHRoZSB0b21ic3RvbmVzIOKAlCBkcml2ZXMgdGhlIHJldGVudGlvbiBwdXJnZSBzd2VlcC5cbiAgcHVyZ2VJZHg6IGluZGV4KCdkYXNoYm9hcmRfcHVyZ2VfaWR4Jykub24odGFibGUucHVyZ2VBZnRlcikud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTk9UIE5VTExgKSxcbiAgLy8gTGlzdGluZyBpcyBvcmctc2NvcGVkIGFuZCB2aXNpYmlsaXR5LWZpbHRlcmVkLCBzbyBib3RoIGdvIGluIHRoZSBpbmRleC5cbiAgb3JnVmlzaWJpbGl0eUlkeDogaW5kZXgoJ2Rhc2hib2FyZF9vcmdfdmlzaWJpbGl0eV9pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUudmlzaWJpbGl0eSksXG4gIC8vIENvbnZlbmllbmNlIGZvciBcImFsbCBteSBkYXNoYm9hcmRzXCIgbGlzdGluZ1xuICBjcmVhdGVkQnlJZHg6IGluZGV4KCdkYXNoYm9hcmRfY3JlYXRlZF9ieV9pZHgnKS5vbih0YWJsZS5jcmVhdGVkQnkpLFxuICAvLyBTYW1lLW9yZyBkdXBsaWNhdGUtbmFtZSBndWFyZC4gVGhlIChvcmdJZCwgbmFtZSkgdHVwbGUgaXMgdW5pcXVlIGFtb25nXG4gIC8vIG5vbi1kZWxldGVkIHJvd3M7IHNvZnQtZGVsZXRlZCByb3dzIGFyZSBleGNsdWRlZCBzbyBuYW1lIHJldXNlIGFmdGVyXG4gIC8vIGRlbGV0aW9uIHdvcmtzLlxuICBuYW1lVW5pcXVlOiB1bmlxdWVJbmRleCgnZGFzaGJvYXJkX29yZ19uYW1lX3VuaXF1ZScpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5uYW1lKSxcbn0pKTtcblxuLyoqXG4gKiBBIHNpbmdsZSBwYW5lbCBpbnNpZGUgYSBkYXNoYm9hcmQuIFRoZSBjYXRhbG9nIGBxdWVyeUtleWAgaXMgdGhlIG9ubHkgdGhpbmdcbiAqIHRoZSBwYW5lbCBjYXJyaWVzIGZyb20gdGhlIHF1ZXJ5IHNpZGUgIHN1YnN0aXR1dGlvbiArIGV4ZWN1dGlvbiBoYXBwZW5zXG4gKiBzZXJ2ZXItc2lkZSB2aWEgdGhlIGV4aXN0aW5nIGNhdGFsb2csIHNvIG5vIFByb21RTC9Mb2dRTCB0cmF2ZWxzIHdpdGggdGhlXG4gKiBwYW5lbCByZWNvcmQuXG4gKlxuICogQHRhYmxlIGRhc2hib2FyZF9wYW5lbHNcbiAqL1xuZXhwb3J0IGNvbnN0IGRhc2hib2FyZFBhbmVsID0gcGdUYWJsZSgnZGFzaGJvYXJkX3BhbmVscycsIHtcbiAgaWQ6IHV1aWQoJ2lkJykucHJpbWFyeUtleSgpLmRlZmF1bHRSYW5kb20oKSxcbiAgZGFzaGJvYXJkSWQ6IHV1aWQoJ2Rhc2hib2FyZF9pZCcpXG4gICAgLm5vdE51bGwoKSxcbiAgLy8gQ2F0YWxvZyBrZXkgKGUuZy4gYHBsdWdpbl9idWlsZHNfcGVyX21pbmApLiBUaGUgc2VydmVyIHZhbGlkYXRlcyB0aGlzXG4gIC8vIGFnYWluc3QgUVVFUklFUyBhdCByZW5kZXIgdGltZS5cbiAgcXVlcnlLZXk6IHZhcmNoYXIoJ3F1ZXJ5X2tleScsIHsgbGVuZ3RoOiAxMDAgfSlcbiAgICAubm90TnVsbCgpLFxuICAvLyAnc3RhdCcgfCAnbGluZScgfCAndGFibGUnIHwgJ3N0YWNrZWQtYmFyJyAga2VwdCBzdHJpbmdseS10eXBlZCBmb3JcbiAgLy8gZm9yd2FyZCBjb21wYXRpYmlsaXR5OyB0aGUgcmVuZGVyZXIgZmFsbHMgYmFjayB0byAnbGluZScgb24gdW5rbm93bi5cbiAgdml6S2luZDogdmFyY2hhcigndml6X2tpbmQnLCB7IGxlbmd0aDogMzAgfSlcbiAgICAuZGVmYXVsdCgnbGluZScpXG4gICAgLm5vdE51bGwoKSxcbiAgdGl0bGU6IHZhcmNoYXIoJ3RpdGxlJywgeyBsZW5ndGg6IDIwMCB9KVxuICAgIC5ub3ROdWxsKCksXG4gIC8vIFRhaWx3aW5kIGNvbC1zcGFuIHRpZXIgKDEtMTIsIGJ1dCBvbmx5IDMvNC82LzgvOS8xMiBhcmUgcmVuZGVyYWJsZSkuXG4gIHNwYW46IGludGVnZXIoJ3NwYW4nKVxuICAgIC5kZWZhdWx0KDYpXG4gICAgLm5vdE51bGwoKSxcbiAgLy8gT3B0aW9uYWw6IGxhYmVsIGtleSBmb3Igc2VyaWVzIGdyb3VwaW5nIChlLmcuICdzdGF0dXMnLCAnc3RhdGUnKS5cbiAgZ3JvdXBCeTogdmFyY2hhcignZ3JvdXBfYnknLCB7IGxlbmd0aDogNTAgfSksXG4gIC8vIE9wdGlvbmFsOiBjYXRhbG9nIGZvcm1hdCBrZXkgKCdwZXJjZW50JyB8ICdzZWNvbmRzJyB8Li4uKS5cbiAgZm9ybWF0OiB2YXJjaGFyKCdmb3JtYXQnLCB7IGxlbmd0aDogMjAgfSksXG4gIC8vIDAtYmFzZWQgcmVuZGVyIG9yZGVyIHdpdGhpbiB0aGUgZGFzaGJvYXJkLiBFZGl0b3IgcmVhc3NpZ25zIG9uIGRyYWcuXG4gIHBvc2l0aW9uOiBpbnRlZ2VyKCdwb3NpdGlvbicpXG4gICAgLmRlZmF1bHQoMClcbiAgICAubm90TnVsbCgpLFxuICAvLyBPcHRpb25hbCB0ZW1wbGF0ZSB2YXIgdmFsdWVzIGJvdW5kIGF0IHBhbmVsIGxldmVsIChlLmcuIGBwbHVnaW49WGAgZm9yXG4gIC8vIHRoZSBwZXItcGx1Z2luIGRyaWxsLWRvd24gcGFuZWwpLiBTYW5pdGl6ZWQgc2VydmVyLXNpZGUgdmlhIHRoZSBjYXRhbG9nXG4gIC8vIHN1YnN0aXR1dGVWYXJzIGFsbG93LWxpc3QuXG4gIHZhcnM6IGpzb25iKCd2YXJzJylcbiAgICAuJHR5cGU8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oKVxuICAgIC5kZWZhdWx0KHt9KVxuICAgIC5ub3ROdWxsKCksXG59LCAodGFibGUpID0+ICh7XG4gIC8vIFRoZSByZW5kZXIgcGF0aCBpcyBcImZldGNoIGFsbCBwYW5lbHMgZm9yIGRhc2hib2FyZCBYIGluIG9yZGVyXCIuXG4gIGRhc2hib2FyZFBvc2l0aW9uSWR4OiBpbmRleCgnZGFzaGJvYXJkX3BhbmVsX2Rhc2hib2FyZF9wb3NpdGlvbl9pZHgnKVxuICAgIC5vbih0YWJsZS5kYXNoYm9hcmRJZCwgdGFibGUucG9zaXRpb24pLFxufSkpO1xuXG4vLyBPYnNlcnZhYmlsaXR5IGRhc2hib2FyZHNcbmV4cG9ydCB0eXBlIERhc2hib2FyZCA9IHR5cGVvZiBkYXNoYm9hcmQuJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgRGFzaGJvYXJkSW5zZXJ0ID0gdHlwZW9mIGRhc2hib2FyZC4kaW5mZXJJbnNlcnQ7XG5leHBvcnQgdHlwZSBEYXNoYm9hcmRVcGRhdGUgPSBQYXJ0aWFsPE9taXQ8RGFzaGJvYXJkSW5zZXJ0LCAnaWQnIHwgJ2NyZWF0ZWRBdCcgfCAnY3JlYXRlZEJ5Jz4+O1xuXG5leHBvcnQgdHlwZSBEYXNoYm9hcmRQYW5lbCA9IHR5cGVvZiBkYXNoYm9hcmRQYW5lbC4kaW5mZXJTZWxlY3Q7XG5leHBvcnQgdHlwZSBEYXNoYm9hcmRQYW5lbEluc2VydCA9IHR5cGVvZiBkYXNoYm9hcmRQYW5lbC4kaW5mZXJJbnNlcnQ7XG5leHBvcnQgdHlwZSBEYXNoYm9hcmRQYW5lbFVwZGF0ZSA9IFBhcnRpYWw8T21pdDxEYXNoYm9hcmRQYW5lbEluc2VydCwgJ2lkJz4+O1xuIl19
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RhdGFiYXNlL3NjaGVtYS9kYXNoYm9hcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVsSDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsWUFBWSxFQUFFO0lBQzdDLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsYUFBYSxFQUFFO0lBRTNDLGdCQUFnQjtJQUNoQixLQUFLLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztTQUN0QyxPQUFPLENBQUMsYUFBYSxDQUFDO1NBQ3RCLE9BQU8sRUFBRTtJQUNaLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQzFCLE9BQU8sQ0FBQyxhQUFhLENBQUM7U0FDdEIsT0FBTyxFQUFFO0lBQ1osU0FBUyxFQUFFLFNBQVMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDdkQsVUFBVSxFQUFFO1NBQ1osT0FBTyxFQUFFO0lBQ1osU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDMUIsT0FBTyxDQUFDLGFBQWEsQ0FBQztTQUN0QixPQUFPLEVBQUU7SUFDWixTQUFTLEVBQUUsU0FBUyxD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SUFBSSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUM7U0FDbEIsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUNWLE9BQU8sRUFBRTtJQUNaLG9FQUFvRTtJQUNwRSxPQUFPLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUM1Qyw2REFBNkQ7SUFDN0QsTUFBTSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDekMsdUVBQXVFO0lBQ3ZFLFFBQVEsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDO1NBQzFCLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDVixPQUFPLEVBQUU7SUFDWix5RUFBeUU7SUFDekUsMEVBQTBFO0lBQzFFLDZCQUE2QjtJQUM3QixJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztTQUNoQixLQUFLLEVBQTBCO1NBQy9CLE9BQU8sQ0FBQyxFQUFFLENBQUM7U0FDWCxPQUFPLEVBQUU7Q0FDYixFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2Isa0VBQWtFO0lBQ2xFLG9CQUFvQixFQUFFLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQztTQUNsRSxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDO0NBQ3pDLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IFNZU1RFTV9PUkdfSUQgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBzcWwgfSBmcm9tICdkcml6emxlLW9ybSc7XG5pbXBvcnQgeyBpbnRlZ2VyLCB2YXJjaGFyLCBwZ1RhYmxlLCB0ZXh0LCB0aW1lc3RhbXAsIHV1aWQsIGpzb25iLCBpbmRleCwgdW5pcXVlSW5kZXggfSBmcm9tICdkcml6emxlLW9ybS9wZy1jb3JlJztcblxuLyoqXG4gKiBVc2VyLWVkaXRhYmxlIG9ic2VydmFiaWxpdHkgZGFzaGJvYXJkLiBSZXBsYWNlcyB0aGUgY29kZS1kZWZpbmVkIGRhc2hib2FyZHNcbiAqIHVuZGVyIGBmcm9udGVuZC9zcmMvbGliL2Rhc2hib2FyZHMvKi50c2Agc28gb3BlcmF0b3JzIGNhbiBhZGQgcGFuZWxzIGFuZFxuICogY3VzdG9taXplIGxheW91dCBwZXItb3JnIHdpdGhvdXQgYSByZWRlcGxveS5cbiAqXG4gKiBgbGF5b3V0SnNvbmAgY2FycmllcyB0aGUgcmVhY3QtZ3JpZC1sYXlvdXQgY29vcmRpbmF0ZSBzZXQga2V5ZWQgYnkgcGFuZWwgaWQ7XG4gKiBgZGFzaGJvYXJkX3BhbmVsc2AgaG9sZHMgdGhlIHBhbmVsLWNvbnRlbnQgcm93cyBzbyBhbiBOLXBhbmVsIGRhc2hib2FyZFxuICogZG9lc24ndCBibG9hdCBvbmUgcm93J3MgSlNPTiB0byBzZXZlcmFsIEtCLiBUaGUgY2F0YWxvZyBxdWVyeSBpcyByZWZlcmVuY2VkXG4gKiBieSBrZXkgb25seSAoc2VlIHBsYXRmb3JtL3NyYy9vYnNlcnZhYmlsaXR5L2NhdGFsb2cudHMpICB0aGUgZGFzaGJvYXJkXG4gKiByZWNvcmQgbmV2ZXIgY2FycmllcyByYXcgUHJvbVFML0xvZ1FMLCBrZWVwaW5nIHRoZSBjYXRhbG9nIGFzIHRoZSBzZWN1cml0eVxuICogYm91bmRhcnkgZm9yIHVwc3RyZWFtIHF1ZXJ5IGV4ZWN1dGlvbi5cbiAqXG4gKiBWaXNpYmlsaXR5IGxhZGRlciAqIC0gYHByaXZhdGVgICBvbmx5IHRoZSBjcmVhdG9yIGNhbiByZWFkL3dyaXRlXG4gKiAtIGBvcmdgICBhbnlvbmUgaW4gdGhlIHNhbWUgb3JnIGNhbiByZWFkOyBvcmcgYWRtaW5zICsgY3JlYXRvciBjYW4gd3JpdGVcbiAqIC0gYHB1YmxpY2AgIGV2ZXJ5IGF1dGhlbnRpY2F0ZWQgdXNlciBjYW4gcmVhZDsgb25seSBzeXNhZG1pbnMgY2FuIHdyaXRlLlxuICogVXNlZCBmb3IgdGhlIDUgZGVmYXVsdCBkYXNoYm9hcmRzIChgb3JnX2lkPSdzeXN0ZW0nYCkgc28gdGhlXG4gKiBleGlzdGluZyBzeXN0ZW0tb3JnIHZpc2liaWxpdHkgcnVsZSBjb3ZlcnMgdGhlbSBieSBkZWZhdWx0LlxuICpcbiAqIEB0YWJsZSBkYXNoYm9hcmRzXG4gKi9cbmV4cG9ydCBjb25zdCBkYXNoYm9hcmQgPSBwZ1RhYmxlKCdkYXNoYm9hcmRzJywge1xuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuXG4gIC8vIE9yZyArIGNyZWF0b3JcbiAgb3JnSWQ6IHZhcmNoYXIoJ29yZ19pZCcsIHsgbGVuZ3RoOiAyNTUgfSlcbiAgICAuZGVmYXVsdChTWVNURU1fT1JHX0lEKVxuICAgIC5ub3ROdWxsKCksXG4gIGNyZWF0ZWRCeTogdGV4dCgnY3JlYXRlZF9ieScpXG4gICAgLmRlZmF1bHQoU1lTVEVNX09SR19JRClcbiAgICAubm90TnVsbCgpLFxuICBjcmVhdGVkQXQ6IHRpbWVzdGFtcCgnY3JlYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pXG4gICAgLmRlZmF1bHROb3coKVxuICAgIC5ub3ROdWxsKCksXG4gIHVwZGF0ZWRCeTogdGV4dCgndXBkYXRlZF9ieScpXG4gICAgLmRlZmF1bHQoU1lTVEVNX09SR19JRClcbiAgICAubm90TnVsbCgpLFxuICB1cGRhdGVkQXQ6IHRpbWVzdGFtcCgndXBkYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pXG4gICAgLmRlZmF1bHROb3coKVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gSWRlbnRpdHlcbiAgbmFtZTogdmFyY2hhcignbmFtZScsIHsgbGVuZ3RoOiAxNTAgfSlcbiAgICAubm90TnVsbCgpLFxuICBkZXNjcmlwdGlvbjogdGV4dCgnZGVzY3JpcHRpb24nKSxcblxuICAvLyByZWFjdC1ncmlkLWxheW91dCBjb29yZGluYXRlIHNldCBrZXllZCBieSBwYW5lbCBpZC5cbiAgLy8gU2hhcGU6IHsgW3BhbmVsSWRdOiB7IHgsIHksIHcsIGgsIG1pblc/LCBtaW5IPyB9IH1cbiAgbGF5b3V0SnNvbjoganNvbmIoJ2xheW91dF9qc29uJylcbiAgICAuJHR5cGU8UmVjb3JkPHN0cmluZywgeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgdzogbnVtYmVyOyBoOiBudW1iZXI7IG1pblc/OiBudW1iZXI7IG1pbkg/OiBudW1iZXIgfT4+KClcbiAgICAuZGVmYXVsdCh7fSlcbiAgICAubm90TnVsbCgpLFxuXG4gIC8vIFZpc2liaWxpdHkgIHNlZSBoZWFkZXIgZm9yIGxhZGRlciBzZW1hbnRpY3MuIENvbnN0cmFpbmVkIGF0IHRoZSBTUUxcbiAgLy8gbGF5ZXIgdG9vIHZpYSBhIENIRUNLIGluIHBvc3RncmVzLWluaXQuc3FsIHRvIGtlZXAgdHlwb3MgZnJvbSBzbmVha2luZ1xuICAvLyBwYXN0IHRoZSBhcHBsaWNhdGlvbiBsYXllci5cbiAgdmlzaWJpbGl0eTogdmFyY2hhcigndmlzaWJpbGl0eScsIHsgbGVuZ3RoOiAxMCB9KVxuICAgIC4kdHlwZTwncHJpdmF0ZScgfCAnb3JnJyB8ICdwdWJsaWMnPigpXG4gICAgLmRlZmF1bHQoJ3ByaXZhdGUnKVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gU29mdCBkZWxldGUgKG1hdGNoZXMgdGhlIHJlc3Qgb2YgdGhlIHNjaGVtYSdzIGNvbnZlbnRpb24pXG4gIGRlbGV0ZWRBdDogdGltZXN0YW1wKCdkZWxldGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIGRlbGV0ZWRCeTogdGV4dCgnZGVsZXRlZF9ieScpLFxuICAvLyBTb2Z0LWRlbGV0ZSBwdXJnZSBkZWFkbGluZTogdGhlIHJldGVudGlvbiBzd2VlcCBoYXJkLWRlbGV0ZXMgdG9tYnN0b25lZFxuICAvLyByb3dzIG9uY2UgYHB1cmdlX2FmdGVyYCBoYXMgcGFzc2VkIChzZXQgb24gZGVsZXRlIGFsb25nc2lkZSBkZWxldGVkX2F0KS5cbiAgcHVyZ2VBZnRlcjogdGltZXN0YW1wKCdwdXJnZV9hZnRlcicsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxufSwgKHRhYmxlKSA9PiAoe1xuICAvLyBQYXJ0aWFsIGluZGV4IG92ZXIganVzdCB0aGUgdG9tYnN0b25lcyDigJQgZHJpdmVzIHRoZSByZXRlbnRpb24gcHVyZ2Ugc3dlZXAuXG4gIHB1cmdlSWR4OiBpbmRleCgnZGFzaGJvYXJkX3B1cmdlX2lkeCcpLm9uKHRhYmxlLnB1cmdlQWZ0ZXIpLndoZXJlKHNxbGBkZWxldGVkX2F0IElTIE5PVCBOVUxMYCksXG4gIC8vIExpc3RpbmcgaXMgb3JnLXNjb3BlZCBhbmQgdmlzaWJpbGl0eS1maWx0ZXJlZCwgc28gYm90aCBnbyBpbiB0aGUgaW5kZXguXG4gIG9yZ1Zpc2liaWxpdHlJZHg6IGluZGV4KCdkYXNoYm9hcmRfb3JnX3Zpc2liaWxpdHlfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLnZpc2liaWxpdHkpLFxuICAvLyBDb252ZW5pZW5jZSBmb3IgXCJhbGwgbXkgZGFzaGJvYXJkc1wiIGxpc3RpbmdcbiAgY3JlYXRlZEJ5SWR4OiBpbmRleCgnZGFzaGJvYXJkX2NyZWF0ZWRfYnlfaWR4Jykub24odGFibGUuY3JlYXRlZEJ5KSxcbiAgLy8gU2FtZS1vcmcgZHVwbGljYXRlLW5hbWUgZ3VhcmQuIFRoZSAob3JnSWQsIG5hbWUpIHR1cGxlIGlzIHVuaXF1ZSBhbW9uZ1xuICAvLyBub24tZGVsZXRlZCByb3dzOyBzb2Z0LWRlbGV0ZWQgcm93cyBhcmUgZXhjbHVkZWQgc28gbmFtZSByZXVzZSBhZnRlclxuICAvLyBkZWxldGlvbiB3b3Jrcy5cbiAgLy8gUGFydGlhbCAobGl2ZS1yb3dzIG9ubHkpIHRvIG1hdGNoIHRoZSBkZXBsb3llZCBEREwgKyB0aGUgc2libGluZ1xuICAvLyBvcmdBbGVydFJ1bGUub3JnTmFtZVVxIOKAlCBhIHRvbWJzdG9uZSBtdXN0IG5vdCByZXNlcnZlIGl0cyBuYW1lLCBzbyBhIGxpdmVcbiAgLy8gbmFtZXNha2UgY2FuIGNvZXhpc3QgKGFuZCByZXN0b3JlIGNhbiA0MDkgb24gY29sbGlzaW9uLCBoYW5kbGVkIGluIHRoZSByb3V0ZSkuXG4gIG5hbWVVbmlxdWU6IHVuaXF1ZUluZGV4KCdkYXNoYm9hcmRfb3JnX25hbWVfdW5pcXVlJykub24odGFibGUub3JnSWQsIHRhYmxlLm5hbWUpLndoZXJlKHNxbGBkZWxldGVkX2F0IElTIE5VTExgKSxcbn0pKTtcblxuLyoqXG4gKiBBIHNpbmdsZSBwYW5lbCBpbnNpZGUgYSBkYXNoYm9hcmQuIFRoZSBjYXRhbG9nIGBxdWVyeUtleWAgaXMgdGhlIG9ubHkgdGhpbmdcbiAqIHRoZSBwYW5lbCBjYXJyaWVzIGZyb20gdGhlIHF1ZXJ5IHNpZGUgIHN1YnN0aXR1dGlvbiArIGV4ZWN1dGlvbiBoYXBwZW5zXG4gKiBzZXJ2ZXItc2lkZSB2aWEgdGhlIGV4aXN0aW5nIGNhdGFsb2csIHNvIG5vIFByb21RTC9Mb2dRTCB0cmF2ZWxzIHdpdGggdGhlXG4gKiBwYW5lbCByZWNvcmQuXG4gKlxuICogQHRhYmxlIGRhc2hib2FyZF9wYW5lbHNcbiAqL1xuZXhwb3J0IGNvbnN0IGRhc2hib2FyZFBhbmVsID0gcGdUYWJsZSgnZGFzaGJvYXJkX3BhbmVscycsIHtcbiAgaWQ6IHV1aWQoJ2lkJykucHJpbWFyeUtleSgpLmRlZmF1bHRSYW5kb20oKSxcbiAgZGFzaGJvYXJkSWQ6IHV1aWQoJ2Rhc2hib2FyZF9pZCcpXG4gICAgLm5vdE51bGwoKSxcbiAgLy8gQ2F0YWxvZyBrZXkgKGUuZy4gYHBsdWdpbl9idWlsZHNfcGVyX21pbmApLiBUaGUgc2VydmVyIHZhbGlkYXRlcyB0aGlzXG4gIC8vIGFnYWluc3QgUVVFUklFUyBhdCByZW5kZXIgdGltZS5cbiAgcXVlcnlLZXk6IHZhcmNoYXIoJ3F1ZXJ5X2tleScsIHsgbGVuZ3RoOiAxMDAgfSlcbiAgICAubm90TnVsbCgpLFxuICAvLyAnc3RhdCcgfCAnbGluZScgfCAndGFibGUnIHwgJ3N0YWNrZWQtYmFyJyAga2VwdCBzdHJpbmdseS10eXBlZCBmb3JcbiAgLy8gZm9yd2FyZCBjb21wYXRpYmlsaXR5OyB0aGUgcmVuZGVyZXIgZmFsbHMgYmFjayB0byAnbGluZScgb24gdW5rbm93bi5cbiAgdml6S2luZDogdmFyY2hhcigndml6X2tpbmQnLCB7IGxlbmd0aDogMzAgfSlcbiAgICAuZGVmYXVsdCgnbGluZScpXG4gICAgLm5vdE51bGwoKSxcbiAgdGl0bGU6IHZhcmNoYXIoJ3RpdGxlJywgeyBsZW5ndGg6IDIwMCB9KVxuICAgIC5ub3ROdWxsKCksXG4gIC8vIFRhaWx3aW5kIGNvbC1zcGFuIHRpZXIgKDEtMTIsIGJ1dCBvbmx5IDMvNC82LzgvOS8xMiBhcmUgcmVuZGVyYWJsZSkuXG4gIHNwYW46IGludGVnZXIoJ3NwYW4nKVxuICAgIC5kZWZhdWx0KDYpXG4gICAgLm5vdE51bGwoKSxcbiAgLy8gT3B0aW9uYWw6IGxhYmVsIGtleSBmb3Igc2VyaWVzIGdyb3VwaW5nIChlLmcuICdzdGF0dXMnLCAnc3RhdGUnKS5cbiAgZ3JvdXBCeTogdmFyY2hhcignZ3JvdXBfYnknLCB7IGxlbmd0aDogNTAgfSksXG4gIC8vIE9wdGlvbmFsOiBjYXRhbG9nIGZvcm1hdCBrZXkgKCdwZXJjZW50JyB8ICdzZWNvbmRzJyB8Li4uKS5cbiAgZm9ybWF0OiB2YXJjaGFyKCdmb3JtYXQnLCB7IGxlbmd0aDogMjAgfSksXG4gIC8vIDAtYmFzZWQgcmVuZGVyIG9yZGVyIHdpdGhpbiB0aGUgZGFzaGJvYXJkLiBFZGl0b3IgcmVhc3NpZ25zIG9uIGRyYWcuXG4gIHBvc2l0aW9uOiBpbnRlZ2VyKCdwb3NpdGlvbicpXG4gICAgLmRlZmF1bHQoMClcbiAgICAubm90TnVsbCgpLFxuICAvLyBPcHRpb25hbCB0ZW1wbGF0ZSB2YXIgdmFsdWVzIGJvdW5kIGF0IHBhbmVsIGxldmVsIChlLmcuIGBwbHVnaW49WGAgZm9yXG4gIC8vIHRoZSBwZXItcGx1Z2luIGRyaWxsLWRvd24gcGFuZWwpLiBTYW5pdGl6ZWQgc2VydmVyLXNpZGUgdmlhIHRoZSBjYXRhbG9nXG4gIC8vIHN1YnN0aXR1dGVWYXJzIGFsbG93LWxpc3QuXG4gIHZhcnM6IGpzb25iKCd2YXJzJylcbiAgICAuJHR5cGU8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oKVxuICAgIC5kZWZhdWx0KHt9KVxuICAgIC5ub3ROdWxsKCksXG59LCAodGFibGUpID0+ICh7XG4gIC8vIFRoZSByZW5kZXIgcGF0aCBpcyBcImZldGNoIGFsbCBwYW5lbHMgZm9yIGRhc2hib2FyZCBYIGluIG9yZGVyXCIuXG4gIGRhc2hib2FyZFBvc2l0aW9uSWR4OiBpbmRleCgnZGFzaGJvYXJkX3BhbmVsX2Rhc2hib2FyZF9wb3NpdGlvbl9pZHgnKVxuICAgIC5vbih0YWJsZS5kYXNoYm9hcmRJZCwgdGFibGUucG9zaXRpb24pLFxufSkpO1xuXG4vLyBPYnNlcnZhYmlsaXR5IGRhc2hib2FyZHNcbmV4cG9ydCB0eXBlIERhc2hib2FyZCA9IHR5cGVvZiBkYXNoYm9hcmQuJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgRGFzaGJvYXJkSW5zZXJ0ID0gdHlwZW9mIGRhc2hib2FyZC4kaW5mZXJJbnNlcnQ7XG5leHBvcnQgdHlwZSBEYXNoYm9hcmRVcGRhdGUgPSBQYXJ0aWFsPE9taXQ8RGFzaGJvYXJkSW5zZXJ0LCAnaWQnIHwgJ2NyZWF0ZWRBdCcgfCAnY3JlYXRlZEJ5Jz4+O1xuXG5leHBvcnQgdHlwZSBEYXNoYm9hcmRQYW5lbCA9IHR5cGVvZiBkYXNoYm9hcmRQYW5lbC4kaW5mZXJTZWxlY3Q7XG5leHBvcnQgdHlwZSBEYXNoYm9hcmRQYW5lbEluc2VydCA9IHR5cGVvZiBkYXNoYm9hcmRQYW5lbC4kaW5mZXJJbnNlcnQ7XG5leHBvcnQgdHlwZSBEYXNoYm9hcmRQYW5lbFVwZGF0ZSA9IFBhcnRpYWw8T21pdDxEYXNoYm9hcmRQYW5lbEluc2VydCwgJ2lkJz4+O1xuIl19
@@ -0,0 +1,183 @@
1
+ /**
2
+ * File/image attachments for messages.
3
+ *
4
+ * The blob itself lives in S3-compatible object storage (MinIO); this table
5
+ * holds only the METADATA + the storage key. A row is created on upload with
6
+ * `message_id = NULL` (pending) and linked to a message when that message is
7
+ * sent — so an upload that's never attached is a harmless orphan the retention
8
+ * sweep can reap. Tenant-scoped by `org_id` (RLS); visibility of the blob is
9
+ * gated at the API layer by whether the caller can read the parent message.
10
+ *
11
+ * @table message_attachments
12
+ */
13
+ export declare const messageAttachment: import("drizzle-orm/pg-core").PgTableWithColumns<{
14
+ name: "message_attachments";
15
+ schema: undefined;
16
+ columns: {
17
+ id: import("drizzle-orm/pg-core").PgColumn<{
18
+ name: "id";
19
+ tableName: "message_attachments";
20
+ dataType: "string";
21
+ columnType: "PgUUID";
22
+ data: string;
23
+ driverParam: string;
24
+ notNull: true;
25
+ hasDefault: true;
26
+ isPrimaryKey: true;
27
+ isAutoincrement: false;
28
+ hasRuntimeDefault: false;
29
+ enumValues: undefined;
30
+ baseColumn: never;
31
+ identity: undefined;
32
+ generated: undefined;
33
+ }, {}, {}>;
34
+ orgId: import("drizzle-orm/pg-core").PgColumn<{
35
+ name: "org_id";
36
+ tableName: "message_attachments";
37
+ dataType: "string";
38
+ columnType: "PgVarchar";
39
+ data: string;
40
+ driverParam: string;
41
+ notNull: true;
42
+ hasDefault: false;
43
+ isPrimaryKey: false;
44
+ isAutoincrement: false;
45
+ hasRuntimeDefault: false;
46
+ enumValues: [string, ...string[]];
47
+ baseColumn: never;
48
+ identity: undefined;
49
+ generated: undefined;
50
+ }, {}, {
51
+ length: 255;
52
+ }>;
53
+ messageId: import("drizzle-orm/pg-core").PgColumn<{
54
+ name: "message_id";
55
+ tableName: "message_attachments";
56
+ dataType: "string";
57
+ columnType: "PgUUID";
58
+ data: string;
59
+ driverParam: string;
60
+ notNull: false;
61
+ hasDefault: false;
62
+ isPrimaryKey: false;
63
+ isAutoincrement: false;
64
+ hasRuntimeDefault: false;
65
+ enumValues: undefined;
66
+ baseColumn: never;
67
+ identity: undefined;
68
+ generated: undefined;
69
+ }, {}, {}>;
70
+ uploadedBy: import("drizzle-orm/pg-core").PgColumn<{
71
+ name: "uploaded_by";
72
+ tableName: "message_attachments";
73
+ dataType: "string";
74
+ columnType: "PgText";
75
+ data: string;
76
+ driverParam: string;
77
+ notNull: true;
78
+ hasDefault: false;
79
+ isPrimaryKey: false;
80
+ isAutoincrement: false;
81
+ hasRuntimeDefault: false;
82
+ enumValues: [string, ...string[]];
83
+ baseColumn: never;
84
+ identity: undefined;
85
+ generated: undefined;
86
+ }, {}, {}>;
87
+ filename: import("drizzle-orm/pg-core").PgColumn<{
88
+ name: "filename";
89
+ tableName: "message_attachments";
90
+ dataType: "string";
91
+ columnType: "PgVarchar";
92
+ data: string;
93
+ driverParam: string;
94
+ notNull: true;
95
+ hasDefault: false;
96
+ isPrimaryKey: false;
97
+ isAutoincrement: false;
98
+ hasRuntimeDefault: false;
99
+ enumValues: [string, ...string[]];
100
+ baseColumn: never;
101
+ identity: undefined;
102
+ generated: undefined;
103
+ }, {}, {
104
+ length: 255;
105
+ }>;
106
+ contentType: import("drizzle-orm/pg-core").PgColumn<{
107
+ name: "content_type";
108
+ tableName: "message_attachments";
109
+ dataType: "string";
110
+ columnType: "PgVarchar";
111
+ data: string;
112
+ driverParam: string;
113
+ notNull: true;
114
+ hasDefault: false;
115
+ isPrimaryKey: false;
116
+ isAutoincrement: false;
117
+ hasRuntimeDefault: false;
118
+ enumValues: [string, ...string[]];
119
+ baseColumn: never;
120
+ identity: undefined;
121
+ generated: undefined;
122
+ }, {}, {
123
+ length: 128;
124
+ }>;
125
+ sizeBytes: import("drizzle-orm/pg-core").PgColumn<{
126
+ name: "size_bytes";
127
+ tableName: "message_attachments";
128
+ dataType: "number";
129
+ columnType: "PgInteger";
130
+ data: number;
131
+ driverParam: string | number;
132
+ notNull: true;
133
+ hasDefault: false;
134
+ isPrimaryKey: false;
135
+ isAutoincrement: false;
136
+ hasRuntimeDefault: false;
137
+ enumValues: undefined;
138
+ baseColumn: never;
139
+ identity: undefined;
140
+ generated: undefined;
141
+ }, {}, {}>;
142
+ storageKey: import("drizzle-orm/pg-core").PgColumn<{
143
+ name: "storage_key";
144
+ tableName: "message_attachments";
145
+ dataType: "string";
146
+ columnType: "PgVarchar";
147
+ data: string;
148
+ driverParam: string;
149
+ notNull: true;
150
+ hasDefault: false;
151
+ isPrimaryKey: false;
152
+ isAutoincrement: false;
153
+ hasRuntimeDefault: false;
154
+ enumValues: [string, ...string[]];
155
+ baseColumn: never;
156
+ identity: undefined;
157
+ generated: undefined;
158
+ }, {}, {
159
+ length: 512;
160
+ }>;
161
+ createdAt: import("drizzle-orm/pg-core").PgColumn<{
162
+ name: "created_at";
163
+ tableName: "message_attachments";
164
+ dataType: "date";
165
+ columnType: "PgTimestamp";
166
+ data: Date;
167
+ driverParam: string;
168
+ notNull: true;
169
+ hasDefault: true;
170
+ isPrimaryKey: false;
171
+ isAutoincrement: false;
172
+ hasRuntimeDefault: false;
173
+ enumValues: undefined;
174
+ baseColumn: never;
175
+ identity: undefined;
176
+ generated: undefined;
177
+ }, {}, {}>;
178
+ };
179
+ dialect: 'pg';
180
+ }>;
181
+ /** TypeScript row types. */
182
+ export type MessageAttachment = typeof messageAttachment.$inferSelect;
183
+ export type MessageAttachmentInsert = typeof messageAttachment.$inferInsert;
@@ -0,0 +1,40 @@
1
+ // Copyright 2026 Pipeline Builder Contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import { varchar, pgTable, text, timestamp, uuid, integer, index } from 'drizzle-orm/pg-core';
4
+ /**
5
+ * File/image attachments for messages.
6
+ *
7
+ * The blob itself lives in S3-compatible object storage (MinIO); this table
8
+ * holds only the METADATA + the storage key. A row is created on upload with
9
+ * `message_id = NULL` (pending) and linked to a message when that message is
10
+ * sent — so an upload that's never attached is a harmless orphan the retention
11
+ * sweep can reap. Tenant-scoped by `org_id` (RLS); visibility of the blob is
12
+ * gated at the API layer by whether the caller can read the parent message.
13
+ *
14
+ * @table message_attachments
15
+ */
16
+ export const messageAttachment = pgTable('message_attachments', {
17
+ id: uuid('id').primaryKey().defaultRandom(),
18
+ // Tenancy — the uploader's org. RLS-scoped like every other tenant table.
19
+ orgId: varchar('org_id', { length: 255 }).notNull(),
20
+ // The message this attachment belongs to. NULL while an upload is pending
21
+ // (uploaded but not yet attached to a sent message).
22
+ messageId: uuid('message_id'),
23
+ // Who uploaded it (user id) — for audit + the pending-upload owner check.
24
+ uploadedBy: text('uploaded_by').notNull(),
25
+ // Original client filename (display + Content-Disposition on download).
26
+ filename: varchar('filename', { length: 255 }).notNull(),
27
+ // Validated MIME type (allow-list enforced at upload).
28
+ contentType: varchar('content_type', { length: 128 }).notNull(),
29
+ // Size in bytes (bounded at upload).
30
+ sizeBytes: integer('size_bytes').notNull(),
31
+ // Object key in the attachments bucket (e.g. `<orgId>/<uuid>/<filename>`).
32
+ storageKey: varchar('storage_key', { length: 512 }).notNull(),
33
+ createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
34
+ }, (table) => ({
35
+ // Fetch a message's attachments.
36
+ messageIdIdx: index('message_attachment_message_id_idx').on(table.messageId),
37
+ // Tenant scoping + pending-upload lookups by owner.
38
+ orgIdIdx: index('message_attachment_org_id_idx').on(table.orgId),
39
+ }));
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1hdHRhY2htZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RhdGFiYXNlL3NjaGVtYS9tZXNzYWdlLWF0dGFjaG1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFOUY7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUMscUJBQXFCLEVBQUU7SUFDOUQsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxhQUFhLEVBQUU7SUFFM0MsMEVBQTBFO0lBQzFFLEtBQUssRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFO0lBRW5ELDBFQUEwRTtJQUMxRSxxREFBcUQ7SUFDckQsU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUM7SUFFN0IsMEVBQTBFO0lBQzFFLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxFQUFFO0lBRXpDLHdFQUF3RTtJQUN4RSxRQUFRLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtJQUV4RCx1REFBdUQ7SUFDdkQsV0FBVyxFQUFFLE9BQU8sQ0FBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUU7SUFFL0QscUNBQXFDO0lBQ3JDLFNBQVMsRUFBRSxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxFQUFFO0lBRTFDLDJFQUEyRTtJQUMzRSxVQUFVLEVBQUUsT0FBTyxDQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtJQUU3RCxTQUFTLEVBQUUsU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLE9BQU8sRUFBRTtDQUNsRixFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2IsaUNBQWlDO0lBQ2pDLFlBQVksRUFBRSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztJQUM1RSxvREFBb0Q7SUFDcEQsUUFBUSxFQUFFLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO0NBQ2pFLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IHZhcmNoYXIsIHBnVGFibGUsIHRleHQsIHRpbWVzdGFtcCwgdXVpZCwgaW50ZWdlciwgaW5kZXggfSBmcm9tICdkcml6emxlLW9ybS9wZy1jb3JlJztcblxuLyoqXG4gKiBGaWxlL2ltYWdlIGF0dGFjaG1lbnRzIGZvciBtZXNzYWdlcy5cbiAqXG4gKiBUaGUgYmxvYiBpdHNlbGYgbGl2ZXMgaW4gUzMtY29tcGF0aWJsZSBvYmplY3Qgc3RvcmFnZSAoTWluSU8pOyB0aGlzIHRhYmxlXG4gKiBob2xkcyBvbmx5IHRoZSBNRVRBREFUQSArIHRoZSBzdG9yYWdlIGtleS4gQSByb3cgaXMgY3JlYXRlZCBvbiB1cGxvYWQgd2l0aFxuICogYG1lc3NhZ2VfaWQgPSBOVUxMYCAocGVuZGluZykgYW5kIGxpbmtlZCB0byBhIG1lc3NhZ2Ugd2hlbiB0aGF0IG1lc3NhZ2UgaXNcbiAqIHNlbnQg4oCUIHNvIGFuIHVwbG9hZCB0aGF0J3MgbmV2ZXIgYXR0YWNoZWQgaXMgYSBoYXJtbGVzcyBvcnBoYW4gdGhlIHJldGVudGlvblxuICogc3dlZXAgY2FuIHJlYXAuIFRlbmFudC1zY29wZWQgYnkgYG9yZ19pZGAgKFJMUyk7IHZpc2liaWxpdHkgb2YgdGhlIGJsb2IgaXNcbiAqIGdhdGVkIGF0IHRoZSBBUEkgbGF5ZXIgYnkgd2hldGhlciB0aGUgY2FsbGVyIGNhbiByZWFkIHRoZSBwYXJlbnQgbWVzc2FnZS5cbiAqXG4gKiBAdGFibGUgbWVzc2FnZV9hdHRhY2htZW50c1xuICovXG5leHBvcnQgY29uc3QgbWVzc2FnZUF0dGFjaG1lbnQgPSBwZ1RhYmxlKCdtZXNzYWdlX2F0dGFjaG1lbnRzJywge1xuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuXG4gIC8vIFRlbmFuY3kg4oCUIHRoZSB1cGxvYWRlcidzIG9yZy4gUkxTLXNjb3BlZCBsaWtlIGV2ZXJ5IG90aGVyIHRlbmFudCB0YWJsZS5cbiAgb3JnSWQ6IHZhcmNoYXIoJ29yZ19pZCcsIHsgbGVuZ3RoOiAyNTUgfSkubm90TnVsbCgpLFxuXG4gIC8vIFRoZSBtZXNzYWdlIHRoaXMgYXR0YWNobWVudCBiZWxvbmdzIHRvLiBOVUxMIHdoaWxlIGFuIHVwbG9hZCBpcyBwZW5kaW5nXG4gIC8vICh1cGxvYWRlZCBidXQgbm90IHlldCBhdHRhY2hlZCB0byBhIHNlbnQgbWVzc2FnZSkuXG4gIG1lc3NhZ2VJZDogdXVpZCgnbWVzc2FnZV9pZCcpLFxuXG4gIC8vIFdobyB1cGxvYWRlZCBpdCAodXNlciBpZCkg4oCUIGZvciBhdWRpdCArIHRoZSBwZW5kaW5nLXVwbG9hZCBvd25lciBjaGVjay5cbiAgdXBsb2FkZWRCeTogdGV4dCgndXBsb2FkZWRfYnknKS5ub3ROdWxsKCksXG5cbiAgLy8gT3JpZ2luYWwgY2xpZW50IGZpbGVuYW1lIChkaXNwbGF5ICsgQ29udGVudC1EaXNwb3NpdGlvbiBvbiBkb3dubG9hZCkuXG4gIGZpbGVuYW1lOiB2YXJjaGFyKCdmaWxlbmFtZScsIHsgbGVuZ3RoOiAyNTUgfSkubm90TnVsbCgpLFxuXG4gIC8vIFZhbGlkYXRlZCBNSU1FIHR5cGUgKGFsbG93LWxpc3QgZW5mb3JjZWQgYXQgdXBsb2FkKS5cbiAgY29udGVudFR5cGU6IHZhcmNoYXIoJ2NvbnRlbnRfdHlwZScsIHsgbGVuZ3RoOiAxMjggfSkubm90TnVsbCgpLFxuXG4gIC8vIFNpemUgaW4gYnl0ZXMgKGJvdW5kZWQgYXQgdXBsb2FkKS5cbiAgc2l6ZUJ5dGVzOiBpbnRlZ2VyKCdzaXplX2J5dGVzJykubm90TnVsbCgpLFxuXG4gIC8vIE9iamVjdCBrZXkgaW4gdGhlIGF0dGFjaG1lbnRzIGJ1Y2tldCAoZS5nLiBgPG9yZ0lkPi88dXVpZD4vPGZpbGVuYW1lPmApLlxuICBzdG9yYWdlS2V5OiB2YXJjaGFyKCdzdG9yYWdlX2tleScsIHsgbGVuZ3RoOiA1MTIgfSkubm90TnVsbCgpLFxuXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wKCdjcmVhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcbn0sICh0YWJsZSkgPT4gKHtcbiAgLy8gRmV0Y2ggYSBtZXNzYWdlJ3MgYXR0YWNobWVudHMuXG4gIG1lc3NhZ2VJZElkeDogaW5kZXgoJ21lc3NhZ2VfYXR0YWNobWVudF9tZXNzYWdlX2lkX2lkeCcpLm9uKHRhYmxlLm1lc3NhZ2VJZCksXG4gIC8vIFRlbmFudCBzY29waW5nICsgcGVuZGluZy11cGxvYWQgbG9va3VwcyBieSBvd25lci5cbiAgb3JnSWRJZHg6IGluZGV4KCdtZXNzYWdlX2F0dGFjaG1lbnRfb3JnX2lkX2lkeCcpLm9uKHRhYmxlLm9yZ0lkKSxcbn0pKTtcblxuLyoqIFR5cGVTY3JpcHQgcm93IHR5cGVzLiAqL1xuZXhwb3J0IHR5cGUgTWVzc2FnZUF0dGFjaG1lbnQgPSB0eXBlb2YgbWVzc2FnZUF0dGFjaG1lbnQuJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgTWVzc2FnZUF0dGFjaG1lbnRJbnNlcnQgPSB0eXBlb2YgbWVzc2FnZUF0dGFjaG1lbnQuJGluZmVySW5zZXJ0O1xuIl19
@@ -163,6 +163,25 @@ export declare const message: import("drizzle-orm/pg-core").PgTableWithColumns<{
163
163
  }, {}, {
164
164
  length: 255;
165
165
  }>;
166
+ recipientUserId: import("drizzle-orm/pg-core").PgColumn<{
167
+ name: "recipient_user_id";
168
+ tableName: "messages";
169
+ dataType: "string";
170
+ columnType: "PgVarchar";
171
+ data: string;
172
+ driverParam: string;
173
+ notNull: false;
174
+ hasDefault: false;
175
+ isPrimaryKey: false;
176
+ isAutoincrement: false;
177
+ hasRuntimeDefault: false;
178
+ enumValues: [string, ...string[]];
179
+ baseColumn: never;
180
+ identity: undefined;
181
+ generated: undefined;
182
+ }, {}, {
183
+ length: 255;
184
+ }>;
166
185
  messageType: import("drizzle-orm/pg-core").PgColumn<{
167
186
  name: "message_type";
168
187
  tableName: "messages";
@@ -238,6 +257,23 @@ export declare const message: import("drizzle-orm/pg-core").PgTableWithColumns<{
238
257
  identity: undefined;
239
258
  generated: undefined;
240
259
  }, {}, {}>;
260
+ editedAt: import("drizzle-orm/pg-core").PgColumn<{
261
+ name: "edited_at";
262
+ tableName: "messages";
263
+ dataType: "date";
264
+ columnType: "PgTimestamp";
265
+ data: Date;
266
+ driverParam: string;
267
+ notNull: false;
268
+ hasDefault: false;
269
+ isPrimaryKey: false;
270
+ isAutoincrement: false;
271
+ hasRuntimeDefault: false;
272
+ enumValues: undefined;
273
+ baseColumn: never;
274
+ identity: undefined;
275
+ generated: undefined;
276
+ }, {}, {}>;
241
277
  readBy: import("drizzle-orm/pg-core").PgColumn<{
242
278
  name: "read_by";
243
279
  tableName: "messages";