@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.
- package/lib/api/crud-service.d.ts +39 -12
- package/lib/api/crud-service.js +63 -37
- package/lib/api/query-builders.js +41 -3
- package/lib/api/soft-delete-sweep.js +13 -3
- package/lib/core/query-filters.d.ts +25 -0
- package/lib/core/query-filters.js +1 -1
- package/lib/database/drizzle-schema.d.ts +205 -0
- package/lib/database/drizzle-schema.js +4 -1
- package/lib/database/schema/dashboard.js +5 -2
- package/lib/database/schema/message-attachment.d.ts +183 -0
- package/lib/database/schema/message-attachment.js +40 -0
- package/lib/database/schema/message.d.ts +36 -0
- package/lib/database/schema/message.js +14 -1
- package/package.json +2 -2
|
@@ -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,
|
|
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
|
-
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RhdGFiYXNlL3NjaGVtYS9kYXNoYm9hcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVsSDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsWUFBWSxFQUFFO0lBQzdDLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsYUFBYSxFQUFFO0lBRTNDLGdCQUFnQjtJQUNoQixLQUFLLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztTQUN0QyxPQUFPLENBQUMsYUFBYSxDQUFDO1NBQ3RCLE9BQU8sRUFBRTtJQUNaLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQzFCLE9BQU8sQ0FBQyxhQUFhLENBQUM7U0FDdEIsT0FBTyxFQUFFO0lBQ1osU0FBUyxFQUFFLFNBQVMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDdkQsVUFBVSxFQUFFO1NBQ1osT0FBTyxFQUFFO0lBQ1osU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDMUIsT0FBTyxDQUFDLGFBQWEsQ0FBQztTQUN0QixPQUFPLEVBQUU7SUFDWixTQUFTLEVBQUUsU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUN2RCxVQUFVLEVBQUU7U0FDWixPQUFPLEVBQUU7SUFFWixXQUFXO0lBQ1gsSUFBSSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7U0FDbkMsT0FBTyxFQUFFO0lBQ1osV0FBVyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUM7SUFFaEMsc0RBQXNEO0lBQ3RELHFEQUFxRDtJQUNyRCxVQUFVLEVBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBQztTQUM3QixLQUFLLEVBQWdHO1NBQ3JHLE9BQU8sQ0FBQyxFQUFFLENBQUM7U0FDWCxPQUFPLEVBQUU7SUFFWixzRUFBc0U7SUFDdEUseUVBQXlFO0lBQ3pFLDhCQUE4QjtJQUM5QixVQUFVLEVBQUUsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztTQUM5QyxLQUFLLEVBQWdDO1NBQ3JDLE9BQU8sQ0FBQyxTQUFTLENBQUM7U0FDbEIsT0FBTyxFQUFFO0lBRVosNERBQTREO0lBQzVELFNBQVMsRUFBRSxTQUFTLENBQUMsWUFBWSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQzFELFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzdCLDBFQUEwRTtJQUMxRSwyRUFBMkU7SUFDM0UsVUFBVSxFQUFFLFNBQVMsQ0FBQyxhQUFhLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUM7Q0FDN0QsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNiLDZFQUE2RTtJQUM3RSxRQUFRLEVBQUUsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFBLHdCQUF3QixDQUFDO0lBQzlGLDBFQUEwRTtJQUMxRSxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDO0lBQ3pGLDhDQUE4QztJQUM5QyxZQUFZLEVBQUUsS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7SUFDbkUseUVBQXlFO0lBQ3pFLHVFQUF1RTtJQUN2RSxrQkFBa0I7SUFDbEIsbUVBQW1FO0lBQ25FLDRFQUE0RTtJQUM1RSxpRkFBaUY7SUFDakYsVUFBVSxFQUFFLFdBQVcsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFBLG9CQUFvQixDQUFDO0NBQ2hILENBQUMsQ0FBQyxDQUFDO0FBRUo7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsa0JBQWtCLEVBQUU7SUFDeEQsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxhQUFhLEVBQUU7SUFDM0MsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUM7U0FDOUIsT0FBTyxFQUFFO0lBQ1osd0VBQXdFO0lBQ3hFLGtDQUFrQztJQUNsQyxRQUFRLEVBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztTQUM1QyxPQUFPLEVBQUU7SUFDWixxRUFBcUU7SUFDckUsdUVBQXVFO0lBQ3ZFLE9BQU8sRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO1NBQ3pDLE9BQU8sQ0FBQyxNQUFNLENBQUM7U0FDZixPQUFPLEVBQUU7SUFDWixLQUFLLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztTQUNyQyxPQUFPLEVBQUU7SUFDWix1RUFBdUU7SUFDdkUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUM7U0FDbEIsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUNWLE9BQU8sRUFBRTtJQUNaLG9FQUFvRTtJQUNwRSxPQUFPLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUM1Qyw2REFBNkQ7SUFDN0QsTUFBTSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDekMsdUVBQXVFO0lBQ3ZFLFFBQVEsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDO1NBQzFCLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDVixPQUFPLEVBQUU7SUFDWix5RUFBeUU7SUFDekUsMEVBQTBFO0lBQzFFLDZCQUE2QjtJQUM3QixJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztTQUNoQixLQUFLLEVBQTBCO1NBQy9CLE9BQU8sQ0FBQyxFQUFFLENBQUM7U0FDWCxPQUFPLEVBQUU7Q0FDYixFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2Isa0VBQWtFO0lBQ2xFLG9CQUFvQixFQUFFLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQztTQUNsRSxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDO0NBQ3pDLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IFNZU1RFTV9PUkdfSUQgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBzcWwgfSBmcm9tICdkcml6emxlLW9ybSc7XG5pbXBvcnQgeyBpbnRlZ2VyLCB2YXJjaGFyLCBwZ1RhYmxlLCB0ZXh0LCB0aW1lc3RhbXAsIHV1aWQsIGpzb25iLCBpbmRleCwgdW5pcXVlSW5kZXggfSBmcm9tICdkcml6emxlLW9ybS9wZy1jb3JlJztcblxuLyoqXG4gKiBVc2VyLWVkaXRhYmxlIG9ic2VydmFiaWxpdHkgZGFzaGJvYXJkLiBSZXBsYWNlcyB0aGUgY29kZS1kZWZpbmVkIGRhc2hib2FyZHNcbiAqIHVuZGVyIGBmcm9udGVuZC9zcmMvbGliL2Rhc2hib2FyZHMvKi50c2Agc28gb3BlcmF0b3JzIGNhbiBhZGQgcGFuZWxzIGFuZFxuICogY3VzdG9taXplIGxheW91dCBwZXItb3JnIHdpdGhvdXQgYSByZWRlcGxveS5cbiAqXG4gKiBgbGF5b3V0SnNvbmAgY2FycmllcyB0aGUgcmVhY3QtZ3JpZC1sYXlvdXQgY29vcmRpbmF0ZSBzZXQga2V5ZWQgYnkgcGFuZWwgaWQ7XG4gKiBgZGFzaGJvYXJkX3BhbmVsc2AgaG9sZHMgdGhlIHBhbmVsLWNvbnRlbnQgcm93cyBzbyBhbiBOLXBhbmVsIGRhc2hib2FyZFxuICogZG9lc24ndCBibG9hdCBvbmUgcm93J3MgSlNPTiB0byBzZXZlcmFsIEtCLiBUaGUgY2F0YWxvZyBxdWVyeSBpcyByZWZlcmVuY2VkXG4gKiBieSBrZXkgb25seSAoc2VlIHBsYXRmb3JtL3NyYy9vYnNlcnZhYmlsaXR5L2NhdGFsb2cudHMpICB0aGUgZGFzaGJvYXJkXG4gKiByZWNvcmQgbmV2ZXIgY2FycmllcyByYXcgUHJvbVFML0xvZ1FMLCBrZWVwaW5nIHRoZSBjYXRhbG9nIGFzIHRoZSBzZWN1cml0eVxuICogYm91bmRhcnkgZm9yIHVwc3RyZWFtIHF1ZXJ5IGV4ZWN1dGlvbi5cbiAqXG4gKiBWaXNpYmlsaXR5IGxhZGRlciAqIC0gYHByaXZhdGVgICBvbmx5IHRoZSBjcmVhdG9yIGNhbiByZWFkL3dyaXRlXG4gKiAtIGBvcmdgICBhbnlvbmUgaW4gdGhlIHNhbWUgb3JnIGNhbiByZWFkOyBvcmcgYWRtaW5zICsgY3JlYXRvciBjYW4gd3JpdGVcbiAqIC0gYHB1YmxpY2AgIGV2ZXJ5IGF1dGhlbnRpY2F0ZWQgdXNlciBjYW4gcmVhZDsgb25seSBzeXNhZG1pbnMgY2FuIHdyaXRlLlxuICogVXNlZCBmb3IgdGhlIDUgZGVmYXVsdCBkYXNoYm9hcmRzIChgb3JnX2lkPSdzeXN0ZW0nYCkgc28gdGhlXG4gKiBleGlzdGluZyBzeXN0ZW0tb3JnIHZpc2liaWxpdHkgcnVsZSBjb3ZlcnMgdGhlbSBieSBkZWZhdWx0LlxuICpcbiAqIEB0YWJsZSBkYXNoYm9hcmRzXG4gKi9cbmV4cG9ydCBjb25zdCBkYXNoYm9hcmQgPSBwZ1RhYmxlKCdkYXNoYm9hcmRzJywge1xuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuXG4gIC8vIE9yZyArIGNyZWF0b3JcbiAgb3JnSWQ6IHZhcmNoYXIoJ29yZ19pZCcsIHsgbGVuZ3RoOiAyNTUgfSlcbiAgICAuZGVmYXVsdChTWVNURU1fT1JHX0lEKVxuICAgIC5ub3ROdWxsKCksXG4gIGNyZWF0ZWRCeTogdGV4dCgnY3JlYXRlZF9ieScpXG4gICAgLmRlZmF1bHQoU1lTVEVNX09SR19JRClcbiAgICAubm90TnVsbCgpLFxuICBjcmVhdGVkQXQ6IHRpbWVzdGFtcCgnY3JlYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pXG4gICAgLmRlZmF1bHROb3coKVxuICAgIC5ub3ROdWxsKCksXG4gIHVwZGF0ZWRCeTogdGV4dCgndXBkYXRlZF9ieScpXG4gICAgLmRlZmF1bHQoU1lTVEVNX09SR19JRClcbiAgICAubm90TnVsbCgpLFxuICB1cGRhdGVkQXQ6IHRpbWVzdGFtcCgndXBkYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pXG4gICAgLmRlZmF1bHROb3coKVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gSWRlbnRpdHlcbiAgbmFtZTogdmFyY2hhcignbmFtZScsIHsgbGVuZ3RoOiAxNTAgfSlcbiAgICAubm90TnVsbCgpLFxuICBkZXNjcmlwdGlvbjogdGV4dCgnZGVzY3JpcHRpb24nKSxcblxuICAvLyByZWFjdC1ncmlkLWxheW91dCBjb29yZGluYXRlIHNldCBrZXllZCBieSBwYW5lbCBpZC5cbiAgLy8gU2hhcGU6IHsgW3BhbmVsSWRdOiB7IHgsIHksIHcsIGgsIG1pblc/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";
|