@pipeline-builder/pipeline-data 3.4.115 → 3.4.117
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 +7 -1
- package/lib/api/crud-service.js +20 -5
- 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/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=
|
|
@@ -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";
|
|
@@ -40,6 +40,12 @@ export const message = pgTable('messages', {
|
|
|
40
40
|
// Message routing
|
|
41
41
|
recipientOrgId: varchar('recipient_org_id', { length: 255 })
|
|
42
42
|
.notNull(),
|
|
43
|
+
// Optional per-user targeting WITHIN the recipient org. NULL (default) = the
|
|
44
|
+
// whole recipient org sees it — the original, backward-compatible behavior.
|
|
45
|
+
// When set, only this user (a member of `recipientOrgId`) sees it, enforced in
|
|
46
|
+
// `buildMessageConditions` against the viewer's userId. Announcement broadcasts
|
|
47
|
+
// (`recipientOrgId = '*'`) never set this — they are org-wide by definition.
|
|
48
|
+
recipientUserId: varchar('recipient_user_id', { length: 255 }),
|
|
43
49
|
// Message content
|
|
44
50
|
messageType: varchar('message_type', { length: 20 })
|
|
45
51
|
.$type()
|
|
@@ -52,6 +58,10 @@ export const message = pgTable('messages', {
|
|
|
52
58
|
.notNull(),
|
|
53
59
|
content: text('content')
|
|
54
60
|
.notNull(),
|
|
61
|
+
// Set when the author edits the content after sending (NULL = never edited).
|
|
62
|
+
// Distinct from `updatedAt`, which also moves on read-receipt/system updates;
|
|
63
|
+
// `editedAt` marks a human CONTENT edit so the UI can show an "edited" hint.
|
|
64
|
+
editedAt: timestamp('edited_at', { withTimezone: true }),
|
|
55
65
|
// Status
|
|
56
66
|
// `readBy` is the per-participant read-receipt map: orgId → ISO timestamp.
|
|
57
67
|
// Recipient marking the thread does NOT flip sender's view. Empty `{}`
|
|
@@ -95,7 +105,10 @@ export const message = pgTable('messages', {
|
|
|
95
105
|
// Composite index for inbox queries (recipient + active + created)
|
|
96
106
|
recipientActiveCreatedIdx: index('message_recipient_active_created_idx')
|
|
97
107
|
.on(table.recipientOrgId, table.isActive, table.createdAt),
|
|
108
|
+
// Composite index for per-user targeted inbox lookups (recipient org + user).
|
|
109
|
+
recipientUserIdx: index('message_recipient_user_idx')
|
|
110
|
+
.on(table.recipientOrgId, table.recipientUserId, table.isActive),
|
|
98
111
|
// Composite index for org inbox (orgId + active)
|
|
99
112
|
orgActiveIdx: index('message_org_active_idx').on(table.orgId, table.isActive),
|
|
100
113
|
}));
|
|
101
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kYXRhYmFzZS9zY2hlbWEvbWVzc2FnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0UsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBWXJHOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxVQUFVLEVBQUU7SUFDekMsY0FBYztJQUNkLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsYUFBYSxFQUFFO0lBRTNDLGtDQUFrQztJQUNsQyxLQUFLLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztTQUN0QyxPQUFPLENBQUMsYUFBYSxDQUFDO1NBQ3RCLE9BQU8sRUFBRTtJQUVaLGVBQWU7SUFDZixTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQztTQUMxQixPQUFPLENBQUMsYUFBYSxDQUFDO1NBQ3RCLE9BQU8sRUFBRTtJQUNaLFNBQVMsRUFBRSxTQUFTLENBQUMsWUFBWSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO1NBQ3ZELFVBQVUsRUFBRTtTQUNaLE9BQU8sRUFBRTtJQUNaLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQzFCLE9BQU8sQ0FBQyxhQUFhLENBQUM7U0FDdEIsT0FBTyxFQUFFO0lBQ1osU0FBUyxFQUFF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S0FBSyxDQUFDLFdBQVcsQ0FBQztJQUN2RSxVQUFVLEVBQUUsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7SUFDMUQsWUFBWSxFQUFFLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO0lBQ2pFLFNBQVMsRUFBRSxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUV6RCxtRUFBbUU7SUFDbkUseUJBQXlCLEVBQUUsS0FBSyxDQUFDLHNDQUFzQyxDQUFDO1NBQ3JFLEVBQUUsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQztJQUU1RCxpREFBaUQ7SUFDakQsWUFBWSxFQUFFLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUM7Q0FDOUUsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgQWNjZXNzTW9kaWZpZXIsIFNZU1RFTV9PUkdfSUQgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBzcWwgfSBmcm9tICdkcml6emxlLW9ybSc7XG5pbXBvcnQgeyBib29sZWFuLCB2YXJjaGFyLCBwZ1RhYmxlLCB0ZXh0LCB0aW1lc3RhbXAsIHV1aWQsIGpzb25iLCBpbmRleCB9IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnO1xuXG4vKipcbiAqIE1lc3NhZ2UgdHlwZSBpZGVudGlmaWVyc1xuICovXG5leHBvcnQgdHlwZSBNZXNzYWdlVHlwZSA9ICdhbm5vdW5jZW1lbnQnIHwgJ2NvbnZlcnNhdGlvbic7XG5cbi8qKlxuICogTWVzc2FnZSBwcmlvcml0eSBsZXZlbHNcbiAqL1xuZXhwb3J0IHR5cGUgTWVzc2FnZVByaW9yaXR5ID0gJ25vcm1hbCcgfCAnaGlnaCcgfCAndXJnZW50JztcblxuLyoqXG4gKiBUYWJsZSBmb3Igc3RvcmluZyBpbnRlcm5hbCBtZXNzYWdlcyBiZXR3ZWVuIG9yZ2FuaXphdGlvbnMgYW5kIHRoZSBzeXN0ZW0gb3JnLlxuICpcbiAqIEZlYXR1cmVzICogLSBBbm5vdW5jZW1lbnRzOiBTeXN0ZW0gb3JnIGJyb2FkY2FzdHMgdG8gYWxsIG9yZ3MgKHJlY2lwaWVudE9yZ0lkID0gJyonKVxuICogLSBDb252ZXJzYXRpb25zOiBUd28td2F5IHRocmVhZGVkIG1lc3NhZ2luZyBiZXR3ZWVuIGFuIG9yZyBhbmQgc3lzdGVtIG9yZ1xuICogLSBUaHJlYWQgc3VwcG9ydCB2aWEgdGhyZWFkSWQgKG51bGwgZm9yIHJvb3QgbWVzc2FnZXMsIHJlZmVyZW5jZXMgcm9vdCBmb3IgcmVwbGllcylcbiAqIC0gUmVhZCB0cmFja2luZyBwZXIgbWVzc2FnZVxuICogLSBQcmlvcml0eSBsZXZlbHMgKG5vcm1hbCwgaGlnaCwgdXJnZW50KVxuICogLSBTb2Z0IGRlbGV0ZSBzdXBwb3J0XG4gKlxuICogQHRhYmxlIG1lc3NhZ2VzXG4gKi9cbmV4cG9ydCBjb25zdCBtZXNzYWdlID0gcGdUYWJsZSgnbWVzc2FnZXMnLCB7XG4gIC8vIFByaW1hcnkga2V5XG4gIGlkOiB1dWlkKCdpZCcpLnByaW1hcnlLZXkoKS5kZWZhdWx0UmFuZG9tKCksXG5cbiAgLy8gT3JnYW5pemF0aW9uIGFuZCBhY2Nlc3MgY29udHJvbFxuICBvcmdJZDogdmFyY2hhcignb3JnX2lkJywgeyBsZW5ndGg6IDI1NSB9KVxuICAgIC5kZWZhdWx0KFNZU1RFTV9PUkdfSUQpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBBdWRpdCBmaWVsZHNcbiAgY3JlYXRlZEJ5OiB0ZXh0KCdjcmVhdGVkX2J5JylcbiAgICAuZGVmYXVsdChTWVNURU1fT1JHX0lEKVxuICAgIC5ub3ROdWxsKCksXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wKCdjcmVhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSlcbiAgICAuZGVmYXVsdE5vdygpXG4gICAgLm5vdE51bGwoKSxcbiAgdXBkYXRlZEJ5OiB0ZXh0KCd1cGRhdGVkX2J5JylcbiAgICAuZGVmYXVsdChTWVNURU1fT1JHX0lEKVxuICAgIC5ub3ROdWxsKCksXG4gIHVwZGF0ZWRBdDogdGltZXN0YW1wKCd1cGRhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSlcbiAgICAuZGVmYXVsdE5vdygpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBUaHJlYWRpbmdcbiAgdGhyZWFkSWQ6IHV1aWQoJ3RocmVhZF9pZCcpLFxuXG4gIC8vIE1lc3NhZ2Ugcm91dGluZ1xuICByZWNpcGllbnRPcmdJZDogdmFyY2hhcigncmVjaXBpZW50X29yZ19pZCcsIHsgbGVuZ3RoOiAyNTUgfSlcbiAgICAubm90TnVsbCgpLFxuXG4gIC8vIE1lc3NhZ2UgY29udGVudFxuICBtZXNzYWdlVHlwZTogdmFyY2hhcignbWVzc2FnZV90eXBlJywgeyBsZW5ndGg6IDIwIH0pXG4gICAgLiR0eXBlPE1lc3NhZ2VUeXBlPigpXG4gICAgLmRlZmF1bHQoJ2NvbnZlcnNhdGlvbicgYXMgTWVzc2FnZVR5cGUpXG4gICAgLm5vdE51bGwoKSxcbiAgLy8gTG9naWNhbCBjaGFubmVsL2luYm94IGJ1Y2tldCDigJQgJ3N1cHBvcnQnLCAnaGVscCcsIGV0Yy4gTnVsbGFibGUgc29cbiAgLy8gb3JnLXRvLW9yZyBjb252ZXJzYXRpb25zICh3aGljaCBhcmVuJ3QgY2hhbm5lbC1zY29wZWQpIGNhbiBvbWl0IGl0LlxuICBjaGFubmVsOiB2YXJjaGFyKCdjaGFubmVsJywgeyBsZW5ndGg6IDUwIH0pLFxuICBzdWJqZWN0OiB2YXJjaGFyKCdzdWJqZWN0JywgeyBsZW5ndGg6IDUwMCB9KVxuICAgIC5ub3ROdWxsKCksXG4gIGNvbnRlbnQ6IHRleHQoJ2NvbnRlbnQnKVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gU3RhdHVzXG4gIC8vIGByZWFkQnlgIGlzIHRoZSBwZXItcGFydGljaXBhbnQgcmVhZC1yZWNlaXB0IG1hcDogb3JnSWQg4oaSIElTTyB0aW1lc3RhbXAuXG4gIC8vIFJlY2lwaWVudCBtYXJraW5nIHRoZSB0aHJlYWQgZG9lcyBOT1QgZmxpcCBzZW5kZXIncyB2aWV3LiBFbXB0eSBge31gXG4gIC8vIG1lYW5zIG5vYm9keSBoYXMgcmVhZCBpdCB5ZXQuXG4gIHJlYWRCeToganNvbmIoJ3JlYWRfYnknKVxuICAgIC4kdHlwZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PigpXG4gICAgLmRlZmF1bHQoe30pXG4gICAgLm5vdE51bGwoKSxcbiAgcHJpb3JpdHk6IHZhcmNoYXIoJ3ByaW9yaXR5JywgeyBsZW5ndGg6IDIwIH0pXG4gICAgLiR0eXBlPE1lc3NhZ2VQcmlvcml0eT4oKVxuICAgIC5kZWZhdWx0KCdub3JtYWwnIGFzIE1lc3NhZ2VQcmlvcml0eSlcbiAgICAubm90TnVsbCgpLFxuXG4gIC8vIEFjY2VzcyBhbmQgdmlzaWJpbGl0eVxuICBhY2Nlc3NNb2RpZmllcjogdmFyY2hhcignYWNjZXNzX21vZGlmaWVyJywgeyBsZW5ndGg6IDEwIH0pXG4gICAgLiR0eXBlPEFjY2Vzc01vZGlmaWVyPigpXG4gICAgLmRlZmF1bHQoJ3ByaXZhdGUnIGFzIEFjY2Vzc01vZGlmaWVyKVxuICAgIC5ub3ROdWxsKCksXG4gIGlzRGVmYXVsdDogYm9vbGVhbignaXNfZGVmYXVsdCcpXG4gICAgLmRlZmF1bHQoZmFsc2UpXG4gICAgLm5vdE51bGwoKSxcbiAgaXNBY3RpdmU6IGJvb2xlYW4oJ2lzX2FjdGl2ZScpXG4gICAgLmRlZmF1bHQodHJ1ZSlcbiAgICAubm90TnVsbCgpLFxuXG4gIC8vIERlbGV0aW9uIHRyYWNraW5nIChzb2Z0IGRlbGV0ZSlcbiAgZGVsZXRlZEF0OiB0aW1lc3RhbXAoJ2RlbGV0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbiAgZGVsZXRlZEJ5OiB0ZXh0KCdkZWxldGVkX2J5JyksXG4gIC8vIFNvZnQtZGVsZXRlIHB1cmdlIGRlYWRsaW5lOiB0aGUgcmV0ZW50aW9uIHN3ZWVwIGhhcmQtZGVsZXRlcyB0b21ic3RvbmVkXG4gIC8vIHJvd3Mgb25jZSBgcHVyZ2VfYWZ0ZXJgIGhhcyBwYXNzZWQgKHNldCBvbiBkZWxldGUgYWxvbmdzaWRlIGRlbGV0ZWRfYXQpLlxuICBwdXJnZUFmdGVyOiB0aW1lc3RhbXAoJ3B1cmdlX2FmdGVyJywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG59LCAodGFibGUpID0+ICh7XG4gIC8vIFBhcnRpYWwgaW5kZXggb3ZlciBqdXN0IHRoZSB0b21ic3RvbmVzIOKAlCBkcml2ZXMgdGhlIHJldGVudGlvbiBwdXJnZSBzd2VlcC5cbiAgcHVyZ2VJZHg6IGluZGV4KCdtZXNzYWdlX3B1cmdlX2lkeCcpLm9uKHRhYmxlLnB1cmdlQWZ0ZXIpLndoZXJlKHNxbGBkZWxldGVkX2F0IElTIE5PVCBOVUxMYCksXG4gIC8vIEluZGV4ZXMgZm9yIGNvbW1vbiBxdWVyaWVzXG4gIG9yZ0lkSWR4OiBpbmRleCgnbWVzc2FnZV9vcmdfaWRfaWR4Jykub24odGFibGUub3JnSWQpLFxuICByZWNpcGllbnRPcmdJZElkeDogaW5kZXgoJ21lc3NhZ2VfcmVjaXBpZW50X29yZ19pZF9pZHgnKS5vbih0YWJsZS5yZWNpcGllbnRPcmdJZCksXG4gIHRocmVhZElkSWR4OiBpbmRleCgnbWVzc2FnZV90aHJlYWRfaWRfaWR4Jykub24odGFibGUudGhyZWFkSWQpLFxuICBtZXNzYWdlVHlwZUlkeDogaW5kZXgoJ21lc3NhZ2VfbWVzc2FnZV90eXBlX2lkeCcpLm9uKHRhYmxlLm1lc3NhZ2VUeXBlKSxcbiAgY2hhbm5lbElkeDogaW5kZXgoJ21lc3NhZ2VfY2hhbm5lbF9pZHgnKS5vbih0YWJsZS5jaGFubmVsKSxcbiAgY3JlYXRlZEF0SWR4OiBpbmRleCgnbWVzc2FnZV9jcmVhdGVkX2F0X2lkeCcpLm9uKHRhYmxlLmNyZWF0ZWRBdCksXG4gIGFjdGl2ZUlkeDogaW5kZXgoJ21lc3NhZ2VfYWN0aXZlX2lkeCcpLm9uKHRhYmxlLmlzQWN0aXZlKSxcblxuICAvLyBDb21wb3NpdGUgaW5kZXggZm9yIGluYm94IHF1ZXJpZXMgKHJlY2lwaWVudCArIGFjdGl2ZSArIGNyZWF0ZWQpXG4gIHJlY2lwaWVudEFjdGl2ZUNyZWF0ZWRJZHg6IGluZGV4KCdtZXNzYWdlX3JlY2lwaWVudF9hY3RpdmVfY3JlYXRlZF9pZHgnKVxuICAgIC5vbih0YWJsZS5yZWNpcGllbnRPcmdJZCwgdGFibGUuaXNBY3RpdmUsIHRhYmxlLmNyZWF0ZWRBdCksXG5cbiAgLy8gQ29tcG9zaXRlIGluZGV4IGZvciBvcmcgaW5ib3ggKG9yZ0lkICsgYWN0aXZlKVxuICBvcmdBY3RpdmVJZHg6IGluZGV4KCdtZXNzYWdlX29yZ19hY3RpdmVfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmlzQWN0aXZlKSxcbn0pKTtcblxuLyoqXG4gKiBUeXBlU2NyaXB0IHR5cGVzIHJlcHJlc2VudGluZyBkYXRhYmFzZSByb3dzXG4gKi9cbmV4cG9ydCB0eXBlIE1lc3NhZ2UgPSB0eXBlb2YgbWVzc2FnZS4kaW5mZXJTZWxlY3Q7XG5leHBvcnQgdHlwZSBNZXNzYWdlSW5zZXJ0ID0gdHlwZW9mIG1lc3NhZ2UuJGluZmVySW5zZXJ0O1xuXG4vKipcbiAqIEhlbHBlciB0eXBlcyBmb3Igd29ya2luZyB3aXRoIHBhcnRpYWwgdXBkYXRlc1xuICovXG5leHBvcnQgdHlwZSBNZXNzYWdlVXBkYXRlID0gUGFydGlhbDxPbWl0PE1lc3NhZ2VJbnNlcnQsICdpZCcgfCAnY3JlYXRlZEF0JyB8ICdjcmVhdGVkQnknPj47XG4iXX0=
|
|
114
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kYXRhYmFzZS9zY2hlbWEvbWVzc2FnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0UsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBWXJHOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxVQUFVLEVBQUU7SUFDekMsY0FBYztJQUNkLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsYUFBYSxFQUFFO0lBRTNDLGtDQUFrQztJQUNsQyxLQUFLLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztTQUN0QyxPQUFPLENBQUMsYUFBYSxDQUFDO1NBQ3RCLE9BQU8sRUFBRTtJQUVaLGVBQWU7SUFDZixTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQztTQUMxQixPQUFPLENBQUMsYUFBYSxDQUFDO1NBQ3RCLE9BQU8sRUFBRTtJQUNaLFNBQVMsRUFBRSxTQUFTLENBQUMsWUFBWSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO1NBQ3ZELFVBQVUsRUFBRTtTQUNaLE9BQU8sRUFBRTtJQUNaLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQzFCLE9BQU8sQ0FBQyxhQUFhLENBQUM7U0FDdEIsT0FBTyxFQUFFO0lBQ1osU0FBUyxFQUFF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UGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IEFjY2Vzc01vZGlmaWVyLCBTWVNURU1fT1JHX0lEIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHsgc3FsIH0gZnJvbSAnZHJpenpsZS1vcm0nO1xuaW1wb3J0IHsgYm9vbGVhbiwgdmFyY2hhciwgcGdUYWJsZSwgdGV4dCwgdGltZXN0YW1wLCB1dWlkLCBqc29uYiwgaW5kZXggfSBmcm9tICdkcml6emxlLW9ybS9wZy1jb3JlJztcblxuLyoqXG4gKiBNZXNzYWdlIHR5cGUgaWRlbnRpZmllcnNcbiAqL1xuZXhwb3J0IHR5cGUgTWVzc2FnZVR5cGUgPSAnYW5ub3VuY2VtZW50JyB8ICdjb252ZXJzYXRpb24nO1xuXG4vKipcbiAqIE1lc3NhZ2UgcHJpb3JpdHkgbGV2ZWxzXG4gKi9cbmV4cG9ydCB0eXBlIE1lc3NhZ2VQcmlvcml0eSA9ICdub3JtYWwnIHwgJ2hpZ2gnIHwgJ3VyZ2VudCc7XG5cbi8qKlxuICogVGFibGUgZm9yIHN0b3JpbmcgaW50ZXJuYWwgbWVzc2FnZXMgYmV0d2VlbiBvcmdhbml6YXRpb25zIGFuZCB0aGUgc3lzdGVtIG9yZy5cbiAqXG4gKiBGZWF0dXJlcyAqIC0gQW5ub3VuY2VtZW50czogU3lzdGVtIG9yZyBicm9hZGNhc3RzIHRvIGFsbCBvcmdzIChyZWNpcGllbnRPcmdJZCA9ICcqJylcbiAqIC0gQ29udmVyc2F0aW9uczogVHdvLXdheSB0aHJlYWRlZCBtZXNzYWdpbmcgYmV0d2VlbiBhbiBvcmcgYW5kIHN5c3RlbSBvcmdcbiAqIC0gVGhyZWFkIHN1cHBvcnQgdmlhIHRocmVhZElkIChudWxsIGZvciByb290IG1lc3NhZ2VzLCByZWZlcmVuY2VzIHJvb3QgZm9yIHJlcGxpZXMpXG4gKiAtIFJlYWQgdHJhY2tpbmcgcGVyIG1lc3NhZ2VcbiAqIC0gUHJpb3JpdHkgbGV2ZWxzIChub3JtYWwsIGhpZ2gsIHVyZ2VudClcbiAqIC0gU29mdCBkZWxldGUgc3VwcG9ydFxuICpcbiAqIEB0YWJsZSBtZXNzYWdlc1xuICovXG5leHBvcnQgY29uc3QgbWVzc2FnZSA9IHBnVGFibGUoJ21lc3NhZ2VzJywge1xuICAvLyBQcmltYXJ5IGtleVxuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuXG4gIC8vIE9yZ2FuaXphdGlvbiBhbmQgYWNjZXNzIGNvbnRyb2xcbiAgb3JnSWQ6IHZhcmNoYXIoJ29yZ19pZCcsIHsgbGVuZ3RoOiAyNTUgfSlcbiAgICAuZGVmYXVsdChTWVNURU1fT1JHX0lEKVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gQXVkaXQgZmllbGRzXG4gIGNyZWF0ZWRCeTogdGV4dCgnY3JlYXRlZF9ieScpXG4gICAgLmRlZmF1bHQoU1lTVEVNX09SR19JRClcbiAgICAubm90TnVsbCgpLFxuICBjcmVhdGVkQXQ6IHRpbWVzdGFtcCgnY3JlYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pXG4gICAgLmRlZmF1bHROb3coKVxuICAgIC5ub3ROdWxsKCksXG4gIHVwZGF0ZWRCeTogdGV4dCgndXBkYXRlZF9ieScpXG4gICAgLmRlZmF1bHQoU1lTVEVNX09SR19JRClcbiAgICAubm90TnVsbCgpLFxuICB1cGRhdGVkQXQ6IHRpbWVzdGFtcCgndXBkYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pXG4gICAgLmRlZmF1bHROb3coKVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gVGhyZWFkaW5nXG4gIHRocmVhZElkOiB1dWlkKCd0aHJlYWRfaWQnKSxcblxuICAvLyBNZXNzYWdlIHJvdXRpbmdcbiAgcmVjaXBpZW50T3JnSWQ6IHZhcmNoYXIoJ3JlY2lwaWVudF9vcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBPcHRpb25hbCBwZXItdXNlciB0YXJnZXRpbmcgV0lUSElOIHRoZSByZWNpcGllbnQgb3JnLiBOVUxMIChkZWZhdWx0KSA9IHRoZVxuICAvLyB3aG9sZSByZWNpcGllbnQgb3JnIHNlZXMgaXQg4oCUIHRoZSBvcmlnaW5hbCwgYmFja3dhcmQtY29tcGF0aWJsZSBiZWhhdmlvci5cbiAgLy8gV2hlbiBzZXQsIG9ubHkgdGhpcyB1c2VyIChhIG1lbWJlciBvZiBgcmVjaXBpZW50T3JnSWRgKSBzZWVzIGl0LCBlbmZvcmNlZCBpblxuICAvLyBgYnVpbGRNZXNzYWdlQ29uZGl0aW9uc2AgYWdhaW5zdCB0aGUgdmlld2VyJ3MgdXNlcklkLiBBbm5vdW5jZW1lbnQgYnJvYWRjYXN0c1xuICAvLyAoYHJlY2lwaWVudE9yZ0lkID0gJyonYCkgbmV2ZXIgc2V0IHRoaXMg4oCUIHRoZXkgYXJlIG9yZy13aWRlIGJ5IGRlZmluaXRpb24uXG4gIHJlY2lwaWVudFVzZXJJZDogdmFyY2hhcigncmVjaXBpZW50X3VzZXJfaWQnLCB7IGxlbmd0aDogMjU1IH0pLFxuXG4gIC8vIE1lc3NhZ2UgY29udGVudFxuICBtZXNzYWdlVHlwZTogdmFyY2hhcignbWVzc2FnZV90eXBlJywgeyBsZW5ndGg6IDIwIH0pXG4gICAgLiR0eXBlPE1lc3NhZ2VUeXBlPigpXG4gICAgLmRlZmF1bHQoJ2NvbnZlcnNhdGlvbicgYXMgTWVzc2FnZVR5cGUpXG4gICAgLm5vdE51bGwoKSxcbiAgLy8gTG9naWNhbCBjaGFubmVsL2luYm94IGJ1Y2tldCDigJQgJ3N1cHBvcnQnLCAnaGVscCcsIGV0Yy4gTnVsbGFibGUgc29cbiAgLy8gb3JnLXRvLW9yZyBjb252ZXJzYXRpb25zICh3aGljaCBhcmVuJ3QgY2hhbm5lbC1zY29wZWQpIGNhbiBvbWl0IGl0LlxuICBjaGFubmVsOiB2YXJjaGFyKCdjaGFubmVsJywgeyBsZW5ndGg6IDUwIH0pLFxuICBzdWJqZWN0OiB2YXJjaGFyKCdzdWJqZWN0JywgeyBsZW5ndGg6IDUwMCB9KVxuICAgIC5ub3ROdWxsKCksXG4gIGNvbnRlbnQ6IHRleHQoJ2NvbnRlbnQnKVxuICAgIC5ub3ROdWxsKCksXG4gIC8vIFNldCB3aGVuIHRoZSBhdXRob3IgZWRpdHMgdGhlIGNvbnRlbnQgYWZ0ZXIgc2VuZGluZyAoTlVMTCA9IG5ldmVyIGVkaXRlZCkuXG4gIC8vIERpc3RpbmN0IGZyb20gYHVwZGF0ZWRBdGAsIHdoaWNoIGFsc28gbW92ZXMgb24gcmVhZC1yZWNlaXB0L3N5c3RlbSB1cGRhdGVzO1xuICAvLyBgZWRpdGVkQXRgIG1hcmtzIGEgaHVtYW4gQ09OVEVOVCBlZGl0IHNvIHRoZSBVSSBjYW4gc2hvdyBhbiBcImVkaXRlZFwiIGhpbnQuXG4gIGVkaXRlZEF0OiB0aW1lc3RhbXAoJ2VkaXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuXG4gIC8vIFN0YXR1c1xuICAvLyBgcmVhZEJ5YCBpcyB0aGUgcGVyLXBhcnRpY2lwYW50IHJlYWQtcmVjZWlwdCBtYXA6IG9yZ0lkIOKGkiBJU08gdGltZXN0YW1wLlxuICAvLyBSZWNpcGllbnQgbWFya2luZyB0aGUgdGhyZWFkIGRvZXMgTk9UIGZsaXAgc2VuZGVyJ3Mgdmlldy4gRW1wdHkgYHt9YFxuICAvLyBtZWFucyBub2JvZHkgaGFzIHJlYWQgaXQgeWV0LlxuICByZWFkQnk6IGpzb25iKCdyZWFkX2J5JylcbiAgICAuJHR5cGU8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oKVxuICAgIC5kZWZhdWx0KHt9KVxuICAgIC5ub3ROdWxsKCksXG4gIHByaW9yaXR5OiB2YXJjaGFyKCdwcmlvcml0eScsIHsgbGVuZ3RoOiAyMCB9KVxuICAgIC4kdHlwZTxNZXNzYWdlUHJpb3JpdHk+KClcbiAgICAuZGVmYXVsdCgnbm9ybWFsJyBhcyBNZXNzYWdlUHJpb3JpdHkpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBBY2Nlc3MgYW5kIHZpc2liaWxpdHlcbiAgYWNjZXNzTW9kaWZpZXI6IHZhcmNoYXIoJ2FjY2Vzc19tb2RpZmllcicsIHsgbGVuZ3RoOiAxMCB9KVxuICAgIC4kdHlwZTxBY2Nlc3NNb2RpZmllcj4oKVxuICAgIC5kZWZhdWx0KCdwcml2YXRlJyBhcyBBY2Nlc3NNb2RpZmllcilcbiAgICAubm90TnVsbCgpLFxuICBpc0RlZmF1bHQ6IGJvb2xlYW4oJ2lzX2RlZmF1bHQnKVxuICAgIC5kZWZhdWx0KGZhbHNlKVxuICAgIC5ub3ROdWxsKCksXG4gIGlzQWN0aXZlOiBib29sZWFuKCdpc19hY3RpdmUnKVxuICAgIC5kZWZhdWx0KHRydWUpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBEZWxldGlvbiB0cmFja2luZyAoc29mdCBkZWxldGUpXG4gIGRlbGV0ZWRBdDogdGltZXN0YW1wKCdkZWxldGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIGRlbGV0ZWRCeTogdGV4dCgnZGVsZXRlZF9ieScpLFxuICAvLyBTb2Z0LWRlbGV0ZSBwdXJnZSBkZWFkbGluZTogdGhlIHJldGVudGlvbiBzd2VlcCBoYXJkLWRlbGV0ZXMgdG9tYnN0b25lZFxuICAvLyByb3dzIG9uY2UgYHB1cmdlX2FmdGVyYCBoYXMgcGFzc2VkIChzZXQgb24gZGVsZXRlIGFsb25nc2lkZSBkZWxldGVkX2F0KS5cbiAgcHVyZ2VBZnRlcjogdGltZXN0YW1wKCdwdXJnZV9hZnRlcicsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxufSwgKHRhYmxlKSA9PiAoe1xuICAvLyBQYXJ0aWFsIGluZGV4IG92ZXIganVzdCB0aGUgdG9tYnN0b25lcyDigJQgZHJpdmVzIHRoZSByZXRlbnRpb24gcHVyZ2Ugc3dlZXAuXG4gIHB1cmdlSWR4OiBpbmRleCgnbWVzc2FnZV9wdXJnZV9pZHgnKS5vbih0YWJsZS5wdXJnZUFmdGVyKS53aGVyZShzcWxgZGVsZXRlZF9hdCBJUyBOT1QgTlVMTGApLFxuICAvLyBJbmRleGVzIGZvciBjb21tb24gcXVlcmllc1xuICBvcmdJZElkeDogaW5kZXgoJ21lc3NhZ2Vfb3JnX2lkX2lkeCcpLm9uKHRhYmxlLm9yZ0lkKSxcbiAgcmVjaXBpZW50T3JnSWRJZHg6IGluZGV4KCdtZXNzYWdlX3JlY2lwaWVudF9vcmdfaWRfaWR4Jykub24odGFibGUucmVjaXBpZW50T3JnSWQpLFxuICB0aHJlYWRJZElkeDogaW5kZXgoJ21lc3NhZ2VfdGhyZWFkX2lkX2lkeCcpLm9uKHRhYmxlLnRocmVhZElkKSxcbiAgbWVzc2FnZVR5cGVJZHg6IGluZGV4KCdtZXNzYWdlX21lc3NhZ2VfdHlwZV9pZHgnKS5vbih0YWJsZS5tZXNzYWdlVHlwZSksXG4gIGNoYW5uZWxJZHg6IGluZGV4KCdtZXNzYWdlX2NoYW5uZWxfaWR4Jykub24odGFibGUuY2hhbm5lbCksXG4gIGNyZWF0ZWRBdElkeDogaW5kZXgoJ21lc3NhZ2VfY3JlYXRlZF9hdF9pZHgnKS5vbih0YWJsZS5jcmVhdGVkQXQpLFxuICBhY3RpdmVJZHg6IGluZGV4KCdtZXNzYWdlX2FjdGl2ZV9pZHgnKS5vbih0YWJsZS5pc0FjdGl2ZSksXG5cbiAgLy8gQ29tcG9zaXRlIGluZGV4IGZvciBpbmJveCBxdWVyaWVzIChyZWNpcGllbnQgKyBhY3RpdmUgKyBjcmVhdGVkKVxuICByZWNpcGllbnRBY3RpdmVDcmVhdGVkSWR4OiBpbmRleCgnbWVzc2FnZV9yZWNpcGllbnRfYWN0aXZlX2NyZWF0ZWRfaWR4JylcbiAgICAub24odGFibGUucmVjaXBpZW50T3JnSWQsIHRhYmxlLmlzQWN0aXZlLCB0YWJsZS5jcmVhdGVkQXQpLFxuXG4gIC8vIENvbXBvc2l0ZSBpbmRleCBmb3IgcGVyLXVzZXIgdGFyZ2V0ZWQgaW5ib3ggbG9va3VwcyAocmVjaXBpZW50IG9yZyArIHVzZXIpLlxuICByZWNpcGllbnRVc2VySWR4OiBpbmRleCgnbWVzc2FnZV9yZWNpcGllbnRfdXNlcl9pZHgnKVxuICAgIC5vbih0YWJsZS5yZWNpcGllbnRPcmdJZCwgdGFibGUucmVjaXBpZW50VXNlcklkLCB0YWJsZS5pc0FjdGl2ZSksXG5cbiAgLy8gQ29tcG9zaXRlIGluZGV4IGZvciBvcmcgaW5ib3ggKG9yZ0lkICsgYWN0aXZlKVxuICBvcmdBY3RpdmVJZHg6IGluZGV4KCdtZXNzYWdlX29yZ19hY3RpdmVfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmlzQWN0aXZlKSxcbn0pKTtcblxuLyoqXG4gKiBUeXBlU2NyaXB0IHR5cGVzIHJlcHJlc2VudGluZyBkYXRhYmFzZSByb3dzXG4gKi9cbmV4cG9ydCB0eXBlIE1lc3NhZ2UgPSB0eXBlb2YgbWVzc2FnZS4kaW5mZXJTZWxlY3Q7XG5leHBvcnQgdHlwZSBNZXNzYWdlSW5zZXJ0ID0gdHlwZW9mIG1lc3NhZ2UuJGluZmVySW5zZXJ0O1xuXG4vKipcbiAqIEhlbHBlciB0eXBlcyBmb3Igd29ya2luZyB3aXRoIHBhcnRpYWwgdXBkYXRlc1xuICovXG5leHBvcnQgdHlwZSBNZXNzYWdlVXBkYXRlID0gUGFydGlhbDxPbWl0PE1lc3NhZ2VJbnNlcnQsICdpZCcgfCAnY3JlYXRlZEF0JyB8ICdjcmVhdGVkQnknPj47XG4iXX0=
|