@dbos-inc/dbos-sdk 0.7.25-preview → 0.8.12-preview

Sign up to get free protection for your applications and to get access to all the features.
Files changed (125) hide show
  1. package/dist/src/cloud-cli/applications/configure.d.ts.map +1 -1
  2. package/dist/src/cloud-cli/applications/configure.js +12 -2
  3. package/dist/src/cloud-cli/applications/configure.js.map +1 -1
  4. package/dist/src/cloud-cli/applications/delete-app.js +1 -1
  5. package/dist/src/cloud-cli/applications/delete-app.js.map +1 -1
  6. package/dist/src/cloud-cli/applications/deploy-app-code.d.ts.map +1 -1
  7. package/dist/src/cloud-cli/applications/deploy-app-code.js +10 -2
  8. package/dist/src/cloud-cli/applications/deploy-app-code.js.map +1 -1
  9. package/dist/src/cloud-cli/applications/get-app-logs.js +1 -1
  10. package/dist/src/cloud-cli/applications/get-app-logs.js.map +1 -1
  11. package/dist/src/cloud-cli/applications/list-apps.js +1 -1
  12. package/dist/src/cloud-cli/applications/list-apps.js.map +1 -1
  13. package/dist/src/cloud-cli/applications/register-app.js +1 -1
  14. package/dist/src/cloud-cli/applications/register-app.js.map +1 -1
  15. package/dist/src/cloud-cli/applications/update-app.d.ts.map +1 -1
  16. package/dist/src/cloud-cli/applications/update-app.js +3 -2
  17. package/dist/src/cloud-cli/applications/update-app.js.map +1 -1
  18. package/dist/src/cloud-cli/cli.js +19 -7
  19. package/dist/src/cloud-cli/cli.js.map +1 -1
  20. package/dist/src/cloud-cli/login.d.ts.map +1 -1
  21. package/dist/src/cloud-cli/login.js +3 -2
  22. package/dist/src/cloud-cli/login.js.map +1 -1
  23. package/dist/src/cloud-cli/register.js +1 -1
  24. package/dist/src/cloud-cli/register.js.map +1 -1
  25. package/dist/src/cloud-cli/userdb.d.ts +2 -0
  26. package/dist/src/cloud-cli/userdb.d.ts.map +1 -1
  27. package/dist/src/cloud-cli/userdb.js +102 -8
  28. package/dist/src/cloud-cli/userdb.js.map +1 -1
  29. package/dist/src/communicator.d.ts +3 -2
  30. package/dist/src/communicator.d.ts.map +1 -1
  31. package/dist/src/communicator.js.map +1 -1
  32. package/dist/src/context.d.ts +3 -3
  33. package/dist/src/context.d.ts.map +1 -1
  34. package/dist/src/context.js +8 -8
  35. package/dist/src/context.js.map +1 -1
  36. package/dist/src/dbos-executor.d.ts +19 -7
  37. package/dist/src/dbos-executor.d.ts.map +1 -1
  38. package/dist/src/dbos-executor.js +186 -67
  39. package/dist/src/dbos-executor.js.map +1 -1
  40. package/dist/src/dbos-runtime/cli.d.ts +0 -1
  41. package/dist/src/dbos-runtime/cli.d.ts.map +1 -1
  42. package/dist/src/dbos-runtime/cli.js +14 -2
  43. package/dist/src/dbos-runtime/cli.js.map +1 -1
  44. package/dist/src/dbos-runtime/config.d.ts +3 -0
  45. package/dist/src/dbos-runtime/config.d.ts.map +1 -1
  46. package/dist/src/dbos-runtime/config.js +0 -1
  47. package/dist/src/dbos-runtime/config.js.map +1 -1
  48. package/dist/src/dbos-runtime/debug.d.ts +4 -0
  49. package/dist/src/dbos-runtime/debug.d.ts.map +1 -0
  50. package/dist/src/dbos-runtime/debug.js +23 -0
  51. package/dist/src/dbos-runtime/debug.js.map +1 -0
  52. package/dist/src/dbos-runtime/runtime.d.ts +2 -2
  53. package/dist/src/dbos-runtime/runtime.d.ts.map +1 -1
  54. package/dist/src/dbos-runtime/runtime.js +20 -21
  55. package/dist/src/dbos-runtime/runtime.js.map +1 -1
  56. package/dist/src/debugger/debug_workflow.d.ts +8 -8
  57. package/dist/src/debugger/debug_workflow.d.ts.map +1 -1
  58. package/dist/src/debugger/debug_workflow.js +107 -36
  59. package/dist/src/debugger/debug_workflow.js.map +1 -1
  60. package/dist/src/httpServer/handler.d.ts +1 -1
  61. package/dist/src/httpServer/handler.d.ts.map +1 -1
  62. package/dist/src/httpServer/handler.js +14 -14
  63. package/dist/src/httpServer/handler.js.map +1 -1
  64. package/dist/src/httpServer/server.d.ts +4 -4
  65. package/dist/src/httpServer/server.d.ts.map +1 -1
  66. package/dist/src/httpServer/server.js +17 -17
  67. package/dist/src/httpServer/server.js.map +1 -1
  68. package/dist/src/{dbos-runtime → staticAnalysis}/TypeParser.d.ts +4 -0
  69. package/dist/src/staticAnalysis/TypeParser.d.ts.map +1 -0
  70. package/dist/src/{dbos-runtime → staticAnalysis}/TypeParser.js +34 -1
  71. package/dist/src/staticAnalysis/TypeParser.js.map +1 -0
  72. package/dist/src/{dbos-runtime → staticAnalysis}/openApi.d.ts.map +1 -1
  73. package/dist/src/{dbos-runtime → staticAnalysis}/openApi.js +1 -31
  74. package/dist/src/staticAnalysis/openApi.js.map +1 -0
  75. package/dist/src/staticAnalysis/tsDiagUtil.d.ts.map +1 -0
  76. package/dist/src/staticAnalysis/tsDiagUtil.js.map +1 -0
  77. package/dist/src/system_database.d.ts +22 -9
  78. package/dist/src/system_database.d.ts.map +1 -1
  79. package/dist/src/system_database.js +44 -42
  80. package/dist/src/system_database.js.map +1 -1
  81. package/dist/src/telemetry/collector.d.ts +5 -5
  82. package/dist/src/telemetry/collector.d.ts.map +1 -1
  83. package/dist/src/telemetry/collector.js +5 -17
  84. package/dist/src/telemetry/collector.js.map +1 -1
  85. package/dist/src/telemetry/exporters.d.ts +11 -24
  86. package/dist/src/telemetry/exporters.d.ts.map +1 -1
  87. package/dist/src/telemetry/exporters.js +42 -129
  88. package/dist/src/telemetry/exporters.js.map +1 -1
  89. package/dist/src/telemetry/index.d.ts +6 -2
  90. package/dist/src/telemetry/index.d.ts.map +1 -1
  91. package/dist/src/telemetry/index.js +16 -0
  92. package/dist/src/telemetry/index.js.map +1 -1
  93. package/dist/src/telemetry/logs.d.ts +35 -11
  94. package/dist/src/telemetry/logs.d.ts.map +1 -1
  95. package/dist/src/telemetry/logs.js +158 -53
  96. package/dist/src/telemetry/logs.js.map +1 -1
  97. package/dist/src/telemetry/traces.d.ts +1 -6
  98. package/dist/src/telemetry/traces.d.ts.map +1 -1
  99. package/dist/src/telemetry/traces.js +2 -34
  100. package/dist/src/telemetry/traces.js.map +1 -1
  101. package/dist/src/testing/testing_runtime.d.ts +1 -1
  102. package/dist/src/testing/testing_runtime.d.ts.map +1 -1
  103. package/dist/src/testing/testing_runtime.js +8 -2
  104. package/dist/src/testing/testing_runtime.js.map +1 -1
  105. package/dist/src/transaction.d.ts +1 -1
  106. package/dist/src/transaction.d.ts.map +1 -1
  107. package/dist/src/workflow.d.ts +16 -1
  108. package/dist/src/workflow.d.ts.map +1 -1
  109. package/dist/src/workflow.js +103 -61
  110. package/dist/src/workflow.js.map +1 -1
  111. package/examples/hello/README.md +1 -1
  112. package/examples/hello/dbos-config.yaml +3 -0
  113. package/package.json +3 -2
  114. package/dist/src/dbos-runtime/TypeParser.d.ts.map +0 -1
  115. package/dist/src/dbos-runtime/TypeParser.js.map +0 -1
  116. package/dist/src/dbos-runtime/openApi.js.map +0 -1
  117. package/dist/src/dbos-runtime/tsDiagUtil.d.ts.map +0 -1
  118. package/dist/src/dbos-runtime/tsDiagUtil.js.map +0 -1
  119. package/dist/src/telemetry/signals.d.ts +0 -20
  120. package/dist/src/telemetry/signals.d.ts.map +0 -1
  121. package/dist/src/telemetry/signals.js +0 -11
  122. package/dist/src/telemetry/signals.js.map +0 -1
  123. /package/dist/src/{dbos-runtime → staticAnalysis}/openApi.d.ts +0 -0
  124. /package/dist/src/{dbos-runtime → staticAnalysis}/tsDiagUtil.d.ts +0 -0
  125. /package/dist/src/{dbos-runtime → staticAnalysis}/tsDiagUtil.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"communicator.d.ts","sourceRoot":"","sources":["../../src/communicator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,+BAA+B,CAAC;AACrD,OAAO,EAAE,aAAa,IAAI,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAGzD,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,mBAAmB,EAAE,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAErG,MAAM,WAAW,kBAAkB;IACjC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IAEtD,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,qBAAa,uBAAwB,SAAQ,eAAgB,YAAW,mBAAmB;IAEzF,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBAGjB,eAAe,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM;CAY/I"}
1
+ {"version":3,"file":"communicator.d.ts","sourceRoot":"","sources":["../../src/communicator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,+BAA+B,CAAC;AACrD,OAAO,EAAE,YAAY,IAAI,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAGjE,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,mBAAmB,EAAE,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAErG,MAAM,WAAW,kBAAkB;IACjC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IAEtD,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,qBAAa,uBAAwB,SAAQ,eAAgB,YAAW,mBAAmB;IACzF,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBAGjB,eAAe,EAAE,mBAAmB,GAAG,oBAAoB,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM;CAYtK"}
@@ -1 +1 @@
1
- {"version":3,"file":"communicator.js","sourceRoot":"","sources":["../../src/communicator.ts"],"names":[],"mappings":";;;AAGA,uCAAyD;AAkBzD,MAAa,uBAAwB,SAAQ,yBAAe;IAEjD,UAAU,CAAS;IACnB,cAAc,CAAU;IACxB,eAAe,CAAS;IACxB,WAAW,CAAS;IACpB,WAAW,CAAS;IAE7B,iCAAiC;IACjC,YAAY,eAAoC,EAAE,UAAkB,EAAE,IAAU,EAAE,MAAc,EAAE,MAA0B,EAAE,QAAgB;QAC5I,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;QAC/C,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,IAAI,CAAC;QACpD,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;QAC3C,IAAI,eAAe,CAAC,iBAAiB,EAAE;YACrC,mEAAmE;YAClE,IAAI,CAAC,iBAAiB,GAAG,eAAe,CAAC,iBAAiB,CAAC;SAC7D;IACH,CAAC;CACF;AArBD,0DAqBC"}
1
+ {"version":3,"file":"communicator.js","sourceRoot":"","sources":["../../src/communicator.ts"],"names":[],"mappings":";;;AAGA,uCAAyD;AAmBzD,MAAa,uBAAwB,SAAQ,yBAAe;IACjD,UAAU,CAAS;IACnB,cAAc,CAAU;IACxB,eAAe,CAAS;IACxB,WAAW,CAAS;IACpB,WAAW,CAAS;IAE7B,iCAAiC;IACjC,YAAY,eAA2D,EAAE,UAAkB,EAAE,IAAU,EAAE,MAAc,EAAE,MAA0B,EAAE,QAAgB;QACnK,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;QAC/C,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,IAAI,CAAC;QACpD,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;QAC3C,IAAI,eAAe,CAAC,iBAAiB,EAAE;YACrC,mEAAmE;YACnE,IAAI,CAAC,iBAAiB,GAAG,eAAe,CAAC,iBAAiB,CAAC;SAC5D;IACH,CAAC;CACF;AApBD,0DAoBC"}
@@ -1,7 +1,7 @@
1
1
  /// <reference types="node" />
2
2
  /// <reference types="node" />
3
3
  import { Span } from "@opentelemetry/sdk-trace-base";
4
- import { WinstonLogger as Logger, Logger as DBOSLogger } from "./telemetry/logs";
4
+ import { GlobalLogger as Logger, Logger as DBOSLogger } from "./telemetry/logs";
5
5
  import { IncomingHttpHeaders } from "http";
6
6
  import { ParsedUrlQuery } from "querystring";
7
7
  import { DBOSExecutor } from "./dbos-executor";
@@ -47,11 +47,11 @@ export declare class DBOSContextImpl implements DBOSContext {
47
47
  * TODO : move logger and application, getConfig to a BaseContext which is at the root of all contexts
48
48
  */
49
49
  export declare class InitContext {
50
- readonly wfe: DBOSExecutor;
50
+ readonly dbosExec: DBOSExecutor;
51
51
  readonly logger: Logger;
52
52
  private userDatabase;
53
53
  private application;
54
- constructor(wfe: DBOSExecutor);
54
+ constructor(dbosExec: DBOSExecutor);
55
55
  createUserSchema(): Promise<void>;
56
56
  dropUserSchema(): Promise<void>;
57
57
  queryUserDB<R>(sql: string, ...params: unknown[]): Promise<R[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,+BAA+B,CAAC;AACrD,OAAO,EAAE,aAAa,IAAI,MAAM,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAI/C,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,mBAAmB,CAAC;IACvC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAEpB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;IACzC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC;CAC/C;AAED,qBAAa,eAAgB,YAAW,WAAW;IAQrC,QAAQ,CAAC,aAAa,EAAE,MAAM;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI;IAP/D,OAAO,EAAE,WAAW,CAAM;IAC1B,iBAAiB,EAAE,MAAM,CAAM;IAC/B,kBAAkB,EAAE,MAAM,EAAE,CAAM;IAClC,WAAW,EAAE,MAAM,CAAM;IACzB,YAAY,EAAE,MAAM,CAAM;IAC1B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;gBAEP,aAAa,EAAE,MAAM,EAAW,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,eAAe;IAW5G,mCAAmC;IAEnC,iBAAiB,CAAC,EAAE,GAAG,CAAC;IACxB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IACxC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC;CAmB9C;AAGD;;GAEG;AACH,qBAAa,WAAW;IASV,QAAQ,CAAC,GAAG,EAAE,YAAY;IAPtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAGxB,OAAO,CAAC,YAAY,CAAe;IAEnC,OAAO,CAAC,WAAW,CAAM;gBAEJ,GAAG,EAAE,YAAY;IAOtC,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/B,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAK/D,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IACxC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC;CAmB9C"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"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"}
@@ -16,7 +16,6 @@ class DBOSContextImpl {
16
16
  constructor(operationName, span, logger, parentCtx) {
17
17
  this.operationName = operationName;
18
18
  this.span = span;
19
- this.logger = new logs_1.Logger(logger, this);
20
19
  if (parentCtx) {
21
20
  this.request = parentCtx.request;
22
21
  this.authenticatedUser = parentCtx.authenticatedUser;
@@ -24,6 +23,7 @@ class DBOSContextImpl {
24
23
  this.assumedRole = parentCtx.assumedRole;
25
24
  this.workflowUUID = parentCtx.workflowUUID;
26
25
  }
26
+ this.logger = new logs_1.Logger(logger, this);
27
27
  }
28
28
  /*** Application configuration ***/
29
29
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -50,18 +50,18 @@ exports.DBOSContextImpl = DBOSContextImpl;
50
50
  * TODO : move logger and application, getConfig to a BaseContext which is at the root of all contexts
51
51
  */
52
52
  class InitContext {
53
- wfe;
53
+ dbosExec;
54
54
  logger;
55
55
  // All private Not exposed
56
56
  userDatabase;
57
57
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
58
58
  application;
59
- constructor(wfe) {
60
- this.wfe = wfe;
61
- this.logger = wfe.logger;
62
- this.userDatabase = wfe.userDatabase;
59
+ constructor(dbosExec) {
60
+ this.dbosExec = dbosExec;
61
+ this.logger = dbosExec.logger;
62
+ this.userDatabase = dbosExec.userDatabase;
63
63
  // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
64
- this.application = wfe.config.application;
64
+ this.application = dbosExec.config.application;
65
65
  }
66
66
  createUserSchema() {
67
67
  return this.userDatabase.createSchema();
@@ -83,7 +83,7 @@ class InitContext {
83
83
  }
84
84
  // If the key is found and the default value is provided, check whether the value is of the same type.
85
85
  // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
86
- const value = (0, lodash_1.get)(this.wfe.config.application, key);
86
+ const value = (0, lodash_1.get)(this.dbosExec.config.application, key);
87
87
  if (defaultValue && typeof value !== typeof defaultValue) {
88
88
  throw new error_1.DBOSConfigKeyTypeError(key, typeof defaultValue, typeof value);
89
89
  }
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ import { Transaction, TransactionConfig } from './transaction';
4
4
  import { CommunicatorConfig, Communicator } from './communicator';
5
5
  import { TelemetryCollector } from './telemetry/collector';
6
6
  import { Tracer } from './telemetry/traces';
7
- import { WinstonLogger as Logger } from './telemetry/logs';
7
+ import { GlobalLogger as Logger } from './telemetry/logs';
8
8
  import { TelemetryConfig } from './telemetry';
9
9
  import { PoolConfig } from 'pg';
10
10
  import { SystemDatabase } from './system_database';
@@ -13,6 +13,7 @@ import { MethodRegistrationBase } from './decorators';
13
13
  export interface DBOSNull {
14
14
  }
15
15
  export declare const dbosNull: DBOSNull;
16
+ export declare const DBOSExecutorIDHeader = "dbos-executor-id";
16
17
  export interface DBOSConfig {
17
18
  readonly poolConfig: PoolConfig;
18
19
  readonly userDbclient?: UserDatabaseName;
@@ -23,27 +24,37 @@ export interface DBOSConfig {
23
24
  readonly dbClientMetadata?: any;
24
25
  readonly debugProxy?: string;
25
26
  }
26
- interface WorkflowInfo<T extends any[], R> {
27
- workflow: Workflow<T, R>;
27
+ interface WorkflowInfo {
28
+ workflow: Workflow<any, any>;
28
29
  config: WorkflowConfig;
29
30
  }
31
+ interface TransactionInfo {
32
+ transaction: Transaction<any, any>;
33
+ config: TransactionConfig;
34
+ }
35
+ interface CommunicatorInfo {
36
+ communicator: Communicator<any, any>;
37
+ config: CommunicatorConfig;
38
+ }
30
39
  export declare class DBOSExecutor {
31
40
  #private;
32
41
  readonly config: DBOSConfig;
33
42
  initialized: boolean;
34
43
  userDatabase: UserDatabase;
35
44
  readonly systemDatabase: SystemDatabase;
36
- readonly tempWorkflowName = "temp_workflow";
37
- readonly workflowInfoMap: Map<string, WorkflowInfo<any, any>>;
38
- readonly transactionConfigMap: Map<string, TransactionConfig>;
39
- readonly communicatorConfigMap: Map<string, CommunicatorConfig>;
45
+ static readonly tempWorkflowName = "temp_workflow";
46
+ readonly workflowInfoMap: Map<string, WorkflowInfo>;
47
+ readonly transactionInfoMap: Map<string, TransactionInfo>;
48
+ readonly communicatorInfoMap: Map<string, CommunicatorInfo>;
40
49
  readonly registeredOperations: Array<MethodRegistrationBase>;
41
50
  readonly pendingWorkflowMap: Map<string, Promise<unknown>>;
51
+ readonly pendingAsyncWrites: Map<string, Promise<unknown>>;
42
52
  readonly telemetryCollector: TelemetryCollector;
43
53
  readonly flushBufferIntervalMs: number;
44
54
  readonly flushBufferID: NodeJS.Timeout;
45
55
  static readonly defaultNotificationTimeoutSec = 60;
46
56
  readonly debugMode: boolean;
57
+ static systemDBSchemaName: string;
47
58
  readonly logger: Logger;
48
59
  readonly tracer: Tracer;
49
60
  entities: Function[];
@@ -73,6 +84,7 @@ export declare class DBOSExecutor {
73
84
  * It runs to completion all pending workflows that were executing when the previous executor failed.
74
85
  */
75
86
  recoverPendingWorkflows(executorIDs?: string[]): Promise<WorkflowHandle<any>[]>;
87
+ executeWorkflowUUID(workflowUUID: string): Promise<WorkflowHandle<unknown>>;
76
88
  /**
77
89
  * Periodically flush the workflow output buffer to the system database.
78
90
  */
@@ -1 +1 @@
1
- {"version":3,"file":"dbos-executor.d.ts","sourceRoot":"","sources":["../../src/dbos-executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dbos-executor.d.ts","sourceRoot":"","sources":["../../src/dbos-executor.ts"],"names":[],"mappings":";AAQA,OAAO,EAEL,QAAQ,EACR,cAAc,EAEd,cAAc,EACd,cAAc,EAKf,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAkB,WAAW,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,YAAY,IAAI,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,cAAc,EAAkD,MAAM,mBAAmB,CAAC;AAEnG,OAAO,EAGL,YAAY,EAEZ,gBAAgB,EAGjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,sBAAsB,EAA6E,MAAM,cAAc,CAAC;AAQjI,MAAM,WAAW,QAAQ;CAAI;AAC7B,eAAO,MAAM,QAAQ,EAAE,QAAa,CAAC;AACrC,eAAO,MAAM,oBAAoB,qBAAqB,CAAC;AAGvD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,YAAY,CAAC,EAAE,gBAAgB,CAAC;IACzC,QAAQ,CAAC,SAAS,CAAC,EAAE,eAAe,CAAC;IACrC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC;IAC3B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,GAAG,CAAC;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,UAAU,YAAY;IACpB,QAAQ,EAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC7B,MAAM,EAAE,cAAc,CAAC;CACxB;AAED,UAAU,eAAe;IACvB,WAAW,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACnC,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AAED,UAAU,gBAAgB;IACxB,YAAY,EAAE,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACrC,MAAM,EAAE,kBAAkB,CAAC;CAC5B;AAQD,qBAAa,YAAY;;IA0CX,QAAQ,CAAC,MAAM,EAAE,UAAU;IAzCvC,WAAW,EAAE,OAAO,CAAC;IAErB,YAAY,EAAE,YAAY,CAAmC;IAE7D,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IAGxC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,mBAAmB;IAEnD,QAAQ,CAAC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAUhD;IACH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAa;IACtE,QAAQ,CAAC,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAa;IACxE,QAAQ,CAAC,oBAAoB,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAM;IAClE,QAAQ,CAAC,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAa;IACvE,QAAQ,CAAC,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAa;IAEvE,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IAChD,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAQ;IAC9C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC;IAEvC,MAAM,CAAC,QAAQ,CAAC,6BAA6B,MAAM;IAEnD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,MAAM,CAAC,kBAAkB,SAAY;IAErC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,QAAQ,EAAE,QAAQ,EAAE,CAAM;gBAGL,MAAM,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,cAAc;IA2CxE,iBAAiB;IAwEX,IAAI,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAsDzC,OAAO;IAmDP,QAAQ,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAQhH,gBAAgB,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAuH9K;;OAEG;IAEG,aAAa,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IA8BrK,WAAW,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAWvG,QAAQ,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAWxG,IAAI,CAAC,CAAC,SAAS,WAAW,CAAC,GAAG,CAAC,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWnI;;OAEG;IACG,QAAQ,CAAC,CAAC,SAAS,WAAW,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,GAAE,MAAmD,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAIrK;;OAEG;IACH,gBAAgB,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC;IAS5D;;;OAGG;IACG,uBAAuB,CAAC,WAAW,GAAE,MAAM,EAAc,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;IAmB1F,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAuEjF;;OAEG;IACG,yBAAyB;IAM/B,qBAAqB;CAatB"}
@@ -3,14 +3,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.DBOSExecutor = exports.dbosNull = void 0;
6
+ exports.DBOSExecutor = exports.DBOSExecutorIDHeader = exports.dbosNull = void 0;
7
7
  /* eslint-disable @typescript-eslint/no-explicit-any */
8
8
  const error_1 = require("./error");
9
9
  const workflow_1 = require("./workflow");
10
- const exporters_1 = require("./telemetry/exporters");
10
+ const transaction_1 = require("./transaction");
11
11
  const collector_1 = require("./telemetry/collector");
12
12
  const traces_1 = require("./telemetry/traces");
13
13
  const logs_1 = require("./telemetry/logs");
14
+ const exporters_1 = require("./telemetry/exporters");
14
15
  const system_database_1 = require("./system_database");
15
16
  const uuid_1 = require("uuid");
16
17
  const user_database_1 = require("./user_database");
@@ -19,7 +20,14 @@ const api_1 = require("@opentelemetry/api");
19
20
  const knex_1 = __importDefault(require("knex"));
20
21
  const context_1 = require("./context");
21
22
  const debug_workflow_1 = require("./debugger/debug_workflow");
23
+ const serialize_error_1 = require("serialize-error");
22
24
  exports.dbosNull = {};
25
+ exports.DBOSExecutorIDHeader = "dbos-executor-id";
26
+ const TempWorkflowType = {
27
+ transaction: "transaction",
28
+ external: "external",
29
+ send: "send",
30
+ };
23
31
  class DBOSExecutor {
24
32
  config;
25
33
  initialized;
@@ -28,11 +36,11 @@ class DBOSExecutor {
28
36
  // System Database
29
37
  systemDatabase;
30
38
  // Temporary workflows are created by calling transaction/send/recv directly from the executor class
31
- tempWorkflowName = "temp_workflow";
39
+ static tempWorkflowName = "temp_workflow";
32
40
  workflowInfoMap = new Map([
33
41
  // We initialize the map with an entry for temporary workflows.
34
42
  [
35
- this.tempWorkflowName,
43
+ DBOSExecutor.tempWorkflowName,
36
44
  {
37
45
  // eslint-disable-next-line @typescript-eslint/require-await
38
46
  workflow: async () => this.logger.error("UNREACHABLE: Indirect invoke of temp workflow"),
@@ -40,15 +48,17 @@ class DBOSExecutor {
40
48
  },
41
49
  ],
42
50
  ]);
43
- transactionConfigMap = new Map();
44
- communicatorConfigMap = new Map();
51
+ transactionInfoMap = new Map();
52
+ communicatorInfoMap = new Map();
45
53
  registeredOperations = [];
46
- pendingWorkflowMap = new Map(); // Map from workflowUUID to workflow promise.
54
+ pendingWorkflowMap = new Map(); // Map from workflowUUID to workflow promise
55
+ pendingAsyncWrites = new Map(); // Map from workflowUUID to asynchronous write promise
47
56
  telemetryCollector;
48
57
  flushBufferIntervalMs = 1000;
49
58
  flushBufferID;
50
59
  static defaultNotificationTimeoutSec = 60;
51
60
  debugMode;
61
+ static systemDBSchemaName = "public";
52
62
  logger;
53
63
  tracer;
54
64
  // eslint-disable-next-line @typescript-eslint/ban-types
@@ -57,9 +67,28 @@ class DBOSExecutor {
57
67
  constructor(config, systemDatabase) {
58
68
  this.config = config;
59
69
  this.debugMode = config.debugProxy ? true : false;
60
- this.logger = (0, logs_1.createGlobalLogger)(this.config.telemetry?.logs);
70
+ if (config.telemetry?.OTLPExporter) {
71
+ const OTLPExporter = new exporters_1.TelemetryExporter(config.telemetry.OTLPExporter);
72
+ this.telemetryCollector = new collector_1.TelemetryCollector(OTLPExporter);
73
+ }
74
+ else {
75
+ // We always an collector to drain the signals queue, even if we don't have an exporter.
76
+ this.telemetryCollector = new collector_1.TelemetryCollector();
77
+ }
78
+ this.logger = new logs_1.GlobalLogger(this.telemetryCollector, this.config.telemetry?.logs);
79
+ this.tracer = new traces_1.Tracer(this.telemetryCollector);
61
80
  if (this.debugMode) {
62
81
  this.logger.info("Running in debug mode!");
82
+ try {
83
+ const url = new URL(this.config.debugProxy);
84
+ this.config.poolConfig.host = url.hostname;
85
+ this.config.poolConfig.port = parseInt(url.port, 10);
86
+ this.logger.info(`Debugging mode proxy: ${this.config.poolConfig.host}:${this.config.poolConfig.port}`);
87
+ }
88
+ catch (err) {
89
+ this.logger.error(err);
90
+ throw err;
91
+ }
63
92
  }
64
93
  if (systemDatabase) {
65
94
  this.logger.debug("Using provided system database"); // XXX print the name or something
@@ -75,31 +104,11 @@ class DBOSExecutor {
75
104
  }
76
105
  }, this.flushBufferIntervalMs);
77
106
  this.logger.debug("Started workflow status buffer worker");
78
- // Add Jaeger exporter if tracing is enabled
79
- const telemetryExporters = [];
80
- if (this.config.telemetry?.traces?.enabled && !this.debugMode) {
81
- telemetryExporters.push(new exporters_1.JaegerExporter(this.config.telemetry?.traces?.endpoint));
82
- this.logger.debug("Loaded Jaeger Telemetry Exporter");
83
- }
84
- this.telemetryCollector = new collector_1.TelemetryCollector(telemetryExporters);
85
- this.tracer = new traces_1.Tracer(this.telemetryCollector);
86
107
  this.initialized = false;
87
108
  }
88
109
  configureDbClient() {
89
110
  const userDbClient = this.config.userDbclient;
90
- const userDBConfig = JSON.parse(JSON.stringify(this.config.poolConfig)); // Deep copy
91
- if (this.debugMode) {
92
- try {
93
- const url = new URL(this.config.debugProxy);
94
- userDBConfig.host = url.hostname;
95
- userDBConfig.port = parseInt(url.port, 10);
96
- this.logger.info(`Debugging mode proxy: ${userDBConfig.host}:${userDBConfig.port}`);
97
- }
98
- catch (err) {
99
- this.logger.error(err);
100
- return;
101
- }
102
- }
111
+ const userDBConfig = this.config.poolConfig;
103
112
  if (userDbClient === user_database_1.UserDatabaseName.PRISMA) {
104
113
  // TODO: make Prisma work with debugger proxy.
105
114
  // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-var-requires
@@ -112,8 +121,9 @@ class DBOSExecutor {
112
121
  // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-var-requires
113
122
  const DataSourceExports = require("typeorm");
114
123
  try {
124
+ this.userDatabase = new user_database_1.TypeORMDatabase(
115
125
  // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
116
- this.userDatabase = new user_database_1.TypeORMDatabase(new DataSourceExports.DataSource({
126
+ new DataSourceExports.DataSource({
117
127
  type: "postgres",
118
128
  host: userDBConfig.host,
119
129
  port: userDBConfig.port,
@@ -121,11 +131,12 @@ class DBOSExecutor {
121
131
  password: userDBConfig.password,
122
132
  database: userDBConfig.database,
123
133
  // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access
124
- entities: this.entities
134
+ entities: this.entities,
125
135
  }));
126
136
  }
127
137
  catch (s) {
128
- this.logger.error("Error loading TypeORM user database");
138
+ s.message = `Error loading TypeORM user database: ${s.message}`;
139
+ this.logger.error(s);
129
140
  }
130
141
  this.logger.debug("Loaded TypeORM user database");
131
142
  }
@@ -139,7 +150,7 @@ class DBOSExecutor {
139
150
  password: userDBConfig.password,
140
151
  database: userDBConfig.database,
141
152
  ssl: userDBConfig.ssl,
142
- }
153
+ },
143
154
  };
144
155
  this.userDatabase = new user_database_1.KnexUserDatabase((0, knex_1.default)(knexConfig));
145
156
  this.logger.debug("Loaded Knex user database");
@@ -194,16 +205,14 @@ class DBOSExecutor {
194
205
  // Debug mode doesn't need to initialize the DBs. Everything should appear to be read-only.
195
206
  if (!this.debugMode) {
196
207
  await this.systemDatabase.init();
197
- await this.telemetryCollector.init(this.registeredOperations);
198
208
  await this.userDatabase.init(); // Skip user DB init because we're using the proxy.
199
209
  await this.recoverPendingWorkflows();
200
210
  }
201
211
  }
202
212
  catch (err) {
203
- if (err instanceof Error) {
204
- this.logger.error(`failed to initialize workflow executor: ${err.message}`, err, err.stack);
205
- throw new error_1.DBOSInitializationError(err.message);
206
- }
213
+ err.message = `failed to initialize workflow executor: ${err.message}`;
214
+ this.logger.error(err);
215
+ throw new error_1.DBOSInitializationError(`failed to initialize workflow executor: ${err.message}`);
207
216
  }
208
217
  this.initialized = true;
209
218
  // Only execute init code if under non-debug mode
@@ -223,6 +232,10 @@ class DBOSExecutor {
223
232
  this.logger.info("Waiting for pending workflows to finish.");
224
233
  await Promise.allSettled(this.pendingWorkflowMap.values());
225
234
  }
235
+ if (this.pendingAsyncWrites.size > 0) {
236
+ this.logger.info("Waiting for pending buffer flushes to finish");
237
+ await Promise.allSettled(this.pendingAsyncWrites.values());
238
+ }
226
239
  clearInterval(this.flushBufferID);
227
240
  await this.flushWorkflowStatusBuffer();
228
241
  await this.systemDatabase.destroy();
@@ -231,7 +244,7 @@ class DBOSExecutor {
231
244
  }
232
245
  /* WORKFLOW OPERATIONS */
233
246
  #registerWorkflow(wf, config = {}) {
234
- if (wf.name === this.tempWorkflowName || this.workflowInfoMap.has(wf.name)) {
247
+ if (wf.name === DBOSExecutor.tempWorkflowName || this.workflowInfoMap.has(wf.name)) {
235
248
  throw new error_1.DBOSError(`Repeated workflow name: ${wf.name}`);
236
249
  }
237
250
  const workflowInfo = {
@@ -241,16 +254,24 @@ class DBOSExecutor {
241
254
  this.workflowInfoMap.set(wf.name, workflowInfo);
242
255
  }
243
256
  #registerTransaction(txn, params = {}) {
244
- if (this.transactionConfigMap.has(txn.name)) {
257
+ if (this.transactionInfoMap.has(txn.name)) {
245
258
  throw new error_1.DBOSError(`Repeated Transaction name: ${txn.name}`);
246
259
  }
247
- this.transactionConfigMap.set(txn.name, params);
260
+ const txnInfo = {
261
+ transaction: txn,
262
+ config: params,
263
+ };
264
+ this.transactionInfoMap.set(txn.name, txnInfo);
248
265
  }
249
266
  #registerCommunicator(comm, params = {}) {
250
- if (this.communicatorConfigMap.has(comm.name)) {
267
+ if (this.communicatorInfoMap.has(comm.name)) {
251
268
  throw new error_1.DBOSError(`Repeated Commmunicator name: ${comm.name}`);
252
269
  }
253
- this.communicatorConfigMap.set(comm.name, params);
270
+ const commInfo = {
271
+ communicator: comm,
272
+ config: params,
273
+ };
274
+ this.communicatorInfoMap.set(comm.name, commInfo);
254
275
  }
255
276
  async workflow(wf, params, ...args) {
256
277
  if (this.debugMode) {
@@ -261,31 +282,58 @@ class DBOSExecutor {
261
282
  // If callerUUID and functionID are set, it means the workflow is invoked from within a workflow.
262
283
  async internalWorkflow(wf, params, callerUUID, callerFunctionID, ...args) {
263
284
  const workflowUUID = params.workflowUUID ? params.workflowUUID : this.#generateUUID();
285
+ const presetUUID = params.workflowUUID ? true : false;
264
286
  const wInfo = this.workflowInfoMap.get(wf.name);
265
287
  if (wInfo === undefined) {
266
288
  throw new error_1.DBOSNotRegisteredError(wf.name);
267
289
  }
268
290
  const wConfig = wInfo.config;
269
- const wCtxt = new workflow_1.WorkflowContextImpl(this, params.parentCtx, workflowUUID, wConfig, wf.name);
291
+ const wCtxt = new workflow_1.WorkflowContextImpl(this, params.parentCtx, workflowUUID, wConfig, wf.name, presetUUID);
270
292
  wCtxt.span.setAttributes({ args: JSON.stringify(args) }); // TODO enforce skipLogging & request for hashing
271
- // Synchronously set the workflow's status to PENDING and record workflow inputs. Not needed for temporary workflows.
293
+ let executorID = "local";
294
+ if (wCtxt.request.headers && wCtxt.request.headers[exports.DBOSExecutorIDHeader]) {
295
+ executorID = wCtxt.request.headers[exports.DBOSExecutorIDHeader];
296
+ }
297
+ const internalStatus = {
298
+ workflowUUID: workflowUUID,
299
+ status: workflow_1.StatusString.PENDING,
300
+ name: wf.name,
301
+ authenticatedUser: wCtxt.authenticatedUser,
302
+ output: undefined,
303
+ error: "",
304
+ assumedRole: wCtxt.assumedRole,
305
+ authenticatedRoles: wCtxt.authenticatedRoles,
306
+ request: wCtxt.request,
307
+ executorID: executorID,
308
+ };
309
+ // Synchronously set the workflow's status to PENDING and record workflow inputs.
272
310
  if (!wCtxt.isTempWorkflow) {
273
- args = await this.systemDatabase.initWorkflowStatus(workflowUUID, wf.name, wCtxt.authenticatedUser, wCtxt.assumedRole, wCtxt.authenticatedRoles, wCtxt.request, args);
311
+ args = await this.systemDatabase.initWorkflowStatus(internalStatus, args);
312
+ }
313
+ else {
314
+ // For temporary workflows, instead asynchronously record inputs.
315
+ const setWorkflowInputs = this.systemDatabase
316
+ .setWorkflowInputs(workflowUUID, args)
317
+ .catch((error) => {
318
+ error.message = `Error asynchronously setting workflow inputs: ${error.message}`;
319
+ this.logger.error(error);
320
+ })
321
+ .finally(() => {
322
+ this.pendingAsyncWrites.delete(workflowUUID);
323
+ });
324
+ this.pendingAsyncWrites.set(workflowUUID, setWorkflowInputs);
274
325
  }
275
326
  const runWorkflow = async () => {
276
- // Check if the workflow previously ran.
277
- const previousOutput = await this.systemDatabase.checkWorkflowOutput(workflowUUID);
278
- if (previousOutput !== exports.dbosNull) {
279
- wCtxt.span.setAttribute("cached", true);
280
- wCtxt.span.setStatus({ code: api_1.SpanStatusCode.OK });
281
- this.tracer.endSpan(wCtxt.span);
282
- return previousOutput;
283
- }
284
327
  let result;
285
328
  // Execute the workflow.
286
329
  try {
287
330
  result = await wf(wCtxt, ...args);
288
- this.systemDatabase.bufferWorkflowOutput(workflowUUID, result);
331
+ if (wCtxt.isTempWorkflow) {
332
+ internalStatus.name = `${DBOSExecutor.tempWorkflowName}-${wCtxt.tempWfOperationType}-${wCtxt.tempWfOperationName}`;
333
+ }
334
+ internalStatus.output = result;
335
+ internalStatus.status = workflow_1.StatusString.SUCCESS;
336
+ this.systemDatabase.bufferWorkflowOutput(workflowUUID, internalStatus);
289
337
  wCtxt.span.setStatus({ code: api_1.SpanStatusCode.OK });
290
338
  }
291
339
  catch (err) {
@@ -300,7 +348,12 @@ class DBOSExecutor {
300
348
  // Record the error.
301
349
  const e = err;
302
350
  this.logger.error(e);
303
- await this.systemDatabase.recordWorkflowError(workflowUUID, e);
351
+ if (wCtxt.isTempWorkflow) {
352
+ internalStatus.name = `${DBOSExecutor.tempWorkflowName}-${wCtxt.tempWfOperationType}-${wCtxt.tempWfOperationName}`;
353
+ }
354
+ internalStatus.error = JSON.stringify((0, serialize_error_1.serializeError)(e));
355
+ internalStatus.status = workflow_1.StatusString.ERROR;
356
+ await this.systemDatabase.recordWorkflowError(workflowUUID, internalStatus);
304
357
  // TODO: Log errors, but not in the tests when they're expected.
305
358
  wCtxt.span.setStatus({ code: api_1.SpanStatusCode.ERROR, message: e.message });
306
359
  throw err;
@@ -309,6 +362,21 @@ class DBOSExecutor {
309
362
  finally {
310
363
  this.tracer.endSpan(wCtxt.span);
311
364
  }
365
+ // Asynchronously flush the result buffer.
366
+ const resultBufferFlush = this.userDatabase
367
+ .transaction(async (client) => {
368
+ if (wCtxt.resultBuffer.size > 0) {
369
+ await wCtxt.flushResultBuffer(client);
370
+ }
371
+ }, { isolationLevel: transaction_1.IsolationLevel.ReadCommitted })
372
+ .catch((error) => {
373
+ error.message = `Error asynchronously flushing result buffer: ${error.message}`;
374
+ this.logger.error(error);
375
+ })
376
+ .finally(() => {
377
+ this.pendingAsyncWrites.delete(workflowUUID);
378
+ });
379
+ this.pendingAsyncWrites.set(workflowUUID, resultBufferFlush);
312
380
  return result;
313
381
  };
314
382
  const workflowPromise = runWorkflow();
@@ -358,6 +426,8 @@ class DBOSExecutor {
358
426
  // Create a workflow and call transaction.
359
427
  const temp_workflow = async (ctxt, ...args) => {
360
428
  const ctxtImpl = ctxt;
429
+ ctxtImpl.tempWfOperationType = TempWorkflowType.transaction;
430
+ ctxtImpl.tempWfOperationName = txn.name;
361
431
  return await ctxtImpl.transaction(txn, ...args);
362
432
  };
363
433
  return (await this.workflow(temp_workflow, params, ...args)).getResult();
@@ -366,6 +436,8 @@ class DBOSExecutor {
366
436
  // Create a workflow and call external.
367
437
  const temp_workflow = async (ctxt, ...args) => {
368
438
  const ctxtImpl = ctxt;
439
+ ctxtImpl.tempWfOperationType = TempWorkflowType.external;
440
+ ctxtImpl.tempWfOperationName = commFn.name;
369
441
  return await ctxtImpl.external(commFn, ...args);
370
442
  };
371
443
  return (await this.workflow(temp_workflow, params, ...args)).getResult();
@@ -373,6 +445,8 @@ class DBOSExecutor {
373
445
  async send(destinationUUID, message, topic, idempotencyKey) {
374
446
  // Create a workflow and call send.
375
447
  const temp_workflow = async (ctxt, destinationUUID, message, topic) => {
448
+ const ctxtImpl = ctxt;
449
+ ctxtImpl.tempWfOperationType = TempWorkflowType.send;
376
450
  return await ctxt.send(destinationUUID, message, topic);
377
451
  };
378
452
  const workflowUUID = idempotencyKey ? destinationUUID + idempotencyKey : undefined;
@@ -408,23 +482,68 @@ class DBOSExecutor {
408
482
  const handlerArray = [];
409
483
  for (const workflowUUID of pendingWorkflows) {
410
484
  try {
411
- const wfStatus = await this.systemDatabase.getWorkflowStatus(workflowUUID);
412
- const inputs = await this.systemDatabase.getWorkflowInputs(workflowUUID);
413
- if (!inputs || !wfStatus) {
414
- this.logger.error(`Failed to find inputs during recover, workflow UUID: ${workflowUUID}`);
415
- continue;
416
- }
417
- const wfInfo = this.workflowInfoMap.get(wfStatus.workflowName);
418
- const parentCtx = this.#getRecoveryContext(workflowUUID, wfStatus);
419
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
420
- handlerArray.push(await this.workflow(wfInfo.workflow, { workflowUUID: workflowUUID, parentCtx: parentCtx ?? undefined }, ...inputs));
485
+ handlerArray.push(await this.executeWorkflowUUID(workflowUUID));
421
486
  }
422
487
  catch (e) {
423
- this.logger.warn(`Recovery of workflow ${workflowUUID} failed:`, e);
488
+ this.logger.warn(`Recovery of workflow ${workflowUUID} failed: ${e.message}`);
424
489
  }
425
490
  }
426
491
  return handlerArray;
427
492
  }
493
+ async executeWorkflowUUID(workflowUUID) {
494
+ const wfStatus = await this.systemDatabase.getWorkflowStatus(workflowUUID);
495
+ const inputs = await this.systemDatabase.getWorkflowInputs(workflowUUID);
496
+ if (!inputs || !wfStatus) {
497
+ this.logger.error(`Failed to find inputs for workflowUUID: ${workflowUUID}`);
498
+ throw new error_1.DBOSError(`Failed to find inputs for workflow UUID: ${workflowUUID}`);
499
+ }
500
+ const parentCtx = this.#getRecoveryContext(workflowUUID, wfStatus);
501
+ const wfInfo = this.workflowInfoMap.get(wfStatus.workflowName);
502
+ if (wfInfo) {
503
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
504
+ return this.workflow(wfInfo.workflow, { workflowUUID: workflowUUID, parentCtx: parentCtx ?? undefined }, ...inputs);
505
+ }
506
+ // Should be temporary workflows. Parse the name of the workflow.
507
+ const wfName = wfStatus.workflowName;
508
+ const nameArr = wfName.split("-");
509
+ if (!nameArr[0].startsWith(DBOSExecutor.tempWorkflowName)) {
510
+ throw new error_1.DBOSError(`This should never happen! Cannot find workflow info for a non-temporary workflow! UUID ${workflowUUID}, name ${wfName}`);
511
+ }
512
+ let temp_workflow;
513
+ if (nameArr[1] === TempWorkflowType.transaction) {
514
+ const txnInfo = this.transactionInfoMap.get(nameArr[2]);
515
+ if (!txnInfo) {
516
+ throw new error_1.DBOSError(`Cannot find transaction info for UUID ${workflowUUID}, name ${wfName}`);
517
+ }
518
+ temp_workflow = async (ctxt, ...args) => {
519
+ const ctxtImpl = ctxt;
520
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-argument
521
+ return await ctxtImpl.transaction(txnInfo.transaction, ...args);
522
+ };
523
+ }
524
+ else if (nameArr[1] === TempWorkflowType.external) {
525
+ const commInfo = this.communicatorInfoMap.get(nameArr[2]);
526
+ if (!commInfo) {
527
+ throw new error_1.DBOSError(`Cannot find transaction info for UUID ${workflowUUID}, name ${wfName}`);
528
+ }
529
+ temp_workflow = async (ctxt, ...args) => {
530
+ const ctxtImpl = ctxt;
531
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-argument
532
+ return await ctxtImpl.external(commInfo.communicator, ...args);
533
+ };
534
+ }
535
+ else if (nameArr[1] === TempWorkflowType.send) {
536
+ temp_workflow = async (ctxt, ...args) => {
537
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
538
+ return await ctxt.send(args[0], args[1], args[2]);
539
+ };
540
+ }
541
+ else {
542
+ throw new error_1.DBOSError(`Unrecognized temporary workflow! UUID ${workflowUUID}, name ${wfName}`);
543
+ }
544
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
545
+ return this.workflow(temp_workflow, { workflowUUID: workflowUUID, parentCtx: parentCtx ?? undefined }, ...inputs);
546
+ }
428
547
  #getRecoveryContext(workflowUUID, status) {
429
548
  const span = this.tracer.startSpan(status.workflowName);
430
549
  span.setAttributes({