@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.
- package/dist/adminTypes.d.ts +199 -0
- package/dist/adminTypes.d.ts.map +1 -0
- package/dist/adminTypes.js +12 -0
- package/dist/adminTypes.js.map +1 -0
- package/dist/client.d.ts +20 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +26 -1
- package/dist/client.js.map +1 -1
- package/dist/config.d.ts +16 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +33 -0
- package/dist/config.js.map +1 -0
- package/dist/http.d.ts +31 -2
- package/dist/http.d.ts.map +1 -1
- package/dist/http.js +43 -11
- package/dist/http.js.map +1 -1
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -1
- package/dist/index.js.map +1 -1
- package/dist/mock.d.ts +93 -0
- package/dist/mock.d.ts.map +1 -1
- package/dist/mock.js +302 -1
- package/dist/mock.js.map +1 -1
- package/dist/programs.d.ts.map +1 -1
- package/dist/programs.js +3 -0
- package/dist/programs.js.map +1 -1
- package/dist/segmentMapping.d.ts +23 -0
- package/dist/segmentMapping.d.ts.map +1 -0
- package/dist/segmentMapping.js +43 -0
- package/dist/segmentMapping.js.map +1 -0
- package/dist/sources.d.ts +41 -0
- package/dist/sources.d.ts.map +1 -0
- package/dist/sources.js +128 -0
- package/dist/sources.js.map +1 -0
- package/dist/types.d.ts +9 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/uploads.d.ts +27 -0
- package/dist/uploads.d.ts.map +1 -0
- package/dist/uploads.js +89 -0
- package/dist/uploads.js.map +1 -0
- package/dist/valueAliases.d.ts +21 -0
- package/dist/valueAliases.d.ts.map +1 -0
- package/dist/valueAliases.js +49 -0
- package/dist/valueAliases.js.map +1 -0
- package/package.json +1 -1
package/dist/sources.js
ADDED
|
@@ -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> {
|
package/dist/types.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/uploads.js
ADDED
|
@@ -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