@keystrokehq/cli 0.0.19 → 0.0.20

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 (143) hide show
  1. package/dist/{accept.handler-BVmNNAgL.mjs → accept.handler-CiqqUxKN.mjs} +1 -1
  2. package/dist/{admin-DQlHFuXn.mjs → admin-B0U2Aghv.mjs} +9 -9
  3. package/dist/{agent-bundle-package-DWV6B_5q-FPT0bJaA.mjs → agent-bundle-package-DWV6B_5q-BsbCEeMw.mjs} +1 -1
  4. package/dist/{agents-Dd7UeQCw.mjs → agents-DBebUEwk.mjs} +6 -6
  5. package/dist/{api-nR61stdq.mjs → api-BjBpWWlm.mjs} +1 -1
  6. package/dist/{api-keys-BsMBFiD_.mjs → api-keys-BHAgmC4E.mjs} +5 -5
  7. package/dist/{auth-ZTuuEoD6.mjs → auth-D-PZAjdd.mjs} +5 -5
  8. package/dist/{auth.handler-C1dZBdaG.mjs → auth.handler-CxTDSO6O.mjs} +1 -1
  9. package/dist/{build-agents-DseUtzd4-CthuIecx.mjs → build-agents-DseUtzd4-BNtZrqoY.mjs} +5 -5
  10. package/dist/{build-metadata-C8Ra_Gi--L3l8w0rh.mjs → build-metadata-BB_L45ZS-d5-QLDZ5.mjs} +10 -10
  11. package/dist/{build-progress-AR8xow4_.mjs → build-progress-BVwDg6lC.mjs} +1 -1
  12. package/dist/{build-tasks-GVuMLS0h-BaPhhGXO.mjs → build-tasks-C09SdfjC-DxKcmENc.mjs} +4 -4
  13. package/dist/{build-workflows-CV4tBo6S-szwrAGWT.mjs → build-workflows-BZ_m97Pr-DwcnRlyh.mjs} +9 -10
  14. package/dist/{build.handler-DJrEMCBw.mjs → build.handler-CTX80S1K.mjs} +4 -4
  15. package/dist/{chunk-CH6r78ws.mjs → chunk-DYxdGL9S.mjs} +2 -1
  16. package/dist/{clear.handler-BgeAg2de.mjs → clear.handler-Bksm2HI4.mjs} +1 -1
  17. package/dist/{commander-C5qcOo8m.mjs → commander-DQLrBSIW.mjs} +1 -1
  18. package/dist/{connect-BtBKoXpi.mjs → connect-DV_EztVs.mjs} +2 -2
  19. package/dist/{connect.handler-E8CmLRSF.mjs → connect.handler-DbuGt3Xb.mjs} +3 -3
  20. package/dist/{context-BydAGTiB.mjs → context-BUzxM3QI.mjs} +2 -2
  21. package/dist/{create.handler-CBxIPC3r.mjs → create.handler-CQCRk-Na.mjs} +1 -1
  22. package/dist/{credentials-BGaRMclS.mjs → credentials-m18a1_hw.mjs} +6 -6
  23. package/dist/{credentials-jRiXEr6P.mjs → credentials-xPtLFTjW.mjs} +2 -2
  24. package/dist/{current-deployment-workflow-BVliROAz.mjs → current-deployment-workflow-pyBoobIm.mjs} +4 -4
  25. package/dist/{current.handler-DBl9S67d.mjs → current.handler-BJGJgdGP.mjs} +1 -1
  26. package/dist/{delete.handler-Buu7Ip0D.mjs → delete.handler-DNoehdOH.mjs} +1 -1
  27. package/dist/{deploy-CzTlgAFj.mjs → deploy-3tHCBGky.mjs} +2 -2
  28. package/dist/{deploy-BPDUTKZD.mjs → deploy-BKjcO_sm.mjs} +1 -1
  29. package/dist/{deploy-progress-DK87VKJ-.mjs → deploy-progress-CyolzjRB.mjs} +1 -1
  30. package/dist/{deploy.handler-CCcJ7y3A.mjs → deploy.handler-TnPNBYXZ.mjs} +27 -15
  31. package/dist/{detect-env-access-CwkOYeYM-CNTyUzme.mjs → detect-env-access-CwkOYeYM-D8-hxij0.mjs} +2 -2
  32. package/dist/{diff.handler-DUVFixeG.mjs → diff.handler-DO2WzdGB.mjs} +3 -3
  33. package/dist/{dist-Cx0RV8s7.mjs → dist-BGrWr5fp.mjs} +32 -37
  34. package/dist/{env.handler-C8kNFz2U.mjs → env.handler-C5GNyiJt.mjs} +6 -6
  35. package/dist/{error-boundary-B8cmSwJH.mjs → error-boundary-GtRvP2oP.mjs} +1 -1
  36. package/dist/{file-metadata-lrX05iRt.mjs → file-metadata-B8c7Y5yg.mjs} +2 -7
  37. package/dist/{import-module--8x5SLum-DjPUZr4i.mjs → import-module-y0glInUe-CfNsQNia.mjs} +48 -840
  38. package/dist/{init-DeeOVc9m.mjs → init-D9RIT2CY.mjs} +3 -3
  39. package/dist/{init.handler-BMdhpusQ.mjs → init.handler-0TJY1YNy.mjs} +2 -2
  40. package/dist/{inspect.handler-QyTo8rWO.mjs → inspect.handler-BrYFfN4H.mjs} +3 -3
  41. package/dist/{integration-catalog-CmvYPvI6.mjs → integration-catalog-BrJsBkfx.mjs} +1 -1
  42. package/dist/{integrations-tXZM-84g.mjs → integrations-vSyAQ6HA.mjs} +5 -5
  43. package/dist/{invites-ClyAatBW.mjs → invites-BASM4PJr.mjs} +4 -4
  44. package/dist/{invites.list.handler-CPkK_tPM.mjs → invites.list.handler-c-aw6g5o.mjs} +1 -1
  45. package/dist/{invites.resend.handler-DIRI7tS2.mjs → invites.resend.handler-MnMEjP_Z.mjs} +1 -1
  46. package/dist/{invites.revoke.handler-CcXcDBlU.mjs → invites.revoke.handler-CHX6Z8kj.mjs} +1 -1
  47. package/dist/keystroke.mjs +21 -21
  48. package/dist/{list-enrichment-B9238wom.mjs → list-enrichment-DcplcioC.mjs} +1 -1
  49. package/dist/{list.handler-Cbc9rlBx.mjs → list.handler-BBzB1_1l.mjs} +1 -1
  50. package/dist/{list.handler-DdFGHkqt.mjs → list.handler-BsgCd1oF.mjs} +5 -5
  51. package/dist/{list.handler-BB-Dcm5B.mjs → list.handler-CDtjm-6d.mjs} +1 -1
  52. package/dist/{list.handler-Xl_F89kq.mjs → list.handler-DJNtXw7C.mjs} +1 -1
  53. package/dist/{list.handler-ClPAPSWm.mjs → list.handler-DXwKdfIv.mjs} +2 -2
  54. package/dist/{list.handler-tnsRn-Rj.mjs → list2.handler-BdE1k2kl.mjs} +3 -3
  55. package/dist/{listen-ksMVpdNa.mjs → listen-Ca9KdiB2.mjs} +2 -2
  56. package/dist/{listen.handler-DEJSBg8y.mjs → listen.handler-KWPN03S8.mjs} +2 -2
  57. package/dist/{logs-C-JxXsgc.mjs → logs-BEDf7hZ0.mjs} +3 -3
  58. package/dist/{logs.handler-BIegqc2p.mjs → logs.handler-mk1lcZbU.mjs} +2 -2
  59. package/dist/{members.add.handler-D4ggN2Xi.mjs → members.add.handler-CTvlxBZU.mjs} +1 -1
  60. package/dist/{members.invite.handler-BYIt6Oib.mjs → members.invite.handler-wFO0r7Pi.mjs} +1 -1
  61. package/dist/{members.list.handler-CvpeYKC4.mjs → members.list.handler-PPdqs4nI.mjs} +1 -1
  62. package/dist/{members.remove.handler-C4GBUVYE.mjs → members.remove.handler-a5WI6zE4.mjs} +1 -1
  63. package/dist/{members.update.handler-TpM1oi0L.mjs → members.update.handler-3xblTzmz.mjs} +1 -1
  64. package/dist/{metadata-layout-Bv-B0nHj-B1c5giJ7.mjs → metadata-layout-Bv-B0nHj-DtMWZ7Cc.mjs} +1 -1
  65. package/dist/{normalize-path-CojS-CgQ-D4wSBHgG.mjs → normalize-path-CojS-CgQ-CRqBc6D6.mjs} +1 -1
  66. package/dist/{org-DIGyb7XZ.mjs → org-CzLw3neZ.mjs} +15 -15
  67. package/dist/{orgs.create.handler-RIYhse_Q.mjs → orgs.create.handler-CcPpDweZ.mjs} +1 -1
  68. package/dist/{orgs.get.handler-BfOpbSom.mjs → orgs.get.handler-BACPg7vR.mjs} +1 -1
  69. package/dist/{orgs.list.handler-BMgj9yTD.mjs → orgs.list.handler-DEF8OyvM.mjs} +1 -1
  70. package/dist/{paused.handler-DAZ1EaLN.mjs → paused.handler-D4j8_Za4.mjs} +1 -1
  71. package/dist/{projects-Cy6CH3fI.mjs → projects-CJCKxG2u.mjs} +4 -4
  72. package/dist/{projects-BndElPAx.mjs → projects-s5ehKLil.mjs} +2 -2
  73. package/dist/{requirements.handler-C5vobjdJ.mjs → requirements.handler-Bk-sAE9C.mjs} +5 -5
  74. package/dist/{run-polling-BhOdFyh3.mjs → run-polling-DKclfet-.mjs} +3 -3
  75. package/dist/{run.handler-BpLmwF_a.mjs → run.handler-x0B-CjNF.mjs} +4 -4
  76. package/dist/{runs-DaSd4eXn.mjs → runs-DoMVOCNj.mjs} +2 -2
  77. package/dist/{skills-sync.handler-DOxudKmV.mjs → skills-sync.handler-CYkCeuQn.mjs} +1 -1
  78. package/dist/{skills.command-DQc_qGAF.mjs → skills.command-DeAgMGGw.mjs} +4 -4
  79. package/dist/{source-analysis-BBg2E_6G-Ut7kYHOz.mjs → source-analysis-BBg2E_6G-BJTRqWrQ.mjs} +3 -3
  80. package/dist/{source-analysis-Cs0CTBQk.mjs → source-analysis-BMMPIHN9.mjs} +1 -1
  81. package/dist/src-BHTjsZ9V.mjs +456 -0
  82. package/dist/{src-0XVwHXNp.mjs → src-BYQwp8Ig.mjs} +1 -1
  83. package/dist/{switch.handler-CCjMrRZN.mjs → switch.handler-CV4ZBXAu.mjs} +1 -1
  84. package/dist/{sync-BdTQDZjP.mjs → sync-KCVM02IY.mjs} +2 -2
  85. package/dist/{sync.handler-DjY8nqbB.mjs → sync.handler-Cuw89341.mjs} +6 -6
  86. package/dist/task-BSCN9cU4.mjs +945 -0
  87. package/dist/{task-target-build-DCV0UDaz.mjs → task-target-build-B0HF2_At.mjs} +41 -55
  88. package/dist/task-target-deploy-ClbwKJ8K.mjs +4 -0
  89. package/dist/{task-target-deploy-CZBGNC0H-I-tvkGCC.mjs → task-target-deploy-dQYnMO8n-CeTmRcDw.mjs} +15 -17
  90. package/dist/task-target-deploy-runner.mjs +4 -4
  91. package/dist/{test-TTQXrhHm.mjs → test-Rm3thni3.mjs} +2 -2
  92. package/dist/{test.handler-B7Ahe9ta.mjs → test.handler-CTd-heRS.mjs} +8 -8
  93. package/dist/{test.handler-CkkplyX6.mjs → test.handler-DhhcsvHN.mjs} +1 -1
  94. package/dist/{tool.handler-DMfFZCRg.mjs → tool.handler-C3LNyQbc.mjs} +9 -63
  95. package/dist/{trigger-artifacts-RizI57RC-DjhOsdOm.mjs → trigger-artifacts-BcRScRSp-DqFgzl_B.mjs} +53 -119
  96. package/dist/trigger-manifest-DTni4NaZ.mjs +42 -0
  97. package/dist/{upgrade-Cx-bUWUc.mjs → upgrade-Cf7y38xR.mjs} +2 -2
  98. package/dist/{upload-BbcMkyVl.mjs → upload-CJWApEgz.mjs} +1 -1
  99. package/dist/{upload.handler-_d2WZwxd.mjs → upload.handler-BHIWYPph.mjs} +7 -7
  100. package/dist/{users.get.handler-DIooG7Wy.mjs → users.get.handler-spWaHG8h.mjs} +1 -1
  101. package/dist/{users.list.handler-DdGW-DSg.mjs → users.list.handler-DLuU7cd_.mjs} +1 -1
  102. package/dist/{users.set-role.handler-Ek-kntLp.mjs → users.set-role.handler-CojFmpcD.mjs} +1 -1
  103. package/dist/{utils-BMUWnz1P.mjs → utils-Ddltm1sR.mjs} +1 -1
  104. package/dist/{validate.handler-Cq2uJjXY.mjs → validate.handler-DIJBuX1P.mjs} +4 -4
  105. package/dist/{workflow-build-C8AiYxqp.mjs → workflow-build-IGYhEC8Y.mjs} +22 -22
  106. package/dist/{workflow-bundler-BzHk73PM-WI31RJjH.mjs → workflow-bundler-BzHk73PM-Cs-4Ml-p.mjs} +2 -2
  107. package/dist/{workflows-K6zetcqI.mjs → workflows-MANdvLft.mjs} +19 -21
  108. package/dist/{writer-B-SpZ0G2-CLh7sXRd.mjs → writer-byNNUjRm-w5O7-VT_.mjs} +24 -33
  109. package/package.json +11 -11
  110. package/dist/common-AK0q0Oz0.mjs +0 -20
  111. package/dist/credential-requirements-Ob-7H-0F.mjs +0 -250
  112. package/dist/cron-parser-Dw_cWzFu.mjs +0 -393
  113. package/dist/declared-credential-requirements-D6KT-r-e.mjs +0 -103
  114. package/dist/task-BRmL2lmw.mjs +0 -486
  115. package/dist/task-target-deploy-DmpCWE3u.mjs +0 -4
  116. package/dist/trigger-manifest-DxdCjGz_.mjs +0 -29
  117. package/dist/workflow-build-manifest-BKKW9D05.mjs +0 -259
  118. /package/dist/{agent-manifest-tIsqF2OP.mjs → agent-manifest-CZ7BeUSG.mjs} +0 -0
  119. /package/dist/{browser-BpJ8ut9z.mjs → browser-Cu4k-wT_.mjs} +0 -0
  120. /package/dist/{clear-cache.handler-CTLQ1PIN.mjs → clear-cache.handler-8RFmjHoo.mjs} +0 -0
  121. /package/dist/{clear.handler-C_pXAeBG.mjs → clear.handler-mfNmIUYP.mjs} +0 -0
  122. /package/dist/{concurrency-gXn9Rw8x-BTlfau8D.mjs → concurrency-gXn9Rw8x-BSBbRfVp.mjs} +0 -0
  123. /package/dist/{credential-env-map-BA4LNI7x.mjs → credential-env-map-qLCR_QbO.mjs} +0 -0
  124. /package/dist/{credential-schema-mismatch-z74ud-YZ.mjs → credential-schema-mismatch-BHI_B-U-.mjs} +0 -0
  125. /package/dist/{diff-utils-B0ED-Igv.mjs → diff-utils-x5pi8SrL.mjs} +0 -0
  126. /package/dist/{layout-P1v-Gssz.mjs → layout-DRf9qUf8.mjs} +0 -0
  127. /package/dist/{list.handler-BLkQKiV1.mjs → list.handler-CynN-ezD.mjs} +0 -0
  128. /package/dist/{logs.handler-DyRoevtO.mjs → logs.handler-CcA1UzJm.mjs} +0 -0
  129. /package/dist/{oxc-B3KI3rf_-Cvx4Z-4H.mjs → oxc-B3KI3rf_-Cnk0L10M.mjs} +0 -0
  130. /package/dist/{read-credential-keys-77a91T8M-B0eiobOd.mjs → read-credential-keys-77a91T8M-CzXPGxdU.mjs} +0 -0
  131. /package/dist/{register.handler-BXeh5mdb.mjs → register.handler-CSvlOMF6.mjs} +0 -0
  132. /package/dist/{resolve-project-CNQtOWE4.mjs → resolve-project-CWP2fji3.mjs} +0 -0
  133. /package/dist/{rolldown-runtime-twds-ZHy-8uqgIurC.mjs → rolldown-runtime-twds-ZHy-BoF7MLzP.mjs} +0 -0
  134. /package/dist/{run-polling-DARidqo-.mjs → run-polling-CzyVv7Ba.mjs} +0 -0
  135. /package/dist/{schema-BjH_e4Fo.mjs → schema-CvSZqa3t.mjs} +0 -0
  136. /package/dist/{schema-display-NVEl_DFY.mjs → schema-display-DxLA3j5H.mjs} +0 -0
  137. /package/dist/{schemas-BxFPUGWT.mjs → schemas-U2OzP9gP.mjs} +0 -0
  138. /package/dist/{skill-installer-BBgN2tzW.mjs → skill-installer-CYFshTBy.mjs} +0 -0
  139. /package/dist/{skills.handler-Do9I3dQS.mjs → skills.handler-Bma-MJX-.mjs} +0 -0
  140. /package/dist/{spinner-progress-Bx-fYItP.mjs → spinner-progress-DV28G4tP.mjs} +0 -0
  141. /package/dist/{status.handler-BsVtDW_V.mjs → status.handler-BOV0eX3J.mjs} +0 -0
  142. /package/dist/{types-BMBuhHhW.mjs → types-DamInJD6.mjs} +0 -0
  143. /package/dist/{upgrade.handler-5qSzPC7D.mjs → upgrade.handler-Bz_oQcAw.mjs} +0 -0
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { r as getKeystrokeProjectPath } from "./paths-JzzFkXQA-CEipIeVl.mjs";
4
4
  import "./dist-CIInPRGh.mjs";
5
- import { t as readCredentialKeysFromSchemaObject } from "./read-credential-keys-77a91T8M-B0eiobOd.mjs";
5
+ import { t as readCredentialKeysFromSchemaObject } from "./read-credential-keys-77a91T8M-CzXPGxdU.mjs";
6
6
  import path from "node:path";
7
7
  import { mkdir, writeFile } from "node:fs/promises";
8
8
  import { pathToFileURL } from "node:url";
@@ -111,7 +111,7 @@ async function buildTaskTargetFile(options) {
111
111
  return builtTasks;
112
112
  }
113
113
  async function bundleTaskTargetModule(options) {
114
- const [{ rolldown }, { createEnvAccessPlugin, formatEnvAccessError }] = await Promise.all([import("rolldown"), import("./detect-env-access-CwkOYeYM-CNTyUzme.mjs").then((n) => n.n).then((n) => n.n)]);
114
+ const [{ rolldown }, { createEnvAccessPlugin, formatEnvAccessError }] = await Promise.all([import("rolldown"), import("./detect-env-access-CwkOYeYM-D8-hxij0.mjs").then((n) => n.n).then((n) => n.n)]);
115
115
  const entryId = "\0virtual:task-target-entry";
116
116
  const trackedDependencies = /* @__PURE__ */ new Set();
117
117
  const envViolations = [];
@@ -218,7 +218,7 @@ async function attachTaskTargetTriggers(options) {
218
218
  options.artifact.triggers.push(...buildTaskTriggerArtifactsWithoutBundles(options.entry.taskMetadata.triggers, options.artifact.task.taskId, options.artifact.task.taskName));
219
219
  return [];
220
220
  }
221
- const { buildTriggerArtifacts } = await import("./trigger-artifacts-RizI57RC-DjhOsdOm.mjs").then((n) => n.n);
221
+ const { buildTriggerArtifacts } = await import("./trigger-artifacts-BcRScRSp-DqFgzl_B.mjs").then((n) => n.n);
222
222
  const triggerResult = await buildTriggerArtifacts(options.entry.taskMetadata.triggers, options.artifact.task.taskId, options.artifact.task.taskName, options.projectRoot, {
223
223
  workflowExportName: options.entry.source.localExportName,
224
224
  workflowFilePath: options.entry.runtimeBundlePath
@@ -237,57 +237,56 @@ async function prepareTaskTargetOutput(options) {
237
237
  }
238
238
  function hasTriggerRuntimeCallbacks(triggers) {
239
239
  return triggers.some((trigger) => {
240
- const callbacks = trigger.triggerManifest.runtime.callbacks;
241
- return trigger.hasTransform || Boolean(callbacks?.verify || callbacks?.filter || callbacks?.idempotencyKey || callbacks?.poll);
240
+ const runtime = trigger.triggerManifest.runtime;
241
+ return trigger.hasTransform || runtime.poll === true;
242
242
  });
243
243
  }
244
244
  function buildTaskTriggerArtifactsWithoutBundles(loadedTriggers, workflowId, workflowName) {
245
245
  return loadedTriggers.map((loaded) => {
246
246
  const triggerManifest = loaded.triggerManifest;
247
- const triggerName = triggerManifest.name;
247
+ const authoredTriggerId = triggerManifest.id;
248
248
  const triggerType = triggerManifest.triggerType;
249
249
  const runtime = triggerManifest.runtime;
250
- const callbacks = runtime.callbacks;
250
+ const hasPollBundle = "poll" in runtime && runtime.poll === true;
251
251
  const webhookSource = "source" in runtime && runtime.source && typeof runtime.source === "object" ? runtime.source : null;
252
252
  const projectedConfig = webhookSource ? webhookSource.type === "app" ? { source: {
253
253
  type: "app",
254
254
  appRef: webhookSource.appRef
255
- } } : { source: {
256
- type: "custom",
257
- method: webhookSource.method,
258
- path: webhookSource.path,
259
- ...webhookSource.response ? { response: webhookSource.response } : {}
260
- } } : void 0;
255
+ } } : { source: { type: "custom" } } : void 0;
256
+ const filterSchema = "filterSchema" in runtime && runtime.filterSchema && typeof runtime.filterSchema === "object" ? runtime.filterSchema : void 0;
257
+ const idempotencyConfig = "idempotencyConfig" in runtime && runtime.idempotencyConfig ? runtime.idempotencyConfig : void 0;
258
+ const lineage = triggerManifest.lineage;
259
+ const webhookAuthGroupKey = triggerType === "webhook" ? (lineage && lineage.length > 0 ? lineage[0] : void 0) ?? authoredTriggerId : void 0;
261
260
  return {
262
- triggerId: generateTaskTriggerId(workflowId, triggerName),
261
+ triggerId: generateTaskTriggerId(workflowId, authoredTriggerId),
263
262
  triggerType,
264
- triggerName,
263
+ authoredTriggerId,
265
264
  workflowId,
266
265
  workflowName,
267
266
  sourceFilePath: loaded.sourceFilePath,
268
267
  hasTransform: loaded.hasTransform,
269
- hasFilter: loaded.hasFilter,
270
268
  enabled: triggerManifest.enabled,
269
+ ...filterSchema ? { filterSchema } : {},
270
+ ...idempotencyConfig ? { idempotencyConfig } : {},
271
271
  ..."schedule" in runtime && typeof runtime.schedule === "string" ? { schedule: runtime.schedule } : {},
272
272
  ..."timezone" in runtime && typeof runtime.timezone === "string" ? { timezone: runtime.timezone } : {},
273
273
  ...webhookSource ? { triggerSource: webhookSource.type } : {},
274
- ...webhookSource?.type === "custom" && webhookSource.path ? { path: webhookSource.path } : {},
275
- ...webhookSource?.type === "custom" && webhookSource.method ? { method: webhookSource.method } : {},
274
+ ...webhookAuthGroupKey ? { webhookAuthGroupKey } : {},
276
275
  ...projectedConfig ? { config: projectedConfig } : {},
277
276
  ...triggerManifest.modeDefault ? { modeDefault: triggerManifest.modeDefault } : {},
278
- ...triggerManifest.credentialSets ? { requiredCredentials: buildTaskTriggerCredentialRequirements(triggerManifest.credentialSets, callbacks) } : {},
277
+ ...triggerManifest.credentialSets ? { requiredCredentials: buildTaskTriggerCredentialRequirements(triggerManifest.credentialSets, hasPollBundle) } : {},
279
278
  ...loaded.staticPayload !== void 0 ? { staticPayload: loaded.staticPayload } : {},
280
279
  trigger: loaded.triggerManifest
281
280
  };
282
281
  });
283
282
  }
284
- function generateTaskTriggerId(workflowId, triggerName) {
285
- return createHash("sha256").update(`${workflowId}::${triggerName}`).digest("hex").slice(0, 16);
283
+ function generateTaskTriggerId(workflowId, authoredTriggerId) {
284
+ return createHash("sha256").update(`${workflowId}::${authoredTriggerId}`).digest("hex").slice(0, 16);
286
285
  }
287
- function buildTaskTriggerCredentialRequirements(credentialSets, callbacks) {
286
+ function buildTaskTriggerCredentialRequirements(credentialSets, hasPollBundle) {
288
287
  if (!credentialSets || credentialSets.length === 0) return {
289
288
  required: [],
290
- byCallback: {}
289
+ byPollExport: {}
291
290
  };
292
291
  const entries = credentialSets.map((credentialSet) => {
293
292
  const optionalCredentialKeys = readOptionalJsonSchemaKeysFromSchemaObject(credentialSet.auth);
@@ -302,12 +301,11 @@ function buildTaskTriggerCredentialRequirements(credentialSets, callbacks) {
302
301
  };
303
302
  });
304
303
  const requiredIds = credentialSets.map((credentialSet) => credentialSet.id);
305
- const byCallback = {};
306
- if (callbacks?.poll) byCallback.callback = entries;
307
- if (callbacks?.verify) byCallback.verify = entries;
304
+ const byPollExport = {};
305
+ if (hasPollBundle) byPollExport.poll = entries;
308
306
  return {
309
307
  required: requiredIds,
310
- byCallback
308
+ byPollExport
311
309
  };
312
310
  }
313
311
  function createPreparedTaskTarget(artifact, triggers) {
@@ -321,7 +319,7 @@ function createPreparedTaskTarget(artifact, triggers) {
321
319
  };
322
320
  }
323
321
  async function tryParseTaskBuildManifest(manifest) {
324
- const { TaskBuildManifestSchema } = await import("./task-BRmL2lmw.mjs").then((n) => n.t);
322
+ const { TaskBuildManifestSchema } = await import("./task-BSCN9cU4.mjs").then((n) => n.t);
325
323
  const result = TaskBuildManifestSchema.safeParse(manifest);
326
324
  return result.success ? result.data : null;
327
325
  }
@@ -353,7 +351,6 @@ function discoverTaskTriggers(task, importedModule, sourceFilePath) {
353
351
  triggerExportName: findTriggerExportName(entry, trigger, importedModule),
354
352
  sourceFilePath,
355
353
  hasTransform: isBound && typeof entry.transform === "function",
356
- hasFilter: isBound ? typeof entry.filter === "function" : typeof trigger.filter === "function",
357
354
  staticPayload,
358
355
  triggerIndex
359
356
  });
@@ -367,7 +364,7 @@ function isTaskLike(value) {
367
364
  return isRecord(value) && typeof value.toManifest === "function";
368
365
  }
369
366
  function isTriggerLike(value) {
370
- return isRecord(value) && typeof value.name === "string" && typeof value.toManifest === "function";
367
+ return isRecord(value) && typeof value.id === "string" && typeof value.toManifest === "function";
371
368
  }
372
369
  function isBoundTriggerLike(value) {
373
370
  return isRecord(value) && value.isBoundTrigger === true && isTriggerLike(value.trigger);
@@ -379,47 +376,36 @@ function findTriggerExportName(entry, trigger, importedModule) {
379
376
  for (const [name, value] of Object.entries(importedModule)) {
380
377
  if (value === entry || value === trigger) return name;
381
378
  if (isBoundTriggerLike(value) && (value === entry || value.trigger === trigger)) return name;
382
- if (isTriggerLike(value) && value.name === trigger.name) return name;
379
+ if (isTriggerLike(value) && value.id === trigger.id) return name;
383
380
  }
384
381
  }
385
382
  function toTriggerUploadData(trigger) {
386
- const callbackExports = trigger.callbackExports;
387
- const transformCallbackExports = trigger.transformCallbackExports;
383
+ const pollExports = trigger.pollExports;
388
384
  return {
389
385
  id: trigger.triggerId,
386
+ authoredTriggerId: trigger.authoredTriggerId,
390
387
  type: trigger.triggerType,
391
388
  ...trigger.triggerSource ? { triggerSource: trigger.triggerSource } : {},
389
+ ...trigger.webhookAuthGroupKey ? { webhookAuthGroupKey: trigger.webhookAuthGroupKey } : {},
392
390
  enabled: trigger.enabled,
393
- ...trigger.path ? { path: trigger.path } : {},
394
- ...trigger.method ? { method: trigger.method } : {},
395
391
  ...trigger.schedule ? { schedule: trigger.schedule } : {},
396
392
  ...trigger.timezone ? { timezone: trigger.timezone } : {},
397
393
  ...trigger.config ? { config: trigger.config } : {},
398
394
  ...trigger.requiredCredentials ? { requiredCredentials: trigger.requiredCredentials } : {},
399
- ...callbackExports ? { callbackExports } : {},
400
- ...trigger.callbackBundle ? { callbackBundle: {
401
- code: trigger.callbackBundle.code,
402
- hash: trigger.callbackBundle.hash ?? createHash("sha256").update(trigger.callbackBundle.code).digest("hex"),
403
- size: trigger.callbackBundle.size
404
- } } : {},
405
- ...transformCallbackExports ? { transformCallbackExports } : {},
406
- ...trigger.transformCallbackBundle ? { transformCallbackBundle: {
407
- code: trigger.transformCallbackBundle.code,
408
- hash: trigger.transformCallbackBundle.hash ?? createHash("sha256").update(trigger.transformCallbackBundle.code).digest("hex"),
409
- size: trigger.transformCallbackBundle.size
395
+ ...trigger.filterSchema ? { filterSchema: trigger.filterSchema } : {},
396
+ ...trigger.idempotencyConfig ? { idempotencyConfig: trigger.idempotencyConfig } : {},
397
+ ...pollExports ? { pollExports } : {},
398
+ ...trigger.pollBundle ? { pollBundle: {
399
+ code: trigger.pollBundle.code,
400
+ hash: trigger.pollBundle.hash ?? createHash("sha256").update(trigger.pollBundle.code).digest("hex"),
401
+ size: trigger.pollBundle.size
410
402
  } } : {}
411
403
  };
412
404
  }
413
405
  function releaseTriggerBundleCode(triggers) {
414
- for (const trigger of triggers) {
415
- if (trigger.callbackBundle) {
416
- trigger.callbackBundle.code = "";
417
- trigger.callbackBundle.released = true;
418
- }
419
- if (trigger.transformCallbackBundle) {
420
- trigger.transformCallbackBundle.code = "";
421
- trigger.transformCallbackBundle.released = true;
422
- }
406
+ for (const trigger of triggers) if (trigger.pollBundle) {
407
+ trigger.pollBundle.code = "";
408
+ trigger.pollBundle.released = true;
423
409
  }
424
410
  }
425
411
  function releaseBuiltTaskTargets(builtTasks) {
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { n as deployTaskTargets } from "./task-target-deploy-dQYnMO8n-CeTmRcDw.mjs";
4
+ export { deployTaskTargets };
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { n as SHA256HashSchema } from "./common-AK0q0Oz0.mjs";
3
+ import { u as SHA256HashSchema } from "./src-BHTjsZ9V.mjs";
4
4
  import { createHash } from "node:crypto";
5
5
  //#region ../../packages/shared-types/src/deployments/api/snapshot-payload.ts
6
6
  function sortObjectKeysDeep(value) {
@@ -50,18 +50,18 @@ function normalizeWorkflowManifest(manifest) {
50
50
  function normalizeTrigger(trigger) {
51
51
  return sortObjectKeysDeep({
52
52
  id: trigger.id,
53
+ authoredTriggerId: trigger.authoredTriggerId,
53
54
  type: trigger.type,
54
55
  enabled: trigger.enabled,
55
- ...trigger.path !== void 0 ? { path: trigger.path } : {},
56
- ...trigger.method !== void 0 ? { method: trigger.method } : {},
56
+ ...trigger.webhookAuthGroupKey !== void 0 ? { webhookAuthGroupKey: trigger.webhookAuthGroupKey } : {},
57
57
  ...trigger.schedule !== void 0 ? { schedule: trigger.schedule } : {},
58
58
  ...trigger.timezone !== void 0 ? { timezone: trigger.timezone } : {},
59
59
  ...trigger.config !== void 0 ? { config: trigger.config } : {},
60
60
  ...trigger.requiredCredentials !== void 0 ? { requiredCredentials: trigger.requiredCredentials } : {},
61
- ...trigger.callbackBundle ? { callbackBundleHash: trigger.callbackBundle.hash } : {},
62
- ...trigger.callbackExports !== void 0 ? { callbackExports: trigger.callbackExports } : {},
63
- ...trigger.transformCallbackBundle ? { transformCallbackBundleHash: trigger.transformCallbackBundle.hash } : {},
64
- ...trigger.transformCallbackExports !== void 0 ? { transformCallbackExports: trigger.transformCallbackExports } : {}
61
+ ...trigger.filterSchema !== void 0 ? { filterSchema: trigger.filterSchema } : {},
62
+ ...trigger.idempotencyConfig !== void 0 ? { idempotencyConfig: trigger.idempotencyConfig } : {},
63
+ ...trigger.pollBundle ? { pollBundleHash: trigger.pollBundle.hash } : {},
64
+ ...trigger.pollExports !== void 0 ? { pollExports: trigger.pollExports } : {}
65
65
  });
66
66
  }
67
67
  function normalizeAgentManifest(manifest) {
@@ -100,7 +100,7 @@ function buildCanonicalProjectSnapshotPayload(params) {
100
100
  };
101
101
  }
102
102
  //#endregion
103
- //#region ../../packages/workflow-deploy/dist/task-target-deploy-CZBGNC0H.mjs
103
+ //#region ../../packages/workflow-deploy/dist/task-target-deploy-dQYnMO8n.mjs
104
104
  function computeProjectSnapshotHash(params) {
105
105
  const hex = createHash("sha256").update(JSON.stringify(buildCanonicalProjectSnapshotPayload({
106
106
  workflows: params.workflows,
@@ -149,7 +149,7 @@ async function deployTaskTargets(options) {
149
149
  tasksToDeploy
150
150
  }) });
151
151
  } finally {
152
- releasePreparedTaskCallbackBundleCode(tasksToDeploy);
152
+ releasePreparedTaskPollBundleCode(tasksToDeploy);
153
153
  }
154
154
  const taskResults = deployResult.tasks ?? [];
155
155
  onDeployProgressEvent?.({
@@ -159,7 +159,7 @@ async function deployTaskTargets(options) {
159
159
  failed: taskResults.filter((item) => item.status === "failed").length,
160
160
  elapsedMs: Date.now() - registerStartedAt
161
161
  });
162
- return finalizeTaskTargetResult([...skippedTasks, ...taskResults.map(mapTaskResultStatus)], startedAt);
162
+ return finalizeTaskTargetResult([...skippedTasks, ...taskResults.map(mapTaskResultStatus)], startedAt, deployResult.newWebhookCredentials);
163
163
  }
164
164
  function buildTaskTargetDeployRequest(params) {
165
165
  return {
@@ -251,19 +251,17 @@ function mapTaskResultStatus(result) {
251
251
  taskId: result.taskId
252
252
  };
253
253
  }
254
- function releasePreparedTaskCallbackBundleCode(preparedTasks) {
255
- for (const task of preparedTasks) for (const trigger of task.triggers) {
256
- if (trigger.callbackBundle) trigger.callbackBundle.code = "";
257
- if (trigger.transformCallbackBundle) trigger.transformCallbackBundle.code = "";
258
- }
254
+ function releasePreparedTaskPollBundleCode(preparedTasks) {
255
+ for (const task of preparedTasks) for (const trigger of task.triggers) if (trigger.pollBundle) trigger.pollBundle.code = "";
259
256
  }
260
- function finalizeTaskTargetResult(tasks, startedAt) {
257
+ function finalizeTaskTargetResult(tasks, startedAt, newWebhookCredentials) {
261
258
  return {
262
259
  success: tasks.every((task) => task.status !== "failed"),
263
260
  workflows: [],
264
261
  agents: [],
265
262
  tasks,
266
- totalTime: Date.now() - startedAt
263
+ totalTime: Date.now() - startedAt,
264
+ ...newWebhookCredentials ? { newWebhookCredentials } : {}
267
265
  };
268
266
  }
269
267
  //#endregion
@@ -119,7 +119,7 @@ function restartStage(options, projectRoot, stage) {
119
119
  }
120
120
  async function runBuildPhase(options, projectRoot) {
121
121
  const projectConfig = await assertWorkflowProjectRoot(projectRoot);
122
- const { buildTaskTargetEntries } = await import("./task-target-build-DCV0UDaz.mjs");
122
+ const { buildTaskTargetEntries } = await import("./task-target-build-B0HF2_At.mjs");
123
123
  await writeBuildDescriptor(projectRoot, {
124
124
  projectRoot,
125
125
  projectConfig,
@@ -132,7 +132,7 @@ async function runBuildPhase(options, projectRoot) {
132
132
  }
133
133
  async function runPreparePhase(projectRoot) {
134
134
  const buildDescriptor = await readBuildDescriptor(projectRoot);
135
- const { prepareTaskTargetBuiltTasks } = await import("./task-target-build-DCV0UDaz.mjs");
135
+ const { prepareTaskTargetBuiltTasks } = await import("./task-target-build-B0HF2_At.mjs");
136
136
  const prepareResult = await prepareTaskTargetBuiltTasks({
137
137
  builtTasks: buildDescriptor.builtTasks,
138
138
  projectRoot
@@ -163,11 +163,11 @@ async function resolveDeployAuthOptions(options) {
163
163
  }
164
164
  async function runDeployPhase(options, projectRoot) {
165
165
  const descriptor = await readDescriptor(projectRoot);
166
- const { createDeployClient } = await import("./deploy-BPDUTKZD.mjs");
166
+ const { createDeployClient } = await import("./deploy-BKjcO_sm.mjs");
167
167
  const client = createDeployClient(await resolveDeployAuthOptions(options));
168
168
  const auth = await client.public.auth.validate();
169
169
  if (auth.organizationId !== descriptor.projectConfig.organizationId) throw new Error(`Project organization mismatch: config=${descriptor.projectConfig.organizationId} auth=${auth.organizationId}`);
170
- const { deployTaskTargets } = await import("./task-target-deploy-DmpCWE3u.mjs");
170
+ const { deployTaskTargets } = await import("./task-target-deploy-ClbwKJ8K.mjs");
171
171
  const result = await deployTaskTargets({
172
172
  preparedTasks: descriptor.preparedTasks,
173
173
  client,
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { a as ui } from "./keystroke.mjs";
4
4
  import { n as JsonOptionSchema, t as JSON_OPTION_CONFIG } from "./output-BWcVRt-T.mjs";
5
- import { t as createTypedCommand } from "./commander-C5qcOo8m.mjs";
5
+ import { t as createTypedCommand } from "./commander-DQLrBSIW.mjs";
6
6
  import { z } from "zod";
7
7
  //#region src/commands/test/test.command.ts
8
8
  const TestOptionsSchema = JsonOptionSchema;
@@ -63,7 +63,7 @@ function createTestCommand() {
63
63
  description: "Agent tool name from the built manifest",
64
64
  key: "toolName"
65
65
  },
66
- loadHandler: async () => (await import("./tool.handler-DMfFZCRg.mjs")).handleTestTool
66
+ loadHandler: async () => (await import("./tool.handler-C3LNyQbc.mjs")).handleTestTool
67
67
  })]
68
68
  });
69
69
  cmd.enablePositionalOptions();
@@ -3,14 +3,14 @@
3
3
  import { D as CliExitError, a as ui, l as isLocalMode, y as toErrorMessage } from "./keystroke.mjs";
4
4
  import { i as projects } from "./dist-CIInPRGh.mjs";
5
5
  import { t as assertWorkflowProjectRoot } from "./project-config-DudGRFPO.mjs";
6
- import { i as requireClient, t as assertProjectConfigMatchesAuthenticatedOrg } from "./context-BydAGTiB.mjs";
7
- import { o as readWorkflowsFromDisk, s as uploadTestBundle } from "./dist-Cx0RV8s7.mjs";
8
- import { t as requireWorkflowsDir } from "./resolve-project-CNQtOWE4.mjs";
9
- import { a as runWorkflowBuild, t as WorkflowNotFoundError } from "./workflow-build-C8AiYxqp.mjs";
10
- import { r as isUnknownSchema } from "./schema-display-NVEl_DFY.mjs";
11
- import { t as createBuildProgress } from "./build-progress-AR8xow4_.mjs";
12
- import { t as withErrorBoundary } from "./error-boundary-B8cmSwJH.mjs";
13
- import { a as tryReadExistingInputSchema, n as resolveInput, o as validateInputOrExit, t as pollForCompletion } from "./run-polling-BhOdFyh3.mjs";
6
+ import { i as requireClient, t as assertProjectConfigMatchesAuthenticatedOrg } from "./context-BUzxM3QI.mjs";
7
+ import { o as readWorkflowsFromDisk, s as uploadTestBundle } from "./dist-BGrWr5fp.mjs";
8
+ import { t as requireWorkflowsDir } from "./resolve-project-CWP2fji3.mjs";
9
+ import { a as runWorkflowBuild, t as WorkflowNotFoundError } from "./workflow-build-IGYhEC8Y.mjs";
10
+ import { r as isUnknownSchema } from "./schema-display-DxLA3j5H.mjs";
11
+ import { t as createBuildProgress } from "./build-progress-BVwDg6lC.mjs";
12
+ import { t as withErrorBoundary } from "./error-boundary-GtRvP2oP.mjs";
13
+ import { a as tryReadExistingInputSchema, n as resolveInput, o as validateInputOrExit, t as pollForCompletion } from "./run-polling-DKclfet-.mjs";
14
14
  //#region src/lib/format.ts
15
15
  function formatBytes(bytes) {
16
16
  if (bytes < 1024) return `${bytes} B`;
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  import { a as ui } from "./keystroke.mjs";
4
- import { a as validateApiKey, i as requireClient } from "./context-BydAGTiB.mjs";
4
+ import { a as validateApiKey, i as requireClient } from "./context-BUzxM3QI.mjs";
5
5
  //#region src/commands/auth/test.handler.ts
6
6
  async function handleAuthTest(_options, ctx) {
7
7
  const result = await validateApiKey(requireClient(ctx));
@@ -4,18 +4,20 @@ import { D as CliExitError, a as ui, c as getProcessEnv, j as throwReportedCliEx
4
4
  import { t as Credentials } from "./dist-CIInPRGh.mjs";
5
5
  import { t as assertWorkflowProjectRoot } from "./project-config-DudGRFPO.mjs";
6
6
  import { i as writeJson } from "./output-BWcVRt-T.mjs";
7
- import { i as requireClient, t as assertProjectConfigMatchesAuthenticatedOrg } from "./context-BydAGTiB.mjs";
8
- import { a as readManifestsFromOutDir } from "./dist-Cx0RV8s7.mjs";
9
- import { t as requireWorkflowsDir } from "./resolve-project-CNQtOWE4.mjs";
10
- import { a as runWorkflowBuild, n as renderBuildFailure } from "./workflow-build-C8AiYxqp.mjs";
11
- import { t as lookupCurrentDeploymentWorkflow } from "./current-deployment-workflow-BVliROAz.mjs";
12
- import { n as resolveInput, o as validateInputOrExit, t as pollForCompletion } from "./run-polling-BhOdFyh3.mjs";
7
+ import { i as requireClient, t as assertProjectConfigMatchesAuthenticatedOrg } from "./context-BUzxM3QI.mjs";
8
+ import { a as readManifestsFromOutDir } from "./dist-BGrWr5fp.mjs";
9
+ import { t as requireWorkflowsDir } from "./resolve-project-CWP2fji3.mjs";
10
+ import { a as runWorkflowBuild, n as renderBuildFailure } from "./workflow-build-IGYhEC8Y.mjs";
11
+ import { t as lookupCurrentDeploymentWorkflow } from "./current-deployment-workflow-pyBoobIm.mjs";
12
+ import { n as resolveInput, o as validateInputOrExit, t as pollForCompletion } from "./run-polling-DKclfet-.mjs";
13
13
  import * as os from "node:os";
14
14
  import { tmpdir } from "node:os";
15
15
  import * as path$1 from "node:path";
16
16
  import path from "node:path";
17
17
  import { mkdtemp, rm, writeFile } from "node:fs/promises";
18
18
  import { pathToFileURL } from "node:url";
19
+ import { clearOperationContext, clearOperationCredentialResolver, registerOperationContext, registerOperationCredentialResolver } from "@keystrokehq/core/operation/runtime";
20
+ import { clearRuntime, registerRuntime } from "@keystrokehq/core/workflow/runtime";
19
21
  //#region ../../packages/testing/src/shared/create-mock-hook.ts
20
22
  /** Creates a Hook that resolves immediately when awaited. */
21
23
  function createMockHook() {
@@ -41,62 +43,6 @@ function createTestWorkflowContext(options = {}) {
41
43
  };
42
44
  }
43
45
  //#endregion
44
- //#region ../../packages/core/dist/chunks/execution-scope-BCDb3CU7.mjs
45
- const SCOPE_STACK_KEY = "__ks_execution_scope_stack__";
46
- function getScopeStack() {
47
- const g = globalThis;
48
- if (!g[SCOPE_STACK_KEY]) g[SCOPE_STACK_KEY] = [];
49
- return g[SCOPE_STACK_KEY];
50
- }
51
- function getCurrentScope() {
52
- const stack = getScopeStack();
53
- return stack[stack.length - 1] ?? getDefaultScope();
54
- }
55
- const DEFAULT_SCOPE_KEY = "__ks_execution_scope_default__";
56
- function getDefaultScope() {
57
- const g = globalThis;
58
- if (!g[DEFAULT_SCOPE_KEY]) g[DEFAULT_SCOPE_KEY] = { stepContextProviders: [] };
59
- return g[DEFAULT_SCOPE_KEY];
60
- }
61
- function setExecutionScopeWorkflowRuntime(provider) {
62
- const scope = getCurrentScope();
63
- scope.workflowRuntimeProvider = provider;
64
- }
65
- function pushExecutionScopeStepContext(provider) {
66
- const scope = getCurrentScope();
67
- scope.stepContextProviders = [...scope.stepContextProviders, provider];
68
- }
69
- function clearExecutionScopeStepContexts() {
70
- const scope = getCurrentScope();
71
- scope.stepContextProviders = [];
72
- }
73
- function setExecutionScopeStepCredentialResolver(resolver) {
74
- const scope = getCurrentScope();
75
- scope.stepCredentialResolver = resolver;
76
- }
77
- //#endregion
78
- //#region ../../packages/core/dist/chunks/credential-resolver-registry-BRH30wCz.mjs
79
- function registerOperationContext(registry) {
80
- pushExecutionScopeStepContext(registry.getOperationContext);
81
- }
82
- function clearOperationContext() {
83
- clearExecutionScopeStepContexts();
84
- }
85
- function registerOperationCredentialResolver(resolver) {
86
- setExecutionScopeStepCredentialResolver(resolver.resolveOperationCredentials);
87
- }
88
- function clearOperationCredentialResolver() {
89
- setExecutionScopeStepCredentialResolver(void 0);
90
- }
91
- //#endregion
92
- //#region ../../packages/core/dist/chunks/context-registry-DqNWcTgK.mjs
93
- function registerRuntime(registry) {
94
- setExecutionScopeWorkflowRuntime(registry.getRuntime);
95
- }
96
- function clearRuntime() {
97
- setExecutionScopeWorkflowRuntime(void 0);
98
- }
99
- //#endregion
100
46
  //#region ../../packages/testing/src/test-runtime/credentials/env-resolver.ts
101
47
  /**
102
48
  * Computes the env var name for a credential key.
@@ -107,7 +53,7 @@ function normalizeEnvVarName(credentialSet, key) {
107
53
  return `${credentialSet.id.replace(/[-]/g, "_").toUpperCase()}_${key}`;
108
54
  }
109
55
  function getCredentialSetKeys(credentialSet) {
110
- return Object.keys(credentialSet.auth.shape);
56
+ return [...credentialSet.credentialKeys];
111
57
  }
112
58
  function resolveCredentialsFromEnv(credentialSet, options = {}) {
113
59
  const credentials = {};