create-qpq-app 0.1.26 → 0.1.28

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 (379) hide show
  1. package/README.md +4 -0
  2. package/lib/commonjs/cli/runCreateQpqApp.js +15 -1
  3. package/lib/commonjs/cli/runCreateQpqApp.js.map +1 -1
  4. package/lib/commonjs/lib/index.d.ts +1 -1
  5. package/lib/commonjs/lib/index.js +1 -1
  6. package/lib/commonjs/lib/index.js.map +1 -1
  7. package/lib/commonjs/lib/promptText.d.ts +1 -0
  8. package/lib/commonjs/lib/promptText.js +53 -0
  9. package/lib/commonjs/lib/promptText.js.map +1 -0
  10. package/lib/commonjs/steps/005_applyAppIdentity.js +6 -5
  11. package/lib/commonjs/steps/005_applyAppIdentity.js.map +1 -1
  12. package/lib/commonjs/steps/006_applyDomain.js +11 -6
  13. package/lib/commonjs/steps/006_applyDomain.js.map +1 -1
  14. package/lib/commonjs/steps/007_applyDockerHost.d.ts +2 -0
  15. package/lib/commonjs/steps/007_applyDockerHost.js +40 -0
  16. package/lib/commonjs/steps/007_applyDockerHost.js.map +1 -0
  17. package/lib/commonjs/steps/{007_pinRegistryVersions.js → 008_pinRegistryVersions.js} +1 -1
  18. package/lib/commonjs/steps/{007_pinRegistryVersions.js.map → 008_pinRegistryVersions.js.map} +1 -1
  19. package/lib/commonjs/steps/{008_transpileToJavaScript.js → 009_transpileToJavaScript.js} +1 -1
  20. package/lib/commonjs/steps/{008_transpileToJavaScript.js.map → 009_transpileToJavaScript.js.map} +1 -1
  21. package/lib/commonjs/steps/{009_restoreGitignore.js → 010_restoreGitignore.js} +1 -1
  22. package/lib/commonjs/steps/{009_restoreGitignore.js.map → 010_restoreGitignore.js.map} +1 -1
  23. package/lib/commonjs/steps/{010_gitInit.js → 011_gitInit.js} +1 -1
  24. package/lib/commonjs/steps/{010_gitInit.js.map → 011_gitInit.js.map} +1 -1
  25. package/lib/commonjs/steps/{011_npmInstall.js → 012_npmInstall.js} +1 -1
  26. package/lib/commonjs/steps/{011_npmInstall.js.map → 012_npmInstall.js.map} +1 -1
  27. package/lib/commonjs/steps/{012_buildWorkspaces.js → 013_buildWorkspaces.js} +1 -1
  28. package/lib/commonjs/steps/{012_buildWorkspaces.js.map → 013_buildWorkspaces.js.map} +1 -1
  29. package/lib/commonjs/steps/{013_printNextSteps.js → 014_printNextSteps.js} +6 -3
  30. package/lib/commonjs/steps/014_printNextSteps.js.map +1 -0
  31. package/lib/commonjs/steps/index.d.ts +9 -8
  32. package/lib/commonjs/steps/index.js +25 -22
  33. package/lib/commonjs/steps/index.js.map +1 -1
  34. package/lib/commonjs/types/CreateQpqAppAnswers.d.ts +2 -0
  35. package/lib/commonjs/types/CreateQpqAppAnswers.js.map +1 -1
  36. package/lib/esm/cli/runCreateQpqApp.js +15 -1
  37. package/lib/esm/cli/runCreateQpqApp.js.map +1 -1
  38. package/lib/esm/lib/index.d.ts +1 -1
  39. package/lib/esm/lib/index.js +1 -1
  40. package/lib/esm/lib/index.js.map +1 -1
  41. package/lib/esm/lib/promptText.d.ts +1 -0
  42. package/lib/esm/lib/promptText.js +7 -0
  43. package/lib/esm/lib/promptText.js.map +1 -0
  44. package/lib/esm/steps/005_applyAppIdentity.js +6 -5
  45. package/lib/esm/steps/005_applyAppIdentity.js.map +1 -1
  46. package/lib/esm/steps/006_applyDomain.js +11 -6
  47. package/lib/esm/steps/006_applyDomain.js.map +1 -1
  48. package/lib/esm/steps/007_applyDockerHost.d.ts +2 -0
  49. package/lib/esm/steps/007_applyDockerHost.js +30 -0
  50. package/lib/esm/steps/007_applyDockerHost.js.map +1 -0
  51. package/lib/esm/steps/{007_pinRegistryVersions.js → 008_pinRegistryVersions.js} +1 -1
  52. package/lib/esm/steps/{007_pinRegistryVersions.js.map → 008_pinRegistryVersions.js.map} +1 -1
  53. package/lib/esm/steps/{008_transpileToJavaScript.js → 009_transpileToJavaScript.js} +1 -1
  54. package/lib/esm/steps/{008_transpileToJavaScript.js.map → 009_transpileToJavaScript.js.map} +1 -1
  55. package/lib/esm/steps/{009_restoreGitignore.js → 010_restoreGitignore.js} +1 -1
  56. package/lib/esm/steps/{009_restoreGitignore.js.map → 010_restoreGitignore.js.map} +1 -1
  57. package/lib/esm/steps/{010_gitInit.js → 011_gitInit.js} +1 -1
  58. package/lib/esm/steps/{010_gitInit.js.map → 011_gitInit.js.map} +1 -1
  59. package/lib/esm/steps/{011_npmInstall.js → 012_npmInstall.js} +1 -1
  60. package/lib/esm/steps/{011_npmInstall.js.map → 012_npmInstall.js.map} +1 -1
  61. package/lib/esm/steps/{012_buildWorkspaces.js → 013_buildWorkspaces.js} +1 -1
  62. package/lib/esm/steps/{012_buildWorkspaces.js.map → 013_buildWorkspaces.js.map} +1 -1
  63. package/lib/esm/steps/014_printNextSteps.js +24 -0
  64. package/lib/esm/steps/014_printNextSteps.js.map +1 -0
  65. package/lib/esm/steps/index.d.ts +9 -8
  66. package/lib/esm/steps/index.js +10 -8
  67. package/lib/esm/steps/index.js.map +1 -1
  68. package/lib/esm/types/CreateQpqAppAnswers.d.ts +2 -0
  69. package/lib/esm/types/CreateQpqAppAnswers.js.map +1 -1
  70. package/package.json +2 -2
  71. package/template/README.md +4 -3
  72. package/template/apps/qpqjs/bootstrap.qpq.ts +3 -2
  73. package/template/apps/qpqjs/deploy.config.json +42 -9
  74. package/template/apps/qpqjs/devServer.config.ts +13 -0
  75. package/template/apps/qpqjs/packages/constants/src/index.ts +0 -1
  76. package/template/apps/qpqjs/packages/service-utils/src/defineQpqjsService.ts +12 -29
  77. package/template/apps/qpqjs/services/admin/service/src/infrastructure.ts +1 -1
  78. package/template/apps/qpqjs/services/admin/views/src/app/app.tsx +9 -19
  79. package/template/apps/qpqjs/services/design/service/src/infrastructure.ts +1 -1
  80. package/template/apps/qpqjs/services/design/views/src/components/LandingPage/components/NavBar.tsx +2 -10
  81. package/template/apps/qpqjs/services/design/views/src/components/WelcomeScreen/WelcomeScreen.tsx +3 -11
  82. package/template/apps/qpqjs/services/shell/service/src/infrastructure.ts +5 -1
  83. package/template/apps/qpqjs/services/test/models/src/SmokeProbeRecord.ts +3 -0
  84. package/template/apps/qpqjs/services/test/service/src/infrastructure.ts +1 -7
  85. package/template/apps/qpqjs/services/test/service/src/smoke/config/defineSmoke.ts +8 -264
  86. package/template/apps/qpqjs/services/test/service/src/smoke/harness/assert/index.ts +2 -0
  87. package/template/apps/qpqjs/services/test/service/src/smoke/harness/config/defineSmokeHarness.ts +115 -0
  88. package/template/apps/qpqjs/services/test/service/src/smoke/harness/config/index.ts +1 -0
  89. package/template/apps/qpqjs/services/test/service/src/smoke/{constants → harness/constants}/index.ts +0 -2
  90. package/template/apps/qpqjs/services/test/service/src/smoke/harness/index.ts +10 -0
  91. package/template/apps/qpqjs/services/test/service/src/smoke/{logic → harness/logic}/smokeRun/askExecuteSmokeTest.ts +3 -3
  92. package/template/apps/qpqjs/services/test/service/src/smoke/{logic → harness/logic}/smokeRun/askStartSmokeRun.ts +5 -4
  93. package/template/apps/qpqjs/services/test/service/src/smoke/{logic → harness/logic}/smokeRun/index.ts +1 -0
  94. package/template/apps/qpqjs/services/test/service/src/smoke/harness/logic/smokeRun/listSmokeTests.ts +6 -0
  95. package/template/apps/qpqjs/services/test/service/src/smoke/{models → harness/models}/SmokeTestRequestedQueueEvent.ts +1 -1
  96. package/template/apps/qpqjs/services/test/service/src/smoke/harness/models/index.ts +2 -0
  97. package/template/apps/qpqjs/services/test/service/src/smoke/harness/queue/index.ts +1 -0
  98. package/template/apps/qpqjs/services/test/service/src/smoke/harness/types/SmokeSuite.ts +13 -0
  99. package/template/apps/qpqjs/services/test/service/src/smoke/harness/types/index.ts +2 -0
  100. package/template/apps/qpqjs/services/test/service/src/smoke/index.ts +2 -12
  101. package/template/apps/qpqjs/services/test/service/src/smoke/suites/emailReceive/config/defineEmailReceiveSmoke.ts +20 -0
  102. package/template/apps/qpqjs/services/test/service/src/smoke/suites/emailReceive/config/index.ts +1 -0
  103. package/template/apps/qpqjs/services/test/service/src/smoke/suites/emailReceive/constants/SMOKE_EMAIL_RECEIVER.ts +2 -0
  104. package/template/apps/qpqjs/services/test/service/src/smoke/suites/emailReceive/constants/index.ts +1 -0
  105. package/template/apps/qpqjs/services/test/service/src/smoke/suites/emailReceive/emailReceiveSmokeSuite.ts +15 -0
  106. package/template/apps/qpqjs/services/test/service/src/smoke/{email → suites/emailReceive/entry/email}/index.ts +0 -1
  107. package/template/apps/qpqjs/services/test/service/src/smoke/{email → suites/emailReceive/entry/email}/onSmokeEmailReceived.ts +1 -1
  108. package/template/apps/qpqjs/services/test/service/src/smoke/suites/emailReceive/entry/index.ts +1 -0
  109. package/template/apps/qpqjs/services/test/service/src/smoke/suites/emailReceive/index.ts +5 -0
  110. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/emailReceive → suites/emailReceive/logic}/askRunEmailReceiveTest.ts +3 -3
  111. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/emailReceive → suites/emailReceive/logic}/index.ts +1 -0
  112. package/template/apps/qpqjs/services/test/service/src/smoke/suites/encryptedResources/config/defineEncryptedResourcesSmoke.ts +29 -0
  113. package/template/apps/qpqjs/services/test/service/src/smoke/suites/encryptedResources/config/index.ts +1 -0
  114. package/template/apps/qpqjs/services/test/service/src/smoke/suites/encryptedResources/constants/SMOKE_CRYPTO_KEY.ts +5 -0
  115. package/template/apps/qpqjs/services/test/service/src/smoke/suites/encryptedResources/constants/SMOKE_ENCRYPTED_PROBE_DRIVE.ts +2 -0
  116. package/template/apps/qpqjs/services/test/service/src/smoke/suites/encryptedResources/constants/SMOKE_ENCRYPTED_PROBE_STORE.ts +2 -0
  117. package/template/apps/qpqjs/services/test/service/src/smoke/suites/encryptedResources/constants/index.ts +3 -0
  118. package/template/apps/qpqjs/services/test/service/src/smoke/suites/encryptedResources/encryptedResourcesSmokeSuite.ts +9 -0
  119. package/template/apps/qpqjs/services/test/service/src/smoke/suites/encryptedResources/index.ts +4 -0
  120. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/encryptedResources → suites/encryptedResources/logic}/askRunEncryptedResourcesTest.ts +3 -5
  121. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventBus/config/defineEventBusSmoke.ts +21 -0
  122. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventBus/config/index.ts +1 -0
  123. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventBus/constants/SMOKE_PROBE_EVENT_BUS.ts +2 -0
  124. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventBus/constants/SMOKE_PROBE_EVENT_QUEUE.ts +2 -0
  125. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventBus/constants/SMOKE_PROBE_EVENT_TYPE.ts +2 -0
  126. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventBus/constants/index.ts +3 -0
  127. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventBus/entry/index.ts +1 -0
  128. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventBus/entry/queue/index.ts +1 -0
  129. package/template/apps/qpqjs/services/test/service/src/smoke/{queue → suites/eventBus/entry/queue}/onSmokeProbeEvent.ts +1 -1
  130. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventBus/eventBusSmokeSuite.ts +9 -0
  131. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventBus/index.ts +6 -0
  132. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/eventBus → suites/eventBus/logic}/askRunEventBusTest.ts +4 -6
  133. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventBus/models/index.ts +1 -0
  134. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventDoc/config/defineEventDocSmoke.ts +44 -0
  135. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventDoc/config/index.ts +1 -0
  136. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventDoc/constants/index.ts +1 -0
  137. package/template/apps/qpqjs/services/test/service/src/smoke/{constants → suites/eventDoc/constants}/smokeEventDoc.ts +1 -1
  138. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventDoc/entry/index.ts +1 -0
  139. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventDoc/entry/queue/index.ts +1 -0
  140. package/template/apps/qpqjs/services/test/service/src/smoke/{queue → suites/eventDoc/entry/queue}/onSmokeEventDocAppend.ts +3 -3
  141. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventDoc/eventDocSmokeSuite.ts +19 -0
  142. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventDoc/index.ts +7 -0
  143. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/eventDoc → suites/eventDoc/logic}/askAssertContiguousEventIds.ts +1 -1
  144. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/eventDoc → suites/eventDoc/logic}/askAssertSmokeProbeDocState.ts +2 -2
  145. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/eventDoc → suites/eventDoc/logic}/askAwaitSmokeEventDocLog.ts +1 -1
  146. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/eventDoc → suites/eventDoc/logic}/askRunEventDocConcurrentAppendTest.ts +5 -5
  147. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/eventDoc → suites/eventDoc/logic}/askRunEventDocInterleavedBatchAppendTest.ts +4 -4
  148. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventDoc/models/index.ts +2 -0
  149. package/template/apps/qpqjs/services/test/service/src/smoke/{tests → suites}/index.ts +4 -5
  150. package/template/apps/qpqjs/services/test/service/src/smoke/suites/keyValueStore/index.ts +2 -0
  151. package/template/apps/qpqjs/services/test/service/src/smoke/suites/keyValueStore/keyValueStoreSmokeSuite.ts +14 -0
  152. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/crossService → suites/keyValueStore/logic}/askRunCrossServiceKeyValueStoreTest.ts +1 -1
  153. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/keyValueStore → suites/keyValueStore/logic}/askRunKeyValueStoreTest.ts +1 -1
  154. package/template/apps/qpqjs/services/test/service/src/smoke/suites/keyValueStore/logic/index.ts +2 -0
  155. package/template/apps/qpqjs/services/test/service/src/smoke/suites/keyValueStoreStream/config/defineKeyValueStoreStreamSmoke.ts +30 -0
  156. package/template/apps/qpqjs/services/test/service/src/smoke/suites/keyValueStoreStream/config/index.ts +1 -0
  157. package/template/apps/qpqjs/services/test/service/src/smoke/suites/keyValueStoreStream/constants/SMOKE_STREAM_PROBE_STORE.ts +2 -0
  158. package/template/apps/qpqjs/services/test/service/src/smoke/suites/keyValueStoreStream/constants/index.ts +1 -0
  159. package/template/apps/qpqjs/services/test/service/src/smoke/suites/keyValueStoreStream/entry/index.ts +1 -0
  160. package/template/apps/qpqjs/services/test/service/src/smoke/{kvsStream → suites/keyValueStoreStream/entry/kvsStream}/index.ts +0 -1
  161. package/template/apps/qpqjs/services/test/service/src/smoke/{kvsStream → suites/keyValueStoreStream/entry/kvsStream}/onSmokeStreamRecord.ts +6 -4
  162. package/template/apps/qpqjs/services/test/service/src/smoke/suites/keyValueStoreStream/index.ts +5 -0
  163. package/template/apps/qpqjs/services/test/service/src/smoke/suites/keyValueStoreStream/keyValueStoreStreamSmokeSuite.ts +11 -0
  164. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/keyValueStoreStream → suites/keyValueStoreStream/logic}/askRunKeyValueStoreStreamTest.ts +15 -6
  165. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/keyValueStoreStream → suites/keyValueStoreStream/logic}/index.ts +1 -0
  166. package/template/apps/qpqjs/services/test/service/src/smoke/suites/noop/index.ts +2 -0
  167. package/template/apps/qpqjs/services/test/service/src/smoke/suites/noop/noopSmokeSuite.ts +7 -0
  168. package/template/apps/qpqjs/services/test/service/src/smoke/suites/openApi/config/defineOpenApiSmoke.ts +13 -0
  169. package/template/apps/qpqjs/services/test/service/src/smoke/suites/openApi/config/index.ts +1 -0
  170. package/template/apps/qpqjs/services/test/service/src/smoke/suites/openApi/index.ts +4 -0
  171. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/openApi → suites/openApi/logic}/askRunEchoRoundTripTest.ts +1 -1
  172. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/openApi → suites/openApi/logic}/askRunOpenApiDocumentTest.ts +1 -1
  173. package/template/apps/qpqjs/services/test/service/src/smoke/suites/openApi/openApiSmokeSuite.ts +13 -0
  174. package/template/apps/qpqjs/services/test/service/src/smoke/suites/parameter/config/defineParameterSmoke.ts +11 -0
  175. package/template/apps/qpqjs/services/test/service/src/smoke/suites/parameter/config/index.ts +1 -0
  176. package/template/apps/qpqjs/services/test/service/src/smoke/suites/parameter/constants/SMOKE_PROBE_PARAMETER.ts +2 -0
  177. package/template/apps/qpqjs/services/test/service/src/smoke/suites/parameter/constants/SMOKE_PROBE_PARAMETER_VALUE.ts +2 -0
  178. package/template/apps/qpqjs/services/test/service/src/smoke/suites/parameter/constants/index.ts +2 -0
  179. package/template/apps/qpqjs/services/test/service/src/smoke/suites/parameter/index.ts +4 -0
  180. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/parameter → suites/parameter/logic}/askRunParameterTest.ts +3 -5
  181. package/template/apps/qpqjs/services/test/service/src/smoke/suites/parameter/parameterSmokeSuite.ts +9 -0
  182. package/template/apps/qpqjs/services/test/service/src/{tick/config/defineTick.ts → smoke/suites/schedule/config/defineScheduleSmoke.ts} +1 -1
  183. package/template/apps/qpqjs/services/test/service/src/smoke/suites/schedule/config/index.ts +1 -0
  184. package/template/apps/qpqjs/services/test/service/src/smoke/suites/schedule/entry/index.ts +2 -0
  185. package/template/apps/qpqjs/services/test/service/src/smoke/suites/schedule/index.ts +6 -0
  186. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/schedule → suites/schedule/logic}/askRunScheduleTest.ts +4 -4
  187. package/template/apps/qpqjs/services/test/service/src/smoke/suites/schedule/scheduleSmokeSuite.ts +9 -0
  188. package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedKeyValueStore/config/defineScopedKeyValueStoreSmoke.ts +19 -0
  189. package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedKeyValueStore/config/index.ts +1 -0
  190. package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedKeyValueStore/constants/SMOKE_SCOPED_PROBE_STORE.ts +2 -0
  191. package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedKeyValueStore/constants/index.ts +1 -0
  192. package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedKeyValueStore/index.ts +4 -0
  193. package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedKeyValueStore/logic/askRunScopedKeyValueStoreTest.ts +256 -0
  194. package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedKeyValueStore/scopedKeyValueStoreSmokeSuite.ts +11 -0
  195. package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedStorageDrive/config/defineScopedStorageDriveSmoke.ts +12 -0
  196. package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedStorageDrive/config/index.ts +1 -0
  197. package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedStorageDrive/constants/SMOKE_SCOPED_PROBE_DRIVE.ts +2 -0
  198. package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedStorageDrive/constants/index.ts +1 -0
  199. package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedStorageDrive/index.ts +4 -0
  200. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/scopedStorageDrive → suites/scopedStorageDrive/logic}/askRunScopedStorageDriveTest.ts +2 -2
  201. package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedStorageDrive/scopedStorageDriveSmokeSuite.ts +9 -0
  202. package/template/apps/qpqjs/services/test/service/src/smoke/suites/secret/config/defineSecretSmoke.ts +8 -0
  203. package/template/apps/qpqjs/services/test/service/src/smoke/suites/secret/config/index.ts +1 -0
  204. package/template/apps/qpqjs/services/test/service/src/smoke/suites/secret/constants/SMOKE_PROBE_SECRET.ts +2 -0
  205. package/template/apps/qpqjs/services/test/service/src/smoke/suites/secret/constants/index.ts +1 -0
  206. package/template/apps/qpqjs/services/test/service/src/smoke/suites/secret/index.ts +4 -0
  207. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/secret → suites/secret/logic}/askRunSecretTest.ts +2 -2
  208. package/template/apps/qpqjs/services/test/service/src/smoke/suites/secret/secretSmokeSuite.ts +9 -0
  209. package/template/apps/qpqjs/services/test/service/src/smoke/suites/signingKey/config/defineSigningKeySmoke.ts +12 -0
  210. package/template/apps/qpqjs/services/test/service/src/smoke/suites/signingKey/config/index.ts +1 -0
  211. package/template/apps/qpqjs/services/test/service/src/smoke/suites/signingKey/index.ts +3 -0
  212. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/crossService → suites/signingKey/logic}/askRunCrossServiceSigningKeyTest.ts +1 -1
  213. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/signingKey → suites/signingKey/logic}/askRunSigningKeyTest.ts +1 -1
  214. package/template/apps/qpqjs/services/test/service/src/smoke/suites/signingKey/logic/index.ts +2 -0
  215. package/template/apps/qpqjs/services/test/service/src/smoke/suites/signingKey/signingKeySmokeSuite.ts +16 -0
  216. package/template/apps/qpqjs/services/test/service/src/smoke/suites/smokeSuites.ts +46 -0
  217. package/template/apps/qpqjs/services/test/service/src/smoke/suites/storageDrive/index.ts +2 -0
  218. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/crossService → suites/storageDrive/logic}/askRunCrossServiceStorageDriveTest.ts +1 -1
  219. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/storageDrive → suites/storageDrive/logic}/askRunStorageDriveTest.ts +1 -1
  220. package/template/apps/qpqjs/services/test/service/src/smoke/suites/storageDrive/logic/index.ts +2 -0
  221. package/template/apps/qpqjs/services/test/service/src/smoke/suites/storageDrive/storageDriveSmokeSuite.ts +14 -0
  222. package/template/apps/qpqjs/services/test/service/src/smoke/suites/storageDriveEvent/config/defineStorageDriveEventSmoke.ts +27 -0
  223. package/template/apps/qpqjs/services/test/service/src/smoke/suites/storageDriveEvent/config/index.ts +1 -0
  224. package/template/apps/qpqjs/services/test/service/src/smoke/suites/storageDriveEvent/constants/SMOKE_FILE_EVENT_DRIVE.ts +2 -0
  225. package/template/apps/qpqjs/services/test/service/src/smoke/suites/storageDriveEvent/constants/SMOKE_SCOPED_FILE_EVENT_DRIVE.ts +2 -0
  226. package/template/apps/qpqjs/services/test/service/src/smoke/suites/storageDriveEvent/constants/index.ts +2 -0
  227. package/template/apps/qpqjs/services/test/service/src/smoke/suites/storageDriveEvent/entry/index.ts +1 -0
  228. package/template/apps/qpqjs/services/test/service/src/smoke/suites/storageDriveEvent/entry/storageDrive/index.ts +1 -0
  229. package/template/apps/qpqjs/services/test/service/src/smoke/{storageDrive → suites/storageDriveEvent/entry/storageDrive}/onSmokeFileEvent.ts +1 -1
  230. package/template/apps/qpqjs/services/test/service/src/smoke/suites/storageDriveEvent/index.ts +5 -0
  231. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/storageDriveEvent → suites/storageDriveEvent/logic}/askRunStorageDriveEventTest.ts +7 -9
  232. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/storageDriveEvent → suites/storageDriveEvent/logic}/index.ts +1 -0
  233. package/template/apps/qpqjs/services/test/service/src/smoke/suites/storageDriveEvent/storageDriveEventSmokeSuite.ts +9 -0
  234. package/template/apps/qpqjs/services/testa/models/src/CrossServiceProbePayload.ts +1 -1
  235. package/template/apps/qpqjs/services/testa/service/src/infrastructure.ts +3 -3
  236. package/template/apps/qpqjs/services/testa/service/src/smoke/config/defineSmokeProbes.ts +16 -0
  237. package/template/apps/qpqjs/services/testa/service/src/smoke/config/index.ts +1 -0
  238. package/template/apps/qpqjs/services/{test/service/src/tick → testa/service/src/smoke}/index.ts +1 -0
  239. package/template/apps/qpqjs/services/testa/service/src/smoke/suites/index.ts +3 -0
  240. package/template/apps/qpqjs/services/testa/service/src/smoke/suites/keyValueStore/config/defineKeyValueStoreSmokeProbe.ts +33 -0
  241. package/template/apps/qpqjs/services/testa/service/src/smoke/suites/keyValueStore/config/index.ts +1 -0
  242. package/template/apps/qpqjs/services/testa/service/src/smoke/suites/keyValueStore/entry/serviceFunction/index.ts +1 -0
  243. package/template/apps/qpqjs/services/testa/service/src/smoke/suites/keyValueStore/logic/index.ts +1 -0
  244. package/template/apps/qpqjs/services/testa/service/src/smoke/suites/signingKey/config/defineSigningKeySmokeProbe.ts +28 -0
  245. package/template/apps/qpqjs/services/testa/service/src/smoke/suites/signingKey/config/index.ts +1 -0
  246. package/template/apps/qpqjs/services/testa/service/src/smoke/suites/signingKey/entry/index.ts +1 -0
  247. package/template/apps/qpqjs/services/testa/service/src/smoke/suites/signingKey/entry/serviceFunction/index.ts +1 -0
  248. package/template/apps/qpqjs/services/testa/service/src/smoke/suites/signingKey/index.ts +3 -0
  249. package/template/apps/qpqjs/services/testa/service/src/smoke/suites/signingKey/logic/index.ts +1 -0
  250. package/template/apps/qpqjs/services/testa/service/src/smoke/suites/storageDrive/config/defineStorageDriveSmokeProbe.ts +31 -0
  251. package/template/apps/qpqjs/services/testa/service/src/smoke/suites/storageDrive/config/index.ts +1 -0
  252. package/template/apps/qpqjs/services/testa/service/src/smoke/suites/storageDrive/entry/index.ts +1 -0
  253. package/template/apps/qpqjs/services/testa/service/src/smoke/suites/storageDrive/entry/serviceFunction/index.ts +1 -0
  254. package/template/apps/qpqjs/services/testa/service/src/smoke/suites/storageDrive/index.ts +3 -0
  255. package/template/apps/qpqjs/services/testa/service/src/smoke/suites/storageDrive/logic/index.ts +1 -0
  256. package/template/apps/todo/deploy.config.json +13 -4
  257. package/template/apps/todo/packages/constants/src/index.ts +0 -1
  258. package/template/apps/todo/packages/service-utils/src/defineTodoService.ts +9 -7
  259. package/template/apps/todo/services/admin/service/src/infrastructure.ts +1 -1
  260. package/template/apps/todo/services/admin/views/src/app/app.tsx +9 -19
  261. package/template/apps/todo/services/auth/service/src/infrastructure.ts +1 -1
  262. package/template/apps/todo/services/design/service/src/infrastructure.ts +1 -1
  263. package/template/apps/todo/services/shell/service/src/infrastructure.ts +1 -1
  264. package/template/apps/todo/services/todo/service/src/infrastructure.ts +1 -1
  265. package/template/docusaurus/docs/actions/core/key-value-store/ask-key-value-store-delete.md +1 -1
  266. package/template/docusaurus/docs/actions/core/key-value-store/ask-key-value-store-get-all.md +1 -1
  267. package/template/docusaurus/docs/actions/core/key-value-store/ask-key-value-store-get.md +1 -1
  268. package/template/docusaurus/docs/actions/core/key-value-store/ask-key-value-store-query.md +3 -1
  269. package/template/docusaurus/docs/actions/core/key-value-store/ask-key-value-store-scan.md +1 -1
  270. package/template/docusaurus/docs/actions/core/key-value-store/ask-key-value-store-update.md +1 -1
  271. package/template/docusaurus/docs/actions/core/key-value-store/ask-key-value-store-upsert.md +1 -1
  272. package/template/docusaurus/docs/config/core/key-value-store.md +12 -2
  273. package/template/docusaurus/docs/config/features/event-doc.md +22 -1
  274. package/template/docusaurus/docs/getting-started.md +5 -5
  275. package/template/scripts/deployedSmoke.mjs +27 -22
  276. package/template/scripts/localSmoke.mjs +7 -7
  277. package/lib/commonjs/lib/replaceInFileExact.d.ts +0 -1
  278. package/lib/commonjs/lib/replaceInFileExact.js +0 -18
  279. package/lib/commonjs/lib/replaceInFileExact.js.map +0 -1
  280. package/lib/commonjs/steps/013_printNextSteps.js.map +0 -1
  281. package/lib/esm/lib/replaceInFileExact.d.ts +0 -1
  282. package/lib/esm/lib/replaceInFileExact.js +0 -11
  283. package/lib/esm/lib/replaceInFileExact.js.map +0 -1
  284. package/lib/esm/steps/013_printNextSteps.js +0 -21
  285. package/lib/esm/steps/013_printNextSteps.js.map +0 -1
  286. package/template/apps/qpqjs/packages/constants/src/domain.ts +0 -3
  287. package/template/apps/qpqjs/services/test/service/src/echo/config/defineEcho.ts +0 -9
  288. package/template/apps/qpqjs/services/test/service/src/smoke/constants/smokeProbe.ts +0 -39
  289. package/template/apps/qpqjs/services/test/service/src/smoke/models/index.ts +0 -5
  290. package/template/apps/qpqjs/services/test/service/src/smoke/queue/index.ts +0 -3
  291. package/template/apps/qpqjs/services/test/service/src/smoke/storageDrive/index.ts +0 -4
  292. package/template/apps/qpqjs/services/test/service/src/smoke/tests/crossService/index.ts +0 -3
  293. package/template/apps/qpqjs/services/test/service/src/smoke/tests/keyValueStore/index.ts +0 -1
  294. package/template/apps/qpqjs/services/test/service/src/smoke/tests/scopedKeyValueStore/askRunScopedKeyValueStoreTest.ts +0 -102
  295. package/template/apps/qpqjs/services/test/service/src/smoke/tests/signingKey/index.ts +0 -1
  296. package/template/apps/qpqjs/services/test/service/src/smoke/tests/smokeTestRegistry.ts +0 -66
  297. package/template/apps/qpqjs/services/test/service/src/smoke/tests/storageDrive/index.ts +0 -1
  298. package/template/apps/qpqjs/services/test/service/src/tick/config/index.ts +0 -1
  299. package/template/apps/qpqjs/services/testa/service/src/crossServiceProbe/config/defineCrossServiceProbe.ts +0 -68
  300. package/template/apps/qpqjs/services/testa/service/src/crossServiceProbe/config/index.ts +0 -1
  301. package/template/apps/qpqjs/services/testa/service/src/crossServiceProbe/entry/serviceFunction/index.ts +0 -3
  302. package/template/apps/qpqjs/services/testa/service/src/crossServiceProbe/logic/index.ts +0 -3
  303. package/template/apps/todo/packages/constants/src/domain.ts +0 -2
  304. /package/lib/commonjs/steps/{007_pinRegistryVersions.d.ts → 008_pinRegistryVersions.d.ts} +0 -0
  305. /package/lib/commonjs/steps/{008_transpileToJavaScript.d.ts → 009_transpileToJavaScript.d.ts} +0 -0
  306. /package/lib/commonjs/steps/{009_restoreGitignore.d.ts → 010_restoreGitignore.d.ts} +0 -0
  307. /package/lib/commonjs/steps/{010_gitInit.d.ts → 011_gitInit.d.ts} +0 -0
  308. /package/lib/commonjs/steps/{011_npmInstall.d.ts → 012_npmInstall.d.ts} +0 -0
  309. /package/lib/commonjs/steps/{012_buildWorkspaces.d.ts → 013_buildWorkspaces.d.ts} +0 -0
  310. /package/lib/commonjs/steps/{013_printNextSteps.d.ts → 014_printNextSteps.d.ts} +0 -0
  311. /package/lib/esm/steps/{007_pinRegistryVersions.d.ts → 008_pinRegistryVersions.d.ts} +0 -0
  312. /package/lib/esm/steps/{008_transpileToJavaScript.d.ts → 009_transpileToJavaScript.d.ts} +0 -0
  313. /package/lib/esm/steps/{009_restoreGitignore.d.ts → 010_restoreGitignore.d.ts} +0 -0
  314. /package/lib/esm/steps/{010_gitInit.d.ts → 011_gitInit.d.ts} +0 -0
  315. /package/lib/esm/steps/{011_npmInstall.d.ts → 012_npmInstall.d.ts} +0 -0
  316. /package/lib/esm/steps/{012_buildWorkspaces.d.ts → 013_buildWorkspaces.d.ts} +0 -0
  317. /package/lib/esm/steps/{013_printNextSteps.d.ts → 014_printNextSteps.d.ts} +0 -0
  318. /package/template/apps/qpqjs/services/test/service/src/smoke/{tests → harness/assert}/askSmokeAssert.ts +0 -0
  319. /package/template/apps/qpqjs/services/test/service/src/smoke/{tests → harness/assert}/askSmokePollForMarker.ts +0 -0
  320. /package/template/apps/qpqjs/services/test/service/src/smoke/{constants → harness/constants}/SMOKE_RUNS_STORE.ts +0 -0
  321. /package/template/apps/qpqjs/services/test/service/src/smoke/{constants → harness/constants}/githubOidc.ts +0 -0
  322. /package/template/apps/qpqjs/services/test/service/src/smoke/{constants → harness/constants}/smokeRunQueue.ts +0 -0
  323. /package/template/apps/qpqjs/services/test/service/src/smoke/{controller → harness/controller}/askGetSmokeRun.ts +0 -0
  324. /package/template/apps/qpqjs/services/test/service/src/smoke/{controller → harness/controller}/askRunSmokeTests.ts +0 -0
  325. /package/template/apps/qpqjs/services/test/service/src/smoke/{controller → harness/controller}/index.ts +0 -0
  326. /package/template/apps/qpqjs/services/test/service/src/smoke/{data → harness/data}/askGetSmokeRunById.ts +0 -0
  327. /package/template/apps/qpqjs/services/test/service/src/smoke/{data → harness/data}/askRecordSmokeTestResult.ts +0 -0
  328. /package/template/apps/qpqjs/services/test/service/src/smoke/{data → harness/data}/askSaveSmokeRun.ts +0 -0
  329. /package/template/apps/qpqjs/services/test/service/src/smoke/{data → harness/data}/askSetSmokeRunOutcome.ts +0 -0
  330. /package/template/apps/qpqjs/services/test/service/src/smoke/{data → harness/data}/index.ts +0 -0
  331. /package/template/apps/qpqjs/services/test/service/src/smoke/{logic → harness/logic}/github/index.ts +0 -0
  332. /package/template/apps/qpqjs/services/test/service/src/smoke/{logic → harness/logic}/github/verifyGithubOidcToken.ts +0 -0
  333. /package/template/apps/qpqjs/services/test/service/src/smoke/{logic → harness/logic}/index.ts +0 -0
  334. /package/template/apps/qpqjs/services/test/service/src/smoke/{logic → harness/logic}/smokeRun/askFindSmokeRun.ts +0 -0
  335. /package/template/apps/qpqjs/services/test/service/src/smoke/{logic → harness/logic}/smokeRun/summarizeSmokeRun.ts +0 -0
  336. /package/template/apps/qpqjs/services/test/service/src/smoke/{models → harness/models}/GithubOidcClaims.ts +0 -0
  337. /package/template/apps/qpqjs/services/test/service/src/smoke/{processors → harness/processors}/github/getGithubOidcAuthProcessors.ts +0 -0
  338. /package/template/apps/qpqjs/services/test/service/src/smoke/{processors → harness/processors}/github/index.ts +0 -0
  339. /package/template/apps/qpqjs/services/test/service/src/smoke/{processors → harness/processors}/index.ts +0 -0
  340. /package/template/apps/qpqjs/services/test/service/src/smoke/{queue → harness/queue}/onSmokeTestRequested.ts +0 -0
  341. /package/template/apps/qpqjs/services/test/service/src/smoke/{tests → harness/types}/SmokeTestDefinition.ts +0 -0
  342. /package/template/apps/qpqjs/services/test/service/src/smoke/{email → suites/emailReceive/logic}/smokeEmailMarkerId.ts +0 -0
  343. /package/template/apps/qpqjs/services/test/service/src/smoke/{tests/encryptedResources → suites/encryptedResources/logic}/index.ts +0 -0
  344. /package/template/apps/qpqjs/services/test/service/src/smoke/{tests/eventBus → suites/eventBus/logic}/index.ts +0 -0
  345. /package/template/apps/qpqjs/services/test/service/src/smoke/{models → suites/eventBus/models}/SmokeProbeEventQueueEvent.ts +0 -0
  346. /package/template/apps/qpqjs/services/test/service/src/smoke/{eventDoc → suites/eventDoc/definition}/index.ts +0 -0
  347. /package/template/apps/qpqjs/services/test/service/src/smoke/{eventDoc → suites/eventDoc/definition}/smokeProbeDocDefinition.ts +0 -0
  348. /package/template/apps/qpqjs/services/test/service/src/smoke/{tests/eventDoc → suites/eventDoc/logic}/index.ts +0 -0
  349. /package/template/apps/qpqjs/services/test/service/src/smoke/{models → suites/eventDoc/models}/SmokeEventDocAppendQueueEvent.ts +0 -0
  350. /package/template/apps/qpqjs/services/test/service/src/smoke/{models → suites/eventDoc/models}/SmokeEventDocMark.ts +0 -0
  351. /package/template/apps/qpqjs/services/test/service/src/smoke/{kvsStream → suites/keyValueStoreStream/logic}/smokeStreamMarkerId.ts +0 -0
  352. /package/template/apps/qpqjs/services/test/service/src/smoke/{tests/noop → suites/noop/logic}/askRunNoopTest.ts +0 -0
  353. /package/template/apps/qpqjs/services/test/service/src/smoke/{tests/noop → suites/noop/logic}/index.ts +0 -0
  354. /package/template/apps/qpqjs/services/test/service/src/{echo → smoke/suites/openApi}/controller/echo.ts +0 -0
  355. /package/template/apps/qpqjs/services/test/service/src/{echo → smoke/suites/openApi}/controller/index.ts +0 -0
  356. /package/template/apps/qpqjs/services/test/service/src/smoke/{tests/openApi → suites/openApi/logic}/index.ts +0 -0
  357. /package/template/apps/qpqjs/services/test/service/src/smoke/{tests/parameter → suites/parameter/logic}/index.ts +0 -0
  358. /package/template/apps/qpqjs/services/test/service/src/{tick → smoke/suites/schedule}/constants/index.ts +0 -0
  359. /package/template/apps/qpqjs/services/test/service/src/{tick → smoke/suites/schedule}/constants/scheduleTickName.ts +0 -0
  360. /package/template/apps/qpqjs/services/test/service/src/{tick → smoke/suites/schedule}/constants/scheduleTickStore.ts +0 -0
  361. /package/template/apps/qpqjs/services/test/service/src/{tick → smoke/suites/schedule}/entry/kvsStream/index.ts +0 -0
  362. /package/template/apps/qpqjs/services/test/service/src/{tick → smoke/suites/schedule}/entry/kvsStream/onScheduleTickStream.ts +0 -0
  363. /package/template/apps/qpqjs/services/test/service/src/{tick → smoke/suites/schedule}/entry/schedule/index.ts +0 -0
  364. /package/template/apps/qpqjs/services/test/service/src/{tick → smoke/suites/schedule}/entry/schedule/onTick.ts +0 -0
  365. /package/template/apps/qpqjs/services/test/service/src/smoke/{tests/schedule → suites/schedule/logic}/index.ts +0 -0
  366. /package/template/apps/qpqjs/services/test/service/src/{tick → smoke/suites/schedule}/models/ScheduleTickRecord.ts +0 -0
  367. /package/template/apps/qpqjs/services/test/service/src/{tick → smoke/suites/schedule}/models/index.ts +0 -0
  368. /package/template/apps/qpqjs/services/test/service/src/smoke/{tests/scopedKeyValueStore → suites/scopedKeyValueStore/logic}/index.ts +0 -0
  369. /package/template/apps/qpqjs/services/test/service/src/smoke/{tests/scopedStorageDrive → suites/scopedStorageDrive/logic}/index.ts +0 -0
  370. /package/template/apps/qpqjs/services/test/service/src/smoke/{tests/secret → suites/secret/logic}/index.ts +0 -0
  371. /package/template/apps/qpqjs/services/test/service/src/smoke/{storageDrive → suites/storageDriveEvent/logic}/smokeFileEventMarkerId.ts +0 -0
  372. /package/template/apps/qpqjs/services/testa/service/src/{crossServiceProbe → smoke/suites/keyValueStore}/entry/index.ts +0 -0
  373. /package/template/apps/qpqjs/services/testa/service/src/{crossServiceProbe → smoke/suites/keyValueStore}/entry/serviceFunction/smokeCrossServiceKeyValueStoreProbe.ts +0 -0
  374. /package/template/apps/qpqjs/services/testa/service/src/{crossServiceProbe → smoke/suites/keyValueStore}/index.ts +0 -0
  375. /package/template/apps/qpqjs/services/testa/service/src/{crossServiceProbe → smoke/suites/keyValueStore}/logic/askProbeForeignKeyValueStore.ts +0 -0
  376. /package/template/apps/qpqjs/services/testa/service/src/{crossServiceProbe → smoke/suites/signingKey}/entry/serviceFunction/smokeCrossServiceSigningKeyProbe.ts +0 -0
  377. /package/template/apps/qpqjs/services/testa/service/src/{crossServiceProbe → smoke/suites/signingKey}/logic/askProbeForeignSigningKey.ts +0 -0
  378. /package/template/apps/qpqjs/services/testa/service/src/{crossServiceProbe → smoke/suites/storageDrive}/entry/serviceFunction/smokeCrossServiceStorageDriveProbe.ts +0 -0
  379. /package/template/apps/qpqjs/services/testa/service/src/{crossServiceProbe → smoke/suites/storageDrive}/logic/askProbeForeignStorageDrive.ts +0 -0
@@ -4,13 +4,14 @@ import { deleteDocusaurus } from './003_deleteDocusaurus';
4
4
  import { deleteQpqjsApp } from './004_deleteQpqjsApp';
5
5
  import { applyAppIdentity } from './005_applyAppIdentity';
6
6
  import { applyDomain } from './006_applyDomain';
7
- import { pinRegistryVersions } from './007_pinRegistryVersions';
8
- import { transpileToJavaScript } from './008_transpileToJavaScript';
9
- import { restoreGitignore } from './009_restoreGitignore';
10
- import { gitInit } from './010_gitInit';
11
- import { npmInstall } from './011_npmInstall';
12
- import { buildWorkspaces } from './012_buildWorkspaces';
13
- import { printNextSteps } from './013_printNextSteps';
7
+ import { applyDockerHost } from './007_applyDockerHost';
8
+ import { pinRegistryVersions } from './008_pinRegistryVersions';
9
+ import { transpileToJavaScript } from './009_transpileToJavaScript';
10
+ import { restoreGitignore } from './010_restoreGitignore';
11
+ import { gitInit } from './011_gitInit';
12
+ import { npmInstall } from './012_npmInstall';
13
+ import { buildWorkspaces } from './013_buildWorkspaces';
14
+ import { printNextSteps } from './014_printNextSteps';
14
15
  // The pipeline: always this list, always this order; the numeric file
15
16
  // prefixes match, so the steps directory reads top to bottom. Steps decide
16
17
  // for themselves (shouldRun) whether the collected answers apply to them.
@@ -21,6 +22,7 @@ export const createQpqAppSteps = [
21
22
  deleteQpqjsApp,
22
23
  applyAppIdentity,
23
24
  applyDomain,
25
+ applyDockerHost,
24
26
  pinRegistryVersions,
25
27
  transpileToJavaScript,
26
28
  restoreGitignore,
@@ -29,5 +31,5 @@ export const createQpqAppSteps = [
29
31
  buildWorkspaces,
30
32
  printNextSteps,
31
33
  ];
32
- export { applyAppIdentity, applyDomain, buildWorkspaces, copyTemplate, deleteDocusaurus, deleteQpqjsApp, gitInit, npmInstall, pinRegistryVersions, preflight, printNextSteps, restoreGitignore, transpileToJavaScript, };
34
+ export { applyAppIdentity, applyDockerHost, applyDomain, buildWorkspaces, copyTemplate, deleteDocusaurus, deleteQpqjsApp, gitInit, npmInstall, pinRegistryVersions, preflight, printNextSteps, restoreGitignore, transpileToJavaScript, };
33
35
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/steps/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,sEAAsE;AACtE,2EAA2E;AAC3E,0EAA0E;AAC1E,MAAM,CAAC,MAAM,iBAAiB,GAAuB;IACnD,SAAS;IACT,YAAY;IACZ,gBAAgB;IAChB,cAAc;IACd,gBAAgB;IAChB,WAAW;IACX,mBAAmB;IACnB,qBAAqB;IACrB,gBAAgB;IAChB,OAAO;IACP,UAAU;IACV,eAAe;IACf,cAAc;CACf,CAAC;AAEF,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,OAAO,EACP,UAAU,EACV,mBAAmB,EACnB,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,qBAAqB,GACtB,CAAC","sourcesContent":["import { CreateQpqAppStep } from '../types';\nimport { preflight } from './001_preflight';\nimport { copyTemplate } from './002_copyTemplate';\nimport { deleteDocusaurus } from './003_deleteDocusaurus';\nimport { deleteQpqjsApp } from './004_deleteQpqjsApp';\nimport { applyAppIdentity } from './005_applyAppIdentity';\nimport { applyDomain } from './006_applyDomain';\nimport { pinRegistryVersions } from './007_pinRegistryVersions';\nimport { transpileToJavaScript } from './008_transpileToJavaScript';\nimport { restoreGitignore } from './009_restoreGitignore';\nimport { gitInit } from './010_gitInit';\nimport { npmInstall } from './011_npmInstall';\nimport { buildWorkspaces } from './012_buildWorkspaces';\nimport { printNextSteps } from './013_printNextSteps';\n\n// The pipeline: always this list, always this order; the numeric file\n// prefixes match, so the steps directory reads top to bottom. Steps decide\n// for themselves (shouldRun) whether the collected answers apply to them.\nexport const createQpqAppSteps: CreateQpqAppStep[] = [\n preflight,\n copyTemplate,\n deleteDocusaurus,\n deleteQpqjsApp,\n applyAppIdentity,\n applyDomain,\n pinRegistryVersions,\n transpileToJavaScript,\n restoreGitignore,\n gitInit,\n npmInstall,\n buildWorkspaces,\n printNextSteps,\n];\n\nexport {\n applyAppIdentity,\n applyDomain,\n buildWorkspaces,\n copyTemplate,\n deleteDocusaurus,\n deleteQpqjsApp,\n gitInit,\n npmInstall,\n pinRegistryVersions,\n preflight,\n printNextSteps,\n restoreGitignore,\n transpileToJavaScript,\n};\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/steps/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,sEAAsE;AACtE,2EAA2E;AAC3E,0EAA0E;AAC1E,MAAM,CAAC,MAAM,iBAAiB,GAAuB;IACnD,SAAS;IACT,YAAY;IACZ,gBAAgB;IAChB,cAAc;IACd,gBAAgB;IAChB,WAAW;IACX,eAAe;IACf,mBAAmB;IACnB,qBAAqB;IACrB,gBAAgB;IAChB,OAAO;IACP,UAAU;IACV,eAAe;IACf,cAAc;CACf,CAAC;AAEF,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,OAAO,EACP,UAAU,EACV,mBAAmB,EACnB,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,qBAAqB,GACtB,CAAC","sourcesContent":["import { CreateQpqAppStep } from '../types';\nimport { preflight } from './001_preflight';\nimport { copyTemplate } from './002_copyTemplate';\nimport { deleteDocusaurus } from './003_deleteDocusaurus';\nimport { deleteQpqjsApp } from './004_deleteQpqjsApp';\nimport { applyAppIdentity } from './005_applyAppIdentity';\nimport { applyDomain } from './006_applyDomain';\nimport { applyDockerHost } from './007_applyDockerHost';\nimport { pinRegistryVersions } from './008_pinRegistryVersions';\nimport { transpileToJavaScript } from './009_transpileToJavaScript';\nimport { restoreGitignore } from './010_restoreGitignore';\nimport { gitInit } from './011_gitInit';\nimport { npmInstall } from './012_npmInstall';\nimport { buildWorkspaces } from './013_buildWorkspaces';\nimport { printNextSteps } from './014_printNextSteps';\n\n// The pipeline: always this list, always this order; the numeric file\n// prefixes match, so the steps directory reads top to bottom. Steps decide\n// for themselves (shouldRun) whether the collected answers apply to them.\nexport const createQpqAppSteps: CreateQpqAppStep[] = [\n preflight,\n copyTemplate,\n deleteDocusaurus,\n deleteQpqjsApp,\n applyAppIdentity,\n applyDomain,\n applyDockerHost,\n pinRegistryVersions,\n transpileToJavaScript,\n restoreGitignore,\n gitInit,\n npmInstall,\n buildWorkspaces,\n printNextSteps,\n];\n\nexport {\n applyAppIdentity,\n applyDockerHost,\n applyDomain,\n buildWorkspaces,\n copyTemplate,\n deleteDocusaurus,\n deleteQpqjsApp,\n gitInit,\n npmInstall,\n pinRegistryVersions,\n preflight,\n printNextSteps,\n restoreGitignore,\n transpileToJavaScript,\n};\n"]}
@@ -3,6 +3,8 @@ export type CreateQpqAppAnswers = {
3
3
  appName: string;
4
4
  language: AppLanguage;
5
5
  domain: string;
6
+ dockerRegistry: string;
7
+ dockerHost: string;
6
8
  initialiseGit: boolean;
7
9
  installDependencies: boolean;
8
10
  };
@@ -1 +1 @@
1
- {"version":3,"file":"CreateQpqAppAnswers.js","sourceRoot":"","sources":["../../../src/types/CreateQpqAppAnswers.ts"],"names":[],"mappings":"","sourcesContent":["import { AppLanguage } from './AppLanguage';\n\n// Everything the pipeline needs to know, collected ONCE (flags first, prompts\n// for whatever is still missing) before any step runs: steps never prompt.\nexport type CreateQpqAppAnswers = {\n appName: string;\n language: AppLanguage;\n domain: string;\n initialiseGit: boolean;\n installDependencies: boolean;\n};\n"]}
1
+ {"version":3,"file":"CreateQpqAppAnswers.js","sourceRoot":"","sources":["../../../src/types/CreateQpqAppAnswers.ts"],"names":[],"mappings":"","sourcesContent":["import { AppLanguage } from './AppLanguage';\n\n// Everything the pipeline needs to know, collected ONCE (flags first, prompts\n// for whatever is still missing) before any step runs: steps never prompt.\nexport type CreateQpqAppAnswers = {\n appName: string;\n language: AppLanguage;\n domain: string;\n // Docker registry the image is pushed to ('' = local docker store only).\n dockerRegistry: string;\n // Address browsers use for the docker host ('' = localhost).\n dockerHost: string;\n initialiseGit: boolean;\n installDependencies: boolean;\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-qpq-app",
3
- "version": "0.1.26",
3
+ "version": "0.1.28",
4
4
  "description": "Scaffold a new quidproquo app: npx create-qpq-app my-app",
5
5
  "main": "./lib/commonjs/index.js",
6
6
  "module": "./lib/esm/index.js",
@@ -55,7 +55,7 @@
55
55
  },
56
56
  "devDependencies": {
57
57
  "@types/node": "^22.13.13",
58
- "quidproquo-tsconfig": "0.1.26"
58
+ "quidproquo-tsconfig": "0.1.28"
59
59
  },
60
60
  "bin": {
61
61
  "create-qpq-app": "./lib/commonjs/bin/createQpqApp.js"
@@ -28,7 +28,8 @@ curl -H "Host: qpqjs.development.localhost" http://localhost:8080/api/shell/v1/h
28
28
 
29
29
  ```
30
30
  apps/<app>/ # qpqjs
31
- deploy.config.json # { "prefix", "environments" }: deploy identity per environment
31
+ deploy.config.json # { "deployments": { "<name>": { platform, name, environment, ... } } }
32
+ devServer.config.ts # optional: dev server ports (also the docker image's) + local QPQ config overrides
32
33
  tsconfig.federated.json # generated by `npm run prep`: cross-view type aliases
33
34
  packages/ # app-wide libs (config, constants, service-utils)
34
35
  services/<svc>/
@@ -48,7 +49,7 @@ There is no tools/ directory. All build, dev, and deploy orchestration ships in
48
49
 
49
50
  - **Libraries** build to their own `dist/` with `tsc -b` (TypeScript project references, so only what changed rebuilds). Each lib's `package.json` `main`, `types`, and `exports` point at `dist/src`, and npm workspaces symlink it into `node_modules/@qpqjs/*`, so imports resolve like any npm package. Libs build before services because the root `workspaces` array lists all lib globs ahead of `apps/*/services/*/service`.
50
51
  - **Service backends** are bundled to AWS Lambda by Rspack, programmatically at deploy time (`qpq go` calls `getServiceRspackConfig` from `quidproquo-deploy-rspack`). There are no per-service `rspack.config.ts` files or `bundle` scripts, and a service's `build` script only type-checks.
51
- - **Views** are microfrontends built by Rspack and `@module-federation/enhanced`. There are no per-view federation config files: exposes are computed at build time from `// federated.export` markers, and remotes are discovered from sibling views packages (dev port from each service's `defineDevServerOptions({ port })` in its `infrastructure.ts`). The only generated artifact is `apps/<app>/tsconfig.federated.json`, regenerated with `npm run prep` after adding or removing a marker.
52
+ - **Views** are microfrontends built by Rspack and `@module-federation/enhanced`. There are no per-view federation config files: exposes are computed at build time from `// federated.export` markers, and remotes are discovered from sibling views packages (dev port from each service's `defineDevServerOptions({ views: { port } })` in its `infrastructure.ts`). The only generated artifact is `apps/<app>/tsconfig.federated.json`, regenerated with `npm run prep` after adding or removing a marker.
52
53
  - **The dev server** (`npx qpq go:dev:api`, powered by `quidproquo-dev-server`) loads each service's `infrastructure.ts` directly, so no synth is needed, just built libs. Its bundle externalizes `node_modules` (an externals function in its rspack config) so native modules like `sqlite3` load at runtime from their install location.
53
54
  - **The `admin` service** owns the log and admin backbone. Every service's config references `defineAdminSettings(Admin, …)` and `logServiceName: Admin`, so the dev server resolves log globals from the `admin` module. Running a single service without `admin` spams `Global config qpq-log-retention-days not found`.
54
55
 
@@ -93,7 +94,7 @@ npx qpq go # interactive aws deploy: pick app, services, stacks (inf
93
94
  # bundles (rspack production), cdk deploy, and s3 sync per phase
94
95
  ```
95
96
 
96
- `qpq go` needs AWS credentials plus a deploy identity: either an `"environments"` map in `apps/<app>/deploy.config.json` (`{ "prefix", "environments": { "<env>": { "accountId", "region" } } }`, selected with `--env <name>`) or the legacy `ENVIRONMENT` and `AWS_DEFAULT_*` env vars. App-specific bootstrap and account extras live in `apps/<app>/bootstrap.qpq.ts` and `apps/<app>/account.qpq.ts` as config fragments; the identity plumbing is provided by the generic CDK app in `quidproquo-deploy-awscdk`.
97
+ `qpq go` needs AWS credentials plus a deployment: an entry in `apps/<app>/deploy.config.json` selected with `--deployment <name>`. Each entry is the whole story for that target (`platform`, `name`, `environment`, optional `feature`, `platformSettings` such as `accountId`/`region` for aws, and optional string `settings` that reach `infrastructure.ts` through `getDeploySetting`). The file is the source of truth: no env var or flag overrides it, so to change a target you edit the file or add an entry. Service configs read the primed `APPLICATION_NAME`, `ENVIRONMENT` and `FEATURE_NAME` env vars. App-specific bootstrap and account extras live in `apps/<app>/bootstrap.qpq.ts` and `apps/<app>/account.qpq.ts` as config fragments; the identity plumbing is provided by the generic CDK app in `quidproquo-deploy-awscdk`.
97
98
 
98
99
  - Production views bundles get prod remote URLs (the `views` host on the primary root, under the app's domain resolver) derived from the service's qpq config. Dev bundles use localhost ports.
99
100
  - `cdk.context.json` at the repo root is CDK's regenerable Route53 lookup cache. It is written on the first deploy, and checking it in means later synths need no live AWS lookups.
@@ -6,6 +6,7 @@ import {
6
6
  defineApi,
7
7
  defineDns,
8
8
  defineEmailReceivingDomain,
9
+ getDeploySettingList,
9
10
  QPQConfig,
10
11
  } from 'quidproquo';
11
12
  import {
@@ -17,10 +18,10 @@ import {
17
18
  } from 'quidproquo-config-aws';
18
19
  import { QpqAppDeployContext } from 'quidproquo-deploy-awscdk';
19
20
 
20
- import { QPQJS_DOMAINS, QpqjsServiceEnum } from '@qpqjs/constants';
21
+ import { QpqjsServiceEnum } from '@qpqjs/constants';
21
22
 
22
23
  export default ({ region }: QpqAppDeployContext): QPQConfig => [
23
- defineDns(QPQJS_DOMAINS),
24
+ defineDns(getDeploySettingList('ROOT_DOMAINS')),
24
25
 
25
26
  // inbox.<env>.<root>: verified with SES and MX-routed to it, for every defineEmailReceiver.
26
27
  defineEmailReceivingDomain('inbox'),
@@ -1,23 +1,56 @@
1
1
  {
2
- "prefix": "qpqjs",
3
- "environments": {
2
+ "deployments": {
4
3
  "development": {
5
4
  "platform": "aws",
6
- "accountId": "061039804449",
7
- "region": "ap-southeast-2"
5
+ "name": "qpqjs",
6
+ "environment": "development",
7
+ "platformSettings": {
8
+ "accountId": "061039804449",
9
+ "region": "ap-southeast-2"
10
+ },
11
+ "settings": {
12
+ "ROOT_DOMAINS": "quidproquojs.com, qpqjs.com"
13
+ }
8
14
  },
9
15
  "staging": {
10
16
  "platform": "aws",
11
- "accountId": "061039804449",
12
- "region": "us-east-1"
17
+ "name": "qpqjs",
18
+ "environment": "staging",
19
+ "platformSettings": {
20
+ "accountId": "061039804449",
21
+ "region": "us-east-1"
22
+ },
23
+ "settings": {
24
+ "ROOT_DOMAINS": "quidproquojs.com, qpqjs.com"
25
+ }
13
26
  },
14
27
  "production": {
15
28
  "platform": "aws",
16
- "accountId": "761018864142",
17
- "region": "ap-southeast-2"
29
+ "name": "qpqjs",
30
+ "environment": "production",
31
+ "platformSettings": {
32
+ "accountId": "761018864142",
33
+ "region": "ap-southeast-2"
34
+ },
35
+ "settings": {
36
+ "ROOT_DOMAINS": "quidproquojs.com, qpqjs.com"
37
+ }
18
38
  },
19
39
  "local": {
20
- "platform": "docker"
40
+ "platform": "docker",
41
+ "name": "qpqjs",
42
+ "environment": "local",
43
+ "settings": {
44
+ "ROOT_DOMAINS": "quidproquojs.com, qpqjs.com"
45
+ },
46
+ "platformSettings": {
47
+ "portMappings": "80:8080, 8888:8888, 3001:3001, 3090:3090",
48
+ "registry": "192.168.8.88:5000",
49
+ "arch": "linux/amd64",
50
+ "tag": "latest",
51
+ "publicHost": "192.168.8.88",
52
+ "dataPath": "/mnt/user/appdata/qpq-qpqjs"
53
+ }
21
54
  }
22
55
  }
23
56
  }
@@ -0,0 +1,13 @@
1
+ import { DevServerConfigOverrides } from 'quidproquo-dev-server';
2
+
3
+ // App-level dev server settings. The ports are the same locally and inside the docker image,
4
+ // so a url that works against `npm run dev` works against the deployed container too.
5
+ const devServerConfig: DevServerConfigOverrides = {
6
+ ports: {
7
+ api: 8080,
8
+ webSocket: 8888,
9
+ fileStorage: 3001,
10
+ },
11
+ };
12
+
13
+ export default devServerConfig;
@@ -1,4 +1,3 @@
1
- export * from './domain';
2
1
  export * from './QpqjsServiceEnum';
3
2
  export * from './smokeProbe';
4
3
  export * from './userDirectory';
@@ -8,6 +8,7 @@ import {
8
8
  defineDns,
9
9
  defineEmailReceivingDomain,
10
10
  defineFrontendBundleOptions,
11
+ getDeploySettingList,
11
12
  QPQConfig,
12
13
  } from 'quidproquo';
13
14
  import {
@@ -16,6 +17,7 @@ import {
16
17
  defineAwsDataStoreRemovalPolicy,
17
18
  defineAwsServiceAccountInfo,
18
19
  defineWafProtection,
20
+ getAwsServiceAccountInfosForDeployments,
19
21
  } from 'quidproquo-config-aws';
20
22
  import {
21
23
  defineAdminSettings,
@@ -25,17 +27,17 @@ import {
25
27
 
26
28
  import { execSync } from 'child_process';
27
29
  import {
28
- QPQJS_DOMAINS,
29
30
  QPQJS_USER_DIRECTORY,
30
31
  QpqjsServiceEnum,
31
32
  qpqjsServiceNames,
32
33
  } from '@qpqjs/constants';
33
34
 
34
- const productionAccountId = '761018864142';
35
- const stagingAccountId = '761018864142';
36
- const developmentAccountId = '061039804449';
37
- const modulePrefix = 'qpqjs';
38
- const developerNames: string[] = [];
35
+ // Identity comes from the selected deployment in deploy.config.json, primed by the CLI.
36
+ const modulePrefix = process.env.APPLICATION_NAME!;
37
+
38
+ // Deployments (by name in deploy.config.json) whose services this one may reach
39
+ // across accounts. Add a developer's feature deployment here to share with it.
40
+ const crossDeploymentNames = ['production', 'staging'];
39
41
 
40
42
  export const defineQpqjsService = (
41
43
  service: QpqjsServiceEnum,
@@ -50,7 +52,7 @@ export const defineQpqjsService = (
50
52
  process.env.ENVIRONMENT!,
51
53
  configRoot,
52
54
  apiBuildPath,
53
- process.env.ACTOR_NAME
55
+ process.env.FEATURE_NAME
54
56
  ),
55
57
 
56
58
  defineApplicationVersion(
@@ -59,7 +61,8 @@ export const defineQpqjsService = (
59
61
  .trim()}-${new Date().toISOString()}`
60
62
  ),
61
63
 
62
- defineDns(QPQJS_DOMAINS),
64
+ // Root domains come from the deployment's ROOT_DOMAINS setting, primary first.
65
+ defineDns(getDeploySettingList('ROOT_DOMAINS')),
63
66
  // Same domain bootstrap.qpq.ts declares: bootstrap owns the records, a service's
64
67
  // defineEmailReceiver resolves its recipients from it.
65
68
  defineEmailReceivingDomain('inbox'),
@@ -76,27 +79,7 @@ export const defineQpqjsService = (
76
79
  process.env.AWS_DEFAULT_ACCOUNT!,
77
80
  process.env.AWS_DEFAULT_REGION!,
78
81
 
79
- qpqjsServiceNames.flatMap((crossServiceName) => [
80
- {
81
- environment: 'production',
82
- moduleName: crossServiceName,
83
- awsAccountId: productionAccountId,
84
- awsRegion: process.env.AWS_DEFAULT_REGION!,
85
- },
86
- {
87
- environment: 'staging',
88
- moduleName: crossServiceName,
89
- awsAccountId: stagingAccountId,
90
- awsRegion: process.env.AWS_DEFAULT_REGION!,
91
- },
92
- ...developerNames.map((actorName) => ({
93
- environment: 'development',
94
- moduleName: crossServiceName,
95
- feature: actorName,
96
- awsAccountId: developmentAccountId,
97
- awsRegion: process.env.AWS_DEFAULT_REGION!,
98
- })),
99
- ]),
82
+ getAwsServiceAccountInfosForDeployments(crossDeploymentNames, qpqjsServiceNames),
100
83
  {
101
84
  apiLayers,
102
85
  lambdaMaxMemoryInMiB: lambdaMemoryInMiB,
@@ -4,7 +4,7 @@ import { QpqjsServiceEnum } from '@qpqjs/constants';
4
4
  import { defineQpqjsService } from '@qpqjs/service-utils';
5
5
 
6
6
  export default [
7
- defineDevServerOptions({ port: 3082 }),
7
+ defineDevServerOptions({ views: { port: 3082 } }),
8
8
 
9
9
  // never change the app name, it will result in a new stack!
10
10
  defineQpqjsService(
@@ -1,30 +1,20 @@
1
+ import {
2
+ getApiUrl,
3
+ getFederatedViewsUrl,
4
+ getWebSocketUrl,
5
+ } from 'quidproquo-web';
1
6
  import { App as QpqAdminApp } from 'quidproquo-web-admin';
2
7
  import { BaseUrlResolvers } from 'quidproquo-web-react';
3
8
 
4
9
  import { QpqjsServiceEnum } from '@qpqjs/constants';
5
10
 
6
- export const getApiBaseUrl = () => {
7
- const [_views, ...domainParts] = window.location.host.split('.');
8
- const domain = domainParts.join('.');
11
+ export const getApiBaseUrl = () => getApiUrl(QpqjsServiceEnum.Admin);
9
12
 
10
- return window.location.hostname !== 'localhost'
11
- ? `${window.location.protocol}//api.${domain}/${QpqjsServiceEnum.Admin}`
12
- : `http://localhost:8080/api/${QpqjsServiceEnum.Admin}`;
13
- };
14
-
15
- export const getWsBaseUrl = () => {
16
- const [_views, ...domainParts] = window.location.host.split('.');
17
- const domain = domainParts.join('.');
18
-
19
- return window.location.hostname !== 'localhost'
20
- ? `wss://qpqadmin.${QpqjsServiceEnum.Admin}.${domain}`
21
- : `ws://localhost:8888/${QpqjsServiceEnum.Admin}/qpqadmin`;
22
- };
13
+ export const getWsBaseUrl = () =>
14
+ getWebSocketUrl(QpqjsServiceEnum.Admin, 'qpqadmin');
23
15
 
24
16
  export const getMFManifestBaseUrl = () =>
25
- window.location.hostname !== 'localhost'
26
- ? `${window.location.origin}${window.location.pathname.substring(0, window.location.pathname.lastIndexOf('/'))}`
27
- : `http://localhost:3082`;
17
+ getFederatedViewsUrl(QpqjsServiceEnum.Admin);
28
18
 
29
19
  const urlResolvers: BaseUrlResolvers = {
30
20
  getApiUrl: getApiBaseUrl,
@@ -4,7 +4,7 @@ import { QpqjsServiceEnum } from '@qpqjs/constants';
4
4
  import { defineQpqjsService } from '@qpqjs/service-utils';
5
5
 
6
6
  export default [
7
- defineDevServerOptions({ port: 3081 }),
7
+ defineDevServerOptions({ views: { port: 3081 } }),
8
8
 
9
9
  // never change the app name, it will result in a new stack!
10
10
  defineQpqjsService(
@@ -1,14 +1,6 @@
1
- // Docs live on the docs. subdomain of whatever apex this page is served from
2
- // (minus the views. prefix on federated views); localhost falls back to prod.
3
- const getDocsUrl = (): string => {
4
- const { hostname, protocol, host } = window.location;
1
+ import { getWebEntryUrl } from 'quidproquo-web';
5
2
 
6
- if (hostname === 'localhost' || hostname.endsWith('.localhost')) {
7
- return 'https://docs.quidproquojs.com';
8
- }
9
-
10
- return `${protocol}//docs.${host.replace(/^views\./, '')}`;
11
- };
3
+ const getDocsUrl = (): string => getWebEntryUrl('docs');
12
4
 
13
5
  export function NavBar() {
14
6
  return (
@@ -1,5 +1,7 @@
1
1
  // federated.export: This file will be exported using module federation
2
2
 
3
+ import { getApiUrl } from 'quidproquo-web';
4
+
3
5
  import { type CSSProperties, useState } from 'react';
4
6
 
5
7
  const containerStyle: CSSProperties = {
@@ -39,17 +41,7 @@ const resultStyle: CSSProperties = {
39
41
  color: '#1a2733',
40
42
  };
41
43
 
42
- // The shell API: the local QPQ dev server when running on localhost, otherwise
43
- // api.<domain root> (the page host, minus the views. prefix on remote views).
44
- const getShellApiBaseUrl = (): string => {
45
- const { hostname, protocol, host } = window.location;
46
-
47
- if (hostname === 'localhost' || hostname.endsWith('.localhost')) {
48
- return 'http://localhost:8080/api/shell';
49
- }
50
-
51
- return `${protocol}//api.${host.replace(/^views\./, '')}/shell`;
52
- };
44
+ const getShellApiBaseUrl = (): string => getApiUrl('shell');
53
45
 
54
46
  export const WelcomeScreen = () => {
55
47
  const [healthResult, setHealthResult] = useState<string | null>(null);
@@ -67,7 +67,11 @@ const docsWebEntryOptions: QPQConfigAdvancedWebEntrySettings = {
67
67
  };
68
68
 
69
69
  export default [
70
- defineDevServerOptions({ port: 3080 }),
70
+ defineDevServerOptions({
71
+ views: { port: 3080 },
72
+ // The docker image hosts the docs site on this port; AWS gives it docs.<domain>.
73
+ webEntries: { docs: { port: 3090 } },
74
+ }),
71
75
 
72
76
  // never change the app name, it will result in a new stack!
73
77
  defineQpqjsService(
@@ -12,6 +12,9 @@ export type SmokeProbeRecord = {
12
12
  scope?: string;
13
13
  ambientScope?: string;
14
14
  path?: string;
15
+ // Set by the kvs stream handler: the attribute names on the record's image,
16
+ // so a test can prove no backend bookkeeping attribute reaches a handler.
17
+ imageAttributes?: string[];
15
18
  // Set by the email handler: the provider's spf/dkim verdicts on the message.
16
19
  authentication?: string;
17
20
  };
@@ -3,12 +3,10 @@ import { defineDevServerOptions } from 'quidproquo-dev-server/config';
3
3
  import { QpqjsServiceEnum } from '@qpqjs/constants';
4
4
  import { defineQpqjsService } from '@qpqjs/service-utils';
5
5
 
6
- import { defineEcho } from './echo/config/defineEcho';
7
6
  import { defineSmoke } from './smoke/config/defineSmoke';
8
- import { defineTick } from './tick/config/defineTick';
9
7
 
10
8
  export default [
11
- defineDevServerOptions({ port: 3083 }),
9
+ defineDevServerOptions({ views: { port: 3083 } }),
12
10
 
13
11
  // never change the app name, it will result in a new stack!
14
12
  defineQpqjsService(
@@ -18,8 +16,4 @@ export default [
18
16
  ),
19
17
 
20
18
  defineSmoke(),
21
-
22
- defineEcho(),
23
-
24
- defineTick(),
25
19
  ];