@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.
@@ -2,6 +2,7 @@ export * from './schema/plugin.js';
2
2
  export * from './schema/pipeline.js';
3
3
  export * from './schema/pipeline-template.js';
4
4
  export * from './schema/message.js';
5
+ export * from './schema/message-attachment.js';
5
6
  export * from './schema/compliance.js';
6
7
  export * from './schema/dashboard.js';
7
8
  export * from './schema/alert.js';
@@ -1757,6 +1758,25 @@ export declare const schema: {
1757
1758
  }, {}, {
1758
1759
  length: 255;
1759
1760
  }>;
1761
+ recipientUserId: import("drizzle-orm/pg-core").PgColumn<{
1762
+ name: "recipient_user_id";
1763
+ tableName: "messages";
1764
+ dataType: "string";
1765
+ columnType: "PgVarchar";
1766
+ data: string;
1767
+ driverParam: string;
1768
+ notNull: false;
1769
+ hasDefault: false;
1770
+ isPrimaryKey: false;
1771
+ isAutoincrement: false;
1772
+ hasRuntimeDefault: false;
1773
+ enumValues: [string, ...string[]];
1774
+ baseColumn: never;
1775
+ identity: undefined;
1776
+ generated: undefined;
1777
+ }, {}, {
1778
+ length: 255;
1779
+ }>;
1760
1780
  messageType: import("drizzle-orm/pg-core").PgColumn<{
1761
1781
  name: "message_type";
1762
1782
  tableName: "messages";
@@ -1832,6 +1852,23 @@ export declare const schema: {
1832
1852
  identity: undefined;
1833
1853
  generated: undefined;
1834
1854
  }, {}, {}>;
1855
+ editedAt: import("drizzle-orm/pg-core").PgColumn<{
1856
+ name: "edited_at";
1857
+ tableName: "messages";
1858
+ dataType: "date";
1859
+ columnType: "PgTimestamp";
1860
+ data: Date;
1861
+ driverParam: string;
1862
+ notNull: false;
1863
+ hasDefault: false;
1864
+ isPrimaryKey: false;
1865
+ isAutoincrement: false;
1866
+ hasRuntimeDefault: false;
1867
+ enumValues: undefined;
1868
+ baseColumn: never;
1869
+ identity: undefined;
1870
+ generated: undefined;
1871
+ }, {}, {}>;
1835
1872
  readBy: import("drizzle-orm/pg-core").PgColumn<{
1836
1873
  name: "read_by";
1837
1874
  tableName: "messages";
@@ -1979,6 +2016,174 @@ export declare const schema: {
1979
2016
  };
1980
2017
  dialect: 'pg';
1981
2018
  }>;
2019
+ readonly messageAttachment: import("drizzle-orm/pg-core").PgTableWithColumns<{
2020
+ name: "message_attachments";
2021
+ schema: undefined;
2022
+ columns: {
2023
+ id: import("drizzle-orm/pg-core").PgColumn<{
2024
+ name: "id";
2025
+ tableName: "message_attachments";
2026
+ dataType: "string";
2027
+ columnType: "PgUUID";
2028
+ data: string;
2029
+ driverParam: string;
2030
+ notNull: true;
2031
+ hasDefault: true;
2032
+ isPrimaryKey: true;
2033
+ isAutoincrement: false;
2034
+ hasRuntimeDefault: false;
2035
+ enumValues: undefined;
2036
+ baseColumn: never;
2037
+ identity: undefined;
2038
+ generated: undefined;
2039
+ }, {}, {}>;
2040
+ orgId: import("drizzle-orm/pg-core").PgColumn<{
2041
+ name: "org_id";
2042
+ tableName: "message_attachments";
2043
+ dataType: "string";
2044
+ columnType: "PgVarchar";
2045
+ data: string;
2046
+ driverParam: string;
2047
+ notNull: true;
2048
+ hasDefault: false;
2049
+ isPrimaryKey: false;
2050
+ isAutoincrement: false;
2051
+ hasRuntimeDefault: false;
2052
+ enumValues: [string, ...string[]];
2053
+ baseColumn: never;
2054
+ identity: undefined;
2055
+ generated: undefined;
2056
+ }, {}, {
2057
+ length: 255;
2058
+ }>;
2059
+ messageId: import("drizzle-orm/pg-core").PgColumn<{
2060
+ name: "message_id";
2061
+ tableName: "message_attachments";
2062
+ dataType: "string";
2063
+ columnType: "PgUUID";
2064
+ data: string;
2065
+ driverParam: string;
2066
+ notNull: false;
2067
+ hasDefault: false;
2068
+ isPrimaryKey: false;
2069
+ isAutoincrement: false;
2070
+ hasRuntimeDefault: false;
2071
+ enumValues: undefined;
2072
+ baseColumn: never;
2073
+ identity: undefined;
2074
+ generated: undefined;
2075
+ }, {}, {}>;
2076
+ uploadedBy: import("drizzle-orm/pg-core").PgColumn<{
2077
+ name: "uploaded_by";
2078
+ tableName: "message_attachments";
2079
+ dataType: "string";
2080
+ columnType: "PgText";
2081
+ data: string;
2082
+ driverParam: string;
2083
+ notNull: true;
2084
+ hasDefault: false;
2085
+ isPrimaryKey: false;
2086
+ isAutoincrement: false;
2087
+ hasRuntimeDefault: false;
2088
+ enumValues: [string, ...string[]];
2089
+ baseColumn: never;
2090
+ identity: undefined;
2091
+ generated: undefined;
2092
+ }, {}, {}>;
2093
+ filename: import("drizzle-orm/pg-core").PgColumn<{
2094
+ name: "filename";
2095
+ tableName: "message_attachments";
2096
+ dataType: "string";
2097
+ columnType: "PgVarchar";
2098
+ data: string;
2099
+ driverParam: string;
2100
+ notNull: true;
2101
+ hasDefault: false;
2102
+ isPrimaryKey: false;
2103
+ isAutoincrement: false;
2104
+ hasRuntimeDefault: false;
2105
+ enumValues: [string, ...string[]];
2106
+ baseColumn: never;
2107
+ identity: undefined;
2108
+ generated: undefined;
2109
+ }, {}, {
2110
+ length: 255;
2111
+ }>;
2112
+ contentType: import("drizzle-orm/pg-core").PgColumn<{
2113
+ name: "content_type";
2114
+ tableName: "message_attachments";
2115
+ dataType: "string";
2116
+ columnType: "PgVarchar";
2117
+ data: string;
2118
+ driverParam: string;
2119
+ notNull: true;
2120
+ hasDefault: false;
2121
+ isPrimaryKey: false;
2122
+ isAutoincrement: false;
2123
+ hasRuntimeDefault: false;
2124
+ enumValues: [string, ...string[]];
2125
+ baseColumn: never;
2126
+ identity: undefined;
2127
+ generated: undefined;
2128
+ }, {}, {
2129
+ length: 128;
2130
+ }>;
2131
+ sizeBytes: import("drizzle-orm/pg-core").PgColumn<{
2132
+ name: "size_bytes";
2133
+ tableName: "message_attachments";
2134
+ dataType: "number";
2135
+ columnType: "PgInteger";
2136
+ data: number;
2137
+ driverParam: string | number;
2138
+ notNull: true;
2139
+ hasDefault: false;
2140
+ isPrimaryKey: false;
2141
+ isAutoincrement: false;
2142
+ hasRuntimeDefault: false;
2143
+ enumValues: undefined;
2144
+ baseColumn: never;
2145
+ identity: undefined;
2146
+ generated: undefined;
2147
+ }, {}, {}>;
2148
+ storageKey: import("drizzle-orm/pg-core").PgColumn<{
2149
+ name: "storage_key";
2150
+ tableName: "message_attachments";
2151
+ dataType: "string";
2152
+ columnType: "PgVarchar";
2153
+ data: string;
2154
+ driverParam: string;
2155
+ notNull: true;
2156
+ hasDefault: false;
2157
+ isPrimaryKey: false;
2158
+ isAutoincrement: false;
2159
+ hasRuntimeDefault: false;
2160
+ enumValues: [string, ...string[]];
2161
+ baseColumn: never;
2162
+ identity: undefined;
2163
+ generated: undefined;
2164
+ }, {}, {
2165
+ length: 512;
2166
+ }>;
2167
+ createdAt: import("drizzle-orm/pg-core").PgColumn<{
2168
+ name: "created_at";
2169
+ tableName: "message_attachments";
2170
+ dataType: "date";
2171
+ columnType: "PgTimestamp";
2172
+ data: Date;
2173
+ driverParam: string;
2174
+ notNull: true;
2175
+ hasDefault: true;
2176
+ isPrimaryKey: false;
2177
+ isAutoincrement: false;
2178
+ hasRuntimeDefault: false;
2179
+ enumValues: undefined;
2180
+ baseColumn: never;
2181
+ identity: undefined;
2182
+ generated: undefined;
2183
+ }, {}, {}>;
2184
+ };
2185
+ dialect: 'pg';
2186
+ }>;
1982
2187
  readonly pipelineRegistry: import("drizzle-orm/pg-core").PgTableWithColumns<{
1983
2188
  name: "pipeline_registry";
1984
2189
  schema: undefined;
@@ -11,12 +11,14 @@ export * from './schema/plugin.js';
11
11
  export * from './schema/pipeline.js';
12
12
  export * from './schema/pipeline-template.js';
13
13
  export * from './schema/message.js';
14
+ export * from './schema/message-attachment.js';
14
15
  export * from './schema/compliance.js';
15
16
  export * from './schema/dashboard.js';
16
17
  export * from './schema/alert.js';
17
18
  import { orgAlertDestination, orgAlertRule } from './schema/alert.js';
18
19
  import { compliancePolicy, complianceRule, complianceRuleHistory, complianceAuditLog, complianceExemption, complianceRuleSubscription, complianceScan, complianceScanSchedule, complianceNotificationPreference, complianceNotificationLog, complianceRole, complianceReport, complianceReportSchedule, } from './schema/compliance.js';
19
20
  import { dashboard, dashboardPanel } from './schema/dashboard.js';
21
+ import { messageAttachment } from './schema/message-attachment.js';
20
22
  import { message } from './schema/message.js';
21
23
  import { pipelineTemplate } from './schema/pipeline-template.js';
22
24
  import { pipeline, pipelineRegistry, pipelineEvent } from './schema/pipeline.js';
@@ -29,6 +31,7 @@ export const schema = {
29
31
  pipeline,
30
32
  pipelineTemplate,
31
33
  message,
34
+ messageAttachment,
32
35
  pipelineRegistry,
33
36
  pipelineEvent,
34
37
  // Observability dashboards (user-editable replacement for code-defined dashboards)
@@ -53,4 +56,4 @@ export const schema = {
53
56
  complianceReport,
54
57
  complianceReportSchedule,
55
58
  };
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJpenpsZS1zY2hlbWEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YWJhc2UvZHJpenpsZS1zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxFQUFFO0FBQ0YsK0VBQStFO0FBQy9FLDRFQUE0RTtBQUM1RSw0RUFBNEU7QUFDNUUsOEVBQThFO0FBQzlFLDJEQUEyRDtBQUMzRCxFQUFFO0FBRUYsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxtQkFBbUIsQ0FBQztBQUVsQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEUsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixjQUFjLEVBQ2QscUJBQXFCLEVBQ3JCLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIsMEJBQTBCLEVBQzFCLGNBQWMsRUFDZCxzQkFBc0IsRUFDdEIsZ0NBQWdDLEVBQ2hDLHlCQUF5QixFQUN6QixjQUFjLEVBQ2QsZ0JBQWdCLEVBQ2hCLHdCQUF3QixHQUN6QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTVDOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHO0lBQ3BCLE1BQU07SUFDTixRQUFRO0lBQ1IsZ0JBQWdCO0lBQ2hCLE9BQU87SUFDUCxnQkFBZ0I7SUFDaEIsYUFBYTtJQUNiLG1GQUFtRjtJQUNuRixTQUFTO0lBQ1QsY0FBYztJQUNkLGtFQUFrRTtJQUNsRSxtQkFBbUI7SUFDbkIsc0VBQXNFO0lBQ3RFLFlBQVk7SUFDWixvQkFBb0I7SUFDcEIsZ0JBQWdCO0lBQ2hCLGNBQWM7SUFDZCxxQkFBcUI7SUFDckIsa0JBQWtCO0lBQ2xCLG1CQUFtQjtJQUNuQiwwQkFBMEI7SUFDMUIsY0FBYztJQUNkLHNCQUFzQjtJQUN0QixnQ0FBZ0M7SUFDaEMseUJBQXlCO0lBQ3pCLGNBQWM7SUFDZCxnQkFBZ0I7SUFDaEIsd0JBQXdCO0NBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLy9cbi8vIEJhcnJlbCBmb3IgdGhlIERyaXp6bGUgc2NoZW1hLiBUaGUgdGFibGUvdHlwZSBkZWZpbml0aW9ucyBsaXZlIGluIHBlci1kb21haW5cbi8vIGZpbGVzIHVuZGVyIGAuL3NjaGVtYS8qYDsgdGhpcyBtb2R1bGUgcmUtZXhwb3J0cyBldmVyeSBvbmUgb2YgdGhlbSBzbyB0aGVcbi8vIHB1YmxpYyBBUEkgaXMgYnl0ZS1pZGVudGljYWwgdG8gdGhlIHByZXZpb3VzIHNpbmdsZS1maWxlIHNjaGVtYS4gRXhpc3Rpbmdcbi8vIGBpbXBvcnQgeyAuLi4gfSBmcm9tICcuLi4vZHJpenpsZS1zY2hlbWEnYCBzaXRlcyBhbmQgdGhlIGFnZ3JlZ2F0ZSBgc2NoZW1hYFxuLy8gb2JqZWN0IGJlbG93IGJvdGggY29udGludWUgdG8gcmVzb2x2ZSBleGFjdGx5IGFzIGJlZm9yZS5cbi8vXG5cbmV4cG9ydCAqIGZyb20gJy4vc2NoZW1hL3BsdWdpbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NjaGVtYS9waXBlbGluZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NjaGVtYS9waXBlbGluZS10ZW1wbGF0ZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NjaGVtYS9tZXNzYWdlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc2NoZW1hL2NvbXBsaWFuY2UuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zY2hlbWEvZGFzaGJvYXJkLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc2NoZW1hL2FsZXJ0LmpzJztcblxuaW1wb3J0IHsgb3JnQWxlcnREZXN0aW5hdGlvbiwgb3JnQWxlcnRSdWxlIH0gZnJvbSAnLi9zY2hlbWEvYWxlcnQuanMnO1xuaW1wb3J0IHtcbiAgY29tcGxpYW5jZVBvbGljeSxcbiAgY29tcGxpYW5jZVJ1bGUsXG4gIGNvbXBsaWFuY2VSdWxlSGlzdG9yeSxcbiAgY29tcGxpYW5jZUF1ZGl0TG9nLFxuICBjb21wbGlhbmNlRXhlbXB0aW9uLFxuICBjb21wbGlhbmNlUnVsZVN1YnNjcmlwdGlvbixcbiAgY29tcGxpYW5jZVNjYW4sXG4gIGNvbXBsaWFuY2VTY2FuU2NoZWR1bGUsXG4gIGNvbXBsaWFuY2VOb3RpZmljYXRpb25QcmVmZXJlbmNlLFxuICBjb21wbGlhbmNlTm90aWZpY2F0aW9uTG9nLFxuICBjb21wbGlhbmNlUm9sZSxcbiAgY29tcGxpYW5jZVJlcG9ydCxcbiAgY29tcGxpYW5jZVJlcG9ydFNjaGVkdWxlLFxufSBmcm9tICcuL3NjaGVtYS9jb21wbGlhbmNlLmpzJztcbmltcG9ydCB7IGRhc2hib2FyZCwgZGFzaGJvYXJkUGFuZWwgfSBmcm9tICcuL3NjaGVtYS9kYXNoYm9hcmQuanMnO1xuaW1wb3J0IHsgbWVzc2FnZSB9IGZyb20gJy4vc2NoZW1hL21lc3NhZ2UuanMnO1xuaW1wb3J0IHsgcGlwZWxpbmVUZW1wbGF0ZSB9IGZyb20gJy4vc2NoZW1hL3BpcGVsaW5lLXRlbXBsYXRlLmpzJztcbmltcG9ydCB7IHBpcGVsaW5lLCBwaXBlbGluZVJlZ2lzdHJ5LCBwaXBlbGluZUV2ZW50IH0gZnJvbSAnLi9zY2hlbWEvcGlwZWxpbmUuanMnO1xuaW1wb3J0IHsgcGx1Z2luIH0gZnJvbSAnLi9zY2hlbWEvcGx1Z2luLmpzJztcblxuLyoqXG4gKiBDb21wbGV0ZSBEcml6emxlIHNjaGVtYSBleHBvcnRcbiAqL1xuZXhwb3J0IGNvbnN0IHNjaGVtYSA9IHtcbiAgcGx1Z2luLFxuICBwaXBlbGluZSxcbiAgcGlwZWxpbmVUZW1wbGF0ZSxcbiAgbWVzc2FnZSxcbiAgcGlwZWxpbmVSZWdpc3RyeSxcbiAgcGlwZWxpbmVFdmVudCxcbiAgLy8gT2JzZXJ2YWJpbGl0eSBkYXNoYm9hcmRzICh1c2VyLWVkaXRhYmxlIHJlcGxhY2VtZW50IGZvciBjb2RlLWRlZmluZWQgZGFzaGJvYXJkcylcbiAgZGFzaGJvYXJkLFxuICBkYXNoYm9hcmRQYW5lbCxcbiAgLy8gUGVyLW9yZyBhbGVydCBub3RpZmljYXRpb24gZGVzdGluYXRpb25zIChtdWx0aS10ZW5hbnQgYWxlcnRpbmcpXG4gIG9yZ0FsZXJ0RGVzdGluYXRpb24sXG4gIC8vIHBlci1vcmcgb3BlcmF0b3ItYXV0aG9yZWQgYWxlcnQgcnVsZXMgIG1hdGVyaWFsaXplZCBpbnRvIFByb20gWUFNTC5cbiAgb3JnQWxlcnRSdWxlLFxuICAvLyBDb21wbGlhbmNlIHRhYmxlc1xuICBjb21wbGlhbmNlUG9saWN5LFxuICBjb21wbGlhbmNlUnVsZSxcbiAgY29tcGxpYW5jZVJ1bGVIaXN0b3J5LFxuICBjb21wbGlhbmNlQXVkaXRMb2csXG4gIGNvbXBsaWFuY2VFeGVtcHRpb24sXG4gIGNvbXBsaWFuY2VSdWxlU3Vic2NyaXB0aW9uLFxuICBjb21wbGlhbmNlU2NhbixcbiAgY29tcGxpYW5jZVNjYW5TY2hlZHVsZSxcbiAgY29tcGxpYW5jZU5vdGlmaWNhdGlvblByZWZlcmVuY2UsXG4gIGNvbXBsaWFuY2VOb3RpZmljYXRpb25Mb2csXG4gIGNvbXBsaWFuY2VSb2xlLFxuICBjb21wbGlhbmNlUmVwb3J0LFxuICBjb21wbGlhbmNlUmVwb3J0U2NoZWR1bGUsXG59IGFzIGNvbnN0O1xuIl19
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJpenpsZS1zY2hlbWEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YWJhc2UvZHJpenpsZS1zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxFQUFFO0FBQ0YsK0VBQStFO0FBQy9FLDRFQUE0RTtBQUM1RSw0RUFBNEU7QUFDNUUsOEVBQThFO0FBQzlFLDJEQUEyRDtBQUMzRCxFQUFFO0FBRUYsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLG1CQUFtQixDQUFDO0FBRWxDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN0RSxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGNBQWMsRUFDZCxxQkFBcUIsRUFDckIsa0JBQWtCLEVBQ2xCLG1CQUFtQixFQUNuQiwwQkFBMEIsRUFDMUIsY0FBYyxFQUNkLHNCQUFzQixFQUN0QixnQ0FBZ0MsRUFDaEMseUJBQXlCLEVBQ3pCLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsd0JBQXdCLEdBQ3pCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFNUM7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUc7SUFDcEIsTUFBTTtJQUNOLFFBQVE7SUFDUixnQkFBZ0I7SUFDaEIsT0FBTztJQUNQLGlCQUFpQjtJQUNqQixnQkFBZ0I7SUFDaEIsYUFBYTtJQUNiLG1GQUFtRjtJQUNuRixTQUFTO0lBQ1QsY0FBYztJQUNkLGtFQUFrRTtJQUNsRSxtQkFBbUI7SUFDbkIsc0VBQXNFO0lBQ3RFLFlBQVk7SUFDWixvQkFBb0I7SUFDcEIsZ0JBQWdCO0lBQ2hCLGNBQWM7SUFDZCxxQkFBcUI7SUFDckIsa0JBQWtCO0lBQ2xCLG1CQUFtQjtJQUNuQiwwQkFBMEI7SUFDMUIsY0FBYztJQUNkLHNCQUFzQjtJQUN0QixnQ0FBZ0M7SUFDaEMseUJBQXlCO0lBQ3pCLGNBQWM7SUFDZCxnQkFBZ0I7SUFDaEIsd0JBQXdCO0NBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLy9cbi8vIEJhcnJlbCBmb3IgdGhlIERyaXp6bGUgc2NoZW1hLiBUaGUgdGFibGUvdHlwZSBkZWZpbml0aW9ucyBsaXZlIGluIHBlci1kb21haW5cbi8vIGZpbGVzIHVuZGVyIGAuL3NjaGVtYS8qYDsgdGhpcyBtb2R1bGUgcmUtZXhwb3J0cyBldmVyeSBvbmUgb2YgdGhlbSBzbyB0aGVcbi8vIHB1YmxpYyBBUEkgaXMgYnl0ZS1pZGVudGljYWwgdG8gdGhlIHByZXZpb3VzIHNpbmdsZS1maWxlIHNjaGVtYS4gRXhpc3Rpbmdcbi8vIGBpbXBvcnQgeyAuLi4gfSBmcm9tICcuLi4vZHJpenpsZS1zY2hlbWEnYCBzaXRlcyBhbmQgdGhlIGFnZ3JlZ2F0ZSBgc2NoZW1hYFxuLy8gb2JqZWN0IGJlbG93IGJvdGggY29udGludWUgdG8gcmVzb2x2ZSBleGFjdGx5IGFzIGJlZm9yZS5cbi8vXG5cbmV4cG9ydCAqIGZyb20gJy4vc2NoZW1hL3BsdWdpbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NjaGVtYS9waXBlbGluZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NjaGVtYS9waXBlbGluZS10ZW1wbGF0ZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NjaGVtYS9tZXNzYWdlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc2NoZW1hL21lc3NhZ2UtYXR0YWNobWVudC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NjaGVtYS9jb21wbGlhbmNlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc2NoZW1hL2Rhc2hib2FyZC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NjaGVtYS9hbGVydC5qcyc7XG5cbmltcG9ydCB7IG9yZ0FsZXJ0RGVzdGluYXRpb24sIG9yZ0FsZXJ0UnVsZSB9IGZyb20gJy4vc2NoZW1hL2FsZXJ0LmpzJztcbmltcG9ydCB7XG4gIGNvbXBsaWFuY2VQb2xpY3ksXG4gIGNvbXBsaWFuY2VSdWxlLFxuICBjb21wbGlhbmNlUnVsZUhpc3RvcnksXG4gIGNvbXBsaWFuY2VBdWRpdExvZyxcbiAgY29tcGxpYW5jZUV4ZW1wdGlvbixcbiAgY29tcGxpYW5jZVJ1bGVTdWJzY3JpcHRpb24sXG4gIGNvbXBsaWFuY2VTY2FuLFxuICBjb21wbGlhbmNlU2NhblNjaGVkdWxlLFxuICBjb21wbGlhbmNlTm90aWZpY2F0aW9uUHJlZmVyZW5jZSxcbiAgY29tcGxpYW5jZU5vdGlmaWNhdGlvbkxvZyxcbiAgY29tcGxpYW5jZVJvbGUsXG4gIGNvbXBsaWFuY2VSZXBvcnQsXG4gIGNvbXBsaWFuY2VSZXBvcnRTY2hlZHVsZSxcbn0gZnJvbSAnLi9zY2hlbWEvY29tcGxpYW5jZS5qcyc7XG5pbXBvcnQgeyBkYXNoYm9hcmQsIGRhc2hib2FyZFBhbmVsIH0gZnJvbSAnLi9zY2hlbWEvZGFzaGJvYXJkLmpzJztcbmltcG9ydCB7IG1lc3NhZ2VBdHRhY2htZW50IH0gZnJvbSAnLi9zY2hlbWEvbWVzc2FnZS1hdHRhY2htZW50LmpzJztcbmltcG9ydCB7IG1lc3NhZ2UgfSBmcm9tICcuL3NjaGVtYS9tZXNzYWdlLmpzJztcbmltcG9ydCB7IHBpcGVsaW5lVGVtcGxhdGUgfSBmcm9tICcuL3NjaGVtYS9waXBlbGluZS10ZW1wbGF0ZS5qcyc7XG5pbXBvcnQgeyBwaXBlbGluZSwgcGlwZWxpbmVSZWdpc3RyeSwgcGlwZWxpbmVFdmVudCB9IGZyb20gJy4vc2NoZW1hL3BpcGVsaW5lLmpzJztcbmltcG9ydCB7IHBsdWdpbiB9IGZyb20gJy4vc2NoZW1hL3BsdWdpbi5qcyc7XG5cbi8qKlxuICogQ29tcGxldGUgRHJpenpsZSBzY2hlbWEgZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBzY2hlbWEgPSB7XG4gIHBsdWdpbixcbiAgcGlwZWxpbmUsXG4gIHBpcGVsaW5lVGVtcGxhdGUsXG4gIG1lc3NhZ2UsXG4gIG1lc3NhZ2VBdHRhY2htZW50LFxuICBwaXBlbGluZVJlZ2lzdHJ5LFxuICBwaXBlbGluZUV2ZW50LFxuICAvLyBPYnNlcnZhYmlsaXR5IGRhc2hib2FyZHMgKHVzZXItZWRpdGFibGUgcmVwbGFjZW1lbnQgZm9yIGNvZGUtZGVmaW5lZCBkYXNoYm9hcmRzKVxuICBkYXNoYm9hcmQsXG4gIGRhc2hib2FyZFBhbmVsLFxuICAvLyBQZXItb3JnIGFsZXJ0IG5vdGlmaWNhdGlvbiBkZXN0aW5hdGlvbnMgKG11bHRpLXRlbmFudCBhbGVydGluZylcbiAgb3JnQWxlcnREZXN0aW5hdGlvbixcbiAgLy8gcGVyLW9yZyBvcGVyYXRvci1hdXRob3JlZCBhbGVydCBydWxlcyAgbWF0ZXJpYWxpemVkIGludG8gUHJvbSBZQU1MLlxuICBvcmdBbGVydFJ1bGUsXG4gIC8vIENvbXBsaWFuY2UgdGFibGVzXG4gIGNvbXBsaWFuY2VQb2xpY3ksXG4gIGNvbXBsaWFuY2VSdWxlLFxuICBjb21wbGlhbmNlUnVsZUhpc3RvcnksXG4gIGNvbXBsaWFuY2VBdWRpdExvZyxcbiAgY29tcGxpYW5jZUV4ZW1wdGlvbixcbiAgY29tcGxpYW5jZVJ1bGVTdWJzY3JpcHRpb24sXG4gIGNvbXBsaWFuY2VTY2FuLFxuICBjb21wbGlhbmNlU2NhblNjaGVkdWxlLFxuICBjb21wbGlhbmNlTm90aWZpY2F0aW9uUHJlZmVyZW5jZSxcbiAgY29tcGxpYW5jZU5vdGlmaWNhdGlvbkxvZyxcbiAgY29tcGxpYW5jZVJvbGUsXG4gIGNvbXBsaWFuY2VSZXBvcnQsXG4gIGNvbXBsaWFuY2VSZXBvcnRTY2hlZHVsZSxcbn0gYXMgY29uc3Q7XG4iXX0=
@@ -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=