devendra-skill-package 1.0.2

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 (223) hide show
  1. package/.github/skills/boiler-project-generator/SKILL.md +103 -0
  2. package/.github/skills/boiler-project-generator/assets/templates/android/README.md +3 -0
  3. package/.github/skills/boiler-project-generator/assets/templates/angular/README.md +3 -0
  4. package/.github/skills/boiler-project-generator/assets/templates/flutter/README.md +3 -0
  5. package/.github/skills/boiler-project-generator/assets/templates/ios/README.md +3 -0
  6. package/.github/skills/boiler-project-generator/assets/templates/react/README.md +3 -0
  7. package/.github/skills/boiler-project-generator/assets/templates/react-native/README.md +3 -0
  8. package/.github/skills/boiler-project-generator/assets/templates/react-native/api-setup.ts +76 -0
  9. package/.github/skills/boiler-project-generator/assets/templates/react-native/component-primary-button.tsx +29 -0
  10. package/.github/skills/boiler-project-generator/assets/templates/react-native/env-config.env +4 -0
  11. package/.github/skills/boiler-project-generator/assets/templates/react-native/feature-auth-screen.tsx +45 -0
  12. package/.github/skills/boiler-project-generator/assets/templates/react-native/feature-dashboard-screen.tsx +45 -0
  13. package/.github/skills/boiler-project-generator/assets/templates/react-native/feature-profile-screen.tsx +45 -0
  14. package/.github/skills/boiler-project-generator/assets/templates/react-native/hook-use-app-boot.ts +11 -0
  15. package/.github/skills/boiler-project-generator/assets/templates/react-native/navigation-setup.tsx +25 -0
  16. package/.github/skills/boiler-project-generator/assets/templates/react-native/project-structure.md +24 -0
  17. package/.github/skills/boiler-project-generator/assets/templates/react-native/redux-hooks.ts +5 -0
  18. package/.github/skills/boiler-project-generator/assets/templates/react-native/redux-session-slice.ts +29 -0
  19. package/.github/skills/boiler-project-generator/assets/templates/react-native/redux-store.ts +15 -0
  20. package/.github/skills/boiler-project-generator/assets/templates/react-native/theme-index.ts +23 -0
  21. package/.github/skills/boiler-project-generator/assets/templates/react-native/utils-helpers.ts +7 -0
  22. package/.github/skills/boiler-project-generator/metadata.yaml +29 -0
  23. package/.github/skills/boiler-project-generator/references/android.md +19 -0
  24. package/.github/skills/boiler-project-generator/references/angular.md +14 -0
  25. package/.github/skills/boiler-project-generator/references/flutter.md +17 -0
  26. package/.github/skills/boiler-project-generator/references/ios.md +17 -0
  27. package/.github/skills/boiler-project-generator/references/react-native.md +103 -0
  28. package/.github/skills/boiler-project-generator/references/react.md +17 -0
  29. package/.github/skills/boiler-project-generator/scripts/angular.js +43 -0
  30. package/.github/skills/boiler-project-generator/scripts/generate-project.mjs +107 -0
  31. package/.github/skills/boiler-project-generator/scripts/init.js +105 -0
  32. package/.github/skills/boiler-project-generator/scripts/react-native.js +1041 -0
  33. package/.github/skills/boiler-project-generator/scripts/react.js +32 -0
  34. package/.github/skills/clean-architecture-generator/SKILL.md +235 -0
  35. package/.github/skills/clean-architecture-generator/references/architecture-core.md +126 -0
  36. package/.github/skills/clean-architecture-generator/references/platform-angular.md +374 -0
  37. package/.github/skills/clean-architecture-generator/references/platform-flutter.md +366 -0
  38. package/.github/skills/clean-architecture-generator/references/platform-react-native.md +590 -0
  39. package/.github/skills/clean-architecture-generator/references/platform-react.md +261 -0
  40. package/.github/skills/code-test-coverage-analyzer/SKILL.md +1358 -0
  41. package/.github/skills/code-test-coverage-analyzer/assets/config-questionnaire.md +118 -0
  42. package/.github/skills/code-test-coverage-analyzer/assets/conflict-resolution-protocol.md +99 -0
  43. package/.github/skills/code-test-coverage-analyzer/assets/coverage-calculation-rules.md +294 -0
  44. package/.github/skills/code-test-coverage-analyzer/assets/multi-strategy-search.md +145 -0
  45. package/.github/skills/code-test-coverage-analyzer/assets/output-file-contracts.md +651 -0
  46. package/.github/skills/code-test-coverage-analyzer/assets/status-definitions.md +273 -0
  47. package/.github/skills/code-test-coverage-analyzer/examples/example-invocation.md +208 -0
  48. package/.github/skills/code-test-coverage-analyzer/references/android-patterns.md +229 -0
  49. package/.github/skills/code-test-coverage-analyzer/references/angular-patterns.md +177 -0
  50. package/.github/skills/code-test-coverage-analyzer/references/backend-patterns.md +383 -0
  51. package/.github/skills/code-test-coverage-analyzer/references/flutter-patterns.md +254 -0
  52. package/.github/skills/code-test-coverage-analyzer/references/ios-patterns.md +228 -0
  53. package/.github/skills/code-test-coverage-analyzer/references/react-native-patterns.md +431 -0
  54. package/.github/skills/code-test-coverage-analyzer/references/react-patterns.md +206 -0
  55. package/.github/skills/code-test-coverage-analyzer/scripts/detect-platform.ps1 +261 -0
  56. package/.github/skills/code-test-coverage-analyzer/scripts/scan-repository.ps1 +242 -0
  57. package/.github/skills/code-test-coverage-analyzer/templates/brd-compliance-row.md +107 -0
  58. package/.github/skills/code-test-coverage-analyzer/templates/test-case-row.md +130 -0
  59. package/.github/skills/code-test-coverage-analyzer/templates/user-story-compliance-row.md +170 -0
  60. package/.github/skills/custom-font-integrator/SKILL.md +373 -0
  61. package/.github/skills/custom-font-integrator/assets/FontTestScreen.js +150 -0
  62. package/.github/skills/custom-font-integrator/references/example-info-plist.xml +21 -0
  63. package/.github/skills/custom-font-integrator/scripts/setup-fonts.sh +99 -0
  64. package/.github/skills/encryption-decryption-utility/Instructions.md +282 -0
  65. package/.github/skills/encryption-decryption-utility/README.md +222 -0
  66. package/.github/skills/encryption-decryption-utility/SKILL.md +645 -0
  67. package/.github/skills/encryption-decryption-utility/assets/encryption-config-template.json +13 -0
  68. package/.github/skills/encryption-decryption-utility/assets/platform-matrix.json +180 -0
  69. package/.github/skills/encryption-decryption-utility/metadata.yaml +51 -0
  70. package/.github/skills/encryption-decryption-utility/references/android-crypto.md +157 -0
  71. package/.github/skills/encryption-decryption-utility/references/angular-crypto.md +130 -0
  72. package/.github/skills/encryption-decryption-utility/references/approach-1-webcrypto.md +95 -0
  73. package/.github/skills/encryption-decryption-utility/references/approach-2-rsa-aes-cbc.md +111 -0
  74. package/.github/skills/encryption-decryption-utility/references/approach-3-aes-sharedkey.md +114 -0
  75. package/.github/skills/encryption-decryption-utility/references/architecture.md +233 -0
  76. package/.github/skills/encryption-decryption-utility/references/backend-alignment.md +506 -0
  77. package/.github/skills/encryption-decryption-utility/references/dependency-guidance.md +234 -0
  78. package/.github/skills/encryption-decryption-utility/references/ec-implementation.md +832 -0
  79. package/.github/skills/encryption-decryption-utility/references/error-handling-playbook.md +234 -0
  80. package/.github/skills/encryption-decryption-utility/references/flutter-crypto.md +105 -0
  81. package/.github/skills/encryption-decryption-utility/references/ios-crypto.md +338 -0
  82. package/.github/skills/encryption-decryption-utility/references/native-rsa-implementation.md +373 -0
  83. package/.github/skills/encryption-decryption-utility/references/node-crypto.md +86 -0
  84. package/.github/skills/encryption-decryption-utility/references/react-crypto.md +105 -0
  85. package/.github/skills/encryption-decryption-utility/references/react-native-crypto.md +1001 -0
  86. package/.github/skills/encryption-decryption-utility/references/react-web-crypto.md +668 -0
  87. package/.github/skills/encryption-decryption-utility/references/security-checklist.md +176 -0
  88. package/.github/skills/encryption-decryption-utility/references/web-crypto.md +74 -0
  89. package/.github/skills/encryption-decryption-utility/scripts/detect.js +128 -0
  90. package/.github/skills/encryption-decryption-utility/scripts/install.js +1713 -0
  91. package/.github/skills/encryption-decryption-utility/scripts/setup.js +800 -0
  92. package/.github/skills/encryption-decryption-utility/template.md +241 -0
  93. package/.github/skills/encryption-decryption-utility/templates/config-questionnaire.md +467 -0
  94. package/.github/skills/encryption-decryption-utility/templates/delivery-checklist.md +206 -0
  95. package/.github/skills/encryption-decryption-utility/templates/implementation-plan.md +304 -0
  96. package/.github/skills/feature-generator/SKILL.MD +2741 -0
  97. package/.github/skills/feature-generator/assets/fingerprint-schema.json +385 -0
  98. package/.github/skills/feature-generator/assets/spec-template.md +172 -0
  99. package/.github/skills/feature-generator/assets/transform-rules.json +82 -0
  100. package/.github/skills/feature-generator/references/api-envelope-patterns.md +327 -0
  101. package/.github/skills/feature-generator/references/screen-logic-patterns.md +399 -0
  102. package/.github/skills/feature-generator/references/state-library-patterns.md +464 -0
  103. package/.github/skills/figma-ui-mapper/README.md +34 -0
  104. package/.github/skills/figma-ui-mapper/SKILL.md +101 -0
  105. package/.github/skills/figma-ui-mapper/assets/templates/component-map-template.md +30 -0
  106. package/.github/skills/figma-ui-mapper/assets/templates/generation-report-template.md +49 -0
  107. package/.github/skills/figma-ui-mapper/metadata.yaml +22 -0
  108. package/.github/skills/figma-ui-mapper/references/android.md +11 -0
  109. package/.github/skills/figma-ui-mapper/references/angular.md +18 -0
  110. package/.github/skills/figma-ui-mapper/references/capacitor.md +18 -0
  111. package/.github/skills/figma-ui-mapper/references/common.md +23 -0
  112. package/.github/skills/figma-ui-mapper/references/expo.md +18 -0
  113. package/.github/skills/figma-ui-mapper/references/flutter.md +18 -0
  114. package/.github/skills/figma-ui-mapper/references/frameworks/angular/rules.md +23 -0
  115. package/.github/skills/figma-ui-mapper/references/frameworks/capacitor/rules.md +23 -0
  116. package/.github/skills/figma-ui-mapper/references/frameworks/expo/rules.md +23 -0
  117. package/.github/skills/figma-ui-mapper/references/frameworks/flutter/rules.md +23 -0
  118. package/.github/skills/figma-ui-mapper/references/frameworks/ionic/rules.md +23 -0
  119. package/.github/skills/figma-ui-mapper/references/frameworks/kotlin-multiplatform/rules.md +23 -0
  120. package/.github/skills/figma-ui-mapper/references/frameworks/native-android/rules.md +23 -0
  121. package/.github/skills/figma-ui-mapper/references/frameworks/native-ios/rules.md +23 -0
  122. package/.github/skills/figma-ui-mapper/references/frameworks/next/rules.md +23 -0
  123. package/.github/skills/figma-ui-mapper/references/frameworks/nuxt/rules.md +23 -0
  124. package/.github/skills/figma-ui-mapper/references/frameworks/react/rules.md +19 -0
  125. package/.github/skills/figma-ui-mapper/references/frameworks/react-native/rules.md +23 -0
  126. package/.github/skills/figma-ui-mapper/references/frameworks/svelte/rules.md +23 -0
  127. package/.github/skills/figma-ui-mapper/references/frameworks/vue/rules.md +23 -0
  128. package/.github/skills/figma-ui-mapper/references/ionic.md +18 -0
  129. package/.github/skills/figma-ui-mapper/references/ios.md +11 -0
  130. package/.github/skills/figma-ui-mapper/references/kotlin-multiplatform.md +18 -0
  131. package/.github/skills/figma-ui-mapper/references/native-android.md +18 -0
  132. package/.github/skills/figma-ui-mapper/references/native-ios.md +18 -0
  133. package/.github/skills/figma-ui-mapper/references/next.md +18 -0
  134. package/.github/skills/figma-ui-mapper/references/nuxt.md +18 -0
  135. package/.github/skills/figma-ui-mapper/references/react-figma-guideline.md +21 -0
  136. package/.github/skills/figma-ui-mapper/references/react-native.md +18 -0
  137. package/.github/skills/figma-ui-mapper/references/react.md +18 -0
  138. package/.github/skills/figma-ui-mapper/references/script-usage.md +46 -0
  139. package/.github/skills/figma-ui-mapper/references/svelte.md +18 -0
  140. package/.github/skills/figma-ui-mapper/references/vue.md +18 -0
  141. package/.github/skills/figma-ui-mapper/references/workflow.md +74 -0
  142. package/.github/skills/figma-ui-mapper/scripts/generate-page-through-figma.js +635 -0
  143. package/.github/skills/figma-ui-mapper/scripts/generate-react-page-through-figma.js +4 -0
  144. package/.github/skills/frontend-task-breakdown/SKILL.md +734 -0
  145. package/.github/skills/md-file-converter/SKILL.md +291 -0
  146. package/.github/skills/md-file-converter/config/formats.json +114 -0
  147. package/.github/skills/md-file-converter/extractors/extract-docx.sh +120 -0
  148. package/.github/skills/md-file-converter/extractors/extract-eml.py +108 -0
  149. package/.github/skills/md-file-converter/extractors/extract-pdf.sh +97 -0
  150. package/.github/skills/md-file-converter/extractors/extract-pptx.py +143 -0
  151. package/.github/skills/md-file-converter/extractors/extract-xlsx.py +175 -0
  152. package/.github/skills/md-file-converter/scripts/check-tools.sh +47 -0
  153. package/.github/skills/md-file-converter/scripts/extract-archive.sh +83 -0
  154. package/.github/skills/md-file-converter/scripts/extract-ocr.sh +77 -0
  155. package/.github/skills/md-file-converter/scripts/get-metadata.sh +57 -0
  156. package/.github/skills/md-file-converter/templates/output.md +73 -0
  157. package/.github/skills/md-file-converter/templates/unsupported-object.md +6 -0
  158. package/.github/skills/mockAPI-contract-generator/SKILL.md +607 -0
  159. package/.github/skills/test-case-validator/CHANGELOG.md +155 -0
  160. package/.github/skills/test-case-validator/CONFIGURATION.md +130 -0
  161. package/.github/skills/test-case-validator/EXAMPLES.md +50 -0
  162. package/.github/skills/test-case-validator/QUALITY_SCORING.md +98 -0
  163. package/.github/skills/test-case-validator/README.md +111 -0
  164. package/.github/skills/test-case-validator/REPORT_TEMPLATE.md +116 -0
  165. package/.github/skills/test-case-validator/SKILL.md +209 -0
  166. package/.github/skills/test-case-validator/SYSTEM_PROMPT.md +127 -0
  167. package/.github/skills/test-case-validator/TRACEABILITY_ENGINE.md +152 -0
  168. package/.github/skills/test-case-validator/VALIDATION_RULES.md +411 -0
  169. package/.github/skills/test-case-validator/config/default.config.yaml +62 -0
  170. package/.github/skills/test-case-validator/docs/ARCHITECTURE.md +66 -0
  171. package/.github/skills/test-case-validator/docs/EXTENDING.md +85 -0
  172. package/.github/skills/test-case-validator/docs/FAQ.md +88 -0
  173. package/.github/skills/test-case-validator/docs/VERSIONING.md +55 -0
  174. package/.github/skills/test-case-validator/examples/example-1-manual-qa-ecommerce/input-brd.md +43 -0
  175. package/.github/skills/test-case-validator/examples/example-1-manual-qa-ecommerce/input-test-cases.csv +9 -0
  176. package/.github/skills/test-case-validator/examples/example-1-manual-qa-ecommerce/input-user-story.md +29 -0
  177. package/.github/skills/test-case-validator/examples/example-1-manual-qa-ecommerce/output-report.md +303 -0
  178. package/.github/skills/test-case-validator/examples/example-2-automated-frontend-suite/input-spec.md +43 -0
  179. package/.github/skills/test-case-validator/examples/example-2-automated-frontend-suite/input-test-files-index.md +56 -0
  180. package/.github/skills/test-case-validator/examples/example-2-automated-frontend-suite/output-report.md +274 -0
  181. package/.github/skills/test-case-validator/prompts/00-applicability-resolution.md +61 -0
  182. package/.github/skills/test-case-validator/prompts/01-extraction-user-story.md +58 -0
  183. package/.github/skills/test-case-validator/prompts/02-extraction-brd.md +64 -0
  184. package/.github/skills/test-case-validator/prompts/03-extraction-test-cases.md +92 -0
  185. package/.github/skills/test-case-validator/prompts/04-traceability-matrix.md +41 -0
  186. package/.github/skills/test-case-validator/prompts/05-coverage-analysis.md +46 -0
  187. package/.github/skills/test-case-validator/prompts/06-missing-scenario-detection.md +32 -0
  188. package/.github/skills/test-case-validator/prompts/07-duplicate-detection.md +36 -0
  189. package/.github/skills/test-case-validator/prompts/08-risk-analysis.md +39 -0
  190. package/.github/skills/test-case-validator/prompts/09-gated-wiring-validation.md +53 -0
  191. package/.github/skills/test-case-validator/prompts/10-observation-report.md +56 -0
  192. package/.github/skills/test-case-validator/prompts/11-final-report-assembly.md +57 -0
  193. package/.github/skills/test-case-validator/templates/coverage-table.md +25 -0
  194. package/.github/skills/test-case-validator/templates/executive-summary.md +38 -0
  195. package/.github/skills/test-case-validator/templates/final-summary-block.md +87 -0
  196. package/.github/skills/test-case-validator/templates/observation-entry.md +41 -0
  197. package/.github/skills/test-case-validator/templates/rtm-row.md +25 -0
  198. package/.github/skills/validation-engine-builder/README.md +50 -0
  199. package/.github/skills/validation-engine-builder/SKILL.md +241 -0
  200. package/.github/skills/validation-engine-builder/references/core.md +158 -0
  201. package/.github/skills/validation-engine-builder/references/platform-angular.md +166 -0
  202. package/.github/skills/validation-engine-builder/references/platform-flutter.md +118 -0
  203. package/.github/skills/validation-engine-builder/references/platform-react-native.md +170 -0
  204. package/.github/skills/validation-engine-builder/references/platform-react.md +94 -0
  205. package/.github/skills/validation-engine-builder/scripts/apply-to-project.js +80 -0
  206. package/.github/skills/validation-engine-builder/scripts/generate-angular.js +271 -0
  207. package/.github/skills/validation-engine-builder/scripts/generate-flutter.js +298 -0
  208. package/.github/skills/validation-engine-builder/scripts/generate-react-native.js +217 -0
  209. package/.github/skills/validation-engine-builder/scripts/generate-react.js +163 -0
  210. package/.github/skills/validation-engine-builder/scripts/install-deps.js +53 -0
  211. package/.github/skills/validation-engine-builder/scripts/shared/detect-platform.js +68 -0
  212. package/.github/skills/validation-engine-builder/scripts/shared/npm-deps.js +103 -0
  213. package/.github/skills/validation-engine-builder/scripts/shared/rhf-hook.js +43 -0
  214. package/.github/skills/validation-engine-builder/scripts/shared/ts-messages-regex.js +62 -0
  215. package/.github/skills/validation-engine-builder/scripts/shared/util.js +44 -0
  216. package/.github/skills/validation-engine-builder/scripts/shared/yup-schemas.js +80 -0
  217. package/.github/skills/validation-engine-builder/template.md +73 -0
  218. package/.github/skills/validation-engine-builder/templates/messages.json +22 -0
  219. package/.github/skills/validation-engine-builder/templates/regex.json +16 -0
  220. package/.github/skills/validation-engine-builder/templates/schemas.json +48 -0
  221. package/bin/index.js +145 -0
  222. package/package.json +22 -0
  223. package/readme.md +0 -0
@@ -0,0 +1,327 @@
1
+ # API Envelope Patterns Reference
2
+
3
+ Used by Phase 4.6 of feature-generator to generate the DataSource class body.
4
+ Select the pattern that matches `fingerprint.apiLib` + `fingerprint.envelopeStyle`.
5
+
6
+ ---
7
+
8
+ ## Pattern 1 — Axios + mb-operationId envelope
9
+
10
+ **When**: `fingerprint.apiLib = "axios"` AND `fingerprint.envelopeStyle = "mb-operationId"`
11
+
12
+ This is the most common pattern in this repository. The request body is wrapped in a
13
+ `mb.rq.reqdata` envelope with an `operationId` field. The response is unwrapped from
14
+ `mb.rs.resdata` by the shared Axios response interceptor before it reaches the datasource.
15
+
16
+ ### DataSource template
17
+
18
+ ```typescript
19
+ import { apiClient } from '<fingerprint.apiClientImport>';
20
+ import { <endpointConstantName>_ENDPOINTS } from './<screenName>Endpoints'; // screenName, not featureFolderName
21
+ import { mockConfig } from './mockConfig';
22
+ import type { Fetch<ScreenName>Params } from '<relative-path-to-domainRepo>';
23
+ import mockData from '<relative-path-to-mockJson>';
24
+
25
+ function delay(ms: number): Promise<void> {
26
+ return new Promise((resolve) => setTimeout(resolve, ms));
27
+ }
28
+
29
+ function buildEnvelope(operationId: string, reqdata: Record<string, unknown>): object {
30
+ return { mb: { operationId, rq: { reqdata } } };
31
+ }
32
+
33
+ export class <ScreenName>ApiDataSource {
34
+ async fetch<ScreenName>(params: Fetch<ScreenName>Params): Promise<Record<string, unknown>> {
35
+ const { <OperationId> } = mockConfig.apis;
36
+ if (mockConfig.<fingerprint.mockGlobalFlag> || <OperationId>.mockEnabled) {
37
+ await delay(mockConfig.<fingerprint.mockDelayField>);
38
+ return mockData as Record<string, unknown>;
39
+ }
40
+ const body = buildEnvelope('<OperationId>', {
41
+ // Map camelCase params to API-casing from spec requestBody
42
+ ApiField: params.camelCaseParam,
43
+ });
44
+ const response = await apiClient.post<Record<string, unknown>>(
45
+ <endpointConstantName>_ENDPOINTS.FETCH,
46
+ body,
47
+ );
48
+ return response.data;
49
+ }
50
+ }
51
+ ```
52
+
53
+ ### Endpoint constant template
54
+
55
+ ```typescript
56
+ // Base URL is set in the shared apiClient. Path must NOT start with '/'.
57
+ export const <endpointConstantName>_ENDPOINTS = {
58
+ FETCH: 'api/v1/<service-path>/<OperationId>',
59
+ } as const;
60
+ ```
61
+
62
+ ### Notes
63
+
64
+ - The `buildEnvelope` function MUST use the exact field names detected in existing
65
+ datasource files. If the existing code uses `operationid` (lowercase i), use that.
66
+ - `response.data` is already the unwrapped `resdata` payload after the interceptor runs.
67
+ - `globalMockEnabled` check MUST appear BEFORE the per-API `mockEnabled` check.
68
+
69
+ ---
70
+
71
+ ## Pattern 2 — Axios + mb-operationid-lowercase envelope
72
+
73
+ **When**: `fingerprint.apiLib = "axios"` AND `fingerprint.envelopeStyle = "mb-operationid-lowercase"`
74
+
75
+ Some services use `operationid` (all lowercase) in the envelope AND include additional
76
+ fields such as `reqtoken`, `appinfo`, and `deviceinfo`. Detected by reading the
77
+ `buildEnvelope` helper (or inline envelope construction) in existing datasource files.
78
+
79
+ **Detection rule**: If the existing buildEnvelope contains `reqtoken` or `appinfo` or
80
+ `deviceinfo`, those fields MUST be included verbatim in the generated code. Do NOT
81
+ simplify or omit them — the server will reject requests with missing fields.
82
+
83
+ ### DataSource template
84
+
85
+ Same as Pattern 1 except the `buildEnvelope` function uses this shape:
86
+
87
+ ```typescript
88
+ function buildEnvelope(operationid: string, reqdata: Record<string, unknown>): object {
89
+ return {
90
+ mb: {
91
+ operationid, // lowercase 'i' — NOT operationId
92
+ reqtoken: null, // always null for client-originated requests
93
+ rq: {
94
+ appinfo: {
95
+ appId: 'APP_ID', // match exact key/value from detected file
96
+ appVersion: '1.0.0',
97
+ },
98
+ deviceinfo: {
99
+ deviceId: 'MOBILE-APP', // match exact value from detected file
100
+ deviceType: 'MOBILE',
101
+ },
102
+ reqdata,
103
+ },
104
+ },
105
+ };
106
+ }
107
+ ```
108
+
109
+ ### Important: always copy from detected source
110
+
111
+ After detection, open the file containing the existing `buildEnvelope` and copy its
112
+ entire function body. Do not reconstruct from memory. Differences in field names,
113
+ casing, or nesting will cause server-side validation failures.
114
+
115
+ If the envelope is inlined (not a helper function), find the `apiClient.post()` call
116
+ and copy the entire body literal.
117
+
118
+ ---
119
+
120
+ ## Pattern 3 — Axios + no envelope (plain body)
121
+
122
+ **When**: `fingerprint.apiLib = "axios"` AND `fingerprint.envelopeStyle = "none"`
123
+
124
+ The request body is passed directly without any wrapper.
125
+
126
+ ### DataSource template
127
+
128
+ ```typescript
129
+ import { apiClient } from '<fingerprint.apiClientImport>';
130
+ import { <endpointConstantName>_ENDPOINTS } from './<screenName>Endpoints'; // screenName, not featureFolderName
131
+ import { mockConfig } from './mockConfig';
132
+ import type { Fetch<ScreenName>Params } from '<relative-path-to-domainRepo>';
133
+ import mockData from '<relative-path-to-mockJson>';
134
+
135
+ function delay(ms: number): Promise<void> {
136
+ return new Promise((resolve) => setTimeout(resolve, ms));
137
+ }
138
+
139
+ export class <ScreenName>ApiDataSource {
140
+ async fetch<ScreenName>(params: Fetch<ScreenName>Params): Promise<Record<string, unknown>> {
141
+ const { <OperationId> } = mockConfig.apis;
142
+ if (mockConfig.<fingerprint.mockGlobalFlag> || <OperationId>.mockEnabled) {
143
+ await delay(mockConfig.<fingerprint.mockDelayField>);
144
+ return mockData as Record<string, unknown>;
145
+ }
146
+ const response = await apiClient.post<Record<string, unknown>>(
147
+ <endpointConstantName>_ENDPOINTS.FETCH,
148
+ {
149
+ // Flat request body — API field names from spec requestBody
150
+ ApiField: params.camelCaseParam,
151
+ },
152
+ );
153
+ return response.data;
154
+ }
155
+ }
156
+ ```
157
+
158
+ ---
159
+
160
+ ## Pattern 4 — Fetch API + no envelope
161
+
162
+ **When**: `fingerprint.apiLib = "fetch"` AND `fingerprint.envelopeStyle = "none"`
163
+
164
+ Uses the native `fetch()` API directly. No shared client file.
165
+
166
+ ### DataSource template
167
+
168
+ ```typescript
169
+ import type { Fetch<ScreenName>Params } from '<relative-path-to-domainRepo>';
170
+ import mockData from '<relative-path-to-mockJson>';
171
+
172
+ const BASE_URL = '<detected base URL from existing fetch calls>';
173
+
174
+ export class <ScreenName>ApiDataSource {
175
+ async fetch<ScreenName>(params: Fetch<ScreenName>Params): Promise<Record<string, unknown>> {
176
+ const response = await fetch(`${BASE_URL}/<spec.apiUrl>`, {
177
+ method: '<spec.httpMethod>',
178
+ headers: {
179
+ 'Content-Type': 'application/json',
180
+ // Add headers matching existing fetch calls in the codebase
181
+ },
182
+ body: JSON.stringify({
183
+ ApiField: params.camelCaseParam,
184
+ }),
185
+ });
186
+ if (!response.ok) {
187
+ throw { statusCode: response.status, message: `HTTP ${response.status}` };
188
+ }
189
+ return response.json() as Promise<Record<string, unknown>>;
190
+ }
191
+ }
192
+ ```
193
+
194
+ ### Notes
195
+
196
+ - Do NOT create a shared `fetch` wrapper if one does not already exist.
197
+ - Import any auth token injection from the detected token storage utility.
198
+ - For GET requests: omit `body`, append params as query string.
199
+
200
+ ---
201
+
202
+ ## Pattern 5 — RTK Query
203
+
204
+ **When**: `fingerprint.apiLib = "rtk-query"`
205
+
206
+ RTK Query uses endpoint definitions, not classes. Generate an endpoint injected into
207
+ the existing base API slice.
208
+
209
+ ### Endpoint template
210
+
211
+ ```typescript
212
+ // Injected into the existing base API slice detected by fingerprint.apiClientFile
213
+
214
+ import { baseApi } from '<fingerprint.apiClientImport>';
215
+ import type { <ScreenName>Item } from '<relative-path-to-domainModel>';
216
+ import { map<ScreenName>FromDto } from '<relative-path-to-mapper>';
217
+
218
+ export interface Fetch<ScreenName>Args {
219
+ // camelCase params from spec requestBody
220
+ clientCode: number;
221
+ sessionId: string;
222
+ }
223
+
224
+ export const <screenNameCamelCase>Api = baseApi.injectEndpoints({
225
+ endpoints: (builder) => ({
226
+ fetch<ScreenName>: builder.query<<ScreenName>Item[], Fetch<ScreenName>Args>({
227
+ query: (args) => ({
228
+ url: '<spec.apiUrl>',
229
+ method: '<spec.httpMethod>',
230
+ body: {
231
+ // API-casing from spec requestBody
232
+ ClientCode: args.clientCode,
233
+ SessionID: args.sessionId,
234
+ },
235
+ }),
236
+ transformResponse: (response: Record<string, unknown>) => {
237
+ const items = (response.Data ?? response.data ?? []) as Record<string, unknown>[];
238
+ return items.map(map<ScreenName>FromDto);
239
+ },
240
+ }),
241
+ }),
242
+ overrideExisting: false,
243
+ });
244
+
245
+ export const { useFetch<ScreenName>Query } = <screenNameCamelCase>Api;
246
+ ```
247
+
248
+ ### Notes
249
+
250
+ - There is NO slice file for RTK Query features — the thunk/selector is replaced by
251
+ the generated hook.
252
+ - Do NOT generate a separate datasource class. The endpoint builder is the datasource.
253
+ - Do NOT generate selectors — RTK Query hooks provide isLoading, data, error directly.
254
+ - The screen component uses `useFetch<ScreenName>Query(params)` instead of dispatching a thunk.
255
+
256
+ ---
257
+
258
+ ## Pattern 6 — React Query / TanStack Query
259
+
260
+ **When**: `fingerprint.apiLib = "react-query"`
261
+
262
+ React Query uses custom hooks with `useQuery` or `useMutation`.
263
+
264
+ ### Query hook template
265
+
266
+ ```typescript
267
+ import { useQuery, type UseQueryResult } from '@tanstack/react-query';
268
+ import { apiClient } from '<fingerprint.apiClientImport>';
269
+ import type { <ScreenName>Item } from '<relative-path-to-domainModel>';
270
+ import { map<ScreenName>FromDto } from '<relative-path-to-mapper>';
271
+
272
+ // <screenNameCamelCase> = camelCase of screenName, e.g. TransactionHistory → transactionHistory
273
+ export const <screenNameCamelCase>QueryKeys = {
274
+ all: ['<screenNameCamelCase>'] as const,
275
+ list: (clientCode: number) => ['<screenNameCamelCase>', 'list', clientCode] as const,
276
+ } as const;
277
+
278
+ async function fetch<ScreenName>(params: {
279
+ clientCode: number;
280
+ sessionId: string;
281
+ }): Promise<<ScreenName>Item[]> {
282
+ const response = await apiClient.post<Record<string, unknown>>(
283
+ '<spec.apiUrl>',
284
+ { ClientCode: params.clientCode, SessionID: params.sessionId },
285
+ );
286
+ const items = (response.data.Data ?? response.data.data ?? []) as Record<string, unknown>[];
287
+ return items.map(map<ScreenName>FromDto);
288
+ }
289
+
290
+ export function use<ScreenName>(params: {
291
+ clientCode: number;
292
+ sessionId: string;
293
+ }): UseQueryResult<<ScreenName>Item[]> {
294
+ return useQuery({
295
+ queryKey: <screenNameCamelCase>QueryKeys.list(params.clientCode),
296
+ queryFn: () => fetch<ScreenName>(params),
297
+ staleTime: 5 * 60 * 1000,
298
+ });
299
+ }
300
+ ```
301
+
302
+ ### Notes
303
+
304
+ - There is NO slice or thunk — state comes from the React Query cache.
305
+ - Do NOT generate selectors or Redux-related files.
306
+ - The screen component uses `const { data, isLoading, error, refetch } = use<ScreenName>(params)`.
307
+ - Check if the project uses TanStack Query v4 (`@tanstack/react-query`) or v3 (`react-query`).
308
+ The import path differs. Detect from package.json.
309
+
310
+ ---
311
+
312
+ ## Request Body Field Mapping Rules (all patterns)
313
+
314
+ The spec `requestBody` uses API-casing (typically PascalCase or UPPER_SNAKE).
315
+ The domain `Params` interface uses camelCase. The datasource maps between them:
316
+
317
+ ```
318
+ Spec requestBody: Domain Params:
319
+ "ClientCode": 12345 → clientCode: number
320
+ "SessionID": "abc" → sessionId: string
321
+ "FamilyFlag": 0 → familyFlag: 0 | 1
322
+ "PARAM1": "" → param1?: string
323
+ "FilterColumns": "" → filterColumns?: string
324
+ ```
325
+
326
+ Always use the EXACT field names from the spec on the request side. Never rename
327
+ API fields in the datasource — mappers and DTOs handle inbound casing, not the datasource.