@breautek/storm 8.5.0 → 9.0.0

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 (173) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/docs/assets/hierarchy.js +1 -1
  3. package/docs/assets/navigation.js +1 -1
  4. package/docs/assets/search.js +1 -1
  5. package/docs/assets/style.css +2 -9
  6. package/docs/classes/Application.html +37 -38
  7. package/docs/classes/ConfigLoader.html +3 -3
  8. package/docs/classes/Database.html +2 -2
  9. package/docs/classes/DatabaseCastObject.html +2 -2
  10. package/docs/classes/DatabaseConnection.html +24 -21
  11. package/docs/classes/DatabaseQueryError.html +30 -9
  12. package/docs/classes/DeadLockError.html +30 -9
  13. package/docs/classes/DiskSpaceError.html +29 -8
  14. package/docs/classes/DropTemporaryTableQuery.html +11 -8
  15. package/docs/classes/DuplicateEntryError.html +29 -8
  16. package/docs/classes/EntityNotFoundError.html +29 -8
  17. package/docs/classes/ExpiredTokenError.html +29 -8
  18. package/docs/classes/Handler.html +4 -4
  19. package/docs/classes/InternalError.html +29 -8
  20. package/docs/classes/InvalidCredentialsError.html +29 -8
  21. package/docs/classes/InvalidValueError.html +29 -8
  22. package/docs/classes/LineString.html +2 -2
  23. package/docs/classes/LockWaitTimeoutError.html +30 -9
  24. package/docs/classes/ManagedDatabaseConnection.html +11 -5
  25. package/docs/classes/Middleware.html +5 -4
  26. package/docs/classes/MissingConfigError.html +29 -8
  27. package/docs/classes/MissingParameterError.html +29 -8
  28. package/docs/classes/MySQLConnection.html +28 -23
  29. package/docs/classes/MySQLDatabase.html +2 -2
  30. package/docs/classes/NotImplementedError.html +29 -8
  31. package/docs/classes/Point.html +2 -2
  32. package/docs/classes/Polygon.html +2 -2
  33. package/docs/classes/Query.html +11 -8
  34. package/docs/classes/RawError.html +29 -8
  35. package/docs/classes/RawQuery.html +11 -8
  36. package/docs/classes/Request.html +2 -2
  37. package/docs/classes/Response.html +2 -2
  38. package/docs/classes/ResponseData.html +2 -2
  39. package/docs/classes/ServiceProvider.html +2 -2
  40. package/docs/classes/ServiceResponse.html +2 -2
  41. package/docs/classes/SetSessionVariableQuery.html +11 -8
  42. package/docs/classes/StormError.html +29 -8
  43. package/docs/classes/TemporaryTableQuery.html +11 -8
  44. package/docs/classes/TimeoutError.html +29 -8
  45. package/docs/classes/Token.html +2 -2
  46. package/docs/classes/TokenManager.html +2 -2
  47. package/docs/classes/Transaction.html +2 -2
  48. package/docs/classes/UnauthorizedAccessError.html +29 -8
  49. package/docs/enums/ErrorCode.html +2 -2
  50. package/docs/enums/ExitCode.html +2 -2
  51. package/docs/enums/HTTPMethod.html +2 -2
  52. package/docs/enums/IsolationLevel.html +2 -2
  53. package/docs/enums/JWTError.html +2 -2
  54. package/docs/enums/StatusCode.html +2 -2
  55. package/docs/enums/TransactionAccessLevel.html +4 -0
  56. package/docs/functions/getInstance.html +1 -1
  57. package/docs/hierarchy.html +1 -1
  58. package/docs/index.html +1 -1
  59. package/docs/interfaces/IAdditionalErrorDetails.html +1 -1
  60. package/docs/interfaces/ICloudwatchConfig.html +2 -2
  61. package/docs/interfaces/ICloudwatchCredentials.html +2 -2
  62. package/docs/interfaces/ICloudwatchStreamConfig.html +2 -2
  63. package/docs/interfaces/IConfig.html +2 -2
  64. package/docs/interfaces/IDatabaseConfig.html +2 -2
  65. package/docs/interfaces/IDatabaseConnection.html +11 -5
  66. package/docs/interfaces/IDatabasePosition.html +2 -2
  67. package/docs/interfaces/IErrorResponse.html +2 -2
  68. package/docs/interfaces/IFormData.html +2 -2
  69. package/docs/interfaces/IInsertQueryResult.html +2 -2
  70. package/docs/interfaces/IJWTVerifyOptions.html +2 -2
  71. package/docs/interfaces/IOKPacket.html +2 -2
  72. package/docs/interfaces/IParameterMap.html +1 -1
  73. package/docs/interfaces/IQueryable.html +2 -2
  74. package/docs/interfaces/IRequestResponse.html +2 -2
  75. package/docs/interfaces/ISetSessionVariableQueryInput.html +2 -2
  76. package/docs/interfaces/IStormCLIArgs.html +2 -2
  77. package/docs/interfaces/ITemporaryTableQueryInput.html +2 -2
  78. package/docs/interfaces/IUpdateQueryResult.html +2 -2
  79. package/docs/interfaces/formidable.FileJSON.html +1 -1
  80. package/docs/interfaces/formidable.Part.html +16 -16
  81. package/docs/types/IDeleteQueryResult.html +1 -1
  82. package/docs/types/IStoredProcedureResult.html +1 -1
  83. package/docs/types/TCoordinate.html +1 -1
  84. package/lib/Application.d.ts +2 -3
  85. package/lib/Application.js +22 -9
  86. package/lib/Application.js.map +1 -1
  87. package/lib/DatabaseConnection.d.ts +3 -0
  88. package/lib/DatabaseConnection.js.map +1 -1
  89. package/lib/Handler.d.ts +25 -28
  90. package/lib/Handler.js +18 -4
  91. package/lib/Handler.js.map +1 -1
  92. package/lib/IDatabaseConnection.d.ts +8 -1
  93. package/lib/IRequestResponse.d.ts +2 -2
  94. package/lib/IRequestResponse.js +1 -1
  95. package/lib/ManagedDatabaseConnection.d.ts +5 -1
  96. package/lib/ManagedDatabaseConnection.js +11 -2
  97. package/lib/ManagedDatabaseConnection.js.map +1 -1
  98. package/lib/Middleware.d.ts +8 -2
  99. package/lib/Middleware.js +9 -1
  100. package/lib/Middleware.js.map +1 -1
  101. package/lib/MySQLConnection.d.ts +14 -1
  102. package/lib/MySQLConnection.js +37 -6
  103. package/lib/MySQLConnection.js.map +1 -1
  104. package/lib/MySQLDatabase.js +8 -10
  105. package/lib/MySQLDatabase.js.map +1 -1
  106. package/lib/Query.d.ts +2 -0
  107. package/lib/Query.js +2 -0
  108. package/lib/Query.js.map +1 -1
  109. package/lib/Response.d.ts +8 -5
  110. package/lib/Response.js +4 -3
  111. package/lib/Response.js.map +1 -1
  112. package/lib/ServiceProvider.d.ts +6 -6
  113. package/lib/ServiceProvider.js +8 -5
  114. package/lib/ServiceProvider.js.map +1 -1
  115. package/lib/TokenManager.d.ts +2 -1
  116. package/lib/TokenManager.js.map +1 -1
  117. package/lib/Transaction.d.ts +3 -1
  118. package/lib/Transaction.js +4 -2
  119. package/lib/Transaction.js.map +1 -1
  120. package/lib/TransactionAccessLevel.d.ts +7 -0
  121. package/lib/{IHandler.js → TransactionAccessLevel.js} +11 -2
  122. package/lib/TransactionAccessLevel.js.map +1 -0
  123. package/lib/api.d.ts +2 -5
  124. package/lib/api.js +4 -6
  125. package/lib/api.js.map +1 -1
  126. package/lib/private/ConnectionReplicationWaiter.js +1 -1
  127. package/lib/private/ConnectionReplicationWaiter.js.map +1 -1
  128. package/lib/private/GetProcessList.d.ts +15 -0
  129. package/lib/private/GetProcessList.js +11 -0
  130. package/lib/private/GetProcessList.js.map +1 -0
  131. package/lib/private/StartTransactionQuery.d.ts +8 -1
  132. package/lib/private/StartTransactionQuery.js +11 -2
  133. package/lib/private/StartTransactionQuery.js.map +1 -1
  134. package/package.json +17 -16
  135. package/src/Application.ts +23 -10
  136. package/src/DatabaseConnection.ts +6 -0
  137. package/src/Handler.ts +41 -46
  138. package/src/IDatabaseConnection.ts +9 -1
  139. package/src/IRequestResponse.ts +3 -3
  140. package/src/ManagedDatabaseConnection.ts +15 -2
  141. package/src/Middleware.ts +14 -2
  142. package/src/MySQLConnection.ts +43 -9
  143. package/src/MySQLDatabase.ts +8 -10
  144. package/src/Query.ts +2 -0
  145. package/src/Response.ts +20 -7
  146. package/src/ServiceProvider.ts +17 -13
  147. package/src/TokenManager.ts +2 -1
  148. package/src/Transaction.ts +5 -2
  149. package/src/{IServiceHeaders.ts → TransactionAccessLevel.ts} +7 -3
  150. package/src/api.ts +2 -5
  151. package/src/private/ConnectionReplicationWaiter.ts +1 -1
  152. package/src/private/GetProcessList.ts +20 -0
  153. package/src/private/StartTransactionQuery.ts +22 -4
  154. package/docs/classes/BackendAuthenticationMiddleware.html +0 -8
  155. package/docs/classes/CORSMiddleware.html +0 -14
  156. package/docs/interfaces/IHandler.html +0 -2
  157. package/docs/interfaces/IServiceHeaders.html +0 -1
  158. package/docs/types/IHandlerError.html +0 -5
  159. package/docs/types/IHandlerResponse.html +0 -11
  160. package/lib/BackendAuthenticationMiddleware.d.ts +0 -18
  161. package/lib/BackendAuthenticationMiddleware.js +0 -67
  162. package/lib/BackendAuthenticationMiddleware.js.map +0 -1
  163. package/lib/CORSMiddleware.d.ts +0 -28
  164. package/lib/CORSMiddleware.js +0 -81
  165. package/lib/CORSMiddleware.js.map +0 -1
  166. package/lib/IHandler.d.ts +0 -5
  167. package/lib/IHandler.js.map +0 -1
  168. package/lib/IServiceHeaders.d.ts +0 -3
  169. package/lib/IServiceHeaders.js +0 -18
  170. package/lib/IServiceHeaders.js.map +0 -1
  171. package/src/BackendAuthenticationMiddleware.ts +0 -75
  172. package/src/CORSMiddleware.ts +0 -90
  173. package/src/IHandler.ts +0 -22
package/lib/api.js CHANGED
@@ -15,8 +15,8 @@
15
15
  limitations under the License.
16
16
  */
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.Point = exports.DatabaseCastObject = exports.ExitCode = exports.TokenManager = exports.Token = exports.BackendAuthenticationMiddleware = exports.ServiceResponse = exports.HTTPMethod = exports.ServiceProvider = exports.CORSMiddleware = exports.Handler = exports.ResponseData = exports.Response = exports.Request = exports.Middleware = exports.StatusCode = exports.LockWaitTimeoutError = exports.DeadLockError = exports.NotImplementedError = exports.DatabaseQueryError = exports.MissingConfigError = exports.DuplicateEntryError = exports.DiskSpaceError = exports.EntityNotFoundError = exports.UnauthorizedAccessError = exports.InvalidValueError = exports.ExpiredTokenError = exports.InternalError = exports.InvalidCredentialsError = exports.MissingParameterError = exports.JWTError = exports.TimeoutError = exports.StormError = exports.RawError = exports.ErrorCode = exports.Transaction = exports.IsolationLevel = exports.SetSessionVariableQuery = exports.RawQuery = exports.DropTemporaryTableQuery = exports.TemporaryTableQuery = exports.Query = exports.ManagedDatabaseConnection = exports.MySQLConnection = exports.MySQLDatabase = exports.DatabaseConnection = exports.Database = exports.ConfigLoader = exports.Application = exports.getInstance = void 0;
19
- exports.formidable = exports.Polygon = exports.LineString = void 0;
18
+ exports.LineString = exports.Point = exports.DatabaseCastObject = exports.ExitCode = exports.TokenManager = exports.Token = exports.ServiceResponse = exports.HTTPMethod = exports.ServiceProvider = exports.Handler = exports.ResponseData = exports.Response = exports.Request = exports.Middleware = exports.StatusCode = exports.LockWaitTimeoutError = exports.DeadLockError = exports.NotImplementedError = exports.DatabaseQueryError = exports.MissingConfigError = exports.DuplicateEntryError = exports.DiskSpaceError = exports.EntityNotFoundError = exports.UnauthorizedAccessError = exports.InvalidValueError = exports.ExpiredTokenError = exports.InternalError = exports.InvalidCredentialsError = exports.MissingParameterError = exports.JWTError = exports.TimeoutError = exports.StormError = exports.RawError = exports.ErrorCode = exports.TransactionAccessLevel = exports.Transaction = exports.IsolationLevel = exports.SetSessionVariableQuery = exports.RawQuery = exports.DropTemporaryTableQuery = exports.TemporaryTableQuery = exports.Query = exports.ManagedDatabaseConnection = exports.MySQLConnection = exports.MySQLDatabase = exports.DatabaseConnection = exports.Database = exports.ConfigLoader = exports.Application = exports.getInstance = void 0;
19
+ exports.formidable = exports.Polygon = void 0;
20
20
  const tslib_1 = require("tslib");
21
21
  // Application
22
22
  var instance_1 = require("./instance");
@@ -51,6 +51,8 @@ var IsolationLevel_1 = require("./IsolationLevel");
51
51
  Object.defineProperty(exports, "IsolationLevel", { enumerable: true, get: function () { return IsolationLevel_1.IsolationLevel; } });
52
52
  var Transaction_1 = require("./Transaction");
53
53
  Object.defineProperty(exports, "Transaction", { enumerable: true, get: function () { return Transaction_1.Transaction; } });
54
+ var TransactionAccessLevel_1 = require("./TransactionAccessLevel");
55
+ Object.defineProperty(exports, "TransactionAccessLevel", { enumerable: true, get: function () { return TransactionAccessLevel_1.TransactionAccessLevel; } });
54
56
  // Errors
55
57
  var ErrorCode_1 = require("./ErrorCode");
56
58
  Object.defineProperty(exports, "ErrorCode", { enumerable: true, get: function () { return ErrorCode_1.ErrorCode; } });
@@ -103,16 +105,12 @@ var ResponseData_1 = require("./ResponseData");
103
105
  Object.defineProperty(exports, "ResponseData", { enumerable: true, get: function () { return ResponseData_1.ResponseData; } });
104
106
  var Handler_1 = require("./Handler");
105
107
  Object.defineProperty(exports, "Handler", { enumerable: true, get: function () { return Handler_1.Handler; } });
106
- var CORSMiddleware_1 = require("./CORSMiddleware");
107
- Object.defineProperty(exports, "CORSMiddleware", { enumerable: true, get: function () { return CORSMiddleware_1.CORSMiddleware; } });
108
108
  var ServiceProvider_1 = require("./ServiceProvider");
109
109
  Object.defineProperty(exports, "ServiceProvider", { enumerable: true, get: function () { return ServiceProvider_1.ServiceProvider; } });
110
110
  var HTTPMethod_1 = require("./HTTPMethod");
111
111
  Object.defineProperty(exports, "HTTPMethod", { enumerable: true, get: function () { return HTTPMethod_1.HTTPMethod; } });
112
112
  var ServiceResponse_1 = require("./ServiceResponse");
113
113
  Object.defineProperty(exports, "ServiceResponse", { enumerable: true, get: function () { return ServiceResponse_1.ServiceResponse; } });
114
- var BackendAuthenticationMiddleware_1 = require("./BackendAuthenticationMiddleware");
115
- Object.defineProperty(exports, "BackendAuthenticationMiddleware", { enumerable: true, get: function () { return BackendAuthenticationMiddleware_1.BackendAuthenticationMiddleware; } });
116
114
  // Token
117
115
  var Token_1 = require("./Token");
118
116
  Object.defineProperty(exports, "Token", { enumerable: true, get: function () { return Token_1.Token; } });
package/lib/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;EAcE;;;;;AAEF,cAAc;AACd,uCAAuC;AAA/B,uGAAA,WAAW,OAAA;AACnB,6CAGuB;AAFnB,0GAAA,WAAW,OAAA;AAIf,SAAS;AACT,+CAA4C;AAApC,4GAAA,YAAY,OAAA;AAEpB,WAAW;AACX,uCAAoC;AAA5B,oGAAA,QAAQ,OAAA;AAChB,2DAAwD;AAAhD,wHAAA,kBAAkB,OAAA;AAC1B,iDAA8C;AAAtC,8GAAA,aAAa,OAAA;AACrB,qDAAkD;AAA1C,kHAAA,eAAe,OAAA;AACvB,yEAAsE;AAA9D,sIAAA,yBAAyB,OAAA;AACjC,iCAA8B;AAAtB,8FAAA,KAAK,OAAA;AACb,6DAAqF;AAA7E,0HAAA,mBAAmB,OAAA;AAC3B,qEAAkE;AAA1D,kIAAA,uBAAuB,OAAA;AAC/B,uCAAoC;AAA5B,oGAAA,QAAQ,OAAA;AAIhB,qEAAiG;AAAzF,kIAAA,uBAAuB,OAAA;AAC/B,mDAAgD;AAAxC,gHAAA,cAAc,OAAA;AACtB,6CAA0C;AAAlC,0GAAA,WAAW,OAAA;AAInB,SAAS;AACT,yCAAsC;AAA9B,sGAAA,SAAS,OAAA;AACjB,uCAAoC;AAA5B,oGAAA,QAAQ,OAAA;AAChB,2CAIsB;AAHlB,wGAAA,UAAU,OAAA;AAId,+CAA4C;AAApC,4GAAA,YAAY,OAAA;AACpB,uCAAoC;AAA5B,oGAAA,QAAQ,OAAA;AAChB,iEAA8D;AAAtD,8HAAA,qBAAqB,OAAA;AAC7B,qEAAkE;AAA1D,kIAAA,uBAAuB,OAAA;AAC/B,iDAA8C;AAAtC,8GAAA,aAAa,OAAA;AACrB,yDAAsD;AAA9C,sHAAA,iBAAiB,OAAA;AACzB,yDAAsD;AAA9C,sHAAA,iBAAiB,OAAA;AACzB,qEAAkE;AAA1D,kIAAA,uBAAuB,OAAA;AAC/B,6DAA0D;AAAlD,0HAAA,mBAAmB,OAAA;AAC3B,mDAAgD;AAAxC,gHAAA,cAAc,OAAA;AACtB,6DAA0D;AAAlD,0HAAA,mBAAmB,OAAA;AAC3B,2DAAwD;AAAhD,wHAAA,kBAAkB,OAAA;AAC1B,2DAAwD;AAAhD,wHAAA,kBAAkB,OAAA;AAC1B,6DAA0D;AAAlD,0HAAA,mBAAmB,OAAA;AAC3B,iDAA8C;AAAtC,8GAAA,aAAa,OAAA;AACrB,+DAA4D;AAApD,4HAAA,oBAAoB,OAAA;AAE5B,OAAO;AACP,2CAAwC;AAAhC,wGAAA,UAAU,OAAA;AAClB,2CAAwC;AAAhC,wGAAA,UAAU,OAAA;AAClB,qCAAiD;AAAzC,kGAAA,OAAO,OAAA;AACf,uCAAoC;AAA5B,oGAAA,QAAQ,OAAA;AAChB,+CAA4C;AAApC,4GAAA,YAAY,OAAA;AACpB,qCAAmE;AAA3D,kGAAA,OAAO,OAAA;AACf,mDAAgD;AAAxC,gHAAA,cAAc,OAAA;AACtB,qDAAkD;AAA1C,kHAAA,eAAe,OAAA;AACvB,2CAAwC;AAAhC,wGAAA,UAAU,OAAA;AAClB,qDAAkD;AAA1C,kHAAA,eAAe,OAAA;AACvB,qFAAkF;AAA1E,kJAAA,+BAA+B,OAAA;AAoBvC,QAAQ;AACR,iCAA8B;AAAtB,8FAAA,KAAK,OAAA;AACb,+CAA4C;AAApC,4GAAA,YAAY,OAAA;AAEpB,QAAQ;AACR,uCAAoC;AAA5B,oGAAA,QAAQ,OAAA;AAIhB,2DAAwD;AAAhD,wHAAA,kBAAkB,OAAA;AAC1B,iCAA8B;AAAtB,8FAAA,KAAK,OAAA;AACb,2CAAwC;AAAhC,wGAAA,UAAU,OAAA;AAClB,qCAAkC;AAA1B,kGAAA,OAAO,OAAA;AAEf,cAAc;AACd,+DAAyC;AACjC,gCAAU"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;EAcE;;;;;AAEF,cAAc;AACd,uCAAuC;AAA/B,uGAAA,WAAW,OAAA;AACnB,6CAGuB;AAFnB,0GAAA,WAAW,OAAA;AAIf,SAAS;AACT,+CAA4C;AAApC,4GAAA,YAAY,OAAA;AAEpB,WAAW;AACX,uCAAoC;AAA5B,oGAAA,QAAQ,OAAA;AAChB,2DAAwD;AAAhD,wHAAA,kBAAkB,OAAA;AAC1B,iDAA8C;AAAtC,8GAAA,aAAa,OAAA;AACrB,qDAAkD;AAA1C,kHAAA,eAAe,OAAA;AACvB,yEAAsE;AAA9D,sIAAA,yBAAyB,OAAA;AACjC,iCAA8B;AAAtB,8FAAA,KAAK,OAAA;AACb,6DAAqF;AAA7E,0HAAA,mBAAmB,OAAA;AAC3B,qEAAkE;AAA1D,kIAAA,uBAAuB,OAAA;AAC/B,uCAAoC;AAA5B,oGAAA,QAAQ,OAAA;AAIhB,qEAAiG;AAAzF,kIAAA,uBAAuB,OAAA;AAC/B,mDAAgD;AAAxC,gHAAA,cAAc,OAAA;AACtB,6CAA0C;AAAlC,0GAAA,WAAW,OAAA;AAGnB,mEAAgE;AAAxD,gIAAA,sBAAsB,OAAA;AAE9B,SAAS;AACT,yCAAsC;AAA9B,sGAAA,SAAS,OAAA;AACjB,uCAAoC;AAA5B,oGAAA,QAAQ,OAAA;AAChB,2CAIsB;AAHlB,wGAAA,UAAU,OAAA;AAId,+CAA4C;AAApC,4GAAA,YAAY,OAAA;AACpB,uCAAoC;AAA5B,oGAAA,QAAQ,OAAA;AAChB,iEAA8D;AAAtD,8HAAA,qBAAqB,OAAA;AAC7B,qEAAkE;AAA1D,kIAAA,uBAAuB,OAAA;AAC/B,iDAA8C;AAAtC,8GAAA,aAAa,OAAA;AACrB,yDAAsD;AAA9C,sHAAA,iBAAiB,OAAA;AACzB,yDAAsD;AAA9C,sHAAA,iBAAiB,OAAA;AACzB,qEAAkE;AAA1D,kIAAA,uBAAuB,OAAA;AAC/B,6DAA0D;AAAlD,0HAAA,mBAAmB,OAAA;AAC3B,mDAAgD;AAAxC,gHAAA,cAAc,OAAA;AACtB,6DAA0D;AAAlD,0HAAA,mBAAmB,OAAA;AAC3B,2DAAwD;AAAhD,wHAAA,kBAAkB,OAAA;AAC1B,2DAAwD;AAAhD,wHAAA,kBAAkB,OAAA;AAC1B,6DAA0D;AAAlD,0HAAA,mBAAmB,OAAA;AAC3B,iDAA8C;AAAtC,8GAAA,aAAa,OAAA;AACrB,+DAA4D;AAApD,4HAAA,oBAAoB,OAAA;AAE5B,OAAO;AACP,2CAAwC;AAAhC,wGAAA,UAAU,OAAA;AAClB,2CAAwC;AAAhC,wGAAA,UAAU,OAAA;AAClB,qCAAiD;AAAzC,kGAAA,OAAO,OAAA;AACf,uCAAoC;AAA5B,oGAAA,QAAQ,OAAA;AAChB,+CAA4C;AAApC,4GAAA,YAAY,OAAA;AACpB,qCAAkC;AAA1B,kGAAA,OAAO,OAAA;AACf,qDAAkD;AAA1C,kHAAA,eAAe,OAAA;AACvB,2CAAwC;AAAhC,wGAAA,UAAU,OAAA;AAClB,qDAAkD;AAA1C,kHAAA,eAAe,OAAA;AAkBvB,QAAQ;AACR,iCAA8B;AAAtB,8FAAA,KAAK,OAAA;AACb,+CAA4C;AAApC,4GAAA,YAAY,OAAA;AAEpB,QAAQ;AACR,uCAAoC;AAA5B,oGAAA,QAAQ,OAAA;AAIhB,2DAAwD;AAAhD,wHAAA,kBAAkB,OAAA;AAC1B,iCAA8B;AAAtB,8FAAA,KAAK,OAAA;AACb,2CAAwC;AAAhC,wGAAA,UAAU,OAAA;AAClB,qCAAkC;AAA1B,kGAAA,OAAO,OAAA;AAEf,cAAc;AACd,+DAAyC;AACjC,gCAAU"}
@@ -31,7 +31,7 @@ class ConnectionReplicationWaiter {
31
31
  });
32
32
  }
33
33
  async wait(target, timeout = ConnectionReplicationWaiter.DEFAULT_TIMEOUT) {
34
- if (!this.$conn.isReadOnly()) {
34
+ if (this.$conn.isMaster()) {
35
35
  return;
36
36
  }
37
37
  let shouldTimeout = false;
@@ -1 +1 @@
1
- {"version":3,"file":"ConnectionReplicationWaiter.js","sourceRoot":"","sources":["../../src/private/ConnectionReplicationWaiter.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;EAcE;;;AAIF,oDAAiD;AACjD,kDAA+C;AAE/C,MAAa,2BAA2B;IAqBpC,YAAmB,IAAyB,EAAE,aAAqB,2BAA2B,CAAC,mBAAmB;QAC9G,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAClC,CAAC;IAEO,MAAM,CAAC,OAAe;QAC1B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,UAAU,CAAC,GAAG,EAAE;gBACZ,OAAO,EAAE,CAAC;YACd,CAAC,EAAE,OAAO,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,MAAyB,EAAE,UAAkB,2BAA2B,CAAC,eAAe;QACtG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,CAAC;YAC3B,OAAO;QACX,CAAC;QAED,IAAI,aAAa,GAAY,KAAK,CAAC;QACnC,IAAI,UAAU,GAAY,KAAK,CAAC;QAEhC,IAAI,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;YAC/B,aAAa,GAAG,IAAI,CAAC;QACzB,CAAC,EAAE,OAAO,CAAC,CAAC;QAEZ,OAAO,IAAI,EAAE,CAAC;YACV,IAAI,aAAa,EAAE,CAAC;gBAChB,UAAU,GAAG,IAAI,CAAC;gBAClB,MAAM;YACV,CAAC;YAED,IAAI,UAAU,GAAsB,MAAM,IAAI,CAAC,KAAK,CAAC,0BAA0B,EAAE,CAAC;YAElF,wEAAwE;YACxE,yDAAyD;YACzD,IAAI,UAAU,KAAK,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,QAAQ,KAAK,IAAI,CAAC,EAAE,CAAC;gBACpH,MAAM,IAAI,6BAAa,CAAC,iCAAiC,CAAC,CAAC;YAC/D,CAAC;YAED,uDAAuD;YACvD,wDAAwD;YACxD,2BAA2B;YAC3B,IAAI,UAAU,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;gBAChC,MAAM;YACV,CAAC;YAED,wDAAwD;YACxD,mDAAmD;YACnD,IAAI,UAAU,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,IAAI,UAAU,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAC5E,MAAM;YACV,CAAC;YAED,gEAAgE;YAChE,4CAA4C;YAC5C,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,UAAU,EAAE,CAAC;YACb,+CAA+C;YAC/C,6BAA6B;YAC7B,MAAM,IAAI,2BAAY,EAAE,CAAC;QAC7B,CAAC;QAED,+BAA+B;QAC/B,YAAY,CAAC,YAAY,CAAC,CAAC;IAC/B,CAAC;;AAtFL,kEAuFC;AAtFG;;;;;GAKG;AACoB,+CAAmB,GAAW,IAAI,CAAC;AAE1D;;;;;;GAMG;AACoB,2CAAe,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,oBAAoB"}
1
+ {"version":3,"file":"ConnectionReplicationWaiter.js","sourceRoot":"","sources":["../../src/private/ConnectionReplicationWaiter.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;EAcE;;;AAIF,oDAAiD;AACjD,kDAA+C;AAE/C,MAAa,2BAA2B;IAqBpC,YAAmB,IAAyB,EAAE,aAAqB,2BAA2B,CAAC,mBAAmB;QAC9G,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAClC,CAAC;IAEO,MAAM,CAAC,OAAe;QAC1B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,UAAU,CAAC,GAAG,EAAE;gBACZ,OAAO,EAAE,CAAC;YACd,CAAC,EAAE,OAAO,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,MAAyB,EAAE,UAAkB,2BAA2B,CAAC,eAAe;QACtG,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;YACxB,OAAO;QACX,CAAC;QAED,IAAI,aAAa,GAAY,KAAK,CAAC;QACnC,IAAI,UAAU,GAAY,KAAK,CAAC;QAEhC,IAAI,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;YAC/B,aAAa,GAAG,IAAI,CAAC;QACzB,CAAC,EAAE,OAAO,CAAC,CAAC;QAEZ,OAAO,IAAI,EAAE,CAAC;YACV,IAAI,aAAa,EAAE,CAAC;gBAChB,UAAU,GAAG,IAAI,CAAC;gBAClB,MAAM;YACV,CAAC;YAED,IAAI,UAAU,GAAsB,MAAM,IAAI,CAAC,KAAK,CAAC,0BAA0B,EAAE,CAAC;YAElF,wEAAwE;YACxE,yDAAyD;YACzD,IAAI,UAAU,KAAK,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,QAAQ,KAAK,IAAI,CAAC,EAAE,CAAC;gBACpH,MAAM,IAAI,6BAAa,CAAC,iCAAiC,CAAC,CAAC;YAC/D,CAAC;YAED,uDAAuD;YACvD,wDAAwD;YACxD,2BAA2B;YAC3B,IAAI,UAAU,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;gBAChC,MAAM;YACV,CAAC;YAED,wDAAwD;YACxD,mDAAmD;YACnD,IAAI,UAAU,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,IAAI,UAAU,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAC5E,MAAM;YACV,CAAC;YAED,gEAAgE;YAChE,4CAA4C;YAC5C,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,UAAU,EAAE,CAAC;YACb,+CAA+C;YAC/C,6BAA6B;YAC7B,MAAM,IAAI,2BAAY,EAAE,CAAC;QAC7B,CAAC;QAED,+BAA+B;QAC/B,YAAY,CAAC,YAAY,CAAC,CAAC;IAC/B,CAAC;;AAtFL,kEAuFC;AAtFG;;;;;GAKG;AACoB,+CAAmB,GAAW,IAAI,CAAC;AAE1D;;;;;;GAMG;AACoB,2CAAe,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,oBAAoB"}
@@ -0,0 +1,15 @@
1
+ import { IDatabaseConnection } from '../IDatabaseConnection';
2
+ import { Query } from '../Query';
3
+ export interface IGetProcessListOutput {
4
+ Id: number;
5
+ User: string;
6
+ Host: string;
7
+ db: string;
8
+ Command: string;
9
+ Time: number;
10
+ State: string;
11
+ Info: string;
12
+ }
13
+ export declare class GetProcessList extends Query<void, IGetProcessListOutput[]> {
14
+ protected _getQuery(connection: IDatabaseConnection): string;
15
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GetProcessList = void 0;
4
+ const Query_1 = require("../Query");
5
+ class GetProcessList extends Query_1.Query {
6
+ _getQuery(connection) {
7
+ return 'SHOW PROCESSLIST';
8
+ }
9
+ }
10
+ exports.GetProcessList = GetProcessList;
11
+ //# sourceMappingURL=GetProcessList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GetProcessList.js","sourceRoot":"","sources":["../../src/private/GetProcessList.ts"],"names":[],"mappings":";;;AAEA,oCAA+B;AAa/B,MAAa,cAAe,SAAQ,aAAoC;IACjD,SAAS,CAAC,UAA+B;QACxD,OAAO,kBAAkB,CAAC;IAC9B,CAAC;CACJ;AAJD,wCAIC"}
@@ -1,4 +1,11 @@
1
1
  import { Query } from '../Query';
2
- export declare class StartTransactionQuery extends Query<void, void> {
2
+ import { TransactionAccessLevel } from '../TransactionAccessLevel';
3
+ /**
4
+ * @since 8.6.0
5
+ */
6
+ export interface IStartTransactionQueryInput {
7
+ accessLevel?: TransactionAccessLevel;
8
+ }
9
+ export declare class StartTransactionQuery extends Query<IStartTransactionQueryInput, void> {
3
10
  protected _getQuery(): string;
4
11
  }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  /*
3
- Copyright 2017-2021 Norman Breau
3
+ Copyright 2017-2025 Norman Breau
4
4
 
5
5
  Licensed under the Apache License, Version 2.0 (the "License");
6
6
  you may not use this file except in compliance with the License.
@@ -17,9 +17,18 @@
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.StartTransactionQuery = void 0;
19
19
  const Query_1 = require("../Query");
20
+ const TransactionAccessLevel_1 = require("../TransactionAccessLevel");
20
21
  class StartTransactionQuery extends Query_1.Query {
21
22
  _getQuery() {
22
- return 'START TRANSACTION';
23
+ let params = this.getParameters();
24
+ let accessString;
25
+ if (params?.accessLevel === TransactionAccessLevel_1.TransactionAccessLevel.RO) {
26
+ accessString = 'READ ONLY';
27
+ }
28
+ else {
29
+ accessString = 'READ WRITE';
30
+ }
31
+ return `START TRANSACTION ${accessString}`;
23
32
  }
24
33
  }
25
34
  exports.StartTransactionQuery = StartTransactionQuery;
@@ -1 +1 @@
1
- {"version":3,"file":"StartTransactionQuery.js","sourceRoot":"","sources":["../../src/private/StartTransactionQuery.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;EAcE;;;AAEF,oCAA+B;AAE/B,MAAa,qBAAsB,SAAQ,aAAiB;IAC9C,SAAS;QACf,OAAO,mBAAmB,CAAC;IAC/B,CAAC;CACJ;AAJD,sDAIC"}
1
+ {"version":3,"file":"StartTransactionQuery.js","sourceRoot":"","sources":["../../src/private/StartTransactionQuery.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;EAcE;;;AAEF,oCAA+B;AAC/B,sEAAmE;AASnE,MAAa,qBAAsB,SAAQ,aAAwC;IAC5D,SAAS;QACxB,IAAI,MAAM,GAAgC,IAAI,CAAC,aAAa,EAAE,CAAC;QAE/D,IAAI,YAAoB,CAAC;QACzB,IAAI,MAAM,EAAE,WAAW,KAAK,+CAAsB,CAAC,EAAE,EAAE,CAAC;YACpD,YAAY,GAAG,WAAW,CAAC;QAC/B,CAAC;aACI,CAAC;YACF,YAAY,GAAG,YAAY,CAAC;QAChC,CAAC;QAED,OAAO,qBAAqB,YAAY,EAAE,CAAC;IAC/C,CAAC;CACJ;AAdD,sDAcC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@breautek/storm",
3
- "version": "8.5.0",
3
+ "version": "9.0.0",
4
4
  "description": "Object-Oriented REST API framework",
5
5
  "main": "lib/api.js",
6
6
  "types": "lib/api.d.ts",
@@ -46,22 +46,22 @@
46
46
  "dependencies": {
47
47
  "@arashi/token": "1.0.1",
48
48
  "@breautek/merge-change": "1.0.0",
49
- "@types/body-parser": "1.19.5",
50
- "@types/express": "4.17.21",
49
+ "@types/body-parser": "1.19.6",
50
+ "@types/express": "5.0.3",
51
51
  "@types/formidable": "3.4.5",
52
- "@types/jsonwebtoken": "9.0.7",
52
+ "@types/jsonwebtoken": "9.0.10",
53
53
  "@types/mysql": "2.15.27",
54
- "@types/node": "22.13.10",
54
+ "@types/node": "24.0.10",
55
55
  "@types/uuid": "10.0.0",
56
56
  "ajv": "8.17.1",
57
- "body-parser": "1.20.3",
58
- "commander": "13.1.0",
59
- "express": "4.21.2",
60
- "form-data": "4.0.2",
57
+ "body-parser": "2.2.0",
58
+ "commander": "14.0.0",
59
+ "express": "5.1.0",
60
+ "form-data": "4.0.3",
61
61
  "formidable": "3.5.4",
62
62
  "jsonwebtoken": "9.0.2",
63
63
  "mysql": "2.18.1",
64
- "sql-formatter": "15.6.1",
64
+ "sql-formatter": "15.6.6",
65
65
  "tslib": "2.8.1",
66
66
  "uuid": "11.1.0"
67
67
  },
@@ -73,14 +73,15 @@
73
73
  "@arashi/interfaces": "1.2.1",
74
74
  "@arashi/logger": "4.1.3",
75
75
  "@totalpave/eslint-plugin": "7.0.11",
76
- "@types/jest": "29.5.14",
76
+ "@types/jest": "30.0.0",
77
+ "@types/ms": "2.1.0",
77
78
  "auto-changelog": "2.5.0",
78
- "jest": "29.7.0",
79
- "jest-jasmine2": "29.7.0",
80
- "ts-jest": "29.3.2",
79
+ "jest": "30.0.4",
80
+ "jest-jasmine2": "30.0.4",
81
+ "ts-jest": "29.4.0",
81
82
  "ts-node": "10.9.2",
82
- "typedoc": "0.28.4",
83
- "typedoc-plugin-markdown": "4.6.3",
83
+ "typedoc": "0.28.7",
84
+ "typedoc-plugin-markdown": "4.7.0",
84
85
  "typescript": "5.8.3"
85
86
  }
86
87
  }
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2017-2021 Norman Breau
2
+ Copyright 2017-2025 Norman Breau
3
3
 
4
4
  Licensed under the Apache License, Version 2.0 (the "License");
5
5
  you may not use this file except in compliance with the License.
@@ -20,7 +20,6 @@ import {TokenManager} from './TokenManager';
20
20
  import {ApplicationEvent} from './ApplicationEvent';
21
21
  import {Database} from './Database';
22
22
  import {Handler} from './Handler';
23
- import {IHandler} from './IHandler';
24
23
  import {Request} from './Request';
25
24
  import {Response} from './Response';
26
25
  import {ConfigLoader} from './ConfigLoader';
@@ -164,10 +163,26 @@ export abstract class Application
164
163
  type : 'application/json',
165
164
  limit : this.getRequestSizeLimit()
166
165
  }));
166
+ this.$server.use(BodyParser.urlencoded({
167
+ type: [
168
+ '*/form',
169
+ '*/x-www-form-urlencoded'
170
+ ]
171
+ }));
167
172
  this.$server.use(BodyParser.text({
168
173
  type : 'text/*',
169
174
  limit : this.getRequestSizeLimit()
170
175
  }));
176
+
177
+ this.$server.use(BodyParser.raw({
178
+ type: [
179
+ 'application/*',
180
+ 'image/*',
181
+ 'video/*',
182
+ 'audio/*'
183
+ ],
184
+ limit : this.getRequestSizeLimit()
185
+ }));
171
186
 
172
187
  this.$getLogger().trace(TAG, 'Attaching handlers...');
173
188
  await this._attachHandlers();
@@ -345,30 +360,28 @@ export abstract class Application
345
360
  /**
346
361
  *
347
362
  * @param path The URL API path. E.g. /api/myService/myCommand/
348
- * @param HandlerClass The concrete class (not the instance) of Handler to be used for this API.
363
+ * @param Handler
349
364
  */
350
- // eslint-disable-next-line @typescript-eslint/naming-convention
351
- public attachHandler(path: string, HandlerClass: IHandler): void {
352
- let handler: Handler = new HandlerClass(this);
365
+ public attachHandler(path: string, handler: Handler): void {
353
366
  this.attachHandlerInstance(path, handler);
354
367
  }
355
368
 
356
369
  public attachHandlerInstance(path: string, handler: Handler): void {
357
370
  this.$server.get(path, (request: Express.Request, response: Express.Response) => {
358
371
  let r: Request = new Request(request);
359
- handler.get(r, new Response(response, r.getURL()));
372
+ handler.get(r, new Response(this, response, r.getURL()));
360
373
  });
361
374
  this.$server.post(path, (request: Express.Request, response: Express.Response) => {
362
375
  let r: Request = new Request(request);
363
- handler.post(r, new Response(response, r.getURL()));
376
+ handler.post(r, new Response(this, response, r.getURL()));
364
377
  });
365
378
  this.$server.put(path, (request: Express.Request, response: Express.Response) => {
366
379
  let r: Request = new Request(request);
367
- handler.put(r, new Response(response, r.getURL()));
380
+ handler.put(r, new Response(this, response, r.getURL()));
368
381
  });
369
382
  this.$server.delete(path, (request: Express.Request, response: Express.Response) => {
370
383
  let r: Request = new Request(request);
371
- handler.delete(r, new Response(response, r.getURL()));
384
+ handler.delete(r, new Response(this, response, r.getURL()));
372
385
  });
373
386
  }
374
387
 
@@ -57,6 +57,12 @@ export abstract class DatabaseConnection<TAPI> implements IDatabaseConnection {
57
57
 
58
58
  this.$armLingerWarning();
59
59
  }
60
+
61
+ public abstract isMaster(): boolean;
62
+
63
+ public abstract isReplication(): boolean;
64
+
65
+ public abstract hasReplicationEnabled(): boolean;
60
66
 
61
67
  private $triggerLingerWarning(): void {
62
68
  getInstance().getLogger().warn(TAG, `Database connection has lingered for ${LINGER_WARNING}ms of inactivity.\n\n${this.$instantiationStack}`);
package/src/Handler.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2017-2021 Norman Breau
2
+ Copyright 2017-2025 Norman Breau
3
3
 
4
4
  Licensed under the Apache License, Version 2.0 (the "License");
5
5
  you may not use this file except in compliance with the License.
@@ -15,9 +15,8 @@
15
15
  */
16
16
 
17
17
  import {Application} from './Application';
18
- import {getInstance} from './instance';
19
18
  import {Request} from './Request';
20
- import {Response} from './Response';
19
+ import {Response, SendableData} from './Response';
21
20
  import {Middleware} from './Middleware';
22
21
  import {StormError} from './StormError';
23
22
  import {IConfig} from './IConfig';
@@ -25,47 +24,28 @@ import { InternalError } from './InternalError';
25
24
  import { IRequestResponse } from './IRequestResponse';
26
25
  import { BaseLogger } from '@arashi/logger';
27
26
  import { ResponseData } from './ResponseData';
28
- import { ReadStream } from 'fs';
29
27
  import { NotImplementedError } from './NotImplementedError';
30
28
  import { HTTPMethod } from './HTTPMethod';
31
29
 
32
30
  const TAG: string = 'Handler';
33
31
 
34
- /**
35
- * IHandlerResponse can actually accept any arbitrary object, however it may do
36
- * certain things depending on the type of object it receives.
37
- *
38
- * - If the response object is a stream, it will pipe the stream to stream the HTTP response.
39
- * - If the response is ResponseData, the status code and response data will be passed as the HTTP response.
40
- * - Passing nothing/undefined will return a status code of 204 with no body content
41
- * - Primitive data types will be passed as is
42
- * - Buffers will be passed through
43
- * - Any other object will be passed through JSON.stringify
44
- */
45
- export type IHandlerResponse = ResponseData | ReadableStream | ReadStream | any | void;
46
-
47
- /**
48
- * Like IHandlerResponse, an IHandlerError can be any arbitrary type of object,
49
- * however it's recommended that the type be of a StormError.
50
- *
51
- * If the type is not a StormError, the error will be wrapped in an InternalError object.
52
- * This is to avoid accidental leakage of privilege data (e.g. snippets of database queries with sensitive information)
53
- */
54
- export type IHandlerError = StormError | Error | any;
55
-
56
32
  export class Handler<
57
33
  TApplication extends Application = Application,
58
- TGetRequest = any,
59
- TGetResponse = IHandlerResponse,
60
- TPostRequest = any,
61
- TPostResponse = IHandlerResponse,
62
- TPutRequest = any,
63
- TPutResponse = IHandlerResponse,
64
- TDeleteRequest = any,
65
- TDeleteResponse = IHandlerResponse,
34
+ TGetRequest extends SendableData = void | SendableData,
35
+ TGetResponse extends SendableData = void | SendableData,
36
+ TPostRequest extends SendableData = void | SendableData,
37
+ TPostResponse extends SendableData = void | SendableData,
38
+ TPutRequest extends SendableData = void | SendableData,
39
+ TPutResponse extends SendableData = void | SendableData,
40
+ TDeleteRequest extends SendableData = void | SendableData,
41
+ TDeleteResponse extends SendableData = void | SendableData
66
42
  > {
67
43
 
68
44
  private $app: TApplication;
45
+
46
+ /**
47
+ * @deprecated
48
+ */
69
49
  private $middlewares: Middleware[];
70
50
 
71
51
  constructor(app: TApplication) {
@@ -77,23 +57,32 @@ export class Handler<
77
57
  return this.$app;
78
58
  }
79
59
 
60
+ /**
61
+ * @deprecated
62
+ */
80
63
  protected _initMiddlewares(): Middleware[] {
81
64
  return [];
82
65
  }
83
66
 
84
- public getAccessToken(request: Request): string {
85
- let config: IConfig = getInstance().getConfig();
67
+ public getAccessToken(request: Request<unknown>): string {
68
+ let config: IConfig = this.$app.getConfig();
86
69
  let authHeader: string = config.authentication_header;
87
70
  return request.getHeader(authHeader);
88
71
  }
89
72
 
73
+ /**
74
+ * @deprecated
75
+ * @param request
76
+ * @param response
77
+ * @returns
78
+ */
90
79
  private async $executeMiddlewares(request: Request, response: Response): Promise<IRequestResponse> {
91
80
  let result: IRequestResponse = {
92
81
  request,
93
82
  response
94
83
  };
95
84
 
96
- let logger: BaseLogger = getInstance().getLogger();
85
+ let logger: BaseLogger = this.$app.getLogger();
97
86
 
98
87
  try {
99
88
  for (let i: number = 0; i < this.$middlewares.length; i++) {
@@ -133,13 +122,19 @@ export class Handler<
133
122
  return Promise.resolve(result);
134
123
  }
135
124
 
125
+ /**
126
+ * @deprecated
127
+ * @param request
128
+ * @param response
129
+ * @param error
130
+ */
136
131
  protected _onMiddlewareReject(request: Request, response: Response, error: StormError): void {}
137
132
 
138
- private $handleResponse<TResponse>(response: Response<TResponse>, data: any): void {
133
+ private $handleResponse<TResponse extends SendableData>(response: Response<TResponse>, data: TResponse | ResponseData<TResponse>): void {
139
134
  response.send(data);
140
135
  }
141
136
 
142
- private $handleResponseError<TResponse>(response: Response<TResponse>, error: any): void {
137
+ private $handleResponseError<TResponse extends SendableData>(response: Response<TResponse>, error: any): void {
143
138
  response.error(error);
144
139
  }
145
140
 
@@ -148,7 +143,7 @@ export class Handler<
148
143
 
149
144
  try {
150
145
  let result: IRequestResponse<TGetRequest, TGetResponse> = await this.$executeMiddlewares(request, response);
151
- let req: any = await this._get(result.request);
146
+ let req: TGetResponse | ResponseData<TGetResponse> = await this._get(result.request);
152
147
  this.$handleResponse(response, req);
153
148
  }
154
149
  catch (ex) {
@@ -161,7 +156,7 @@ export class Handler<
161
156
 
162
157
  try {
163
158
  let result: IRequestResponse<TPutRequest, TPutResponse> = await this.$executeMiddlewares(request, response);
164
- let req: any = await this._put(result.request);
159
+ let req: TPutResponse | ResponseData<TPutResponse> = await this._put(result.request);
165
160
  this.$handleResponse(response, req);
166
161
  }
167
162
  catch (ex) {
@@ -187,7 +182,7 @@ export class Handler<
187
182
 
188
183
  try {
189
184
  let result: IRequestResponse<TDeleteRequest, TDeleteResponse> = await this.$executeMiddlewares(request, response);
190
- let req: any = await this._delete(result.request);
185
+ let req: ResponseData<TDeleteResponse> | TDeleteResponse = await this._delete(result.request);
191
186
  this.$handleResponse(response, req);
192
187
  }
193
188
  catch (ex) {
@@ -195,19 +190,19 @@ export class Handler<
195
190
  }
196
191
  }
197
192
 
198
- protected async _get(request: Request<TGetRequest>): Promise<TGetResponse> {
193
+ protected async _get(request: Request<TGetRequest>): Promise<TGetResponse | ResponseData<TGetResponse>> {
199
194
  throw new NotImplementedError(HTTPMethod.GET);
200
195
  }
201
196
 
202
- protected async _post(request: Request<TPostRequest>): Promise<TPostResponse> {
197
+ protected async _post(request: Request<TPostRequest>): Promise<TPostResponse | ResponseData<TPostResponse>> {
203
198
  throw new NotImplementedError(HTTPMethod.POST);
204
199
  }
205
200
 
206
- protected async _put(request: Request<TPutRequest>): Promise<TPutResponse> {
201
+ protected async _put(request: Request<TPutRequest>): Promise<TPutResponse | ResponseData<TPutResponse>> {
207
202
  throw new NotImplementedError(HTTPMethod.PUT);
208
203
  }
209
204
 
210
- protected async _delete(request: Request<TDeleteRequest>): Promise<TDeleteResponse> {
205
+ protected async _delete(request: Request<TDeleteRequest>): Promise<TDeleteResponse | ResponseData<TDeleteResponse>> {
211
206
  throw new NotImplementedError(HTTPMethod.DELETE);
212
207
  }
213
208
  }
@@ -18,19 +18,27 @@ import { Readable } from 'stream';
18
18
  import { IQueryable } from './IQueryable';
19
19
  import { IsolationLevel } from './IsolationLevel';
20
20
  import { IDatabasePosition } from './IDatabasePosition';
21
+ import { TransactionAccessLevel } from './TransactionAccessLevel';
21
22
 
22
23
  export interface IDatabaseConnection {
23
24
  setInstantiationStack(stack: string): void;
24
25
  getInstantiationStack(): string;
25
26
  getAPI(): any;
26
27
  isReadOnly(): boolean;
28
+ isMaster(): boolean;
29
+ isReplication(): boolean;
30
+ hasReplicationEnabled(): boolean;
27
31
  setTimeout(timeout: number): void;
28
32
  getTimeout(): number;
29
33
  query(query: IQueryable<any>, params?: any): Promise<any>;
34
+
35
+ /**
36
+ * @deprecated - Streaming queries does not support post processing, creating a confusing API
37
+ */
30
38
  stream(query: IQueryable<any>, params?: any, streamOptions?: any): Readable;
31
39
  close(forceClose?: boolean): Promise<void>;
32
40
  isClosed(): boolean;
33
- startTransaction(level?: IsolationLevel): Promise<void>;
41
+ startTransaction(level?: IsolationLevel, accessLevel?: TransactionAccessLevel): Promise<void>;
34
42
  isTransaction(): boolean;
35
43
  commit(): Promise<void>;
36
44
  rollback(): Promise<void>;
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2017-2021 Norman Breau
2
+ Copyright 2017-2025 Norman Breau
3
3
 
4
4
  Licensed under the Apache License, Version 2.0 (the "License");
5
5
  you may not use this file except in compliance with the License.
@@ -15,9 +15,9 @@
15
15
  */
16
16
 
17
17
  import {Request} from './Request';
18
- import {Response} from './Response';
18
+ import {Response, SendableData} from './Response';
19
19
 
20
- export interface IRequestResponse<TRequest = any, TResponse = any> {
20
+ export interface IRequestResponse<TRequest = any, TResponse extends SendableData = SendableData> {
21
21
  request: Request<TRequest>;
22
22
  response: Response<TResponse>;
23
23
  }
@@ -21,6 +21,7 @@ import { Query } from './Query';
21
21
  import { IsolationLevel } from './IsolationLevel';
22
22
  import { IDatabasePosition } from './IDatabasePosition';
23
23
  import { IQueryable } from './IQueryable';
24
+ import { TransactionAccessLevel } from './TransactionAccessLevel';
24
25
 
25
26
  const TAG: string = 'ManagedDatabaseConnection';
26
27
 
@@ -43,6 +44,18 @@ export class ManagedDatabaseConnection implements IDatabaseConnection {
43
44
  this.$instantionStack = new Error().stack;
44
45
  }
45
46
 
47
+ public isMaster(): boolean {
48
+ throw new Error('Method not implemented.');
49
+ }
50
+
51
+ public isReplication(): boolean {
52
+ throw new Error('Method not implemented.');
53
+ }
54
+
55
+ public hasReplicationEnabled(): boolean {
56
+ throw new Error('Method not implemented.');
57
+ }
58
+
46
59
  public formatQuery(query: IQueryable<any>): string {
47
60
  throw new Error('Unsupported API call');
48
61
  }
@@ -176,11 +189,11 @@ export class ManagedDatabaseConnection implements IDatabaseConnection {
176
189
  });
177
190
  }
178
191
 
179
- public startTransaction(isolationLevel?: IsolationLevel): Promise<void> {
192
+ public startTransaction(isolationLevel?: IsolationLevel, accessLevel?: TransactionAccessLevel): Promise<void> {
180
193
  return new Promise<void>((resolve, reject) => {
181
194
  this.$getConnection().then((connection: IDatabaseConnection) => {
182
195
  if (!this.isManaged()) {
183
- connection.startTransaction(isolationLevel).then(resolve).catch(reject);
196
+ connection.startTransaction(isolationLevel, accessLevel).then(resolve).catch(reject);
184
197
  }
185
198
  else {
186
199
  resolve();
package/src/Middleware.ts CHANGED
@@ -17,9 +17,21 @@
17
17
  import {Request} from './Request';
18
18
  import {Response} from './Response';
19
19
  import {IRequestResponse} from './IRequestResponse';
20
+ import { Application } from './Application';
20
21
 
21
- export abstract class Middleware {
22
- public constructor() {}
22
+ /**
23
+ * @deprecated
24
+ */
25
+ export abstract class Middleware<TApplication extends Application = Application> {
26
+ private $app: TApplication;
27
+
28
+ public constructor(app: TApplication) {
29
+ this.$app = app;
30
+ }
31
+
32
+ public getApplication(): TApplication {
33
+ return this.$app;
34
+ }
23
35
 
24
36
  protected abstract _execute(request: Request, response: Response): Promise<IRequestResponse>;
25
37