twenty-sdk 0.2.2 → 0.2.4

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 (42) hide show
  1. package/README.md +125 -39
  2. package/dist/cli.cjs +1 -1
  3. package/dist/cli.mjs +2 -2
  4. package/dist/vendor/twenty-shared/{ViewFilterOperandDeprecated-CHskkJ78.js → ViewFilterOperandDeprecated-6TjGsHvE.js} +1 -1
  5. package/dist/vendor/twenty-shared/{ViewFilterOperandDeprecated-5v-49Eq0.mjs → ViewFilterOperandDeprecated-DHNmFtYo.mjs} +1 -1
  6. package/dist/vendor/twenty-shared/application/roleManifestType.d.ts +0 -1
  7. package/dist/vendor/twenty-shared/application/roleManifestType.d.ts.map +1 -1
  8. package/dist/vendor/twenty-shared/isValidCountryCode-DNOavXY6.js +4 -0
  9. package/dist/vendor/twenty-shared/{isValidCountryCode-CJneDJKx.mjs → isValidCountryCode-QjE8dukS.mjs} +1430 -1363
  10. package/dist/vendor/twenty-shared/types/SettingsPath.d.ts +1 -1
  11. package/dist/vendor/twenty-shared/types/SettingsPath.d.ts.map +1 -1
  12. package/dist/vendor/twenty-shared/types/ViewFilterOperandDeprecated.d.ts +1 -2
  13. package/dist/vendor/twenty-shared/types/ViewFilterOperandDeprecated.d.ts.map +1 -1
  14. package/dist/vendor/twenty-shared/types.cjs +1 -1
  15. package/dist/vendor/twenty-shared/types.mjs +4 -4
  16. package/dist/vendor/twenty-shared/utils/evalFromContext.d.ts +2 -0
  17. package/dist/vendor/twenty-shared/utils/evalFromContext.d.ts.map +1 -0
  18. package/dist/vendor/twenty-shared/utils/filter/dates/utils/addUnitToDateTime.d.ts.map +1 -1
  19. package/dist/vendor/twenty-shared/utils/filter/dates/utils/getEndUnitOfDateTime.d.ts.map +1 -1
  20. package/dist/vendor/twenty-shared/utils/filter/dates/utils/getStartUnitOfDateTime.d.ts.map +1 -1
  21. package/dist/vendor/twenty-shared/utils/filter/dates/utils/relativeDateFilterSchema.d.ts +3 -0
  22. package/dist/vendor/twenty-shared/utils/filter/dates/utils/relativeDateFilterSchema.d.ts.map +1 -1
  23. package/dist/vendor/twenty-shared/utils/filter/dates/utils/relativeDateFilterStringifiedSchema.d.ts +1 -1
  24. package/dist/vendor/twenty-shared/utils/filter/dates/utils/relativeDateFilterUnitSchema.d.ts +3 -0
  25. package/dist/vendor/twenty-shared/utils/filter/dates/utils/relativeDateFilterUnitSchema.d.ts.map +1 -1
  26. package/dist/vendor/twenty-shared/utils/filter/dates/utils/resolveRelativeDateFilter.d.ts +1 -1
  27. package/dist/vendor/twenty-shared/utils/filter/dates/utils/resolveRelativeDateFilterStringified.d.ts +1 -1
  28. package/dist/vendor/twenty-shared/utils/filter/dates/utils/resolveRelativeDateTimeFilter.d.ts +1 -1
  29. package/dist/vendor/twenty-shared/utils/filter/dates/utils/resolveRelativeDateTimeFilterStringified.d.ts +1 -1
  30. package/dist/vendor/twenty-shared/utils/filter/dates/utils/subUnitFromDateTime.d.ts.map +1 -1
  31. package/dist/vendor/twenty-shared/utils/filter/utils/convert-view-filter-operand-to-core-operand.util.d.ts.map +1 -1
  32. package/dist/vendor/twenty-shared/utils/index.d.ts +2 -0
  33. package/dist/vendor/twenty-shared/utils/index.d.ts.map +1 -1
  34. package/dist/vendor/twenty-shared/utils/rich-text-variable-resolver.d.ts +2 -0
  35. package/dist/vendor/twenty-shared/utils/rich-text-variable-resolver.d.ts.map +1 -0
  36. package/dist/vendor/twenty-shared/utils/variable-resolver.d.ts.map +1 -1
  37. package/dist/vendor/twenty-shared/utils.cjs +3 -2
  38. package/dist/vendor/twenty-shared/utils.mjs +468 -450
  39. package/dist/vendor/twenty-shared/workflow.cjs +1 -1
  40. package/dist/vendor/twenty-shared/workflow.mjs +3 -3
  41. package/package.json +1 -1
  42. package/dist/vendor/twenty-shared/isValidCountryCode-DxXIdhne.js +0 -4
package/README.md CHANGED
@@ -30,66 +30,152 @@ npm install twenty-sdk
30
30
  yarn add twenty-sdk
31
31
  ```
32
32
 
33
- ## Getting started
34
- You can either scaffold a new app or add the SDK to an existing one.
33
+ ## Usage
35
34
 
36
- - Start new (recommended):
37
- ```bash
38
- npx create-twenty-app@latest my-twenty-app
39
- cd my-twenty-app
40
- ```
41
- - Existing project: install the SDK as shown above, then use the CLI below.
35
+ ```
36
+ Usage: twenty [options] [command]
37
+
38
+ CLI for Twenty application development
39
+
40
+ Options:
41
+ --workspace <name> Use a specific workspace configuration (default: "default")
42
+ -V, --version output the version number
43
+ -h, --help display help for command
44
+
45
+ Commands:
46
+ auth Authentication commands
47
+ app Application development commands
48
+ help [command] display help for command
49
+ ```
50
+
51
+ ## Global Options
52
+
53
+ - `--workspace <name>`: Use a specific workspace configuration profile. Defaults to `default`. See Configuration for details.
54
+
55
+ ## Commands
56
+
57
+ ### Auth
58
+
59
+ Authenticate the CLI against your Twenty workspace.
60
+
61
+ - `twenty auth login` — Authenticate with Twenty.
62
+ - Options:
63
+ - `--api-key <key>`: API key for authentication.
64
+ - `--api-url <url>`: Twenty API URL (defaults to your current profile's value or `http://localhost:3000`).
65
+ - Behavior: Prompts for any missing values, persists them to the active workspace profile, and validates the credentials.
66
+
67
+ - `twenty auth logout` — Remove authentication credentials for the active workspace profile.
68
+
69
+ - `twenty auth status` — Print the current authentication status (API URL, masked API key, validity).
70
+
71
+ Examples:
42
72
 
43
- ## CLI quickstart
44
73
  ```bash
45
- # Authenticate using your API key (CLI will prompt for it)
74
+ # Login interactively (recommended)
46
75
  twenty auth login
47
76
 
48
- # Add a new entity to your application (guided prompts)
49
- twenty app add
77
+ # Provide values in flags
78
+ twenty auth login --api-key $TWENTY_API_KEY --api-url https://api.twenty.com
50
79
 
51
- # Generate a typed Twenty client and TypeScript definitions for your workspace entities
52
- twenty app generate
80
+ # Login interactively for a specific workspace profile
81
+ twenty auth login --workspace my-custom-workspace
82
+
83
+ # Check status
84
+ twenty auth status
85
+
86
+ # Logout current profile
87
+ twenty auth logout
88
+ ```
89
+
90
+ ### App
53
91
 
54
- # Start dev mode: automatically syncs changes to your workspace for instant testing
92
+ Application development commands.
93
+
94
+ - `twenty app sync [appPath]` — One-time sync of the application to your Twenty workspace.
95
+ - Behavior: Compute your application's manifest and send it to your workspace to sync your application
96
+
97
+ - `twenty app dev [appPath]` — Watch and sync local application changes.
98
+ - Options:
99
+ - `-d, --debounce <ms>`: Debounce delay in milliseconds (default: `1000`).
100
+ - Behavior: Performs an initial sync, then watches the directory for changes and re-syncs after debounced edits. Press Ctrl+C to stop.
101
+
102
+ - `twenty app uninstall [appPath]` — Uninstall the application from the current workspace.
103
+ - Note: `twenty app delete` exists as a hidden alias for backward compatibility.
104
+
105
+ - `twenty app add [entityType]` — Add a new entity to your application.
106
+ - Arguments:
107
+ - `entityType`: one of `function` or `object`. If omitted, an interactive prompt is shown.
108
+ - Options:
109
+ - `--path <path>`: The path where the entity file should be created (relative to the current directory).
110
+ - Behavior:
111
+ - `object`: prompts for singular/plural names and labels, then creates a new object definition file.
112
+ - `function`: prompts for a name and scaffolds a serverless function file.
113
+
114
+ - `twenty app generate [appPath]` — Generate the typed Twenty client for your application.
115
+
116
+ - `twenty app logs [appPath]` — Stream application function logs.
117
+ - Options:
118
+ - `-u, --functionUniversalIdentifier <id>`: Only show logs for a specific function universal ID.
119
+ - `-n, --functionName <name>`: Only show logs for a specific function name.
120
+
121
+ Examples:
122
+
123
+ ```bash
124
+ # Start dev mode with default debounce
55
125
  twenty app dev
56
126
 
57
- # One‑time sync of local changes
127
+ # Start dev mode with custom workspace profile
128
+ twenty app dev --workspace my-custom-workspace
129
+
130
+ # Dev mode with custom debounce
131
+ twenty app dev --debounce 1500
132
+
133
+ # One-time sync of the current directory
58
134
  twenty app sync
59
135
 
60
- # Uninstall the application from the current workspace
61
- twenty app uninstall
62
- ```
136
+ # Add a new object interactively
137
+ twenty app add
138
+
139
+ # Generate client types
140
+ twenty app generate
63
141
 
64
- ## Usage (SDK)
65
- ```typescript
66
- // Example: import what you need from the SDK
67
- import { /* your exports */ } from 'twenty-sdk';
142
+ # Watch all function logs
143
+ twenty app logs
144
+
145
+ # Watch logs for a specific function by name
146
+ twenty app logs -n my-function
68
147
  ```
69
148
 
70
- ## Publish your application
71
- Applications are currently stored in [`twenty/packages/twenty-apps`](https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps).
149
+ ## Configuration
72
150
 
73
- You can share your application with all Twenty users:
151
+ The CLI stores configuration per user in a JSON file:
74
152
 
75
- ```bash
76
- # pull the Twenty project
77
- git clone https://github.com/twentyhq/twenty.git
78
- cd twenty
153
+ - Location: `~/.twenty/config.json`
154
+ - Structure: Profiles keyed by workspace name. The active profile is selected with `--workspace <name>`.
155
+
156
+ Example configuration file:
79
157
 
80
- # create a new branch
81
- git checkout -b feature/my-awesome-app
158
+ ```json
159
+ {
160
+ "profiles": {
161
+ "default": {
162
+ "apiUrl": "http://localhost:3000",
163
+ "apiKey": "<your-api-key>"
164
+ },
165
+ "prod": {
166
+ "apiUrl": "https://api.twenty.com",
167
+ "apiKey": "<your-api-key>"
168
+ }
169
+ }
170
+ }
82
171
  ```
83
172
 
84
- - Copy your app folder into `twenty/packages/twenty-apps`.
85
- - Commit your changes and open a pull request on https://github.com/twentyhq/twenty
173
+ Notes:
86
174
 
87
- ```bash
88
- git commit -m "Add new application"
89
- git push
90
- ```
175
+ - If a profile is missing, `apiUrl` defaults to `http://localhost:3000` until set.
176
+ - `twenty auth login` writes the `apiUrl` and `apiKey` for the default profile.
177
+ - `twenty auth login --workspace custom-workspace` writes the `apiUrl` and `apiKey` for a custom `custom-workspace` profile.
91
178
 
92
- Our team reviews contributions for quality, security, and reusability.
93
179
 
94
180
  ## Troubleshooting
95
181
  - Auth errors: run `twenty auth login` again and ensure the API key has the required permissions.
package/dist/cli.cjs CHANGED
@@ -285,4 +285,4 @@ export default class Twenty {
285
285
  `;await Ge.appendFile(Oe.join(i,"index.ts"),r)}}const sc=async(n,i)=>{const r=_i.default.join(n,i);if(await Ge.pathExists(r))return r;throw new Error(`${i} not found in ${n}`)},Mv=({appPath:n,tsconfigPath:i="tsconfig.json"})=>{const r=L.readConfigFile(Oe.join(n,i),L.sys.readFile);if(r.error)throw new Error(L.formatDiagnosticsWithColorAndContext([r.error],{getCanonicalFileName:u=>u,getCurrentDirectory:L.sys.getCurrentDirectory,getNewLine:()=>L.sys.newLine}));const a=L.parseJsonConfigFileContent(r.config,L.sys,n);if(a.errors.length)throw new Error(L.formatDiagnosticsWithColorAndContext(a.errors,{getCanonicalFileName:u=>u,getCurrentDirectory:L.sys.getCurrentDirectory,getNewLine:()=>L.sys.newLine}));return L.createProgram(a.fileNames,a.options)},$v=async({appPath:n})=>{const i=Mv({appPath:n,tsconfigPath:"tsconfig.json"});return{diagnostics:[...i.getSyntacticDiagnostics(),...i.getSemanticDiagnostics(),...i.getGlobalDiagnostics()],program:i}};class co extends Error{constructor(i,r,a){super(i),this.parseErrors=r,this.filePath=a,this.name="JsoncParseError"}}const Bv=(n,i={})=>{const r=[],a=K0.parse(n,r,{allowTrailingComma:i.allowTrailingComma??!0,disallowComments:i.disallowComments??!1,allowEmptyContent:i.allowEmptyContent??!1});if(r.length>0){const u=r.map(p=>`Line ${p.offset}: ${p.error}`);throw new co(`JSONC parse errors:
286
286
  ${u.join(`
287
287
  `)}`,r)}return a},Gv=async n=>await Ge.readFile(n,"utf8"),Wv=async(n,i={})=>{try{const r=await Ge.readFile(n,"utf8");return Bv(r,i)}catch(r){throw r instanceof co?new co(r.message,r.parseErrors,n):new Error(`Failed to read file ${n}: ${r}`)}},Vv=({diagnostics:n})=>{if(n.length>0){const i=L.formatDiagnosticsWithColorAndContext(n,{getCanonicalFileName:r=>r,getCurrentDirectory:L.sys.getCurrentDirectory,getNewLine:()=>L.sys.newLine});console.warn(i)}},vi=(n,i)=>{const r=n.expression;if(L.isCallExpression(r)){if(L.isIdentifier(r.expression))return r.expression.text===i;if(L.isPropertyAccessExpression(r.expression))return r.expression.name.text===i}return!1},dn=n=>{if(L.isStringLiteralLike(n))return n.text;if(L.isNumericLiteral(n))return Number(n.text);if(n.kind===L.SyntaxKind.TrueKeyword)return!0;if(n.kind===L.SyntaxKind.FalseKeyword)return!1;if(n.kind===L.SyntaxKind.NullKeyword)return null;if(L.isPropertyAccessExpression(n))return L.isIdentifier(n.expression)&&L.isIdentifier(n.name)?n.name.text:String(n.getText());if(L.isNoSubstitutionTemplateLiteral(n))return n.text;if(L.isTemplateExpression(n)){let i=n.head.text;for(const r of n.templateSpans){const a=dn(r.expression);i+=String(a)+r.literal.text}return i}if(L.isArrayLiteralExpression(n))return n.elements.map(i=>i.kind===L.SyntaxKind.SpreadElement?[]:dn(i));if(L.isObjectLiteralExpression(n)){const i={};for(const r of n.properties)if(L.isPropertyAssignment(r)){const a=L.isIdentifier(r.name)||L.isStringLiteralLike(r.name)?r.name.text:L.isComputedPropertyName(r.name)&&L.isStringLiteralLike(r.name.expression)?r.name.expression.text:void 0;a&&(i[a]=dn(r.initializer))}else L.isShorthandPropertyAssignment(r);return i}return L.isIdentifier(n)?n.text:String(n.getText?.()??"")},oc=n=>{if(!L.isCallExpression(n.expression))return;const[i]=n.expression.arguments;return i&&L.isObjectLiteralExpression(i)?dn(i):void 0},jv=n=>{const i=[];for(const r of n.getSourceFiles()){if(r.isDeclarationFile)continue;const a=u=>{if(L.isClassDeclaration(u)&&L.getDecorators(u)?.length){const y=L.getDecorators(u)?.find(_=>vi(_,"ObjectMetadata")||vi(_,"Object"));if(y){const _=oc(y);if(_&&typeof _=="object"&&!Array.isArray(_)){const N=[];for(const D of u.members){if(!L.isPropertyDeclaration(D))continue;const C=L.getDecorators(D)?.find(oe=>vi(oe,"FieldManifest")||vi(oe,"Field"));if(!C)continue;const J=oc(C);if(!J)continue;let Y;D.name&&L.isIdentifier(D.name)?Y=D.name.text:Y=D.name?.getText?.()??void 0,N.push({...J,...Y?{name:Y}:{}})}i.push({..._,fields:N})}}}L.forEachChild(u,a)};a(r)}return i},ac=n=>n.modifiers?.some(i=>i.kind===L.SyntaxKind.ExportKeyword)??!1,qv=n=>{const i=[];for(const _ of n.statements)if(!(!L.isVariableStatement(_)||!ac(_)))for(const N of _.declarationList.declarations){if(!L.isIdentifier(N.name))continue;const D=N.name.text,C=N.initializer??void 0;i.push({name:D,kind:"const",init:C,declNode:N})}for(const _ of n.statements)if(_.kind===L.SyntaxKind.FunctionDeclaration&&ac(_)){const N=_;N.name&&L.isIdentifier(N.name)&&i.push({name:N.name.text,kind:"function",init:void 0,declNode:N})}const r=Array.from(new Map(i.map(_=>[_.name,_])).values());if(r.length!==2)throw new Error(`Serverless file ${n.fileName} must export exactly 2 bindings (handler + config). Found: ${r.map(_=>_.name).join(", ")}`);const a=r.find(_=>_.name==="config");if(!a)throw new Error(`Serverless file ${n.fileName} must export a binding named "config".`);if(!a.init||!L.isObjectLiteralExpression(a.init))throw new Error(`"config" in ${n.fileName} must be initialized to an object literal.`);const u=a.declNode;if("type"in u&&u.type){const _=u.type.getText(n);if(!/\bFunctionConfig\b/.test(_))throw new Error(`"config" in ${n.fileName} must be typed as FunctionConfig (got: ${_}).`)}const p=dn(a.init),y=r.find(_=>_.name!=="config");if(!y)throw new Error(`Could not find the handler export in ${n.fileName}.`);if(y.kind==="const"){const _=y.init;if(!(!!_&&(L.isArrowFunction(_)||L.isFunctionExpression(_))))throw new Error(`Handler "${y.name}" in ${n.fileName} must be a function (arrow or function expression).`)}return{handlerName:y.name,configObject:p}},Jv=(n,i)=>Oe.relative(i,n).split(Oe.sep).join(Oe.posix.sep),Qv=(n,i)=>{const r=[];for(const a of n.getSourceFiles())if(!a.isDeclarationFile)try{const{handlerName:u,configObject:p}=qv(a),y=Jv(a.fileName,i);r.push({...p,handlerPath:y,handlerName:u})}catch{continue}return r},zv=(n,i,r)=>{let a=n;for(let u=0;u<i.length;u++){const p=i[u];u===i.length-1?a[p]=r:(a[p]=a[p]??{},a=a[p])}},Yv=async(n,i)=>{const r={};for(const a of n.getSourceFiles()){const u=a.fileName;if(a.isDeclarationFile||!u.startsWith(i+Oe.sep)&&u!==i||!(u.endsWith(".ts")||u.endsWith(".tsx"))||u.includes(`${Oe.sep}node_modules${Oe.sep}`))continue;const y=Oe.relative(i,u).split(Oe.sep),_=await Ge.readFile(u,"utf8");zv(r,y,_)}return r},Hv=n=>{for(const i of n.getSourceFiles()){if(i.isDeclarationFile||!i.fileName.endsWith("application.config.ts"))continue;let r;const a=u=>{if(L.isExportAssignment(u)&&L.isIdentifier(u.expression)){const p=u.expression.text;for(const y of i.statements)if(L.isVariableStatement(y))for(const _ of y.declarationList.declarations)L.isIdentifier(_.name)&&_.name.text===p&&_.initializer&&L.isObjectLiteralExpression(_.initializer)&&(r=dn(_.initializer))}r||L.forEachChild(u,a)};if(a(i),r)return r}throw new Error("Could not find default exported ApplicationConfig")},Kv=n=>{for(const i of n.getSourceFiles()){if(i.isDeclarationFile)continue;let r=!1;const a=u=>{if(!r){if(L.isImportDeclaration(u)){const p=u.moduleSpecifier;if(L.isStringLiteralLike(p)){const y=p.text;if((y===uo||y.endsWith(`/${uo}`))&&u.importClause){r=!0;return}}}L.forEachChild(u,a)}};if(a(i),r)return!0}return!1},Xv=n=>{const i=[];for(const r of n.getSourceFiles())if(!r.isDeclarationFile){for(const a of r.statements)if(!(!L.isVariableStatement(a)||!(a.modifiers?.some(p=>p.kind===L.SyntaxKind.ExportKeyword)??!1)))for(const p of a.declarationList.declarations){if(!L.isIdentifier(p.name)||!(p.type?.getText(r)??"").includes("RoleConfig"))continue;const _=p.initializer;!_||!L.isObjectLiteralExpression(_)||i.push(dn(_))}}return i},mr=async n=>{const i=await Wv(await sc(n,"package.json")),r=await Gv(await sc(n,"yarn.lock")),{diagnostics:a,program:u}=await $v({appPath:n});Vv({diagnostics:a});const[p,y,_,N,D]=[jv(u),Qv(u,n),Hv(u),Xv(u),await Yv(u,n)],C=Kv(u);return{packageJson:i,yarnLock:r,manifest:{application:_,objects:p,serverlessFunctions:y,roles:N,sources:D},shouldGenerate:C}};class Zv{constructor(){this.apiService=new Wn}async execute({appPath:i=mn,askForConfirmation:r}){try{console.log($.default.blue("🚀 Uninstall Twenty Application")),console.log($.default.gray(`📁 App Path: ${i}`)),console.log(""),r&&!await this.confirmationPrompt()&&(console.error($.default.red("⛔️ Aborting uninstall")),process.exit(1));const{manifest:a}=await mr(i),u=await this.apiService.uninstallApplication(a.application.universalIdentifier);return u.success===!1?console.error($.default.red("❌ Uninstall failed:"),u.error):console.log($.default.green("✅ Application uninstalled successfully")),u}catch(a){throw console.error($.default.red("Uninstall failed:"),a instanceof Error?a.message:a),a}}async confirmationPrompt(){const{confirmation:i}=await Pn.default.prompt([{type:"confirm",name:"confirmation",message:"Are you sure you want to uninstall this application?",default:!1}]);return i}}class e_{constructor(){this.apiService=new Wn}async execute(i){try{const r=i.appPath??mn,a=parseInt(i.debounce,10);this.logStartupInfo(r,a),await this.synchronize(r);const u=this.setupFileWatcher(r,a);this.setupGracefulShutdown(u)}catch(r){console.error($.default.red("Development mode failed:"),r instanceof Error?r.message:r),process.exit(1)}}async synchronize(i){const{manifest:r,packageJson:a,yarnLock:u}=await mr(i);await this.apiService.syncApplication({manifest:r,packageJson:a,yarnLock:u})}logStartupInfo(i,r){console.log($.default.blue("🚀 Starting Twenty Application Development Mode")),console.log($.default.gray(`📁 App Path: ${i}`)),console.log($.default.gray(`⏱️ Debounce: ${r}ms`)),console.log("")}setupFileWatcher(i,r){const a=ty.watch(i,{ignored:/node_modules|\.git/,persistent:!0});let u=null;const p=()=>{u&&clearTimeout(u),u=setTimeout(async()=>{console.log($.default.blue("🔄 Changes detected, syncing...")),await this.synchronize(i),console.log($.default.gray("👀 Watching for changes... (Press Ctrl+C to stop)"))},r)};return a.on("change",()=>{p()}),console.log($.default.gray("👀 Watching for changes... (Press Ctrl+C to stop)")),a}setupGracefulShutdown(i){process.on("SIGINT",()=>{console.log($.default.yellow(`
288
- 🛑 Stopping development mode...`)),i.close(),process.exit(0)})}}class t_{constructor(){this.apiService=new Wn,this.generateService=new Qc}async execute(i=mn){try{return console.log($.default.blue("🚀 Syncing Twenty Application")),console.log($.default.gray(`📁 App Path: ${i}`)),console.log(""),await this.synchronize({appPath:i})}catch(r){throw console.error($.default.red("Sync failed:"),r instanceof Error?r.message:r),r}}async synchronize({appPath:i}){const{manifest:r,packageJson:a,yarnLock:u,shouldGenerate:p}=await mr(i);let y=await this.apiService.syncApplication({manifest:r,packageJson:a,yarnLock:u});if(p){await this.generateService.generateClient(i);const{manifest:_}=await mr(i);y=await this.apiService.syncApplication({manifest:_,packageJson:a,yarnLock:u})}return y.success===!1?console.error($.default.red("❌ Serverless functions Sync failed:"),y.error):console.log($.default.green("✅ Serverless functions synced successfully")),y}}const kn=n=>n&&!n?.startsWith("/")?Oe.join(mn,n):n;class n_{constructor(){this.generateService=new Qc}async execute(i=mn){try{await this.generateService.generateClient(i)}catch(r){throw console.error($.default.red("Generate Twenty client failed:"),r instanceof Error?r.message:r),r}}}class r_{constructor(){this.apiService=new Wn}async execute({appPath:i=mn,functionUniversalIdentifier:r,functionName:a}){try{const{manifest:u}=await mr(i);this.logWatchInfo({appName:u.application.displayName,functionUniversalIdentifier:r,functionName:a}),await this.apiService.subscribeToLogs({applicationUniversalIdentifier:u.application.universalIdentifier,functionUniversalIdentifier:r,functionName:a})}catch(u){console.error($.default.red("Watch logs failed:"),u instanceof Error?u.message:u),process.exit(1)}}logWatchInfo({appName:i,functionUniversalIdentifier:r,functionName:a}){const u=i??"Twenty Application",p=r||a?`function "${r||a}"`:"functions";console.log($.default.blue(`🚀 Watching ${u} ${p} logs:`)),console.log("")}}class i_{constructor(){this.devCommand=new e_,this.syncCommand=new t_,this.uninstallCommand=new Zv,this.addCommand=new uy,this.generateCommand=new n_,this.logsCommand=new r_}getCommand(){const i=new xi.Command("app");return i.description("Application development commands"),i.command("dev [appPath]").description("Watch and sync local application changes").option("-d, --debounce <ms>","Debounce delay in milliseconds","1000").action(async(r,a)=>{await this.devCommand.execute({...a,appPath:kn(r)})}),i.command("sync [appPath]").description("Sync application to Twenty").action(async r=>{try{(await this.syncCommand.execute(kn(r))).success||process.exit(1)}catch{process.exit(1)}}),i.command("uninstall [appPath]").description("Uninstall application from Twenty").action(async r=>{try{(await this.uninstallCommand.execute({appPath:kn(r),askForConfirmation:!0})).success||process.exit(1)}catch{process.exit(1)}}),i.command("delete [appPath]",{hidden:!0}).description("Delete application from Twenty").action(async r=>{try{(await this.uninstallCommand.execute({appPath:kn(r),askForConfirmation:!0})).success||process.exit(1)}catch{process.exit(1)}}),i.command("add [entityType]").option("--path <path>","Path in which the entity should be created.").description(`Add a new entity to your application (${Object.values(wi).join("|")})`).action(async(r,a)=>{r&&!ay(r)&&(console.error($.default.red(`Invalid entity type "${r}". Must be one of: ${Object.values(wi).join("|")}`)),process.exit(1)),await this.addCommand.execute(r,a?.path)}),i.command("generate [outputPath]").description("Generate Twenty client").action(async r=>{await this.generateCommand.execute(kn(r))}),i.command("logs [appPath]").option("-u, --functionUniversalIdentifier <functionUniversalIdentifier>","Only show logs for the function with this universal ID").option("-n, --functionName <functionName>","Only show logs for the function with this name").description("Watch application function logs").action(async(r,a)=>{await this.logsCommand.execute({...a,appPath:kn(r)})}),i}}class s_{constructor(){this.configService=new At,this.apiService=new Wn}getCommand(){const i=new xi.Command("auth");return i.description("Authentication commands"),i.command("login").description("Authenticate with Twenty").option("--api-key <key>","API key for authentication").option("--api-url <url>","Twenty API URL").action(async r=>{await this.login(r)}),i.command("logout").description("Remove authentication credentials").action(async()=>{await this.logout()}),i.command("status").description("Check authentication status").action(async()=>{await this.status()}),i}async login(i){try{let{apiKey:r,apiUrl:a}=i;const u=await this.configService.getConfig();if(a||(a=(await Pn.default.prompt([{type:"input",name:"apiUrl",message:"Twenty API URL:",default:u.apiUrl,validate:_=>{try{return new URL(_),!0}catch{return"Please enter a valid URL"}}}])).apiUrl),r||(r=(await Pn.default.prompt([{type:"password",name:"apiKey",message:"API Key:",mask:"*",validate:_=>_.length>0||"API key is required"}])).apiKey),await this.configService.setConfig({apiUrl:a,apiKey:r}),await this.apiService.validateAuth()){const y=At.getActiveWorkspace();console.log($.default.green(`✓ Successfully authenticated with Twenty (workspace: ${y})`))}else console.log($.default.red("✗ Authentication failed. Please check your credentials.")),process.exit(1)}catch(r){console.error($.default.red("Login failed:"),r instanceof Error?r.message:r),process.exit(1)}}async logout(){try{await this.configService.clearConfig();const i=At.getActiveWorkspace();console.log($.default.green(`✓ Successfully logged out (workspace: ${i})`))}catch(i){console.error($.default.red("Logout failed:"),i instanceof Error?i.message:i),process.exit(1)}}async status(){try{const i=At.getActiveWorkspace(),r=await this.configService.getConfig();if(console.log($.default.blue("Authentication Status:")),console.log(`Workspace: ${i}`),console.log(`API URL: ${r.apiUrl}`),console.log(`API Key: ${r.apiKey?"***"+r.apiKey.slice(-4):"Not set"}`),r.apiKey){const a=await this.apiService.validateAuth();console.log(`Status: ${a?$.default.green("✓ Valid"):$.default.red("✗ Invalid")}`)}else console.log(`Status: ${$.default.yellow("⚠ Not authenticated")}`)}catch(i){console.error($.default.red("Status check failed:"),i instanceof Error?i.message:i),process.exit(1)}}}const o_="0.2.2",a_={version:o_},vn=new xi.Command;vn.name("twenty").description("CLI for Twenty application development").version(a_.version);vn.option("--workspace <name>","Use a specific workspace configuration","default");vn.hook("preAction",n=>{const r=(n.optsWithGlobals?n.optsWithGlobals():n.opts()).workspace;At.setActiveWorkspace(r),console.log($.default.gray(`👩‍💻 Workspace - ${At.getActiveWorkspace()}`))});vn.addCommand(new s_().getCommand());vn.addCommand(new i_().getCommand());vn.exitOverride();try{vn.parse()}catch(n){n instanceof xi.CommanderError&&process.exit(n.exitCode),n instanceof Error&&(console.error($.default.red("Error:"),n.message),process.exit(1))}
288
+ 🛑 Stopping development mode...`)),i.close(),process.exit(0)})}}class t_{constructor(){this.apiService=new Wn,this.generateService=new Qc}async execute(i=mn){try{return console.log($.default.blue("🚀 Syncing Twenty Application")),console.log($.default.gray(`📁 App Path: ${i}`)),console.log(""),await this.synchronize({appPath:i})}catch(r){throw console.error($.default.red("Sync failed:"),r instanceof Error?r.message:r),r}}async synchronize({appPath:i}){const{manifest:r,packageJson:a,yarnLock:u,shouldGenerate:p}=await mr(i);let y=await this.apiService.syncApplication({manifest:r,packageJson:a,yarnLock:u});if(p){await this.generateService.generateClient(i);const{manifest:_}=await mr(i);y=await this.apiService.syncApplication({manifest:_,packageJson:a,yarnLock:u})}return y.success===!1?console.error($.default.red("❌ Serverless functions Sync failed:"),y.error):console.log($.default.green("✅ Serverless functions synced successfully")),y}}const kn=n=>n&&!n?.startsWith("/")?Oe.join(mn,n):n;class n_{constructor(){this.generateService=new Qc}async execute(i=mn){try{await this.generateService.generateClient(i)}catch(r){throw console.error($.default.red("Generate Twenty client failed:"),r instanceof Error?r.message:r),r}}}class r_{constructor(){this.apiService=new Wn}async execute({appPath:i=mn,functionUniversalIdentifier:r,functionName:a}){try{const{manifest:u}=await mr(i);this.logWatchInfo({appName:u.application.displayName,functionUniversalIdentifier:r,functionName:a}),await this.apiService.subscribeToLogs({applicationUniversalIdentifier:u.application.universalIdentifier,functionUniversalIdentifier:r,functionName:a})}catch(u){console.error($.default.red("Watch logs failed:"),u instanceof Error?u.message:u),process.exit(1)}}logWatchInfo({appName:i,functionUniversalIdentifier:r,functionName:a}){const u=i??"Twenty Application",p=r||a?`function "${r||a}"`:"functions";console.log($.default.blue(`🚀 Watching ${u} ${p} logs:`)),console.log("")}}class i_{constructor(){this.devCommand=new e_,this.syncCommand=new t_,this.uninstallCommand=new Zv,this.addCommand=new uy,this.generateCommand=new n_,this.logsCommand=new r_}getCommand(){const i=new xi.Command("app");return i.description("Application development commands"),i.command("dev [appPath]").description("Watch and sync local application changes").option("-d, --debounce <ms>","Debounce delay in milliseconds","1000").action(async(r,a)=>{await this.devCommand.execute({...a,appPath:kn(r)})}),i.command("sync [appPath]").description("Sync application to Twenty").action(async r=>{try{(await this.syncCommand.execute(kn(r))).success||process.exit(1)}catch{process.exit(1)}}),i.command("uninstall [appPath]").description("Uninstall application from Twenty").action(async r=>{try{(await this.uninstallCommand.execute({appPath:kn(r),askForConfirmation:!0})).success||process.exit(1)}catch{process.exit(1)}}),i.command("delete [appPath]",{hidden:!0}).description("Delete application from Twenty").action(async r=>{try{(await this.uninstallCommand.execute({appPath:kn(r),askForConfirmation:!0})).success||process.exit(1)}catch{process.exit(1)}}),i.command("add [entityType]").option("--path <path>","Path in which the entity should be created.").description(`Add a new entity to your application (${Object.values(wi).join("|")})`).action(async(r,a)=>{r&&!ay(r)&&(console.error($.default.red(`Invalid entity type "${r}". Must be one of: ${Object.values(wi).join("|")}`)),process.exit(1)),await this.addCommand.execute(r,a?.path)}),i.command("generate [appPath]").description("Generate Twenty client").action(async r=>{await this.generateCommand.execute(kn(r))}),i.command("logs [appPath]").option("-u, --functionUniversalIdentifier <functionUniversalIdentifier>","Only show logs for the function with this universal ID").option("-n, --functionName <functionName>","Only show logs for the function with this name").description("Watch application function logs").action(async(r,a)=>{await this.logsCommand.execute({...a,appPath:kn(r)})}),i}}class s_{constructor(){this.configService=new At,this.apiService=new Wn}getCommand(){const i=new xi.Command("auth");return i.description("Authentication commands"),i.command("login").description("Authenticate with Twenty").option("--api-key <key>","API key for authentication").option("--api-url <url>","Twenty API URL").action(async r=>{await this.login(r)}),i.command("logout").description("Remove authentication credentials").action(async()=>{await this.logout()}),i.command("status").description("Check authentication status").action(async()=>{await this.status()}),i}async login(i){try{let{apiKey:r,apiUrl:a}=i;const u=await this.configService.getConfig();if(a||(a=(await Pn.default.prompt([{type:"input",name:"apiUrl",message:"Twenty API URL:",default:u.apiUrl,validate:_=>{try{return new URL(_),!0}catch{return"Please enter a valid URL"}}}])).apiUrl),r||(r=(await Pn.default.prompt([{type:"password",name:"apiKey",message:"API Key:",mask:"*",validate:_=>_.length>0||"API key is required"}])).apiKey),await this.configService.setConfig({apiUrl:a,apiKey:r}),await this.apiService.validateAuth()){const y=At.getActiveWorkspace();console.log($.default.green(`✓ Successfully authenticated with Twenty (workspace: ${y})`))}else console.log($.default.red("✗ Authentication failed. Please check your credentials.")),process.exit(1)}catch(r){console.error($.default.red("Login failed:"),r instanceof Error?r.message:r),process.exit(1)}}async logout(){try{await this.configService.clearConfig();const i=At.getActiveWorkspace();console.log($.default.green(`✓ Successfully logged out (workspace: ${i})`))}catch(i){console.error($.default.red("Logout failed:"),i instanceof Error?i.message:i),process.exit(1)}}async status(){try{const i=At.getActiveWorkspace(),r=await this.configService.getConfig();if(console.log($.default.blue("Authentication Status:")),console.log(`Workspace: ${i}`),console.log(`API URL: ${r.apiUrl}`),console.log(`API Key: ${r.apiKey?"***"+r.apiKey.slice(-4):"Not set"}`),r.apiKey){const a=await this.apiService.validateAuth();console.log(`Status: ${a?$.default.green("✓ Valid"):$.default.red("✗ Invalid")}`)}else console.log(`Status: ${$.default.yellow("⚠ Not authenticated")}`)}catch(i){console.error($.default.red("Status check failed:"),i instanceof Error?i.message:i),process.exit(1)}}}const o_="0.2.4",a_={version:o_},vn=new xi.Command;vn.name("twenty").description("CLI for Twenty application development").version(a_.version);vn.option("--workspace <name>","Use a specific workspace configuration","default");vn.hook("preAction",n=>{const r=(n.optsWithGlobals?n.optsWithGlobals():n.opts()).workspace;At.setActiveWorkspace(r),console.log($.default.gray(`👩‍💻 Workspace - ${At.getActiveWorkspace()}`))});vn.addCommand(new s_().getCommand());vn.addCommand(new i_().getCommand());vn.exitOverride();try{vn.parse()}catch(n){n instanceof xi.CommanderError&&process.exit(n.exitCode),n instanceof Error&&(console.error($.default.red("Error:"),n.message),process.exit(1))}
package/dist/cli.mjs CHANGED
@@ -9523,7 +9523,7 @@ class I_ {
9523
9523
  r,
9524
9524
  a?.path
9525
9525
  );
9526
- }), i.command("generate [outputPath]").description("Generate Twenty client").action(async (r) => {
9526
+ }), i.command("generate [appPath]").description("Generate Twenty client").action(async (r) => {
9527
9527
  await this.generateCommand.execute(Pt(r));
9528
9528
  }), i.command("logs [appPath]").option(
9529
9529
  "-u, --functionUniversalIdentifier <functionUniversalIdentifier>",
@@ -9638,7 +9638,7 @@ class S_ {
9638
9638
  }
9639
9639
  }
9640
9640
  }
9641
- const b_ = "0.2.2", O_ = {
9641
+ const b_ = "0.2.4", O_ = {
9642
9642
  version: b_
9643
9643
  }, Tt = new go();
9644
9644
  Tt.name("twenty").description("CLI for Twenty application development").version(O_.version);
@@ -1 +1 @@
1
- "use strict";var _=(I=>(I.MONDAY="MONDAY",I.SUNDAY="SUNDAY",I.SATURDAY="SATURDAY",I))(_||{}),T=(I=>(I.IS="IS",I.IS_NOT_NULL="IS_NOT_NULL",I.IS_NOT="IS_NOT",I.LESS_THAN_OR_EQUAL="LESS_THAN_OR_EQUAL",I.GREATER_THAN_OR_EQUAL="GREATER_THAN_OR_EQUAL",I.IS_BEFORE="IS_BEFORE",I.IS_AFTER="IS_AFTER",I.CONTAINS="CONTAINS",I.DOES_NOT_CONTAIN="DOES_NOT_CONTAIN",I.IS_EMPTY="IS_EMPTY",I.IS_NOT_EMPTY="IS_NOT_EMPTY",I.IS_RELATIVE="IS_RELATIVE",I.IS_IN_PAST="IS_IN_PAST",I.IS_IN_FUTURE="IS_IN_FUTURE",I.IS_TODAY="IS_TODAY",I.VECTOR_SEARCH="VECTOR_SEARCH",I))(T||{}),N=(I=>(I.Is="is",I.IsNotNull="isNotNull",I.IsNot="isNot",I.LessThanOrEqual="lessThan",I.GreaterThanOrEqual="greaterThan",I.IsBefore="isBefore",I.IsAfter="isAfter",I.Contains="contains",I.DoesNotContain="doesNotContain",I.IsEmpty="isEmpty",I.IsNotEmpty="isNotEmpty",I.IsRelative="isRelative",I.IsInPast="isInPast",I.IsInFuture="isInFuture",I.IsToday="isToday",I.VectorSearch="search",I))(N||{});exports.FirstDayOfTheWeek=_;exports.ViewFilterOperand=T;exports.ViewFilterOperandDeprecated=N;
1
+ "use strict";var _=(I=>(I.MONDAY="MONDAY",I.SUNDAY="SUNDAY",I.SATURDAY="SATURDAY",I))(_||{}),T=(I=>(I.IS="IS",I.IS_NOT_NULL="IS_NOT_NULL",I.IS_NOT="IS_NOT",I.LESS_THAN_OR_EQUAL="LESS_THAN_OR_EQUAL",I.GREATER_THAN_OR_EQUAL="GREATER_THAN_OR_EQUAL",I.IS_BEFORE="IS_BEFORE",I.IS_AFTER="IS_AFTER",I.CONTAINS="CONTAINS",I.DOES_NOT_CONTAIN="DOES_NOT_CONTAIN",I.IS_EMPTY="IS_EMPTY",I.IS_NOT_EMPTY="IS_NOT_EMPTY",I.IS_RELATIVE="IS_RELATIVE",I.IS_IN_PAST="IS_IN_PAST",I.IS_IN_FUTURE="IS_IN_FUTURE",I.IS_TODAY="IS_TODAY",I.VECTOR_SEARCH="VECTOR_SEARCH",I))(T||{}),N=(I=>(I.Is="is",I.IsNotNull="isNotNull",I.IsNot="isNot",I.LessThanOrEqual="lessThan",I.GreaterThanOrEqual="greaterThan",I.IsBefore="isBefore",I.IsAfter="isAfter",I.Contains="contains",I.DoesNotContain="doesNotContain",I.IsEmpty="isEmpty",I.IsNotEmpty="isNotEmpty",I.IsRelative="isRelative",I.IsInPast="isInPast",I.IsInFuture="isInFuture",I.IsToday="isToday",I))(N||{});exports.FirstDayOfTheWeek=_;exports.ViewFilterOperand=T;exports.ViewFilterOperandDeprecated=N;
@@ -1,4 +1,4 @@
1
- var _ = /* @__PURE__ */ ((I) => (I.MONDAY = "MONDAY", I.SUNDAY = "SUNDAY", I.SATURDAY = "SATURDAY", I))(_ || {}), N = /* @__PURE__ */ ((I) => (I.IS = "IS", I.IS_NOT_NULL = "IS_NOT_NULL", I.IS_NOT = "IS_NOT", I.LESS_THAN_OR_EQUAL = "LESS_THAN_OR_EQUAL", I.GREATER_THAN_OR_EQUAL = "GREATER_THAN_OR_EQUAL", I.IS_BEFORE = "IS_BEFORE", I.IS_AFTER = "IS_AFTER", I.CONTAINS = "CONTAINS", I.DOES_NOT_CONTAIN = "DOES_NOT_CONTAIN", I.IS_EMPTY = "IS_EMPTY", I.IS_NOT_EMPTY = "IS_NOT_EMPTY", I.IS_RELATIVE = "IS_RELATIVE", I.IS_IN_PAST = "IS_IN_PAST", I.IS_IN_FUTURE = "IS_IN_FUTURE", I.IS_TODAY = "IS_TODAY", I.VECTOR_SEARCH = "VECTOR_SEARCH", I))(N || {}), T = /* @__PURE__ */ ((I) => (I.Is = "is", I.IsNotNull = "isNotNull", I.IsNot = "isNot", I.LessThanOrEqual = "lessThan", I.GreaterThanOrEqual = "greaterThan", I.IsBefore = "isBefore", I.IsAfter = "isAfter", I.Contains = "contains", I.DoesNotContain = "doesNotContain", I.IsEmpty = "isEmpty", I.IsNotEmpty = "isNotEmpty", I.IsRelative = "isRelative", I.IsInPast = "isInPast", I.IsInFuture = "isInFuture", I.IsToday = "isToday", I.VectorSearch = "search", I))(T || {});
1
+ var _ = /* @__PURE__ */ ((I) => (I.MONDAY = "MONDAY", I.SUNDAY = "SUNDAY", I.SATURDAY = "SATURDAY", I))(_ || {}), N = /* @__PURE__ */ ((I) => (I.IS = "IS", I.IS_NOT_NULL = "IS_NOT_NULL", I.IS_NOT = "IS_NOT", I.LESS_THAN_OR_EQUAL = "LESS_THAN_OR_EQUAL", I.GREATER_THAN_OR_EQUAL = "GREATER_THAN_OR_EQUAL", I.IS_BEFORE = "IS_BEFORE", I.IS_AFTER = "IS_AFTER", I.CONTAINS = "CONTAINS", I.DOES_NOT_CONTAIN = "DOES_NOT_CONTAIN", I.IS_EMPTY = "IS_EMPTY", I.IS_NOT_EMPTY = "IS_NOT_EMPTY", I.IS_RELATIVE = "IS_RELATIVE", I.IS_IN_PAST = "IS_IN_PAST", I.IS_IN_FUTURE = "IS_IN_FUTURE", I.IS_TODAY = "IS_TODAY", I.VECTOR_SEARCH = "VECTOR_SEARCH", I))(N || {}), T = /* @__PURE__ */ ((I) => (I.Is = "is", I.IsNotNull = "isNotNull", I.IsNot = "isNot", I.LessThanOrEqual = "lessThan", I.GreaterThanOrEqual = "greaterThan", I.IsBefore = "isBefore", I.IsAfter = "isAfter", I.Contains = "contains", I.DoesNotContain = "doesNotContain", I.IsEmpty = "isEmpty", I.IsNotEmpty = "isNotEmpty", I.IsRelative = "isRelative", I.IsInPast = "isInPast", I.IsInFuture = "isInFuture", I.IsToday = "isToday", I))(T || {});
2
2
  export {
3
3
  _ as F,
4
4
  N as V,
@@ -42,7 +42,6 @@ export type RoleManifest = SyncableEntityOptions & {
42
42
  canBeAssignedToUsers?: boolean;
43
43
  canBeAssignedToAgents?: boolean;
44
44
  canBeAssignedToApiKeys?: boolean;
45
- canBeAssignedToApplications?: boolean;
46
45
  objectPermissions?: ObjectPermission[];
47
46
  fieldPermissions?: FieldPermission[];
48
47
  permissionFlags?: PermissionFlagType[];
@@ -1 +1 @@
1
- {"version":3,"file":"roleManifestType.d.ts","sourceRoot":"","sources":["../../src/application/roleManifestType.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAErF,KAAK,oBAAoB,GAAG;IAC1B,yBAAyB,EAAE,MAAM,CAAC;IAClC,kBAAkB,CAAC,EAAE,KAAK,CAAC;CAC5B,CAAC;AAEF,KAAK,cAAc,GAAG;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,yBAAyB,CAAC,EAAE,KAAK,CAAC;CACnC,CAAC;AAEF,KAAK,oBAAoB,GAAG;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC,CAAC;AAEF,KAAK,gBAAgB,GACjB,CAAC,oBAAoB,GAAG,oBAAoB,CAAC,GAC7C,CAAC,oBAAoB,GAAG,cAAc,CAAC,CAAC;AAE5C,KAAK,mBAAmB,GAAG;IACzB,wBAAwB,EAAE,MAAM,CAAC;IACjC,SAAS,CAAC,EAAE,KAAK,CAAC;CACnB,CAAC;AAEF,KAAK,aAAa,GAAG;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,wBAAwB,CAAC,EAAE,KAAK,CAAC;CAClC,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B,CAAC;AAEF,KAAK,eAAe,GAChB,CAAC,mBAAmB,GAAG,oBAAoB,GAAG,mBAAmB,CAAC,GAClE,CAAC,mBAAmB,GAAG,oBAAoB,GAAG,aAAa,CAAC,GAC5D,CAAC,mBAAmB,GAAG,cAAc,GAAG,mBAAmB,CAAC,GAC5D,CAAC,mBAAmB,GAAG,cAAc,GAAG,aAAa,CAAC,CAAC;AAE3D,MAAM,MAAM,YAAY,GAAG,qBAAqB,GAAG;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACvC,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;IACrC,eAAe,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACxC,CAAC"}
1
+ {"version":3,"file":"roleManifestType.d.ts","sourceRoot":"","sources":["../../src/application/roleManifestType.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAErF,KAAK,oBAAoB,GAAG;IAC1B,yBAAyB,EAAE,MAAM,CAAC;IAClC,kBAAkB,CAAC,EAAE,KAAK,CAAC;CAC5B,CAAC;AAEF,KAAK,cAAc,GAAG;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,yBAAyB,CAAC,EAAE,KAAK,CAAC;CACnC,CAAC;AAEF,KAAK,oBAAoB,GAAG;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC,CAAC;AAEF,KAAK,gBAAgB,GACjB,CAAC,oBAAoB,GAAG,oBAAoB,CAAC,GAC7C,CAAC,oBAAoB,GAAG,cAAc,CAAC,CAAC;AAE5C,KAAK,mBAAmB,GAAG;IACzB,wBAAwB,EAAE,MAAM,CAAC;IACjC,SAAS,CAAC,EAAE,KAAK,CAAC;CACnB,CAAC;AAEF,KAAK,aAAa,GAAG;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,wBAAwB,CAAC,EAAE,KAAK,CAAC;CAClC,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B,CAAC;AAEF,KAAK,eAAe,GAChB,CAAC,mBAAmB,GAAG,oBAAoB,GAAG,mBAAmB,CAAC,GAClE,CAAC,mBAAmB,GAAG,oBAAoB,GAAG,aAAa,CAAC,GAC5D,CAAC,mBAAmB,GAAG,cAAc,GAAG,mBAAmB,CAAC,GAC5D,CAAC,mBAAmB,GAAG,cAAc,GAAG,aAAa,CAAC,CAAC;AAE3D,MAAM,MAAM,YAAY,GAAG,qBAAqB,GAAG;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACvC,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;IACrC,eAAe,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACxC,CAAC"}