@khester/create-dynamics-app 2.6.2 → 2.6.3

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 (24) hide show
  1. package/dist/artifacts/registry.d.ts.map +1 -1
  2. package/dist/artifacts/registry.js +8 -0
  3. package/dist/artifacts/registry.js.map +1 -1
  4. package/dist/artifacts/types.d.ts +16 -0
  5. package/dist/artifacts/types.d.ts.map +1 -1
  6. package/dist/index.js +2 -0
  7. package/dist/index.js.map +1 -1
  8. package/dist/injectSharedModules.d.ts +21 -0
  9. package/dist/injectSharedModules.d.ts.map +1 -0
  10. package/dist/injectSharedModules.js +84 -0
  11. package/dist/injectSharedModules.js.map +1 -0
  12. package/package.json +1 -1
  13. package/templates/{grid-starter/src/core/services → _shared/dataverse-seam}/FetchApiService.ts +3 -8
  14. package/templates/{grid-starter/src/core/services → _shared/dataverse-seam}/IApiService.ts +16 -8
  15. package/templates/{react-custom-page/src/core/services → _shared/dataverse-seam}/XrmApiService.ts +6 -17
  16. package/templates/grid-starter/src/core/services/MockApiService.ts +0 -4
  17. package/templates/react-custom-page/src/core/services/MockApiService.ts +0 -4
  18. package/templates/grid-starter/src/core/services/XrmApiService.ts +0 -135
  19. package/templates/react-custom-page/src/core/services/FetchApiService.ts +0 -117
  20. package/templates/react-custom-page/src/core/services/IApiService.ts +0 -37
  21. package/templates/react-custom-page/src/core/services/ServiceFactory.ts +0 -58
  22. package/templates/react-custom-page/src/core/services/crudLogging.ts +0 -52
  23. /package/templates/{grid-starter/src/core/services → _shared/dataverse-seam}/ServiceFactory.ts +0 -0
  24. /package/templates/{grid-starter/src/core/services → _shared/dataverse-seam}/crudLogging.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/artifacts/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAGlB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAoJpB;;;;;GAKG;AACH,eAAO,MAAM,SAAS,EAAE,kBAAkB,EAmTzC,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAEtE;AAED,wBAAgB,kBAAkB,IAAI,kBAAkB,EAAE,CAEzD;AAED;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAI1E,CAAC"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/artifacts/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAGlB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAoJpB;;;;;GAKG;AACH,eAAO,MAAM,SAAS,EAAE,kBAAkB,EA2TzC,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAEtE;AAED,wBAAgB,kBAAkB,IAAI,kBAAkB,EAAE,CAEzD;AAED;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAI1E,CAAC"}
@@ -148,6 +148,10 @@ export const ARTIFACTS = [
148
148
  // starter, not a --from-design target. Inject only the token dev-tool (Azure CLI →
149
149
  // .env) for the token-proxy dev mode; the Vite config reads DYNAMICS_URL/TOKEN.
150
150
  devTools: ['token'],
151
+ // The IApiService/ServiceFactory data-access seam is shared (single-source in
152
+ // templates/_shared/dataverse-seam) and copied in at scaffold time; only the
153
+ // page-specific MockApiService stays in the template body.
154
+ sharedModules: ['dataverse-seam'],
151
155
  prompts: [],
152
156
  templateVersion: '3.0.0',
153
157
  available: true,
@@ -164,6 +168,10 @@ export const ARTIFACTS = [
164
168
  // dev-tool drives the token-proxy.
165
169
  supportsLibraryChoice: false,
166
170
  devTools: ['token'],
171
+ // Same shared data-access seam as react-custom-page (single-source in
172
+ // templates/_shared/dataverse-seam); only its grid-specific MockApiService
173
+ // seed stays in the template body.
174
+ sharedModules: ['dataverse-seam'],
167
175
  prompts: [],
168
176
  // @dataverse-kit/grid-kit (and its @khester/* deps) are published, so an end
169
177
  // user's post-scaffold `npm i` resolves the template's pinned semver ranges.
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/artifacts/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/artifacts/registry.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,15 @@ export type ComponentLibrary = 'fluent-v8' | 'fluent-v9';
13
13
  export type ExportTarget = 'web-resource' | 'pcf' | 'static-web-app';
14
14
  /** Dev-tools that `injectDevTools` (Phase A) can wire into a generated project. */
15
15
  export type DevToolId = 'token' | 'serve' | 'codegen' | 'smoke';
16
+ /**
17
+ * Reusable source modules `injectSharedModules` copies from `templates/_shared/`
18
+ * into a generated project (Goal-4b inc4). Unlike dev-tools (which land under
19
+ * `tools/`), these are application source — e.g. `dataverse-seam` is the
20
+ * host-portable IApiService/ServiceFactory data-access seam shared verbatim by
21
+ * the custom-page + host-swap templates, kept single-source in the repo so the
22
+ * copies cannot drift.
23
+ */
24
+ export type SharedModuleId = 'dataverse-seam';
16
25
  /** The full set of artifact ids the unified CLI will produce. */
17
26
  export type ArtifactId = 'react-custom-page' | 'power-pages' | 'pcf-field' | 'pcf-dataset' | 'grid-customizer' | 'grid-starter' | 'web-resource' | 'dialog-form' | 'teams-app' | 'static-web-app' | 'starter-page';
18
27
  /**
@@ -82,6 +91,13 @@ export interface ArtifactDescriptor {
82
91
  supportsComponents?: boolean;
83
92
  /** Dev-tools injected into the generated project (Phase A). */
84
93
  devTools: DevToolId[];
94
+ /**
95
+ * Reusable source modules copied from `templates/_shared/` into the generated
96
+ * project (Goal-4b inc4) — e.g. `['dataverse-seam']` pulls the shared
97
+ * IApiService/ServiceFactory data-access seam into `src/core/services/`.
98
+ * Absent = none.
99
+ */
100
+ sharedModules?: SharedModuleId[];
85
101
  /** Artifact-specific prompts → substitution variables. */
86
102
  prompts: PromptSpec[];
87
103
  /** export-engine target for the from-design path (Phase B); omitted = no from-design. */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/artifacts/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/artifacts/types.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -7,6 +7,7 @@ import fs from 'fs-extra';
7
7
  import { copyTemplate } from './utils/copyTemplate.js';
8
8
  import { applyTemplatePlan } from './templatePlan.js';
9
9
  import { injectDevTools, applyConditionalDeps } from './injectDevTools.js';
10
+ import { injectSharedModules } from './injectSharedModules.js';
10
11
  import { scaffoldFromDesign, supportsFromDesign } from './fromDesign.js';
11
12
  import { updatePackageJson } from './utils/updatePackageJson.js';
12
13
  import { installDependencies } from './utils/installDependencies.js';
@@ -127,6 +128,7 @@ program
127
128
  // (a second, incompatible token chain) on top. Blank starters get the dev-tools.
128
129
  if (!options.fromDesign) {
129
130
  await injectDevTools(projectPath, descriptor.devTools);
131
+ await injectSharedModules(projectPath, descriptor.sharedModules);
130
132
  if (vars)
131
133
  await applyConditionalDeps(projectPath, descriptor, vars);
132
134
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { SharedModuleId } from './artifacts/types.js';
2
+ interface PackageJson {
3
+ dependencies?: Record<string, string>;
4
+ devDependencies?: Record<string, string>;
5
+ [key: string]: unknown;
6
+ }
7
+ export interface SharedModulePlan {
8
+ pkg: PackageJson;
9
+ filesToCopy: Array<{
10
+ from: string;
11
+ to: string;
12
+ }>;
13
+ /** Dependency names added or version-bumped (for assertions/logging). */
14
+ addedDeps: string[];
15
+ }
16
+ /** Pure: compute the merged package.json + file-copy plan. No IO. */
17
+ export declare function planSharedModules(pkg: PackageJson, moduleIds: SharedModuleId[]): SharedModulePlan;
18
+ /** Impure: apply the shared-module plan to a generated project. */
19
+ export declare function injectSharedModules(projectPath: string, moduleIds: SharedModuleId[] | undefined): Promise<void>;
20
+ export {};
21
+ //# sourceMappingURL=injectSharedModules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injectSharedModules.d.ts","sourceRoot":"","sources":["../src/injectSharedModules.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAiC3D,UAAU,WAAW;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,WAAW,CAAC;IACjB,WAAW,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,yEAAyE;IACzE,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,qEAAqE;AACrE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,gBAAgB,CA4BjG;AAED,mEAAmE;AACnE,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,cAAc,EAAE,GAAG,SAAS,GACtC,OAAO,CAAC,IAAI,CAAC,CAkBf"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Inject the shared SOURCE modules an artifact declares (`descriptor.sharedModules`)
3
+ * into a generated project: copy each module's files from `templates/_shared/<...>`
4
+ * and merge any runtime deps the module needs into package.json (Goal-4b inc4).
5
+ *
6
+ * This is the source-module sibling of `injectDevTools`. The difference: dev-tools
7
+ * land under `tools/` and may skip-on-script-collision; shared modules are
8
+ * application source (e.g. the host-portable `dataverse-seam` → `src/core/services/`)
9
+ * kept single-source in the repo so the per-template copies cannot drift. Each
10
+ * module self-declares its deps (e.g. the seam's `@khester/reusable-components`
11
+ * logger) so any template that pulls it is automatically wired.
12
+ */
13
+ import fs from 'fs-extra';
14
+ import path from 'path';
15
+ import { fileURLToPath } from 'url';
16
+ import { pickHigherRange } from './injectDevTools.js';
17
+ const sharedRoot = fileURLToPath(new URL('../templates/_shared', import.meta.url));
18
+ /** The dataverse-seam files (kept verbatim in `_shared/dataverse-seam/`). */
19
+ const DATAVERSE_SEAM_FILES = [
20
+ 'IApiService.ts',
21
+ 'ServiceFactory.ts',
22
+ 'XrmApiService.ts',
23
+ 'FetchApiService.ts',
24
+ 'crudLogging.ts',
25
+ ];
26
+ const SHARED_MODULES = {
27
+ 'dataverse-seam': {
28
+ // The seam's only runtime dep (logger + withCrudLog). Pinned to the current
29
+ // fixed publish (0.1.4 was a broken/empty publish, now npm-deprecated);
30
+ // pickHigherRange dedupes against templates that already bake it.
31
+ dependencies: { '@khester/reusable-components': '0.1.5' },
32
+ files: DATAVERSE_SEAM_FILES.map((f) => ({
33
+ from: `dataverse-seam/${f}`,
34
+ to: `src/core/services/${f}`,
35
+ })),
36
+ },
37
+ };
38
+ /** Pure: compute the merged package.json + file-copy plan. No IO. */
39
+ export function planSharedModules(pkg, moduleIds) {
40
+ const out = JSON.parse(JSON.stringify(pkg));
41
+ out.dependencies = out.dependencies || {};
42
+ out.devDependencies = out.devDependencies || {};
43
+ const filesToCopy = [];
44
+ const addedDeps = [];
45
+ for (const id of moduleIds) {
46
+ const mod = SHARED_MODULES[id];
47
+ if (!mod)
48
+ continue;
49
+ for (const [dep, ver] of Object.entries(mod.dependencies || {})) {
50
+ out.dependencies[dep] = out.dependencies[dep]
51
+ ? pickHigherRange(out.dependencies[dep], ver)
52
+ : ver;
53
+ addedDeps.push(dep);
54
+ }
55
+ for (const [dep, ver] of Object.entries(mod.devDependencies || {})) {
56
+ out.devDependencies[dep] = out.devDependencies[dep]
57
+ ? pickHigherRange(out.devDependencies[dep], ver)
58
+ : ver;
59
+ addedDeps.push(dep);
60
+ }
61
+ for (const f of mod.files)
62
+ filesToCopy.push(f);
63
+ }
64
+ return { pkg: out, filesToCopy, addedDeps };
65
+ }
66
+ /** Impure: apply the shared-module plan to a generated project. */
67
+ export async function injectSharedModules(projectPath, moduleIds) {
68
+ if (!moduleIds || moduleIds.length === 0)
69
+ return;
70
+ const pkgPath = path.join(projectPath, 'package.json');
71
+ const pkg = (await fs.pathExists(pkgPath)) ? (await fs.readJson(pkgPath)) : {};
72
+ const plan = planSharedModules(pkg, moduleIds);
73
+ for (const f of plan.filesToCopy) {
74
+ await fs.ensureDir(path.dirname(path.join(projectPath, f.to)));
75
+ await fs.copy(path.join(sharedRoot, f.from), path.join(projectPath, f.to), {
76
+ overwrite: true,
77
+ });
78
+ }
79
+ // Merge the modules' declared deps into the project's package.json (if present).
80
+ if (await fs.pathExists(pkgPath)) {
81
+ await fs.writeJson(pkgPath, plan.pkg, { spaces: 2 });
82
+ }
83
+ }
84
+ //# sourceMappingURL=injectSharedModules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injectSharedModules.js","sourceRoot":"","sources":["../src/injectSharedModules.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@khester/create-dynamics-app",
3
- "version": "2.6.2",
3
+ "version": "2.6.3",
4
4
  "description": "Unified CLI to scaffold Dynamics 365 / Power Platform artifacts",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -103,14 +103,9 @@ export class FetchApiService implements IApiService {
103
103
  });
104
104
  }
105
105
 
106
- async uploadFile(file: File): Promise<string> {
107
- logger.warn("uploadFile not implemented", {
108
- source: "FetchApiService",
109
- data: { file: file.name },
110
- });
111
- return "";
112
- }
113
-
106
+ // Token-proxy dev mode does not implement associate (no live writes needed in
107
+ // the proxy workflow); the no-op satisfies the interface. The signature is
108
+ // intentionally parameterless — fewer params is assignable to the contract.
114
109
  async associateRecord(): Promise<void> {
115
110
  logger.warn("associateRecord not implemented", { source: "FetchApiService" });
116
111
  }
@@ -4,6 +4,12 @@
4
4
  //
5
5
  // Entities are addressed by their Web API ENTITY SET name (plural, e.g.
6
6
  // "accounts"), used consistently for reads and writes across all three services.
7
+ //
8
+ // Shape note: this is the host-portable "{entities}" seam shared across the
9
+ // custom-page + host-swap templates (Goal-4b). It is intentionally a small,
10
+ // UI-component-facing contract — a strict subset of the canonical
11
+ // @dataverse-kit/api-service surface in method names/semantics, so a host can
12
+ // later swap in a canonical-backed implementation with minimal rework.
7
13
  export interface IApiService {
8
14
  /** Update a record. `record` contains only the changed attributes. */
9
15
  updateRecord(entity: string, id: string, record: any): Promise<any>;
@@ -23,15 +29,17 @@ export interface IApiService {
23
29
  /** Execute a custom API / unbound function or action. */
24
30
  executeRequest(requestName: string, requestData: any): Promise<any>;
25
31
 
26
- /** Upload a file and return its URL. */
27
- uploadFile(file: File): Promise<string>;
28
-
29
- /** Associate two records via a relationship. */
32
+ /**
33
+ * Associate two records via a collection-valued relationship navigation
34
+ * property. `related` identifies the target by its entity SET name + id — the
35
+ * object form (not positional args) mirrors the canonical
36
+ * @dataverse-kit/api-service signature and guards against transposing the
37
+ * related set/id.
38
+ */
30
39
  associateRecord(
31
- entityName: string,
32
- entityId: string,
40
+ entity: string,
41
+ id: string,
33
42
  relationshipName: string,
34
- relatedEntityName: string,
35
- relatedEntityId: string,
43
+ related: { entitySetName: string; id: string },
36
44
  ): Promise<void>;
37
45
  }
@@ -1,6 +1,5 @@
1
1
  import { IApiService } from "./IApiService";
2
2
  import { logCrud } from "./crudLogging";
3
- import { logger } from "@khester/reusable-components";
4
3
 
5
4
  /**
6
5
  * Production API service for a model-driven custom page. Every call hits the
@@ -100,21 +99,20 @@ export class XrmApiService implements IApiService {
100
99
  }
101
100
 
102
101
  async associateRecord(
103
- entityName: string,
104
- entityId: string,
102
+ entity: string,
103
+ id: string,
105
104
  relationshipName: string,
106
- relatedEntityName: string,
107
- relatedEntityId: string,
105
+ related: { entitySetName: string; id: string },
108
106
  ): Promise<void> {
109
107
  return logCrud(
110
- { op: "ASSOCIATE", entity: entityName, id: entityId },
108
+ { op: "ASSOCIATE", entity, id },
111
109
  async () => {
112
- const url = `${this.clientUrl()}/api/data/v9.2/${entityName}(${entityId})/${relationshipName}/$ref`;
110
+ const url = `${this.clientUrl()}/api/data/v9.2/${entity}(${id})/${relationshipName}/$ref`;
113
111
  const response = await fetch(url, {
114
112
  method: "POST",
115
113
  headers: this.headers(),
116
114
  body: JSON.stringify({
117
- "@odata.id": `${this.clientUrl()}/api/data/v9.2/${relatedEntityName}(${relatedEntityId})`,
115
+ "@odata.id": `${this.clientUrl()}/api/data/v9.2/${related.entitySetName}(${related.id})`,
118
116
  }),
119
117
  });
120
118
  if (!response.ok) {
@@ -123,13 +121,4 @@ export class XrmApiService implements IApiService {
123
121
  },
124
122
  );
125
123
  }
126
-
127
- async uploadFile(file: File): Promise<string> {
128
- // Stub — wire up to your file/notes/blob strategy as needed.
129
- logger.warn("uploadFile not implemented", {
130
- source: "XrmApiService",
131
- data: { file: file.name },
132
- });
133
- return "";
134
- }
135
124
  }
@@ -59,10 +59,6 @@ export class MockApiService implements IApiService {
59
59
  return logCrud({ op: "EXECUTE", entity: requestName }, async () => ({}));
60
60
  }
61
61
 
62
- async uploadFile(): Promise<string> {
63
- return "";
64
- }
65
-
66
62
  associateRecord(entityName: string, entityId: string): Promise<void> {
67
63
  return logCrud(
68
64
  { op: "ASSOCIATE", entity: entityName, id: entityId },
@@ -60,10 +60,6 @@ export class MockApiService implements IApiService {
60
60
  return logCrud({ op: "EXECUTE", entity: requestName }, async () => ({}));
61
61
  }
62
62
 
63
- async uploadFile(): Promise<string> {
64
- return "";
65
- }
66
-
67
63
  associateRecord(entityName: string, entityId: string): Promise<void> {
68
64
  return logCrud(
69
65
  { op: "ASSOCIATE", entity: entityName, id: entityId },
@@ -1,135 +0,0 @@
1
- import { IApiService } from "./IApiService";
2
- import { logCrud } from "./crudLogging";
3
- import { logger } from "@khester/reusable-components";
4
-
5
- /**
6
- * Production API service for a model-driven custom page. Every call hits the
7
- * Dataverse Web API on the same origin (the hosting org authenticates the
8
- * request via its session), addressing entities by their SET name (e.g.
9
- * "accounts") so reads and writes use one consistent identifier.
10
- */
11
- export class XrmApiService implements IApiService {
12
- private Xrm: any;
13
-
14
- constructor(Xrm: any) {
15
- if (!Xrm) throw new Error("Xrm object is required");
16
- this.Xrm = Xrm;
17
- }
18
-
19
- private clientUrl(): string {
20
- return this.Xrm.Page.context.getClientUrl();
21
- }
22
-
23
- private headers(): HeadersInit {
24
- return {
25
- "OData-MaxVersion": "4.0",
26
- "OData-Version": "4.0",
27
- "Content-Type": "application/json; charset=utf-8",
28
- Accept: "application/json",
29
- Prefer: 'odata.include-annotations="*"',
30
- };
31
- }
32
-
33
- retrieveMultipleRecords(
34
- entity: string,
35
- fetchXml: string,
36
- ): Promise<{ entities: any[] }> {
37
- return logCrud(
38
- { op: "READ", entity, resultCount: (r) => r?.entities?.length },
39
- async () => {
40
- const url = `${this.clientUrl()}/api/data/v9.2/${entity}?fetchXml=${encodeURIComponent(fetchXml)}`;
41
- const response = await fetch(url, { method: "GET", headers: this.headers() });
42
- if (!response.ok) throw await response.json();
43
- const data = await response.json();
44
- return { entities: data.value ?? [] };
45
- },
46
- );
47
- }
48
-
49
- createRecord(entity: string, record: any): Promise<any> {
50
- return logCrud({ op: "CREATE", entity, resultId: (r) => r?.id }, async () => {
51
- const url = `${this.clientUrl()}/api/data/v9.2/${entity}`;
52
- const response = await fetch(url, {
53
- method: "POST",
54
- headers: this.headers(),
55
- body: JSON.stringify(record),
56
- });
57
- if (!response.ok) throw await response.json();
58
- const uri = response.headers.get("OData-EntityId");
59
- const match = uri ? /\(([^)]+)\)/.exec(uri) : null;
60
- return { id: match ? match[1] : null };
61
- });
62
- }
63
-
64
- updateRecord(entity: string, id: string, record: any): Promise<any> {
65
- return logCrud({ op: "UPDATE", entity, id }, async () => {
66
- const cleanId = id.replace(/[{}]/g, "");
67
- const url = `${this.clientUrl()}/api/data/v9.2/${entity}(${cleanId})`;
68
- const response = await fetch(url, {
69
- method: "PATCH",
70
- headers: this.headers(),
71
- body: JSON.stringify(record),
72
- });
73
- if (!response.ok) throw await response.json();
74
- return { success: true };
75
- });
76
- }
77
-
78
- deleteRecord(entity: string, id: string): Promise<void> {
79
- return logCrud({ op: "DELETE", entity, id }, async () => {
80
- const cleanId = id.replace(/[{}]/g, "");
81
- const url = `${this.clientUrl()}/api/data/v9.2/${entity}(${cleanId})`;
82
- const response = await fetch(url, { method: "DELETE", headers: this.headers() });
83
- if (!response.ok) throw await response.json();
84
- });
85
- }
86
-
87
- executeRequest(requestName: string, requestData: any): Promise<any> {
88
- return logCrud({ op: "EXECUTE", entity: requestName }, async () => {
89
- const { getMetadata: _getMetadata, ...payload } = requestData ?? {};
90
- const url = `${this.clientUrl()}/api/data/v9.2/${requestName}`;
91
- const response = await fetch(url, {
92
- method: "POST",
93
- headers: this.headers(),
94
- body: JSON.stringify(payload),
95
- });
96
- if (!response.ok) throw await response.json();
97
- const text = await response.text();
98
- return text ? JSON.parse(text) : null;
99
- });
100
- }
101
-
102
- async associateRecord(
103
- entityName: string,
104
- entityId: string,
105
- relationshipName: string,
106
- relatedEntityName: string,
107
- relatedEntityId: string,
108
- ): Promise<void> {
109
- return logCrud(
110
- { op: "ASSOCIATE", entity: entityName, id: entityId },
111
- async () => {
112
- const url = `${this.clientUrl()}/api/data/v9.2/${entityName}(${entityId})/${relationshipName}/$ref`;
113
- const response = await fetch(url, {
114
- method: "POST",
115
- headers: this.headers(),
116
- body: JSON.stringify({
117
- "@odata.id": `${this.clientUrl()}/api/data/v9.2/${relatedEntityName}(${relatedEntityId})`,
118
- }),
119
- });
120
- if (!response.ok) {
121
- throw new Error(`associateRecord failed (${response.status})`);
122
- }
123
- },
124
- );
125
- }
126
-
127
- async uploadFile(file: File): Promise<string> {
128
- // Stub — wire up to your file/notes/blob strategy as needed.
129
- logger.warn("uploadFile not implemented", {
130
- source: "XrmApiService",
131
- data: { file: file.name },
132
- });
133
- return "";
134
- }
135
- }
@@ -1,117 +0,0 @@
1
- import { IApiService } from "./IApiService";
2
- import { logCrud } from "./crudLogging";
3
- import { logger } from "@khester/reusable-components";
4
-
5
- /**
6
- * Dev API service for token-proxy mode (`npm run dev` with DYNAMICS_URL set).
7
- * Requests go to the SAME-ORIGIN path /api/data/v9.2/... and the Vite dev proxy
8
- * (vite.config.ts) injects the `Authorization: Bearer` header server-side — the
9
- * token is never read by, or bundled into, the client.
10
- */
11
- export class FetchApiService implements IApiService {
12
- constructor(private baseUrl = "") {}
13
-
14
- private headers(): HeadersInit {
15
- return {
16
- "Content-Type": "application/json; charset=utf-8",
17
- Accept: "application/json",
18
- "OData-Version": "4.0",
19
- "OData-MaxVersion": "4.0",
20
- Prefer: 'odata.include-annotations="*"',
21
- };
22
- }
23
-
24
- retrieveMultipleRecords(
25
- entity: string,
26
- fetchXml: string,
27
- ): Promise<{ entities: any[] }> {
28
- return logCrud(
29
- { op: "READ", entity, resultCount: (r) => r?.entities?.length },
30
- async () => {
31
- const url = `${this.baseUrl}/api/data/v9.2/${entity}?fetchXml=${encodeURIComponent(fetchXml)}`;
32
- const response = await fetch(url, { method: "GET", headers: this.headers() });
33
- if (!response.ok) {
34
- const body = await response.text().catch(() => "");
35
- throw new Error(`API error ${response.status}: ${response.statusText}${body ? ` — ${body}` : ""}`);
36
- }
37
- const data = await response.json();
38
- return { entities: data.value ?? [] };
39
- },
40
- );
41
- }
42
-
43
- createRecord(entity: string, record: any): Promise<any> {
44
- return logCrud({ op: "CREATE", entity, resultId: (r) => r?.id }, async () => {
45
- const url = `${this.baseUrl}/api/data/v9.2/${entity}`;
46
- const response = await fetch(url, {
47
- method: "POST",
48
- headers: this.headers(),
49
- body: JSON.stringify(record),
50
- });
51
- if (!response.ok) {
52
- const body = await response.text().catch(() => "");
53
- throw new Error(`Create failed ${response.status}: ${body}`);
54
- }
55
- const entityId = response.headers.get("OData-EntityId");
56
- const match = entityId ? /\(([^)]+)\)/.exec(entityId) : null;
57
- return match ? { id: match[1] } : response.json().catch(() => ({}));
58
- });
59
- }
60
-
61
- updateRecord(entity: string, id: string, record: any): Promise<any> {
62
- return logCrud({ op: "UPDATE", entity, id }, async () => {
63
- const cleanId = id.replace(/[{}]/g, "");
64
- const url = `${this.baseUrl}/api/data/v9.2/${entity}(${cleanId})`;
65
- const response = await fetch(url, {
66
- method: "PATCH",
67
- headers: this.headers(),
68
- body: JSON.stringify(record),
69
- });
70
- if (!response.ok) {
71
- const body = await response.text().catch(() => "");
72
- throw new Error(`Update failed ${response.status}: ${body}`);
73
- }
74
- return { success: true };
75
- });
76
- }
77
-
78
- deleteRecord(entity: string, id: string): Promise<void> {
79
- return logCrud({ op: "DELETE", entity, id }, async () => {
80
- const cleanId = id.replace(/[{}]/g, "");
81
- const url = `${this.baseUrl}/api/data/v9.2/${entity}(${cleanId})`;
82
- const response = await fetch(url, { method: "DELETE", headers: this.headers() });
83
- if (!response.ok) {
84
- const body = await response.text().catch(() => "");
85
- throw new Error(`Delete failed ${response.status}: ${body}`);
86
- }
87
- });
88
- }
89
-
90
- executeRequest(requestName: string, requestData: any): Promise<any> {
91
- return logCrud({ op: "EXECUTE", entity: requestName }, async () => {
92
- const url = `${this.baseUrl}/api/data/v9.2/${requestName}`;
93
- const response = await fetch(url, {
94
- method: "POST",
95
- headers: this.headers(),
96
- body: JSON.stringify(requestData),
97
- });
98
- if (!response.ok) {
99
- const body = await response.text().catch(() => "");
100
- throw new Error(`Execute failed ${response.status}: ${body}`);
101
- }
102
- return response.json().catch(() => ({}));
103
- });
104
- }
105
-
106
- async uploadFile(file: File): Promise<string> {
107
- logger.warn("uploadFile not implemented", {
108
- source: "FetchApiService",
109
- data: { file: file.name },
110
- });
111
- return "";
112
- }
113
-
114
- async associateRecord(): Promise<void> {
115
- logger.warn("associateRecord not implemented", { source: "FetchApiService" });
116
- }
117
- }
@@ -1,37 +0,0 @@
1
- // The single data-access contract for the page. Three implementations satisfy
2
- // it — MockApiService (offline), FetchApiService (token-proxy dev), and
3
- // XrmApiService (production) — and ServiceFactory picks one per environment.
4
- //
5
- // Entities are addressed by their Web API ENTITY SET name (plural, e.g.
6
- // "accounts"), used consistently for reads and writes across all three services.
7
- export interface IApiService {
8
- /** Update a record. `record` contains only the changed attributes. */
9
- updateRecord(entity: string, id: string, record: any): Promise<any>;
10
-
11
- /** Create a record; resolves to `{ id }`. */
12
- createRecord(entity: string, record: any): Promise<any>;
13
-
14
- /** Delete a record. */
15
- deleteRecord(entity: string, id: string): Promise<void>;
16
-
17
- /** Retrieve records via a FetchXML query. */
18
- retrieveMultipleRecords(
19
- entity: string,
20
- fetchXml: string,
21
- ): Promise<{ entities: any[] }>;
22
-
23
- /** Execute a custom API / unbound function or action. */
24
- executeRequest(requestName: string, requestData: any): Promise<any>;
25
-
26
- /** Upload a file and return its URL. */
27
- uploadFile(file: File): Promise<string>;
28
-
29
- /** Associate two records via a relationship. */
30
- associateRecord(
31
- entityName: string,
32
- entityId: string,
33
- relationshipName: string,
34
- relatedEntityName: string,
35
- relatedEntityId: string,
36
- ): Promise<void>;
37
- }
@@ -1,58 +0,0 @@
1
- import { IApiService } from "./IApiService";
2
- import { MockApiService } from "./MockApiService";
3
- import { XrmApiService } from "./XrmApiService";
4
- import { FetchApiService } from "./FetchApiService";
5
- import { logger } from "@khester/reusable-components";
6
-
7
- /**
8
- * Single decision point for which IApiService the page talks to.
9
- *
10
- * Priority:
11
- * 1. localhost + VITE_USE_PROXY → FetchApiService (real Dataverse via the Vite proxy)
12
- * 2. localhost (no proxy) → injected mock, or MockApiService by default
13
- * 3. deployed + Xrm context → XrmApiService
14
- */
15
- export class ServiceFactory {
16
- public static isMockEnvironment: boolean =
17
- window.location.hostname === "localhost" ||
18
- window.location.hostname === "127.0.0.1";
19
-
20
- /**
21
- * Token-proxy dev mode. `vite.config.ts` sets `import.meta.env.VITE_USE_PROXY`
22
- * to a boolean — true when DYNAMICS_URL is configured — and proxies
23
- * /api/data/* to Dataverse with a server-side bearer token. Truthiness check
24
- * (NOT `=== 'true'`): the `define` value is a real boolean, not a string.
25
- */
26
- public static isTokenMode = !!import.meta.env.VITE_USE_PROXY;
27
-
28
- /**
29
- * @param Xrm The Xrm context (required when deployed). Resolve it from
30
- * `window.parent?.Xrm ?? window.Xrm` in App.tsx.
31
- * @param createMock Optional factory for a domain-specific mock. Used ONLY in
32
- * mock mode (after the token-mode check), so a token session
33
- * still talks to the real org. Defaults to MockApiService.
34
- */
35
- public static createApiService(
36
- Xrm?: any,
37
- createMock?: () => IApiService,
38
- ): IApiService {
39
- if (ServiceFactory.isMockEnvironment && ServiceFactory.isTokenMode) {
40
- logger.info("Token mode — using FetchApiService via proxy", {
41
- source: "ServiceFactory",
42
- });
43
- return new FetchApiService();
44
- }
45
-
46
- if (ServiceFactory.isMockEnvironment) {
47
- logger.info("Mock mode — using MockApiService", {
48
- source: "ServiceFactory",
49
- });
50
- return (createMock ?? (() => new MockApiService()))();
51
- }
52
-
53
- if (!Xrm) {
54
- throw new Error("Xrm object is required in a non-mock environment.");
55
- }
56
- return new XrmApiService(Xrm);
57
- }
58
- }
@@ -1,52 +0,0 @@
1
- // Binds the generic `withCrudLog` wrapper (from @khester/reusable-components) to
2
- // the Dataverse error shapes thrown by the IApiService implementations, so each
3
- // service method can be instrumented with a single `logCrud(meta, fn)` call.
4
- //
5
- // `parseServiceError` lives here (app/template code), not in the library — the
6
- // library's logger stays backend-agnostic and the app injects this parser.
7
-
8
- import { withCrudLog, type CrudMeta } from "@khester/reusable-components";
9
-
10
- /**
11
- * Extract a numeric status + human message from the error shapes the services
12
- * throw: an `Error("… 400: <body>")` whose body may embed a Dataverse error
13
- * JSON blob, or a plain `json.error` object with a CDS InnerError message.
14
- */
15
- function parseServiceError(err: unknown): { status?: number; message?: string } {
16
- if (err && typeof err === "object" && !(err instanceof Error)) {
17
- const obj = err as Record<string, unknown>;
18
- const inner = obj["@Microsoft.PowerApps.CDS.InnerError.Message"];
19
- const message =
20
- (typeof inner === "string" && inner) ||
21
- (typeof obj.message === "string" && obj.message) ||
22
- undefined;
23
- const status = typeof obj.status === "number" ? obj.status : undefined;
24
- return { status, message: message || undefined };
25
- }
26
-
27
- if (err instanceof Error) {
28
- const statusMatch = err.message.match(/\b(\d{3})\b/);
29
- const status = statusMatch ? Number(statusMatch[1]) : undefined;
30
-
31
- const jsonStart = err.message.indexOf("{");
32
- if (jsonStart !== -1) {
33
- try {
34
- const parsed = JSON.parse(err.message.substring(jsonStart));
35
- const inner =
36
- parsed?.error?.["@Microsoft.PowerApps.CDS.InnerError.Message"];
37
- const message = inner || parsed?.error?.message || err.message;
38
- return { status, message };
39
- } catch {
40
- // not JSON — fall through to the raw message
41
- }
42
- }
43
- return { status, message: err.message };
44
- }
45
-
46
- return { message: String(err) };
47
- }
48
-
49
- /** Run a CRUD operation, emitting one structured `[CRUD] …` log line for it. */
50
- export function logCrud<T>(meta: CrudMeta, fn: () => Promise<T>): Promise<T> {
51
- return withCrudLog(meta, fn, { parseError: parseServiceError });
52
- }