twenty 2.48.0 → 2.50.0

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 (124) hide show
  1. package/dist/app-template/AGENTS.md +16 -1
  2. package/dist/app-template/src/front-components/main-page.tsx +1 -1
  3. package/dist/app-template/yarn.lock +157 -183
  4. package/dist/app-worker.cjs +1 -1
  5. package/dist/chunks/application-C02vC9wC.cjs +5 -0
  6. package/dist/chunks/{build-pull-entities-BBNc4zkt.cjs → build-pull-entities-DUmEo3aj.cjs} +2 -2
  7. package/dist/chunks/{build-source-manifest-BMjw7BvT.cjs → build-source-manifest-BeFnnS85.cjs} +1 -1
  8. package/dist/chunks/{build-source-snapshot-BbQlyo_m.cjs → build-source-snapshot-Cqb4LMAC.cjs} +813 -154
  9. package/dist/chunks/cli-version.constant-jQjsWsAO.cjs +1 -0
  10. package/dist/chunks/{collect-translatable-strings-C3TWaO1V.cjs → collect-translatable-strings-D9iJWM3B.cjs} +1 -1
  11. package/dist/chunks/{collect-watch-inputs-Cexr5YYZ.cjs → collect-watch-inputs-CSE6DsGE.cjs} +1 -1
  12. package/dist/chunks/compile-application-translations-eYLVYoTD.cjs +1 -0
  13. package/dist/chunks/{constants-Du9J-8Ug-CD8GTrut.cjs → constants-BAi8jZf9-C7iTUxcn.cjs} +1 -1
  14. package/dist/chunks/{convert-to-label-D24GvvpW.cjs → convert-to-label-DB0PYecG.cjs} +1 -1
  15. package/dist/chunks/{create-http-status-error-Dd3336c8.cjs → create-http-status-error-CCASIoUs.cjs} +1 -1
  16. package/dist/chunks/create-metadata-client-DsTAacZG.cjs +6 -0
  17. package/dist/chunks/{create-pull-base-write-Cl1jfQ6l.cjs → create-pull-base-write-Lh9yrY5q.cjs} +1 -1
  18. package/dist/chunks/create-rest-client-C-uI61ur.cjs +1 -0
  19. package/dist/chunks/extract-manifest-from-file-yeNBn6po.cjs +1 -0
  20. package/dist/chunks/{extract-source-translations-BLQ-XFuN.cjs → extract-source-translations-CZW5S9vg.cjs} +1 -1
  21. package/dist/chunks/{fetch-metadata-inspection-BwJjaHCB.cjs → fetch-metadata-inspection-CHOmOnq5.cjs} +1 -1
  22. package/dist/chunks/{fetch-signed-in-identity-CWFlsW7e.cjs → fetch-signed-in-identity-BSx-tgUO.cjs} +1 -1
  23. package/dist/chunks/{fetch-workspace-id-DJFdCITG.cjs → fetch-workspace-id-Bg2V_cma.cjs} +1 -1
  24. package/dist/chunks/format-body-DqhC3QLB.cjs +1 -0
  25. package/dist/chunks/{format-data-value-C5itQm1i.cjs → format-data-value-Dcn0aNoJ.cjs} +1 -1
  26. package/dist/chunks/{format-metadata-fields-BozY419E.cjs → format-metadata-fields-BpiTZFjv.cjs} +1 -1
  27. package/dist/chunks/{format-metadata-owner-C6CksDIK.cjs → format-metadata-owner-c6wBFmq7.cjs} +1 -1
  28. package/dist/chunks/format-progress-line-CeE356w0.cjs +1 -0
  29. package/dist/chunks/{generate-application-client-BApuJWQO.cjs → generate-application-client-9tS8r18c.cjs} +1 -1
  30. package/dist/chunks/{get-app-plan-summary-F_MjZOGe.cjs → get-app-plan-summary-DOhqg3eL.cjs} +1 -1
  31. package/dist/chunks/{get-client-generation-skip-reason-B5f_gcok.cjs → get-client-generation-skip-reason-D3_AAZQP.cjs} +1 -1
  32. package/dist/chunks/{get-function-input-schema-GNk3NRLJ-oQ5Evald.cjs → get-function-input-schema-GNk3NRLJ-BvvX155j.cjs} +1 -1
  33. package/dist/chunks/{global-flags.constant-BPHQAhn7.cjs → global-flags.constant-DaR1vQnA.cjs} +1 -1
  34. package/dist/chunks/{is-access-token-expiring-DIimejBr.cjs → is-access-token-expiring-jLfrOp26.cjs} +1 -1
  35. package/dist/chunks/{is-application-not-found-error-D0BAcKyX.cjs → is-application-not-found-error-DxO-ftTG.cjs} +1 -1
  36. package/dist/chunks/{is-exported-manifest-RF_O2ibz.cjs → is-exported-manifest-Cq0Sjj23.cjs} +1 -1
  37. package/dist/chunks/{is-locale-catalog-Dzj6m_Xt.cjs → is-locale-catalog-DjsopIs-.cjs} +1 -1
  38. package/dist/chunks/is-supported-locale-CdAUON0G.cjs +1 -0
  39. package/dist/chunks/{locale-catalog-format-BT6ommA1.cjs → locale-catalog-format-DwZh0gOt.cjs} +2 -2
  40. package/dist/chunks/metadata-Dojezbdo.cjs +1 -0
  41. package/dist/chunks/{metadata-page.constant-CnR03vnh.cjs → metadata-page.constant-CX7U7xM8.cjs} +1 -1
  42. package/dist/chunks/{parse-api-url-C9MmGtLY.cjs → parse-api-url-BeUTFxSv.cjs} +1 -1
  43. package/dist/chunks/{parse-app-export-BT6nM7Ki.cjs → parse-app-export-CaLKxant.cjs} +1 -1
  44. package/dist/chunks/{parse-extraction-locale-CM7sARBo.cjs → parse-extraction-locale-DMjUY8zC.cjs} +1 -1
  45. package/dist/chunks/{parse-graphql-response-DbYu3YlQ.cjs → parse-graphql-response-DSSJWiGu.cjs} +1 -1
  46. package/dist/chunks/{parse-json-input-DaXTn_6C.cjs → parse-json-input-BOUh0Y2U.cjs} +1 -1
  47. package/dist/chunks/{print-typescript-value-BoxeFXca.cjs → print-typescript-value-BU2EWXuF.cjs} +1 -1
  48. package/dist/chunks/{pull-source-DNswr_80.cjs → pull-source-DqAHeLk7.cjs} +1 -1
  49. package/dist/chunks/{read-app-identity-CtO3wiSx.cjs → read-app-identity-CdFKlGlw.cjs} +1 -1
  50. package/dist/chunks/{read-application-identifier-B51ax_Q6.cjs → read-application-identifier-Cckd5Pm1.cjs} +1 -1
  51. package/dist/chunks/{read-application-identity-Bx8B9Bel.cjs → read-application-identity-B8iACpb4.cjs} +1 -1
  52. package/dist/chunks/{read-config-LKYhSPOb.cjs → read-config-DYzGn3dk.cjs} +1 -1
  53. package/dist/chunks/read-json-object-VckLNpsj.cjs +1 -0
  54. package/dist/chunks/{read-snapshot-file-ClIpemjz.cjs → read-snapshot-file-CQ_tHUot.cjs} +1 -1
  55. package/dist/chunks/{read-source-identity-C4eKC14c.cjs → read-source-identity-SwqTRFjJ.cjs} +1 -1
  56. package/dist/chunks/{record-pull-base-CdTOndSf.cjs → record-pull-base-CH-q0A8T.cjs} +1 -1
  57. package/dist/chunks/{record-typecheck-config-inputs-DcCY-_Z1.cjs → record-typecheck-config-inputs-DWzR6mUU.cjs} +1 -1
  58. package/dist/chunks/{request-oauth-tokens-CS79pVAp.cjs → request-oauth-tokens-XMt_yPua.cjs} +1 -1
  59. package/dist/chunks/{resolve-app-project-BQnFOdLH.cjs → resolve-app-project-Dc5KpCDh.cjs} +1 -1
  60. package/dist/chunks/{resolve-command-target-CKYtQQPx.cjs → resolve-command-target-Dv9k9ic2.cjs} +1 -1
  61. package/dist/chunks/{resolve-inside-sdk-Cc_y-RWT.cjs → resolve-inside-sdk-BK6jFT6V.cjs} +1 -1
  62. package/dist/chunks/{resolve-metadata-object-CRWbF9Ce.cjs → resolve-metadata-object-Dlprkb-X.cjs} +1 -1
  63. package/dist/chunks/{resolve-project-typescript-CZW_p97L.cjs → resolve-project-typescript-BWyUXLJM.cjs} +1 -1
  64. package/dist/chunks/{resolve-request-url-BrqiqInn.cjs → resolve-request-url-B6KNhoFa.cjs} +1 -1
  65. package/dist/chunks/{resolve-source-sdk-CGEJC-UH.cjs → resolve-source-sdk-C0_F9oUQ.cjs} +1 -1
  66. package/dist/chunks/{run-api-graphql-command-KlIMjpOY.cjs → run-api-graphql-command-CVdIic7q.cjs} +1 -1
  67. package/dist/chunks/{run-api-rest-command-W4gCU562.cjs → run-api-rest-command-DgF7Vh0j.cjs} +1 -1
  68. package/dist/chunks/{run-app-add-command-C6rIt02R.cjs → run-app-add-command-4wAkXDW2.cjs} +2 -2
  69. package/dist/chunks/{run-app-apply-command-BckNNni9.cjs → run-app-apply-command-DOPPX88t.cjs} +1 -1
  70. package/dist/chunks/{run-app-build-command-DW0r-w2C.cjs → run-app-build-command-VoObCeD2.cjs} +1 -1
  71. package/dist/chunks/{run-app-dev-command-C3U-3OiV.cjs → run-app-dev-command-DqY3qjVy.cjs} +1 -1
  72. package/dist/chunks/{run-app-exec-command-DNeCk5qs.cjs → run-app-exec-command-CasOptA2.cjs} +2 -2
  73. package/dist/chunks/{run-app-generate-client-command-HAgBNVFU.cjs → run-app-generate-client-command-BdOjFITA.cjs} +1 -1
  74. package/dist/chunks/{run-app-init-command-dTbY28oS.cjs → run-app-init-command-DFNSImQ4.cjs} +1 -1
  75. package/dist/chunks/{run-app-install-command-BX30OsrQ.cjs → run-app-install-command-DDkBjstj.cjs} +1 -1
  76. package/dist/chunks/{run-app-logs-command-CdAXR-XY.cjs → run-app-logs-command-DPOtBKPs.cjs} +3 -3
  77. package/dist/chunks/{run-app-operation--X_q0SAn.cjs → run-app-operation-Dt8_tKmi.cjs} +1 -1
  78. package/dist/chunks/{run-app-plan-command-Bm1eXl7V.cjs → run-app-plan-command-CusqLQ3f.cjs} +1 -1
  79. package/dist/chunks/{run-app-publish-command-Cdb3OlI2.cjs → run-app-publish-command-COhfOFpj.cjs} +2 -2
  80. package/dist/chunks/{run-app-pull-command-DljZP4Ey.cjs → run-app-pull-command-C9GHMbgF.cjs} +2 -2
  81. package/dist/chunks/{run-app-translations-extract-command-Cc053lZ6.cjs → run-app-translations-extract-command-DWEinGqX.cjs} +1 -1
  82. package/dist/chunks/{run-app-typecheck-command-B7o20_BR.cjs → run-app-typecheck-command-CGrsPEx6.cjs} +1 -1
  83. package/dist/chunks/{run-app-uninstall-command-DJsWZtoI.cjs → run-app-uninstall-command-i7a4Jem9.cjs} +1 -1
  84. package/dist/chunks/{run-auth-login-command-21pHzpvT.cjs → run-auth-login-command-DaXPK5wd.cjs} +1 -1
  85. package/dist/chunks/{run-auth-logout-command-DWOafJmL.cjs → run-auth-logout-command-W7tRzWph.cjs} +1 -1
  86. package/dist/chunks/{run-auth-status-command-BBAcouvs.cjs → run-auth-status-command-B0dAwETL.cjs} +1 -1
  87. package/dist/chunks/{run-cli-D1VWVXar.cjs → run-cli-CAoDm_W8.cjs} +1 -1
  88. package/dist/chunks/{run-commands-command-6x3V48LL.cjs → run-commands-command-ZjKeKGKY.cjs} +1 -1
  89. package/dist/chunks/{run-data-get-command-DrgvC-zi.cjs → run-data-get-command-B77up-s7.cjs} +1 -1
  90. package/dist/chunks/{run-data-list-command-Cs8GAHbD.cjs → run-data-list-command-RwomiIPV.cjs} +1 -1
  91. package/dist/chunks/{run-doctor-command-BM4pkNY0.cjs → run-doctor-command-vxHdUzhC.cjs} +2 -2
  92. package/dist/chunks/{run-metadata-field-describe-command-CrmzNFh8.cjs → run-metadata-field-describe-command-B_NgZ7Ms.cjs} +1 -1
  93. package/dist/chunks/{run-metadata-field-list-command-B2CbERvZ.cjs → run-metadata-field-list-command-BGYdnELQ.cjs} +1 -1
  94. package/dist/chunks/{run-metadata-object-describe-command-PLt5ySLJ.cjs → run-metadata-object-describe-command-J85iBAkc.cjs} +1 -1
  95. package/dist/chunks/run-metadata-object-list-command-Bql6RG8g.cjs +2 -0
  96. package/dist/chunks/{run-open-command-CzMO5wI4.cjs → run-open-command-BNX-l7r7.cjs} +1 -1
  97. package/dist/chunks/{run-remote-list-command-37zf0rSp.cjs → run-remote-list-command-D6aUDed3.cjs} +1 -1
  98. package/dist/chunks/{run-remote-remove-command-B-XUqYBY.cjs → run-remote-remove-command-D0Mb9tkZ.cjs} +1 -1
  99. package/dist/chunks/{run-remote-rename-command-Bmg3nZfB.cjs → run-remote-rename-command-BgjOFYNE.cjs} +1 -1
  100. package/dist/chunks/{run-remote-use-command-r2NUlgWw.cjs → run-remote-use-command-zGfFYq-A.cjs} +1 -1
  101. package/dist/chunks/{run-version-command-DfDcA927.cjs → run-version-command-DwZTxHuu.cjs} +1 -1
  102. package/dist/chunks/{select-target-CEy96CC9.cjs → select-target-CKoOXLSW.cjs} +1 -1
  103. package/dist/chunks/{sign-in-to-remote-again-9cHGpXda.cjs → sign-in-to-remote-again-BhpxdF8v.cjs} +1 -1
  104. package/dist/chunks/{sign-in-with-browser-StQ_Fkku.cjs → sign-in-with-browser-BrB5btVu.cjs} +1 -1
  105. package/dist/chunks/{to-public-target-T4zHrdLQ.cjs → to-public-target-DYS-Zlyh.cjs} +1 -1
  106. package/dist/chunks/{to-worker-output-diagnostics-BeJKIsDG.cjs → to-worker-output-diagnostics-eE_POlPf.cjs} +1 -1
  107. package/dist/chunks/{typecheck-application-DLdoLIDx.cjs → typecheck-application-P6akOoSs.cjs} +1 -1
  108. package/dist/chunks/{update-config-CNOHxgkF.cjs → update-config-BNB8Mkee.cjs} +1 -1
  109. package/dist/chunks/{utils-BEfQWzTA-z2Y1wZJq.cjs → utils-D6KY4-gU-rSlFwrTC.cjs} +3 -3
  110. package/dist/chunks/{write-config-atomically-gr2Ldzm8.cjs → write-config-atomically-eVpizD-t.cjs} +1 -1
  111. package/dist/cli.cjs +1 -1
  112. package/package.json +2 -2
  113. package/dist/chunks/application-VJqniwXy.cjs +0 -5
  114. package/dist/chunks/cli-version.constant-BJdY4dXs.cjs +0 -1
  115. package/dist/chunks/compile-application-translations-Dhfvrs__.cjs +0 -1
  116. package/dist/chunks/create-metadata-client-DEBMHFDo.cjs +0 -6
  117. package/dist/chunks/create-rest-client-r3OA3fUu.cjs +0 -60
  118. package/dist/chunks/extract-manifest-from-file-D3w7Ampa.cjs +0 -1
  119. package/dist/chunks/format-body-CJyi3Ukr.cjs +0 -1
  120. package/dist/chunks/format-progress-line-C5nYDVHB.cjs +0 -1
  121. package/dist/chunks/is-supported-locale-C9iuFQ39.cjs +0 -1
  122. package/dist/chunks/metadata-BtOyR6x0.cjs +0 -1
  123. package/dist/chunks/read-json-object-BONMjSVo.cjs +0 -1
  124. package/dist/chunks/run-metadata-object-list-command-BcnWKmgh.cjs +0 -2
@@ -1 +1 @@
1
- const e=require("./build-CX6FBrbu.cjs"),t=require("./constants-Du9J-8Ug-CD8GTrut.cjs"),n=require("./cli-error-CSsayo0u.cjs"),r=require("./request-timeout-milliseconds.constant-DtyQHrll.cjs"),i=require("./config-file-mode.constant-DLBzKKUl.cjs");let a=require("node:crypto"),o=require("node:fs/promises"),s=require("node:path"),c=require("node:timers/promises");var l=e.t(),u={TIMEOUT_MILLISECONDS:2*r.t+5e3,RETRY_MILLISECONDS:50},d=async e=>{try{let n=JSON.parse(await(0,o.readFile)(e,`utf8`));return t.p(n)&&(0,l.isNumber)(n.pid)&&(0,l.isString)(n.token)?{pid:n.pid,token:n.token}:void 0}catch{return}},f=e=>{try{return process.kill(e,0),!0}catch(e){return n.r(e,`EPERM`)}},p=async e=>{let r=await d(e),i=t.Vt(r)&&!f(r.pid),a=t.Vt(r)?` (pid ${r.pid})`:``;return new n.t({code:`CONFIG_LOCKED`,message:i?`A twenty command (pid ${r.pid}) stopped without releasing ${e}.`:`Another twenty command${a} is changing ${(0,s.dirname)(e)}.`,hint:i?`Delete ${e} and try again.`:`Try again when it finishes. If no twenty command is running, delete ${e}.`,details:{lockPath:e,ownerPid:r?.pid??null}})},m=async(e,t)=>{try{let n=await(0,o.open)(e,`wx`,i.t.PRIVATE_FILE);return await n.writeFile(JSON.stringify({pid:process.pid,token:t})),await n.close(),!0}catch(e){if(n.r(e,`EEXIST`))return!1;throw e}},h=async({lockPath:e,token:n,signal:r})=>{let i=Date.now()+u.TIMEOUT_MILLISECONDS,a=await m(e,n);for(;!a;){r.throwIfAborted();let o=await d(e);if(t.Vt(o)&&!f(o.pid)||Date.now()>i)throw await p(e);await(0,c.setTimeout)(u.RETRY_MILLISECONDS,void 0,{signal:r}),a=await m(e,n)}},g=async(e,t)=>{(await d(e))?.token===t&&await(0,o.rm)(e,{force:!0})},_=async({configPath:e,signal:t,operation:n})=>{let r=`${e}.lock`,c=(0,a.randomUUID)();await(0,o.mkdir)((0,s.dirname)(e),{recursive:!0,mode:i.t.PRIVATE_DIRECTORY}),await h({lockPath:r,token:c,signal:t});try{return await n()}finally{await g(r,c)}},v=async(e,t)=>{let n=`${e}.${process.pid}.${(0,a.randomUUID)()}.tmp`,r=await(0,o.open)(n,`wx`,i.t.PRIVATE_FILE);try{await r.writeFile(`${JSON.stringify(t,null,2)}\n`),await r.sync(),await r.close(),await(0,o.rename)(n,e)}catch(e){throw await r.close().catch(()=>void 0),await(0,o.rm)(n,{force:!0}),e}};Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return v}});
1
+ const e=require("./build-CX6FBrbu.cjs"),t=require("./constants-BAi8jZf9-C7iTUxcn.cjs"),n=require("./cli-error-CSsayo0u.cjs"),r=require("./request-timeout-milliseconds.constant-DtyQHrll.cjs"),i=require("./config-file-mode.constant-DLBzKKUl.cjs");let a=require("node:crypto"),o=require("node:fs/promises"),s=require("node:path"),c=require("node:timers/promises");var l=e.t(),u={TIMEOUT_MILLISECONDS:2*r.t+5e3,RETRY_MILLISECONDS:50},d=async e=>{try{let n=JSON.parse(await(0,o.readFile)(e,`utf8`));return t.v(n)&&(0,l.isNumber)(n.pid)&&(0,l.isString)(n.token)?{pid:n.pid,token:n.token}:void 0}catch{return}},f=e=>{try{return process.kill(e,0),!0}catch(e){return n.r(e,`EPERM`)}},p=async e=>{let r=await d(e),i=t.Vt(r)&&!f(r.pid),a=t.Vt(r)?` (pid ${r.pid})`:``;return new n.t({code:`CONFIG_LOCKED`,message:i?`A twenty command (pid ${r.pid}) stopped without releasing ${e}.`:`Another twenty command${a} is changing ${(0,s.dirname)(e)}.`,hint:i?`Delete ${e} and try again.`:`Try again when it finishes. If no twenty command is running, delete ${e}.`,details:{lockPath:e,ownerPid:r?.pid??null}})},m=async(e,t)=>{try{let n=await(0,o.open)(e,`wx`,i.t.PRIVATE_FILE);return await n.writeFile(JSON.stringify({pid:process.pid,token:t})),await n.close(),!0}catch(e){if(n.r(e,`EEXIST`))return!1;throw e}},h=async({lockPath:e,token:n,signal:r})=>{let i=Date.now()+u.TIMEOUT_MILLISECONDS,a=await m(e,n);for(;!a;){r.throwIfAborted();let o=await d(e);if(t.Vt(o)&&!f(o.pid)||Date.now()>i)throw await p(e);await(0,c.setTimeout)(u.RETRY_MILLISECONDS,void 0,{signal:r}),a=await m(e,n)}},g=async(e,t)=>{(await d(e))?.token===t&&await(0,o.rm)(e,{force:!0})},_=async({configPath:e,signal:t,operation:n})=>{let r=`${e}.lock`,c=(0,a.randomUUID)();await(0,o.mkdir)((0,s.dirname)(e),{recursive:!0,mode:i.t.PRIVATE_DIRECTORY}),await h({lockPath:r,token:c,signal:t});try{return await n()}finally{await g(r,c)}},v=async(e,t)=>{let n=`${e}.${process.pid}.${(0,a.randomUUID)()}.tmp`,r=await(0,o.open)(n,`wx`,i.t.PRIVATE_FILE);try{await r.writeFile(`${JSON.stringify(t,null,2)}\n`),await r.sync(),await r.close(),await(0,o.rename)(n,e)}catch(e){throw await r.close().catch(()=>void 0),await(0,o.rm)(n,{force:!0}),e}};Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return v}});
package/dist/cli.cjs CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- const e=require("./chunks/check-node-requirement-CGBKvEqH.cjs"),t=require("./chunks/cli-node-version-range.constant-D7fE8edk.cjs");process.stdout.on(`error`,e=>{if(e.code!==`EPIPE`)throw e;process.exit()}),(async({args:n,nodeVersion:r,loadCli:i})=>{if(e.t({version:r,range:`>=24.5.0`})!==`satisfied`){process.stderr.write(`twenty requires Node.js ${t.t}; this is Node.js ${r}. Switch to a supported Node.js version, then try again.\n`),process.exitCode=1;return}await(await i()).runCli(n)})({args:process.argv.slice(2),nodeVersion:process.versions.node,loadCli:()=>Promise.resolve().then(()=>require("./chunks/run-cli-D1VWVXar.cjs"))});
2
+ const e=require("./chunks/check-node-requirement-CGBKvEqH.cjs"),t=require("./chunks/cli-node-version-range.constant-D7fE8edk.cjs");process.stdout.on(`error`,e=>{if(e.code!==`EPIPE`)throw e;process.exit()}),(async({args:n,nodeVersion:r,loadCli:i})=>{if(e.t({version:r,range:`>=24.5.0`})!==`satisfied`){process.stderr.write(`twenty requires Node.js ${t.t}; this is Node.js ${r}. Switch to a supported Node.js version, then try again.\n`),process.exitCode=1;return}await(await i()).runCli(n)})({args:process.argv.slice(2),nodeVersion:process.versions.node,loadCli:()=>Promise.resolve().then(()=>require("./chunks/run-cli-CAoDm_W8.cjs"))});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "twenty",
3
- "version": "2.48.0",
3
+ "version": "2.50.0",
4
4
  "description": "The Twenty command line.",
5
5
  "homepage": "https://twenty.com",
6
6
  "repository": {
@@ -35,7 +35,7 @@
35
35
  "npm-pick-manifest": "^11.0.1",
36
36
  "semver": "7.6.3",
37
37
  "string-width": "^8.2.0",
38
- "twenty-client-sdk": "2.48.0",
38
+ "twenty-client-sdk": "2.50.0",
39
39
  "twenty-shared": "0.0.0",
40
40
  "undici": "^7.29.0",
41
41
  "uuid": "^13.0.2",
@@ -1,5 +0,0 @@
1
- const e=require("./build-CX6FBrbu.cjs"),t=require("./utils-BEfQWzTA-z2Y1wZJq.cjs"),n=require("./constants-Du9J-8Ug-CD8GTrut.cjs");function r(e){if(!n.mt(e))throw TypeError(`Invalid UUID`);let t;return Uint8Array.of((t=parseInt(e.slice(0,8),16))>>>24,t>>>16&255,t>>>8&255,t&255,(t=parseInt(e.slice(9,13),16))>>>8,t&255,(t=parseInt(e.slice(14,18),16))>>>8,t&255,(t=parseInt(e.slice(19,23),16))>>>8,t&255,(t=parseInt(e.slice(24,36),16))/1099511627776&255,t/4294967296&255,t>>>24&255,t>>>16&255,t>>>8&255,t&255)}function i(e){e=unescape(encodeURIComponent(e));let t=new Uint8Array(e.length);for(let n=0;n<e.length;++n)t[n]=e.charCodeAt(n);return t}var a=`6ba7b810-9dad-11d1-80b4-00c04fd430c8`,o=`6ba7b811-9dad-11d1-80b4-00c04fd430c8`;function s(e,t,a,o,s,c){let l=typeof a==`string`?i(a):a,u=typeof o==`string`?r(o):o;if(typeof o==`string`&&(o=r(o)),o?.length!==16)throw TypeError(`Namespace must be array-like (16 iterable integer values, 0-255)`);let d=new Uint8Array(16+l.length);if(d.set(u),d.set(l,u.length),d=t(d),d[6]=d[6]&15|e,d[8]=d[8]&63|128,s){if(c||=0,c<0||c+16>s.length)throw RangeError(`UUID byte range ${c}:${c+15} is out of buffer bounds`);for(let e=0;e<16;++e)s[c+e]=d[e];return s}return n.pt(d)}function c(e,t,n,r){switch(e){case 0:return t&n^~t&r;case 1:return t^n^r;case 2:return t&n^t&r^n&r;case 3:return t^n^r}}function l(e,t){return e<<t|e>>>32-t}function u(e){let t=[1518500249,1859775393,2400959708,3395469782],n=[1732584193,4023233417,2562383102,271733878,3285377520],r=new Uint8Array(e.length+1);r.set(e),r[e.length]=128,e=r;let i=e.length/4+2,a=Math.ceil(i/16),o=Array(a);for(let t=0;t<a;++t){let n=new Uint32Array(16);for(let r=0;r<16;++r)n[r]=e[t*64+r*4]<<24|e[t*64+r*4+1]<<16|e[t*64+r*4+2]<<8|e[t*64+r*4+3];o[t]=n}o[a-1][14]=(e.length-1)*8/2**32,o[a-1][14]=Math.floor(o[a-1][14]),o[a-1][15]=(e.length-1)*8&4294967295;for(let e=0;e<a;++e){let r=new Uint32Array(80);for(let t=0;t<16;++t)r[t]=o[e][t];for(let e=16;e<80;++e)r[e]=l(r[e-3]^r[e-8]^r[e-14]^r[e-16],1);let i=n[0],a=n[1],s=n[2],u=n[3],d=n[4];for(let e=0;e<80;++e){let n=Math.floor(e/20),o=l(i,5)+c(n,a,s,u)+d+t[n]+r[e]>>>0;d=u,u=s,s=l(a,30)>>>0,a=i,i=o}n[0]=n[0]+i>>>0,n[1]=n[1]+a>>>0,n[2]=n[2]+s>>>0,n[3]=n[3]+u>>>0,n[4]=n[4]+d>>>0}return Uint8Array.of(n[0]>>24,n[0]>>16,n[0]>>8,n[0],n[1]>>24,n[1]>>16,n[1]>>8,n[1],n[2]>>24,n[2]>>16,n[2]>>8,n[2],n[3]>>24,n[3]>>16,n[3]>>8,n[3],n[4]>>24,n[4]>>16,n[4]>>8,n[4])}function d(e,t,n,r){return s(80,u,e,t,n,r)}d.DNS=a,d.URL=o;function f(e){if(!n.mt(e))throw TypeError(`Invalid UUID`);return parseInt(e.slice(14,15),16)}function p(e){return e instanceof Boolean||typeof e==`boolean`}function m(e){return e instanceof String||typeof e==`string`}function h(e){return e!=null&&(typeof e==`object`||typeof e==`function`)&&!Array.isArray(e)}var ee=[`choice`,`score`,`boolean`],te=/^[a-zA-Z0-9_.-]{1,64}$/,ne=e=>te.test(e),g=e.t(),_=function(e){return e.CODE=`CODE`,e.LOGIC_FUNCTION=`LOGIC_FUNCTION`,e.SEND_EMAIL=`SEND_EMAIL`,e.SEND_CHAT_MESSAGE=`SEND_CHAT_MESSAGE`,e.DRAFT_EMAIL=`DRAFT_EMAIL`,e.CREATE_CALENDAR_EVENT=`CREATE_CALENDAR_EVENT`,e.CREATE_RECORD=`CREATE_RECORD`,e.UPDATE_RECORD=`UPDATE_RECORD`,e.DELETE_RECORD=`DELETE_RECORD`,e.UPSERT_RECORD=`UPSERT_RECORD`,e.FIND_RECORDS=`FIND_RECORDS`,e.PICK_RECORD=`PICK_RECORD`,e.FORM=`FORM`,e.FILTER=`FILTER`,e.IF_ELSE=`IF_ELSE`,e.HTTP_REQUEST=`HTTP_REQUEST`,e.AI_AGENT=`AI_AGENT`,e.CLASSIFY=`CLASSIFY`,e.ITERATOR=`ITERATOR`,e.EMPTY=`EMPTY`,e.DELAY=`DELAY`,e.WAIT_FOR_EVENT=`WAIT_FOR_EVENT`,e}({}),v=`trigger`,re=e=>{let t=[],n=``,r=!1,i=0;for(;i<e.length;){let a=e[i];if(a===`[`&&!r){n.length>0&&(t.push(n),n=``),r=!0,i++;continue}if(a===`]`&&r){t.push(n),n=``,r=!1,i++,i<e.length&&e[i]===`.`&&i++;continue}if(a===`.`&&!r){n.length>0&&(t.push(n),n=``),i++;continue}n+=a,i++}return n.length>0&&t.push(n),t},ie=/{{([^{}]+)}}/g;function*y(e){if((0,g.isString)(e)){for(let[,t]of e.matchAll(ie))n.Vt(t)&&(yield t);return}if((0,g.isObject)(e))for(let t of Object.values(e))yield*y(t)}var ae=e=>[...y(e)],oe=(e,t)=>{let n=e.length+1,r=t.length+1,i=Array.from({length:n},()=>Array(r).fill(0));for(let e=0;e<n;e++)i[e][0]=e;for(let e=0;e<r;e++)i[0][e]=e;for(let a=1;a<n;a++){let n=i[a-1],o=i[a];for(let i=1;i<r;i++){let r=e[a-1]===t[i-1]?0:1;o[i]=Math.min(n[i]+1,o[i-1]+1,n[i-1]+r)}}return i[e.length][t.length]},se=e=>{if(!n.Vt(e)||!h(e)||Array.isArray(e))return!1;let t=Object.values(e);return t.length===0?!1:t.every(e=>n.Vt(e)&&h(e)&&p(e.isLeaf))},b=(e,t=[])=>{let n=[];if(!(0,g.isObject)(e))return n;for(let[r,i]of Object.entries(e)){if(!(0,g.isObject)(i))continue;let e=[...t,r];n.push(e.join(`.`)),!i.isLeaf&&(0,g.isObject)(i.value)&&n.push(...b(i.value,e))}return n},ce=({schema:e,propertyPath:t})=>{let r=e;for(let e=0;e<t.length;e++){let i=t[e];if(!n.Vt(i))return;if(!(0,g.isObject)(r))return{validPrefix:t.slice(0,e),failedSegment:i,availableKeys:[]};let a=r[i];if(!n.Vt(a))return{validPrefix:t.slice(0,e),failedSegment:i,availableKeys:Object.keys(r)};if(a.isLeaf){let r=t[e+1];return n.Vt(r)?{validPrefix:t.slice(0,e+1),failedSegment:r,availableKeys:[]}:void 0}r=a.value}},x={found:!1},S=e=>n.p(e)&&p(e.isLeaf),C=e=>n.p(e)&&e._outputSchemaType===`RECORD`&&n.p(e.fields),w=e=>n.p(e)&&!(`_outputSchemaType`in e)&&S(e.first)&&e.first.isLeaf===!1&&C(e.first.value)&&S(e.totalCount),T=e=>({found:!0,type:m(e.type)?e.type:void 0,label:m(e.label)?e.label:void 0}),E=(e,t)=>t.length===0?T(e):O(e.value,t),le=(e,t)=>{for(let n=1;n<=t.length;n++){let r=e[t.slice(0,n).join(`.`)];if(S(r))return E(r,t.slice(n))}return x},ue=(e,t)=>{let[n,...r]=t;if(n===`first`)return r.length===0?T(e.first):O(e.first.value,r);if(n===`all`||n===`totalCount`){let t=e[n];return r.length===0&&S(t)?T(t):x}return x},D=(e,t)=>{let[r,...i]=t;if(!n.Vt(r))return x;let a=e[r];return S(a)?E(a,i):n.Vt(a)?i.length===0?{found:!0}:n.p(a)?D(a,i):x:x},O=(e,t)=>t.length===0||!n.p(e)?x:C(e)?le(e.fields,t):w(e)?ue(e,t):D(e,t),de=({schema:e,propertyPath:t})=>O(e,t),k=e=>{let t=[];for(let[r,i]of Object.entries(e))if(S(i)){if(t.push(r),i.isLeaf)continue;let e=i.value;if(C(e))for(let n of k(e.fields))t.push(`${r}.${n}`);else if(n.p(e))for(let n of k(e))t.push(`${r}.${n}`)}else if(n.Vt(i)&&(t.push(r),n.p(i)))for(let e of k(i))t.push(`${r}.${e}`);return t},A=e=>{if(!n.p(e))return[];if(C(e))return k(e.fields);if(w(e)){let t=[];if(S(e.first)){t.push(`first`);for(let n of A(e.first.value))t.push(`first.${n}`)}return n.Vt(e.all)&&t.push(`all`),t.push(`totalCount`),t}return k(e)},fe=3,j=e=>n.p(e)?e._outputSchemaType===`RECORD`?!0:Object.values(e).some(e=>n.p(e)&&j(e.value)):!1,M=(e,t)=>t.map(t=>({candidate:t,distance:oe(e,t)})).filter(({candidate:e,distance:t})=>t<=Math.ceil(e.length/2)).sort((e,t)=>e.distance-t.distance).slice(0,fe).map(({candidate:e})=>e),pe=({schema:e,propertyPath:t,referencedStepId:r})=>{if(!se(e)||j(e)){let n=A(e);return M(t.join(`.`),n).map(e=>[r,e].join(`.`))}let i=ce({schema:e,propertyPath:t});if(!n.Vt(i))return[];let a=M(i.failedSegment,i.availableKeys).map(e=>[r,...i.validPrefix,e].join(`.`));if((0,g.isNonEmptyArray)(a))return a;let o=b(e);return M(t.join(`.`),o).map(e=>[r,e].join(`.`))},me=({workflow:e,graph:t,stepsById:r})=>{let i=[],a=new Set(e.steps?.map(e=>e.id)??[]);for(let o of e.steps??[]){let s=ae(o.settings?.input),c=t.ancestorsByStepId.get(o.id)??new Set;for(let t of s){let s=re(t),l=s[0];if(!n.Vt(l)){i.push({severity:`error`,code:`VARIABLE_INVALID_PATH`,message:`Step "${o.name??o.id}" has a variable "{{${t}}}" with an invalid path. Variable references must start with a step ID, e.g. "{{stepId.property}}".`,stepId:o.id,path:t});continue}let u=l===v;if(!u&&!a.has(l)){i.push({severity:`error`,code:`VARIABLE_UNKNOWN_STEP`,message:`Step "${o.name??o.id}" references variable "{{${t}}}" from an unknown step "${l}".`,stepId:o.id,path:t});continue}let d=l===o.id;if(!u&&!d&&!c.has(l)){let e=r.get(l)?.name??l;i.push({severity:`error`,code:`VARIABLE_NOT_UPSTREAM`,message:`Step "${o.name??o.id}" references variable "{{${t}}}" from step "${e}", which does not run before it. Ensure step "${e}" is an ancestor (connected via nextStepIds chain from the trigger, before this step).`,stepId:o.id,path:t});continue}i.push(...he({step:o,variable:t,pathSegments:s,referencedStepId:l,isTriggerReference:u,trigger:e.trigger,stepsById:r}))}}return i},he=({step:e,variable:t,pathSegments:r,referencedStepId:i,isTriggerReference:a,trigger:o,stepsById:s})=>{let c=r.slice(1);if(c.length===0)return[];let l=a?o?.settings?.outputSchema:s.get(i)?.settings?.outputSchema,u=n.Vt(l)&&(0,g.isObject)(l)&&!Array.isArray(l)&&Object.keys(l).length===0;if(!n.Vt(l)||u)return[];if(!de({schema:l,propertyPath:c}).found){let r=pe({schema:l,propertyPath:c,referencedStepId:i}),a=_e(l,i),o=(0,g.isNonEmptyArray)(r)?`Did you mean "{{${r[0]}}}"?${r.length>1?` Other options: ${r.slice(1).map(e=>`{{${e}}}`).join(`, `)}.`:``}`:(0,g.isNonEmptyArray)(a)?`Available paths: ${a.map(e=>`{{${e}}}`).join(`, `)}.`:void 0;return[{severity:`error`,code:`VARIABLE_PATH_NOT_FOUND`,message:`Step "${e.name??e.id}" references variable "{{${t}}}" but the path "${c.join(`.`)}" was not found in the output of step "${i}".`,stepId:e.id,path:t,...n.Vt(o)?{hint:o}:{},...(0,g.isNonEmptyArray)(r)?{suggestions:r}:{},...(0,g.isNonEmptyArray)(a)?{availablePaths:a}:{}}]}return[]},ge=20,_e=(e,t)=>A(e).slice(0,ge).map(e=>`${t}.${e}`),ve=n.jt({type:n.Dt(`object`),properties:n.Nt(n.Ft(),n.jt({type:n.vt([`string`,`number`,`boolean`]),description:n.Ft().optional()})).refine(e=>Object.keys(e).every(ne),{message:`Output field names can only contain letters, numbers, underscores, dots or hyphens (max 64 characters)`}),required:n.xt(n.Ft()).optional(),additionalProperties:n.Dt(!1).optional()}),ye=n.Ct(`type`,[n.jt({type:n.Dt(`text`)}),n.jt({type:n.Dt(`json`),schema:ve})]),N=[1e3,5e3,15e3],P=n.jt({input:n.Ot({}).describe(`Input data for the workflow action. Structure depends on the action type.`),outputSchema:n.Ot({}).describe(`Schema defining the output data structure. This data can be referenced in subsequent steps using {{stepId.fieldName}}.`),errorHandlingOptions:n.jt({retryOnFailure:n.jt({value:n.Mt(e=>typeof e==`boolean`?Number(e):e,n.At().int().min(0).max(N.length).describe(`How many times to retry the action if it fails, between 0 and ${N.length}. 0 disables retries.`))}),continueOnFailure:n.jt({value:n.St().describe(`Whether to continue to the next step if this action fails.`)})})}),be={expectedOutputSchema:n.Ot({}).optional().describe(`A sample output value declared by the user for steps whose output structure is only known at runtime.`)},xe=P.extend({input:n.jt({url:n.Ft(),method:n.vt([`GET`,`POST`,`PUT`,`PATCH`,`DELETE`]),headers:n.Nt(n.Ft(),n.Ft()).optional(),body:n.Nt(n.Ft(),n.It([n.Ft(),n.At(),n.St(),n.yt(),n.xt(n.It([n.Ft(),n.At(),n.St(),n.yt()]))])).or(n.Ft()).optional()}),...be}),Se=/^[a-zA-Z0-9_-]{1,64}$/,Ce=n.jt({id:n.Rt().describe(`Stable identifier for this criterion row.`),name:n.Ft().describe(`Option name for a choice question, or the label of one score level.`),description:n.Ft().optional().describe(`What the model should understand this option to mean.`)}),we=n.jt({id:n.Rt().describe(`Stable identifier for this question row.`),name:n.Ft().regex(Se,`Answer name must be empty or contain 1 to 64 characters using only letters, digits, underscores and dashes`).or(n.Dt(``)).describe(`Answer key for this question, made of letters, digits, underscores and dashes. Downstream steps read {{stepId.answers.<name>}}.`),type:n.vt(ee).describe(`choice picks one option, score grades an ordered rubric, boolean estimates the probability that a statement holds.`),instructions:n.Ft().describe(`What the model should decide about the shared state.`),criteria:n.xt(Ce).describe(`Options for a choice question, or ordered levels (lowest first) for a score question. Empty for boolean.`)}),Te=P.extend({input:n.jt({state:n.Ft().describe(`The shared state every question is asked about. Supports variables.`),questions:n.xt(we)})}),Ee=P.extend({input:n.jt({items:n.It([n.xt(n.It([n.Ft(),n.At(),n.St(),n.yt(),n.Nt(n.Ft(),n.bt()),n.bt()])),n.Ft()]).optional(),initialLoopStepIds:n.xt(n.Ft()).optional(),shouldContinueOnIterationFailure:n.St().optional()})}),De=P.extend({input:n.jt({delayType:n.vt([`SCHEDULED_DATE`,`DURATION`]),scheduledDateTime:n.Ft().nullable().optional(),duration:n.jt({days:n.It([n.At().min(0),n.Ft()]).optional(),hours:n.It([n.At().min(0),n.Ft()]).optional(),minutes:n.It([n.At().min(0),n.Ft()]).optional(),seconds:n.It([n.At().min(0),n.Ft()]).optional()}).optional()})}),Oe=P.extend({input:n.jt({eventName:n.Ft().describe(`Event to wait for, in format objectName.action (e.g., "company.updated", "task.created", "person.deleted").`),recordId:n.Ft().nullable().optional().describe(`Only resume for this record. Usually a variable such as {{trigger.properties.after.id}}. Leave empty to resume on any record.`),updatedFields:n.xt(n.Ft()).nullable().optional().describe(`For update events, only resume when one of these fields changed.`),timeout:n.jt({days:n.It([n.At().min(0),n.Ft()]).optional(),hours:n.It([n.At().min(0),n.Ft()]).optional(),minutes:n.It([n.At().min(0),n.Ft()]).optional()}).nullable().optional().describe(`Stop waiting after this duration. The step then succeeds with hasTimedOut set to true.`)})}),ke=P.extend({input:n.jt({})}),F=n.Nt(n.Ft(),n.bt()).describe(`Record data object. Use nested objects for relationships (e.g., "company": {"id": "{{reference}}"}). Common patterns:
2
- - Person: {"name": {"firstName": "John", "lastName": "Doe"}, "emails": {"primaryEmail": "john@example.com"}, "company": {"id": "{{trigger.properties.after.id}}"}}
3
- - Company: {"name": "Acme Corp", "domainName": {"primaryLinkUrl": "https://acme.com"}}
4
- - Task: {"title": "Follow up", "status": "TODO", "assignee": {"id": "{{user.id}}"}}`),Ae=P.extend({input:n.jt({objectName:n.Ft().describe(`The name of the object to create a record in. Must be lowercase (e.g., "person", "company", "task").`),objectRecord:F.describe(`The record data to create.`)})}),je=P.extend({input:n.jt({objectName:n.Ft(),objectRecord:F,objectRecordId:n.Ft(),fieldsToUpdate:n.xt(n.Ft())})}),Me=P.extend({input:n.jt({objectName:n.Ft(),objectRecord:F})}),Ne=P.extend({input:n.jt({objectName:n.Ft(),objectRecordId:n.Ft()})}),I=n.Ft().regex(/^{{[^{}]+}}$/,`Expected a workflow variable reference like {{stepId.path}}`),Pe=P.extend({input:n.jt({objectName:n.Ft(),limit:n.It([n.At(),I]).optional(),offset:n.It([n.At().int().nonnegative(),I]).optional(),filter:n.jt({recordFilterGroups:n.xt(n.bt()).optional(),recordFilters:n.xt(n.bt()).optional()}).optional(),orderBy:n.jt({recordSorts:n.xt(n.bt()).optional(),gqlOperationOrderBy:n.xt(n.Nt(n.Ft(),n.bt())).optional()}).optional()})}),Fe=n.jt({id:n.Ft(),name:n.Ft(),label:n.Ft(),type:n.It([n.Dt(n.ot.TEXT),n.Dt(n.ot.NUMBER),n.Dt(n.ot.DATE),n.Dt(n.ot.SELECT),n.Dt(n.ot.MULTI_SELECT),n.Dt(`RECORD`)]),placeholder:n.Ft().optional(),settings:n.Nt(n.Ft(),n.bt()).optional(),value:n.bt().optional()}),Ie=P.extend({input:n.xt(Fe),instructions:n.Ft().optional()}),L=n.jt({id:n.Ft(),logicalOperator:n.vt(n.P),parentStepFilterGroupId:n.Ft().optional(),positionInStepFilterGroup:n.At().optional()}),R=n.jt({id:n.Ft(),type:n.Ft(),stepOutputKey:n.Ft(),operand:n.vt(n.W).or(n.vt(n.L)),value:n.Ft(),stepFilterGroupId:n.Ft(),positionInStepFilterGroup:n.At().optional(),fieldMetadataId:n.Ft().optional(),compositeFieldSubFieldName:n.Ft().optional()}),Le=P.extend({input:n.jt({stepFilterGroups:n.xt(L),stepFilters:n.xt(R)})}),Re=n.jt({id:n.Ft(),nextStepIds:n.xt(n.Ft()),filterGroupId:n.Ft().optional()}),ze=P.extend({input:n.jt({stepFilterGroups:n.xt(L),stepFilters:n.xt(R),branches:n.xt(Re)})}),Be=n.vt([`RANDOM`,`ROUND_ROBIN`,`LOAD_BALANCED`]);P.extend({input:n.jt({objectName:n.Ft(),strategy:Be,recordIds:n.xt(n.Ft()),loadBalance:n.jt({objectNameSingular:n.Ft(),fieldName:n.Ft()}).optional()}).superRefine((e,t)=>{e.strategy===`LOAD_BALANCED`&&!n.Vt(e.loadBalance)&&t.addIssue({code:n._t.custom,path:[`loadBalance`],message:`loadBalance is required when strategy is LOAD_BALANCED`})})});var z=n.jt({name:n.Ft().optional().describe(`Human-readable name for the trigger. Optional but recommended for clarity.`),type:n.vt([`DATABASE_EVENT`,`MANUAL`,`CRON`,`WEBHOOK`]).describe(`Type of trigger. DATABASE_EVENT for record changes, MANUAL for user-initiated, CRON for scheduled, WEBHOOK for external calls.`),position:n.jt({x:n.At(),y:n.At()}).optional().nullable().describe(`Position coordinates for the trigger in the workflow diagram. Use (0, 0) for the trigger step.`),nextStepIds:n.xt(n.Ft()).optional().nullable().describe(`Array of step IDs that the trigger connects to. These are the first steps in the workflow.`)}),Ve=z.extend({type:n.Dt(`CRON`),settings:n.Ct(`type`,[n.jt({type:n.Dt(`DAYS`),schedule:n.jt({day:n.At().min(1),hour:n.At().min(0).max(23),minute:n.At().min(0).max(59)}),outputSchema:n.Ot({})}),n.jt({type:n.Dt(`HOURS`),schedule:n.jt({hour:n.At().min(1),minute:n.At().min(0).max(59)}),outputSchema:n.Ot({})}),n.jt({type:n.Dt(`MINUTES`),schedule:n.jt({minute:n.At().min(1).max(60)}),outputSchema:n.Ot({})}),n.jt({type:n.Dt(`CUSTOM`),pattern:n.Ft(),outputSchema:n.Ot({})})])}),He=z.extend({type:n.Dt(`WEBHOOK`),settings:n.Ct(`httpMethod`,[n.jt({outputSchema:n.Ot({}),httpMethod:n.Dt(`GET`),authentication:n.Dt(`API_KEY`).nullable()}),n.jt({outputSchema:n.Ot({}),expectedOutputSchema:n.Ot({}).optional(),httpMethod:n.Dt(`POST`),expectedBody:n.Ot({}),authentication:n.Dt(`API_KEY`).nullable()})])}),Ue=e=>{let t=e.settings?.input;return e.type===_.IF_ELSE&&(0,g.isObject)(t)&&`branches`in t&&Array.isArray(t.branches)},B=e=>{let t=e.settings?.input;return e.type===_.ITERATOR&&(0,g.isObject)(t)&&`initialLoopStepIds`in t&&(0,g.isNonEmptyArray)(t.initialLoopStepIds)},We=e=>{let t=e.settings?.input;if(n.Vt(t)&&(0,g.isObject)(t))return t},Ge=e=>{let t=new Set(e.nextStepIds??[]);if(Ue(e))for(let n of e.settings.input.branches??[])for(let e of n?.nextStepIds??[])t.add(e);if(B(e))for(let n of e.settings.input.initialLoopStepIds??[])t.add(n);return[...t]},Ke=({trigger:e,steps:t})=>{let r=new Map,i=n.Vt(e?.nextStepIds)?e.nextStepIds.filter(n.Vt):[];r.set(v,i);for(let e of t??[])r.set(e.id,Ge(e));let a=new Set,o=[v];for(;o.length>0;){let e=o.shift();if(!(!n.Vt(e)||a.has(e))){a.add(e);for(let t of r.get(e)??[])a.has(t)||o.push(t)}}return{childrenByStepId:r,reachableFromTrigger:a,ancestorsByStepId:qe(r)}},qe=e=>{let t=new Map;for(let[n,r]of e.entries())for(let e of r){let r=t.get(e)??new Set;r.add(n),t.set(e,r)}let n=new Map;for(let r of e.keys()){if(n.has(r))continue;let e=new Set,i=[...t.get(r)??[]];for(;i.length>0;){let n=i.shift();if(!e.has(n)){e.add(n);for(let r of t.get(n)??[])e.has(r)||i.push(r)}}n.set(r,e)}return n},Je=({workflow:e,graph:t})=>{let r=[],i=new Set,a=new Set,o=new Map((e.steps??[]).map(e=>[e.id,e])),s=(e,c=[],l)=>{let u=c[c.length-1];if(i.has(e)){if(e!==l&&u===e)return;r.push({severity:`error`,code:`WORKFLOW_CYCLE`,stepId:e,message:`Workflow contains a cycle at step ${e}`});return}let d=o.get(e),f=`${e}:${c.join(`,`)}`;if(!n.Vt(d)||a.has(f))return;i.add(e),B(d)&&(d.settings.input.initialLoopStepIds??[]).forEach(t=>s(t,[...c,e],e));let p=d.type===_.ITERATOR?d.nextStepIds??[]:t.childrenByStepId.get(e)??[];n.Vt(u)&&p.length===0&&r.push({severity:`error`,code:`ITERATOR_MISSING_RETURN`,stepId:e,message:`Loop body step ${e} must return to iterator ${u}`}),p.forEach(t=>s(t,c,e)),i.delete(e),a.add(f)};return e.trigger?.nextStepIds?.forEach(e=>s(e)),r},Ye=({workflow:e,graph:r})=>{let i=[],a=e.steps??[],o=new Set(a.map(e=>e.id)),s=new Set;for(let e of a)s.has(e.id)&&i.push({severity:`error`,code:`DUPLICATE_STEP_ID`,message:`Duplicate step id "${e.id}". Every step id must be unique within the workflow.`,stepId:e.id}),s.add(e.id);let c=(e.trigger?.nextStepIds??[]).filter(n.Vt);t.r(a)&&c.length===0&&i.push({severity:`error`,code:`TRIGGER_HAS_NO_NEXT_STEP`,message:`The trigger is not connected to any step. The trigger must have a "nextStepIds" array pointing to the first step (e.g. nextStepIds: ["${a[0].id}"]). If you used edges, also set trigger.nextStepIds.`});for(let e of c)o.has(e)||i.push({severity:`error`,code:`DANGLING_REFERENCE`,message:`The trigger references a non-existent step "${e}".`});for(let e of a){for(let t of r.childrenByStepId.get(e.id)??[])o.has(t)||i.push({severity:`error`,code:`DANGLING_REFERENCE`,message:`Step "${e.name??e.id}" references a non-existent step "${t}".`,stepId:e.id});i.push(...Xe(e))}for(let e of a)r.reachableFromTrigger.has(e.id)||i.push({severity:`error`,code:`UNREACHABLE_STEP`,message:`Step "${e.name??e.id}" is not reachable from the trigger. Ensure a chain of nextStepIds connects the trigger to this step. Check that the preceding step includes this step's id ("${e.id}") in its nextStepIds array.`,stepId:e.id});return i},Xe=e=>{let t=[],r=We(e);if(e.type===_.IF_ELSE){let i=r?.branches,a=Array.isArray(i)?i:[];a.length<2&&t.push({severity:`warning`,code:`IF_ELSE_INSUFFICIENT_BRANCHES`,message:`If/Else step "${e.name??e.id}" should have at least two branches (a condition branch and an else branch).`,stepId:e.id});let o=r?.stepFilterGroups,s=new Set((Array.isArray(o)?o:[]).filter(n.Vt).map(e=>e.id));for(let r of a){let i=r?.nextStepIds;(!Array.isArray(i)||i.length===0)&&t.push({severity:`error`,code:`IF_ELSE_BRANCH_HAS_NO_NEXT_STEP`,message:`A branch of If/Else step "${e.name??e.id}" is not connected to any step.`,stepId:e.id}),n.Vt(r?.filterGroupId)&&!s.has(r.filterGroupId)&&t.push({severity:`error`,code:`INVALID_STEP_PARAMS`,message:`A branch of If/Else step "${e.name??e.id}" references filter group "${r.filterGroupId}", which does not exist.`,stepId:e.id})}}if(e.type===_.ITERATOR){let n=r,i=n?.items,a=typeof i==`string`&&i.length>0||Array.isArray(i)&&i.length>0,o=n?.initialLoopStepIds,s=Array.isArray(o)&&o.length>0;a&&!s&&t.push({severity:`error`,code:`ITERATOR_MISSING_LOOP_BODY`,message:`Iterator step "${e.name??e.id}" has items to iterate over but no steps inside the loop.`,stepId:e.id})}return t},Ze=`20202020-64aa-4b6f-b003-9c74b97cee20`,V=({entityNamespace:e,value:t,applicationUniversalIdentifier:n})=>d(`${e}:${t}`,n),Qe=({applicationUniversalIdentifier:e,objectUniversalIdentifier:t,name:n})=>V({entityNamespace:`fieldMetadata`,value:`${t}:${n}`,applicationUniversalIdentifier:e}),H=({applicationUniversalIdentifier:e,objectUniversalIdentifier:t,name:n})=>V({entityNamespace:`pageLayout`,value:t?`${t}:${n}`:n,applicationUniversalIdentifier:e}),$e=({objectMetadataApplicationUniversalIdentifier:e,pageLayoutUniversalIdentifier:t,title:n})=>V({entityNamespace:`pageLayoutTab`,value:`${t}:${n}`,applicationUniversalIdentifier:e}),et=({objectMetadataApplicationUniversalIdentifier:e,pageLayoutTabUniversalIdentifier:t,title:n})=>V({entityNamespace:`pageLayoutWidget`,value:`${t}:${n}`,applicationUniversalIdentifier:e}),tt=({objectMetadataApplicationUniversalIdentifier:e,objectUniversalIdentifier:t})=>H({applicationUniversalIdentifier:e,objectUniversalIdentifier:t,name:n.X.RECORD_PAGE}),nt=({applicationUniversalIdentifier:e,objectUniversalIdentifier:t,relationTargetObjectUniversalIdentifier:n})=>V({entityNamespace:`fieldMetadata`,value:`${t}:systemRelation:${n}`,applicationUniversalIdentifier:e}),rt=({objectMetadataApplicationUniversalIdentifier:e,viewUniversalIdentifier:t,name:n})=>V({entityNamespace:`viewFieldGroup`,value:`${t}:${n}`,applicationUniversalIdentifier:e}),it=({fieldMetadataApplicationUniversalIdentifier:e,viewUniversalIdentifier:t,fieldMetadataUniversalIdentifier:n})=>V({entityNamespace:`viewField`,value:`${t}:${n}`,applicationUniversalIdentifier:e}),at={INDEX:`INDEX`,FIELDS_WIDGET:`FIELDS_WIDGET`},ot=({objectMetadataApplicationUniversalIdentifier:e,objectUniversalIdentifier:t,viewKey:n})=>V({entityNamespace:`view`,value:`${t}:${n}`,applicationUniversalIdentifier:e}),U=function(e){return e.OK=`OK`,e.SUCCESS=`SUCCESS`,e.INFO=`INFO`,e.WARNING=`WARNING`,e.ERROR=`ERROR`,e.NEUTRAL=`NEUTRAL`,e.UNKNOWN=`UNKNOWN`,e}({});Object.values(U).filter(e=>e!==U.OK&&e!==U.UNKNOWN),n.ot.TEXT,n.ot.ARRAY,n.ot.BOOLEAN,n.ot.DATE,n.ot.DATE_TIME,n.ot.NUMBER,n.ot.NUMERIC,n.ot.RAW_JSON,n.ot.RICH_TEXT,n.ot.SELECT,n.ot.MULTI_SELECT,_.SEND_EMAIL,_.DRAFT_EMAIL,_.CREATE_CALENDAR_EVENT;var st=`public`,ct=`front-component-shared-dependencies.mjs`,lt=`twenty:front-component-shared-dependencies`;n.X.RECORD_PAGE,n.X.DASHBOARD;var ut={js:`import { createRequire as __createRequire } from 'module';
5
- const require = __createRequire(import.meta.url);`},dt=`.twenty/output`,ft=({applicationUniversalIdentifier:e,roleUniversalIdentifier:t,fieldUniversalIdentifier:n})=>V({entityNamespace:`fieldPermission`,value:`${t}:${n}`,applicationUniversalIdentifier:e}),pt=({applicationUniversalIdentifier:e,roleUniversalIdentifier:t,objectUniversalIdentifier:n})=>V({entityNamespace:`objectPermission`,value:`${t}:${n}`,applicationUniversalIdentifier:e}),mt=({objectMetadataApplicationUniversalIdentifier:e,objectUniversalIdentifier:t})=>H({applicationUniversalIdentifier:e,objectUniversalIdentifier:t,name:n.X.RECORD_FORM}),ht=({pageLayoutTabManifest:e,pageLayoutType:r})=>{let i=e.layoutMode??(r===n.X.STANDALONE_PAGE?n.J.VERTICAL_LIST:n.J.GRID),a=e.widgets??[],o=[];if(!Object.values(n.J).some(e=>e===i))return{status:`fail`,errors:[`Page layout tab "${e.title}" defines unsupported layoutMode "${i}". Expected GRID, VERTICAL_LIST or CANVAS.`]};for(let t of a){let r=[t.heightBehavior,n.p(t.position)&&`heightBehavior`in t.position?t.position.heightBehavior:void 0].filter(n.Vt);r.length>0&&i!==n.J.VERTICAL_LIST&&o.push(`Page layout widget "${t.title}" defines heightBehavior, but its parent tab "${e.title}" uses ${i}. heightBehavior is only supported for VERTICAL_LIST tabs.`);for(let e of r)Object.values(n.ct).some(t=>t===e)||o.push(`Page layout widget "${t.title}" defines unsupported heightBehavior "${e}". Expected FIT_CONTENT or TAB_VIEWPORT.`)}if(o.length>0)return{status:`fail`,errors:o};let s={...e,layoutMode:i,widgets:a.map(({heightBehavior:e,position:r,gridPosition:a,...o},s)=>{if(n.Vt(r))return{...o,position:r.layoutMode===n.J.VERTICAL_LIST&&n.Vt(e)?{...r,heightBehavior:e}:r};if(n.Vt(a))return{...o,position:{layoutMode:n.J.GRID,...a}};switch(i){case n.J.GRID:return{...o,position:{layoutMode:i,row:0,column:0,rowSpan:n.k.default.h,columnSpan:n.k.default.w}};case n.J.VERTICAL_LIST:return{...o,position:{layoutMode:i,index:s,...n.Vt(e)?{heightBehavior:e}:{}}};case n.J.CANVAS:return{...o,position:{layoutMode:i}};default:return t.o(i)}})};for(let e of s.widgets)e.position.layoutMode!==i&&o.push(`Page layout widget "${e.title}" uses a ${e.position.layoutMode} position, but its parent tab "${s.title}" uses ${i}.`);if(i===n.J.VERTICAL_LIST){let e=s.widgets.filter(({type:e,position:r})=>r.layoutMode===n.J.VERTICAL_LIST&&t.t({widgetType:e,heightBehavior:r.heightBehavior})===n.ct.TAB_VIEWPORT);e.length>1&&o.push(`Page layout tab "${s.title}" can contain only one TAB_VIEWPORT widget.`);let r=e.length===1?e[0]:void 0;n.Vt(r)&&s.widgets.some(e=>e!==r&&e.position.layoutMode===n.J.VERTICAL_LIST&&r.position.layoutMode===n.J.VERTICAL_LIST&&e.position.index>=r.position.index)&&o.push(`Page layout tab "${s.title}" must place its TAB_VIEWPORT widget last.`)}return o.length>0?{status:`fail`,errors:o}:{status:`success`,pageLayoutTab:s}},W=[`canReadObjectRecords`,`canUpdateObjectRecords`,`canSoftDeleteObjectRecords`,`canDestroyObjectRecords`],G={canReadObjectRecords:`canReadAllObjectRecords`,canUpdateObjectRecords:`canUpdateAllObjectRecords`,canSoftDeleteObjectRecords:`canSoftDeleteAllObjectRecords`,canDestroyObjectRecords:`canDestroyAllObjectRecords`},K=({role:e,objectUniversalIdentifier:t})=>{let n=e.objectPermissions?.find(e=>e.objectUniversalIdentifier===t);return{canReadObjectRecords:n?.canReadObjectRecords??e[G.canReadObjectRecords]??!1,canUpdateObjectRecords:n?.canUpdateObjectRecords??e[G.canUpdateObjectRecords]??!1,canSoftDeleteObjectRecords:n?.canSoftDeleteObjectRecords??e[G.canSoftDeleteObjectRecords]??!1,canDestroyObjectRecords:n?.canDestroyObjectRecords??e[G.canDestroyObjectRecords]??!1}},gt=e=>JSON.stringify(e,(e,t)=>n.p(t)?Object.fromEntries(Object.entries(t).sort(([e],[t])=>e.localeCompare(t))):t),_t=({groupsByUniversalIdentifier:e,predicateGroupUniversalIdentifier:t})=>{let r=[],i=new Set,a=t;for(;n.Vt(a)&&!i.has(a);){i.add(a);let t=e.get(a);if(!n.Vt(t))break;r.push(t.logicalOperator),a=t.parentPredicateGroupUniversalIdentifier}return r},q=({role:e,objectUniversalIdentifier:t})=>{let n=new Map((e.rowLevelPermissionPredicateGroups??[]).map(e=>[e.universalIdentifier,e]));return(e.rowLevelPermissionPredicates??[]).filter(e=>e.objectUniversalIdentifier===t).map(e=>gt({fieldUniversalIdentifier:e.fieldUniversalIdentifier,subFieldName:e.subFieldName??null,operand:e.operand,value:e.value??null,workspaceMemberFieldUniversalIdentifier:e.workspaceMemberFieldUniversalIdentifier??null,workspaceMemberSubFieldName:e.workspaceMemberSubFieldName??null,groupOperatorPath:_t({groupsByUniversalIdentifier:n,predicateGroupUniversalIdentifier:e.predicateGroupUniversalIdentifier})})).sort()},vt=n.x.map(e=>n.S[e]),yt=({roleSignature:e,supersetSignature:t})=>e.length===t.length&&e.every((e,n)=>e===t[n]),bt=({role:e,superset:t})=>[...W.filter(n=>{let r=G[n];return e[r]&&!t[r]}).map(e=>({type:`ALL_OBJECT_RECORDS`,action:e})),...e.canUpdateAllSettings&&!t.canUpdateAllSettings?[{type:`ALL_SETTINGS`}]:[],...e.canAccessAllTools&&!t.canAccessAllTools?[{type:`ALL_TOOLS`}]:[]],xt=({role:e,superset:t,toolPermissionFlagUniversalIdentifiers:n})=>{let r=new Set([...vt,...n]),i=new Set(t.permissionFlagUniversalIdentifiers??[]);return[...new Set(e.permissionFlagUniversalIdentifiers??[])].filter(e=>!(r.has(e)?t.canAccessAllTools:t.canUpdateAllSettings)&&!i.has(e)).map(e=>({type:`PERMISSION_FLAG`,permissionFlagUniversalIdentifier:e}))},St=({role:e,superset:t})=>[...new Set([...[...e.objectPermissions??[],...t.objectPermissions??[]].map(e=>e.objectUniversalIdentifier),...(t.rowLevelPermissionPredicates??[]).map(e=>e.objectUniversalIdentifier)])].flatMap(n=>{let r=K({role:e,objectUniversalIdentifier:n}),i=K({role:t,objectUniversalIdentifier:n}),a=W.filter(e=>r[e]&&!i[e]).map(e=>({type:`OBJECT_RECORDS`,objectUniversalIdentifier:n,action:e})),o=W.some(e=>r[e]),s=q({role:t,objectUniversalIdentifier:n}),c=q({role:e,objectUniversalIdentifier:n});return o&&s.length>0&&!yt({roleSignature:c,supersetSignature:s})?[...a,{type:`ROW_LEVEL_RESTRICTION`,objectUniversalIdentifier:n}]:a}),Ct=({role:e,superset:t})=>(t.fieldPermissions??[]).flatMap(t=>{let{objectUniversalIdentifier:n,fieldUniversalIdentifier:r}=t,i=K({role:e,objectUniversalIdentifier:n}),a=e.fieldPermissions?.find(e=>e.objectUniversalIdentifier===n&&e.fieldUniversalIdentifier===r),o=t.canReadFieldValue===!1&&i.canReadObjectRecords&&a?.canReadFieldValue!==!1,s=t.canUpdateFieldValue===!1&&i.canUpdateObjectRecords&&a?.canUpdateFieldValue!==!1;return[...o?[{type:`FIELD_VALUE`,objectUniversalIdentifier:n,fieldUniversalIdentifier:r,action:`canReadFieldValue`}]:[],...s?[{type:`FIELD_VALUE`,objectUniversalIdentifier:n,fieldUniversalIdentifier:r,action:`canUpdateFieldValue`}]:[]]}),wt=({role:e,superset:t,toolPermissionFlagUniversalIdentifiers:n})=>[...bt({role:e,superset:t}),...xt({role:e,superset:t,toolPermissionFlagUniversalIdentifiers:n}),...St({role:e,superset:t}),...Ct({role:e,superset:t})],Tt=e=>n.mt(e)&&f(e)>=4,J={universalIdentifier:n.Rt(),name:n.Ft().min(1),nextStepIds:n.xt(n.Rt()),position:n.jt({x:n.At(),y:n.At()}).optional(),outputSchema:n.Nt(n.Ft(),n.Lt()).optional(),expectedOutputSchema:n.Nt(n.Ft(),n.Lt()).optional(),errorHandlingOptions:P.shape.errorHandlingOptions.optional()},Y=(e,t)=>n.Pt({...J,type:n.Dt(e),input:t}),X=n.Ot({fieldMetadataUniversalIdentifier:n.Rt(),fieldMetadataId:n.kt().optional()}),Z=R.omit({fieldMetadataId:!0}).extend({fieldMetadataUniversalIdentifier:n.Rt().optional()}).strict(),Q={objectUniversalIdentifier:n.Rt()},Et=n.Ct(`type`,[n.Pt({...J,type:n.Dt(`LOGIC_FUNCTION`),logicFunctionUniversalIdentifier:n.Rt(),input:n.Nt(n.Ft(),n.Lt())}),Y(`HTTP_REQUEST`,xe.shape.input),Y(`CLASSIFY`,Te.shape.input),Y(`ITERATOR`,Ee.shape.input),Y(`DELAY`,De.shape.input),Y(`WAIT_FOR_EVENT`,Oe.shape.input),Y(`EMPTY`,ke.shape.input),Y(`CREATE_RECORD`,Ae.shape.input.omit({objectName:!0}).extend(Q).strict()),Y(`UPDATE_RECORD`,je.shape.input.omit({objectName:!0}).extend(Q).strict()),Y(`UPSERT_RECORD`,Me.shape.input.omit({objectName:!0}).extend(Q).strict()),Y(`DELETE_RECORD`,Ne.shape.input.omit({objectName:!0}).extend(Q).strict()),Y(`FIND_RECORDS`,Pe.shape.input.omit({objectName:!0,filter:!0,orderBy:!0}).extend({...Q,filter:n.Pt({recordFilterGroups:n.xt(n.Nt(n.Ft(),n.Lt())).optional(),recordFilters:n.xt(X).optional()}).optional(),orderBy:n.Pt({recordSorts:n.xt(X.extend({direction:n.vt([`ASC`,`DESC`]),subFieldName:n.Ft().nullable().optional()})).optional()}).optional()}).strict()),Y(`PICK_RECORD`,n.Pt({...Q,strategy:Be,recordIds:n.xt(n.Ft()),loadBalance:n.Pt({objectUniversalIdentifier:n.Rt(),fieldUniversalIdentifier:n.Rt()}).optional()}).superRefine((e,t)=>{e.strategy===`LOAD_BALANCED`&&!n.Vt(e.loadBalance)&&t.addIssue({code:`custom`,path:[`loadBalance`],message:`loadBalance is required when strategy is LOAD_BALANCED`})})),Y(`FILTER`,Le.shape.input.extend({stepFilters:n.xt(Z)})),Y(`IF_ELSE`,ze.shape.input.extend({stepFilters:n.xt(Z)})),Y(`FORM`,n.xt(Ie.shape.input.element.extend({settings:n.Nt(n.Ft(),n.Lt()).optional()}).superRefine((e,t)=>{e.type===`RECORD`&&!n.Rt().safeParse(e.settings?.objectUniversalIdentifier).success&&t.addIssue({code:`custom`,path:[`settings`,`objectUniversalIdentifier`],message:`Record picker fields require an object universal identifier`})}))),Y(`AI_AGENT`,n.Pt({agentUniversalIdentifier:n.Rt(),prompt:n.Ft(),responseFormat:ye.optional()}))]),$=[`updated`,`upserted`],Dt=n.Ct(`type`,[n.Pt({type:n.Dt(`GLOBAL`)}),n.Pt({type:n.Dt(`SINGLE_RECORD`),objectUniversalIdentifier:n.Rt()}),n.Pt({type:n.Dt(`BULK_RECORDS`),objectUniversalIdentifier:n.Rt()})]),[Ot,kt,At,jt]=Ve.shape.settings.options,Mt=n.Ct(`type`,[Ot.omit({outputSchema:!0}).extend({schedule:Ot.shape.schedule.strict()}).strict(),kt.omit({outputSchema:!0}).extend({schedule:kt.shape.schedule.strict()}).strict(),At.omit({outputSchema:!0}).extend({schedule:At.shape.schedule.strict()}).strict(),jt.omit({outputSchema:!0}).strict()]),[Nt,Pt]=He.shape.settings.options,Ft=n.Ct(`httpMethod`,[Nt.omit({outputSchema:!0,authentication:!0}).strict(),Pt.omit({outputSchema:!0,expectedOutputSchema:!0,authentication:!0}).strict()]),It=[n.Pt({universalIdentifier:n.Rt(),type:n.Dt(`MANUAL`),nextStepIds:n.xt(n.Rt()).min(1),settings:n.Pt({availability:Dt.optional(),icon:n.Ft().optional(),isPinned:n.St().optional()}).superRefine((e,t)=>{!n.Vt(e.availability)&&(n.Vt(e.icon)||n.Vt(e.isPinned))&&t.addIssue({code:`custom`,path:[`availability`],message:`Set an availability for the icon and pin to show in the command menu`})}).optional()}),n.Pt({universalIdentifier:n.Rt(),type:n.Dt(`CRON`),nextStepIds:n.xt(n.Rt()).min(1),settings:Mt}),n.Pt({universalIdentifier:n.Rt(),type:n.Dt(`DATABASE_EVENT`),nextStepIds:n.xt(n.Rt()).min(1),settings:n.Pt({objectUniversalIdentifier:n.Rt(),action:n.vt([`created`,`updated`,`deleted`,`upserted`]),fieldUniversalIdentifiers:n.xt(n.Rt()).optional(),filter:n.Pt({stepFilterGroups:n.xt(L),stepFilters:n.xt(Z.extend({operand:n.vt(n.W)}))}).optional()}).superRefine((e,r)=>{if(t.r(e.fieldUniversalIdentifiers)&&!$.includes(e.action)&&r.addIssue({code:`custom`,path:[`fieldUniversalIdentifiers`],message:`Watched fields only apply to ${$.join(` and `)} events`}),!n.Vt(e.filter))return;let i=new Map;e.filter.stepFilterGroups.forEach((e,t)=>{i.has(e.id)&&r.addIssue({code:`custom`,path:[`filter`,`stepFilterGroups`,t,`id`],message:`Filter group ${e.id} is declared more than once`}),i.set(e.id,e.parentStepFilterGroupId)}),e.filter.stepFilterGroups.forEach((e,t)=>{let a=e.parentStepFilterGroupId,o=[`filter`,`stepFilterGroups`,t,`parentStepFilterGroupId`];if(!n.Vt(a))return;if(!i.has(a)){r.addIssue({code:`custom`,path:o,message:`Filter group ${a} is not declared in stepFilterGroups`});return}let s=new Set([e.id]);for(let t=a;n.Vt(t);t=i.get(t)){if(s.has(t)){r.addIssue({code:`custom`,path:o,message:`Filter group ${e.id} is not reachable from a root group`});return}s.add(t)}}),e.filter.stepFilters.forEach((e,t)=>{i.has(e.stepFilterGroupId)||r.addIssue({code:`custom`,path:[`filter`,`stepFilters`,t,`stepFilterGroupId`],message:`Filter group ${e.stepFilterGroupId} is not declared in stepFilterGroups`})})})}),n.Pt({universalIdentifier:n.Rt(),type:n.Dt(`WEBHOOK`),nextStepIds:n.xt(n.Rt()).min(1),settings:Ft})],Lt=It.map(e=>e.shape.type.value),Rt=n.Ct(`type`,It,{error:e=>e.code===`invalid_union`?`Unsupported trigger type. Application workflows support: ${Lt.join(`, `)}`:void 0});n.Pt({universalIdentifier:n.Rt(),name:n.Ft().min(1),version:n.Pt({trigger:Rt,steps:n.xt(Et).min(1)})}).superRefine((e,t)=>{let{steps:n,trigger:r}=e.version,i=[e.universalIdentifier,r.universalIdentifier,...n.map(e=>e.universalIdentifier)];new Set(i).size!==i.length&&t.addIssue({code:`custom`,message:`Workflow, trigger and steps must have distinct universal identifiers`});let a={trigger:{type:r.type,nextStepIds:r.nextStepIds},steps:n.map(e=>({...e,id:e.universalIdentifier,settings:{input:e.input}}))},o=Ke(a);for(let e of[...Ye({workflow:a,graph:o}),...Je({workflow:a,graph:o}),...me({workflow:a,graph:o,stepsById:new Map(a.steps.map(e=>[e.id,e]))})])e.severity===`error`&&t.addIssue({code:`custom`,message:e.message})}),Object.defineProperty(exports,"_",{enumerable:!0,get:function(){return Ze}}),Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return Tt}}),Object.defineProperty(exports,"b",{enumerable:!0,get:function(){return et}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return ut}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return dt}}),Object.defineProperty(exports,"f",{enumerable:!0,get:function(){return tt}}),Object.defineProperty(exports,"g",{enumerable:!0,get:function(){return nt}}),Object.defineProperty(exports,"h",{enumerable:!0,get:function(){return Qe}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return st}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return ft}}),Object.defineProperty(exports,"m",{enumerable:!0,get:function(){return at}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return mt}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return ct}}),Object.defineProperty(exports,"p",{enumerable:!0,get:function(){return it}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return ht}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return wt}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return pt}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return lt}}),Object.defineProperty(exports,"v",{enumerable:!0,get:function(){return $e}}),Object.defineProperty(exports,"x",{enumerable:!0,get:function(){return rt}}),Object.defineProperty(exports,"y",{enumerable:!0,get:function(){return ot}});
@@ -1 +0,0 @@
1
- var e=`2.48.0`;Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return e}});
@@ -1 +0,0 @@
1
- const e=require("./build-CX6FBrbu.cjs"),t=require("./utils-BEfQWzTA-z2Y1wZJq.cjs"),n=require("./constants-Du9J-8Ug-CD8GTrut.cjs"),r=require("./application-VJqniwXy.cjs"),i=require("./fs-utils-Bl1fQcaJ.cjs"),a=require("./list-application-source-files-jEau5Rie.cjs"),o=require("./extract-manifest-from-file-D3w7Ampa.cjs"),s=require("./metadata-BtOyR6x0.cjs"),c=require("./locale-catalog-format-BT6ommA1.cjs"),l=require("./constants-Cf5-CwMu.cjs"),u=require("./is-supported-locale-C9iuFQ39.cjs");let d=require("node:fs/promises"),f=require("node:path"),p=require("node:fs"),m=require("tinyglobby"),h=require("typescript");h=e.i(h);let g=require("path");g=e.i(g);var _=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i;function v(e){return typeof e==`string`&&_.test(e)}function y(e){if(!v(e))throw TypeError(`Invalid UUID`);let t;return Uint8Array.of((t=parseInt(e.slice(0,8),16))>>>24,t>>>16&255,t>>>8&255,t&255,(t=parseInt(e.slice(9,13),16))>>>8,t&255,(t=parseInt(e.slice(14,18),16))>>>8,t&255,(t=parseInt(e.slice(19,23),16))>>>8,t&255,(t=parseInt(e.slice(24,36),16))/1099511627776&255,t/4294967296&255,t>>>24&255,t>>>16&255,t>>>8&255,t&255)}var b=[];for(let e=0;e<256;++e)b.push((e+256).toString(16).slice(1));function ee(e,t=0){return(b[e[t+0]]+b[e[t+1]]+b[e[t+2]]+b[e[t+3]]+`-`+b[e[t+4]]+b[e[t+5]]+`-`+b[e[t+6]]+b[e[t+7]]+`-`+b[e[t+8]]+b[e[t+9]]+`-`+b[e[t+10]]+b[e[t+11]]+b[e[t+12]]+b[e[t+13]]+b[e[t+14]]+b[e[t+15]]).toLowerCase()}function te(e){e=unescape(encodeURIComponent(e));let t=new Uint8Array(e.length);for(let n=0;n<e.length;++n)t[n]=e.charCodeAt(n);return t}var x=`6ba7b810-9dad-11d1-80b4-00c04fd430c8`,S=`6ba7b811-9dad-11d1-80b4-00c04fd430c8`;function C(e,t,n,r,i,a){let o=typeof n==`string`?te(n):n,s=typeof r==`string`?y(r):r;if(typeof r==`string`&&(r=y(r)),r?.length!==16)throw TypeError(`Namespace must be array-like (16 iterable integer values, 0-255)`);let c=new Uint8Array(16+o.length);if(c.set(s),c.set(o,s.length),c=t(c),c[6]=c[6]&15|e,c[8]=c[8]&63|128,i){if(a||=0,a<0||a+16>i.length)throw RangeError(`UUID byte range ${a}:${a+15} is out of buffer bounds`);for(let e=0;e<16;++e)i[a+e]=c[e];return i}return ee(c)}function ne(e,t,n,r){switch(e){case 0:return t&n^~t&r;case 1:return t^n^r;case 2:return t&n^t&r^n&r;case 3:return t^n^r}}function w(e,t){return e<<t|e>>>32-t}function re(e){let t=[1518500249,1859775393,2400959708,3395469782],n=[1732584193,4023233417,2562383102,271733878,3285377520],r=new Uint8Array(e.length+1);r.set(e),r[e.length]=128,e=r;let i=e.length/4+2,a=Math.ceil(i/16),o=Array(a);for(let t=0;t<a;++t){let n=new Uint32Array(16);for(let r=0;r<16;++r)n[r]=e[t*64+r*4]<<24|e[t*64+r*4+1]<<16|e[t*64+r*4+2]<<8|e[t*64+r*4+3];o[t]=n}o[a-1][14]=(e.length-1)*8/2**32,o[a-1][14]=Math.floor(o[a-1][14]),o[a-1][15]=(e.length-1)*8&4294967295;for(let e=0;e<a;++e){let r=new Uint32Array(80);for(let t=0;t<16;++t)r[t]=o[e][t];for(let e=16;e<80;++e)r[e]=w(r[e-3]^r[e-8]^r[e-14]^r[e-16],1);let i=n[0],a=n[1],s=n[2],c=n[3],l=n[4];for(let e=0;e<80;++e){let n=Math.floor(e/20),o=w(i,5)+ne(n,a,s,c)+l+t[n]+r[e]>>>0;l=c,c=s,s=w(a,30)>>>0,a=i,i=o}n[0]=n[0]+i>>>0,n[1]=n[1]+a>>>0,n[2]=n[2]+s>>>0,n[3]=n[3]+c>>>0,n[4]=n[4]+l>>>0}return Uint8Array.of(n[0]>>24,n[0]>>16,n[0]>>8,n[0],n[1]>>24,n[1]>>16,n[1]>>8,n[1],n[2]>>24,n[2]>>16,n[2]>>8,n[2],n[3]>>24,n[3]>>16,n[3]>>8,n[3],n[4]>>24,n[4]>>16,n[4]>>8,n[4])}function T(e,t,n,r){return C(80,re,e,t,n,r)}T.DNS=x,T.URL=S;function ie(e){if(!v(e))throw TypeError(`Invalid UUID`);return parseInt(e.slice(14,15),16)}var E=`a80ff791-b940-4c47-a522-2bb478515415`,ae=e=>e.type!==n.ot.SELECT&&e.type!==n.ot.MULTI_SELECT||e.options===void 0||e.options===null?e:{...e,options:e.options.map(t=>({...t,id:t.id??T(`${t.label}-${e.universalIdentifier}`,E)}))},D=({fields:e,labelIdentifierFieldMetadataUniversalIdentifier:t})=>n.Vt(t)&&!e.some(e=>e.universalIdentifier===t),O=({objectConfig:e,applicationUniversalIdentifier:t})=>({name:`name`,label:`Name`,description:`Name`,icon:`IconAbc`,isNullable:!0,defaultValue:null,type:n.ot.TEXT,universalIdentifier:r.h({applicationUniversalIdentifier:t,objectUniversalIdentifier:e.universalIdentifier,name:`name`})}),k=({objectConfig:e,applicationUniversalIdentifier:t})=>{let n=(e.fields??[]).map(e=>e.name),r=[...e.fields??[]],i=O({objectConfig:e,applicationUniversalIdentifier:t}),a=D({fields:e.fields??[],labelIdentifierFieldMetadataUniversalIdentifier:e.labelIdentifierFieldMetadataUniversalIdentifier});return!n.includes(i.name)&&!a&&r.push(i),{objectFields:r}},oe=({objectConfig:e,applicationUniversalIdentifier:t})=>{let{objectFields:n}=k({objectConfig:e,applicationUniversalIdentifier:t}),r=e.labelIdentifierFieldMetadataUniversalIdentifier??n.find(e=>e.name===`name`)?.universalIdentifier;return r?{objectManifest:{...e,fields:n.map(ae),labelIdentifierFieldMetadataUniversalIdentifier:r},errors:[]}:{objectManifest:null,errors:[`No label identifier field found for object ${e.nameSingular}. Please add a field with name "name" to your object.`]}},A=e.t(),j=e=>(e?.type===`record`||e?.type===`object`)&&(0,A.isNonEmptyString)(e.objectUniversalIdentifier),M=(e,t)=>{let n=(0,A.isNonEmptyString)(e)?t?.(e):void 0;return`Id of the ${(0,A.isNonEmptyString)(n)?n:`linked`} record`},N=(e,t)=>{if(j(e))return{type:`string`,description:M(e.objectUniversalIdentifier,t)};if(e.type===`records`)return{type:`array`,items:{type:`string`,description:M(e.objectUniversalIdentifier,t)}};let{objectUniversalIdentifier:r,multiline:i,label:a,items:o,properties:s,additionalProperties:c,...l}=e,u={...l};return n.Vt(o)&&(u.items=N(o,t)),n.Vt(s)&&(u.properties=Object.fromEntries(Object.entries(s).map(([e,n])=>[e,N(n,t)]))),n.Vt(c)&&(u.additionalProperties=(0,A.isObject)(c)?N(c,t):c),u},se={type:`object`,properties:{}},P=e=>{let t={type:`unknown`};switch(e.type){case`string`:t.type=`string`;break;case`number`:case`integer`:t.type=`number`;break;case`boolean`:t.type=`boolean`;break;case`array`:t.type=`array`,e.items&&(t.items=P(e.items));break;case`object`:t.type=`object`,e.properties&&(t.properties=Object.fromEntries(Object.entries(e.properties).map(([e,t])=>[e,P(t)])));break;case`record`:t.type=`record`;break;case`records`:t.type=`records`;break;default:t.type=`unknown`}return Array.isArray(e.enum)&&(t.enum=e.enum.filter(e=>typeof e==`string`)),e.multiline===!0&&(t.multiline=!0),(0,A.isNonEmptyString)(e.label)&&(t.label=e.label),(0,A.isNonEmptyString)(e.objectUniversalIdentifier)&&(t.objectUniversalIdentifier=e.objectUniversalIdentifier),t},F=e=>[P(e)];F({type:`object`,properties:{a:{type:`string`},b:{type:`number`}}});var I=async e=>{let{getFunctionInputSchema:t}=await Promise.resolve().then(()=>require("./get-function-input-schema-GNk3NRLJ-oQ5Evald.cjs")),r=t(e)[0];return r?.type===`object`&&n.Vt(r.properties)?{type:`object`,properties:r.properties}:se},L=e=>!n.Vt(e)||e===null?`unknown`:typeof e==`string`?`string`:typeof e==`number`?`number`:typeof e==`boolean`?`boolean`:Array.isArray(e)?`array`:`unknown`,R=e=>e?Object.entries(e).reduce((e,[t,n])=>((0,A.isObject)(n)&&!Array.isArray(n)?e[t]={isLeaf:!1,type:`object`,label:t,value:R(n)}:e[t]={isLeaf:!0,value:n,type:L(n),label:t},e),{}):{},z=(e,t)=>e?`${e}.${t}`:t,B=(e,t,r=``)=>{let i=[];for(let[a,o]of Object.entries(t)){let t=z(r,a),s=e[a];if(!n.Vt(s)){i.push(`Missing key "${t}" in declared output schema.`);continue}if(o.isLeaf!==s.isLeaf){i.push(`Type mismatch at "${t}": expected ${o.isLeaf?o.type:`object`} but declared ${s.isLeaf?s.type:`object`}.`);continue}if(!o.isLeaf&&!s.isLeaf){i.push(...B(s.value,o.value,t));continue}o.isLeaf&&s.isLeaf&&o.type!==`unknown`&&s.type!==`unknown`&&o.type!==s.type&&i.push(`Type mismatch at "${t}": expected ${o.type} but declared ${s.type}.`)}return i},V=[`string`,`number`,`boolean`,`array`,`unknown`],H=e=>V.includes(e),U=(e,t)=>{let n=t.label??e;return t.type===`record`?{isLeaf:!0,type:`string`,label:n,value:null}:t.type===`records`?{isLeaf:!0,type:`array`,label:n,value:null}:t.type===`object`?{isLeaf:!1,type:`object`,label:n,value:(0,A.isObject)(t.properties)?W(t.properties):{}}:{isLeaf:!0,type:H(t.type)?t.type:`unknown`,label:n,value:null}},W=e=>Object.entries(e).reduce((e,[t,n])=>(e[t]=U(t,n),e),{}),ce=async({logicFunctionConfig:e,sourceCode:t,sourcePath:n})=>{let{handler:r,...i}=e,a=i.toolTriggerSettings&&!i.toolTriggerSettings.inputSchema||i.workflowActionTriggerSettings&&!i.workflowActionTriggerSettings.inputSchema?await I(t):null,o=i.toolTriggerSettings?{...i.toolTriggerSettings,inputSchema:i.toolTriggerSettings.inputSchema??a??void 0}:void 0,s=i.workflowActionTriggerSettings?{...i.workflowActionTriggerSettings,inputSchema:i.workflowActionTriggerSettings.inputSchema??(a?F(a):void 0)}:void 0;return{...i,...o?{toolTriggerSettings:o}:{},...s?{workflowActionTriggerSettings:s}:{},handlerName:`default.config.handler`,sourceHandlerPath:n,builtHandlerPath:n.replace(/\.tsx?$/,`.mjs`),builtHandlerChecksum:`[default-checksum]`}},le=({frontComponentConfig:e,sourcePath:t})=>{let{component:n,...r}=e;return{...r,componentName:n.name,sourceComponentPath:t,builtComponentPath:t.replace(/\.tsx?$/,`.mjs`),builtComponentChecksum:``,isHeadless:r.isHeadless??!1}},ue=({roleConfig:e,applicationUniversalIdentifier:t})=>({...e,objectPermissions:(e.objectPermissions??[]).map(n=>({...n,universalIdentifier:n.universalIdentifier??r.t({applicationUniversalIdentifier:t,roleUniversalIdentifier:e.universalIdentifier,objectUniversalIdentifier:n.objectUniversalIdentifier})})),fieldPermissions:(e.fieldPermissions??[]).map(n=>({...n,universalIdentifier:n.universalIdentifier??r.l({applicationUniversalIdentifier:t,roleUniversalIdentifier:e.universalIdentifier,fieldUniversalIdentifier:n.fieldUniversalIdentifier})})),rowLevelPermissionPredicateGroups:e.rowLevelPermissionPredicateGroups??[],rowLevelPermissionPredicates:e.rowLevelPermissionPredicates??[],permissionFlagUniversalIdentifiers:e.permissionFlagUniversalIdentifiers??[]}),G=e=>{let t=new Set(e);return t.has(`react`)&&t.add(`react/jsx-runtime`),[...t].sort()},K=[`twenty-client-sdk`,`twenty-sdk`],q=e=>{let t=[],n=new Set;for(let r of e){if(!(0,A.isNonEmptyString)(r)){t.push(`"frontComponentSharedDependencies" entries in package.json must be non-empty strings`);continue}if(r.startsWith(`.`)||g.default.posix.isAbsolute(r)||g.default.win32.isAbsolute(r)){t.push(`Shared dependency "${r}" must be a package specifier, not a relative or absolute path`);continue}if(r===`twenty:front-component-shared-dependencies`){t.push(`Shared dependency "${r}" is reserved and cannot be shared`);continue}if(K.some(e=>r===e||r.startsWith(`${e}/`))){t.push(`Shared dependency "${r}" is already served separately and cannot be shared`);continue}if(n.has(r)){t.push(`Shared dependency "${r}" is declared twice`);continue}n.add(r)}return t},de=async e=>{let t=g.default.join(e,`package.json`);if(!await i.i(t))return{errors:[]};let n=(await i.o(t)).frontComponentSharedDependencies;if(n===void 0)return{errors:[]};if(!Array.isArray(n))return{errors:[`"frontComponentSharedDependencies" in package.json must be an array of package specifiers`]};if(!(0,A.isNonEmptyArray)(n))return{errors:[]};let a=q(n);return(0,A.isNonEmptyArray)(a)?{errors:a}:{sharedDependencies:{dependencies:G(n),builtPath:r.o,builtChecksum:null},errors:[]}},J=`pageType.isInSidePanel.isDashboardPageLayoutInEditMode.isLayoutCustomizationModeEnabled.favoriteRecordIds.isSelectAll.hasAnySoftDeleteFilterOnView.numberOfSelectedRecords.objectPermissions.selectedRecords.featureFlags.targetObjectReadPermissions.targetObjectWritePermissions.canImpersonate.canAccessFullAdminPanel.objectMetadataItem.objectMetadataLabel.isDefined.isNonEmptyString.includes.every.everyDefined.everyEquals.some.someDefined.someEquals.none.noneDefined.noneEquals.someNonEmptyString.includesEvery`.split(`.`),Y=`conditionalAvailabilityExpression`,fe=[`twenty-sdk/define`,`twenty-sdk`],X=new Set(J),pe=(e,t)=>{let r=[];for(let i of e.statements){if(!h.default.isImportDeclaration(i)||!h.default.isStringLiteral(i.moduleSpecifier)||!fe.includes(i.moduleSpecifier.text))continue;let a=i.importClause;if(!n.Vt(a)||a.phaseModifier===h.default.SyntaxKind.TypeKeyword)continue;let o=a.namedBindings;if(n.Vt(o)){if(h.default.isNamespaceImport(o)){let n=t.getSymbolAtLocation(o.name),i=e=>{h.default.isImportDeclaration(e)||h.default.isTypeNode(e)||(h.default.isPropertyAccessExpression(e)&&h.default.isIdentifier(e.expression)&&t.getSymbolAtLocation(e.expression)===n&&X.has(e.name.text)&&r.push({importedName:e.name.text,node:e}),h.default.forEachChild(e,i))};i(e);continue}if(h.default.isNamedImports(o))for(let i of o.elements){if(i.isTypeOnly)continue;let a=(i.propertyName??i.name).text;if(X.has(a)){let o=t.getSymbolAtLocation(i.name),s,c=e=>{if(!(n.Vt(s)||h.default.isImportDeclaration(e)||h.default.isTypeNode(e))){if(h.default.isIdentifier(e)){let r=h.default.isShorthandPropertyAssignment(e.parent)?t.getShorthandAssignmentValueSymbol(e.parent):t.getSymbolAtLocation(e);n.Vt(o)&&r===o&&(s=e)}h.default.forEachChild(e,c)}};c(e),n.Vt(s)&&r.push({importedName:a,node:s})}}}}return r},me=e=>{let t=!1,n=e=>{if(!t){if((h.default.isPropertyAssignment(e)||h.default.isShorthandPropertyAssignment(e))&&(h.default.isIdentifier(e.name)||h.default.isStringLiteral(e.name))&&e.name.text===Y){t=!0;return}h.default.forEachChild(e,n)}};return n(e),t},he=(e,t)=>{if(!J.some(t=>e.includes(t)))return[];let n=h.default.createSourceFile(t,e,h.default.ScriptTarget.Latest,!0,t.endsWith(`.tsx`)?h.default.ScriptKind.TSX:h.default.ScriptKind.TS);if(me(n))return[];let r={noLib:!0,noResolve:!0},i=h.default.createCompilerHost(r);return i.getSourceFile=e=>e===n.fileName?n:void 0,pe(n,h.default.createProgram([n.fileName],r,i).getTypeChecker()).map(({importedName:e,node:r})=>{let{line:i,character:a}=n.getLineAndCharacterOfPosition(r.getStart(n));return`${t}:${i+1}:${a+1} - "${e}" is a conditional-availability expression variable from twenty-sdk but this file has no ${Y}. These variables can only be used inside a command's ${Y}, not at runtime.`})},ge={canReadObjectRecords:`read`,canUpdateObjectRecords:`update`,canSoftDeleteObjectRecords:`soft-delete`,canDestroyObjectRecords:`destroy`},_e=Object.fromEntries(Object.entries(n.S).map(([e,t])=>[t,e])),ve=Object.fromEntries(Object.entries(s.n).map(([e,{universalIdentifier:t}])=>[t,e])),Z=({grant:e,objects:t,permissionFlags:n})=>{let r=e=>t.find(t=>t.universalIdentifier===e)?.nameSingular??ve[e]??e;switch(e.type){case`ALL_OBJECT_RECORDS`:return`${ge[e.action]} all object records`;case`ALL_SETTINGS`:return`update all settings`;case`ALL_TOOLS`:return`access all tools`;case`PERMISSION_FLAG`:return`permission flag ${n.find(t=>t.universalIdentifier===e.permissionFlagUniversalIdentifier)?.key??_e[e.permissionFlagUniversalIdentifier]??e.permissionFlagUniversalIdentifier}`;case`OBJECT_RECORDS`:return`${ge[e.action]} ${r(e.objectUniversalIdentifier)} records`;case`FIELD_VALUE`:return`${e.action===`canReadFieldValue`?`read`:`update`} field ${e.fieldUniversalIdentifier} of ${r(e.objectUniversalIdentifier)}`;case`ROW_LEVEL_RESTRICTION`:return`${r(e.objectUniversalIdentifier)} records without the row-level restriction`}},Q=e=>e.map(e=>`"${e}"`).join(`, `),$=({agents:e,defaultRoleUniversalIdentifier:t})=>{let r=new Map;for(let i of e)!n.Vt(i.roleUniversalIdentifier)||i.roleUniversalIdentifier===t||r.set(i.roleUniversalIdentifier,[...r.get(i.roleUniversalIdentifier)??[],i.name]);return r},ye=({applicationRole:e,defaultRoleUniversalIdentifier:t})=>n.Vt(e)?[]:[`Application default role "${t}" is not defined by this application.`],be=({agentNamesByRoleUniversalIdentifier:e,roles:t})=>[...e].filter(([e])=>!t.some(t=>t.universalIdentifier===e)).map(([e,t])=>`Agent ${Q(t)} references role "${e}", which is not defined by this application.`),xe=({agentNamesByRoleUniversalIdentifier:e,applicationRole:t,roles:i,objects:a,permissionFlags:o})=>{let s=o.filter(e=>(e.permissionType??`tool`)===`tool`).map(e=>e.universalIdentifier);return[...e].flatMap(([e,c])=>{let l=i.find(t=>t.universalIdentifier===e);if(!n.Vt(l))return[];let u=r.s({role:l,superset:t,toolPermissionFlagUniversalIdentifiers:s});if(u.length===0)return[];let d=u.map(e=>Z({grant:e,objects:a,permissionFlags:o})).join(`, `);return[`Role "${l.label}" used by agent ${Q(c)} grants more than the application role "${t.label}": ${d}. The application role must cover every permission an agent role grants.`]})},Se=({agents:e,roles:t,objects:r,permissionFlags:i,defaultRoleUniversalIdentifier:a})=>{let o=t.find(e=>e.universalIdentifier===a),s=$({agents:e,defaultRoleUniversalIdentifier:a});return[...ye({applicationRole:o,defaultRoleUniversalIdentifier:a}),...be({agentNamesByRoleUniversalIdentifier:s,roles:t}),...n.Vt(o)?xe({agentNamesByRoleUniversalIdentifier:s,applicationRole:o,roles:t,objects:r,permissionFlags:i}):[]]},Ce=({views:e,objects:r,fields:i})=>{let a=[],o=new Map;for(let e of i)o.set(e.universalIdentifier,e);for(let e of r)for(let t of e.fields)o.set(t.universalIdentifier,t);for(let r of e)for(let e of r.filters??[]){let r=o.get(e.fieldMetadataUniversalIdentifier);if(!n.Vt(r))continue;let i=(r.type===n.ot.RELATION||r.type===n.ot.MORPH_RELATION)&&n.Vt(e.relationTargetFieldMetadataUniversalIdentifier)?o.get(e.relationTargetFieldMetadataUniversalIdentifier)?.type??r.type:r.type;if(!(i in t.i))continue;let s=t.a({filterType:i,subFieldName:e.subFieldName});s.includes(e.operand)||a.push(`Operand "${e.operand}" is not supported on field "${r.name}" (type "${i}"). Supported operands: ${s.join(`, `)}.`)}return a},we=e=>{try{let t=JSON.parse((0,p.readFileSync)((0,f.join)(e,`package.json`),`utf-8`)).engines?.twenty;return typeof t==`string`&&t.trim()!==``?t.trim():null}catch{return null}},Te=e=>a.t(e),Ee=async e=>(await(0,m.glob)([`${r.i}/**/*`],{cwd:e,absolute:!0,onlyFiles:!0})).sort(),De=async e=>{try{let t=await(0,d.readFile)((0,g.join)(e,`README.md`),`utf-8`);return t.trim().length>0?t:void 0}catch{return}},Oe=async e=>{let r=await Te(e),i=await De(e),a=[],s=[],c,l=[],u=[],f=[],p=[],m=[],h=[],_=[],v=[],y=[],b=[],ee=[],te=[],x=[],S=[],C=[],ne=[],w=[],re=[],T=[],ie=[],E=[],D=[],O=[],k=[],A=[],j=[],M=[],N=[],se=[],P=[],F=[],I=[],L=[],R=[],z=[],B=[],V=[],H=[],U=[],W=[],G=[],K=[],q=[],J=[],Y=[],fe=[],X=[],pe=[],me=[];for(let i of r){let r=await(0,d.readFile)(i,`utf-8`),f=(0,g.relative)(e,i);a.push(...he(r,f));let _=o.r(r);if(!_)continue;let x=o.n[_];switch(x){case`application`:{let t=await o.t({appPath:e,filePath:i});c=t.config,a.push(...t.errors),s.push(...t.warnings??[]),se.push(f);break}case`objects`:{let t=await o.t({appPath:e,filePath:i});l.push(t.config),a.push(...t.errors),s.push(...t.warnings??[]),P.push(f);break}case`fields`:{let t=await o.t({appPath:e,filePath:i}),n=ae(t.config);p.push(n),a.push(...t.errors),s.push(...t.warnings??[]),F.push(f);break}case`permissionFlags`:{let t=await o.t({appPath:e,filePath:i});h.push(t.config),a.push(...t.errors),s.push(...t.warnings??[]),L.push(f);break}case`roles`:{let t=await o.t({appPath:e,filePath:i});u.push(t.config),a.push(...t.errors),s.push(...t.warnings??[]),R.push(f),_===`defineApplicationRole`&&N.push(t.config.universalIdentifier);break}case`skills`:{let t=await o.t({appPath:e,filePath:i});v.push(t.config),a.push(...t.errors),s.push(...t.warnings??[]),z.push(f);break}case`agents`:{let t=await o.t({appPath:e,filePath:i});y.push(t.config),a.push(...t.errors),s.push(...t.warnings??[]),B.push(f);break}case`connectionProviders`:{let t=await o.t({appPath:e,filePath:i});b.push(t.config),a.push(...t.errors),s.push(...t.warnings??[]),V.push(f);break}case`logicFunctions`:{let t=await o.t({appPath:e,filePath:i});a.push(...t.errors),s.push(...t.warnings??[]),_===`definePreInstallLogicFunction`&&n.Vt(t.config.serverRouteTriggerSettings)&&a.push(`${f}: pre-install logic functions cannot define serverRouteTriggerSettings.`);let c=await ce({logicFunctionConfig:t.config,sourceCode:r,sourcePath:f});if(ee.push(c),H.push(f),_===`definePostInstallLogicFunction`){let e=t.config;O.push({universalIdentifier:t.config.universalIdentifier,shouldRunOnVersionUpgrade:e.shouldRunOnVersionUpgrade??!1,shouldRunSynchronously:e.shouldRunSynchronously??!1})}if(_===`definePreInstallLogicFunction`){let e=t.config;k.push({universalIdentifier:t.config.universalIdentifier,shouldRunOnVersionUpgrade:e.shouldRunOnVersionUpgrade??!1})}_===`defineUninstallLogicFunction`&&A.push({universalIdentifier:t.config.universalIdentifier}),_===`defineHealthCheck`&&j.push({universalIdentifier:t.config.universalIdentifier});break}case`frontComponents`:{let t=await o.t({appPath:e,filePath:i});a.push(...t.errors),s.push(...t.warnings??[]);let n=le({frontComponentConfig:t.config,sourcePath:f});te.push(n),U.push(f),_===`defineSettingsFrontComponent`&&M.push(t.config.universalIdentifier);break}case`views`:{let t=await o.t({appPath:e,filePath:i}),n={...t.config};S.push(n),a.push(...t.errors),s.push(...t.warnings??[]),G.push(f);break}case`viewFields`:{let t=await o.t({appPath:e,filePath:i});C.push(t.config),a.push(...t.errors),s.push(...t.warnings??[]),K.push(f);break}case`navigationMenuItems`:{let t=await o.t({appPath:e,filePath:i});ne.push(t.config),a.push(...t.errors),s.push(...t.warnings??[]),q.push(f);break}case`pageLayouts`:{let t=await o.t({appPath:e,filePath:i}),n={...t.config};w.push(n),a.push(...t.errors),s.push(...t.warnings??[]),J.push(f);break}case`indexes`:{let t=await o.t({appPath:e,filePath:i}),n={...t.config};m.push(n),a.push(...t.errors),s.push(...t.warnings??[]),I.push(f);break}case`pageLayoutTabs`:{let t=await o.t({appPath:e,filePath:i}),n={...t.config};re.push(n),a.push(...t.errors),s.push(...t.warnings??[]),Y.push(f);break}case`pageLayoutWidgets`:{let t=await o.t({appPath:e,filePath:i});T.push(t.config),a.push(...t.errors),s.push(...t.warnings??[]),fe.push(f);break}case`commandMenuItems`:{let t=await o.t({appPath:e,filePath:i});ie.push(t.config),a.push(...t.errors),s.push(...t.warnings??[]),X.push(f);break}case`timelineActivityTypes`:{let t=await o.t({appPath:e,filePath:i});E.push(t.config),a.push(...t.errors),s.push(...t.warnings??[]),pe.push(f);break}case`settingsMenuItems`:{let t=await o.t({appPath:e,filePath:i});D.push(t.config),a.push(...t.errors),s.push(...t.warnings??[]),me.push(f);break}default:t.o(x)}}let ge=await Ee(e);for(let t of ge){let n=(0,g.relative)(e,t);x.push({filePath:n,fileName:(0,g.basename)(t),fileType:(0,g.extname)(t).replace(/^\./,``),checksum:null}),W.push(n)}if(c||a.push(`Cannot build application, please export default defineApplication() to define an application`),c){for(let e of l){let{objectManifest:t,errors:n}=oe({objectConfig:e,applicationUniversalIdentifier:c.universalIdentifier});a.push(...n),t&&f.push(t)}for(let e of u)_.push(ue({roleConfig:e,applicationUniversalIdentifier:c.universalIdentifier}))}O.length>1&&a.push(`Only one post install logic function is allowed per application`),k.length>1&&a.push(`Only one pre install logic function is allowed per application`),A.length>1&&a.push(`Only one uninstall logic function is allowed per application`),j.length>1&&a.push(`Only one health check is allowed per application`),M.length>1&&a.push(`Only one settings front component is allowed per application`),N.length>1&&a.push(`Only one defineApplicationRole is allowed per application`);let{sharedDependencies:_e,errors:ve}=await de(e);a.push(...ve);let Z=c?.defaultRoleUniversalIdentifier??(N.length===1?N[0]:void 0);c&&!Z&&a.push("Application must declare a default role: either pass `defaultRoleUniversalIdentifier` to defineApplication() or mark a role file with defineApplicationRole()"),a.push(...Ce({views:S,objects:f,fields:p})),n.Vt(c)&&n.Vt(Z)&&a.push(...Se({agents:y,roles:_,objects:f,permissionFlags:h,defaultRoleUniversalIdentifier:Z}));let Q=c&&Z?(()=>{let{logoUrl:t,screenshots:r,...a}=c;return{...a,logo:c.logo,galleryImages:c.galleryImages??[],defaultRoleUniversalIdentifier:Z,aboutDescription:i,yarnLockChecksum:null,packageJsonChecksum:null,requiredServerVersionRange:we(e),...O.length>=1?{postInstallLogicFunction:O[0]}:{},...k.length>=1?{preInstallLogicFunction:k[0]}:{},...A.length>=1?{uninstallLogicFunction:A[0]}:{},...j.length>=1?{healthCheckLogicFunction:j[0]}:{},...M.length>=1?{settingsFrontComponent:{universalIdentifier:M[0]}}:{},...n.Vt(_e)?{frontComponentSharedDependencies:_e}:{}}})():void 0,$=(e,t)=>e.universalIdentifier.localeCompare(t.universalIdentifier);return{manifest:Q?{application:Q,objects:f.sort($),fields:p.sort($),indexes:m.sort($),permissionFlags:h.sort($),roles:_.sort($),skills:v.sort($),agents:y.sort($),connectionProviders:b.sort($),logicFunctions:ee.sort($),frontComponents:te.sort($),publicAssets:x.sort((e,t)=>e.filePath.localeCompare(t.filePath)),views:S.sort($),viewFields:C.sort($),navigationMenuItems:ne.sort($),pageLayouts:w.sort($),pageLayoutTabs:re.sort($),pageLayoutWidgets:T.sort($),commandMenuItems:ie.sort($),timelineActivityTypes:E.sort($),settingsMenuItems:D.sort($)}:null,filePaths:{application:se,objects:P,fields:F,indexes:I,permissionFlags:L,roles:R,skills:z,agents:B,connectionProviders:V,logicFunctions:H,frontComponents:U,publicAssets:W,views:G,viewFields:K,navigationMenuItems:q,pageLayouts:J,pageLayoutTabs:Y,pageLayoutWidgets:fe,commandMenuItems:X,timelineActivityTypes:pe,settingsMenuItems:me},errors:a,warnings:s}},ke=[n.ot.RELATION,n.ot.MORPH_RELATION],Ae=e=>ke.includes(e.type),je=e=>{let t=new Set,n=new Set;for(let r of e)t.has(r)?n.add(r):t.add(r);return Array.from(n)},Me=({manifest:e,pageLayoutWidgets:t})=>{let r=new Set([e.application.settingsFrontComponent?.universalIdentifier,...e.settingsMenuItems.map(e=>e.frontComponentUniversalIdentifier),...e.commandMenuItems.map(e=>e.frontComponentUniversalIdentifier),...e.timelineActivityTypes.map(e=>e.frontComponentUniversalIdentifier),...t.map(({configuration:e})=>n.Vt(e)&&`frontComponentUniversalIdentifier`in e?e.frontComponentUniversalIdentifier:void 0)].filter(n.Vt));return e.frontComponents.filter(e=>!e.isHeadless&&!n.Vt(e.widgetAvailability)&&!r.has(e.universalIdentifier)).map(e=>`Front component "${e.name??e.componentName}" declares no widgetAvailability, so it is not offered in any widget picker. Set widgetAvailability to let users add it to record pages or dashboards.`)},Ne=e=>{let t=[],r=[...e.pageLayouts.flatMap(({tabs:e})=>e??[]),...e.pageLayoutTabs];for(let e of r){e.layoutMode===n.J.CANVAS&&t.push(`Page layout tab "${e.title}" uses deprecated CANVAS. For a full-height widget, use VERTICAL_LIST and set the widget's heightBehavior to 'TAB_VIEWPORT'. Existing Canvas layouts remain supported and are not converted.`);for(let r of e.widgets??[])r.position?.layoutMode===n.J.VERTICAL_LIST&&t.push(`Page layout widget "${r.title}" uses a deprecated vertical-list position. Order the widgets array by position.index, remove position, and move any position.heightBehavior to heightBehavior. Existing positions remain supported and keep their indices.`),`gridPosition`in r&&n.Vt(r.gridPosition)&&t.push(`Page layout widget "${r.title}" uses deprecated gridPosition. If position is already set, it takes precedence; remove the ignored gridPosition. Use position with layoutMode: 'GRID' and the same row, column, rowSpan and columnSpan only when position is absent. Existing gridPosition remains supported as a fallback.`)}return t},Pe=[`id`,`createdAt`,`createdBy`,`updatedAt`,`updatedBy`,`deletedAt`,`position`,`searchVector`],Fe=e=>e.objects.flatMap(t=>{let i=t.labelIdentifierFieldMetadataUniversalIdentifier?.toLowerCase();return n.Vt(i)?[...(t.fields??[]).map(e=>e.universalIdentifier.toLowerCase()),...e.fields.filter(e=>e.objectUniversalIdentifier.toLowerCase()===t.universalIdentifier.toLowerCase()).map(e=>e.universalIdentifier.toLowerCase()),...Pe.map(n=>r.h({applicationUniversalIdentifier:e.application.universalIdentifier,objectUniversalIdentifier:t.universalIdentifier,name:n}))].includes(i)?[]:[`Object "${t.nameSingular}" references label field ${i}, which is not declared in this app or a recognized generated field. Check the identifier; the server must resolve this reference before applying.`]:[]}),Ie=e=>{let i=[],a=je(e.timelineActivityTypes.map(e=>e.name)),o=new Set(e.frontComponents.map(e=>e.universalIdentifier));for(let e of a)i.push(`Timeline activity type name "${e}" is used more than once. Names must be unique within an application.`);for(let a of e.timelineActivityTypes){n.Vt(a.frontComponentUniversalIdentifier)&&!o.has(a.frontComponentUniversalIdentifier)&&i.push(`Timeline activity type "${a.name}" references front component "${a.frontComponentUniversalIdentifier}", which is not defined by this application.`);let s=a.emit,c=a.replacesTimelineActivityTypeUniversalIdentifier;if(!n.Vt(s)){n.Vt(c)&&i.push(`Timeline activity type "${a.name}" declares replacesTimelineActivityTypeUniversalIdentifier without an automatic emit contract.`);continue}let l=s.through,u=l?.triggerFieldUniversalIdentifiers,d=r.a(s.objectUniversalIdentifier);d||i.push(`Timeline activity type "${a.name}" references an invalid object universal identifier "${s.objectUniversalIdentifier}".`),(s.on===`linked`||s.on===`unlinked`)&&!n.Vt(l)&&i.push(`Timeline activity type "${a.name}" must declare emit.through for a ${s.on} event.`),n.Vt(u)&&(s.on!==`updated`||!t.r(u)||new Set(u).size!==u.length)&&i.push(`Timeline activity type "${a.name}" trigger fields must be a non-empty list of unique fields on an updated through event.`);let f=d?e.objects.find(e=>e.universalIdentifier===s.objectUniversalIdentifier):void 0;if(!n.Vt(f)){d&&!n.Vt(c)&&i.push(`Timeline activity type "${a.name}" targets object "${s.objectUniversalIdentifier}", which is not defined by this application. Types targeting another application's object must declare replacesTimelineActivityTypeUniversalIdentifier.`),n.Vt(c)&&!r.a(c)&&i.push(`Timeline activity type "${a.name}" references an invalid replacement universal identifier "${c}".`),n.Vt(l)&&!r.a(l.relationFieldUniversalIdentifier)&&i.push(`Timeline activity type "${a.name}" references an invalid through relation field universal identifier "${l.relationFieldUniversalIdentifier}".`);let e=u?.filter(e=>!r.a(e))??[];e.length>0&&i.push(`Timeline activity type "${a.name}" references invalid trigger field universal identifiers: ${e.join(`, `)}.`);continue}n.Vt(c)&&i.push(`Timeline activity type "${a.name}" targets an object defined by this application and must not replace another application's type.`);let p=[...f.fields,...e.fields.filter(e=>e.objectUniversalIdentifier===f.universalIdentifier)];if(!n.Vt(l))continue;let m=p.find(e=>e.universalIdentifier===l.relationFieldUniversalIdentifier);if(n.Vt(m)?Ae(m)&&n.Vt(m.universalSettings)&&(m.universalSettings.relationType===n.B.MANY_TO_ONE||m.universalSettings.relationType===n.B.ONE_TO_MANY&&(0,A.isNonEmptyString)(m.universalSettings.junctionTargetFieldUniversalIdentifier))||i.push(`Timeline activity type "${a.name}" must route through a MANY_TO_ONE relation or a junction-backed ONE_TO_MANY relation.`):i.push(`Timeline activity type "${a.name}" references relation field "${l.relationFieldUniversalIdentifier}", which is not defined on object "${f.nameSingular}".`),n.Vt(u)){let e=new Set(p.map(e=>e.universalIdentifier)),t=u.filter(t=>!e.has(t));t.length>0&&i.push(`Timeline activity type "${a.name}" references trigger fields that are not defined on object "${f.nameSingular}": ${t.join(`, `)}.`)}}return i},Le=[n.B.MANY_TO_ONE,n.B.ONE_TO_MANY],Re=`aggregateFieldMetadataId`,ze=e=>n.Vt(e)&&n.lt.some(t=>t===e.configurationType),Be=e=>{let t=[];if(!e)return[];for(let[n,r]of Object.entries(e))n===`universalIdentifier`&&typeof r==`string`&&t.push(r),!(n===`postInstallLogicFunction`||n===`preInstallLogicFunction`||n===`uninstallLogicFunction`||n===`healthCheckLogicFunction`||n===`identifyAccountLogicFunction`||n===`onConnectLogicFunction`||n===`onDisconnectLogicFunction`||n===`settingsFrontComponent`)&&typeof r==`object`&&t.push(...Be(r));return t},Ve=e=>{let t=[];for(let r of e){if(!Ae(r))continue;let e=r.universalSettings;if(!e?.relationType){t.push(`Relation field "${r.name}" is missing relationType. ${r.type} fields must declare a relationType (${Le.join(` or `)}) in universalSettings.`);continue}if(!Le.includes(e.relationType)){t.push(`Relation field "${r.name}" has invalid relationType "${e.relationType}". Expected ${Le.join(` or `)}.`);continue}e.relationType===n.B.MANY_TO_ONE&&!e.joinColumnName&&t.push(`MANY_TO_ONE relation field "${r.name}" is missing joinColumnName. MANY_TO_ONE relations must declare a joinColumnName in universalSettings.`)}return t},He=e=>{let t=e.pageLayouts.flatMap(e=>e.tabs?.flatMap(e=>e.widgets??[])??[]),n=e.pageLayoutTabs.flatMap(e=>e.widgets??[]);return[...t,...n,...e.pageLayoutWidgets??[]]},Ue=e=>{let t=[];for(let n of e){let e=n.configuration;if(ze(e)&&!(0,A.isNonEmptyString)(e.aggregateFieldMetadataUniversalIdentifier)){let r=Re in e?` Reference the aggregate field with "aggregateFieldMetadataUniversalIdentifier" (not "${Re}").`:``;t.push(`Graph widget "${n.title}" is missing aggregateFieldMetadataUniversalIdentifier.${r}`)}}return t},We=({pageLayoutTab:e,pageLayoutType:t})=>{let n=r.r({pageLayoutTabManifest:e,pageLayoutType:t});return n.status===`fail`?n.errors:[]},Ge=e=>{let t=new Map(e.pageLayouts.map(e=>[e.universalIdentifier,e.type])),r=e.pageLayouts.flatMap(e=>(e.tabs??[]).flatMap(t=>We({pageLayoutTab:t,pageLayoutType:e.type}))),i=e.pageLayoutTabs.flatMap(e=>We({pageLayoutTab:e,pageLayoutType:n.Vt(e.pageLayoutUniversalIdentifier)?t.get(e.pageLayoutUniversalIdentifier):void 0}));return[...r,...i]},Ke=e=>{let t=[],n=new Set;for(let i of e){if(n.has(i))continue;if(n.add(i),!v(i)){t.push(`Universal identifier "${i}" is not a valid UUID.`);continue}let e=ie(i);r.a(i)||t.push(`Universal identifier "${i}" is UUID version ${e}. Only UUID version 4 or higher is allowed.`)}return t},qe=e=>{let t=[],r=He(e),i=[...Ne(e),...Fe(e),...Me({manifest:e,pageLayoutWidgets:r})],a=Be(e),o=je(a.map(e=>e.toLowerCase()));o.length>0&&t.push(`Duplicate universal identifiers: ${o.join(`, `)}`);let s=Ke(a);s.length>0&&t.push(`Invalid universal identifiers: ${s.join(`, `)}`);let c=[...e.fields,...e.objects.flatMap(e=>e.fields)];for(let e of c)if((e.type===n.ot.SELECT||e.type===n.ot.MULTI_SELECT||e.type===n.ot.RATING)&&n.Vt(e.options)){e.options.some(({id:e})=>n.Vt(e)&&!(0,A.isNonEmptyString)(e))&&t.push(`Field "${e.name}" has empty option IDs. Set distinct non-empty IDs on these options.`);let r=je(e.options.map(e=>e.id).filter(n.Vt).map(e=>e.toLowerCase()));r.length>0&&t.push(`Field "${e.name}" has duplicate option IDs: ${r.join(`, `)}. Set distinct explicit IDs on these options.`)}return t.push(...Ve(c)),t.push(...Ge(e)),t.push(...Ue(r)),t.push(...Ie(e)),{errors:t,warnings:i,isValid:t.length===0}},Je={"twenty-sdk":`"twenty-sdk" is listed under "dependencies" in package.json. It is a build-time only tool and should be moved to "devDependencies".`,"twenty-client-sdk":`"twenty-client-sdk" is listed under "dependencies" in package.json. It is provided at runtime by Twenty's injected SDK and should be moved to "devDependencies".`},Ye=async e=>{let t=g.default.join(e,`package.json`);if(!await i.i(t))return[];let r=await i.o(t);return[`dependencies`,`optionalDependencies`].flatMap(e=>Object.entries(Je).filter(([t])=>n.Vt(r[e]?.[t])).map(([,t])=>t.replace(`"dependencies"`,`"${e}"`)))},Xe=async e=>await i.i(e)&&(await(0,d.stat)(e)).size===0?[`yarn.lock is empty. Run "yarn install" to regenerate it before building.`]:[],Ze=e=>Xe(g.default.join(e,`yarn.lock`)),Qe=async e=>{let t=await Oe(e);if(t.errors.length>0||!t.manifest)return{success:!1,errors:t.errors.length>0?t.errors:[`Failed to build manifest.`]};let n=qe(t.manifest);if(!n.isValid)return{success:!1,errors:n.errors};let r=await Ze(e);if(r.length>0)return{success:!1,errors:r};let i=await Ye(e);return{success:!0,manifest:t.manifest,filePaths:t.filePaths,warnings:[...t.warnings,...n.warnings,...i]}},$e=({catalog:e,onCollision:t})=>{let r={},i=new Map;for(let{message:a,context:o,translation:s}of c.n(e)){if(s.length===0)continue;let e=n.Vt(o)?`${o} ${a}`:a,l=c.i(a,o),u=i.get(l);n.Vt(u)&&u!==e&&t?.({messageId:l,keptKey:e,droppedKey:u}),i.set(l,e),r[l]=s}return r},et=async({filePath:e,onWarning:t})=>{let r;try{r=await i.o(e)}catch{return t(`Skipping translation file "${g.default.basename(e)}": it is not valid JSON.`),null}return!n.Vt(r)||typeof r!=`object`||Array.isArray(r)?(t(`Skipping translation file "${g.default.basename(e)}": expected a JSON object.`),null):r},tt=async({appPath:e,onWarning:t})=>{let n=g.default.join(e,l.t);if(!await i.i(n))return{};let r={};for(let e of(await(0,d.readdir)(n)).filter(e=>e.endsWith(`.json`))){let i=g.default.basename(e,`.json`);if(i===`en`)continue;if(!u.t(i)){t(`Skipping compiled translation file "${e}": "${i}" is not a supported locale.`);continue}let a=await et({filePath:g.default.join(n,e),onWarning:t});if(a===null)continue;let o=Object.fromEntries(Object.entries(a).filter(e=>typeof e[1]==`string`&&e[1].length>0));Object.keys(o).length>0&&(r[i]=o)}return r},nt=async({appPath:e,onWarning:t=e=>console.warn(e)})=>{let n=g.default.join(e,l.n);if(!await i.i(n))return;let r=(await(0,d.readdir)(n)).filter(e=>e.endsWith(`.json`)),a={};for(let e of r){let r=g.default.basename(e,`.json`);if(r===`en`)continue;if(!u.t(r)){t(`Skipping translation file "${e}": "${r}" is not a supported locale.`);continue}let i=await et({filePath:g.default.join(n,e),onWarning:t});if(i===null)continue;let o=$e({catalog:i,onCollision:({messageId:n,keptKey:r,droppedKey:i})=>t(`Message id collision in "${e}": "${r}" and "${i}" share id "${n}". Keeping "${r}".`)});Object.keys(o).length>0&&(a[r]=o)}for(let[n,r]of Object.entries(await tt({appPath:e,onWarning:t})))a[n]={...r,...a[n]??{}};return a};Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return $e}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return Qe}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return nt}});