@khester/create-dynamics-app 1.1.0 → 2.1.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 (210) hide show
  1. package/README.md +74 -0
  2. package/dist/artifacts/registry.d.ts +18 -0
  3. package/dist/artifacts/registry.d.ts.map +1 -0
  4. package/dist/artifacts/registry.js +340 -0
  5. package/dist/artifacts/registry.js.map +1 -0
  6. package/dist/artifacts/types.d.ts +122 -0
  7. package/dist/artifacts/types.d.ts.map +1 -0
  8. package/dist/artifacts/types.js +7 -0
  9. package/dist/artifacts/types.js.map +1 -0
  10. package/dist/artifacts/validators.d.ts +16 -0
  11. package/dist/artifacts/validators.d.ts.map +1 -0
  12. package/dist/artifacts/validators.js +45 -0
  13. package/dist/artifacts/validators.js.map +1 -0
  14. package/dist/fromDesign.d.ts +5 -0
  15. package/dist/fromDesign.d.ts.map +1 -0
  16. package/dist/fromDesign.js +98 -0
  17. package/dist/fromDesign.js.map +1 -0
  18. package/dist/index.js +129 -177
  19. package/dist/index.js.map +1 -1
  20. package/dist/injectDevTools.d.ts +28 -0
  21. package/dist/injectDevTools.d.ts.map +1 -0
  22. package/dist/injectDevTools.js +148 -0
  23. package/dist/injectDevTools.js.map +1 -0
  24. package/dist/scaffold.d.ts +48 -0
  25. package/dist/scaffold.d.ts.map +1 -0
  26. package/dist/scaffold.js +180 -0
  27. package/dist/scaffold.js.map +1 -0
  28. package/dist/templatePlan.d.ts +3 -0
  29. package/dist/templatePlan.d.ts.map +1 -0
  30. package/dist/templatePlan.js +43 -0
  31. package/dist/templatePlan.js.map +1 -0
  32. package/dist/utils/copyTemplate.d.ts +13 -1
  33. package/dist/utils/copyTemplate.d.ts.map +1 -1
  34. package/dist/utils/copyTemplate.js +98 -4
  35. package/dist/utils/copyTemplate.js.map +1 -1
  36. package/dist/utils/updatePackageJson.d.ts +11 -1
  37. package/dist/utils/updatePackageJson.d.ts.map +1 -1
  38. package/dist/utils/updatePackageJson.js +12 -10
  39. package/dist/utils/updatePackageJson.js.map +1 -1
  40. package/package.json +10 -7
  41. package/templates/_shared/dev-tools/auth/get-token.js +72 -0
  42. package/templates/_shared/dev-tools/dev/mock-xrm.js +42 -0
  43. package/templates/_shared/dev-tools/metadata-sync/index.js +152 -0
  44. package/templates/_shared/dev-tools/smoke/test-retrieve.js +44 -0
  45. package/templates/dialog-form/README.md +27 -0
  46. package/templates/dialog-form/_variants/App.v8.tsx +39 -0
  47. package/templates/dialog-form/_variants/App.v9.tsx +41 -0
  48. package/templates/dialog-form/gitignore +5 -0
  49. package/templates/dialog-form/package.json +27 -0
  50. package/templates/dialog-form/public/index.html +11 -0
  51. package/templates/dialog-form/src/index.tsx +10 -0
  52. package/templates/dialog-form/src/services/dataverse.ts +30 -0
  53. package/templates/dialog-form/tsconfig.json +15 -0
  54. package/templates/dialog-form/webpack.config.js +17 -0
  55. package/templates/grid-customizer/README.md +28 -0
  56. package/templates/grid-customizer/gitignore +4 -0
  57. package/templates/grid-customizer/package.json +25 -0
  58. package/templates/grid-customizer/src/GridCustomizer.ts +28 -0
  59. package/templates/grid-customizer/src/cell-renderers.tsx +35 -0
  60. package/templates/grid-customizer/src/index.ts +4 -0
  61. package/templates/grid-customizer/src/types/grid-types.ts +30 -0
  62. package/templates/grid-customizer/src/utils/color-utils.ts +24 -0
  63. package/templates/grid-customizer/tsconfig.json +15 -0
  64. package/templates/grid-customizer/webpack.config.js +17 -0
  65. package/templates/pcf-dataset/ControlManifest.Input.xml +16 -0
  66. package/templates/pcf-dataset/README.md +21 -0
  67. package/templates/pcf-dataset/gitignore +5 -0
  68. package/templates/pcf-dataset/index.ts +39 -0
  69. package/templates/pcf-dataset/package.json +30 -0
  70. package/templates/pcf-dataset/strings/{{componentName}}.1033.resx +47 -0
  71. package/templates/pcf-dataset/tsconfig.json +8 -0
  72. package/templates/pcf-dataset/{{componentName}}Component.tsx +39 -0
  73. package/templates/pcf-field/ControlManifest.Input.xml +17 -0
  74. package/templates/pcf-field/README.md +95 -0
  75. package/templates/pcf-field/_variants/ValueInput.boolean.tsx +24 -0
  76. package/templates/pcf-field/_variants/ValueInput.date.tsx +27 -0
  77. package/templates/pcf-field/_variants/ValueInput.number.tsx +35 -0
  78. package/templates/pcf-field/_variants/ValueInput.text.tsx +27 -0
  79. package/templates/pcf-field/gitignore +5 -0
  80. package/templates/pcf-field/index.ts +61 -0
  81. package/templates/pcf-field/package.json +30 -0
  82. package/templates/pcf-field/strings/{{componentName}}.1033.resx +47 -0
  83. package/templates/pcf-field/tsconfig.json +8 -0
  84. package/templates/pcf-field/{{componentName}}Component.tsx +35 -0
  85. package/templates/power-pages-starter/gitignore +5 -0
  86. package/templates/react-custom-page/gitignore +5 -0
  87. package/templates/{dynamics-365-starter → react-custom-page}/package.json +3 -3
  88. package/templates/react-custom-page/tools/metadata-sync/index.js +152 -0
  89. package/templates/static-web-app/README.md +36 -0
  90. package/templates/static-web-app/_variants/App.v8.tsx +32 -0
  91. package/templates/static-web-app/_variants/App.v9.tsx +31 -0
  92. package/templates/static-web-app/api/host.json +12 -0
  93. package/templates/static-web-app/api/package.json +19 -0
  94. package/templates/static-web-app/api/src/functions/hello.ts +16 -0
  95. package/templates/static-web-app/api/tsconfig.json +14 -0
  96. package/templates/static-web-app/frontend/index.html +12 -0
  97. package/templates/static-web-app/frontend/package.json +23 -0
  98. package/templates/static-web-app/frontend/src/index.tsx +8 -0
  99. package/templates/static-web-app/frontend/tsconfig.json +16 -0
  100. package/templates/static-web-app/frontend/vite.config.ts +13 -0
  101. package/templates/static-web-app/gitignore +8 -0
  102. package/templates/static-web-app/package.json +15 -0
  103. package/templates/static-web-app/staticwebapp.config.json +7 -0
  104. package/templates/teams-app/README.md +27 -0
  105. package/templates/teams-app/_variants/graph.off.ts +7 -0
  106. package/templates/teams-app/_variants/graph.on.ts +22 -0
  107. package/templates/teams-app/appPackage/manifest.json +26 -0
  108. package/templates/teams-app/gitignore +5 -0
  109. package/templates/teams-app/index.html +12 -0
  110. package/templates/teams-app/package.json +26 -0
  111. package/templates/teams-app/src/App.tsx +25 -0
  112. package/templates/teams-app/src/index.tsx +8 -0
  113. package/templates/teams-app/tsconfig.json +16 -0
  114. package/templates/teams-app/vite.config.ts +9 -0
  115. package/templates/web-resource/README.md +39 -0
  116. package/templates/web-resource/_variants/App.v8.tsx +29 -0
  117. package/templates/web-resource/_variants/App.v9.tsx +28 -0
  118. package/templates/web-resource/gitignore +5 -0
  119. package/templates/web-resource/package.json +27 -0
  120. package/templates/web-resource/public/index.html +11 -0
  121. package/templates/web-resource/src/index.tsx +10 -0
  122. package/templates/web-resource/src/services/dataverse.ts +30 -0
  123. package/templates/web-resource/tsconfig.json +15 -0
  124. package/templates/web-resource/webpack.config.js +17 -0
  125. package/dist/utils/consultingHelpers.d.ts +0 -13
  126. package/dist/utils/consultingHelpers.d.ts.map +0 -1
  127. package/dist/utils/consultingHelpers.js +0 -569
  128. package/dist/utils/consultingHelpers.js.map +0 -1
  129. package/templates/dynamics-365-starter/INTEGRATION_TEST_RESULTS.md +0 -302
  130. package/templates/dynamics-365-starter/PHASE_4_COMPLETION_SUMMARY.md +0 -305
  131. package/templates/dynamics-365-starter/deployment/QUICKSTART-MAC.md +0 -507
  132. package/templates/dynamics-365-starter/deployment/QUICKSTART-WINDOWS.md +0 -372
  133. package/templates/dynamics-365-starter/deployment/pipelines/README.md +0 -375
  134. package/templates/dynamics-365-starter/deployment/pipelines/azure-pipelines.yml +0 -330
  135. package/templates/dynamics-365-starter/deployment/pipelines/github-actions.yml +0 -422
  136. package/templates/dynamics-365-starter/deployment/pipelines/jenkins.groovy +0 -636
  137. package/templates/dynamics-365-starter/deployment/scripts/deploy.ps1 +0 -417
  138. package/templates/dynamics-365-starter/deployment/scripts/deploy.sh +0 -582
  139. package/templates/dynamics-365-starter/deployment/scripts/team-onboarding.ps1 +0 -486
  140. package/templates/dynamics-365-starter/deployment/scripts/team-onboarding.sh +0 -567
  141. package/templates/dynamics-365-starter/deployment/scripts/validate-setup.ps1 +0 -703
  142. package/templates/dynamics-365-starter/deployment/scripts/validate-setup.sh +0 -671
  143. package/templates/dynamics-365-starter/docs/team-standards/README.md +0 -273
  144. package/templates/dynamics-365-starter/docs/team-standards/client-onboarding.md +0 -577
  145. package/templates/dynamics-365-starter/docs/team-standards/code-review-checklist.md +0 -359
  146. package/templates/dynamics-365-starter/docs/team-standards/coding-standards.md +0 -700
  147. package/templates/dynamics-365-starter/docs/team-standards/cross-platform-team-guide.md +0 -736
  148. package/templates/dynamics-365-starter/docs/team-standards/development-workflows.md +0 -727
  149. package/templates/dynamics-365-starter/docs/troubleshooting/common-errors.md +0 -758
  150. package/templates/dynamics-365-starter/docs/troubleshooting/platform-specific-issues.md +0 -878
  151. package/templates/dynamics-365-starter/src/client-project-template/README.md +0 -234
  152. package/templates/dynamics-365-starter/src/client-project-template/config/client.template.json +0 -114
  153. package/templates/dynamics-365-starter/src/client-project-template/config/environments/template.json +0 -186
  154. package/templates/dynamics-365-starter/src/client-project-template/scripts/client-setup.js +0 -667
  155. package/templates/dynamics-365-starter/src/examples/README.md +0 -52
  156. package/templates/dynamics-365-starter/src/examples/component-examples/opportunity-management.tsx +0 -625
  157. package/templates/dynamics-365-starter/src/examples/entity-examples/opportunity-model.ts +0 -545
  158. package/templates/dynamics-365-starter/src/examples/integration-examples/custom-pcf-wrapper.tsx +0 -722
  159. package/templates/dynamics-365-starter/src/examples/workflow-examples/sales-workflow.ts +0 -662
  160. package/templates/dynamics-365-starter/src/page-templates/EntityDashboard.tsx +0 -519
  161. package/templates/dynamics-365-starter/src/page-templates/EntityDetailPage.tsx +0 -456
  162. package/templates/dynamics-365-starter/src/page-templates/EntityListPage.tsx +0 -406
  163. package/templates/dynamics-365-starter/src/page-templates/RelatedEntitiesPage.tsx +0 -578
  164. package/templates/dynamics-365-starter/src/page-templates/SearchPage.tsx +0 -629
  165. package/templates/dynamics-365-starter/tools/entity-generator/index.js +0 -168
  166. package/templates/dynamics-365-starter/tools/entity-generator/templates/constants.template.ts +0 -124
  167. package/templates/dynamics-365-starter/tools/entity-generator/templates/form.template.css +0 -283
  168. package/templates/dynamics-365-starter/tools/entity-generator/templates/form.template.tsx +0 -275
  169. package/templates/dynamics-365-starter/tools/entity-generator/templates/management.template.css +0 -204
  170. package/templates/dynamics-365-starter/tools/entity-generator/templates/management.template.tsx +0 -413
  171. package/templates/dynamics-365-starter/tools/entity-generator/templates/model.template.ts +0 -250
  172. package/templates/dynamics-365-starter/tools/metadata-sync/d365-client.js +0 -410
  173. package/templates/dynamics-365-starter/tools/metadata-sync/index.js +0 -512
  174. package/templates/dynamics-365-starter/tools/metadata-sync/type-generator.js +0 -675
  175. /package/templates/{dynamics-365-starter → react-custom-page}/README.md +0 -0
  176. /package/templates/{dynamics-365-starter → react-custom-page}/deployment/README.md +0 -0
  177. /package/templates/{dynamics-365-starter → react-custom-page}/docs/ARCHITECTURE_OVERVIEW.md +0 -0
  178. /package/templates/{dynamics-365-starter → react-custom-page}/docs/BEST_PRACTICES.md +0 -0
  179. /package/templates/{dynamics-365-starter → react-custom-page}/docs/MIGRATION_GUIDE.md +0 -0
  180. /package/templates/{dynamics-365-starter → react-custom-page}/public/index.html +0 -0
  181. /package/templates/{dynamics-365-starter → react-custom-page}/scripts/custom-build.js +0 -0
  182. /package/templates/{dynamics-365-starter → react-custom-page}/src/components/AccountForm.css +0 -0
  183. /package/templates/{dynamics-365-starter → react-custom-page}/src/components/AccountForm.tsx +0 -0
  184. /package/templates/{dynamics-365-starter → react-custom-page}/src/components/AccountManagement.css +0 -0
  185. /package/templates/{dynamics-365-starter → react-custom-page}/src/components/AccountManagement.tsx +0 -0
  186. /package/templates/{dynamics-365-starter → react-custom-page}/src/components/ContactForm.css +0 -0
  187. /package/templates/{dynamics-365-starter → react-custom-page}/src/components/ContactForm.tsx +0 -0
  188. /package/templates/{dynamics-365-starter → react-custom-page}/src/components/ContactManagement.css +0 -0
  189. /package/templates/{dynamics-365-starter → react-custom-page}/src/components/ContactManagement.tsx +0 -0
  190. /package/templates/{dynamics-365-starter → react-custom-page}/src/components/Logging/LogDialog.tsx +0 -0
  191. /package/templates/{dynamics-365-starter → react-custom-page}/src/components/Logging/LoggingContext.tsx +0 -0
  192. /package/templates/{dynamics-365-starter → react-custom-page}/src/components/Logging/LoggingDebugPanel.css +0 -0
  193. /package/templates/{dynamics-365-starter → react-custom-page}/src/components/Logging/LoggingDebugPanel.tsx +0 -0
  194. /package/templates/{dynamics-365-starter → react-custom-page}/src/components/Logging/LoggingProvider.tsx +0 -0
  195. /package/templates/{dynamics-365-starter → react-custom-page}/src/components/Logging/logger.ts +0 -0
  196. /package/templates/{dynamics-365-starter → react-custom-page}/src/constants/account.ts +0 -0
  197. /package/templates/{dynamics-365-starter → react-custom-page}/src/constants/contact.ts +0 -0
  198. /package/templates/{dynamics-365-starter → react-custom-page}/src/index.tsx +0 -0
  199. /package/templates/{dynamics-365-starter → react-custom-page}/src/models/Account.ts +0 -0
  200. /package/templates/{dynamics-365-starter → react-custom-page}/src/models/BaseEntity.ts +0 -0
  201. /package/templates/{dynamics-365-starter → react-custom-page}/src/models/Contact.ts +0 -0
  202. /package/templates/{dynamics-365-starter → react-custom-page}/src/pcf/ContactControlWrapper.tsx +0 -0
  203. /package/templates/{dynamics-365-starter → react-custom-page}/src/pcf/MultiEntityControlWrapper.tsx +0 -0
  204. /package/templates/{dynamics-365-starter → react-custom-page}/src/providers/DynamicsProvider.tsx +0 -0
  205. /package/templates/{dynamics-365-starter → react-custom-page}/src/services/MockApiService.ts +0 -0
  206. /package/templates/{dynamics-365-starter → react-custom-page}/src/services/ServiceFactory.ts +0 -0
  207. /package/templates/{dynamics-365-starter → react-custom-page}/src/services/XrmApiService.ts +0 -0
  208. /package/templates/{dynamics-365-starter → react-custom-page}/src/styles/index.css +0 -0
  209. /package/templates/{dynamics-365-starter → react-custom-page}/tsconfig.json +0 -0
  210. /package/templates/{dynamics-365-starter → react-custom-page}/webpack.config.js +0 -0
@@ -1,234 +0,0 @@
1
- # Client Project Architecture Template
2
-
3
- This template provides a standardized structure for multi-client Dynamics 365 consulting projects.
4
-
5
- ## Directory Structure
6
-
7
- ```
8
- client-project/
9
- ├── config/
10
- │ ├── client.json # Client-specific configuration
11
- │ ├── environments/ # Environment configurations
12
- │ │ ├── dev.json
13
- │ │ ├── test.json
14
- │ │ └── prod.json
15
- │ └── deployment.json # Deployment settings
16
- ├── src/
17
- │ ├── branding/ # Client-specific branding
18
- │ │ ├── theme.ts # Theme customization
19
- │ │ ├── logos/ # Client logos and assets
20
- │ │ └── styles.css # Client-specific styles
21
- │ ├── entities/ # Client entity definitions
22
- │ │ ├── custom/ # Custom entities
23
- │ │ └── extensions/ # Standard entity extensions
24
- │ ├── workflows/ # Business logic workflows
25
- │ ├── integrations/ # External system integrations
26
- │ └── reports/ # Custom reports and dashboards
27
- ├── deployment/
28
- │ ├── scripts/ # Deployment automation
29
- │ ├── solutions/ # Dynamics 365 solutions
30
- │ └── documentation/ # Deployment guides
31
- └── docs/
32
- ├── client-requirements.md # Client-specific requirements
33
- ├── technical-specifications.md
34
- └── user-guides/
35
- ```
36
-
37
- ## Configuration Files
38
-
39
- ### client.json
40
- ```json
41
- {
42
- "name": "Client Name",
43
- "code": "CLI",
44
- "industry": "Manufacturing",
45
- "timezone": "America/New_York",
46
- "locale": "en-US",
47
- "branding": {
48
- "primaryColor": "#0078d4",
49
- "secondaryColor": "#106ebe",
50
- "logoPath": "src/branding/logos/client-logo.png"
51
- },
52
- "features": {
53
- "enableAdvancedLogging": true,
54
- "enableCustomWorkflows": true,
55
- "enableReporting": true
56
- }
57
- }
58
- ```
59
-
60
- ### environments/prod.json
61
- ```json
62
- {
63
- "name": "Production",
64
- "dynamics365Url": "https://client.crm.dynamics.com",
65
- "webApiUrl": "https://client.api.crm.dynamics.com/api/data/v9.2",
66
- "tenantId": "client-tenant-id",
67
- "clientId": "client-app-id",
68
- "security": {
69
- "enableAuditLogging": true,
70
- "requireMFA": true,
71
- "sessionTimeout": 480
72
- },
73
- "performance": {
74
- "enableCaching": true,
75
- "batchSize": 100,
76
- "timeoutMs": 30000
77
- }
78
- }
79
- ```
80
-
81
- ## Usage
82
-
83
- 1. **Initialize Client Project**:
84
- ```bash
85
- create-dynamics-app my-client-project --client-name "ACME Corp" --entities "opportunity,quote,invoice"
86
- ```
87
-
88
- 2. **Configure Client Settings**:
89
- - Update `config/client.json` with client details
90
- - Customize branding in `src/branding/`
91
- - Configure environments in `config/environments/`
92
-
93
- 3. **Generate Custom Entities**:
94
- ```bash
95
- npm run generate:entity -- --entity customopportunity --display-name "Custom Opportunity"
96
- ```
97
-
98
- 4. **Deploy to Environment**:
99
- ```bash
100
- npm run deploy:prod
101
- ```
102
-
103
- ## Best Practices
104
-
105
- ### Multi-Tenant Considerations
106
- - Use environment-specific configurations
107
- - Implement client-specific theming
108
- - Maintain separate deployment pipelines
109
- - Use feature flags for client-specific functionality
110
-
111
- ### Security
112
- - Store sensitive configuration in Azure Key Vault
113
- - Use managed identities for authentication
114
- - Implement proper access controls
115
- - Enable audit logging
116
-
117
- ### Development Workflow
118
- 1. Create feature branch for client customization
119
- 2. Implement and test changes
120
- 3. Run quality checks: `npm run quality`
121
- 4. Deploy to test environment
122
- 5. Get client approval
123
- 6. Deploy to production
124
-
125
- ### Code Organization
126
- - Keep client-specific code in dedicated directories
127
- - Use dependency injection for client configurations
128
- - Implement factory patterns for environment-specific services
129
- - Document all customizations
130
-
131
- ## Deployment
132
-
133
- ### Automated Deployment
134
- The template includes scripts for automated deployment:
135
-
136
- ```bash
137
- # Deploy to specific environment
138
- ./scripts/deploy.sh dev
139
- ./scripts/deploy.sh test
140
- ./scripts/deploy.sh prod
141
-
142
- # Deploy with client validation
143
- ./scripts/deploy-client.sh --client ACME --env prod
144
- ```
145
-
146
- ### Manual Deployment Checklist
147
- - [ ] Update client configuration
148
- - [ ] Build and test locally
149
- - [ ] Deploy to test environment
150
- - [ ] Run smoke tests
151
- - [ ] Get client sign-off
152
- - [ ] Deploy to production
153
- - [ ] Verify deployment
154
- - [ ] Update documentation
155
-
156
- ## Customization Examples
157
-
158
- ### Client Theming
159
- ```typescript
160
- // src/branding/theme.ts
161
- export const clientTheme = {
162
- palette: {
163
- themePrimary: '#0078d4',
164
- themeSecondary: '#106ebe',
165
- neutralPrimary: '#323130'
166
- },
167
- fonts: {
168
- medium: {
169
- fontFamily: 'Client Corporate Font, Segoe UI, sans-serif'
170
- }
171
- }
172
- };
173
- ```
174
-
175
- ### Custom Entity Extensions
176
- ```typescript
177
- // src/entities/extensions/OpportunityExtensions.ts
178
- export class ClientOpportunity extends Opportunity {
179
- public customField1: string = '';
180
- public customField2: number = 0;
181
-
182
- public validateClientSpecificRules(): ValidationResult {
183
- // Client-specific validation logic
184
- }
185
- }
186
- ```
187
-
188
- ### Environment-Specific Services
189
- ```typescript
190
- // src/services/ClientServiceFactory.ts
191
- export class ClientServiceFactory {
192
- public static createApiService(environment: string): IApiService {
193
- const config = getEnvironmentConfig(environment);
194
-
195
- if (config.enableMockServices) {
196
- return new MockApiService();
197
- } else {
198
- return new XrmApiService(config);
199
- }
200
- }
201
- }
202
- ```
203
-
204
- ## Maintenance
205
-
206
- ### Regular Tasks
207
- - Update client configurations as requirements change
208
- - Monitor deployment success rates
209
- - Review and update documentation
210
- - Conduct security audits
211
- - Performance monitoring and optimization
212
-
213
- ### Upgrade Path
214
- 1. Test new framework versions in dev environment
215
- 2. Update client projects incrementally
216
- 3. Maintain backward compatibility
217
- 4. Document breaking changes
218
- 5. Coordinate client upgrade schedules
219
-
220
- ## Support
221
-
222
- For client project support:
223
- 1. Check project documentation in `docs/`
224
- 2. Review deployment logs
225
- 3. Contact development team with client context
226
- 4. Escalate to client success team if needed
227
-
228
- ## Templates Available
229
-
230
- - **Standard CRM**: Contact, Account, Opportunity management
231
- - **Sales Pipeline**: Quote, Order, Invoice workflow
232
- - **Service Management**: Case, Knowledge base, SLA tracking
233
- - **Project Management**: Project, Task, Resource allocation
234
- - **Custom Industry**: Tailored for specific industry needs
@@ -1,114 +0,0 @@
1
- {
2
- "name": "{{clientName}}",
3
- "code": "{{clientCode}}",
4
- "industry": "{{industry}}",
5
- "timezone": "{{timezone}}",
6
- "locale": "{{locale}}",
7
- "version": "1.0.0",
8
- "created": "{{currentDate}}",
9
- "lastUpdated": "{{currentDate}}",
10
- "contact": {
11
- "primaryContact": "{{primaryContact}}",
12
- "email": "{{contactEmail}}",
13
- "phone": "{{contactPhone}}"
14
- },
15
- "branding": {
16
- "primaryColor": "{{primaryColor}}",
17
- "secondaryColor": "{{secondaryColor}}",
18
- "accentColor": "{{accentColor}}",
19
- "logoPath": "src/branding/logos/{{clientCode}}-logo.png",
20
- "faviconPath": "src/branding/logos/{{clientCode}}-favicon.ico",
21
- "fontFamily": "{{fontFamily}}",
22
- "customCss": "src/branding/{{clientCode}}-custom.css"
23
- },
24
- "features": {
25
- "enableAdvancedLogging": true,
26
- "enableCustomWorkflows": true,
27
- "enableReporting": true,
28
- "enableMobileOptimization": true,
29
- "enableOfflineCapability": false,
30
- "enableMultiLanguage": false,
31
- "enableCustomDashboards": true,
32
- "enableDataExport": true,
33
- "enableBulkOperations": true,
34
- "enableAdvancedSecurity": true
35
- },
36
- "customEntities": [
37
- {{#each customEntities}}
38
- {
39
- "name": "{{name}}",
40
- "displayName": "{{displayName}}",
41
- "description": "{{description}}",
42
- "enabled": true
43
- }{{#unless @last}},{{/unless}}
44
- {{/each}}
45
- ],
46
- "integrations": {
47
- "sharepoint": {
48
- "enabled": false,
49
- "siteUrl": ""
50
- },
51
- "teams": {
52
- "enabled": false,
53
- "appId": ""
54
- },
55
- "powerBI": {
56
- "enabled": false,
57
- "workspaceId": ""
58
- },
59
- "powerAutomate": {
60
- "enabled": true
61
- },
62
- "externalAPIs": [
63
- {{#each externalAPIs}}
64
- {
65
- "name": "{{name}}",
66
- "endpoint": "{{endpoint}}",
67
- "authType": "{{authType}}",
68
- "enabled": {{enabled}}
69
- }{{#unless @last}},{{/unless}}
70
- {{/each}}
71
- ]
72
- },
73
- "compliance": {
74
- "gdprCompliant": true,
75
- "hipaaCompliant": false,
76
- "soxCompliant": false,
77
- "auditRetentionDays": 365,
78
- "dataClassification": "Internal"
79
- },
80
- "deployment": {
81
- "strategy": "blue-green",
82
- "rollbackEnabled": true,
83
- "approvalRequired": true,
84
- "notificationEmail": "{{contactEmail}}",
85
- "maintenanceWindow": {
86
- "timezone": "{{timezone}}",
87
- "startTime": "02:00",
88
- "duration": 120
89
- }
90
- },
91
- "support": {
92
- "level": "Enterprise",
93
- "hours": "24/7",
94
- "escalationEmail": "{{supportEmail}}",
95
- "slaTier": "Gold"
96
- },
97
- "customizations": {
98
- "entities": {
99
- "naming": "{{clientCode}}_",
100
- "prefix": "{{clientCode}}",
101
- "suffix": ""
102
- },
103
- "workflows": {
104
- "customValidation": true,
105
- "customBusinessLogic": true,
106
- "customIntegrations": true
107
- },
108
- "ui": {
109
- "customTheme": true,
110
- "customComponents": true,
111
- "customLayouts": true
112
- }
113
- }
114
- }
@@ -1,186 +0,0 @@
1
- {
2
- "name": "{{environmentName}}",
3
- "type": "{{environmentType}}",
4
- "description": "{{environmentDescription}}",
5
- "lastUpdated": "{{currentDate}}",
6
- "dynamics365": {
7
- "orgUrl": "{{orgUrl}}",
8
- "webApiUrl": "{{webApiUrl}}",
9
- "version": "9.2",
10
- "region": "{{region}}",
11
- "tenantId": "{{tenantId}}",
12
- "dataverse": {
13
- "environmentId": "{{environmentId}}",
14
- "uniqueName": "{{uniqueName}}"
15
- }
16
- },
17
- "authentication": {
18
- "type": "{{authType}}",
19
- "clientId": "{{clientId}}",
20
- "clientSecret": "{{clientSecret}}",
21
- "redirectUri": "{{redirectUri}}",
22
- "scopes": [
23
- "https://{{orgDomain}}.crm.dynamics.com/user_impersonation"
24
- ],
25
- "authority": "https://login.microsoftonline.com/{{tenantId}}"
26
- },
27
- "security": {
28
- "enableAuditLogging": true,
29
- "requireMFA": "{{requireMFA}}",
30
- "sessionTimeout": {{sessionTimeout}},
31
- "enableConditionalAccess": true,
32
- "allowedIPs": [
33
- {{#each allowedIPs}}
34
- "{{this}}"{{#unless @last}},{{/unless}}
35
- {{/each}}
36
- ],
37
- "dataLossPreventionEnabled": true,
38
- "encryptionAtRest": true,
39
- "encryptionInTransit": true
40
- },
41
- "performance": {
42
- "enableCaching": {{enableCaching}},
43
- "cacheTimeout": {{cacheTimeout}},
44
- "batchSize": {{batchSize}},
45
- "timeoutMs": {{timeoutMs}},
46
- "retryAttempts": {{retryAttempts}},
47
- "retryDelayMs": {{retryDelayMs}},
48
- "enableCompression": true,
49
- "enableCDN": {{enableCDN}}
50
- },
51
- "monitoring": {
52
- "enableApplicationInsights": true,
53
- "instrumentationKey": "{{instrumentationKey}}",
54
- "logLevel": "{{logLevel}}",
55
- "enableMetrics": true,
56
- "enableTracing": true,
57
- "enableProfiling": false,
58
- "alertRules": [
59
- {
60
- "name": "High Error Rate",
61
- "condition": "exceptions/hour > 10",
62
- "severity": "Critical",
63
- "enabled": true
64
- },
65
- {
66
- "name": "Slow Response Time",
67
- "condition": "avg(requests/duration) > 5000",
68
- "severity": "Warning",
69
- "enabled": true
70
- }
71
- ]
72
- },
73
- "backup": {
74
- "enabled": {{backupEnabled}},
75
- "frequency": "{{backupFrequency}}",
76
- "retentionDays": {{backupRetentionDays}},
77
- "storageAccount": "{{backupStorageAccount}}",
78
- "enablePointInTimeRestore": {{enablePointInTimeRestore}}
79
- },
80
- "networking": {
81
- "enableVNet": {{enableVNet}},
82
- "subnetId": "{{subnetId}}",
83
- "enablePrivateEndpoint": {{enablePrivateEndpoint}},
84
- "enableServiceEndpoint": {{enableServiceEndpoint}},
85
- "firewallRules": [
86
- {{#each firewallRules}}
87
- {
88
- "name": "{{name}}",
89
- "startIP": "{{startIP}}",
90
- "endIP": "{{endIP}}",
91
- "enabled": {{enabled}}
92
- }{{#unless @last}},{{/unless}}
93
- {{/each}}
94
- ]
95
- },
96
- "deployment": {
97
- "strategy": "{{deploymentStrategy}}",
98
- "slots": [
99
- {{#each deploymentSlots}}
100
- {
101
- "name": "{{name}}",
102
- "enabled": {{enabled}},
103
- "percentage": {{percentage}}
104
- }{{#unless @last}},{{/unless}}
105
- {{/each}}
106
- ],
107
- "rollbackEnabled": {{rollbackEnabled}},
108
- "healthCheckUrl": "{{healthCheckUrl}}",
109
- "warmupEnabled": {{warmupEnabled}},
110
- "preDeploymentSteps": [
111
- {{#each preDeploymentSteps}}
112
- "{{this}}"{{#unless @last}},{{/unless}}
113
- {{/each}}
114
- ],
115
- "postDeploymentSteps": [
116
- {{#each postDeploymentSteps}}
117
- "{{this}}"{{#unless @last}},{{/unless}}
118
- {{/each}}
119
- ]
120
- },
121
- "integrations": {
122
- "keyVault": {
123
- "enabled": {{keyVaultEnabled}},
124
- "vaultUrl": "{{keyVaultUrl}}",
125
- "secrets": [
126
- {{#each keyVaultSecrets}}
127
- "{{this}}"{{#unless @last}},{{/unless}}
128
- {{/each}}
129
- ]
130
- },
131
- "servicebus": {
132
- "enabled": {{serviceBusEnabled}},
133
- "connectionString": "{{serviceBusConnectionString}}",
134
- "queues": [
135
- {{#each serviceBusQueues}}
136
- "{{this}}"{{#unless @last}},{{/unless}}
137
- {{/each}}
138
- ]
139
- },
140
- "storage": {
141
- "enabled": {{storageEnabled}},
142
- "accountName": "{{storageAccountName}}",
143
- "containerName": "{{storageContainerName}}",
144
- "enableStaticWebsite": {{enableStaticWebsite}}
145
- }
146
- },
147
- "customSettings": {
148
- {{#each customSettings}}
149
- "{{@key}}": "{{this}}"{{#unless @last}},{{/unless}}
150
- {{/each}}
151
- },
152
- "featureFlags": {
153
- {{#each featureFlags}}
154
- "{{@key}}": {{this}}{{#unless @last}},{{/unless}}
155
- {{/each}}
156
- },
157
- "notifications": {
158
- "deploymentSuccess": {
159
- "enabled": true,
160
- "channels": ["email", "teams"],
161
- "recipients": [
162
- {{#each notificationRecipients}}
163
- "{{this}}"{{#unless @last}},{{/unless}}
164
- {{/each}}
165
- ]
166
- },
167
- "deploymentFailure": {
168
- "enabled": true,
169
- "channels": ["email", "teams", "sms"],
170
- "recipients": [
171
- {{#each notificationRecipients}}
172
- "{{this}}"{{#unless @last}},{{/unless}}
173
- {{/each}}
174
- ]
175
- },
176
- "healthCheckFailure": {
177
- "enabled": true,
178
- "channels": ["email", "teams"],
179
- "recipients": [
180
- {{#each notificationRecipients}}
181
- "{{this}}"{{#unless @last}},{{/unless}}
182
- {{/each}}
183
- ]
184
- }
185
- }
186
- }