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
@@ -0,0 +1,46 @@
1
+ import { SmokeSuite } from '../harness/types/SmokeSuite';
2
+ import { emailReceiveSmokeSuite } from './emailReceive/emailReceiveSmokeSuite';
3
+ import { encryptedResourcesSmokeSuite } from './encryptedResources/encryptedResourcesSmokeSuite';
4
+ import { eventBusSmokeSuite } from './eventBus/eventBusSmokeSuite';
5
+ import { eventDocSmokeSuite } from './eventDoc/eventDocSmokeSuite';
6
+ import { keyValueStoreSmokeSuite } from './keyValueStore/keyValueStoreSmokeSuite';
7
+ import { keyValueStoreStreamSmokeSuite } from './keyValueStoreStream/keyValueStoreStreamSmokeSuite';
8
+ import { noopSmokeSuite } from './noop/noopSmokeSuite';
9
+ import { openApiSmokeSuite } from './openApi/openApiSmokeSuite';
10
+ import { parameterSmokeSuite } from './parameter/parameterSmokeSuite';
11
+ import { scheduleSmokeSuite } from './schedule/scheduleSmokeSuite';
12
+ import { scopedKeyValueStoreSmokeSuite } from './scopedKeyValueStore/scopedKeyValueStoreSmokeSuite';
13
+ import { scopedStorageDriveSmokeSuite } from './scopedStorageDrive/scopedStorageDriveSmokeSuite';
14
+ import { secretSmokeSuite } from './secret/secretSmokeSuite';
15
+ import { signingKeySmokeSuite } from './signingKey/signingKeySmokeSuite';
16
+ import { storageDriveSmokeSuite } from './storageDrive/storageDriveSmokeSuite';
17
+ import { storageDriveEventSmokeSuite } from './storageDriveEvent/storageDriveEventSmokeSuite';
18
+
19
+ /**
20
+ * Every suite a smoke run executes. Adding one: a folder under suites/
21
+ * exporting a SmokeSuite, and a line here. A suite with a cross-service half
22
+ * also has a folder of the same name under testa's smoke/suites.
23
+ *
24
+ * Every test runs in parallel on its own queue message, so none may depend on
25
+ * another having finished. A test's name is the key its queue message carries
26
+ * and must be unique across suites; its id in the run record is its position
27
+ * across this list, so append rather than reorder where possible.
28
+ */
29
+ export const smokeSuites: SmokeSuite[] = [
30
+ noopSmokeSuite,
31
+ keyValueStoreSmokeSuite,
32
+ parameterSmokeSuite,
33
+ secretSmokeSuite,
34
+ storageDriveSmokeSuite,
35
+ eventBusSmokeSuite,
36
+ scheduleSmokeSuite,
37
+ openApiSmokeSuite,
38
+ eventDocSmokeSuite,
39
+ signingKeySmokeSuite,
40
+ scopedStorageDriveSmokeSuite,
41
+ storageDriveEventSmokeSuite,
42
+ scopedKeyValueStoreSmokeSuite,
43
+ keyValueStoreStreamSmokeSuite,
44
+ encryptedResourcesSmokeSuite,
45
+ emailReceiveSmokeSuite,
46
+ ];
@@ -0,0 +1,2 @@
1
+ export * from './logic';
2
+ export * from './storageDriveSmokeSuite';
@@ -16,7 +16,7 @@ import {
16
16
  CrossServiceStorageDriveProbeResult,
17
17
  } from '@qpqjs/testa-models';
18
18
 
19
- import { askSmokeAssert } from '../askSmokeAssert';
19
+ import { askSmokeAssert } from '../../../harness/assert/askSmokeAssert';
20
20
 
21
21
  // testa writes a file into the drive THIS service owns, through its foreign
22
22
  // (exact-ARN) S3 grant. An error from inside testa is that grant; the
@@ -10,7 +10,7 @@ import {
10
10
 
11
11
  import { SMOKE_PROBE_DRIVE } from '@qpqjs/constants';
12
12
 
13
- import { askSmokeAssert } from '../askSmokeAssert';
13
+ import { askSmokeAssert } from '../../../harness/assert/askSmokeAssert';
14
14
 
15
15
  // Every S3 action the owned-drive grant covers (PutObject, GetObject,
16
16
  // ListBucket, DeleteObject). Unlike the other kinds this grant is a bucket
@@ -0,0 +1,2 @@
1
+ export * from './askRunCrossServiceStorageDriveTest';
2
+ export * from './askRunStorageDriveTest';
@@ -0,0 +1,14 @@
1
+ import { SmokeSuite } from '../../harness/types/SmokeSuite';
2
+ import { askRunCrossServiceStorageDriveTest } from './logic/askRunCrossServiceStorageDriveTest';
3
+ import { askRunStorageDriveTest } from './logic/askRunStorageDriveTest';
4
+
5
+ /** Every S3 action on the probe drive, from this service and from testa. No config: the drive belongs to the harness. */
6
+ export const storageDriveSmokeSuite: SmokeSuite = {
7
+ tests: [
8
+ { name: 'storageDrive', askRun: askRunStorageDriveTest },
9
+ {
10
+ name: 'crossServiceStorageDrive',
11
+ askRun: askRunCrossServiceStorageDriveTest,
12
+ },
13
+ ],
14
+ };
@@ -0,0 +1,27 @@
1
+ import { defineStorageDrive, QPQConfig, QpqFunctionRuntime } from 'quidproquo';
2
+
3
+ import { SMOKE_FILE_EVENT_DRIVE } from '../constants/SMOKE_FILE_EVENT_DRIVE';
4
+ import { SMOKE_SCOPED_FILE_EVENT_DRIVE } from '../constants/SMOKE_SCOPED_FILE_EVENT_DRIVE';
5
+
6
+ /**
7
+ * A write or delete on either drive fires the handler, which writes a marker
8
+ * into the probe store for the test to poll. The scoped drive's events must
9
+ * arrive with the scope split off.
10
+ */
11
+ export const defineStorageDriveEventSmoke = (): QPQConfig => {
12
+ const onSmokeFileEvent: QpqFunctionRuntime = {
13
+ basePath: __dirname,
14
+ relativePath: '../entry/storageDrive/onSmokeFileEvent',
15
+ functionName: 'onSmokeFileEvent',
16
+ };
17
+
18
+ return [
19
+ defineStorageDrive(SMOKE_FILE_EVENT_DRIVE, {
20
+ onEvent: { create: onSmokeFileEvent, delete: onSmokeFileEvent },
21
+ }),
22
+ defineStorageDrive(SMOKE_SCOPED_FILE_EVENT_DRIVE, {
23
+ scoped: true,
24
+ onEvent: { create: onSmokeFileEvent, delete: onSmokeFileEvent },
25
+ }),
26
+ ];
27
+ };
@@ -0,0 +1 @@
1
+ export * from './defineStorageDriveEventSmoke';
@@ -0,0 +1,2 @@
1
+ /** The unscoped drive whose create and delete handlers write the markers the file event test polls for. */
2
+ export const SMOKE_FILE_EVENT_DRIVE = 'smoke-file-event';
@@ -0,0 +1,2 @@
1
+ /** The scoped drive whose events must reach the handler with the scope split off the path. */
2
+ export const SMOKE_SCOPED_FILE_EVENT_DRIVE = 'smoke-scoped-file-event';
@@ -0,0 +1,2 @@
1
+ export * from './SMOKE_FILE_EVENT_DRIVE';
2
+ export * from './SMOKE_SCOPED_FILE_EVENT_DRIVE';
@@ -9,7 +9,7 @@ import {
9
9
  import { SMOKE_PROBE_STORE } from '@qpqjs/constants';
10
10
  import { SmokeProbeRecord } from '@qpqjs/test-models';
11
11
 
12
- import { smokeFileEventMarkerId } from './smokeFileEventMarkerId';
12
+ import { smokeFileEventMarkerId } from '../../logic/smokeFileEventMarkerId';
13
13
 
14
14
  // Fan-in for the file event test: both the scoped and the unscoped event
15
15
  // drive point create and delete here. The marker records what the event
@@ -0,0 +1,5 @@
1
+ export * from './config';
2
+ export * from './constants';
3
+ export * from './entry';
4
+ export * from './logic';
5
+ export * from './storageDriveEventSmokeSuite';
@@ -6,13 +6,11 @@ import {
6
6
  StorageDriveEventType,
7
7
  } from 'quidproquo';
8
8
 
9
- import {
10
- SMOKE_FILE_EVENT_DRIVE,
11
- SMOKE_SCOPED_PROBE_DRIVE,
12
- } from '../../constants/smokeProbe';
13
- import { smokeFileEventMarkerId } from '../../storageDrive/smokeFileEventMarkerId';
14
- import { askSmokeAssert } from '../askSmokeAssert';
15
- import { askSmokePollForMarker } from '../askSmokePollForMarker';
9
+ import { askSmokeAssert } from '../../../harness/assert/askSmokeAssert';
10
+ import { askSmokePollForMarker } from '../../../harness/assert/askSmokePollForMarker';
11
+ import { SMOKE_FILE_EVENT_DRIVE } from '../constants/SMOKE_FILE_EVENT_DRIVE';
12
+ import { SMOKE_SCOPED_FILE_EVENT_DRIVE } from '../constants/SMOKE_SCOPED_FILE_EVENT_DRIVE';
13
+ import { smokeFileEventMarkerId } from './smokeFileEventMarkerId';
16
14
 
17
15
  // The storage drive event path end to end: a write fires the create handler
18
16
  // and a delete fires the delete handler, locally through the file watcher and
@@ -43,7 +41,7 @@ export function* askRunStorageDriveEventTest(): AskResponse<void> {
43
41
  );
44
42
 
45
43
  yield* askFileWriteTextContents(
46
- SMOKE_SCOPED_PROBE_DRIVE,
44
+ SMOKE_SCOPED_FILE_EVENT_DRIVE,
47
45
  filepath,
48
46
  fileId,
49
47
  undefined,
@@ -67,7 +65,7 @@ export function* askRunStorageDriveEventTest(): AskResponse<void> {
67
65
  'scoped create handler did not run under the event scope'
68
66
  );
69
67
 
70
- yield* askFileDelete(SMOKE_SCOPED_PROBE_DRIVE, [filepath], scope);
68
+ yield* askFileDelete(SMOKE_SCOPED_FILE_EVENT_DRIVE, [filepath], scope);
71
69
 
72
70
  const scopedDeleted = yield* askSmokePollForMarker(
73
71
  smokeFileEventMarkerId(filepath, StorageDriveEventType.Delete),
@@ -1 +1,2 @@
1
1
  export * from './askRunStorageDriveEventTest';
2
+ export * from './smokeFileEventMarkerId';
@@ -0,0 +1,9 @@
1
+ import { SmokeSuite } from '../../harness/types/SmokeSuite';
2
+ import { defineStorageDriveEventSmoke } from './config/defineStorageDriveEventSmoke';
3
+ import { askRunStorageDriveEventTest } from './logic/askRunStorageDriveEventTest';
4
+
5
+ /** File create and delete events off an unscoped and a scoped drive. */
6
+ export const storageDriveEventSmokeSuite: SmokeSuite = {
7
+ defineConfig: defineStorageDriveEventSmoke,
8
+ tests: [{ name: 'storageDriveEvent', askRun: askRunStorageDriveEventTest }],
9
+ };
@@ -1,4 +1,4 @@
1
- // Input to testa's smokeCrossServiceProbe service function.
1
+ // Input to testa's key value store and storage drive probe service functions.
2
2
  export type CrossServiceProbePayload = {
3
3
  probeId: string;
4
4
  };
@@ -3,13 +3,13 @@ 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 { defineCrossServiceProbe } from './crossServiceProbe/config/defineCrossServiceProbe';
6
+ import { defineSmokeProbes } from './smoke/config/defineSmokeProbes';
7
7
 
8
8
  // testa exists to be "the other service" in the smoke suite: it owns nothing
9
9
  // of its own and exercises the cross-service (foreign ARN) IAM grants against
10
10
  // resources the test service owns.
11
11
  export default [
12
- defineDevServerOptions({ port: 3084 }),
12
+ defineDevServerOptions({ views: { port: 3084 } }),
13
13
 
14
14
  // never change the app name, it will result in a new stack!
15
15
  defineQpqjsService(
@@ -18,5 +18,5 @@ export default [
18
18
  '../../../../../../dist/apps/qpqjs/services/testa/service'
19
19
  ),
20
20
 
21
- defineCrossServiceProbe(),
21
+ defineSmokeProbes(),
22
22
  ];
@@ -0,0 +1,16 @@
1
+ import { QPQConfig } from 'quidproquo';
2
+
3
+ import { defineKeyValueStoreSmokeProbe } from '../suites/keyValueStore/config/defineKeyValueStoreSmokeProbe';
4
+ import { defineSigningKeySmokeProbe } from '../suites/signingKey/config/defineSigningKeySmokeProbe';
5
+ import { defineStorageDriveSmokeProbe } from '../suites/storageDrive/config/defineStorageDriveSmokeProbe';
6
+
7
+ /**
8
+ * The cross-service half of the test service's smoke suites. Each folder under
9
+ * suites/ mirrors the test service suite of the same name and exercises that
10
+ * suite's foreign grant against a resource the test service owns.
11
+ */
12
+ export const defineSmokeProbes = (): QPQConfig => [
13
+ defineKeyValueStoreSmokeProbe(),
14
+ defineStorageDriveSmokeProbe(),
15
+ defineSigningKeySmokeProbe(),
16
+ ];
@@ -0,0 +1 @@
1
+ export * from './defineSmokeProbes';
@@ -1 +1,2 @@
1
1
  export * from './config';
2
+ export * from './suites';
@@ -0,0 +1,3 @@
1
+ export * from './keyValueStore';
2
+ export * from './signingKey';
3
+ export * from './storageDrive';
@@ -0,0 +1,33 @@
1
+ import {
2
+ defineKeyValueStore,
3
+ defineServiceFunction,
4
+ QPQConfig,
5
+ } from 'quidproquo';
6
+
7
+ import {
8
+ QpqjsServiceEnum,
9
+ SMOKE_CROSS_SERVICE_KEY_VALUE_STORE_PROBE_FUNCTION_NAME,
10
+ SMOKE_PROBE_STORE,
11
+ } from '@qpqjs/constants';
12
+ import { SmokeProbeRecord } from '@qpqjs/test-models';
13
+
14
+ /**
15
+ * The test service's probe store declared FOREIGN (owned by test), which is
16
+ * what grants this service's role exact-ARN access to it, plus the service
17
+ * function the test service's crossServiceKeyValueStore test invokes.
18
+ */
19
+ export const defineKeyValueStoreSmokeProbe = (): QPQConfig => [
20
+ defineKeyValueStore<SmokeProbeRecord>(SMOKE_PROBE_STORE, 'probeId', [], {
21
+ indexes: ['category'],
22
+ owner: { module: QpqjsServiceEnum.Test },
23
+ }),
24
+ defineServiceFunction(
25
+ {
26
+ basePath: __dirname,
27
+ relativePath:
28
+ '../entry/serviceFunction/smokeCrossServiceKeyValueStoreProbe',
29
+ functionName: 'smokeCrossServiceKeyValueStoreProbe',
30
+ },
31
+ { functionName: SMOKE_CROSS_SERVICE_KEY_VALUE_STORE_PROBE_FUNCTION_NAME }
32
+ ),
33
+ ];
@@ -0,0 +1 @@
1
+ export * from './defineKeyValueStoreSmokeProbe';
@@ -0,0 +1 @@
1
+ export * from './smokeCrossServiceKeyValueStoreProbe';
@@ -0,0 +1 @@
1
+ export * from './askProbeForeignKeyValueStore';
@@ -0,0 +1,28 @@
1
+ import { defineServiceFunction, defineSigningKey, QPQConfig } from 'quidproquo';
2
+
3
+ import {
4
+ QpqjsServiceEnum,
5
+ SMOKE_CROSS_SERVICE_SIGNING_KEY_PROBE_FUNCTION_NAME,
6
+ SMOKE_PROBE_SIGNING_KEY,
7
+ } from '@qpqjs/constants';
8
+
9
+ /**
10
+ * The test service's signing key declared FOREIGN (owned by test), plus the
11
+ * service function the test service's crossServiceSigningKey test invokes.
12
+ * The one foreign grant that is alias-conditioned rather than exact-ARN: the
13
+ * owner's alias name is what this declaration must resolve to, or
14
+ * GetPublicKey is denied.
15
+ */
16
+ export const defineSigningKeySmokeProbe = (): QPQConfig => [
17
+ defineSigningKey(SMOKE_PROBE_SIGNING_KEY, {
18
+ owner: { module: QpqjsServiceEnum.Test },
19
+ }),
20
+ defineServiceFunction(
21
+ {
22
+ basePath: __dirname,
23
+ relativePath: '../entry/serviceFunction/smokeCrossServiceSigningKeyProbe',
24
+ functionName: 'smokeCrossServiceSigningKeyProbe',
25
+ },
26
+ { functionName: SMOKE_CROSS_SERVICE_SIGNING_KEY_PROBE_FUNCTION_NAME }
27
+ ),
28
+ ];
@@ -0,0 +1 @@
1
+ export * from './defineSigningKeySmokeProbe';
@@ -0,0 +1 @@
1
+ export * from './serviceFunction';
@@ -0,0 +1 @@
1
+ export * from './smokeCrossServiceSigningKeyProbe';
@@ -0,0 +1,3 @@
1
+ export * from './config';
2
+ export * from './entry';
3
+ export * from './logic';
@@ -0,0 +1 @@
1
+ export * from './askProbeForeignSigningKey';
@@ -0,0 +1,31 @@
1
+ import {
2
+ defineServiceFunction,
3
+ defineStorageDrive,
4
+ QPQConfig,
5
+ } from 'quidproquo';
6
+
7
+ import {
8
+ QpqjsServiceEnum,
9
+ SMOKE_CROSS_SERVICE_STORAGE_DRIVE_PROBE_FUNCTION_NAME,
10
+ SMOKE_PROBE_DRIVE,
11
+ } from '@qpqjs/constants';
12
+
13
+ /**
14
+ * The test service's probe drive declared FOREIGN (owned by test), which is
15
+ * what grants this service's role exact-ARN access to it, plus the service
16
+ * function the test service's crossServiceStorageDrive test invokes.
17
+ */
18
+ export const defineStorageDriveSmokeProbe = (): QPQConfig => [
19
+ defineStorageDrive(SMOKE_PROBE_DRIVE, {
20
+ owner: { module: QpqjsServiceEnum.Test },
21
+ }),
22
+ defineServiceFunction(
23
+ {
24
+ basePath: __dirname,
25
+ relativePath:
26
+ '../entry/serviceFunction/smokeCrossServiceStorageDriveProbe',
27
+ functionName: 'smokeCrossServiceStorageDriveProbe',
28
+ },
29
+ { functionName: SMOKE_CROSS_SERVICE_STORAGE_DRIVE_PROBE_FUNCTION_NAME }
30
+ ),
31
+ ];
@@ -0,0 +1 @@
1
+ export * from './defineStorageDriveSmokeProbe';
@@ -0,0 +1 @@
1
+ export * from './smokeCrossServiceStorageDriveProbe';
@@ -0,0 +1,3 @@
1
+ export * from './config';
2
+ export * from './entry';
3
+ export * from './logic';
@@ -0,0 +1 @@
1
+ export * from './askProbeForeignStorageDrive';
@@ -1,11 +1,20 @@
1
1
  {
2
- "prefix": "todo",
3
- "environments": {
2
+ "deployments": {
4
3
  "development": {
5
- "platform": "docker"
4
+ "platform": "docker",
5
+ "name": "todo",
6
+ "environment": "development",
7
+ "settings": {
8
+ "ROOT_DOMAINS": "todo.quidproquojs.com"
9
+ }
6
10
  },
7
11
  "production": {
8
- "platform": "docker"
12
+ "platform": "docker",
13
+ "name": "todo",
14
+ "environment": "production",
15
+ "settings": {
16
+ "ROOT_DOMAINS": "todo.quidproquojs.com"
17
+ }
9
18
  }
10
19
  }
11
20
  }
@@ -1,3 +1,2 @@
1
- export * from './domain';
2
1
  export * from './TodoServiceEnum';
3
2
  export * from './userDirectory';
@@ -7,6 +7,7 @@ import {
7
7
  defineDefaultRouteOptions,
8
8
  defineDns,
9
9
  defineFrontendBundleOptions,
10
+ getDeploySettingList,
10
11
  QPQConfig,
11
12
  } from 'quidproquo';
12
13
  import {
@@ -22,13 +23,13 @@ import {
22
23
 
23
24
  import { execSync } from 'child_process';
24
25
  import {
25
- TODO_DOMAINS,
26
26
  TODO_USER_DIRECTORY,
27
27
  TodoServiceEnum,
28
28
  todoServiceNames,
29
29
  } from '@todo/constants';
30
30
 
31
- const modulePrefix = 'todo';
31
+ // Identity comes from the selected deployment in deploy.config.json, primed by the CLI.
32
+ const modulePrefix = process.env.APPLICATION_NAME!;
32
33
 
33
34
  // The deployed version tag — git sha when available, so a fresh checkout
34
35
  // (or a scaffold that skipped git init) still loads.
@@ -60,12 +61,13 @@ export const defineTodoService = (
60
61
  process.env.ENVIRONMENT!,
61
62
  configRoot,
62
63
  apiBuildPath,
63
- process.env.ACTOR_NAME
64
+ process.env.FEATURE_NAME
64
65
  ),
65
66
 
66
67
  defineApplicationVersion(`${getVersionTag()}-${new Date().toISOString()}`),
67
68
 
68
- defineDns(TODO_DOMAINS),
69
+ // Root domains come from the deployment's ROOT_DOMAINS setting, primary first.
70
+ defineDns(getDeploySettingList('ROOT_DOMAINS')),
69
71
 
70
72
  defineAdminUserDirectory({
71
73
  owner: {
@@ -75,9 +77,9 @@ export const defineTodoService = (
75
77
 
76
78
  defineAuthSystem(TodoServiceEnum.Auth, TODO_USER_DIRECTORY),
77
79
 
78
- // Both todo environments deploy as docker images, so there's no
79
- // cross-account service map — identity comes from the environment when an
80
- // aws target is ever added.
80
+ // Both todo deployments are docker images, so there's no cross-account
81
+ // service map — identity comes from the deployment when an aws target is
82
+ // ever added.
81
83
  defineAwsServiceAccountInfo(
82
84
  process.env.AWS_DEFAULT_ACCOUNT!,
83
85
  process.env.AWS_DEFAULT_REGION!,
@@ -4,7 +4,7 @@ import { TodoServiceEnum } from '@todo/constants';
4
4
  import { defineTodoService } from '@todo/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
  defineTodoService(
@@ -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 { TodoServiceEnum } from '@todo/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(TodoServiceEnum.Admin);
9
12
 
10
- return window.location.hostname !== 'localhost'
11
- ? `${window.location.protocol}//api.${domain}/${TodoServiceEnum.Admin}`
12
- : `http://localhost:8080/api/${TodoServiceEnum.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.${TodoServiceEnum.Admin}.${domain}`
21
- : `ws://localhost:8888/${TodoServiceEnum.Admin}/qpqadmin`;
22
- };
13
+ export const getWsBaseUrl = () =>
14
+ getWebSocketUrl(TodoServiceEnum.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(TodoServiceEnum.Admin);
28
18
 
29
19
  const urlResolvers: BaseUrlResolvers = {
30
20
  getApiUrl: getApiBaseUrl,
@@ -4,7 +4,7 @@ import { TodoServiceEnum } from '@todo/constants';
4
4
  import { defineTodoService } from '@todo/service-utils';
5
5
 
6
6
  export default [
7
- defineDevServerOptions({ port: 3083 }),
7
+ defineDevServerOptions({ views: { port: 3083 } }),
8
8
 
9
9
  // never change the app name, it will result in a new stack!
10
10
  defineTodoService(
@@ -4,7 +4,7 @@ import { TodoServiceEnum } from '@todo/constants';
4
4
  import { defineTodoService } from '@todo/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
  defineTodoService(
@@ -54,7 +54,7 @@ const mfeHostWebEntryOptions: QPQConfigAdvancedWebEntrySettings = {
54
54
  };
55
55
 
56
56
  export default [
57
- defineDevServerOptions({ port: 3080 }),
57
+ defineDevServerOptions({ views: { port: 3080 } }),
58
58
 
59
59
  // never change the app name, it will result in a new stack!
60
60
  defineTodoService(
@@ -4,7 +4,7 @@ import { TodoServiceEnum } from '@todo/constants';
4
4
  import { defineTodoService } from '@todo/service-utils';
5
5
 
6
6
  export default [
7
- defineDevServerOptions({ port: 3084 }),
7
+ defineDevServerOptions({ views: { port: 3084 } }),
8
8
 
9
9
  // never change the app name, it will result in a new stack!
10
10
  defineTodoService(
@@ -53,7 +53,7 @@ function* askKeyValueStoreDelete(
53
53
  | --- | --- |
54
54
  | `KeyValueStoreDeleteErrorTypeEnum.ServiceUnavailable` | DynamoDB internal error or throttling. |
55
55
  | `KeyValueStoreDeleteErrorTypeEnum.ResourceNotFound` | The underlying table does not exist. |
56
- | `KeyValueStoreDeleteErrorTypeEnum.InvalidScope` | The `scope` option is malformed (empty, `.`, over 128 characters, or containing path separators, `..`, `@`, or null bytes), the store's partition key is not string-typed, or the partition-key value contains the reserved `@@QPQSCOPE@@` delimiter (reserved on string-pk stores, so unscoped calls reject it too). |
56
+ | `KeyValueStoreDeleteErrorTypeEnum.InvalidScope` | The `scope` option is malformed (empty, `.`, over 128 characters, or containing path separators, `..`, `@`, or null bytes), the store's partition key is not string-typed, or the partition-key value contains the reserved `@@QPQ` marker (reserved on string-pk stores, so unscoped calls reject it too). |
57
57
  | `KeyValueStoreDeleteErrorTypeEnum.StoreNotFound` | The key value store is not declared in the qpq config (misconfiguration, e.g. a wrong name or a missing `defineKeyValueStore`). |
58
58
 
59
59
  Catch errors with `askCatch` — it returns `{ success: true, result }` or `{ success: false, error }`.
@@ -55,7 +55,7 @@ function* askKeyValueStoreGetAll<Value>(
55
55
  | --- | --- |
56
56
  | `KeyValueStoreGetAllErrorTypeEnum.ServiceUnavailable` | DynamoDB internal error or throttling. |
57
57
  | `KeyValueStoreGetAllErrorTypeEnum.ResourceNotFound` | The underlying table does not exist. |
58
- | `KeyValueStoreGetAllErrorTypeEnum.InvalidScope` | The `scope` option is malformed (empty, `.`, over 128 characters, or containing path separators, `..`, `@`, or null bytes), the store's partition key is not string-typed, or a scoped call's partition-key value contains the reserved `@@QPQSCOPE@@` delimiter. |
58
+ | `KeyValueStoreGetAllErrorTypeEnum.InvalidScope` | The `scope` option is malformed (empty, `.`, over 128 characters, or containing path separators, `..`, `@`, or null bytes), the store's partition key is not string-typed, or a scoped call's partition-key value contains the reserved `@@QPQ` marker. |
59
59
  | `KeyValueStoreGetAllErrorTypeEnum.StoreNotFound` | The key value store is not declared in the qpq config (misconfiguration, e.g. a wrong name or a missing `defineKeyValueStore`). |
60
60
 
61
61
  Catch errors with `askCatch` — it returns `{ success: true, result }` or `{ success: false, error }`.
@@ -57,7 +57,7 @@ function* askKeyValueStoreGet<Value>(
57
57
  | --- | --- |
58
58
  | `KeyValueStoreGetErrorTypeEnum.ServiceUnavailable` | DynamoDB internal error or throttling. |
59
59
  | `KeyValueStoreGetErrorTypeEnum.ResourceNotFound` | The underlying table does not exist. |
60
- | `KeyValueStoreGetErrorTypeEnum.InvalidScope` | The `scope` option is malformed (empty, `.`, over 128 characters, or containing path separators, `..`, `@`, or null bytes), the store's partition key is not string-typed, or the partition-key value contains the reserved `@@QPQSCOPE@@` delimiter (reserved on string-pk stores, so unscoped calls reject it too). |
60
+ | `KeyValueStoreGetErrorTypeEnum.InvalidScope` | The `scope` option is malformed (empty, `.`, over 128 characters, or containing path separators, `..`, `@`, or null bytes), the store's partition key is not string-typed, or the partition-key value contains the reserved `@@QPQ` marker (reserved on string-pk stores, so unscoped calls reject it too). |
61
61
  | `KeyValueStoreGetErrorTypeEnum.StoreNotFound` | The key value store is not declared in the qpq config (misconfiguration, e.g. a wrong name or a missing `defineKeyValueStore`). |
62
62
 
63
63
  Errors thrown by actions can be caught with `askCatch` from quidproquo-core. It returns an object — `{ success: true, result }` on success, or `{ success: false, error }` on failure: