@boxa-devops/depo-shared 1.0.4 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -11
- package/dist/api.d.ts +273 -0
- package/dist/api.d.ts.map +1 -1
- package/error_codes.json +8 -0
- package/openapi.json +425 -0
- package/package.json +6 -2
- package/src/api.ts +273 -0
- package/tokens-kiosk.css +179 -0
package/README.md
CHANGED
|
@@ -33,23 +33,25 @@
|
|
|
33
33
|
|
|
34
34
|
```sh
|
|
35
35
|
pnpm install
|
|
36
|
-
pnpm generate
|
|
36
|
+
pnpm generate # openapi.json -> src/api.ts (после ../depo-api: make contract)
|
|
37
37
|
pnpm lint
|
|
38
|
-
pnpm typecheck
|
|
38
|
+
pnpm typecheck # ошибки типов по исходникам
|
|
39
39
|
pnpm test
|
|
40
|
-
pnpm build
|
|
40
|
+
pnpm build # dist/: ESM + .d.ts + sourcemaps
|
|
41
|
+
pnpm consumer-check # компиляция потребителя против тарболла, skipLibCheck OFF
|
|
42
|
+
pnpm preflight # тесты обоих фронтендов против этой копии контракта
|
|
41
43
|
```
|
|
42
44
|
|
|
43
45
|
## Релиз
|
|
44
46
|
|
|
45
|
-
1. `cd ../depo-api && make
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
47
|
+
1. `cd ../depo-api && make release` — весь автоматический круг: генерация
|
|
48
|
+
контракта, все гейты здесь, плюс `preflight` (тесты обоих фронтендов
|
|
49
|
+
против этой рабочей копии). Останавливается и печатает диф.
|
|
50
|
+
2. Прочитать `git diff openapi.json` глазами — это и есть гейт контракта.
|
|
51
|
+
3. Поднять версию, запись в `CHANGELOG.md`.
|
|
52
|
+
4. `git commit && git tag vX.Y.Z && git push --follow-tags` → workflow
|
|
53
|
+
публикует пакет в npmjs.
|
|
54
|
+
5. Ничего. Dependabot во фронтендах сам откроет PR на новую версию.
|
|
53
55
|
|
|
54
56
|
Правила версионирования и остальные детали — `CLAUDE.md`.
|
|
55
57
|
|
package/dist/api.d.ts
CHANGED
|
@@ -962,6 +962,57 @@ export interface paths {
|
|
|
962
962
|
patch?: never;
|
|
963
963
|
trace?: never;
|
|
964
964
|
};
|
|
965
|
+
"/api/v1/admin/refs/loco-series/{code}/positions": {
|
|
966
|
+
parameters: {
|
|
967
|
+
query?: never;
|
|
968
|
+
header?: never;
|
|
969
|
+
path?: never;
|
|
970
|
+
cookie?: never;
|
|
971
|
+
};
|
|
972
|
+
/**
|
|
973
|
+
* List Series Positions
|
|
974
|
+
* @description Every type bound to this series, with the list it carries there.
|
|
975
|
+
*
|
|
976
|
+
* Types with no binding are deliberately absent rather than listed with their
|
|
977
|
+
* global list: the visualization has to be able to tell «this series says so»
|
|
978
|
+
* from «the type says so», and a merged view cannot.
|
|
979
|
+
*/
|
|
980
|
+
get: operations["list_series_positions_api_v1_admin_refs_loco_series__code__positions_get"];
|
|
981
|
+
put?: never;
|
|
982
|
+
post?: never;
|
|
983
|
+
delete?: never;
|
|
984
|
+
options?: never;
|
|
985
|
+
head?: never;
|
|
986
|
+
patch?: never;
|
|
987
|
+
trace?: never;
|
|
988
|
+
};
|
|
989
|
+
"/api/v1/admin/refs/loco-series/{code}/positions/{nomenclature_id}": {
|
|
990
|
+
parameters: {
|
|
991
|
+
query?: never;
|
|
992
|
+
header?: never;
|
|
993
|
+
path?: never;
|
|
994
|
+
cookie?: never;
|
|
995
|
+
};
|
|
996
|
+
get?: never;
|
|
997
|
+
/**
|
|
998
|
+
* Bind Series Positions
|
|
999
|
+
* @description Create or replace the binding. Idempotent by (series, type).
|
|
1000
|
+
*/
|
|
1001
|
+
put: operations["bind_series_positions_api_v1_admin_refs_loco_series__code__positions__nomenclature_id__put"];
|
|
1002
|
+
post?: never;
|
|
1003
|
+
/**
|
|
1004
|
+
* Unbind Series Positions
|
|
1005
|
+
* @description Drop the binding: the type falls back to its global positions list.
|
|
1006
|
+
*
|
|
1007
|
+
* Absent binding is not an error — the operator's intent («this series has no
|
|
1008
|
+
* list of its own») already holds.
|
|
1009
|
+
*/
|
|
1010
|
+
delete: operations["unbind_series_positions_api_v1_admin_refs_loco_series__code__positions__nomenclature_id__delete"];
|
|
1011
|
+
options?: never;
|
|
1012
|
+
head?: never;
|
|
1013
|
+
patch?: never;
|
|
1014
|
+
trace?: never;
|
|
1015
|
+
};
|
|
965
1016
|
"/api/v1/admin/refs/{entity}": {
|
|
966
1017
|
parameters: {
|
|
967
1018
|
query?: never;
|
|
@@ -2875,6 +2926,30 @@ export interface paths {
|
|
|
2875
2926
|
patch?: never;
|
|
2876
2927
|
trace?: never;
|
|
2877
2928
|
};
|
|
2929
|
+
"/api/v1/refs/loco-series-positions": {
|
|
2930
|
+
parameters: {
|
|
2931
|
+
query?: never;
|
|
2932
|
+
header?: never;
|
|
2933
|
+
path?: never;
|
|
2934
|
+
cookie?: never;
|
|
2935
|
+
};
|
|
2936
|
+
/**
|
|
2937
|
+
* Loco Series Positions
|
|
2938
|
+
* @description Per-series mount positions, for the terminal's chips.
|
|
2939
|
+
*
|
|
2940
|
+
* A small dictionary by design: only the types whose positions differ from
|
|
2941
|
+
* the global `nomenclature.positions` have a row. The client applies it as an
|
|
2942
|
+
* override — series row first, global list otherwise.
|
|
2943
|
+
*/
|
|
2944
|
+
get: operations["loco_series_positions_api_v1_refs_loco_series_positions_get"];
|
|
2945
|
+
put?: never;
|
|
2946
|
+
post?: never;
|
|
2947
|
+
delete?: never;
|
|
2948
|
+
options?: never;
|
|
2949
|
+
head?: never;
|
|
2950
|
+
patch?: never;
|
|
2951
|
+
trace?: never;
|
|
2952
|
+
};
|
|
2878
2953
|
"/api/v1/refs/nomenclature": {
|
|
2879
2954
|
parameters: {
|
|
2880
2955
|
query?: never;
|
|
@@ -7477,6 +7552,61 @@ export interface components {
|
|
|
7477
7552
|
/** Photo Key */
|
|
7478
7553
|
photo_key: string | null;
|
|
7479
7554
|
};
|
|
7555
|
+
/**
|
|
7556
|
+
* LocoSeriesPositionIn
|
|
7557
|
+
* @description Bind a part type to a series with that machine's own position list.
|
|
7558
|
+
*
|
|
7559
|
+
* Normalised by the same validator as nomenclature.positions, so a list means
|
|
7560
|
+
* the same thing wherever it was typed. An empty list is rejected: «no
|
|
7561
|
+
* per-series list» is expressed by DELETEing the binding, which falls the
|
|
7562
|
+
* type back to its global list, not by saving emptiness that would read as
|
|
7563
|
+
* «this series has no positions».
|
|
7564
|
+
*/
|
|
7565
|
+
LocoSeriesPositionIn: {
|
|
7566
|
+
/** Positions */
|
|
7567
|
+
positions: string[];
|
|
7568
|
+
};
|
|
7569
|
+
/**
|
|
7570
|
+
* LocoSeriesPositionOut
|
|
7571
|
+
* @description One binding as the admin visualization draws it.
|
|
7572
|
+
*/
|
|
7573
|
+
LocoSeriesPositionOut: {
|
|
7574
|
+
/** Loco Series */
|
|
7575
|
+
loco_series: string;
|
|
7576
|
+
/**
|
|
7577
|
+
* Nomenclature Id
|
|
7578
|
+
* Format: uuid
|
|
7579
|
+
*/
|
|
7580
|
+
nomenclature_id: string;
|
|
7581
|
+
/** Code */
|
|
7582
|
+
code: string;
|
|
7583
|
+
/** Name */
|
|
7584
|
+
name: string;
|
|
7585
|
+
/** Positions */
|
|
7586
|
+
positions: string[];
|
|
7587
|
+
};
|
|
7588
|
+
/**
|
|
7589
|
+
* LocoSeriesPositionRef
|
|
7590
|
+
* @description One binding: what positions a part type has on ONE series.
|
|
7591
|
+
*
|
|
7592
|
+
* Overrides NomenclatureRef.positions for that series only. A type with no
|
|
7593
|
+
* row here keeps the global list, so this dictionary is usually short and a
|
|
7594
|
+
* depot that never needs per-series lists syncs an empty one.
|
|
7595
|
+
*/
|
|
7596
|
+
LocoSeriesPositionRef: {
|
|
7597
|
+
/** Loco Series */
|
|
7598
|
+
loco_series: string;
|
|
7599
|
+
/**
|
|
7600
|
+
* Nomenclature Id
|
|
7601
|
+
* Format: uuid
|
|
7602
|
+
*/
|
|
7603
|
+
nomenclature_id: string;
|
|
7604
|
+
/**
|
|
7605
|
+
* Positions
|
|
7606
|
+
* @default []
|
|
7607
|
+
*/
|
|
7608
|
+
positions: string[];
|
|
7609
|
+
};
|
|
7480
7610
|
/**
|
|
7481
7611
|
* LocoUnitCard
|
|
7482
7612
|
* @description Machine card header = the registry row plus the card-only honesty bits.
|
|
@@ -13607,6 +13737,115 @@ export interface operations {
|
|
|
13607
13737
|
};
|
|
13608
13738
|
};
|
|
13609
13739
|
};
|
|
13740
|
+
list_series_positions_api_v1_admin_refs_loco_series__code__positions_get: {
|
|
13741
|
+
parameters: {
|
|
13742
|
+
query?: never;
|
|
13743
|
+
header?: {
|
|
13744
|
+
"x-debug-person-id"?: string | null;
|
|
13745
|
+
};
|
|
13746
|
+
path: {
|
|
13747
|
+
code: string;
|
|
13748
|
+
};
|
|
13749
|
+
cookie?: {
|
|
13750
|
+
depo_admin_session?: string | null;
|
|
13751
|
+
};
|
|
13752
|
+
};
|
|
13753
|
+
requestBody?: never;
|
|
13754
|
+
responses: {
|
|
13755
|
+
/** @description Successful Response */
|
|
13756
|
+
200: {
|
|
13757
|
+
headers: {
|
|
13758
|
+
[name: string]: unknown;
|
|
13759
|
+
};
|
|
13760
|
+
content: {
|
|
13761
|
+
"application/json": components["schemas"]["LocoSeriesPositionOut"][];
|
|
13762
|
+
};
|
|
13763
|
+
};
|
|
13764
|
+
/** @description Validation Error */
|
|
13765
|
+
422: {
|
|
13766
|
+
headers: {
|
|
13767
|
+
[name: string]: unknown;
|
|
13768
|
+
};
|
|
13769
|
+
content: {
|
|
13770
|
+
"application/json": components["schemas"]["HTTPValidationError"];
|
|
13771
|
+
};
|
|
13772
|
+
};
|
|
13773
|
+
};
|
|
13774
|
+
};
|
|
13775
|
+
bind_series_positions_api_v1_admin_refs_loco_series__code__positions__nomenclature_id__put: {
|
|
13776
|
+
parameters: {
|
|
13777
|
+
query?: never;
|
|
13778
|
+
header?: {
|
|
13779
|
+
"x-debug-person-id"?: string | null;
|
|
13780
|
+
};
|
|
13781
|
+
path: {
|
|
13782
|
+
code: string;
|
|
13783
|
+
nomenclature_id: string;
|
|
13784
|
+
};
|
|
13785
|
+
cookie?: {
|
|
13786
|
+
depo_admin_session?: string | null;
|
|
13787
|
+
};
|
|
13788
|
+
};
|
|
13789
|
+
requestBody: {
|
|
13790
|
+
content: {
|
|
13791
|
+
"application/json": components["schemas"]["LocoSeriesPositionIn"];
|
|
13792
|
+
};
|
|
13793
|
+
};
|
|
13794
|
+
responses: {
|
|
13795
|
+
/** @description Successful Response */
|
|
13796
|
+
200: {
|
|
13797
|
+
headers: {
|
|
13798
|
+
[name: string]: unknown;
|
|
13799
|
+
};
|
|
13800
|
+
content: {
|
|
13801
|
+
"application/json": components["schemas"]["LocoSeriesPositionOut"];
|
|
13802
|
+
};
|
|
13803
|
+
};
|
|
13804
|
+
/** @description Validation Error */
|
|
13805
|
+
422: {
|
|
13806
|
+
headers: {
|
|
13807
|
+
[name: string]: unknown;
|
|
13808
|
+
};
|
|
13809
|
+
content: {
|
|
13810
|
+
"application/json": components["schemas"]["HTTPValidationError"];
|
|
13811
|
+
};
|
|
13812
|
+
};
|
|
13813
|
+
};
|
|
13814
|
+
};
|
|
13815
|
+
unbind_series_positions_api_v1_admin_refs_loco_series__code__positions__nomenclature_id__delete: {
|
|
13816
|
+
parameters: {
|
|
13817
|
+
query?: never;
|
|
13818
|
+
header?: {
|
|
13819
|
+
"x-debug-person-id"?: string | null;
|
|
13820
|
+
};
|
|
13821
|
+
path: {
|
|
13822
|
+
code: string;
|
|
13823
|
+
nomenclature_id: string;
|
|
13824
|
+
};
|
|
13825
|
+
cookie?: {
|
|
13826
|
+
depo_admin_session?: string | null;
|
|
13827
|
+
};
|
|
13828
|
+
};
|
|
13829
|
+
requestBody?: never;
|
|
13830
|
+
responses: {
|
|
13831
|
+
/** @description Successful Response */
|
|
13832
|
+
204: {
|
|
13833
|
+
headers: {
|
|
13834
|
+
[name: string]: unknown;
|
|
13835
|
+
};
|
|
13836
|
+
content?: never;
|
|
13837
|
+
};
|
|
13838
|
+
/** @description Validation Error */
|
|
13839
|
+
422: {
|
|
13840
|
+
headers: {
|
|
13841
|
+
[name: string]: unknown;
|
|
13842
|
+
};
|
|
13843
|
+
content: {
|
|
13844
|
+
"application/json": components["schemas"]["HTTPValidationError"];
|
|
13845
|
+
};
|
|
13846
|
+
};
|
|
13847
|
+
};
|
|
13848
|
+
};
|
|
13610
13849
|
list_entity_api_v1_admin_refs__entity__get: {
|
|
13611
13850
|
parameters: {
|
|
13612
13851
|
query?: never;
|
|
@@ -17418,6 +17657,40 @@ export interface operations {
|
|
|
17418
17657
|
};
|
|
17419
17658
|
};
|
|
17420
17659
|
};
|
|
17660
|
+
loco_series_positions_api_v1_refs_loco_series_positions_get: {
|
|
17661
|
+
parameters: {
|
|
17662
|
+
query?: never;
|
|
17663
|
+
header?: {
|
|
17664
|
+
authorization?: string | null;
|
|
17665
|
+
"x-debug-person-id"?: string | null;
|
|
17666
|
+
};
|
|
17667
|
+
path?: never;
|
|
17668
|
+
cookie?: {
|
|
17669
|
+
depo_admin_session?: string | null;
|
|
17670
|
+
};
|
|
17671
|
+
};
|
|
17672
|
+
requestBody?: never;
|
|
17673
|
+
responses: {
|
|
17674
|
+
/** @description Successful Response */
|
|
17675
|
+
200: {
|
|
17676
|
+
headers: {
|
|
17677
|
+
[name: string]: unknown;
|
|
17678
|
+
};
|
|
17679
|
+
content: {
|
|
17680
|
+
"application/json": components["schemas"]["LocoSeriesPositionRef"][];
|
|
17681
|
+
};
|
|
17682
|
+
};
|
|
17683
|
+
/** @description Validation Error */
|
|
17684
|
+
422: {
|
|
17685
|
+
headers: {
|
|
17686
|
+
[name: string]: unknown;
|
|
17687
|
+
};
|
|
17688
|
+
content: {
|
|
17689
|
+
"application/json": components["schemas"]["HTTPValidationError"];
|
|
17690
|
+
};
|
|
17691
|
+
};
|
|
17692
|
+
};
|
|
17693
|
+
};
|
|
17421
17694
|
nomenclature_api_v1_refs_nomenclature_get: {
|
|
17422
17695
|
parameters: {
|
|
17423
17696
|
query?: {
|