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
@@ -1,6 +1,6 @@
1
1
  import { askOpenApiGetDocument, AskResponse } from 'quidproquo';
2
2
 
3
- import { askSmokeAssert } from '../askSmokeAssert';
3
+ import { askSmokeAssert } from '../../../harness/assert/askSmokeAssert';
4
4
 
5
5
  // The generated document, built in-process from the deployed config. Proves the
6
6
  // openApi processor is registered on this runtime and that the route schemas
@@ -0,0 +1,13 @@
1
+ import { SmokeSuite } from '../../harness/types/SmokeSuite';
2
+ import { defineOpenApiSmoke } from './config/defineOpenApiSmoke';
3
+ import { askRunEchoRoundTripTest } from './logic/askRunEchoRoundTripTest';
4
+ import { askRunOpenApiDocumentTest } from './logic/askRunOpenApiDocumentTest';
5
+
6
+ /** The generated OpenAPI document, and the echo route called through its servers entry. */
7
+ export const openApiSmokeSuite: SmokeSuite = {
8
+ defineConfig: defineOpenApiSmoke,
9
+ tests: [
10
+ { name: 'openApiDocument', askRun: askRunOpenApiDocumentTest },
11
+ { name: 'echoRoundTrip', askRun: askRunEchoRoundTripTest },
12
+ ],
13
+ };
@@ -0,0 +1,11 @@
1
+ import { defineParameter, QPQConfig } from 'quidproquo';
2
+
3
+ import { SMOKE_PROBE_PARAMETER } from '../constants/SMOKE_PROBE_PARAMETER';
4
+ import { SMOKE_PROBE_PARAMETER_VALUE } from '../constants/SMOKE_PROBE_PARAMETER_VALUE';
5
+
6
+ /** An owned parameter with a known value, for the parameter test to read back. */
7
+ export const defineParameterSmoke = (): QPQConfig => [
8
+ defineParameter(SMOKE_PROBE_PARAMETER, {
9
+ value: SMOKE_PROBE_PARAMETER_VALUE,
10
+ }),
11
+ ];
@@ -0,0 +1 @@
1
+ export * from './defineParameterSmoke';
@@ -0,0 +1,2 @@
1
+ /** The owned parameter the parameter test reads through the tag-conditioned SSM grant. */
2
+ export const SMOKE_PROBE_PARAMETER = 'smokeProbe';
@@ -0,0 +1,2 @@
1
+ /** The value the probe parameter is deployed with, which the test expects to read back. */
2
+ export const SMOKE_PROBE_PARAMETER_VALUE = 'smoke-probe-parameter';
@@ -0,0 +1,2 @@
1
+ export * from './SMOKE_PROBE_PARAMETER';
2
+ export * from './SMOKE_PROBE_PARAMETER_VALUE';
@@ -0,0 +1,4 @@
1
+ export * from './config';
2
+ export * from './constants';
3
+ export * from './logic';
4
+ export * from './parameterSmokeSuite';
@@ -4,11 +4,9 @@ import {
4
4
  AskResponse,
5
5
  } from 'quidproquo';
6
6
 
7
- import {
8
- SMOKE_PROBE_PARAMETER,
9
- SMOKE_PROBE_PARAMETER_VALUE,
10
- } from '../../constants/smokeProbe';
11
- import { askSmokeAssert } from '../askSmokeAssert';
7
+ import { askSmokeAssert } from '../../../harness/assert/askSmokeAssert';
8
+ import { SMOKE_PROBE_PARAMETER } from '../constants/SMOKE_PROBE_PARAMETER';
9
+ import { SMOKE_PROBE_PARAMETER_VALUE } from '../constants/SMOKE_PROBE_PARAMETER_VALUE';
12
10
 
13
11
  // ssm:GetParameter and ssm:GetParameters against an owned parameter, granted
14
12
  // by tag. Read-only on purpose: the runtime role is not granted PutParameter.
@@ -0,0 +1,9 @@
1
+ import { SmokeSuite } from '../../harness/types/SmokeSuite';
2
+ import { defineParameterSmoke } from './config/defineParameterSmoke';
3
+ import { askRunParameterTest } from './logic/askRunParameterTest';
4
+
5
+ /** Reads an owned parameter. */
6
+ export const parameterSmokeSuite: SmokeSuite = {
7
+ defineConfig: defineParameterSmoke,
8
+ tests: [{ name: 'parameter', askRun: askRunParameterTest }],
9
+ };
@@ -23,7 +23,7 @@ import { ScheduleTickRecord } from '../models/ScheduleTickRecord';
23
23
  * Every minute, which is the fastest a schedule can go and the only cadence a
24
24
  * test can reasonably wait out.
25
25
  */
26
- export const defineTick = (): QPQConfig => [
26
+ export const defineScheduleSmoke = (): QPQConfig => [
27
27
  defineKeyValueStore<ScheduleTickRecord>(
28
28
  SCHEDULE_TICK_STORE,
29
29
  'scheduleName',
@@ -0,0 +1 @@
1
+ export * from './defineScheduleSmoke';
@@ -0,0 +1,2 @@
1
+ export * from './kvsStream';
2
+ export * from './schedule';
@@ -0,0 +1,6 @@
1
+ export * from './config';
2
+ export * from './constants';
3
+ export * from './entry';
4
+ export * from './logic';
5
+ export * from './models';
6
+ export * from './scheduleSmokeSuite';
@@ -7,10 +7,10 @@ import {
7
7
  Nullable,
8
8
  } from 'quidproquo';
9
9
 
10
- import { SCHEDULE_TICK_NAME } from '../../../tick/constants/scheduleTickName';
11
- import { SCHEDULE_TICK_STORE } from '../../../tick/constants/scheduleTickStore';
12
- import { ScheduleTickRecord } from '../../../tick/models/ScheduleTickRecord';
13
- import { askSmokeAssert } from '../askSmokeAssert';
10
+ import { askSmokeAssert } from '../../../harness/assert/askSmokeAssert';
11
+ import { SCHEDULE_TICK_NAME } from '../constants/scheduleTickName';
12
+ import { SCHEDULE_TICK_STORE } from '../constants/scheduleTickStore';
13
+ import { ScheduleTickRecord } from '../models/ScheduleTickRecord';
14
14
 
15
15
  // The schedule runs every minute, so the wait has to cover a full boundary
16
16
  // plus the stream hop after it. Generous rather than tight: the first fire
@@ -0,0 +1,9 @@
1
+ import { SmokeSuite } from '../../harness/types/SmokeSuite';
2
+ import { defineScheduleSmoke } from './config/defineScheduleSmoke';
3
+ import { askRunScheduleTest } from './logic/askRunScheduleTest';
4
+
5
+ /** A per-minute schedule and a kvs change stream, proven in one wait. */
6
+ export const scheduleSmokeSuite: SmokeSuite = {
7
+ defineConfig: defineScheduleSmoke,
8
+ tests: [{ name: 'schedule', askRun: askRunScheduleTest }],
9
+ };
@@ -0,0 +1,19 @@
1
+ import { defineKeyValueStore, QPQConfig } from 'quidproquo';
2
+
3
+ import { SmokeProbeRecord } from '@qpqjs/test-models';
4
+
5
+ import { SMOKE_SCOPED_PROBE_STORE } from '../constants/SMOKE_SCOPED_PROBE_STORE';
6
+
7
+ /**
8
+ * A scoped store: the scope gate in both directions (a scoped store refuses an
9
+ * unscoped call, an unscoped one refuses a scope) and partition isolation
10
+ * between two scopes, including through the category index.
11
+ */
12
+ export const defineScopedKeyValueStoreSmoke = (): QPQConfig => [
13
+ defineKeyValueStore<SmokeProbeRecord>(
14
+ SMOKE_SCOPED_PROBE_STORE,
15
+ 'probeId',
16
+ [],
17
+ { indexes: ['category'], scoped: true }
18
+ ),
19
+ ];
@@ -0,0 +1 @@
1
+ export * from './defineScopedKeyValueStoreSmoke';
@@ -0,0 +1,2 @@
1
+ /** A scoped probe store: every call must carry a scope, and an unscoped one is refused. */
2
+ export const SMOKE_SCOPED_PROBE_STORE = 'smokeScopedProbe';
@@ -0,0 +1 @@
1
+ export * from './SMOKE_SCOPED_PROBE_STORE';
@@ -0,0 +1,4 @@
1
+ export * from './config';
2
+ export * from './constants';
3
+ export * from './logic';
4
+ export * from './scopedKeyValueStoreSmokeSuite';
@@ -0,0 +1,256 @@
1
+ import {
2
+ askCatch,
3
+ askDelay,
4
+ askKeyValueStoreDelete,
5
+ askKeyValueStoreGet,
6
+ askKeyValueStoreGetBase,
7
+ askKeyValueStoreQuery,
8
+ askKeyValueStoreQueryBase,
9
+ askKeyValueStoreUpdate,
10
+ askKeyValueStoreUpsert,
11
+ askKeyValueStoreUpsertBase,
12
+ askNewGuid,
13
+ AskResponse,
14
+ kvsEqual,
15
+ kvsSet,
16
+ kvsUpdate,
17
+ } from 'quidproquo';
18
+
19
+ import { SMOKE_PROBE_STORE } from '@qpqjs/constants';
20
+ import { SmokeProbeRecord } from '@qpqjs/test-models';
21
+
22
+ import { askSmokeAssert } from '../../../harness/assert/askSmokeAssert';
23
+ import { SMOKE_SCOPED_PROBE_STORE } from '../constants/SMOKE_SCOPED_PROBE_STORE';
24
+
25
+ const INDEX_POLL_ATTEMPTS = 10;
26
+ const INDEX_POLL_INTERVAL_MS = 1000;
27
+
28
+ const probeIdsOf = (items: SmokeProbeRecord[]): string =>
29
+ items
30
+ .map((item) => item.probeId)
31
+ .sort()
32
+ .join(',');
33
+
34
+ // GSI reads are eventually consistent, so poll until the scoped category
35
+ // index shows exactly the expected rows, returning the last read either way
36
+ // for the caller to assert on.
37
+ function* askSmokeScopedCategoryQuery(
38
+ category: string,
39
+ scope: string,
40
+ expectedProbeIds: string[]
41
+ ): AskResponse<SmokeProbeRecord[]> {
42
+ const expected = [...expectedProbeIds].sort().join(',');
43
+
44
+ let items: SmokeProbeRecord[] = [];
45
+ for (let attempt = 0; attempt < INDEX_POLL_ATTEMPTS; attempt += 1) {
46
+ const page = yield* askKeyValueStoreQuery<SmokeProbeRecord>(
47
+ SMOKE_SCOPED_PROBE_STORE,
48
+ kvsEqual('category', category),
49
+ { scope }
50
+ );
51
+ items = page.items;
52
+ if (probeIdsOf(items) === expected) {
53
+ return items;
54
+ }
55
+
56
+ yield* askDelay(INDEX_POLL_INTERVAL_MS);
57
+ }
58
+
59
+ return items;
60
+ }
61
+
62
+ // The scope gate on a store, on whichever backend is running: a scoped store
63
+ // serves scoped calls (including queries on the pk and on a GSI) and keeps two
64
+ // scopes apart, refuses an unscoped call, and an unscoped store refuses a
65
+ // scoped one. On dynamo the scope is composed into the partition key and into
66
+ // a hidden copy of each GSI partition key, so the reads also prove neither
67
+ // composed form leaks to the caller, and a page key can't cross scopes.
68
+ export function* askRunScopedKeyValueStoreTest(): AskResponse<void> {
69
+ const probeId = yield* askNewGuid();
70
+ const otherProbeId = yield* askNewGuid();
71
+ const scopeA = `smoke-a-${probeId}`;
72
+ const scopeB = `smoke-b-${probeId}`;
73
+ const category = `scoped-kvs-${probeId}`;
74
+ const movedCategory = `scoped-kvs-moved-${probeId}`;
75
+
76
+ const record: SmokeProbeRecord = { probeId, category, value: 1 };
77
+ yield* askKeyValueStoreUpsert<SmokeProbeRecord>(
78
+ SMOKE_SCOPED_PROBE_STORE,
79
+ record,
80
+ { scope: scopeA }
81
+ );
82
+
83
+ const written = yield* askKeyValueStoreGet<SmokeProbeRecord>(
84
+ SMOKE_SCOPED_PROBE_STORE,
85
+ probeId,
86
+ { scope: scopeA }
87
+ );
88
+ yield* askSmokeAssert(
89
+ written?.probeId === probeId && written.value === 1,
90
+ 'scoped get did not return the record with its raw key'
91
+ );
92
+
93
+ const byKey = yield* askKeyValueStoreQuery<SmokeProbeRecord>(
94
+ SMOKE_SCOPED_PROBE_STORE,
95
+ kvsEqual('probeId', probeId),
96
+ { scope: scopeA }
97
+ );
98
+ yield* askSmokeAssert(
99
+ byKey.items.some((item) => item.category === category),
100
+ 'scoped query by partition key did not return the record'
101
+ );
102
+
103
+ const fromB = yield* askKeyValueStoreGet<SmokeProbeRecord>(
104
+ SMOKE_SCOPED_PROBE_STORE,
105
+ probeId,
106
+ { scope: scopeB }
107
+ );
108
+ yield* askSmokeAssert(
109
+ !fromB,
110
+ 'record written under scope A is visible from scope B'
111
+ );
112
+
113
+ // The same category under another scope: the category GSI must only ever
114
+ // answer with the querying scope's own rows.
115
+ yield* askKeyValueStoreUpsert<SmokeProbeRecord>(
116
+ SMOKE_SCOPED_PROBE_STORE,
117
+ { probeId: otherProbeId, category, value: 2 },
118
+ { scope: scopeB }
119
+ );
120
+
121
+ const byCategory = yield* askSmokeScopedCategoryQuery(category, scopeA, [
122
+ probeId,
123
+ ]);
124
+ yield* askSmokeAssert(
125
+ probeIdsOf(byCategory) === probeId,
126
+ `scoped index query returned [${probeIdsOf(byCategory)}], expected only [${probeId}]`
127
+ );
128
+ yield* askSmokeAssert(
129
+ byCategory.every((item) =>
130
+ Object.keys(item).every((attribute) => !attribute.includes('@@QPQ'))
131
+ ),
132
+ 'scoped index query leaked a reserved @@QPQ attribute'
133
+ );
134
+
135
+ // Paging a scoped index: the scope's own page key (a real DynamoDB page key,
136
+ // carrying the hidden index copy) continues the listing, and the same key
137
+ // used from another scope is refused rather than read.
138
+ const pagedProbeId = yield* askNewGuid();
139
+ yield* askKeyValueStoreUpsert<SmokeProbeRecord>(
140
+ SMOKE_SCOPED_PROBE_STORE,
141
+ { probeId: pagedProbeId, category, value: 3 },
142
+ { scope: scopeB }
143
+ );
144
+
145
+ const scopeBRows = [otherProbeId, pagedProbeId].sort().join(',');
146
+ const indexedInB = yield* askSmokeScopedCategoryQuery(category, scopeB, [
147
+ otherProbeId,
148
+ pagedProbeId,
149
+ ]);
150
+ yield* askSmokeAssert(
151
+ probeIdsOf(indexedInB) === scopeBRows,
152
+ 'scoped index never showed both of scope B rows'
153
+ );
154
+
155
+ const firstPage = yield* askKeyValueStoreQuery<SmokeProbeRecord>(
156
+ SMOKE_SCOPED_PROBE_STORE,
157
+ kvsEqual('category', category),
158
+ { scope: scopeB, limit: 1 }
159
+ );
160
+ yield* askSmokeAssert(
161
+ firstPage.items.length === 1 && !!firstPage.nextPageKey,
162
+ 'scoped index query with limit 1 did not return a page key'
163
+ );
164
+
165
+ const secondPage = yield* askKeyValueStoreQuery<SmokeProbeRecord>(
166
+ SMOKE_SCOPED_PROBE_STORE,
167
+ kvsEqual('category', category),
168
+ { scope: scopeB, limit: 1, nextPageKey: firstPage.nextPageKey }
169
+ );
170
+ yield* askSmokeAssert(
171
+ probeIdsOf([...firstPage.items, ...secondPage.items]) === scopeBRows,
172
+ 'paging the scoped index did not walk both of scope B rows'
173
+ );
174
+
175
+ const pageKeyFromOtherScope = yield* askCatch(
176
+ askKeyValueStoreQuery<SmokeProbeRecord>(
177
+ SMOKE_SCOPED_PROBE_STORE,
178
+ kvsEqual('category', category),
179
+ { scope: scopeA, nextPageKey: firstPage.nextPageKey }
180
+ )
181
+ );
182
+ yield* askSmokeAssert(
183
+ !pageKeyFromOtherScope.success &&
184
+ pageKeyFromOtherScope.error.errorType ===
185
+ askKeyValueStoreQueryBase.errorType.InvalidScope,
186
+ 'scope B page key was not refused from scope A'
187
+ );
188
+
189
+ // Changing the indexed attribute moves the row's index entry with it.
190
+ yield* askKeyValueStoreUpdate(
191
+ SMOKE_SCOPED_PROBE_STORE,
192
+ kvsUpdate([kvsSet('category', movedCategory)]),
193
+ probeId,
194
+ undefined,
195
+ { scope: scopeA }
196
+ );
197
+
198
+ const moved = yield* askSmokeScopedCategoryQuery(movedCategory, scopeA, [
199
+ probeId,
200
+ ]);
201
+ yield* askSmokeAssert(
202
+ probeIdsOf(moved) === probeId,
203
+ 'scoped index query did not follow the updated category'
204
+ );
205
+
206
+ const leftBehind = yield* askSmokeScopedCategoryQuery(category, scopeA, []);
207
+ yield* askSmokeAssert(
208
+ leftBehind.length === 0,
209
+ 'scoped index query still found the record under its old category'
210
+ );
211
+
212
+ const unscopedGet = yield* askCatch(
213
+ askKeyValueStoreGet<SmokeProbeRecord>(SMOKE_SCOPED_PROBE_STORE, probeId)
214
+ );
215
+ yield* askSmokeAssert(
216
+ !unscopedGet.success &&
217
+ unscopedGet.error.errorType ===
218
+ askKeyValueStoreGetBase.errorType.InvalidScope,
219
+ 'unscoped get on the scoped store was not refused with InvalidScope'
220
+ );
221
+
222
+ const scopedUpsertOnUnscopedStore = yield* askCatch(
223
+ askKeyValueStoreUpsert<SmokeProbeRecord>(SMOKE_PROBE_STORE, record, {
224
+ scope: scopeA,
225
+ })
226
+ );
227
+ yield* askSmokeAssert(
228
+ !scopedUpsertOnUnscopedStore.success &&
229
+ scopedUpsertOnUnscopedStore.error.errorType ===
230
+ askKeyValueStoreUpsertBase.errorType.InvalidScope,
231
+ 'scoped upsert on the unscoped store was not refused with InvalidScope'
232
+ );
233
+
234
+ yield* askKeyValueStoreDelete(SMOKE_SCOPED_PROBE_STORE, probeId, undefined, {
235
+ scope: scopeA,
236
+ });
237
+ yield* askKeyValueStoreDelete(
238
+ SMOKE_SCOPED_PROBE_STORE,
239
+ otherProbeId,
240
+ undefined,
241
+ { scope: scopeB }
242
+ );
243
+ yield* askKeyValueStoreDelete(
244
+ SMOKE_SCOPED_PROBE_STORE,
245
+ pagedProbeId,
246
+ undefined,
247
+ { scope: scopeB }
248
+ );
249
+
250
+ const deleted = yield* askKeyValueStoreGet<SmokeProbeRecord>(
251
+ SMOKE_SCOPED_PROBE_STORE,
252
+ probeId,
253
+ { scope: scopeA }
254
+ );
255
+ yield* askSmokeAssert(!deleted, 'scoped record still present after delete');
256
+ }
@@ -0,0 +1,11 @@
1
+ import { SmokeSuite } from '../../harness/types/SmokeSuite';
2
+ import { defineScopedKeyValueStoreSmoke } from './config/defineScopedKeyValueStoreSmoke';
3
+ import { askRunScopedKeyValueStoreTest } from './logic/askRunScopedKeyValueStoreTest';
4
+
5
+ /** A scoped store's gate and partition isolation. */
6
+ export const scopedKeyValueStoreSmokeSuite: SmokeSuite = {
7
+ defineConfig: defineScopedKeyValueStoreSmoke,
8
+ tests: [
9
+ { name: 'scopedKeyValueStore', askRun: askRunScopedKeyValueStoreTest },
10
+ ],
11
+ };
@@ -0,0 +1,12 @@
1
+ import { defineStorageDrive, QPQConfig } from 'quidproquo';
2
+
3
+ import { SMOKE_SCOPED_PROBE_DRIVE } from '../constants/SMOKE_SCOPED_PROBE_DRIVE';
4
+
5
+ /**
6
+ * A scoped drive for the scope gate in both directions (it refuses an unscoped
7
+ * call, the harness's unscoped probe drive refuses a scope) and partition
8
+ * isolation between two scopes.
9
+ */
10
+ export const defineScopedStorageDriveSmoke = (): QPQConfig => [
11
+ defineStorageDrive(SMOKE_SCOPED_PROBE_DRIVE, { scoped: true }),
12
+ ];
@@ -0,0 +1 @@
1
+ export * from './defineScopedStorageDriveSmoke';
@@ -0,0 +1,2 @@
1
+ /** A scoped probe drive: every call must carry a scope, and an unscoped one is refused. */
2
+ export const SMOKE_SCOPED_PROBE_DRIVE = 'smoke-scoped-probe';
@@ -0,0 +1 @@
1
+ export * from './SMOKE_SCOPED_PROBE_DRIVE';
@@ -0,0 +1,4 @@
1
+ export * from './config';
2
+ export * from './constants';
3
+ export * from './logic';
4
+ export * from './scopedStorageDriveSmokeSuite';
@@ -11,8 +11,8 @@ import {
11
11
 
12
12
  import { SMOKE_PROBE_DRIVE } from '@qpqjs/constants';
13
13
 
14
- import { SMOKE_SCOPED_PROBE_DRIVE } from '../../constants/smokeProbe';
15
- import { askSmokeAssert } from '../askSmokeAssert';
14
+ import { askSmokeAssert } from '../../../harness/assert/askSmokeAssert';
15
+ import { SMOKE_SCOPED_PROBE_DRIVE } from '../constants/SMOKE_SCOPED_PROBE_DRIVE';
16
16
 
17
17
  // The scope gate on a drive, on whichever backend is running: a scoped drive
18
18
  // serves scoped calls and keeps two scopes apart, refuses an unscoped call,
@@ -0,0 +1,9 @@
1
+ import { SmokeSuite } from '../../harness/types/SmokeSuite';
2
+ import { defineScopedStorageDriveSmoke } from './config/defineScopedStorageDriveSmoke';
3
+ import { askRunScopedStorageDriveTest } from './logic/askRunScopedStorageDriveTest';
4
+
5
+ /** A scoped drive's gate and partition isolation. */
6
+ export const scopedStorageDriveSmokeSuite: SmokeSuite = {
7
+ defineConfig: defineScopedStorageDriveSmoke,
8
+ tests: [{ name: 'scopedStorageDrive', askRun: askRunScopedStorageDriveTest }],
9
+ };
@@ -0,0 +1,8 @@
1
+ import { defineSecret, QPQConfig } from 'quidproquo';
2
+
3
+ import { SMOKE_PROBE_SECRET } from '../constants/SMOKE_PROBE_SECRET';
4
+
5
+ /** An owned secret for the secret test to read. */
6
+ export const defineSecretSmoke = (): QPQConfig => [
7
+ defineSecret(SMOKE_PROBE_SECRET),
8
+ ];
@@ -0,0 +1 @@
1
+ export * from './defineSecretSmoke';
@@ -0,0 +1,2 @@
1
+ /** The owned secret the secret test reads through the tag-conditioned grant. */
2
+ export const SMOKE_PROBE_SECRET = 'smokeProbe';
@@ -0,0 +1 @@
1
+ export * from './SMOKE_PROBE_SECRET';
@@ -0,0 +1,4 @@
1
+ export * from './config';
2
+ export * from './constants';
3
+ export * from './logic';
4
+ export * from './secretSmokeSuite';
@@ -1,7 +1,7 @@
1
1
  import { askConfigGetSecret, AskResponse } from 'quidproquo';
2
2
 
3
- import { SMOKE_PROBE_SECRET } from '../../constants/smokeProbe';
4
- import { askSmokeAssert } from '../askSmokeAssert';
3
+ import { askSmokeAssert } from '../../../harness/assert/askSmokeAssert';
4
+ import { SMOKE_PROBE_SECRET } from '../constants/SMOKE_PROBE_SECRET';
5
5
 
6
6
  // secretsmanager:GetSecretValue against an owned secret, granted by tag. The
7
7
  // deployed secret is created without an explicit value, so the platform
@@ -0,0 +1,9 @@
1
+ import { SmokeSuite } from '../../harness/types/SmokeSuite';
2
+ import { defineSecretSmoke } from './config/defineSecretSmoke';
3
+ import { askRunSecretTest } from './logic/askRunSecretTest';
4
+
5
+ /** Reads an owned secret. */
6
+ export const secretSmokeSuite: SmokeSuite = {
7
+ defineConfig: defineSecretSmoke,
8
+ tests: [{ name: 'secret', askRun: askRunSecretTest }],
9
+ };
@@ -0,0 +1,12 @@
1
+ import { defineSigningKey, QPQConfig } from 'quidproquo';
2
+
3
+ import { SMOKE_PROBE_SIGNING_KEY } from '@qpqjs/constants';
4
+
5
+ /**
6
+ * An owned RSA signing key: kms:Sign and kms:GetPublicKey through the
7
+ * alias-conditioned grant. testa declares the same key foreign (see its
8
+ * smoke/suites/signingKey) for the cross-service verify test.
9
+ */
10
+ export const defineSigningKeySmoke = (): QPQConfig => [
11
+ defineSigningKey(SMOKE_PROBE_SIGNING_KEY),
12
+ ];
@@ -0,0 +1 @@
1
+ export * from './defineSigningKeySmoke';
@@ -0,0 +1,3 @@
1
+ export * from './config';
2
+ export * from './logic';
3
+ export * from './signingKeySmokeSuite';
@@ -17,7 +17,7 @@ import {
17
17
  CrossServiceSigningKeyProbeResult,
18
18
  } from '@qpqjs/testa-models';
19
19
 
20
- import { askSmokeAssert } from '../askSmokeAssert';
20
+ import { askSmokeAssert } from '../../../harness/assert/askSmokeAssert';
21
21
 
22
22
  // The issuer/verifier split a signing key exists for: THIS service signs a
23
23
  // jwt with its owned key, testa verifies it through its foreign declaration
@@ -11,7 +11,7 @@ import {
11
11
  import { SMOKE_PROBE_SIGNING_KEY } from '@qpqjs/constants';
12
12
  import { SmokeSigningKeyClaims } from '@qpqjs/test-models';
13
13
 
14
- import { askSmokeAssert } from '../askSmokeAssert';
14
+ import { askSmokeAssert } from '../../../harness/assert/askSmokeAssert';
15
15
 
16
16
  const PUBLIC_KEY_PEM_HEADER = '-----BEGIN PUBLIC KEY-----';
17
17
 
@@ -0,0 +1,2 @@
1
+ export * from './askRunCrossServiceSigningKeyTest';
2
+ export * from './askRunSigningKeyTest';
@@ -0,0 +1,16 @@
1
+ import { SmokeSuite } from '../../harness/types/SmokeSuite';
2
+ import { defineSigningKeySmoke } from './config/defineSigningKeySmoke';
3
+ import { askRunCrossServiceSigningKeyTest } from './logic/askRunCrossServiceSigningKeyTest';
4
+ import { askRunSigningKeyTest } from './logic/askRunSigningKeyTest';
5
+
6
+ /** An owned signing key, and testa verifying (but never signing) with it. */
7
+ export const signingKeySmokeSuite: SmokeSuite = {
8
+ defineConfig: defineSigningKeySmoke,
9
+ tests: [
10
+ { name: 'signingKey', askRun: askRunSigningKeyTest },
11
+ {
12
+ name: 'crossServiceSigningKey',
13
+ askRun: askRunCrossServiceSigningKeyTest,
14
+ },
15
+ ],
16
+ };