twenty-sdk 2.2.0 → 2.3.1

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 (51) hide show
  1. package/README.md +3 -3
  2. package/dist/billing/index.cjs.map +1 -1
  3. package/dist/billing/index.mjs +9 -9
  4. package/dist/billing/index.mjs.map +1 -1
  5. package/dist/cli/commands/add.d.ts +1 -0
  6. package/dist/cli/operations/deploy.d.ts +2 -0
  7. package/dist/cli/types.d.ts +1 -0
  8. package/dist/cli/utilities/build/manifest/manifest-build.d.ts +1 -0
  9. package/dist/cli/utilities/build/manifest/manifest-extract-config.d.ts +7 -2
  10. package/dist/cli/utilities/dev/orchestrator/dev-mode-orchestrator-state.d.ts +3 -0
  11. package/dist/cli/utilities/dev/ui/components/dev-ui-version-row.d.ts +5 -0
  12. package/dist/cli/utilities/entity/entity-command-menu-item-template.d.ts +3 -0
  13. package/dist/cli/utilities/entity/entity-connection-provider-template.d.ts +4 -0
  14. package/dist/cli/utilities/file/append-server-variables.util.d.ts +22 -0
  15. package/dist/cli/utilities/server/docker-container.d.ts +1 -0
  16. package/dist/cli/utilities/version/check-server-version-compatibility.d.ts +1 -0
  17. package/dist/cli/utilities/version/compare-semver.d.ts +2 -0
  18. package/dist/cli/utilities/version/get-local-server-version.d.ts +1 -0
  19. package/dist/cli/utilities/version/get-published-server-versions.d.ts +2 -0
  20. package/dist/cli/utilities/version/get-version-info.d.ts +2 -0
  21. package/dist/cli/utilities/version/parse-semver.d.ts +2 -0
  22. package/dist/cli/utilities/version/published-server-version.d.ts +4 -0
  23. package/dist/cli/utilities/version/semver-tuple.d.ts +1 -0
  24. package/dist/cli/utilities/version/version-info.d.ts +7 -0
  25. package/dist/cli.cjs +125 -83
  26. package/dist/cli.mjs +3231 -3016
  27. package/dist/define/index.cjs +12 -12
  28. package/dist/define/index.cjs.map +1 -1
  29. package/dist/define/index.d.ts +86 -22
  30. package/dist/define/index.mjs +900 -893
  31. package/dist/define/index.mjs.map +1 -1
  32. package/dist/front-component/index.cjs +13 -13
  33. package/dist/front-component/index.cjs.map +1 -1
  34. package/dist/front-component/index.d.ts +12 -1
  35. package/dist/front-component/index.mjs +866 -896
  36. package/dist/front-component/index.mjs.map +1 -1
  37. package/dist/{get-function-input-schema-BZ7_XyUh-YHOkHl_i.mjs → get-function-input-schema-BZ7_XyUh-BLUL3vy8.mjs} +1 -1
  38. package/dist/{get-function-input-schema-BZ7_XyUh-DI4AlRRA.js → get-function-input-schema-BZ7_XyUh-BdGyao4P.js} +1 -1
  39. package/dist/logic-function/index.cjs +1 -1
  40. package/dist/logic-function/index.cjs.map +1 -1
  41. package/dist/logic-function/index.d.ts +92 -6
  42. package/dist/logic-function/index.mjs +52 -1
  43. package/dist/logic-function/index.mjs.map +1 -1
  44. package/dist/operations.cjs +1 -1
  45. package/dist/operations.mjs +2 -2
  46. package/dist/ui/index.cjs +15 -2233
  47. package/dist/ui/index.mjs +246 -3350
  48. package/dist/{uninstall-DXr3k3Da.mjs → uninstall-CWhPoI1i.mjs} +3594 -3349
  49. package/dist/uninstall-x1qK0SyR.js +253 -0
  50. package/package.json +2 -2
  51. package/dist/uninstall-D3my_KZK.js +0 -250
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  <div align="center">
2
2
  <a href="https://twenty.com">
3
3
  <picture>
4
- <img alt="Twenty logo" src="https://raw.githubusercontent.com/twentyhq/twenty/2f25922f4cd5bd61e1427c57c4f8ea224e1d552c/packages/twenty-website/public/images/core/logo.svg" height="128">
4
+ <img alt="Twenty logo" src="https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-website-new/public/images/core/logo.svg" height="128">
5
5
  </picture>
6
6
  </a>
7
7
  <h1>Twenty SDK</h1>
@@ -19,8 +19,8 @@ A CLI and SDK to develop, build, and publish applications that extend [Twenty CR
19
19
  The recommended way to start is with [create-twenty-app](https://www.npmjs.com/package/create-twenty-app):
20
20
 
21
21
  ```bash
22
- npx create-twenty-app@latest my-app
23
- cd my-app
22
+ npx create-twenty-app@latest my-twenty-app
23
+ cd my-twenty-app
24
24
  yarn twenty dev
25
25
  ```
26
26
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../twenty-shared/dist/application.mjs","../../src/sdk/billing/charge-credits.ts"],"sourcesContent":["const _ = \"public\", A = \"TWENTY_API_KEY\", T = \"TWENTY_API_URL\", t = \"TWENTY_APP_ACCESS_TOKEN\", N = \"generated\", r = {\n js: `import { createRequire as __createRequire } from 'module';\nconst require = __createRequire(import.meta.url);`\n}, u = \".twenty/output\", E = \"Standard\", I = \"20202020-64aa-4b6f-b003-9c74b97cee20\";\nvar e = /* @__PURE__ */ ((o) => (o.Object = \"object\", o.Field = \"field\", o.LogicFunction = \"logicFunction\", o.FrontComponent = \"frontComponent\", o.Role = \"role\", o.Skill = \"skill\", o.Agent = \"agent\", o.View = \"view\", o.NavigationMenuItem = \"navigationMenuItem\", o.PageLayout = \"pageLayout\", o.PageLayoutTab = \"pageLayoutTab\", o))(e || {});\nexport {\n _ as ASSETS_DIR,\n A as DEFAULT_API_KEY_NAME,\n T as DEFAULT_API_URL_NAME,\n t as DEFAULT_APP_ACCESS_TOKEN_NAME,\n N as GENERATED_DIR,\n r as NODE_ESM_CJS_BANNER,\n u as OUTPUT_DIR,\n e as SyncableEntity,\n E as TWENTY_STANDARD_APPLICATION_NAME,\n I as TWENTY_STANDARD_APPLICATION_UNIVERSAL_IDENTIFIER\n};\n","import {\n DEFAULT_API_URL_NAME,\n DEFAULT_APP_ACCESS_TOKEN_NAME,\n} from 'twenty-shared/application';\n\nconst BILLING_CHARGE_TIMEOUT_MS = 5_000;\n\nexport type ChargeCreditsParams = {\n creditsUsedMicro: number;\n operationType: string;\n quantity?: number;\n resourceContext?: string;\n};\n\n// Records credit usage against the running application via the Twenty\n// server's `/app/billing/charge` endpoint. Reads `TWENTY_API_URL` and\n// `TWENTY_APP_ACCESS_TOKEN` from the execution env (injected by the\n// logic-function runtime). No-ops silently when either is missing so\n// local/test runs don't crash. Failures are non-fatal — a billing error\n// never surfaces as a tool failure.\nexport const chargeCredits = async ({\n creditsUsedMicro,\n operationType,\n quantity = 1,\n resourceContext,\n}: ChargeCreditsParams): Promise<void> => {\n const apiUrl = process.env[DEFAULT_API_URL_NAME];\n const token = process.env[DEFAULT_APP_ACCESS_TOKEN_NAME];\n\n if (!apiUrl || !token) {\n return;\n }\n\n try {\n const response = await fetch(\n `${apiUrl.replace(/\\/$/, '')}/app/billing/charge`,\n {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${token}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n creditsUsedMicro,\n quantity,\n operationType,\n resourceContext,\n }),\n signal: AbortSignal.timeout(BILLING_CHARGE_TIMEOUT_MS),\n },\n );\n\n if (!response.ok) {\n const body = await response.text().catch(() => '');\n\n console.error(\n `chargeCredits: ${response.status} ${response.statusText}: ${body}`,\n );\n }\n } catch (error) {\n console.error(\n `chargeCredits: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n};\n"],"names":["T","t","BILLING_CHARGE_TIMEOUT_MS","chargeCredits","creditsUsedMicro","operationType","quantity","resourceContext","apiUrl","DEFAULT_API_URL_NAME","token","DEFAULT_APP_ACCESS_TOKEN_NAME","response","body","error"],"mappings":"gFAAK,MAAqCA,EAAI,iBAAkBC,EAAI,0BCK9DC,EAA4B,IAerBC,EAAgB,MAAO,CAClC,iBAAAC,EACA,cAAAC,EACA,SAAAC,EAAW,EACX,gBAAAC,CACF,IAA0C,CACxC,MAAMC,EAAS,QAAQ,IAAIC,CAAoB,EACzCC,EAAQ,QAAQ,IAAIC,CAA6B,EAEvD,GAAI,GAACH,GAAU,CAACE,GAIhB,GAAI,CACF,MAAME,EAAW,MAAM,MACrB,GAAGJ,EAAO,QAAQ,MAAO,EAAE,CAAC,sBAC5B,CACE,OAAQ,OACR,QAAS,CACP,cAAe,UAAUE,CAAK,GAC9B,eAAgB,kBAAA,EAElB,KAAM,KAAK,UAAU,CACnB,iBAAAN,EACA,SAAAE,EACA,cAAAD,EACA,gBAAAE,CAAA,CACD,EACD,OAAQ,YAAY,QAAQL,CAAyB,CAAA,CACvD,EAGF,GAAI,CAACU,EAAS,GAAI,CAChB,MAAMC,EAAO,MAAMD,EAAS,OAAO,MAAM,IAAM,EAAE,EAEjD,QAAQ,MACN,kBAAkBA,EAAS,MAAM,IAAIA,EAAS,UAAU,KAAKC,CAAI,EAAA,CAErE,CACF,OAASC,EAAO,CACd,QAAQ,MACN,kBAAkBA,aAAiB,MAAQA,EAAM,QAAU,OAAOA,CAAK,CAAC,EAAA,CAE5E,CACF"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../twenty-shared/dist/application.mjs","../../src/sdk/billing/charge-credits.ts"],"sourcesContent":["const _ = \"public\", A = \"TWENTY_API_KEY\", T = \"TWENTY_API_URL\", r = \"TWENTY_APP_ACCESS_TOKEN\", t = \"generated\", N = {\n js: `import { createRequire as __createRequire } from 'module';\nconst require = __createRequire(import.meta.url);`\n}, u = \".twenty/output\", I = \"Standard\", n = \"20202020-64aa-4b6f-b003-9c74b97cee20\";\nvar e = /* @__PURE__ */ ((o) => (o.Object = \"object\", o.Field = \"field\", o.LogicFunction = \"logicFunction\", o.FrontComponent = \"frontComponent\", o.Role = \"role\", o.Skill = \"skill\", o.Agent = \"agent\", o.ConnectionProvider = \"connectionProvider\", o.View = \"view\", o.NavigationMenuItem = \"navigationMenuItem\", o.PageLayout = \"pageLayout\", o.PageLayoutTab = \"pageLayoutTab\", o.CommandMenuItem = \"commandMenuItem\", o))(e || {});\nexport {\n _ as ASSETS_DIR,\n A as DEFAULT_API_KEY_NAME,\n T as DEFAULT_API_URL_NAME,\n r as DEFAULT_APP_ACCESS_TOKEN_NAME,\n t as GENERATED_DIR,\n N as NODE_ESM_CJS_BANNER,\n u as OUTPUT_DIR,\n e as SyncableEntity,\n I as TWENTY_STANDARD_APPLICATION_NAME,\n n as TWENTY_STANDARD_APPLICATION_UNIVERSAL_IDENTIFIER\n};\n","import {\n DEFAULT_API_URL_NAME,\n DEFAULT_APP_ACCESS_TOKEN_NAME,\n} from 'twenty-shared/application';\n\nconst BILLING_CHARGE_TIMEOUT_MS = 5_000;\n\nexport type ChargeCreditsParams = {\n creditsUsedMicro: number;\n operationType: string;\n quantity?: number;\n resourceContext?: string;\n};\n\n// Records credit usage against the running application via the Twenty\n// server's `/app/billing/charge` endpoint. Reads `TWENTY_API_URL` and\n// `TWENTY_APP_ACCESS_TOKEN` from the execution env (injected by the\n// logic-function runtime). No-ops silently when either is missing so\n// local/test runs don't crash. Failures are non-fatal — a billing error\n// never surfaces as a tool failure.\nexport const chargeCredits = async ({\n creditsUsedMicro,\n operationType,\n quantity = 1,\n resourceContext,\n}: ChargeCreditsParams): Promise<void> => {\n const apiUrl = process.env[DEFAULT_API_URL_NAME];\n const token = process.env[DEFAULT_APP_ACCESS_TOKEN_NAME];\n\n if (!apiUrl || !token) {\n return;\n }\n\n try {\n const response = await fetch(\n `${apiUrl.replace(/\\/$/, '')}/app/billing/charge`,\n {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${token}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n creditsUsedMicro,\n quantity,\n operationType,\n resourceContext,\n }),\n signal: AbortSignal.timeout(BILLING_CHARGE_TIMEOUT_MS),\n },\n );\n\n if (!response.ok) {\n const body = await response.text().catch(() => '');\n\n console.error(\n `chargeCredits: ${response.status} ${response.statusText}: ${body}`,\n );\n }\n } catch (error) {\n console.error(\n `chargeCredits: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n};\n"],"names":["T","r","BILLING_CHARGE_TIMEOUT_MS","chargeCredits","creditsUsedMicro","operationType","quantity","resourceContext","apiUrl","DEFAULT_API_URL_NAME","token","DEFAULT_APP_ACCESS_TOKEN_NAME","response","body","error"],"mappings":"gFAAK,MAAqCA,EAAI,iBAAkBC,EAAI,0BCK9DC,EAA4B,IAerBC,EAAgB,MAAO,CAClC,iBAAAC,EACA,cAAAC,EACA,SAAAC,EAAW,EACX,gBAAAC,CACF,IAA0C,CACxC,MAAMC,EAAS,QAAQ,IAAIC,CAAoB,EACzCC,EAAQ,QAAQ,IAAIC,CAA6B,EAEvD,GAAI,GAACH,GAAU,CAACE,GAIhB,GAAI,CACF,MAAME,EAAW,MAAM,MACrB,GAAGJ,EAAO,QAAQ,MAAO,EAAE,CAAC,sBAC5B,CACE,OAAQ,OACR,QAAS,CACP,cAAe,UAAUE,CAAK,GAC9B,eAAgB,kBAAA,EAElB,KAAM,KAAK,UAAU,CACnB,iBAAAN,EACA,SAAAE,EACA,cAAAD,EACA,gBAAAE,CAAA,CACD,EACD,OAAQ,YAAY,QAAQL,CAAyB,CAAA,CACvD,EAGF,GAAI,CAACU,EAAS,GAAI,CAChB,MAAMC,EAAO,MAAMD,EAAS,OAAO,MAAM,IAAM,EAAE,EAEjD,QAAQ,MACN,kBAAkBA,EAAS,MAAM,IAAIA,EAAS,UAAU,KAAKC,CAAI,EAAA,CAErE,CACF,OAASC,EAAO,CACd,QAAQ,MACN,kBAAkBA,aAAiB,MAAQA,EAAM,QAAU,OAAOA,CAAK,CAAC,EAAA,CAE5E,CACF"}
@@ -5,11 +5,11 @@ const p = async ({
5
5
  quantity: n = 1,
6
6
  resourceContext: a
7
7
  }) => {
8
- const e = process.env[i], r = process.env[T];
9
- if (!(!e || !r))
8
+ const t = process.env[i], r = process.env[T];
9
+ if (!(!t || !r))
10
10
  try {
11
- const t = await fetch(
12
- `${e.replace(/\/$/, "")}/app/billing/charge`,
11
+ const e = await fetch(
12
+ `${t.replace(/\/$/, "")}/app/billing/charge`,
13
13
  {
14
14
  method: "POST",
15
15
  headers: {
@@ -25,15 +25,15 @@ const p = async ({
25
25
  signal: AbortSignal.timeout(5e3)
26
26
  }
27
27
  );
28
- if (!t.ok) {
29
- const c = await t.text().catch(() => "");
28
+ if (!e.ok) {
29
+ const c = await e.text().catch(() => "");
30
30
  console.error(
31
- `chargeCredits: ${t.status} ${t.statusText}: ${c}`
31
+ `chargeCredits: ${e.status} ${e.statusText}: ${c}`
32
32
  );
33
33
  }
34
- } catch (t) {
34
+ } catch (e) {
35
35
  console.error(
36
- `chargeCredits: ${t instanceof Error ? t.message : String(t)}`
36
+ `chargeCredits: ${e instanceof Error ? e.message : String(e)}`
37
37
  );
38
38
  }
39
39
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../twenty-shared/dist/application.mjs","../../src/sdk/billing/charge-credits.ts"],"sourcesContent":["const _ = \"public\", A = \"TWENTY_API_KEY\", T = \"TWENTY_API_URL\", t = \"TWENTY_APP_ACCESS_TOKEN\", N = \"generated\", r = {\n js: `import { createRequire as __createRequire } from 'module';\nconst require = __createRequire(import.meta.url);`\n}, u = \".twenty/output\", E = \"Standard\", I = \"20202020-64aa-4b6f-b003-9c74b97cee20\";\nvar e = /* @__PURE__ */ ((o) => (o.Object = \"object\", o.Field = \"field\", o.LogicFunction = \"logicFunction\", o.FrontComponent = \"frontComponent\", o.Role = \"role\", o.Skill = \"skill\", o.Agent = \"agent\", o.View = \"view\", o.NavigationMenuItem = \"navigationMenuItem\", o.PageLayout = \"pageLayout\", o.PageLayoutTab = \"pageLayoutTab\", o))(e || {});\nexport {\n _ as ASSETS_DIR,\n A as DEFAULT_API_KEY_NAME,\n T as DEFAULT_API_URL_NAME,\n t as DEFAULT_APP_ACCESS_TOKEN_NAME,\n N as GENERATED_DIR,\n r as NODE_ESM_CJS_BANNER,\n u as OUTPUT_DIR,\n e as SyncableEntity,\n E as TWENTY_STANDARD_APPLICATION_NAME,\n I as TWENTY_STANDARD_APPLICATION_UNIVERSAL_IDENTIFIER\n};\n","import {\n DEFAULT_API_URL_NAME,\n DEFAULT_APP_ACCESS_TOKEN_NAME,\n} from 'twenty-shared/application';\n\nconst BILLING_CHARGE_TIMEOUT_MS = 5_000;\n\nexport type ChargeCreditsParams = {\n creditsUsedMicro: number;\n operationType: string;\n quantity?: number;\n resourceContext?: string;\n};\n\n// Records credit usage against the running application via the Twenty\n// server's `/app/billing/charge` endpoint. Reads `TWENTY_API_URL` and\n// `TWENTY_APP_ACCESS_TOKEN` from the execution env (injected by the\n// logic-function runtime). No-ops silently when either is missing so\n// local/test runs don't crash. Failures are non-fatal — a billing error\n// never surfaces as a tool failure.\nexport const chargeCredits = async ({\n creditsUsedMicro,\n operationType,\n quantity = 1,\n resourceContext,\n}: ChargeCreditsParams): Promise<void> => {\n const apiUrl = process.env[DEFAULT_API_URL_NAME];\n const token = process.env[DEFAULT_APP_ACCESS_TOKEN_NAME];\n\n if (!apiUrl || !token) {\n return;\n }\n\n try {\n const response = await fetch(\n `${apiUrl.replace(/\\/$/, '')}/app/billing/charge`,\n {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${token}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n creditsUsedMicro,\n quantity,\n operationType,\n resourceContext,\n }),\n signal: AbortSignal.timeout(BILLING_CHARGE_TIMEOUT_MS),\n },\n );\n\n if (!response.ok) {\n const body = await response.text().catch(() => '');\n\n console.error(\n `chargeCredits: ${response.status} ${response.statusText}: ${body}`,\n );\n }\n } catch (error) {\n console.error(\n `chargeCredits: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n};\n"],"names":["T","t","chargeCredits","creditsUsedMicro","operationType","quantity","resourceContext","apiUrl","DEFAULT_API_URL_NAME","token","DEFAULT_APP_ACCESS_TOKEN_NAME","response","body","error"],"mappings":"AAAK,MAAqCA,IAAI,kBAAkBC,IAAI;ACoB7D,MAAMC,IAAgB,OAAO;AAAA,EAClC,kBAAAC;AAAA,EACA,eAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,iBAAAC;AACF,MAA0C;AACxC,QAAMC,IAAS,QAAQ,IAAIC,CAAoB,GACzCC,IAAQ,QAAQ,IAAIC,CAA6B;AAEvD,MAAI,GAACH,KAAU,CAACE;AAIhB,QAAI;AACF,YAAME,IAAW,MAAM;AAAA,QACrB,GAAGJ,EAAO,QAAQ,OAAO,EAAE,CAAC;AAAA,QAC5B;AAAA,UACE,QAAQ;AAAA,UACR,SAAS;AAAA,YACP,eAAe,UAAUE,CAAK;AAAA,YAC9B,gBAAgB;AAAA,UAAA;AAAA,UAElB,MAAM,KAAK,UAAU;AAAA,YACnB,kBAAAN;AAAA,YACA,UAAAE;AAAA,YACA,eAAAD;AAAA,YACA,iBAAAE;AAAA,UAAA,CACD;AAAA,UACD,QAAQ,YAAY,QAAQ,GAAyB;AAAA,QAAA;AAAA,MACvD;AAGF,UAAI,CAACK,EAAS,IAAI;AAChB,cAAMC,IAAO,MAAMD,EAAS,OAAO,MAAM,MAAM,EAAE;AAEjD,gBAAQ;AAAA,UACN,kBAAkBA,EAAS,MAAM,IAAIA,EAAS,UAAU,KAAKC,CAAI;AAAA,QAAA;AAAA,MAErE;AAAA,IACF,SAASC,GAAO;AACd,cAAQ;AAAA,QACN,kBAAkBA,aAAiB,QAAQA,EAAM,UAAU,OAAOA,CAAK,CAAC;AAAA,MAAA;AAAA,IAE5E;AACF;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../twenty-shared/dist/application.mjs","../../src/sdk/billing/charge-credits.ts"],"sourcesContent":["const _ = \"public\", A = \"TWENTY_API_KEY\", T = \"TWENTY_API_URL\", r = \"TWENTY_APP_ACCESS_TOKEN\", t = \"generated\", N = {\n js: `import { createRequire as __createRequire } from 'module';\nconst require = __createRequire(import.meta.url);`\n}, u = \".twenty/output\", I = \"Standard\", n = \"20202020-64aa-4b6f-b003-9c74b97cee20\";\nvar e = /* @__PURE__ */ ((o) => (o.Object = \"object\", o.Field = \"field\", o.LogicFunction = \"logicFunction\", o.FrontComponent = \"frontComponent\", o.Role = \"role\", o.Skill = \"skill\", o.Agent = \"agent\", o.ConnectionProvider = \"connectionProvider\", o.View = \"view\", o.NavigationMenuItem = \"navigationMenuItem\", o.PageLayout = \"pageLayout\", o.PageLayoutTab = \"pageLayoutTab\", o.CommandMenuItem = \"commandMenuItem\", o))(e || {});\nexport {\n _ as ASSETS_DIR,\n A as DEFAULT_API_KEY_NAME,\n T as DEFAULT_API_URL_NAME,\n r as DEFAULT_APP_ACCESS_TOKEN_NAME,\n t as GENERATED_DIR,\n N as NODE_ESM_CJS_BANNER,\n u as OUTPUT_DIR,\n e as SyncableEntity,\n I as TWENTY_STANDARD_APPLICATION_NAME,\n n as TWENTY_STANDARD_APPLICATION_UNIVERSAL_IDENTIFIER\n};\n","import {\n DEFAULT_API_URL_NAME,\n DEFAULT_APP_ACCESS_TOKEN_NAME,\n} from 'twenty-shared/application';\n\nconst BILLING_CHARGE_TIMEOUT_MS = 5_000;\n\nexport type ChargeCreditsParams = {\n creditsUsedMicro: number;\n operationType: string;\n quantity?: number;\n resourceContext?: string;\n};\n\n// Records credit usage against the running application via the Twenty\n// server's `/app/billing/charge` endpoint. Reads `TWENTY_API_URL` and\n// `TWENTY_APP_ACCESS_TOKEN` from the execution env (injected by the\n// logic-function runtime). No-ops silently when either is missing so\n// local/test runs don't crash. Failures are non-fatal — a billing error\n// never surfaces as a tool failure.\nexport const chargeCredits = async ({\n creditsUsedMicro,\n operationType,\n quantity = 1,\n resourceContext,\n}: ChargeCreditsParams): Promise<void> => {\n const apiUrl = process.env[DEFAULT_API_URL_NAME];\n const token = process.env[DEFAULT_APP_ACCESS_TOKEN_NAME];\n\n if (!apiUrl || !token) {\n return;\n }\n\n try {\n const response = await fetch(\n `${apiUrl.replace(/\\/$/, '')}/app/billing/charge`,\n {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${token}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n creditsUsedMicro,\n quantity,\n operationType,\n resourceContext,\n }),\n signal: AbortSignal.timeout(BILLING_CHARGE_TIMEOUT_MS),\n },\n );\n\n if (!response.ok) {\n const body = await response.text().catch(() => '');\n\n console.error(\n `chargeCredits: ${response.status} ${response.statusText}: ${body}`,\n );\n }\n } catch (error) {\n console.error(\n `chargeCredits: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n};\n"],"names":["T","r","chargeCredits","creditsUsedMicro","operationType","quantity","resourceContext","apiUrl","DEFAULT_API_URL_NAME","token","DEFAULT_APP_ACCESS_TOKEN_NAME","response","body","error"],"mappings":"AAAK,MAAqCA,IAAI,kBAAkBC,IAAI;ACoB7D,MAAMC,IAAgB,OAAO;AAAA,EAClC,kBAAAC;AAAA,EACA,eAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,iBAAAC;AACF,MAA0C;AACxC,QAAMC,IAAS,QAAQ,IAAIC,CAAoB,GACzCC,IAAQ,QAAQ,IAAIC,CAA6B;AAEvD,MAAI,GAACH,KAAU,CAACE;AAIhB,QAAI;AACF,YAAME,IAAW,MAAM;AAAA,QACrB,GAAGJ,EAAO,QAAQ,OAAO,EAAE,CAAC;AAAA,QAC5B;AAAA,UACE,QAAQ;AAAA,UACR,SAAS;AAAA,YACP,eAAe,UAAUE,CAAK;AAAA,YAC9B,gBAAgB;AAAA,UAAA;AAAA,UAElB,MAAM,KAAK,UAAU;AAAA,YACnB,kBAAAN;AAAA,YACA,UAAAE;AAAA,YACA,eAAAD;AAAA,YACA,iBAAAE;AAAA,UAAA,CACD;AAAA,UACD,QAAQ,YAAY,QAAQ,GAAyB;AAAA,QAAA;AAAA,MACvD;AAGF,UAAI,CAACK,EAAS,IAAI;AAChB,cAAMC,IAAO,MAAMD,EAAS,OAAO,MAAM,MAAM,EAAE;AAEjD,gBAAQ;AAAA,UACN,kBAAkBA,EAAS,MAAM,IAAIA,EAAS,UAAU,KAAKC,CAAI;AAAA,QAAA;AAAA,MAErE;AAAA,IACF,SAASC,GAAO;AACd,cAAQ;AAAA,QACN,kBAAkBA,aAAiB,QAAQA,EAAM,UAAU,OAAOA,CAAK,CAAC;AAAA,MAAA;AAAA,IAE5E;AACF;"}
@@ -6,6 +6,7 @@ export declare class EntityAddCommand {
6
6
  execute(entityType?: SyncableEntity, path?: string): Promise<void>;
7
7
  private getEntityData;
8
8
  private promptAndCreateObjectCompanions;
9
+ private registerConnectionProviderServerVariables;
9
10
  private buildRecordPageFieldsViewFields;
10
11
  private getEntity;
11
12
  private handleFileExist;
@@ -7,6 +7,8 @@ export type AppDeployOptions = {
7
7
  onProgress?: (message: string) => void;
8
8
  };
9
9
  export type AppDeployResult = {
10
+ id: string;
11
+ name: string;
10
12
  universalIdentifier: string;
11
13
  };
12
14
  export declare const appDeploy: (options: AppDeployOptions) => Promise<CommandResult<AppDeployResult>>;
@@ -71,3 +71,4 @@ export type FunctionExecutionResult = {
71
71
  stackTrace: string;
72
72
  };
73
73
  };
74
+ export type ChokidarFsEvent = 'add' | 'addDir' | 'change' | 'unlink' | 'unlinkDir' | 'ready' | 'raw' | 'error' | 'all';
@@ -4,4 +4,5 @@ export declare const buildManifest: (appPath: string) => Promise<{
4
4
  manifest: Manifest | null;
5
5
  filePaths: EntityFilePaths;
6
6
  errors: string[];
7
+ warnings: string[];
7
8
  }>;
@@ -1,5 +1,6 @@
1
1
  export declare enum TargetFunction {
2
2
  DefineApplication = "defineApplication",
3
+ DefineApplicationRole = "defineApplicationRole",
3
4
  DefineField = "defineField",
4
5
  DefineLogicFunction = "defineLogicFunction",
5
6
  DefinePostInstallLogicFunction = "definePostInstallLogicFunction",
@@ -8,11 +9,13 @@ export declare enum TargetFunction {
8
9
  DefineRole = "defineRole",
9
10
  DefineSkill = "defineSkill",
10
11
  DefineAgent = "defineAgent",
12
+ DefineConnectionProvider = "defineConnectionProvider",
11
13
  DefineFrontComponent = "defineFrontComponent",
12
14
  DefineView = "defineView",
13
15
  DefineNavigationMenuItem = "defineNavigationMenuItem",
14
16
  DefinePageLayout = "definePageLayout",
15
- DefinePageLayoutTab = "definePageLayoutTab"
17
+ DefinePageLayoutTab = "definePageLayoutTab",
18
+ DefineCommandMenuItem = "defineCommandMenuItem"
16
19
  }
17
20
  export declare enum ManifestEntityKey {
18
21
  Application = "application",
@@ -22,12 +25,14 @@ export declare enum ManifestEntityKey {
22
25
  Roles = "roles",
23
26
  Skills = "skills",
24
27
  Agents = "agents",
28
+ ConnectionProviders = "connectionProviders",
25
29
  FrontComponents = "frontComponents",
26
30
  PublicAssets = "publicAssets",
27
31
  Views = "views",
28
32
  NavigationMenuItems = "navigationMenuItems",
29
33
  PageLayouts = "pageLayouts",
30
- PageLayoutTabs = "pageLayoutTabs"
34
+ PageLayoutTabs = "pageLayoutTabs",
35
+ CommandMenuItems = "commandMenuItems"
31
36
  }
32
37
  export type EntityFilePaths = Record<ManifestEntityKey, string[]>;
33
38
  export declare const TARGET_FUNCTION_TO_ENTITY_KEY_MAPPING: Record<TargetFunction, ManifestEntityKey>;
@@ -4,6 +4,7 @@ import { type CheckServerOrchestratorStepOutput } from '../../../../cli/utilitie
4
4
  import { type StartWatchersOrchestratorStepOutput } from '../../../../cli/utilities/dev/orchestrator/steps/start-watchers-orchestrator-step';
5
5
  import { type SyncApplicationOrchestratorStepOutput } from '../../../../cli/utilities/dev/orchestrator/steps/sync-application-orchestrator-step';
6
6
  import { type UploadFilesOrchestratorStepOutput } from '../../../../cli/utilities/dev/orchestrator/steps/upload-files-orchestrator-step';
7
+ import { type VersionInfo } from '../../../../cli/utilities/version/version-info';
7
8
  import { type Manifest, SyncableEntity } from 'twenty-shared/application';
8
9
  import { type FileFolder } from 'twenty-shared/types';
9
10
  export type OrchestratorStateStepEvent = {
@@ -58,6 +59,7 @@ export declare class OrchestratorState {
58
59
  };
59
60
  previousObjectsFieldsFingerprint: string | null;
60
61
  pipeline: OrchestratorStatePipeline;
62
+ versionInfo: VersionInfo | null;
61
63
  entities: Map<string, OrchestratorStateEntityInfo>;
62
64
  events: OrchestratorStateEvent[];
63
65
  private eventIdCounter;
@@ -66,6 +68,7 @@ export declare class OrchestratorState {
66
68
  appPath: string;
67
69
  frontendUrl?: string;
68
70
  });
71
+ setVersionInfo(versionInfo: VersionInfo): void;
69
72
  notify(): void;
70
73
  updatePipeline(update: Partial<OrchestratorStatePipeline>): void;
71
74
  applyStepEvents(stepEvents: OrchestratorStateStepEvent[]): void;
@@ -0,0 +1,5 @@
1
+ import { type VersionInfo } from '../../../../../cli/utilities/version/version-info';
2
+ import React from 'react';
3
+ export declare const DevUiVersionRow: ({ versionInfo, }: {
4
+ versionInfo: VersionInfo | null;
5
+ }) => React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | null;
@@ -0,0 +1,3 @@
1
+ export declare const getCommandMenuItemBaseFile: ({ name }: {
2
+ name: string;
3
+ }) => string;
@@ -0,0 +1,4 @@
1
+ export declare const getConnectionProviderBaseFile: ({ name, universalIdentifier, }: {
2
+ name: string;
3
+ universalIdentifier?: string | undefined;
4
+ }) => string;
@@ -0,0 +1,22 @@
1
+ export type ServerVariableSpec = {
2
+ name: string;
3
+ description: string;
4
+ isSecret: boolean;
5
+ };
6
+ export type AppendResult = {
7
+ status: 'appended';
8
+ file: string;
9
+ } | {
10
+ status: 'created';
11
+ file: string;
12
+ } | {
13
+ status: 'skipped-existing';
14
+ } | {
15
+ status: 'skipped-no-config';
16
+ } | {
17
+ status: 'skipped-no-app-call';
18
+ };
19
+ export declare const appendServerVariablesToAppConfig: ({ projectRoot, variables, }: {
20
+ projectRoot: string;
21
+ variables: ServerVariableSpec[];
22
+ }) => Promise<AppendResult>;
@@ -11,3 +11,4 @@ export declare const getContainerDigest: (containerName?: string) => string | nu
11
11
  export declare const getImageDigest: (image: string) => string | null;
12
12
  export declare const getContainerEnvVar: (envVar: string, containerName?: string) => string | null;
13
13
  export declare const checkDockerRunning: () => boolean;
14
+ export declare const getDockerNotRunningMessage: (retryCommand: string) => string;
@@ -0,0 +1 @@
1
+ export declare const checkServerVersionCompatibility: (containerName?: string) => Promise<void>;
@@ -0,0 +1,2 @@
1
+ import { type SemverTuple } from '../../../cli/utilities/version/semver-tuple';
2
+ export declare const compareSemver: (a: SemverTuple, b: SemverTuple) => number;
@@ -0,0 +1 @@
1
+ export declare const getLocalServerVersion: (containerName?: string) => Promise<string | null>;
@@ -0,0 +1,2 @@
1
+ import { type PublishedServerVersion } from '../../../cli/utilities/version/published-server-version';
2
+ export declare const getPublishedServerVersions: () => Promise<PublishedServerVersion[]>;
@@ -0,0 +1,2 @@
1
+ import { type VersionInfo } from '../../../cli/utilities/version/version-info';
2
+ export declare const getVersionInfo: (containerName?: string) => Promise<VersionInfo>;
@@ -0,0 +1,2 @@
1
+ import { type SemverTuple } from '../../../cli/utilities/version/semver-tuple';
2
+ export declare const parseSemver: (raw: string) => SemverTuple | null;
@@ -0,0 +1,4 @@
1
+ export type PublishedServerVersion = {
2
+ name: string;
3
+ lastUpdatedAt: Date;
4
+ };
@@ -0,0 +1 @@
1
+ export type SemverTuple = [number, number, number];
@@ -0,0 +1,7 @@
1
+ export type VersionInfo = {
2
+ cliVersion: string;
3
+ localServerVersion: string | null;
4
+ latestServerVersion: string | null;
5
+ isMinorOrMajorBehind: boolean;
6
+ daysBehind: number | null;
7
+ };