@balena/pinejs 16.0.0-build--batch-f2ffc3d6bcb9f3294fd4fc9de3c21bfe167e100d-1 → 16.0.0-build-fisehara-update-sbvr-types-cfbbecbb0387e87e17e14be8991be73d1a4efdd0-1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (141) hide show
  1. package/.pinejs-cache.json +1 -1
  2. package/.versionbot/CHANGELOG.yml +2168 -11
  3. package/CHANGELOG.md +815 -2
  4. package/Gruntfile.ts +9 -6
  5. package/README.md +10 -0
  6. package/build/browser.ts +2 -2
  7. package/build/config.ts +1 -1
  8. package/build/module.ts +2 -2
  9. package/build/server.ts +2 -2
  10. package/docker-compose.npm-test.yml +21 -3
  11. package/out/bin/abstract-sql-compiler.js +5 -5
  12. package/out/bin/abstract-sql-compiler.js.map +1 -1
  13. package/out/bin/odata-compiler.js +10 -10
  14. package/out/bin/odata-compiler.js.map +1 -1
  15. package/out/bin/sbvr-compiler.js +34 -11
  16. package/out/bin/sbvr-compiler.js.map +1 -1
  17. package/out/bin/utils.js +25 -2
  18. package/out/bin/utils.js.map +1 -1
  19. package/out/config-loader/config-loader.d.ts +4 -2
  20. package/out/config-loader/config-loader.js +54 -13
  21. package/out/config-loader/config-loader.js.map +1 -1
  22. package/out/config-loader/env.d.ts +2 -1
  23. package/out/config-loader/env.js +5 -2
  24. package/out/config-loader/env.js.map +1 -1
  25. package/out/data-server/sbvr-server.d.ts +1 -1
  26. package/out/data-server/sbvr-server.js +3 -1
  27. package/out/data-server/sbvr-server.js.map +1 -1
  28. package/out/database-layer/db.js +40 -14
  29. package/out/database-layer/db.js.map +1 -1
  30. package/out/express-emulator/express.js +5 -3
  31. package/out/express-emulator/express.js.map +1 -1
  32. package/out/http-transactions/transactions.d.ts +1 -1
  33. package/out/http-transactions/transactions.js +10 -5
  34. package/out/http-transactions/transactions.js.map +1 -1
  35. package/out/migrator/async.js +32 -5
  36. package/out/migrator/async.js.map +1 -1
  37. package/out/migrator/sync.d.ts +2 -1
  38. package/out/migrator/sync.js +29 -3
  39. package/out/migrator/sync.js.map +1 -1
  40. package/out/migrator/utils.d.ts +6 -3
  41. package/out/migrator/utils.js +30 -4
  42. package/out/migrator/utils.js.map +1 -1
  43. package/out/odata-metadata/odata-metadata-generator.js +4 -1
  44. package/out/odata-metadata/odata-metadata-generator.js.map +1 -1
  45. package/out/passport-pinejs/mount-login-router.d.ts +3 -0
  46. package/out/passport-pinejs/mount-login-router.js +65 -0
  47. package/out/passport-pinejs/mount-login-router.js.map +1 -0
  48. package/out/passport-pinejs/passport-pinejs.d.ts +2 -1
  49. package/out/passport-pinejs/passport-pinejs.js +28 -2
  50. package/out/passport-pinejs/passport-pinejs.js.map +1 -1
  51. package/out/pinejs-session-store/pinejs-session-store.js +30 -7
  52. package/out/pinejs-session-store/pinejs-session-store.js.map +1 -1
  53. package/out/sbvr-api/abstract-sql.d.ts +2 -2
  54. package/out/sbvr-api/abstract-sql.js +35 -9
  55. package/out/sbvr-api/abstract-sql.js.map +1 -1
  56. package/out/sbvr-api/cached-compile.js +9 -6
  57. package/out/sbvr-api/cached-compile.js.map +1 -1
  58. package/out/sbvr-api/common-types.d.ts +1 -1
  59. package/out/sbvr-api/control-flow.js +5 -2
  60. package/out/sbvr-api/control-flow.js.map +1 -1
  61. package/out/sbvr-api/express-extension.d.ts +10 -7
  62. package/out/sbvr-api/express-extension.js +1 -0
  63. package/out/sbvr-api/hooks.d.ts +5 -1
  64. package/out/sbvr-api/hooks.js +12 -10
  65. package/out/sbvr-api/hooks.js.map +1 -1
  66. package/out/sbvr-api/odata-response.d.ts +5 -2
  67. package/out/sbvr-api/odata-response.js +36 -6
  68. package/out/sbvr-api/odata-response.js.map +1 -1
  69. package/out/sbvr-api/permissions.d.ts +6 -7
  70. package/out/sbvr-api/permissions.js +69 -38
  71. package/out/sbvr-api/permissions.js.map +1 -1
  72. package/out/sbvr-api/sbvr-utils.d.ts +20 -9
  73. package/out/sbvr-api/sbvr-utils.js +134 -136
  74. package/out/sbvr-api/sbvr-utils.js.map +1 -1
  75. package/out/sbvr-api/translations.d.ts +2 -2
  76. package/out/sbvr-api/translations.js +17 -10
  77. package/out/sbvr-api/translations.js.map +1 -1
  78. package/out/sbvr-api/uri-parser.d.ts +7 -10
  79. package/out/sbvr-api/uri-parser.js +46 -19
  80. package/out/sbvr-api/uri-parser.js.map +1 -1
  81. package/out/server-glue/global-ext.d.ts +2 -1
  82. package/out/server-glue/module.d.ts +3 -1
  83. package/out/server-glue/module.js +40 -13
  84. package/out/server-glue/module.js.map +1 -1
  85. package/out/server-glue/sbvr-loader.js.map +1 -1
  86. package/out/server-glue/server.js +31 -39
  87. package/out/server-glue/server.js.map +1 -1
  88. package/out/webresource-handler/handlers/NoopHandler.d.ts +7 -0
  89. package/out/webresource-handler/handlers/NoopHandler.js +20 -0
  90. package/out/webresource-handler/handlers/NoopHandler.js.map +1 -0
  91. package/out/webresource-handler/handlers/S3Handler.d.ts +28 -0
  92. package/out/webresource-handler/handlers/S3Handler.js +97 -0
  93. package/out/webresource-handler/handlers/S3Handler.js.map +1 -0
  94. package/out/webresource-handler/handlers/index.d.ts +2 -0
  95. package/out/webresource-handler/handlers/index.js +19 -0
  96. package/out/webresource-handler/handlers/index.js.map +1 -0
  97. package/out/webresource-handler/index.d.ts +34 -0
  98. package/out/webresource-handler/index.js +307 -0
  99. package/out/webresource-handler/index.js.map +1 -0
  100. package/package.json +68 -62
  101. package/src/bin/abstract-sql-compiler.ts +7 -9
  102. package/src/bin/odata-compiler.ts +12 -15
  103. package/src/bin/sbvr-compiler.ts +14 -18
  104. package/src/bin/utils.ts +1 -1
  105. package/src/config-loader/config-loader.ts +44 -10
  106. package/src/config-loader/env.ts +1 -1
  107. package/src/data-server/sbvr-server.js +3 -1
  108. package/src/database-layer/db.ts +23 -19
  109. package/src/express-emulator/express.js +5 -3
  110. package/src/extended-sbvr-parser/extended-sbvr-parser.ts +1 -1
  111. package/src/http-transactions/transactions.js +10 -5
  112. package/src/migrator/async.ts +7 -6
  113. package/src/migrator/sync.ts +10 -7
  114. package/src/migrator/utils.ts +11 -5
  115. package/src/odata-metadata/odata-metadata-generator.ts +2 -2
  116. package/src/passport-pinejs/mount-login-router.ts +46 -0
  117. package/src/passport-pinejs/passport-pinejs.ts +7 -3
  118. package/src/pinejs-session-store/pinejs-session-store.ts +6 -6
  119. package/src/sbvr-api/abstract-sql.ts +5 -5
  120. package/src/sbvr-api/cached-compile.ts +1 -2
  121. package/src/sbvr-api/common-types.ts +1 -1
  122. package/src/sbvr-api/control-flow.ts +1 -1
  123. package/src/sbvr-api/express-extension.ts +12 -8
  124. package/src/sbvr-api/hooks.ts +11 -11
  125. package/src/sbvr-api/odata-response.ts +56 -9
  126. package/src/sbvr-api/permissions.ts +44 -35
  127. package/src/sbvr-api/sbvr-utils.ts +118 -172
  128. package/src/sbvr-api/translations.ts +9 -6
  129. package/src/sbvr-api/uri-parser.ts +22 -28
  130. package/src/server-glue/global-ext.d.ts +2 -1
  131. package/src/server-glue/module.ts +8 -2
  132. package/src/server-glue/sbvr-loader.ts +1 -1
  133. package/src/server-glue/server.ts +11 -49
  134. package/src/webresource-handler/handlers/NoopHandler.ts +21 -0
  135. package/src/webresource-handler/handlers/S3Handler.ts +143 -0
  136. package/src/webresource-handler/handlers/index.ts +2 -0
  137. package/src/webresource-handler/index.ts +450 -0
  138. package/tsconfig.dev.json +2 -1
  139. package/tsconfig.json +1 -1
  140. package/typings/lf-to-abstract-sql.d.ts +1 -1
  141. package/typings/memoizee.d.ts +3 -4
@@ -3,15 +3,17 @@ import type * as Express from 'express';
3
3
  import './sbvr-loader';
4
4
  import * as dbModule from '../database-layer/db';
5
5
  import * as configLoader from '../config-loader/config-loader';
6
- import * as migratorUtils from '../migrator/utils';
6
+ import type * as migratorUtils from '../migrator/utils';
7
7
  export * as dbModule from '../database-layer/db';
8
8
  export { PinejsSessionStore } from '../pinejs-session-store/pinejs-session-store';
9
+ export { mountLoginRouter } from '../passport-pinejs/mount-login-router';
9
10
  export * as sbvrUtils from '../sbvr-api/sbvr-utils';
10
11
  export * as permissions from '../sbvr-api/permissions';
11
12
  export * as errors from '../sbvr-api/errors';
12
13
  export * as env from '../config-loader/env';
13
14
  export * as types from '../sbvr-api/common-types';
14
15
  export * as hooks from '../sbvr-api/hooks';
16
+ export * as webResourceHandler from '../webresource-handler';
15
17
  export type { configLoader as ConfigLoader };
16
18
  export type { migratorUtils as Migrator };
17
19
  declare let envDatabaseOptions: dbModule.DatabaseOptions<string>;
@@ -1,21 +1,47 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.init = exports.hooks = exports.types = exports.env = exports.errors = exports.permissions = exports.sbvrUtils = exports.PinejsSessionStore = exports.dbModule = void 0;
26
+ exports.init = exports.webResourceHandler = exports.hooks = exports.types = exports.env = exports.errors = exports.permissions = exports.sbvrUtils = exports.mountLoginRouter = exports.PinejsSessionStore = exports.dbModule = void 0;
4
27
  require("./sbvr-loader");
5
- const dbModule = require("../database-layer/db");
6
- const configLoader = require("../config-loader/config-loader");
7
- const migrator = require("../migrator/sync");
8
- const sbvrUtils = require("../sbvr-api/sbvr-utils");
28
+ const dbModule = __importStar(require("../database-layer/db"));
29
+ const configLoader = __importStar(require("../config-loader/config-loader"));
30
+ const migrator = __importStar(require("../migrator/sync"));
31
+ const sbvrUtils = __importStar(require("../sbvr-api/sbvr-utils"));
9
32
  const env_1 = require("../config-loader/env");
10
- exports.dbModule = require("../database-layer/db");
33
+ exports.dbModule = __importStar(require("../database-layer/db"));
11
34
  var pinejs_session_store_1 = require("../pinejs-session-store/pinejs-session-store");
12
35
  Object.defineProperty(exports, "PinejsSessionStore", { enumerable: true, get: function () { return pinejs_session_store_1.PinejsSessionStore; } });
13
- exports.sbvrUtils = require("../sbvr-api/sbvr-utils");
14
- exports.permissions = require("../sbvr-api/permissions");
15
- exports.errors = require("../sbvr-api/errors");
16
- exports.env = require("../config-loader/env");
17
- exports.types = require("../sbvr-api/common-types");
18
- exports.hooks = require("../sbvr-api/hooks");
36
+ var mount_login_router_1 = require("../passport-pinejs/mount-login-router");
37
+ Object.defineProperty(exports, "mountLoginRouter", { enumerable: true, get: function () { return mount_login_router_1.mountLoginRouter; } });
38
+ exports.sbvrUtils = __importStar(require("../sbvr-api/sbvr-utils"));
39
+ exports.permissions = __importStar(require("../sbvr-api/permissions"));
40
+ exports.errors = __importStar(require("../sbvr-api/errors"));
41
+ exports.env = __importStar(require("../config-loader/env"));
42
+ exports.types = __importStar(require("../sbvr-api/common-types"));
43
+ exports.hooks = __importStar(require("../sbvr-api/hooks"));
44
+ exports.webResourceHandler = __importStar(require("../webresource-handler"));
19
45
  let envDatabaseOptions;
20
46
  if (dbModule.engines.websql != null) {
21
47
  envDatabaseOptions = {
@@ -51,7 +77,7 @@ const init = async (app, config, databaseOptions = envDatabaseOptions) => {
51
77
  await cfgLoader.loadConfig(migrator.config);
52
78
  const promises = [];
53
79
  if (process.env.SBVR_SERVER_ENABLED) {
54
- const sbvrServer = await Promise.resolve().then(() => require('../data-server/sbvr-server'));
80
+ const sbvrServer = await import('../data-server/sbvr-server.js');
55
81
  const transactions = require('../http-transactions/transactions');
56
82
  promises.push(cfgLoader.loadConfig(sbvrServer.config));
57
83
  promises.push(cfgLoader
@@ -62,6 +88,7 @@ const init = async (app, config, databaseOptions = envDatabaseOptions) => {
62
88
  promises.push(cfgLoader.loadApplicationConfig(config));
63
89
  }
64
90
  await Promise.all(promises);
91
+ await sbvrUtils.postSetup(app, db);
65
92
  return cfgLoader;
66
93
  }
67
94
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/server-glue/module.ts"],"names":[],"mappings":";;;AAEA,yBAAuB;AAEvB,iDAAiD;AACjD,+DAA+D;AAC/D,6CAA6C;AAG7C,oDAAoD;AACpD,8CAA4D;AAE5D,mDAAiD;AACjD,qFAAkF;AAAzE,0HAAA,kBAAkB,OAAA;AAC3B,sDAAoD;AACpD,yDAAuD;AACvD,+CAA6C;AAC7C,8CAA4C;AAC5C,oDAAkD;AAClD,6CAA2C;AAI3C,IAAI,kBAAoD,CAAC;AACzD,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE;IACpC,kBAAkB,GAAG;QACpB,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,YAAY;KACpB,CAAC;CACF;KAAM;IACN,IAAI,WAAmB,CAAC;IACxB,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE;QAC7B,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;KACvC;SAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,EAAE;QAC7C,WAAW,GAAG,+CAA+C,CAAC;KAC9D;SAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,EAAE;QAC1C,WAAW,GAAG,gCAAgC,CAAC;KAC/C;SAAM;QACN,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;KAC3D;IACD,kBAAkB,GAAG;QACpB,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACtD,MAAM,EAAE,WAAW;KACnB,CAAC;CACF;AAEM,MAAM,IAAI,GAAG,KAAK,EACxB,GAAwB,EACxB,MAAqC,EACrC,kBAE+B,kBAAkB,EACA,EAAE;IACnD,IAAI;QACH,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAE7C,QAAQ,CAAC,gCAAgC,CACxC,0BAAoB,CAAC,YAAY,EACjC,0BAAoB,CAAC,WAAW,CAChC,CAAC;QACF,MAAM,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC/B,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChD,MAAM,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAE5C,MAAM,QAAQ,GAAyB,EAAE,CAAC;QAC1C,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE;YACpC,MAAM,UAAU,GAAG,2CAAa,4BAA4B,EAAC,CAAC;YAC9D,MAAM,YAAY,GAAG,OAAO,CAAC,mCAAmC,CAAC,CAAC;YAClE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;YACvD,QAAQ,CAAC,IAAI,CACZ,SAAS;iBACP,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC;iBAC/B,IAAI,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAChD,CAAC;SACF;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE;YACxC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC;SACvD;QACD,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE5B,OAAO,SAAS,CAAC;KACjB;IAAC,OAAO,GAAQ,EAAE;QAClB,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAChB;AACF,CAAC,CAAC;AAvCW,QAAA,IAAI,QAuCf"}
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/server-glue/module.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sbvr-loader.js","sourceRoot":"","sources":["../../src/server-glue/sbvr-loader.ts"],"names":[],"mappings":";;AAEA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;IACrB,IAAI,OAAO,WAAW,KAAK,WAAW,IAAI,WAAW,IAAI,IAAI,EAAE;QAW9D,MAAM,CAAC,WAAW,GAAG,OAAO,CAAC;KAC7B;IAGD,MAAM,EAAE,GAAc,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,MAAkB,EAAE,QAAgB,EAAE,EAAE,CAC1E,CAAC,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;CACtD"}
1
+ {"version":3,"file":"sbvr-loader.js","sourceRoot":"","sources":["../../src/server-glue/sbvr-loader.ts"],"names":[],"mappings":";;AAEA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IACtB,IAAI,OAAO,WAAW,KAAK,WAAW,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;QAW/D,MAAM,CAAC,WAAW,GAAG,OAAO,CAAC;IAC9B,CAAC;IAGD,MAAM,EAAE,GAAc,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,MAAkB,EAAE,QAAgB,EAAE,EAAE,CAC1E,CAAC,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AACvD,CAAC"}
@@ -1,15 +1,41 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
2
28
  Object.defineProperty(exports, "__esModule", { value: true });
3
29
  exports.initialised = exports.ExtendedSBVRParser = exports.PinejsSessionStore = exports.sbvrUtils = void 0;
4
- const Pinejs = require("./module");
30
+ const Pinejs = __importStar(require("./module"));
5
31
  var module_1 = require("./module");
6
32
  Object.defineProperty(exports, "sbvrUtils", { enumerable: true, get: function () { return module_1.sbvrUtils; } });
7
33
  Object.defineProperty(exports, "PinejsSessionStore", { enumerable: true, get: function () { return module_1.PinejsSessionStore; } });
8
34
  var extended_sbvr_parser_1 = require("../extended-sbvr-parser/extended-sbvr-parser");
9
35
  Object.defineProperty(exports, "ExtendedSBVRParser", { enumerable: true, get: function () { return extended_sbvr_parser_1.ExtendedSBVRParser; } });
10
- const passportPinejs = require("../passport-pinejs/passport-pinejs");
11
- const express = require("express");
12
- const app = express();
36
+ const mount_login_router_1 = require("../passport-pinejs/mount-login-router");
37
+ const express_1 = __importDefault(require("express"));
38
+ const app = (0, express_1.default)();
13
39
  switch (app.get('env')) {
14
40
  case 'production':
15
41
  console.log = () => {
@@ -23,7 +49,6 @@ if (!process.browser) {
23
49
  const serveStatic = require('serve-static');
24
50
  const cookieParser = require('cookie-parser');
25
51
  const bodyParser = require('body-parser');
26
- const multer = require('multer');
27
52
  const methodOverride = require('method-override');
28
53
  const expressSession = require('express-session');
29
54
  app.use(compression());
@@ -31,7 +56,6 @@ if (!process.browser) {
31
56
  app.use('/', serveStatic(path.join(root, 'static')));
32
57
  app.use(cookieParser());
33
58
  app.use(bodyParser());
34
- app.use(multer().any());
35
59
  app.use(methodOverride());
36
60
  app.use(expressSession({
37
61
  secret: 'A pink cat jumped over a rainbow',
@@ -54,39 +78,7 @@ if (!process.browser) {
54
78
  }
55
79
  exports.initialised = Pinejs.init(app)
56
80
  .then(async (configLoader) => {
57
- await Promise.all([
58
- configLoader.loadConfig(passportPinejs.config),
59
- configLoader.loadConfig(Pinejs.PinejsSessionStore.config),
60
- ]);
61
- if (typeof process === 'undefined' ||
62
- process == null ||
63
- !process.env.DISABLE_DEFAULT_AUTH) {
64
- app.post('/login', passportPinejs.login((err, user, req, res) => {
65
- if (err) {
66
- console.error('Error logging in', err);
67
- res.status(500).end();
68
- }
69
- else if (user === false) {
70
- if (req.xhr === true) {
71
- res.status(401).end();
72
- }
73
- else {
74
- res.redirect('/login.html');
75
- }
76
- }
77
- else {
78
- if (req.xhr === true) {
79
- res.status(200).end();
80
- }
81
- else {
82
- res.redirect('/');
83
- }
84
- }
85
- }));
86
- app.get('/logout', passportPinejs.logout, (_req, res) => {
87
- res.redirect('/');
88
- });
89
- }
81
+ await (0, mount_login_router_1.mountLoginRouter)(configLoader, app);
90
82
  app.listen(process.env.PORT || 1337, () => {
91
83
  console.info('Server started');
92
84
  });
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server-glue/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server-glue/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { WebResourceType as WebResource } from '@balena/sbvr-types';
2
+ import type { IncomingFile, UploadResponse, WebResourceHandler } from '..';
3
+ export declare class NoopHandler implements WebResourceHandler {
4
+ handleFile(resource: IncomingFile): Promise<UploadResponse>;
5
+ removeFile(): Promise<void>;
6
+ onPreRespond(webResource: WebResource): Promise<WebResource>;
7
+ }
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NoopHandler = void 0;
4
+ class NoopHandler {
5
+ async handleFile(resource) {
6
+ resource.stream.resume();
7
+ return {
8
+ filename: 'noop',
9
+ size: 0,
10
+ };
11
+ }
12
+ async removeFile() {
13
+ return;
14
+ }
15
+ async onPreRespond(webResource) {
16
+ return webResource;
17
+ }
18
+ }
19
+ exports.NoopHandler = NoopHandler;
20
+ //# sourceMappingURL=NoopHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NoopHandler.js","sourceRoot":"","sources":["../../../src/webresource-handler/handlers/NoopHandler.ts"],"names":[],"mappings":";;;AAGA,MAAa,WAAW;IAChB,KAAK,CAAC,UAAU,CAAC,QAAsB;QAE7C,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACzB,OAAO;YACN,QAAQ,EAAE,MAAM;YAChB,IAAI,EAAE,CAAC;SACP,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,UAAU;QACtB,OAAO;IACR,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,WAAwB;QACjD,OAAO,WAAW,CAAC;IACpB,CAAC;CACD;AAjBD,kCAiBC"}
@@ -0,0 +1,28 @@
1
+ import { type IncomingFile, type UploadResponse, type WebResourceHandler } from '..';
2
+ import type { WebResourceType as WebResource } from '@balena/sbvr-types';
3
+ export interface S3HandlerProps {
4
+ region: string;
5
+ accessKey: string;
6
+ secretKey: string;
7
+ endpoint: string;
8
+ bucket: string;
9
+ maxSize?: number;
10
+ signedUrlExpireTimeSeconds?: number;
11
+ signedUrlCacheExpireTimeSeconds?: number;
12
+ }
13
+ export declare class S3Handler implements WebResourceHandler {
14
+ private readonly config;
15
+ private readonly bucket;
16
+ private readonly maxFileSize;
17
+ protected readonly signedUrlExpireTimeSeconds: number;
18
+ protected readonly signedUrlCacheExpireTimeSeconds: number;
19
+ protected cachedGetSignedUrl: (fileKey: string) => Promise<string>;
20
+ private client;
21
+ constructor(config: S3HandlerProps);
22
+ handleFile(resource: IncomingFile): Promise<UploadResponse>;
23
+ removeFile(href: string): Promise<void>;
24
+ onPreRespond(webResource: WebResource): Promise<WebResource>;
25
+ private s3SignUrl;
26
+ private getS3URL;
27
+ private getKeyFromHref;
28
+ }
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.S3Handler = void 0;
7
+ const __1 = require("..");
8
+ const client_s3_1 = require("@aws-sdk/client-s3");
9
+ const lib_storage_1 = require("@aws-sdk/lib-storage");
10
+ const s3_request_presigner_1 = require("@aws-sdk/s3-request-presigner");
11
+ const crypto_1 = require("crypto");
12
+ const memoizee_1 = __importDefault(require("memoizee"));
13
+ class S3Handler {
14
+ constructor(config) {
15
+ this.config = {
16
+ region: config.region,
17
+ credentials: {
18
+ accessKeyId: config.accessKey,
19
+ secretAccessKey: config.secretKey,
20
+ },
21
+ endpoint: config.endpoint,
22
+ forcePathStyle: true,
23
+ };
24
+ this.signedUrlExpireTimeSeconds =
25
+ config.signedUrlExpireTimeSeconds ?? 86400;
26
+ this.signedUrlCacheExpireTimeSeconds =
27
+ config.signedUrlCacheExpireTimeSeconds ?? 82800;
28
+ this.maxFileSize = config.maxSize ?? 52428800;
29
+ this.bucket = config.bucket;
30
+ this.client = new client_s3_1.S3Client(this.config);
31
+ this.cachedGetSignedUrl = (0, memoizee_1.default)(this.s3SignUrl, {
32
+ maxAge: this.signedUrlCacheExpireTimeSeconds * 1000,
33
+ });
34
+ }
35
+ async handleFile(resource) {
36
+ let size = 0;
37
+ const key = `${resource.fieldname}_${(0, crypto_1.randomUUID)()}_${resource.originalname}`;
38
+ const params = {
39
+ Bucket: this.bucket,
40
+ Key: key,
41
+ Body: resource.stream,
42
+ ContentType: resource.mimetype,
43
+ };
44
+ const upload = new lib_storage_1.Upload({ client: this.client, params });
45
+ upload.on('httpUploadProgress', async (ev) => {
46
+ size = ev.total ?? ev.loaded;
47
+ if (size > this.maxFileSize) {
48
+ await upload.abort();
49
+ }
50
+ });
51
+ try {
52
+ await upload.done();
53
+ }
54
+ catch (err) {
55
+ resource.stream.resume();
56
+ if (size > this.maxFileSize) {
57
+ throw new __1.FileSizeExceededError(this.maxFileSize);
58
+ }
59
+ throw new __1.WebResourceError(err);
60
+ }
61
+ const filename = this.getS3URL(key);
62
+ return { size, filename };
63
+ }
64
+ async removeFile(href) {
65
+ const fileKey = this.getKeyFromHref(href);
66
+ const command = new client_s3_1.DeleteObjectCommand({
67
+ Bucket: this.bucket,
68
+ Key: fileKey,
69
+ });
70
+ await this.client.send(command);
71
+ }
72
+ async onPreRespond(webResource) {
73
+ if (webResource.href != null) {
74
+ const fileKey = this.getKeyFromHref(webResource.href);
75
+ webResource.href = await this.cachedGetSignedUrl(fileKey);
76
+ }
77
+ return webResource;
78
+ }
79
+ s3SignUrl(fileKey) {
80
+ const command = new client_s3_1.GetObjectCommand({
81
+ Bucket: this.bucket,
82
+ Key: fileKey,
83
+ });
84
+ return (0, s3_request_presigner_1.getSignedUrl)(this.client, command, {
85
+ expiresIn: this.signedUrlExpireTimeSeconds,
86
+ });
87
+ }
88
+ getS3URL(key) {
89
+ return `${this.config.endpoint}/${this.bucket}/${key}`;
90
+ }
91
+ getKeyFromHref(href) {
92
+ const hrefWithoutParams = (0, __1.normalizeHref)(href);
93
+ return hrefWithoutParams.substring(hrefWithoutParams.lastIndexOf('/') + 1);
94
+ }
95
+ }
96
+ exports.S3Handler = S3Handler;
97
+ //# sourceMappingURL=S3Handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"S3Handler.js","sourceRoot":"","sources":["../../../src/webresource-handler/handlers/S3Handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './NoopHandler';
2
+ export * from './S3Handler';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./NoopHandler"), exports);
18
+ __exportStar(require("./S3Handler"), exports);
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/webresource-handler/handlers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,8CAA4B"}
@@ -0,0 +1,34 @@
1
+ /// <reference types="node" />
2
+ import type * as Express from 'express';
3
+ import type * as stream from 'node:stream';
4
+ import type { WebResourceType as WebResource } from '@balena/sbvr-types';
5
+ import { TypedError } from 'typed-error';
6
+ export * from './handlers';
7
+ export interface IncomingFile {
8
+ fieldname: string;
9
+ originalname: string;
10
+ encoding: string;
11
+ mimetype: string;
12
+ stream: stream.Readable;
13
+ }
14
+ export interface UploadResponse {
15
+ size: number;
16
+ filename: string;
17
+ }
18
+ export interface WebResourceHandler {
19
+ handleFile: (resource: IncomingFile) => Promise<UploadResponse>;
20
+ removeFile: (fileReference: string) => Promise<void>;
21
+ onPreRespond: (webResource: WebResource) => Promise<WebResource>;
22
+ }
23
+ export declare class WebResourceError extends TypedError {
24
+ }
25
+ export declare class FileSizeExceededError extends WebResourceError {
26
+ name: string;
27
+ constructor(maxSize: number);
28
+ }
29
+ export declare const setupWebresourceHandler: (handler: WebResourceHandler) => void;
30
+ export declare const getWebresourceHandler: () => WebResourceHandler | undefined;
31
+ export declare const getUploaderMiddlware: (handler: WebResourceHandler) => Express.RequestHandler;
32
+ export declare const normalizeHref: (href: string) => string;
33
+ export declare const getDefaultHandler: () => WebResourceHandler;
34
+ export declare const setupUploadHooks: (handler: WebResourceHandler, apiRoot: string, resourceName: string) => void;