vet-sdk-core-ts 0.4.34 → 0.4.36

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 CHANGED
@@ -21,6 +21,10 @@ federation requests. GW authentication, OpenID Federation trust resolution,
21
21
  OpenID4VP verification and Dataspace Protocol exchange stay in injected
22
22
  transports; the SDK neither exposes tenant inventories through ICA nor treats
23
23
  the host as the tenant publisher.
24
+ Study publication writes the derived Dataset and its `CatalogRecord` together.
25
+ Withdrawal updates only that record to `archived`; it does not delete or alter
26
+ the ResearchStudy, eligibility/team Groups, ResearchSubjects or data-access
27
+ classification.
24
28
 
25
29
  ## Veterinary scheduling bundles
26
30
 
@@ -1,12 +1,13 @@
1
- import { buildCatalogHostAdvertisement, buildHealthDcatFederationRequest, type HealthDcatResource } from 'vet-data-utils-ts/health-dcat';
1
+ import { buildCatalogHostAdvertisement, buildHealthDcatFederationRequest, buildResearchStudyDatasetPublication, updateHealthDcatCatalogRecordStatus, type HealthDcatResource } from 'vet-data-utils-ts/health-dcat';
2
+ import { normalizeProvenanceR5FlatClaimsResource } from 'vet-data-utils-ts/provenance';
2
3
  export type HealthDcatResourceType = HealthDcatResource['resourceType'];
3
4
  export type HealthDcatBatchMethod = 'POST' | 'PUT';
4
5
  /** Builds a claims-first HealthDCAT batch accepted by a product GW adapter. */
5
6
  export declare function buildHealthDcatBatch(resources: readonly unknown[], method?: HealthDcatBatchMethod): Readonly<{
6
7
  data: readonly Readonly<{
7
- type: "Dataset-health-dcat" | "Catalog-health-dcat";
8
+ type: "Dataset-health-dcat" | "Catalog-health-dcat" | "CatalogRecord-health-dcat" | "Distribution-health-dcat" | "DataService-health-dcat";
8
9
  resource: Readonly<{
9
- resourceType: "Dataset" | "Catalog";
10
+ resourceType: "Dataset" | "Catalog" | "CatalogRecord" | "Distribution" | "DataService";
10
11
  id: string;
11
12
  meta: Readonly<{
12
13
  claims: Readonly<Record<string, string | number | boolean | readonly string[]>>;
@@ -14,7 +15,7 @@ export declare function buildHealthDcatBatch(resources: readonly unknown[], meth
14
15
  }>;
15
16
  request: Readonly<{
16
17
  method: HealthDcatBatchMethod;
17
- url: `Dataset/${string}` | `Catalog/${string}`;
18
+ url: `Dataset/${string}` | `Catalog/${string}` | `CatalogRecord/${string}` | `Distribution/${string}` | `DataService/${string}`;
18
19
  }>;
19
20
  }>[];
20
21
  }>;
@@ -22,7 +23,7 @@ export declare function buildHealthDcatBatch(resources: readonly unknown[], meth
22
23
  export declare function buildHealthDcatSearch(resourceType: HealthDcatResourceType, claims?: Readonly<Record<string, unknown>>): Readonly<{
23
24
  data: readonly Readonly<{
24
25
  resource: Readonly<{
25
- resourceType: "Dataset" | "Catalog";
26
+ resourceType: "Dataset" | "Catalog" | "CatalogRecord" | "Distribution" | "DataService";
26
27
  id: string;
27
28
  meta: Readonly<{
28
29
  claims: Readonly<Record<string, string | number | boolean | readonly string[]>>;
@@ -42,6 +43,10 @@ export type HealthDcatCatalogRequest = Readonly<{
42
43
  } | {
43
44
  operation: 'federate';
44
45
  request: ReturnType<typeof buildHealthDcatFederationRequest>;
46
+ } | {
47
+ operation: 'publish-study-dataset';
48
+ provenance: ReturnType<typeof normalizeProvenanceR5FlatClaimsResource>;
49
+ envelope: ReturnType<typeof buildHealthDcatBatch>;
45
50
  }>;
46
51
  export type HealthDcatCatalogTransport = Readonly<{
47
52
  execute(request: HealthDcatCatalogRequest): Promise<unknown>;
@@ -58,4 +63,10 @@ export declare class HealthDcatCatalogManager {
58
63
  search(resourceType: HealthDcatResourceType, claims?: Readonly<Record<string, unknown>>): Promise<readonly HealthDcatResource[]>;
59
64
  discoverHosts(): Promise<readonly ReturnType<typeof buildCatalogHostAdvertisement>[]>;
60
65
  federate(input: Parameters<typeof buildHealthDcatFederationRequest>[0]): Promise<unknown>;
66
+ /** Publishes a study-derived Dataset and its editorial record atomically in one batch. */
67
+ publishResearchStudyDataset(input: Omit<Parameters<typeof buildResearchStudyDatasetPublication>[0], 'provenanceReference'> & Readonly<{
68
+ provenance: unknown;
69
+ }>): Promise<ReturnType<typeof buildResearchStudyDatasetPublication>>;
70
+ /** Updates only the CatalogRecord status; the ResearchStudy and Dataset remain intact. */
71
+ setResearchStudyDatasetPublicationStatus(input: Parameters<typeof updateHealthDcatCatalogRecordStatus>[0]): Promise<HealthDcatResource>;
61
72
  }
@@ -10,7 +10,8 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
10
10
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
11
  };
12
12
  var _HealthDcatCatalogManager_transport;
13
- import { buildCatalogHostAdvertisement, buildHealthDcatFederationRequest, normalizeHealthDcatResource, } from 'vet-data-utils-ts/health-dcat';
13
+ import { buildCatalogHostAdvertisement, buildHealthDcatFederationRequest, buildResearchStudyDatasetPublication, updateHealthDcatCatalogRecordStatus, normalizeHealthDcatResource, } from 'vet-data-utils-ts/health-dcat';
14
+ import { normalizeProvenanceR5FlatClaimsResource } from 'vet-data-utils-ts/provenance';
14
15
  /** Builds a claims-first HealthDCAT batch accepted by a product GW adapter. */
15
16
  export function buildHealthDcatBatch(resources, method = 'POST') {
16
17
  return Object.freeze({ data: Object.freeze(resources.map(candidate => {
@@ -82,6 +83,22 @@ export class HealthDcatCatalogManager {
82
83
  const request = buildHealthDcatFederationRequest(input);
83
84
  return __classPrivateFieldGet(this, _HealthDcatCatalogManager_transport, "f").execute(Object.freeze({ operation: 'federate', request }));
84
85
  }
86
+ /** Publishes a study-derived Dataset and its editorial record atomically in one batch. */
87
+ async publishResearchStudyDataset(input) {
88
+ const provenance = normalizeProvenanceR5FlatClaimsResource(input.provenance);
89
+ const targets = provenance.meta.claims['Provenance.target'] ?? [];
90
+ if (!targets.includes(input.researchStudyIdentifier))
91
+ throw new TypeError('provenance_research_study_target_mismatch');
92
+ const publication = buildResearchStudyDatasetPublication({ ...input, provenanceReference: `Provenance/${provenance.id}` });
93
+ await __classPrivateFieldGet(this, _HealthDcatCatalogManager_transport, "f").execute(Object.freeze({ operation: 'publish-study-dataset', provenance, envelope: buildHealthDcatBatch([publication.dataset, publication.record]) }));
94
+ return publication;
95
+ }
96
+ /** Updates only the CatalogRecord status; the ResearchStudy and Dataset remain intact. */
97
+ async setResearchStudyDatasetPublicationStatus(input) {
98
+ const record = updateHealthDcatCatalogRecordStatus(input);
99
+ await __classPrivateFieldGet(this, _HealthDcatCatalogManager_transport, "f").execute(Object.freeze({ operation: 'batch', envelope: buildHealthDcatBatch([record], 'PUT') }));
100
+ return record;
101
+ }
85
102
  }
86
103
  _HealthDcatCatalogManager_transport = new WeakMap();
87
104
  function responseBody(value) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vet-sdk-core-ts",
3
- "version": "0.4.34",
3
+ "version": "0.4.36",
4
4
  "description": "Browser-safe VetChain core contracts and governed animal species identifiers",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Connecting Solution & Applications Ltd",
@@ -89,6 +89,6 @@
89
89
  "@noble/hashes": "^2.2.0",
90
90
  "@noble/post-quantum": "0.5.4",
91
91
  "gdc-common-utils-ts": "2.9.10",
92
- "vet-data-utils-ts": "0.5.25"
92
+ "vet-data-utils-ts": "0.5.27"
93
93
  }
94
94
  }