@campfire-interactive/volume-intelligence-client 0.1.1 → 0.4.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 (46) hide show
  1. package/dist/adminTypes.d.ts +199 -0
  2. package/dist/adminTypes.d.ts.map +1 -0
  3. package/dist/adminTypes.js +12 -0
  4. package/dist/adminTypes.js.map +1 -0
  5. package/dist/client.d.ts +20 -1
  6. package/dist/client.d.ts.map +1 -1
  7. package/dist/client.js +26 -1
  8. package/dist/client.js.map +1 -1
  9. package/dist/config.d.ts +16 -0
  10. package/dist/config.d.ts.map +1 -0
  11. package/dist/config.js +33 -0
  12. package/dist/config.js.map +1 -0
  13. package/dist/http.d.ts +31 -2
  14. package/dist/http.d.ts.map +1 -1
  15. package/dist/http.js +43 -11
  16. package/dist/http.js.map +1 -1
  17. package/dist/index.d.ts +7 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +12 -1
  20. package/dist/index.js.map +1 -1
  21. package/dist/mock.d.ts +93 -0
  22. package/dist/mock.d.ts.map +1 -1
  23. package/dist/mock.js +302 -1
  24. package/dist/mock.js.map +1 -1
  25. package/dist/programs.d.ts.map +1 -1
  26. package/dist/programs.js +3 -0
  27. package/dist/programs.js.map +1 -1
  28. package/dist/segmentMapping.d.ts +23 -0
  29. package/dist/segmentMapping.d.ts.map +1 -0
  30. package/dist/segmentMapping.js +43 -0
  31. package/dist/segmentMapping.js.map +1 -0
  32. package/dist/sources.d.ts +41 -0
  33. package/dist/sources.d.ts.map +1 -0
  34. package/dist/sources.js +128 -0
  35. package/dist/sources.js.map +1 -0
  36. package/dist/types.d.ts +9 -0
  37. package/dist/types.d.ts.map +1 -1
  38. package/dist/uploads.d.ts +27 -0
  39. package/dist/uploads.d.ts.map +1 -0
  40. package/dist/uploads.js +89 -0
  41. package/dist/uploads.js.map +1 -0
  42. package/dist/valueAliases.d.ts +21 -0
  43. package/dist/valueAliases.d.ts.map +1 -0
  44. package/dist/valueAliases.js +49 -0
  45. package/dist/valueAliases.js.map +1 -0
  46. package/package.json +1 -1
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SegmentsResource = exports.SourcesResource = void 0;
4
+ const http_1 = require("./http");
5
+ /**
6
+ * Volume-source admin reads/writes — the source list, source detail, the
7
+ * template catalogue, and the per-source data-clear. Mirrors forecast's
8
+ * `/v1/admin/sources*` REST 1:1. Tenant scope comes from the caller's token.
9
+ *
10
+ * NOTE: `detectSegments` (multipart) and the human upload live on
11
+ * `UploadsResource` / a Phase-2 multipart path, not here.
12
+ */
13
+ class SourcesResource {
14
+ http;
15
+ constructor(http) {
16
+ this.http = http;
17
+ }
18
+ async list() {
19
+ const res = await this.http.request({
20
+ method: 'GET',
21
+ path: '/v1/admin/sources',
22
+ });
23
+ return res.data;
24
+ }
25
+ async get(id) {
26
+ const res = await this.http.request({
27
+ method: 'GET',
28
+ path: `/v1/admin/sources/${id}`,
29
+ });
30
+ return res.data;
31
+ }
32
+ async create(data) {
33
+ const res = await this.http.request({
34
+ method: 'POST',
35
+ path: '/v1/admin/sources',
36
+ body: data,
37
+ });
38
+ return res.data;
39
+ }
40
+ async update(id, data) {
41
+ const res = await this.http.request({
42
+ method: 'PUT',
43
+ path: `/v1/admin/sources/${id}`,
44
+ body: data,
45
+ });
46
+ return res.data;
47
+ }
48
+ /** Make this the tenant's active base source. Wipes prior base data when the
49
+ * backend deems it necessary — `wiped` reports whether it did. */
50
+ async activate(id) {
51
+ const res = await this.http.request({
52
+ method: 'POST',
53
+ path: `/v1/admin/sources/${id}/activate`,
54
+ });
55
+ return res.data;
56
+ }
57
+ // ── Templates ──────────────────────────────────────────────────────────────
58
+ async listTemplates() {
59
+ const res = await this.http.request({
60
+ method: 'GET',
61
+ path: '/v1/admin/sources/templates',
62
+ });
63
+ return res.data;
64
+ }
65
+ async createFromTemplate(templateCode) {
66
+ const res = await this.http.request({
67
+ method: 'POST',
68
+ path: '/v1/admin/sources/from-template',
69
+ body: { templateCode },
70
+ });
71
+ return res.data;
72
+ }
73
+ // ── Data clear (typed-confirm gate; backend 400s unless confirm === 'DELETE') ─
74
+ async clearData(sourceId, confirm) {
75
+ const res = await this.http.request({
76
+ method: 'POST',
77
+ path: `/v1/admin/sources/${sourceId}/clear-data`,
78
+ body: { confirm },
79
+ });
80
+ return res.data;
81
+ }
82
+ }
83
+ exports.SourcesResource = SourcesResource;
84
+ /**
85
+ * Source segment (column) admin — list / create / delete / detect.
86
+ */
87
+ class SegmentsResource {
88
+ http;
89
+ constructor(http) {
90
+ this.http = http;
91
+ }
92
+ async list(sourceId) {
93
+ const res = await this.http.request({
94
+ method: 'GET',
95
+ path: `/v1/admin/sources/${sourceId}/segments`,
96
+ });
97
+ return res.data;
98
+ }
99
+ /** Auto-detect a source's columns from a sample workbook (multipart). Reads
100
+ * the source's configured header row; reports how many segments were added
101
+ * vs. already present. */
102
+ async detectSegments(sourceId, file) {
103
+ const { blob, fileName } = (0, http_1.toFilePart)(file);
104
+ const form = new FormData();
105
+ form.append('file', blob, fileName);
106
+ const res = await this.http.requestMultipart({
107
+ path: `/v1/admin/sources/${sourceId}/detect-segments`,
108
+ form,
109
+ });
110
+ return res.data;
111
+ }
112
+ async create(sourceId, input) {
113
+ const res = await this.http.request({
114
+ method: 'POST',
115
+ path: `/v1/admin/sources/${sourceId}/segments`,
116
+ body: input,
117
+ });
118
+ return res.data;
119
+ }
120
+ async delete(segmentId) {
121
+ await this.http.request({
122
+ method: 'DELETE',
123
+ path: `/v1/admin/segments/${segmentId}`,
124
+ });
125
+ }
126
+ }
127
+ exports.SegmentsResource = SegmentsResource;
128
+ //# sourceMappingURL=sources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sources.js","sourceRoot":"","sources":["../src/sources.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -55,12 +55,21 @@ export interface ProgramWithVolumes {
55
55
  export interface ListActiveProgramsOptions {
56
56
  /** Only return programs whose 12-month forward volume is at least this. */
57
57
  minForwardAnnual?: number;
58
+ /** When `false`, return the RAW source projection — programs straight from the
59
+ * active base source's uploaded volume + level/automotive-field identity, with
60
+ * no cfi-ai-hub binding and no prediction (campfire) dependency. Defaults to
61
+ * `true` (the analytical, reconciled projection). Consumers that only need
62
+ * "production programs + volume + OEM/nameplate" (e.g. OMSF's unengaged-opp
63
+ * sync) pass `false` so the read works without the analytical layer. */
64
+ reconciled?: boolean;
58
65
  }
59
66
  export interface ListProgramsForMatchingOptions {
60
67
  /** Coarse server-side pre-filters to bound payload. Consumers still apply
61
68
  * their own match logic over the returned candidates. */
62
69
  nameplate?: string;
63
70
  oem?: string;
71
+ /** See `ListActiveProgramsOptions.reconciled`. Defaults to `true`. */
72
+ reconciled?: boolean;
64
73
  }
65
74
  /** Forecast wraps every handler return in `{ data, meta }`. */
66
75
  export interface ForecastEnvelope<T> {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,8BAA8B;IAC7C;oDACgD;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB;;6BAEyB;IACzB,QAAQ,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,cAAc,EAAE,aAAa,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,yBAAyB;IACxC,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,8BAA8B;IAC7C;8DAC0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,+DAA+D;AAC/D,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,IAAI,EAAE,CAAC,CAAC;IACR,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACnD;AAED,oDAAoD;AACpD,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,KAAK,EAAE,CAAC,EAAE,CAAC;CACZ"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,8BAA8B;IAC7C;oDACgD;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB;;6BAEyB;IACzB,QAAQ,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,cAAc,EAAE,aAAa,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,yBAAyB;IACxC,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;6EAKyE;IACzE,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,8BAA8B;IAC7C;8DAC0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,+DAA+D;AAC/D,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,IAAI,EAAE,CAAC,CAAC;IACR,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACnD;AAED,oDAAoD;AACpD,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,KAAK,EAAE,CAAC,EAAE,CAAC;CACZ"}
@@ -0,0 +1,27 @@
1
+ import type { HttpTransport, UploadFileInput } from './http';
2
+ import type { Upload, CreateUploadInput, UploadListParams, UploadListResponse, UploadWithErrors, UploadErrorListParams, UploadErrorListResponse } from './adminTypes';
3
+ /**
4
+ * Uploads — create (multipart human upload), reads, reprocess, download.
5
+ * Mirrors forecast's `/v1/uploads*` REST. The programmatic API import
6
+ * (`POST /v1/uploads/api` presign flow) is `import()` (Phase 2b).
7
+ */
8
+ export declare class UploadsResource {
9
+ private readonly http;
10
+ constructor(http: HttpTransport);
11
+ /** Upload a workbook for ingestion (`POST /v1/uploads`, multipart). Returns
12
+ * the created `Upload` (status `pending`); poll `get(id)` for progress.
13
+ * A consumer backend proxy passes the received file buffer as
14
+ * `{ data: req.file.buffer, fileName: req.file.originalname }`. */
15
+ create(file: UploadFileInput, input: CreateUploadInput): Promise<Upload>;
16
+ list(params?: UploadListParams): Promise<UploadListResponse>;
17
+ /** A single upload with its errors inlined (the detail view). */
18
+ get(id: string): Promise<UploadWithErrors>;
19
+ errors(id: string, params?: UploadErrorListParams): Promise<UploadErrorListResponse>;
20
+ reprocess(id: string): Promise<{
21
+ id: string;
22
+ status: string;
23
+ }>;
24
+ /** A short-lived presigned URL to download the originally-uploaded file. */
25
+ downloadUrl(id: string): Promise<string>;
26
+ }
27
+ //# sourceMappingURL=uploads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uploads.d.ts","sourceRoot":"","sources":["../src/uploads.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAG7D,OAAO,KAAK,EACV,MAAM,EACN,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,EACxB,MAAM,cAAc,CAAC;AAEtB;;;;GAIG;AACH,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,aAAa;IAEhD;;;wEAGoE;IAC9D,MAAM,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBxE,IAAI,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAgBlE,iEAAiE;IAC3D,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAQ1C,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAapF,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAQpE,4EAA4E;IACtE,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAO/C"}
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UploadsResource = void 0;
4
+ const http_1 = require("./http");
5
+ /**
6
+ * Uploads — create (multipart human upload), reads, reprocess, download.
7
+ * Mirrors forecast's `/v1/uploads*` REST. The programmatic API import
8
+ * (`POST /v1/uploads/api` presign flow) is `import()` (Phase 2b).
9
+ */
10
+ class UploadsResource {
11
+ http;
12
+ constructor(http) {
13
+ this.http = http;
14
+ }
15
+ /** Upload a workbook for ingestion (`POST /v1/uploads`, multipart). Returns
16
+ * the created `Upload` (status `pending`); poll `get(id)` for progress.
17
+ * A consumer backend proxy passes the received file buffer as
18
+ * `{ data: req.file.buffer, fileName: req.file.originalname }`. */
19
+ async create(file, input) {
20
+ const { blob, fileName } = (0, http_1.toFilePart)(file);
21
+ const form = new FormData();
22
+ form.append('file', blob, fileName);
23
+ form.append('sourceId', input.sourceId);
24
+ if (input.uploadYear !== undefined)
25
+ form.append('uploadYear', String(input.uploadYear));
26
+ if (input.uploadMonth !== undefined)
27
+ form.append('uploadMonth', String(input.uploadMonth));
28
+ if (input.actualsLagMonths !== undefined) {
29
+ form.append('actualsLagMonths', String(input.actualsLagMonths));
30
+ }
31
+ const res = await this.http.requestMultipart({
32
+ path: '/v1/uploads',
33
+ form,
34
+ });
35
+ return res.data;
36
+ }
37
+ async list(params) {
38
+ const res = await this.http.request({
39
+ method: 'GET',
40
+ path: '/v1/uploads',
41
+ query: {
42
+ limit: params?.limit !== undefined ? String(params.limit) : undefined,
43
+ offset: params?.offset !== undefined ? String(params.offset) : undefined,
44
+ status: params?.status,
45
+ sourceId: params?.sourceId,
46
+ year: params?.year !== undefined ? String(params.year) : undefined,
47
+ month: params?.month !== undefined ? String(params.month) : undefined,
48
+ },
49
+ });
50
+ return res.data;
51
+ }
52
+ /** A single upload with its errors inlined (the detail view). */
53
+ async get(id) {
54
+ const res = await this.http.request({
55
+ method: 'GET',
56
+ path: `/v1/uploads/${id}`,
57
+ });
58
+ return res.data;
59
+ }
60
+ async errors(id, params) {
61
+ const res = await this.http.request({
62
+ method: 'GET',
63
+ path: `/v1/uploads/${id}/errors`,
64
+ query: {
65
+ limit: params?.limit !== undefined ? String(params.limit) : undefined,
66
+ offset: params?.offset !== undefined ? String(params.offset) : undefined,
67
+ errorType: params?.errorType,
68
+ },
69
+ });
70
+ return res.data;
71
+ }
72
+ async reprocess(id) {
73
+ const res = await this.http.request({
74
+ method: 'POST',
75
+ path: `/v1/uploads/${id}/reprocess`,
76
+ });
77
+ return res.data;
78
+ }
79
+ /** A short-lived presigned URL to download the originally-uploaded file. */
80
+ async downloadUrl(id) {
81
+ const res = await this.http.request({
82
+ method: 'GET',
83
+ path: `/v1/uploads/${id}/download`,
84
+ });
85
+ return res.data.url;
86
+ }
87
+ }
88
+ exports.UploadsResource = UploadsResource;
89
+ //# sourceMappingURL=uploads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uploads.js","sourceRoot":"","sources":["../src/uploads.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { HttpTransport } from './http';
2
+ import type { SourceValueAlias, ValueAliasEntry, RelinkResult } from './adminTypes';
3
+ /**
4
+ * Per-source, per-level value normalisation (raw → canonical) plus the
5
+ * overlay→base relink. Mirrors forecast's `/v1/admin/sources/:id/value-aliases*`
6
+ * and `/relink` REST.
7
+ */
8
+ export declare class ValueAliasesResource {
9
+ private readonly http;
10
+ constructor(http: HttpTransport);
11
+ list(sourceId: string): Promise<SourceValueAlias[]>;
12
+ /** Bulk-replace every alias at a level for the source — send the full desired
13
+ * set; the backend wipes that level's rows and inserts the new ones in one
14
+ * transaction. */
15
+ replaceLevel(sourceId: string, level: number, entries: ValueAliasEntry[]): Promise<SourceValueAlias[]>;
16
+ delete(aliasId: string): Promise<void>;
17
+ /** Re-run overlay→base link resolution against the tenant's current active
18
+ * base without a re-upload (e.g. after editing aliases). Idempotent. */
19
+ relink(sourceId: string): Promise<RelinkResult>;
20
+ }
21
+ //# sourceMappingURL=valueAliases.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"valueAliases.d.ts","sourceRoot":"","sources":["../src/valueAliases.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAE5C,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,YAAY,EACb,MAAM,cAAc,CAAC;AAEtB;;;;GAIG;AACH,qBAAa,oBAAoB;IACnB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,aAAa;IAE1C,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAQzD;;uBAEmB;IACb,YAAY,CAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,eAAe,EAAE,GACzB,OAAO,CAAC,gBAAgB,EAAE,CAAC;IASxB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO5C;6EACyE;IACnE,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;CAOtD"}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ValueAliasesResource = void 0;
4
+ /**
5
+ * Per-source, per-level value normalisation (raw → canonical) plus the
6
+ * overlay→base relink. Mirrors forecast's `/v1/admin/sources/:id/value-aliases*`
7
+ * and `/relink` REST.
8
+ */
9
+ class ValueAliasesResource {
10
+ http;
11
+ constructor(http) {
12
+ this.http = http;
13
+ }
14
+ async list(sourceId) {
15
+ const res = await this.http.request({
16
+ method: 'GET',
17
+ path: `/v1/admin/sources/${sourceId}/value-aliases`,
18
+ });
19
+ return res.data.items;
20
+ }
21
+ /** Bulk-replace every alias at a level for the source — send the full desired
22
+ * set; the backend wipes that level's rows and inserts the new ones in one
23
+ * transaction. */
24
+ async replaceLevel(sourceId, level, entries) {
25
+ const res = await this.http.request({
26
+ method: 'PUT',
27
+ path: `/v1/admin/sources/${sourceId}/value-aliases/${level}`,
28
+ body: { entries },
29
+ });
30
+ return res.data.items;
31
+ }
32
+ async delete(aliasId) {
33
+ await this.http.request({
34
+ method: 'DELETE',
35
+ path: `/v1/admin/value-aliases/${aliasId}`,
36
+ });
37
+ }
38
+ /** Re-run overlay→base link resolution against the tenant's current active
39
+ * base without a re-upload (e.g. after editing aliases). Idempotent. */
40
+ async relink(sourceId) {
41
+ const res = await this.http.request({
42
+ method: 'POST',
43
+ path: `/v1/admin/sources/${sourceId}/relink`,
44
+ });
45
+ return res.data;
46
+ }
47
+ }
48
+ exports.ValueAliasesResource = ValueAliasesResource;
49
+ //# sourceMappingURL=valueAliases.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"valueAliases.js","sourceRoot":"","sources":["../src/valueAliases.ts"],"names":[],"mappings":";;;AAQA;;;;GAIG;AACH,MAAa,oBAAoB;IACF;IAA7B,YAA6B,IAAmB;QAAnB,SAAI,GAAJ,IAAI,CAAe;IAAG,CAAC;IAEpD,KAAK,CAAC,IAAI,CAAC,QAAgB;QACzB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAkD;YACnF,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,qBAAqB,QAAQ,gBAAgB;SACpD,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;IACxB,CAAC;IAED;;uBAEmB;IACnB,KAAK,CAAC,YAAY,CAChB,QAAgB,EAChB,KAAa,EACb,OAA0B;QAE1B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAkD;YACnF,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,qBAAqB,QAAQ,kBAAkB,KAAK,EAAE;YAC5D,IAAI,EAAE,EAAE,OAAO,EAAE;SAClB,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe;QAC1B,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAO;YAC5B,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,2BAA2B,OAAO,EAAE;SAC3C,CAAC,CAAC;IACL,CAAC;IAED;6EACyE;IACzE,KAAK,CAAC,MAAM,CAAC,QAAgB;QAC3B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAiC;YAClE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,qBAAqB,QAAQ,SAAS;SAC7C,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC;CACF;AA3CD,oDA2CC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@campfire-interactive/volume-intelligence-client",
3
- "version": "0.1.1",
3
+ "version": "0.4.0",
4
4
  "description": "TypeScript client for Volume Intelligence (the platform's volume data plane)",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",