prostgles-server 4.0.57 → 4.0.59

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) hide show
  1. package/dist/DboBuilder/getColumns.d.ts.map +1 -1
  2. package/dist/DboBuilder/getColumns.js +1 -13
  3. package/dist/DboBuilder/getColumns.js.map +1 -1
  4. package/dist/DboBuilder/runSQL.js +2 -2
  5. package/dist/DboBuilder/runSQL.js.map +1 -1
  6. package/dist/Prostgles.d.ts.map +1 -1
  7. package/dist/PubSubManager/PubSubManager.d.ts +1 -1
  8. package/dist/PubSubManager/PubSubManager.d.ts.map +1 -1
  9. package/dist/PubSubManager/PubSubManager.js +14 -1
  10. package/dist/PubSubManager/PubSubManager.js.map +1 -1
  11. package/lib/DboBuilder/getColumns.ts +1 -18
  12. package/lib/DboBuilder/runSQL.ts +2 -2
  13. package/lib/Prostgles.ts +3 -3
  14. package/lib/PubSubManager/PubSubManager.ts +14 -1
  15. package/package.json +2 -2
  16. package/tests/client/PID.txt +1 -1
  17. package/tests/client/package.json +2 -2
  18. package/tests/client/tsconfig.json +2 -1
  19. package/tests/isomorphic_queries.ts +11 -9
  20. package/tests/server/DBoGenerated.d.ts +1 -1
  21. package/tests/server/dboTypeCheck.ts +3 -3
  22. package/tests/server/index.ts +7 -6
  23. package/tests/server/package-lock.json +1 -1
  24. package/tests/server/package.json +3 -3
  25. package/tests/server/publishTypeCheck.ts +1 -1
  26. package/tests/server/tsconfig.json +3 -2
  27. package/tests/test.sh +2 -0
  28. package/dist/FileManager.d.ts +0 -143
  29. package/dist/FileManager.d.ts.map +0 -1
  30. package/dist/FileManager.js +0 -646
  31. package/dist/FileManager.js.map +0 -1
  32. package/dist/TableConfig.d.ts +0 -267
  33. package/dist/TableConfig.d.ts.map +0 -1
  34. package/dist/TableConfig.js +0 -463
  35. package/dist/TableConfig.js.map +0 -1
  36. package/dist/validation.d.ts +0 -126
  37. package/dist/validation.d.ts.map +0 -1
  38. package/dist/validation.js +0 -405
  39. package/dist/validation.js.map +0 -1
  40. package/lib/AuthHandler.d.ts +0 -187
  41. package/lib/AuthHandler.d.ts.map +0 -1
  42. package/lib/AuthHandler.js +0 -478
  43. package/lib/DBEventsManager.d.ts +0 -38
  44. package/lib/DBEventsManager.d.ts.map +0 -1
  45. package/lib/DBEventsManager.js +0 -140
  46. package/lib/DBSchemaBuilder.d.ts +0 -13
  47. package/lib/DBSchemaBuilder.d.ts.map +0 -1
  48. package/lib/DBSchemaBuilder.js +0 -145
  49. package/lib/DboBuilder/QueryBuilder/Functions.d.ts +0 -64
  50. package/lib/DboBuilder/QueryBuilder/Functions.d.ts.map +0 -1
  51. package/lib/DboBuilder/QueryBuilder/Functions.js +0 -984
  52. package/lib/DboBuilder/QueryBuilder/QueryBuilder.d.ts +0 -73
  53. package/lib/DboBuilder/QueryBuilder/QueryBuilder.d.ts.map +0 -1
  54. package/lib/DboBuilder/QueryBuilder/QueryBuilder.js +0 -335
  55. package/lib/DboBuilder/QueryBuilder/makeSelectQuery.d.ts +0 -8
  56. package/lib/DboBuilder/QueryBuilder/makeSelectQuery.d.ts.map +0 -1
  57. package/lib/DboBuilder/QueryBuilder/makeSelectQuery.js +0 -227
  58. package/lib/DboBuilder/TableHandler.d.ts +0 -37
  59. package/lib/DboBuilder/TableHandler.d.ts.map +0 -1
  60. package/lib/DboBuilder/TableHandler.js +0 -213
  61. package/lib/DboBuilder/ViewHandler.d.ts +0 -119
  62. package/lib/DboBuilder/ViewHandler.d.ts.map +0 -1
  63. package/lib/DboBuilder/ViewHandler.js +0 -1023
  64. package/lib/DboBuilder/delete.d.ts +0 -6
  65. package/lib/DboBuilder/delete.d.ts.map +0 -1
  66. package/lib/DboBuilder/delete.js +0 -128
  67. package/lib/DboBuilder/find.d.ts +0 -8
  68. package/lib/DboBuilder/find.d.ts.map +0 -1
  69. package/lib/DboBuilder/find.js +0 -91
  70. package/lib/DboBuilder/getColumns.d.ts +0 -12
  71. package/lib/DboBuilder/getColumns.d.ts.map +0 -1
  72. package/lib/DboBuilder/getColumns.js +0 -92
  73. package/lib/DboBuilder/getCondition.d.ts +0 -22
  74. package/lib/DboBuilder/getCondition.d.ts.map +0 -1
  75. package/lib/DboBuilder/getCondition.js +0 -236
  76. package/lib/DboBuilder/getSubscribeRelatedTables.d.ts +0 -20
  77. package/lib/DboBuilder/getSubscribeRelatedTables.d.ts.map +0 -1
  78. package/lib/DboBuilder/getSubscribeRelatedTables.js +0 -152
  79. package/lib/DboBuilder/getTablesForSchemaPostgresSQL.d.ts +0 -3
  80. package/lib/DboBuilder/getTablesForSchemaPostgresSQL.d.ts.map +0 -1
  81. package/lib/DboBuilder/getTablesForSchemaPostgresSQL.js +0 -207
  82. package/lib/DboBuilder/insert.d.ts +0 -6
  83. package/lib/DboBuilder/insert.d.ts.map +0 -1
  84. package/lib/DboBuilder/insert.js +0 -180
  85. package/lib/DboBuilder/insertDataParse.d.ts +0 -12
  86. package/lib/DboBuilder/insertDataParse.d.ts.map +0 -1
  87. package/lib/DboBuilder/insertDataParse.js +0 -253
  88. package/lib/DboBuilder/parseUpdateRules.d.ts +0 -18
  89. package/lib/DboBuilder/parseUpdateRules.d.ts.map +0 -1
  90. package/lib/DboBuilder/parseUpdateRules.js +0 -123
  91. package/lib/DboBuilder/runSQL.d.ts +0 -7
  92. package/lib/DboBuilder/runSQL.d.ts.map +0 -1
  93. package/lib/DboBuilder/runSQL.js +0 -135
  94. package/lib/DboBuilder/subscribe.d.ts +0 -20
  95. package/lib/DboBuilder/subscribe.d.ts.map +0 -1
  96. package/lib/DboBuilder/subscribe.js +0 -90
  97. package/lib/DboBuilder/update.d.ts +0 -6
  98. package/lib/DboBuilder/update.d.ts.map +0 -1
  99. package/lib/DboBuilder/update.js +0 -151
  100. package/lib/DboBuilder/uploadFile.d.ts +0 -7
  101. package/lib/DboBuilder/uploadFile.d.ts.map +0 -1
  102. package/lib/DboBuilder/uploadFile.js +0 -53
  103. package/lib/DboBuilder.d.ts +0 -306
  104. package/lib/DboBuilder.d.ts.map +0 -1
  105. package/lib/DboBuilder.js +0 -745
  106. package/lib/Event_Trigger_Tags.d.ts +0 -4
  107. package/lib/Event_Trigger_Tags.d.ts.map +0 -1
  108. package/lib/Event_Trigger_Tags.js +0 -116
  109. package/lib/FileManager/FileManager.d.ts +0 -135
  110. package/lib/FileManager/FileManager.d.ts.map +0 -1
  111. package/lib/FileManager/FileManager.js +0 -303
  112. package/lib/FileManager/initFileManager.d.ts +0 -4
  113. package/lib/FileManager/initFileManager.d.ts.map +0 -1
  114. package/lib/FileManager/initFileManager.js +0 -231
  115. package/lib/FileManager/parseFile.d.ts +0 -15
  116. package/lib/FileManager/parseFile.d.ts.map +0 -1
  117. package/lib/FileManager/parseFile.js +0 -58
  118. package/lib/FileManager/upload.d.ts +0 -6
  119. package/lib/FileManager/upload.d.ts.map +0 -1
  120. package/lib/FileManager/upload.js +0 -98
  121. package/lib/FileManager/uploadStream.d.ts +0 -5
  122. package/lib/FileManager/uploadStream.d.ts.map +0 -1
  123. package/lib/FileManager/uploadStream.js +0 -92
  124. package/lib/Filtering.d.ts +0 -15
  125. package/lib/Filtering.d.ts.map +0 -1
  126. package/lib/Filtering.js +0 -336
  127. package/lib/JSONBValidation/validate_jsonb_schema_sql.d.ts +0 -4
  128. package/lib/JSONBValidation/validate_jsonb_schema_sql.d.ts.map +0 -1
  129. package/lib/JSONBValidation/validate_jsonb_schema_sql.js +0 -500
  130. package/lib/JSONBValidation/validation.d.ts +0 -9
  131. package/lib/JSONBValidation/validation.d.ts.map +0 -1
  132. package/lib/JSONBValidation/validation.js +0 -131
  133. package/lib/PostgresNotifListenManager.d.ts +0 -28
  134. package/lib/PostgresNotifListenManager.d.ts.map +0 -1
  135. package/lib/PostgresNotifListenManager.js +0 -134
  136. package/lib/Prostgles.d.ts +0 -289
  137. package/lib/Prostgles.d.ts.map +0 -1
  138. package/lib/Prostgles.js +0 -685
  139. package/lib/PubSubManager/PubSubManager.d.ts +0 -175
  140. package/lib/PubSubManager/PubSubManager.d.ts.map +0 -1
  141. package/lib/PubSubManager/PubSubManager.js +0 -452
  142. package/lib/PubSubManager/addSub.d.ts +0 -8
  143. package/lib/PubSubManager/addSub.d.ts.map +0 -1
  144. package/lib/PubSubManager/addSub.js +0 -166
  145. package/lib/PubSubManager/addSync.d.ts +0 -8
  146. package/lib/PubSubManager/addSync.d.ts.map +0 -1
  147. package/lib/PubSubManager/addSync.js +0 -109
  148. package/lib/PubSubManager/getInitQuery.d.ts +0 -9
  149. package/lib/PubSubManager/getInitQuery.d.ts.map +0 -1
  150. package/lib/PubSubManager/getInitQuery.js +0 -552
  151. package/lib/PubSubManager/initPubSubManager.d.ts +0 -3
  152. package/lib/PubSubManager/initPubSubManager.d.ts.map +0 -1
  153. package/lib/PubSubManager/initPubSubManager.js +0 -116
  154. package/lib/PubSubManager/notifListener.d.ts +0 -5
  155. package/lib/PubSubManager/notifListener.d.ts.map +0 -1
  156. package/lib/PubSubManager/notifListener.js +0 -100
  157. package/lib/PubSubManager/pushSubData.d.ts +0 -3
  158. package/lib/PubSubManager/pushSubData.d.ts.map +0 -1
  159. package/lib/PubSubManager/pushSubData.js +0 -51
  160. package/lib/PublishParser.d.ts +0 -284
  161. package/lib/PublishParser.d.ts.map +0 -1
  162. package/lib/PublishParser.js +0 -421
  163. package/lib/SchemaWatch.d.ts +0 -13
  164. package/lib/SchemaWatch.d.ts.map +0 -1
  165. package/lib/SchemaWatch.js +0 -35
  166. package/lib/SyncReplication.d.ts +0 -34
  167. package/lib/SyncReplication.d.ts.map +0 -1
  168. package/lib/SyncReplication.js +0 -412
  169. package/lib/TableConfig/TableConfig.d.ts +0 -284
  170. package/lib/TableConfig/TableConfig.d.ts.map +0 -1
  171. package/lib/TableConfig/TableConfig.js +0 -437
  172. package/lib/TableConfig/getColumnDefinitionQuery.d.ts +0 -27
  173. package/lib/TableConfig/getColumnDefinitionQuery.d.ts.map +0 -1
  174. package/lib/TableConfig/getColumnDefinitionQuery.js +0 -87
  175. package/lib/TableConfig/getConstraintDefinitionQueries.d.ts +0 -34
  176. package/lib/TableConfig/getConstraintDefinitionQueries.d.ts.map +0 -1
  177. package/lib/TableConfig/getConstraintDefinitionQueries.js +0 -65
  178. package/lib/TableConfig/getFutureTableSchema.d.ts +0 -15
  179. package/lib/TableConfig/getFutureTableSchema.d.ts.map +0 -1
  180. package/lib/TableConfig/getFutureTableSchema.js +0 -43
  181. package/lib/TableConfig/getTableColumnQueries.d.ts +0 -16
  182. package/lib/TableConfig/getTableColumnQueries.d.ts.map +0 -1
  183. package/lib/TableConfig/getTableColumnQueries.js +0 -107
  184. package/lib/index.d.ts +0 -5
  185. package/lib/index.d.ts.map +0 -1
  186. package/lib/index.js +0 -7
  187. package/lib/shortestPath.d.ts +0 -10
  188. package/lib/shortestPath.d.ts.map +0 -1
  189. package/lib/shortestPath.js +0 -111
  190. package/lib/utils.d.ts +0 -3
  191. package/lib/utils.d.ts.map +0 -1
  192. package/lib/utils.js +0 -12
  193. package/tests/client/index.d.ts +0 -2
  194. package/tests/client/index.d.ts.map +0 -1
  195. package/tests/client/index.js +0 -80
  196. package/tests/client/index.js.map +0 -1
  197. package/tests/client_only_queries.d.ts +0 -4
  198. package/tests/client_only_queries.d.ts.map +0 -1
  199. package/tests/client_only_queries.js +0 -282
  200. package/tests/config_test/DBoGenerated.d.ts +0 -388
  201. package/tests/config_test/index.js +0 -174
  202. package/tests/config_test/index.js.map +0 -1
  203. package/tests/isomorphic_queries.d.ts +0 -9
  204. package/tests/isomorphic_queries.d.ts.map +0 -1
  205. package/tests/isomorphic_queries.js +0 -773
  206. package/tests/manual_test/DBoGenerated.d.ts +0 -398
  207. package/tests/manual_test/index.d.ts +0 -2
  208. package/tests/manual_test/index.d.ts.map +0 -1
  209. package/tests/manual_test/index.js +0 -65
  210. package/tests/server/dboTypeCheck.d.ts +0 -2
  211. package/tests/server/dboTypeCheck.d.ts.map +0 -1
  212. package/tests/server/dboTypeCheck.js +0 -27
  213. package/tests/server/index.d.ts +0 -2
  214. package/tests/server/index.d.ts.map +0 -1
  215. package/tests/server/index.js +0 -507
  216. package/tests/server/publishTypeCheck.d.ts +0 -2
  217. package/tests/server/publishTypeCheck.d.ts.map +0 -1
  218. package/tests/server/publishTypeCheck.js +0 -130
  219. package/tests/server_only_queries.d.ts +0 -2
  220. package/tests/server_only_queries.d.ts.map +0 -1
  221. package/tests/server_only_queries.js +0 -19
@@ -1,175 +0,0 @@
1
- /// <reference types="node" />
2
- import { PostgresNotifListenManager } from "../PostgresNotifListenManager";
3
- import { TableOrViewInfo, TableInfo, DBHandlerServer, DboBuilder, PRGLIOSocket } from "../DboBuilder";
4
- import { DB } from "../Prostgles";
5
- import { SelectParams, FieldFilter, WAL, AnyObject, SubscribeParams } from "prostgles-types";
6
- import { ClientExpressData } from "../SyncReplication";
7
- import { TableRule } from "../PublishParser";
8
- import { LocalFuncs } from "../DboBuilder/subscribe";
9
- export declare const asValue: (v: any) => string;
10
- export declare const DEFAULT_SYNC_BATCH_SIZE = 50;
11
- export declare const log: (...args: any[]) => void;
12
- export type BasicCallback = (err?: any, res?: any) => void;
13
- export type SyncParams = {
14
- socket_id: string;
15
- channel_name: string;
16
- table_name: string;
17
- table_rules?: TableRule;
18
- synced_field: string;
19
- allow_delete: boolean;
20
- id_fields: string[];
21
- batch_size: number;
22
- filter: object;
23
- params: {
24
- select: FieldFilter;
25
- };
26
- condition: string;
27
- wal?: WAL;
28
- throttle?: number;
29
- lr?: AnyObject;
30
- last_synced: number;
31
- is_syncing: boolean;
32
- };
33
- export type AddSyncParams = {
34
- socket: any;
35
- table_info: TableInfo;
36
- table_rules: TableRule;
37
- synced_field: string;
38
- allow_delete?: boolean;
39
- id_fields: string[];
40
- filter: object;
41
- params: {
42
- select: FieldFilter;
43
- };
44
- condition: string;
45
- throttle?: number;
46
- };
47
- export type ViewSubscriptionOptions = ({
48
- type: "view";
49
- viewName: string;
50
- definition: string;
51
- } | {
52
- type: "table";
53
- viewName?: undefined;
54
- definition?: undefined;
55
- }) & {
56
- relatedTables: {
57
- tableName: string;
58
- tableNameEscaped: string;
59
- condition: string;
60
- }[];
61
- };
62
- export type SubscriptionParams = Pick<SubscribeParams, "throttle" | "throttleOpts"> & {
63
- socket_id?: string;
64
- channel_name: string;
65
- /**
66
- * If this is a view then an array with all related tables will be
67
- * */
68
- viewOptions?: ViewSubscriptionOptions;
69
- parentSubParams: Omit<SubscriptionParams, "parentSubParams"> | undefined;
70
- table_info: TableOrViewInfo;
71
- table_rules?: TableRule;
72
- filter: object;
73
- params: SelectParams;
74
- localFuncs?: LocalFuncs;
75
- socket: PRGLIOSocket | undefined;
76
- last_throttled: number;
77
- is_throttling?: any;
78
- is_ready?: boolean;
79
- };
80
- export type PubSubManagerOptions = {
81
- dboBuilder: DboBuilder;
82
- wsChannelNamePrefix?: string;
83
- pgChannelName?: string;
84
- onSchemaChange?: (event: {
85
- command: string;
86
- query: string;
87
- }) => void;
88
- };
89
- export type Subscription = Pick<SubscriptionParams, "throttle" | "is_throttling" | "last_throttled" | "throttleOpts" | "channel_name" | "is_ready" | "localFuncs" | "socket" | "socket_id" | "table_info" | "filter" | "params" | "table_rules"> & {
90
- triggers: {
91
- table_name: string;
92
- condition: string;
93
- is_related: boolean;
94
- }[];
95
- };
96
- export declare class PubSubManager {
97
- static DELIMITER: "|$prstgls$|";
98
- dboBuilder: DboBuilder;
99
- get db(): DB;
100
- get dbo(): DBHandlerServer;
101
- _triggers?: Record<string, string[]>;
102
- sockets: AnyObject;
103
- subs: Subscription[];
104
- syncs: SyncParams[];
105
- socketChannelPreffix: string;
106
- onSchemaChange?: ((event: {
107
- command: string;
108
- query: string;
109
- }) => void);
110
- postgresNotifListenManager?: PostgresNotifListenManager;
111
- private constructor();
112
- NOTIF_TYPE: {
113
- readonly data: "data_has_changed";
114
- readonly schema: "schema_has_changed";
115
- };
116
- NOTIF_CHANNEL: {
117
- preffix: "prostgles_";
118
- getFull: (appID?: string) => string;
119
- };
120
- /**
121
- * Used facilitate concurrent prostgles connections to the same database
122
- */
123
- appID?: string;
124
- appCheckFrequencyMS: number;
125
- appCheck?: ReturnType<typeof setInterval>;
126
- static canCreate: (db: DB) => Promise<{
127
- canExecute: boolean;
128
- isSuperUs: boolean;
129
- yes: boolean;
130
- }>;
131
- static create: (options: PubSubManagerOptions) => Promise<any>;
132
- destroyed: boolean;
133
- destroy: () => void;
134
- canContinue: () => boolean;
135
- appChecking: boolean;
136
- checkedListenerTableCond?: string[];
137
- init: any;
138
- static SCHEMA_ALTERING_QUERIES: string[];
139
- static EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID: string;
140
- prepareTriggers: () => Promise<boolean>;
141
- isReady(): any;
142
- getClientSubs(client: Pick<Subscription, "localFuncs" | "socket_id" | "channel_name">): Subscription[];
143
- getTriggerSubs(table_name: string, condition: string): Subscription[];
144
- removeLocalSub(channelName: string, localFuncs: LocalFuncs): void;
145
- getSyncs(table_name: string, condition: string): SyncParams[];
146
- notifListener: any;
147
- getSubData: (sub: Subscription) => Promise<{
148
- data: any[];
149
- err?: undefined;
150
- } | {
151
- data?: undefined;
152
- err: any;
153
- }>;
154
- pushSubData: any;
155
- upsertSocket(socket: any): void;
156
- syncTimeout?: ReturnType<typeof setTimeout>;
157
- syncData(sync: SyncParams, clientData: ClientExpressData | undefined, source: "trigger" | "client"): Promise<void>;
158
- addSync: any;
159
- addSub: any;
160
- getActiveListeners: () => {
161
- table_name: string;
162
- condition: string;
163
- }[];
164
- checkIfTimescaleBug: (table_name: string) => Promise<boolean>;
165
- getMyTriggerQuery: () => Promise<string>;
166
- addingTrigger: any;
167
- addTriggerPool?: Record<string, string[]>;
168
- addTrigger(params: {
169
- table_name: string;
170
- condition: string;
171
- }, viewOptions?: ViewSubscriptionOptions): Promise<boolean>;
172
- }
173
- export declare const parseCondition: (condition: string) => string;
174
- export { pickKeys, omitKeys } from "prostgles-types";
175
- //# sourceMappingURL=PubSubManager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PubSubManager.d.ts","sourceRoot":"","sources":["PubSubManager.ts"],"names":[],"mappings":"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"}
@@ -1,452 +0,0 @@
1
- "use strict";
2
- /*---------------------------------------------------------------------------------------------
3
- * Copyright (c) Stefan L. All rights reserved.
4
- * Licensed under the MIT License. See LICENSE in the project root for license information.
5
- *--------------------------------------------------------------------------------------------*/
6
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
- if (k2 === undefined) k2 = k;
8
- var desc = Object.getOwnPropertyDescriptor(m, k);
9
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
- desc = { enumerable: true, get: function() { return m[k]; } };
11
- }
12
- Object.defineProperty(o, k2, desc);
13
- }) : (function(o, m, k, k2) {
14
- if (k2 === undefined) k2 = k;
15
- o[k2] = m[k];
16
- }));
17
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
- Object.defineProperty(o, "default", { enumerable: true, value: v });
19
- }) : function(o, v) {
20
- o["default"] = v;
21
- });
22
- var __importStar = (this && this.__importStar) || function (mod) {
23
- if (mod && mod.__esModule) return mod;
24
- var result = {};
25
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
26
- __setModuleDefault(result, mod);
27
- return result;
28
- };
29
- Object.defineProperty(exports, "__esModule", { value: true });
30
- exports.omitKeys = exports.pickKeys = exports.parseCondition = exports.PubSubManager = exports.log = exports.DEFAULT_SYNC_BATCH_SIZE = exports.asValue = void 0;
31
- const addSync_1 = require("./addSync");
32
- const DboBuilder_1 = require("../DboBuilder");
33
- const Prostgles_1 = require("../Prostgles");
34
- const initPubSubManager_1 = require("./initPubSubManager");
35
- const Bluebird = __importStar(require("bluebird"));
36
- const pgPromise = __importStar(require("pg-promise"));
37
- const prostgles_types_1 = require("prostgles-types");
38
- const SyncReplication_1 = require("../SyncReplication");
39
- const util_1 = require("prostgles-types/dist/util");
40
- const getInitQuery_1 = require("./getInitQuery");
41
- const addSub_1 = require("./addSub");
42
- const notifListener_1 = require("./notifListener");
43
- const pushSubData_1 = require("./pushSubData");
44
- const subscribe_1 = require("../DboBuilder/subscribe");
45
- const Event_Trigger_Tags_1 = require("../Event_Trigger_Tags");
46
- const pgp = pgPromise({
47
- promiseLib: Bluebird
48
- });
49
- const asValue = (v) => pgp.as.format("$1", [v]);
50
- exports.asValue = asValue;
51
- exports.DEFAULT_SYNC_BATCH_SIZE = 50;
52
- const log = (...args) => {
53
- if (process.env.TEST_TYPE) {
54
- console.log(...args);
55
- }
56
- };
57
- exports.log = log;
58
- class PubSubManager {
59
- static DELIMITER = '|$prstgls$|';
60
- dboBuilder;
61
- get db() {
62
- return this.dboBuilder.db;
63
- }
64
- get dbo() {
65
- return this.dboBuilder.dbo;
66
- }
67
- _triggers;
68
- sockets = {};
69
- // subs: { [ke: string]: { [ke: string]: { subs: SubscriptionParams[] } } };
70
- subs = [];
71
- syncs = [];
72
- socketChannelPreffix;
73
- onSchemaChange = undefined;
74
- postgresNotifListenManager;
75
- constructor(options) {
76
- const { wsChannelNamePrefix, onSchemaChange, dboBuilder } = options;
77
- if (!dboBuilder.db || !dboBuilder.dbo) {
78
- throw 'MISSING: db_pg, db';
79
- }
80
- this.onSchemaChange = onSchemaChange;
81
- this.dboBuilder = dboBuilder;
82
- this.socketChannelPreffix = wsChannelNamePrefix || "_psqlWS_";
83
- (0, exports.log)("Created PubSubManager");
84
- }
85
- NOTIF_TYPE = {
86
- data: "data_has_changed",
87
- schema: "schema_has_changed"
88
- };
89
- NOTIF_CHANNEL = {
90
- preffix: 'prostgles_',
91
- getFull: (appID) => {
92
- const finalAppId = appID ?? this.appID;
93
- if (!finalAppId)
94
- throw "No appID";
95
- return this.NOTIF_CHANNEL.preffix + finalAppId;
96
- }
97
- };
98
- /**
99
- * Used facilitate concurrent prostgles connections to the same database
100
- */
101
- appID;
102
- appCheckFrequencyMS = 10 * 1000;
103
- appCheck;
104
- // ,datname
105
- // ,usename
106
- // ,client_hostname
107
- // ,client_port
108
- // ,backend_start
109
- // ,query_start
110
- // ,query
111
- // ,state
112
- // console.log(await _db.any(`
113
- // SELECT pid, application_name, state
114
- // FROM pg_stat_activity
115
- // WHERE application_name IS NOT NULL AND application_name != '' -- state = 'active';
116
- // `))
117
- static canCreate = async (db) => {
118
- const canExecute = await (0, DboBuilder_1.canEXECUTE)(db);
119
- const isSuperUs = await (0, Prostgles_1.isSuperUser)(db);
120
- return { canExecute, isSuperUs, yes: canExecute && isSuperUs };
121
- };
122
- static create = async (options) => {
123
- const res = new PubSubManager(options);
124
- return await res.init();
125
- };
126
- destroyed = false;
127
- destroy = () => {
128
- this.destroyed = true;
129
- if (this.appCheck) {
130
- clearInterval(this.appCheck);
131
- }
132
- this.subs = [];
133
- this.syncs = [];
134
- if (!this.postgresNotifListenManager) {
135
- throw "this.postgresNotifListenManager missing";
136
- }
137
- this.postgresNotifListenManager.destroy();
138
- };
139
- canContinue = () => {
140
- if (this.destroyed) {
141
- console.trace("Could not start destroyed instance");
142
- return false;
143
- }
144
- return true;
145
- };
146
- appChecking = false;
147
- checkedListenerTableCond;
148
- init = initPubSubManager_1.initPubSubManager.bind(this);
149
- static SCHEMA_ALTERING_QUERIES = ['CREATE TABLE', 'ALTER TABLE', 'DROP TABLE', 'CREATE VIEW', 'DROP VIEW', 'ALTER VIEW', 'CREATE TABLE AS', 'SELECT INTO'];
150
- static EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID = "prostgles internal query that should be excluded from schema watch ";
151
- prepareTriggers = async () => {
152
- // SELECT * FROM pg_catalog.pg_event_trigger WHERE evtname
153
- if (!this.appID)
154
- throw "prepareTriggers failed: this.appID missing";
155
- const { watchSchema } = this.dboBuilder.prostgles.opts;
156
- if (watchSchema && !(await (0, Prostgles_1.isSuperUser)(this.db))) {
157
- console.warn("prostgles watchSchema requires superuser db user. Will not watch using event triggers");
158
- }
159
- let EVENT_TAGS = ['COMMENT', 'CREATE TABLE', 'ALTER TABLE', 'DROP TABLE', 'CREATE VIEW', 'DROP VIEW', 'ALTER VIEW', 'CREATE TABLE AS', 'SELECT INTO'];
160
- if (watchSchema === "*") {
161
- EVENT_TAGS = Event_Trigger_Tags_1.EVENT_TRIGGER_TAGS.slice(0);
162
- }
163
- else if ((0, util_1.isObject)(watchSchema) && typeof watchSchema !== "function") {
164
- const isInclusive = Object.values(watchSchema).every(v => v);
165
- const watchSchemaKeys = (0, util_1.getKeys)(watchSchema);
166
- if (isInclusive)
167
- EVENT_TAGS = watchSchemaKeys;
168
- else
169
- EVENT_TAGS = Event_Trigger_Tags_1.EVENT_TRIGGER_TAGS.slice(0).filter(v => !watchSchemaKeys.includes(v));
170
- }
171
- try {
172
- await this.db.any(`
173
- BEGIN;-- ISOLATION LEVEL SERIALIZABLE;
174
-
175
- /**
176
- * ${PubSubManager.EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID}
177
- * Drop stale triggers
178
- * */
179
- DO
180
- $do$
181
- DECLARE trg RECORD;
182
- q TEXT;
183
- ev_trg_needed BOOLEAN := FALSE;
184
- ev_trg_exists BOOLEAN := FALSE;
185
- is_super_user BOOLEAN := FALSE;
186
- BEGIN
187
- --SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
188
-
189
- LOCK TABLE prostgles.app_triggers IN ACCESS EXCLUSIVE MODE;
190
- EXECUTE format(
191
- $q$
192
-
193
- CREATE TEMP TABLE %1$I AS --ON COMMIT DROP AS
194
- SELECT * FROM prostgles.app_triggers;
195
-
196
- DELETE FROM prostgles.app_triggers;
197
-
198
- INSERT INTO prostgles.app_triggers
199
- SELECT * FROM %1$I;
200
-
201
- DROP TABLE IF EXISTS %1$I;
202
- $q$,
203
- ${(0, exports.asValue)('triggers_' + this.appID)}
204
- );
205
-
206
- is_super_user := EXISTS (select 1 from pg_user where usename = CURRENT_USER AND usesuper IS TRUE);
207
-
208
- /**
209
- * Delete stale app records, this will delete related triggers
210
- * */
211
- DELETE FROM prostgles.apps
212
- WHERE last_check < NOW() - 8 * check_frequency_ms * interval '1 millisecond';
213
-
214
- DELETE FROM prostgles.app_triggers
215
- WHERE app_id NOT IN (SELECT id FROM prostgles.apps);
216
-
217
- /* DROP the old buggy schema watch trigger */
218
- IF EXISTS (
219
- SELECT 1 FROM pg_catalog.pg_event_trigger
220
- WHERE evtname = 'prostgles_schema_watch_trigger'
221
- ) AND is_super_user IS TRUE
222
- THEN
223
- DROP EVENT TRIGGER IF EXISTS prostgles_schema_watch_trigger;
224
- END IF;
225
-
226
- ev_trg_needed := EXISTS (SELECT 1 FROM prostgles.apps WHERE watching_schema IS TRUE);
227
- ev_trg_exists := EXISTS (
228
- SELECT 1 FROM pg_catalog.pg_event_trigger
229
- WHERE evtname = ${(0, exports.asValue)(getInitQuery_1.DB_OBJ_NAMES.schema_watch_trigger)}
230
- );
231
-
232
- -- RAISE NOTICE ' ev_trg_needed %, ev_trg_exists %', ev_trg_needed, ev_trg_exists;
233
-
234
- /**
235
- * DROP stale event trigger
236
- * */
237
- IF is_super_user IS TRUE AND ev_trg_needed IS FALSE AND ev_trg_exists IS TRUE THEN
238
-
239
- SELECT format(
240
- $$ DROP EVENT TRIGGER IF EXISTS %I ; $$
241
- , ${(0, exports.asValue)(getInitQuery_1.DB_OBJ_NAMES.schema_watch_trigger)}
242
- )
243
- INTO q;
244
-
245
- --RAISE NOTICE ' DROP EVENT TRIGGER %', q;
246
-
247
- EXECUTE q;
248
-
249
- /**
250
- * CREATE event trigger
251
- * */
252
- ELSIF
253
- is_super_user IS TRUE
254
- AND ev_trg_needed IS TRUE
255
- AND ev_trg_exists IS FALSE
256
- THEN
257
-
258
- DROP EVENT TRIGGER IF EXISTS ${getInitQuery_1.DB_OBJ_NAMES.schema_watch_trigger};
259
- CREATE EVENT TRIGGER ${getInitQuery_1.DB_OBJ_NAMES.schema_watch_trigger} ON ddl_command_end
260
- WHEN TAG IN (\${EVENT_TAGS:csv})
261
- --WHEN TAG IN ('CREATE TABLE', 'ALTER TABLE', 'DROP TABLE', 'CREATE TRIGGER', 'DROP TRIGGER')
262
- EXECUTE PROCEDURE ${getInitQuery_1.DB_OBJ_NAMES.schema_watch_func}();
263
-
264
- --RAISE NOTICE ' CREATED EVENT TRIGGER %', q;
265
- END IF;
266
-
267
-
268
- END
269
- $do$;
270
-
271
-
272
- COMMIT;
273
- `, { EVENT_TAGS }).catch(e => {
274
- console.error("prepareTriggers failed: ", e);
275
- throw e;
276
- });
277
- return true;
278
- }
279
- catch (e) {
280
- console.error("prepareTriggers failed: ", e);
281
- throw e;
282
- }
283
- };
284
- isReady() {
285
- if (!this.postgresNotifListenManager)
286
- throw "this.postgresNotifListenManager missing";
287
- return this.postgresNotifListenManager.isListening();
288
- }
289
- getClientSubs(client) {
290
- return this.subs.filter(s => {
291
- return s.channel_name === client.channel_name && ((0, subscribe_1.matchesLocalFuncs)(client.localFuncs, s.localFuncs) || client.socket_id && s.socket_id === client.socket_id);
292
- });
293
- }
294
- getTriggerSubs(table_name, condition) {
295
- const subs = this.subs.filter(s => (0, util_1.find)(s.triggers, { table_name, condition }));
296
- return subs;
297
- }
298
- removeLocalSub(channelName, localFuncs) {
299
- const matchingSubIdx = this.subs.findIndex(s => s.channel_name === channelName &&
300
- (0, subscribe_1.getOnDataFunc)(localFuncs) === (0, subscribe_1.getOnDataFunc)(s.localFuncs));
301
- if (matchingSubIdx > -1) {
302
- this.subs.splice(matchingSubIdx, 1);
303
- }
304
- else {
305
- console.error("Could not unsubscribe. Subscription might not have initialised yet", { channelName });
306
- }
307
- }
308
- getSyncs(table_name, condition) {
309
- return (this.syncs || [])
310
- .filter((s) => s.table_name === table_name && s.condition === condition);
311
- }
312
- notifListener = notifListener_1.notifListener.bind(this);
313
- getSubData = async (sub) => {
314
- const { table_info, filter, params, table_rules } = sub; //, subOne = false
315
- const { name: table_name } = table_info;
316
- if (!this.dbo?.[table_name]?.find) {
317
- throw new Error(`1107 this.dbo.${table_name}.find`);
318
- }
319
- try {
320
- const data = await this.dbo?.[table_name].find(filter, params, undefined, table_rules);
321
- return { data };
322
- }
323
- catch (err) {
324
- return { err };
325
- }
326
- };
327
- pushSubData = pushSubData_1.pushSubData.bind(this);
328
- upsertSocket(socket) {
329
- if (socket && !this.sockets[socket.id]) {
330
- this.sockets[socket.id] = socket;
331
- socket.on("disconnect", () => {
332
- this.subs = this.subs.filter(s => {
333
- return !(s.socket && s.socket.id === socket.id);
334
- });
335
- this.syncs = this.syncs.filter(s => {
336
- return !(s.socket_id && s.socket_id === socket.id);
337
- });
338
- delete this.sockets[socket.id];
339
- return "ok";
340
- });
341
- }
342
- }
343
- syncTimeout;
344
- async syncData(sync, clientData, source) {
345
- return await (0, SyncReplication_1.syncData)(this, sync, clientData, source);
346
- }
347
- addSync = addSync_1.addSync.bind(this);
348
- addSub = addSub_1.addSub.bind(this);
349
- getActiveListeners = () => {
350
- const result = [];
351
- const upsert = (t, c) => {
352
- if (!result.find(r => r.table_name === t && r.condition === c)) {
353
- result.push({ table_name: t, condition: c });
354
- }
355
- };
356
- (this.syncs || []).map(s => {
357
- upsert(s.table_name, s.condition);
358
- });
359
- this.subs.forEach(s => {
360
- s.triggers.forEach(trg => {
361
- upsert(trg.table_name, trg.condition);
362
- });
363
- });
364
- return result;
365
- };
366
- checkIfTimescaleBug = async (table_name) => {
367
- const schema = "_timescaledb_catalog", res = await this.db.oneOrNone("SELECT EXISTS( \
368
- SELECT * \
369
- FROM information_schema.tables \
370
- WHERE 1 = 1 \
371
- AND table_schema = ${schema} \
372
- AND table_name = 'hypertable' \
373
- );", { schema });
374
- if (res.exists) {
375
- const isHyperTable = await this.db.any("SELECT * FROM " + (0, prostgles_types_1.asName)(schema) + ".hypertable WHERE table_name = ${table_name};", { table_name, schema });
376
- if (isHyperTable && isHyperTable.length) {
377
- throw "Triggers do not work on timescaledb hypertables due to bug:\nhttps://github.com/timescale/timescaledb/issues/1084";
378
- }
379
- }
380
- return true;
381
- };
382
- /*
383
- A table will only have a trigger with all conditions (for different subs)
384
- conditions = ["user_id = 1"]
385
- fields = ["user_id"]
386
- */
387
- getMyTriggerQuery = async () => {
388
- return pgp.as.format(`
389
- SELECT * --, ROW_NUMBER() OVER(PARTITION BY table_name ORDER BY table_name, condition ) - 1 as id
390
- FROM prostgles.v_triggers
391
- WHERE app_id = $1
392
- ORDER BY table_name, condition
393
- `, [this.appID]);
394
- };
395
- // waitingTriggers: { [key: string]: string[] } = undefined;
396
- addingTrigger;
397
- addTriggerPool = undefined;
398
- async addTrigger(params, viewOptions) {
399
- try {
400
- const { table_name } = { ...params };
401
- let { condition } = { ...params };
402
- if (!table_name)
403
- throw "MISSING table_name";
404
- if (!this.appID)
405
- throw "MISSING appID";
406
- if (!condition || !condition.trim().length) {
407
- condition = "TRUE";
408
- }
409
- // console.log(1623, { app_id, addTrigger: { table_name, condition } });
410
- await this.checkIfTimescaleBug(table_name);
411
- const trgVals = {
412
- tbl: (0, exports.asValue)(table_name),
413
- cond: (0, exports.asValue)(condition),
414
- };
415
- await this.db.any(`
416
- BEGIN WORK;
417
- /* ${PubSubManager.EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID} */
418
- LOCK TABLE prostgles.app_triggers IN ACCESS EXCLUSIVE MODE;
419
-
420
- INSERT INTO prostgles.app_triggers (table_name, condition, app_id, related_view_name, related_view_def)
421
- VALUES (${trgVals.tbl}, ${trgVals.cond}, ${(0, exports.asValue)(this.appID)}, ${(0, exports.asValue)(viewOptions?.viewName ?? null)}, ${(0, exports.asValue)(viewOptions?.definition ?? null)})
422
- ON CONFLICT DO NOTHING;
423
-
424
- COMMIT WORK;
425
- `);
426
- (0, exports.log)("addTrigger.. ", { table_name, condition });
427
- const triggers = await this.db.any(await this.getMyTriggerQuery());
428
- this._triggers = {};
429
- triggers.map(t => {
430
- this._triggers = this._triggers || {};
431
- this._triggers[t.table_name] = this._triggers[t.table_name] || [];
432
- if (!this._triggers[t.table_name]?.includes(t.condition)) {
433
- this._triggers[t.table_name]?.push(t.condition);
434
- }
435
- });
436
- (0, exports.log)("trigger added.. ", { table_name, condition });
437
- return true;
438
- // console.log("1612", JSON.stringify(triggers, null, 2))
439
- // console.log("1613",JSON.stringify(this._triggers, null, 2))
440
- }
441
- catch (e) {
442
- console.trace("Failed adding trigger", e);
443
- // throw e
444
- }
445
- }
446
- }
447
- exports.PubSubManager = PubSubManager;
448
- const parseCondition = (condition) => condition && condition.trim().length ? condition : "TRUE";
449
- exports.parseCondition = parseCondition;
450
- var prostgles_types_2 = require("prostgles-types");
451
- Object.defineProperty(exports, "pickKeys", { enumerable: true, get: function () { return prostgles_types_2.pickKeys; } });
452
- Object.defineProperty(exports, "omitKeys", { enumerable: true, get: function () { return prostgles_types_2.omitKeys; } });
@@ -1,8 +0,0 @@
1
- import { SubscriptionChannels } from "prostgles-types";
2
- import { PubSubManager, SubscriptionParams } from "./PubSubManager";
3
- type AddSubscriptionParams = SubscriptionParams & {
4
- condition: string;
5
- };
6
- export declare function addSub(this: PubSubManager, subscriptionParams: Omit<AddSubscriptionParams, "channel_name" | "parentSubParams">): Promise<SubscriptionChannels>;
7
- export {};
8
- //# sourceMappingURL=addSub.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"addSub.d.ts","sourceRoot":"","sources":["addSub.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAiC,aAAa,EAAgB,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAEjH,KAAK,qBAAqB,GAAG,kBAAkB,GAAG;IAChD,SAAS,EAAE,MAAM,CAAC;CACnB,CAAA;AAID,wBAAsB,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,kBAAkB,EAAE,IAAI,CAAC,qBAAqB,EAAE,cAAc,GAAG,iBAAiB,CAAC,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAuHpK"}