gdc-sdk-node-ts 0.12.0 → 2.0.4

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 (34) hide show
  1. package/README.md +118 -12
  2. package/dist/backend-profile-runtime.d.ts +262 -0
  3. package/dist/backend-profile-runtime.js +498 -0
  4. package/dist/consent-claim-helpers.d.ts +2 -1
  5. package/dist/family-organization-registration.d.ts +40 -0
  6. package/dist/family-organization-registration.js +54 -0
  7. package/dist/family-organization-search.d.ts +30 -0
  8. package/dist/family-organization-search.js +59 -0
  9. package/dist/index.d.ts +7 -0
  10. package/dist/index.js +7 -0
  11. package/dist/individual-controller-backend-runtime.d.ts +59 -0
  12. package/dist/individual-controller-backend-runtime.js +67 -0
  13. package/dist/legal-organization-onboarding-facade.d.ts +70 -0
  14. package/dist/legal-organization-onboarding-facade.js +169 -0
  15. package/dist/node-runtime-client.d.ts +98 -2
  16. package/dist/node-runtime-client.js +178 -6
  17. package/dist/orchestration/client-port.d.ts +31 -1
  18. package/dist/orchestration/individual-controller-sdk.d.ts +23 -1
  19. package/dist/orchestration/individual-controller-sdk.js +28 -0
  20. package/dist/orchestration/organization-controller-sdk.d.ts +22 -1
  21. package/dist/orchestration/organization-controller-sdk.js +25 -0
  22. package/dist/orchestration/personal-sdk.d.ts +3 -1
  23. package/dist/orchestration/personal-sdk.js +4 -0
  24. package/dist/orchestration/professional-sdk.d.ts +16 -1
  25. package/dist/orchestration/professional-sdk.js +21 -0
  26. package/dist/organization-controller-backend-runtime.d.ts +65 -0
  27. package/dist/organization-controller-backend-runtime.js +83 -0
  28. package/dist/professional-backend-runtime.d.ts +36 -0
  29. package/dist/professional-backend-runtime.js +41 -0
  30. package/dist/profile-workspace.d.ts +82 -0
  31. package/dist/profile-workspace.js +127 -0
  32. package/dist/resource-operations.d.ts +79 -5
  33. package/dist/resource-operations.js +50 -5
  34. package/package.json +8 -3
@@ -2,16 +2,20 @@
2
2
  // Always create JSDoc, do not use strings inline in keys nor values, use types instead, and reuse the data test examples.
3
3
  import fs from 'node:fs';
4
4
  import path from 'node:path';
5
- import { buildAppHeaders, createBootstrapFacade, resolveAppInfo, } from 'gdc-sdk-core-ts';
5
+ import { DIDCOMM_DEFAULT_ACCEPT_HEADER, DIDCOMM_PLAINTEXT_JSON_MEDIA_TYPE, } from 'gdc-common-utils-ts/utils/didcomm-submit';
6
+ import { buildLegalOrganizationVerificationGatewayRequestBundle, buildOrganizationDidBindingBundle, buildAppHeaders, createBootstrapFacade, resolveAppInfo, } from 'gdc-sdk-core-ts';
6
7
  import { buildConsentClaimsSimpleWithCid } from 'gdc-common-utils-ts/utils/consent';
8
+ import { buildDidcommPlaintextTransportMetadata } from 'gdc-common-utils-ts/utils/activation-request';
7
9
  import { pollUntilCompleteWithMethod } from './async-polling.js';
8
10
  import { confirmLegalOrganizationOrderWithDeps, HostLifecycleRequestType, HostedTenantLifecycleRequestType, submitHostedTenantLifecycleWithDeps, } from './host-onboarding.js';
9
11
  import { confirmIndividualOrganizationOrderWithDeps, } from './individual-onboarding.js';
12
+ import { ensureFamilyOrganizationRegistrationWithDeps, } from './family-organization-registration.js';
13
+ import { searchFamilyOrganizationWithDeps } from './family-organization-search.js';
10
14
  import { requestSmartTokenWithDeps } from './smart-token.js';
11
15
  import { extractOfferIdFromResponseBody, extractOfferPreviewFromResponseBody, } from './order-offer-summary.js';
12
16
  import { confirmOrganizationLicenseOrderWithDeps } from './organization-license-order.js';
13
17
  import { startIndividualOrganizationWithDeps } from './individual-start.js';
14
- import { createOrganizationEmployeeWithDeps, disableIndividualMemberWithDeps, disableIndividualOrganizationWithDeps, disableOrganizationEmployeeWithDeps, listIndividualLicenseOffersWithDeps, listIndividualLicenseOrdersWithDeps, listIndividualLicensesWithDeps, listOrganizationLicenseOffersWithDeps, listOrganizationLicenseOrdersWithDeps, listOrganizationLicensesWithDeps, grantProfessionalAccessWithDeps, ingestCommunicationAndUpdateIndexWithDeps, purgeIndividualMemberWithDeps, purgeIndividualOrganizationWithDeps, purgeOrganizationEmployeeWithDeps, searchIndividualLicensesWithDeps, searchIndividualLicenseOffersWithDeps, searchIndividualLicenseOrdersWithDeps, searchOrganizationLicensesWithDeps, searchOrganizationLicenseOffersWithDeps, searchOrganizationLicenseOrdersWithDeps, searchOrganizationEmployeesWithDeps, searchClinicalBundleWithDeps, searchLatestIpsWithDeps, upsertRelatedPersonAndPollWithDeps, } from './resource-operations.js';
18
+ import { createOrganizationEmployeeWithDeps, disableIndividualMemberWithDeps, disableIndividualOrganizationWithDeps, disableOrganizationEmployeeWithDeps, listIndividualLicenseOffersWithDeps, listIndividualLicenseOrdersWithDeps, listIndividualLicensesWithDeps, listOrganizationLicenseOffersWithDeps, listOrganizationLicenseOrdersWithDeps, listOrganizationLicensesWithDeps, grantProfessionalAccessWithDeps, ingestCommunicationAndUpdateIndexWithDeps, revokeProfessionalAccessWithDeps, searchCommunicationParticipantsWithDeps, purgeIndividualMemberWithDeps, purgeIndividualOrganizationWithDeps, purgeOrganizationEmployeeWithDeps, searchIndividualLicensesWithDeps, searchIndividualLicenseOffersWithDeps, searchIndividualLicenseOrdersWithDeps, searchOrganizationLicensesWithDeps, searchOrganizationLicenseOffersWithDeps, searchOrganizationLicenseOrdersWithDeps, searchOrganizationEmployeesWithDeps, searchClinicalBundleWithDeps, searchLatestIpsWithDeps, upsertRelatedPersonAndPollWithDeps, } from './resource-operations.js';
15
19
  import { submitAndPollWithMethods } from './orchestration/client-port.js';
16
20
  import { GwCoreLifecycleAction } from './constants/lifecycle.js';
17
21
  const bootstrapFacade = createBootstrapFacade();
@@ -82,7 +86,7 @@ export class HttpRuntimeClient {
82
86
  * Submits a batch payload to a gateway batch endpoint.
83
87
  */
84
88
  async submitBatch(path, payload) {
85
- return this.postJson(path, payload, 'application/didcomm-plaintext+json');
89
+ return this.postJson(path, payload, DIDCOMM_PLAINTEXT_JSON_MEDIA_TYPE);
86
90
  }
87
91
  /**
88
92
  * Polls a batch-response endpoint until the GW reports a terminal state.
@@ -96,9 +100,67 @@ export class HttpRuntimeClient {
96
100
  async submitAndPoll(submitPath, pollPath, payload, pollOptions) {
97
101
  return submitAndPollWithMethods(this, submitPath, pollPath, payload, pollOptions);
98
102
  }
103
+ /**
104
+ * Starts the host-side legal-organization verification transaction that GW
105
+ * CORE forwards to ICA `_verify`.
106
+ *
107
+ * Runtime ownership:
108
+ * - builds the canonical shared business bundle from `sdk-core/common-utils`
109
+ * - keeps communication/runtime transport concerns at the outer message layer
110
+ * - keeps the controller business key inside the submitted bundle payload
111
+ *
112
+ * Flow separation:
113
+ * - `_transaction` is the new host onboarding step
114
+ * - this runtime does not chain `_activate` after `_transaction`
115
+ * - `_activate` remains available only for the older ICA `_verify` based flow
116
+ */
117
+ async submitLegalOrganizationVerificationTransaction(hostCtx, input, pollOptions) {
118
+ const thid = `organization-verification-transaction-${runtimeUuid()}`;
119
+ const jti = `organization-verification-transaction-jti-${runtimeUuid()}`;
120
+ const verificationBundle = buildLegalOrganizationVerificationGatewayRequestBundle(input);
121
+ const payload = this.wrapBundleAsGatewayTransactionMessage({
122
+ thid,
123
+ jti,
124
+ hostCtx,
125
+ bundle: verificationBundle,
126
+ });
127
+ return this.submitAndPoll(this.hostRegistryOrganizationTransactionPath(hostCtx), this.hostRegistryOrganizationTransactionPollPath(hostCtx), payload, pollOptions);
128
+ }
129
+ /**
130
+ * Submits one tenant-scoped DID document binding request.
131
+ *
132
+ * Binding semantics:
133
+ * - the tenant path identifies the existing organization
134
+ * - `organization.url` carries the public alias/domain list
135
+ * - `controller.sameAs` is optional corroborating identity material
136
+ * - the flow does not rotate or replace organization public keys
137
+ */
138
+ async submitOrganizationDidBinding(ctx, input, pollOptions) {
139
+ const thid = `organization-did-binding-${runtimeUuid()}`;
140
+ const jti = `organization-did-binding-jti-${runtimeUuid()}`;
141
+ const payload = {
142
+ jti,
143
+ thid,
144
+ type: 'application/api+json',
145
+ body: buildOrganizationDidBindingBundle(input),
146
+ };
147
+ return this.submitAndPoll(this.organizationDidBindingPath(ctx), this.organizationDidBindingPollPath(ctx), payload, pollOptions);
148
+ }
99
149
  /**
100
150
  * Activates a legal organization in the gateway host registry using an ICA
101
151
  * proof token already obtained by the caller.
152
+ *
153
+ * Plaintext transport note:
154
+ * - this Node runtime currently submits `_activate` as
155
+ * `application/didcomm-plaintext+json`
156
+ * - because there is no real outer JWS/JWE envelope in that mode, the
157
+ * runtime mirrors the technical communication metadata derived from
158
+ * `controller.publicKeyJwk` / `controller.jwks` into `meta.jws.protected`
159
+ * and `meta.jwe.header`
160
+ * - secure JOSE transports should carry those values in the real protected
161
+ * headers instead of plaintext `meta`
162
+ * - this mirrored metadata is transport fallback only; the canonical
163
+ * activation contract remains `body.vp_token` plus `body.controller.*`
102
164
  */
103
165
  async activateOrganizationInGatewayFromIcaProof(hostCtx, input, pollOptions) {
104
166
  const thid = `activate-org-${runtimeUuid()}`;
@@ -109,11 +171,16 @@ export class HttpRuntimeClient {
109
171
  additionalClaims: input.additionalClaims,
110
172
  });
111
173
  const serviceClaims = activationDraft.buildServiceClaims();
174
+ const transportMeta = buildDidcommPlaintextTransportMetadata({
175
+ controller: input.controller,
176
+ contentType: 'application/didcomm-plaintext+json',
177
+ });
112
178
  const payload = {
113
179
  thid,
114
180
  iss: String(hostCtx.controllerDid || '').trim() || undefined,
115
181
  aud: String(hostCtx.hostDid || '').trim() || undefined,
116
182
  type: 'application/api+json',
183
+ ...(transportMeta ? { meta: transportMeta } : {}),
117
184
  body: {
118
185
  vp_token: input.vpToken,
119
186
  ...(input.controller ? { controller: input.controller } : {}),
@@ -365,6 +432,38 @@ export class HttpRuntimeClient {
365
432
  getOfferPreviewFromResponse: (result) => extractOfferPreviewFromResponseBody(result.poll.body),
366
433
  });
367
434
  }
435
+ /**
436
+ * Searches one existing family/individual registration by controller phone +
437
+ * usualname, with optional birth-date disambiguation.
438
+ */
439
+ async searchFamilyOrganization(ctx, input) {
440
+ return searchFamilyOrganizationWithDeps({
441
+ routeCtx: ctx,
442
+ input,
443
+ defaultTimeoutMs: 20000,
444
+ defaultIntervalMs: 1000,
445
+ individualFamilyOrganizationSearchPath: this.individualFamilyOrganizationSearchPath.bind(this),
446
+ individualFamilyOrganizationSearchPollPath: this.individualFamilyOrganizationSearchPollPath.bind(this),
447
+ submitAndPoll: this.submitAndPoll.bind(this),
448
+ });
449
+ }
450
+ /**
451
+ * Searches one existing family/individual registration and starts the
452
+ * bootstrap flow only when the registration does not already exist.
453
+ */
454
+ async ensureFamilyOrganizationRegistration(ctx, input) {
455
+ return ensureFamilyOrganizationRegistrationWithDeps({
456
+ routeCtx: ctx,
457
+ input,
458
+ defaultTimeoutMs: 20000,
459
+ defaultIntervalMs: 1000,
460
+ individualFamilyOrganizationSearchPath: this.individualFamilyOrganizationSearchPath.bind(this),
461
+ individualFamilyOrganizationSearchPollPath: this.individualFamilyOrganizationSearchPollPath.bind(this),
462
+ individualFamilyOrganizationBatchPath: this.individualFamilyOrganizationTransactionPath.bind(this),
463
+ individualFamilyOrganizationPollPath: this.individualFamilyOrganizationTransactionPollPath.bind(this),
464
+ submitAndPoll: this.submitAndPoll.bind(this),
465
+ });
466
+ }
368
467
  /**
369
468
  * Confirms the order returned by `startIndividualOrganization(...)`.
370
469
  */
@@ -501,6 +600,17 @@ export class HttpRuntimeClient {
501
600
  submitAndPoll: this.submitAndPoll.bind(this),
502
601
  });
503
602
  }
603
+ /**
604
+ * Closes an existing professional consent by setting its period end and
605
+ * resubmitting the updated consent resource.
606
+ */
607
+ async revokeProfessionalAccess(ctx, input) {
608
+ return revokeProfessionalAccessWithDeps(ctx, input, {
609
+ individualConsentR4BatchPath: this.individualConsentR4BatchPath.bind(this),
610
+ individualConsentR4PollPath: this.individualConsentR4PollPath.bind(this),
611
+ submitAndPoll: this.submitAndPoll.bind(this),
612
+ });
613
+ }
504
614
  /**
505
615
  * Requests SMART/OpenID token material through the gateway.
506
616
  *
@@ -550,6 +660,17 @@ export class HttpRuntimeClient {
550
660
  submitAndPoll: this.submitAndPoll.bind(this),
551
661
  });
552
662
  }
663
+ /**
664
+ * Searches communication channel records by subject and participant
665
+ * identifiers through `Communication/_search`.
666
+ */
667
+ async searchCommunicationParticipants(ctx, input) {
668
+ return searchCommunicationParticipantsWithDeps(ctx, input, {
669
+ communicationSearchPath: this.individualCommunicationSearchPath.bind(this),
670
+ communicationSearchPollPath: this.individualCommunicationSearchPollPath.bind(this),
671
+ submitAndPoll: this.submitAndPoll.bind(this),
672
+ });
673
+ }
553
674
  /**
554
675
  * Alias for `ingestCommunicationAndUpdateIndex(...)`.
555
676
  *
@@ -648,7 +769,7 @@ export class HttpRuntimeClient {
648
769
  const headers = {
649
770
  ...this.defaultHeaders,
650
771
  'Content-Type': contentType,
651
- Accept: 'application/json, application/didcomm-plaintext+json, */*',
772
+ Accept: DIDCOMM_DEFAULT_ACCEPT_HEADER,
652
773
  };
653
774
  if (this.bearerToken)
654
775
  headers.Authorization = `Bearer ${this.bearerToken}`;
@@ -723,18 +844,57 @@ export class HttpRuntimeClient {
723
844
  ? { tenantId, jurisdiction: input.jurisdiction, sector: input.sector }
724
845
  : undefined);
725
846
  }
847
+ /**
848
+ * Reuses the shared bundle business contract while keeping attachment
849
+ * transport fields at the DIDComm/plaintext message layer expected by GW.
850
+ */
851
+ wrapBundleAsGatewayTransactionMessage(input) {
852
+ const rawBundle = (input.bundle || {});
853
+ const attachments = Array.isArray(rawBundle.attachments) ? rawBundle.attachments : undefined;
854
+ const { attachments: _ignoredAttachments, ...body } = rawBundle;
855
+ return {
856
+ jti: input.jti,
857
+ thid: input.thid,
858
+ iss: String(input.hostCtx.controllerDid || '').trim() || undefined,
859
+ aud: String(input.hostCtx.hostDid || '').trim() || undefined,
860
+ type: 'application/api+json',
861
+ body,
862
+ ...(attachments && attachments.length > 0 ? { attachments } : {}),
863
+ };
864
+ }
726
865
  hostRegistryPath(ctx, resourceType, action) {
727
866
  const hostCtx = this.requireHostRouteContext(ctx);
728
867
  return `/host/cds-${encodeURIComponent(hostCtx.jurisdiction)}/v1/${encodeURIComponent(hostCtx.hostNetwork || '')}/registry/org.schema/${encodeURIComponent(resourceType)}/${encodeURIComponent(action)}`;
729
868
  }
869
+ /**
870
+ * Resolves the host route segment without forcing callers to remember whether
871
+ * the same raw string is named `hostNetwork` or `sector` in a given layer.
872
+ *
873
+ * Step by step:
874
+ * - host routes use `/host/cds-{jurisdiction}/v1/{host-network}`
875
+ * - tenant routes use `/{tenantId}/cds-{jurisdiction}/v1/{tenant-sector}`
876
+ * - older live tests and adapters sometimes passed the host segment under
877
+ * `sector`, which is semantically wrong for host routes
878
+ * - new code should prefer `hostNetwork`
879
+ * - compatibility code may pass `hostNetworkOrTenantSector`
880
+ */
730
881
  requireHostRouteContext(ctx) {
882
+ const hostCtx = (ctx || {});
731
883
  const runtimeCtx = (this.ctx || {});
732
- const jurisdiction = String(ctx?.jurisdiction || this.ctx?.jurisdiction || '').trim();
733
- const hostNetwork = String(ctx?.hostNetwork || ctx?.sector || runtimeCtx.hostNetwork || runtimeCtx.sector || '').trim();
884
+ const jurisdiction = String(hostCtx.jurisdiction || this.ctx?.jurisdiction || '').trim();
885
+ const hostNetwork = String(hostCtx.hostNetwork
886
+ || hostCtx.hostNetworkOrTenantSector
887
+ || hostCtx.sector
888
+ || runtimeCtx.hostNetwork
889
+ || runtimeCtx.hostNetworkOrTenantSector
890
+ || runtimeCtx.sector
891
+ || '').trim();
734
892
  if (!jurisdiction || !hostNetwork)
735
893
  throw new Error('Host route context is required.');
736
894
  return { jurisdiction, hostNetwork };
737
895
  }
896
+ hostRegistryOrganizationTransactionPath(ctx) { return this.hostRegistryPath(ctx, 'Organization', GwCoreLifecycleAction.Transaction); }
897
+ hostRegistryOrganizationTransactionPollPath(ctx) { return this.hostRegistryPath(ctx, 'Organization', GwCoreLifecycleAction.TransactionResponse); }
738
898
  hostRegistryOrganizationActivatePath(ctx) { return this.hostRegistryPath(ctx, 'Organization', '_activate'); }
739
899
  hostRegistryOrganizationActivatePollPath(ctx) { return this.hostRegistryPath(ctx, 'Organization', '_activate-response'); }
740
900
  hostRegistryOrganizationDisablePath(ctx) { return this.hostRegistryPath(ctx, 'Organization', GwCoreLifecycleAction.Disable); }
@@ -749,6 +909,14 @@ export class HttpRuntimeClient {
749
909
  employeeSearchPollPath(ctx) { return this.v1Path(ctx, 'entity', 'org.schema', 'Employee', '_search-response'); }
750
910
  organizationLicenseSearchPath(ctx) { return this.v1Path(ctx, 'entity', 'org.schema', 'License', '_search'); }
751
911
  organizationLicenseSearchPollPath(ctx) { return this.v1Path(ctx, 'entity', 'org.schema', 'License', '_search-response'); }
912
+ organizationDidBindingPath(ctx) {
913
+ const resolved = this.requireRouteContext(ctx);
914
+ return `/${encodeURIComponent(resolved.tenantId)}/cds-${encodeURIComponent(resolved.jurisdiction)}/v1/${encodeURIComponent(resolved.sector)}/did/document/_binding`;
915
+ }
916
+ organizationDidBindingPollPath(ctx) {
917
+ const resolved = this.requireRouteContext(ctx);
918
+ return `/${encodeURIComponent(resolved.tenantId)}/cds-${encodeURIComponent(resolved.jurisdiction)}/v1/${encodeURIComponent(resolved.sector)}/did/document/_binding-response`;
919
+ }
752
920
  organizationLicenseOfferSearchPath(ctx) { return this.v1Path(ctx, 'entity', 'org.schema', 'Offer', '_search'); }
753
921
  organizationLicenseOfferSearchPollPath(ctx) { return this.v1Path(ctx, 'entity', 'org.schema', 'Offer', '_search-response'); }
754
922
  organizationLicenseOrderSearchPath(ctx) { return this.v1Path(ctx, 'entity', 'org.schema', 'Order', '_search'); }
@@ -757,6 +925,8 @@ export class HttpRuntimeClient {
757
925
  employeePurgePollPath(ctx) { return this.v1Path(ctx, 'entity', 'org.schema', 'Employee', `${GwCoreLifecycleAction.Purge}-response`); }
758
926
  individualFamilyOrganizationBatchPath(ctx) { return this.v1Path(ctx, 'individual', 'org.schema', 'Organization', GwCoreLifecycleAction.Batch); }
759
927
  individualFamilyOrganizationPollPath(ctx) { return this.v1Path(ctx, 'individual', 'org.schema', 'Organization', GwCoreLifecycleAction.BatchResponse); }
928
+ individualFamilyOrganizationSearchPath(ctx) { return this.v1Path(ctx, 'individual', 'org.schema', 'Organization', '_search'); }
929
+ individualFamilyOrganizationSearchPollPath(ctx) { return this.v1Path(ctx, 'individual', 'org.schema', 'Organization', '_search-response'); }
760
930
  individualFamilyOrganizationTransactionPath(ctx) { return this.v1Path(ctx, 'individual', 'org.schema', 'Organization', GwCoreLifecycleAction.Transaction); }
761
931
  individualFamilyOrganizationTransactionPollPath(ctx) { return this.v1Path(ctx, 'individual', 'org.schema', 'Organization', GwCoreLifecycleAction.TransactionResponse); }
762
932
  individualFamilyOrganizationDisablePath(ctx) { return this.v1Path(ctx, 'individual', 'org.schema', 'Organization', GwCoreLifecycleAction.Disable); }
@@ -779,6 +949,8 @@ export class HttpRuntimeClient {
779
949
  individualConsentR4PollPath(ctx) { return this.v1Path(ctx, 'individual', 'org.hl7.fhir.r4', 'Consent', '_batch-response'); }
780
950
  individualCommunicationBatchPath(ctx, format) { return this.v1Path(ctx, 'individual', format, 'Communication', '_batch'); }
781
951
  individualCommunicationPollPath(ctx, format) { return this.v1Path(ctx, 'individual', format, 'Communication', '_batch-response'); }
952
+ individualCommunicationSearchPath(ctx) { return this.v1Path(ctx, 'individual', 'org.hl7.fhir.r4', 'Communication', '_search'); }
953
+ individualCommunicationSearchPollPath(ctx) { return this.v1Path(ctx, 'individual', 'org.hl7.fhir.r4', 'Communication', '_search-response'); }
782
954
  individualBundleSearchPath(ctx) { return this.v1Path(ctx, 'individual', 'org.hl7.fhir.r4', 'Bundle', '_search'); }
783
955
  individualBundleSearchPollPath(ctx) { return this.v1Path(ctx, 'individual', 'org.hl7.fhir.r4', 'Bundle', '_search-response'); }
784
956
  identityTokenExchangePath(ctx) {
@@ -1,4 +1,7 @@
1
1
  import type { ControllerBindingInput } from 'gdc-common-utils-ts/models';
2
+ import type { FamilyOrganizationSummary } from 'gdc-common-utils-ts/utils/family-organization-summary';
3
+ import type { LegalOrganizationVerificationTransactionInput } from 'gdc-common-utils-ts/utils/legal-organization-verification-transaction';
4
+ import type { OrganizationDidBindingInput } from 'gdc-sdk-core-ts';
2
5
  import type { LicenseListRuntimeSearchInput, LicenseOfferRuntimeSearchInput, LicenseOrderRuntimeSearchInput } from '../resource-operations.js';
3
6
  import type { AsyncPollRequest, OrganizationActivationServiceOptions, PollOptions, PollResult, SubmitAndPollResult, SubmitPayload, SubmitResponse } from 'gdc-sdk-core-ts';
4
7
  export type { AsyncPollRequest, PollOptions, PollResult, SubmitAndPollResult, SubmitPayload, SubmitResponse, } from 'gdc-sdk-core-ts';
@@ -6,9 +9,11 @@ import type { EmployeeDeviceActivationResult, EmployeeDeviceActivationRequestInp
6
9
  import type { HostRouteContext, HostedTenantLifecycleInput, LegalOrganizationOrderInput } from '../host-onboarding.js';
7
10
  import type { IndividualOrganizationConfirmOrderInput, RouteContext } from '../individual-onboarding.js';
8
11
  import type { IndividualOrganizationBootstrapInput, IndividualOrganizationStartResult } from '../individual-start.js';
12
+ import type { FamilyOrganizationSearchInput } from '../family-organization-search.js';
13
+ import type { EnsureFamilyOrganizationRegistrationInput, EnsureFamilyOrganizationRegistrationResult } from '../family-organization-registration.js';
9
14
  import type { OrganizationLicenseOrderConfirmInput } from '../organization-license-order.js';
10
15
  import type { SmartTokenExchangeResult, SmartTokenRequestInput } from '../smart-token.js';
11
- import type { CommunicationIngestionInput, ClinicalBundleSearchInput, DigitalTwinGenerationInput, GrantProfessionalAccessInput, GrantProfessionalAccessResult, IndividualMemberLifecycleInput, IndividualOrganizationLifecycleInput, IpsOrFhirImportInput, OrganizationEmployeeCreationInput, OrganizationEmployeeLifecycleInput, OrganizationEmployeeSearchInput, RelatedPersonUpsertInput } from '../resource-operations.js';
16
+ import type { CommunicationIngestionInput, CommunicationParticipantRuntimeSearchInput, ClinicalBundleSearchInput, DigitalTwinGenerationInput, GrantProfessionalAccessInput, GrantProfessionalAccessResult, IndividualMemberLifecycleInput, IndividualOrganizationLifecycleInput, IpsOrFhirImportInput, OrganizationEmployeeCreationInput, OrganizationEmployeeLifecycleInput, OrganizationEmployeeSearchInput, RevokeProfessionalAccessInput, RevokeProfessionalAccessResult, RelatedPersonUpsertInput } from '../resource-operations.js';
12
17
  /**
13
18
  * Shared node-runtime activation input.
14
19
  *
@@ -21,6 +26,25 @@ export type NodeOrganizationActivationInput = {
21
26
  service?: OrganizationActivationServiceOptions;
22
27
  additionalClaims?: Record<string, unknown>;
23
28
  };
29
+ /**
30
+ * Shared node-runtime input for the first host-side legal-organization
31
+ * verification step.
32
+ *
33
+ * The business payload is owned by shared SDK/common packages:
34
+ * - transport/runtime communication keys stay outside this contract
35
+ * - controller business key binding remains in `controller.*`
36
+ * - GW CORE host routing/polling stays in the runtime adapter
37
+ */
38
+ export type NodeLegalOrganizationVerificationTransactionInput = LegalOrganizationVerificationTransactionInput;
39
+ /**
40
+ * Shared node-runtime input for the organization DID binding operation.
41
+ *
42
+ * Binding contract:
43
+ * - tenant identity is resolved from the route path
44
+ * - `organization.url` carries one or more public aliases/domains
45
+ * - `controller.sameAs` is optional corroborating identity evidence
46
+ */
47
+ export type NodeOrganizationDidBindingInput = OrganizationDidBindingInput;
24
48
  /**
25
49
  * Runtime-neutral actor/application client contract as exposed by the Node SDK.
26
50
  *
@@ -29,6 +53,8 @@ export type NodeOrganizationActivationInput = {
29
53
  * converge across runtimes.
30
54
  */
31
55
  export type RuntimeClient = {
56
+ submitLegalOrganizationVerificationTransaction?: (hostCtx: HostRouteContext, input: NodeLegalOrganizationVerificationTransactionInput, pollOptions?: PollOptions) => Promise<SubmitAndPollResult>;
57
+ submitOrganizationDidBinding?: (ctx: RouteContext, input: NodeOrganizationDidBindingInput, pollOptions?: PollOptions) => Promise<SubmitAndPollResult>;
32
58
  activateOrganizationInGatewayFromIcaProof?: (hostCtx: HostRouteContext, input: NodeOrganizationActivationInput, pollOptions?: PollOptions) => Promise<SubmitAndPollResult>;
33
59
  confirmLegalOrganizationOrder?: (hostCtx: HostRouteContext, input: LegalOrganizationOrderInput, pollOptions?: PollOptions) => Promise<SubmitAndPollResult>;
34
60
  disableHost?: (hostCtx: HostRouteContext, input: HostedTenantLifecycleInput, pollOptions?: PollOptions) => Promise<SubmitAndPollResult>;
@@ -51,6 +77,8 @@ export type RuntimeClient = {
51
77
  activateEmployeeDeviceWithActivationRequest?: (input: EmployeeDeviceActivationRequestInput) => Promise<EmployeeDeviceActivationResult>;
52
78
  requestSmartToken?: (input: SmartTokenRequestInput) => Promise<SmartTokenExchangeResult>;
53
79
  startIndividualOrganization?: (input: IndividualOrganizationBootstrapInput) => Promise<IndividualOrganizationStartResult>;
80
+ searchFamilyOrganization?: (ctx: RouteContext, input: FamilyOrganizationSearchInput) => Promise<FamilyOrganizationSummary | null>;
81
+ ensureFamilyOrganizationRegistration?: (ctx: RouteContext, input: EnsureFamilyOrganizationRegistrationInput) => Promise<EnsureFamilyOrganizationRegistrationResult>;
54
82
  confirmIndividualOrganizationOrder?: (input: IndividualOrganizationConfirmOrderInput) => Promise<SubmitAndPollResult>;
55
83
  disableIndividual?: (ctx: RouteContext, input: IndividualOrganizationLifecycleInput, pollOptions?: PollOptions) => Promise<SubmitAndPollResult>;
56
84
  purgeIndividual?: (ctx: RouteContext, input: IndividualOrganizationLifecycleInput, pollOptions?: PollOptions) => Promise<SubmitAndPollResult>;
@@ -59,7 +87,9 @@ export type RuntimeClient = {
59
87
  disableIndividualOrganization?: (ctx: RouteContext, input: IndividualOrganizationLifecycleInput, pollOptions?: PollOptions) => Promise<SubmitAndPollResult>;
60
88
  purgeIndividualOrganization?: (ctx: RouteContext, input: IndividualOrganizationLifecycleInput, pollOptions?: PollOptions) => Promise<SubmitAndPollResult>;
61
89
  ingestCommunicationAndUpdateIndex?: (ctx: RouteContext, input: CommunicationIngestionInput) => Promise<SubmitAndPollResult>;
90
+ searchCommunicationParticipants?: (ctx: RouteContext, input: CommunicationParticipantRuntimeSearchInput) => Promise<SubmitAndPollResult>;
62
91
  grantProfessionalAccess?: (ctx: RouteContext, input: GrantProfessionalAccessInput) => Promise<GrantProfessionalAccessResult>;
92
+ revokeProfessionalAccess?: (ctx: RouteContext, input: RevokeProfessionalAccessInput) => Promise<RevokeProfessionalAccessResult>;
63
93
  searchIndividualLicenses?: (ctx: RouteContext, input: LicenseListRuntimeSearchInput) => Promise<SubmitAndPollResult>;
64
94
  listIndividualLicenses?: (ctx: RouteContext, input?: LicenseListRuntimeSearchInput) => Promise<SubmitAndPollResult>;
65
95
  searchIndividualLicenseOffers?: (ctx: RouteContext, input: LicenseOfferRuntimeSearchInput) => Promise<SubmitAndPollResult>;
@@ -1,8 +1,11 @@
1
1
  import { type NodeRuntimeClient, type PollOptions, type SubmitAndPollResult, type SubmitPayload } from './client-port.js';
2
+ import type { FamilyOrganizationSummary } from 'gdc-common-utils-ts/utils/family-organization-summary';
3
+ import type { EnsureFamilyOrganizationRegistrationInput, EnsureFamilyOrganizationRegistrationResult } from '../family-organization-registration.js';
4
+ import type { FamilyOrganizationSearchInput } from '../family-organization-search.js';
2
5
  import type { IndividualOrganizationConfirmOrderInput, RouteContext } from '../individual-onboarding.js';
3
6
  import type { IndividualOrganizationBootstrapInput, IndividualOrganizationStartResult } from '../individual-start.js';
4
7
  import type { NodeCapability } from '../session.js';
5
- import type { ClinicalBundleSearchInput, CommunicationIngestionInput, DigitalTwinGenerationInput, GrantProfessionalAccessInput, GrantProfessionalAccessResult, IndividualMemberLifecycleInput, IndividualOrganizationLifecycleInput, IpsOrFhirImportInput, LicenseListRuntimeSearchInput, LicenseOfferRuntimeSearchInput, LicenseOrderRuntimeSearchInput, RelatedPersonUpsertInput } from '../resource-operations.js';
8
+ import type { ClinicalBundleSearchInput, CommunicationIngestionInput, CommunicationParticipantRuntimeSearchInput, DigitalTwinGenerationInput, GrantProfessionalAccessInput, GrantProfessionalAccessResult, IndividualMemberLifecycleInput, IndividualOrganizationLifecycleInput, IpsOrFhirImportInput, LicenseListRuntimeSearchInput, LicenseOfferRuntimeSearchInput, LicenseOrderRuntimeSearchInput, RevokeProfessionalAccessInput, RevokeProfessionalAccessResult, RelatedPersonUpsertInput } from '../resource-operations.js';
6
9
  import type { SmartTokenExchangeResult, SmartTokenRequestInput } from '../smart-token.js';
7
10
  /**
8
11
  * Individual-controller oriented facade over a `NodeRuntimeClient`.
@@ -21,6 +24,16 @@ export declare class IndividualControllerSdk {
21
24
  * Starts the individual onboarding/bootstrap flow.
22
25
  */
23
26
  startIndividualOrganization(input: IndividualOrganizationBootstrapInput): Promise<IndividualOrganizationStartResult>;
27
+ /**
28
+ * Searches one existing family/individual registration by the phone-first
29
+ * business key used by channel apps.
30
+ */
31
+ searchFamilyOrganization(ctx: RouteContext, input: FamilyOrganizationSearchInput): Promise<FamilyOrganizationSummary | null>;
32
+ /**
33
+ * Searches one existing family/individual registration and starts the
34
+ * bootstrap flow only when the registration is still missing.
35
+ */
36
+ ensureFamilyOrganizationRegistration(ctx: RouteContext, input: EnsureFamilyOrganizationRegistrationInput): Promise<EnsureFamilyOrganizationRegistrationResult>;
24
37
  /**
25
38
  * Confirms the order returned by `startIndividualOrganization(...)`.
26
39
  */
@@ -59,6 +72,10 @@ export declare class IndividualControllerSdk {
59
72
  * Grants access to a professional through a consent flow.
60
73
  */
61
74
  grantProfessionalAccess(ctx: RouteContext, input: GrantProfessionalAccessInput): Promise<GrantProfessionalAccessResult>;
75
+ /**
76
+ * Closes an existing professional consent by setting its period end.
77
+ */
78
+ revokeProfessionalAccess(ctx: RouteContext, input: RevokeProfessionalAccessInput): Promise<RevokeProfessionalAccessResult>;
62
79
  /**
63
80
  * Imports a FHIR/IPS payload and waits until it is indexed.
64
81
  */
@@ -71,6 +88,11 @@ export declare class IndividualControllerSdk {
71
88
  * Ingests a FHIR `Communication` and waits for indexing.
72
89
  */
73
90
  ingestCommunicationAndUpdateIndex(ctx: RouteContext, input: CommunicationIngestionInput): Promise<SubmitAndPollResult>;
91
+ /**
92
+ * Searches indexed communication channel records by subject and participant
93
+ * identifiers.
94
+ */
95
+ searchCommunicationParticipants(ctx: RouteContext, input: CommunicationParticipantRuntimeSearchInput): Promise<SubmitAndPollResult>;
74
96
  /**
75
97
  * Generates a digital twin projection from subject data.
76
98
  */
@@ -23,6 +23,20 @@ export class IndividualControllerSdk {
23
23
  assertFacadeCapability(this.capabilities, ActorCapabilities.IndividualBootstrap, ActorKinds.IndividualController, 'startIndividualOrganization');
24
24
  return requireClientMethod(this.client, 'startIndividualOrganization')(input);
25
25
  }
26
+ /**
27
+ * Searches one existing family/individual registration by the phone-first
28
+ * business key used by channel apps.
29
+ */
30
+ searchFamilyOrganization(ctx, input) {
31
+ return requireClientMethod(this.client, 'searchFamilyOrganization')(ctx, input);
32
+ }
33
+ /**
34
+ * Searches one existing family/individual registration and starts the
35
+ * bootstrap flow only when the registration is still missing.
36
+ */
37
+ ensureFamilyOrganizationRegistration(ctx, input) {
38
+ return requireClientMethod(this.client, 'ensureFamilyOrganizationRegistration')(ctx, input);
39
+ }
26
40
  /**
27
41
  * Confirms the order returned by `startIndividualOrganization(...)`.
28
42
  */
@@ -85,6 +99,13 @@ export class IndividualControllerSdk {
85
99
  assertFacadeCapability(this.capabilities, ActorCapabilities.ConsentGrantProfessionalAccess, ActorKinds.IndividualController, 'grantProfessionalAccess');
86
100
  return requireClientMethod(this.client, 'grantProfessionalAccess')(ctx, input);
87
101
  }
102
+ /**
103
+ * Closes an existing professional consent by setting its period end.
104
+ */
105
+ revokeProfessionalAccess(ctx, input) {
106
+ assertFacadeCapability(this.capabilities, ActorCapabilities.ConsentGrantProfessionalAccess, ActorKinds.IndividualController, 'revokeProfessionalAccess');
107
+ return requireClientMethod(this.client, 'revokeProfessionalAccess')(ctx, input);
108
+ }
88
109
  /**
89
110
  * Imports a FHIR/IPS payload and waits until it is indexed.
90
111
  */
@@ -106,6 +127,13 @@ export class IndividualControllerSdk {
106
127
  assertFacadeCapability(this.capabilities, ActorCapabilities.IndividualIngestCommunication, ActorKinds.IndividualController, 'ingestCommunicationAndUpdateIndex');
107
128
  return requireClientMethod(this.client, 'ingestCommunicationAndUpdateIndex')(ctx, input);
108
129
  }
130
+ /**
131
+ * Searches indexed communication channel records by subject and participant
132
+ * identifiers.
133
+ */
134
+ searchCommunicationParticipants(ctx, input) {
135
+ return requireClientMethod(this.client, 'searchCommunicationParticipants')(ctx, input);
136
+ }
109
137
  /**
110
138
  * Generates a digital twin projection from subject data.
111
139
  */
@@ -1,4 +1,4 @@
1
- import { type NodeRuntimeClient, type PollOptions, type SubmitAndPollResult, type SubmitPayload } from './client-port.js';
1
+ import { type NodeOrganizationDidBindingInput, type NodeLegalOrganizationVerificationTransactionInput, type NodeRuntimeClient, type PollOptions, type SubmitAndPollResult, type SubmitPayload } from './client-port.js';
2
2
  import type { RouteContext } from '../individual-onboarding.js';
3
3
  import type { HostRouteContext, HostedTenantLifecycleInput } from '../host-onboarding.js';
4
4
  import type { EmployeeDeviceActivationResult, EmployeeDeviceActivationRequestInput } from '../device-activation.js';
@@ -19,6 +19,27 @@ export declare class OrganizationControllerSdk {
19
19
  * @param client Runtime client implementation used to submit and poll GW flows.
20
20
  */
21
21
  constructor(client: NodeRuntimeClient, capabilities?: readonly NodeCapability[] | undefined);
22
+ /**
23
+ * Starts the host-side legal-organization verification transaction that GW
24
+ * CORE forwards to ICA `_verify`.
25
+ *
26
+ * This is intentionally distinct from the older host `_activate` step:
27
+ * - `_transaction` carries signed evidence and controller business binding
28
+ * - `_transaction` is complete on its own for the new flow
29
+ * - `_activate` remains only for the legacy ICA `_verify` compatibility path
30
+ */
31
+ submitLegalOrganizationVerificationTransaction(hostCtx: HostRouteContext, input: NodeLegalOrganizationVerificationTransactionInput, pollOptions?: PollOptions): Promise<SubmitAndPollResult>;
32
+ /**
33
+ * Binds the current tenant organization DID document to one public alias
34
+ * view.
35
+ *
36
+ * Contract:
37
+ * - the tenant path identifies the organization
38
+ * - `organization.url`, when present, provides the public aliases/domains to
39
+ * bind
40
+ * - `controller.sameAs` is optional corroborating identity evidence
41
+ */
42
+ submitOrganizationDidBinding(ctx: RouteContext, input: NodeOrganizationDidBindingInput, pollOptions?: PollOptions): Promise<SubmitAndPollResult>;
22
43
  /**
23
44
  * Creates an employee/professional under the current organization tenant.
24
45
  */
@@ -16,6 +16,31 @@ export class OrganizationControllerSdk {
16
16
  this.client = client;
17
17
  this.capabilities = capabilities;
18
18
  }
19
+ /**
20
+ * Starts the host-side legal-organization verification transaction that GW
21
+ * CORE forwards to ICA `_verify`.
22
+ *
23
+ * This is intentionally distinct from the older host `_activate` step:
24
+ * - `_transaction` carries signed evidence and controller business binding
25
+ * - `_transaction` is complete on its own for the new flow
26
+ * - `_activate` remains only for the legacy ICA `_verify` compatibility path
27
+ */
28
+ submitLegalOrganizationVerificationTransaction(hostCtx, input, pollOptions) {
29
+ return requireClientMethod(this.client, 'submitLegalOrganizationVerificationTransaction')(hostCtx, input, pollOptions);
30
+ }
31
+ /**
32
+ * Binds the current tenant organization DID document to one public alias
33
+ * view.
34
+ *
35
+ * Contract:
36
+ * - the tenant path identifies the organization
37
+ * - `organization.url`, when present, provides the public aliases/domains to
38
+ * bind
39
+ * - `controller.sameAs` is optional corroborating identity evidence
40
+ */
41
+ submitOrganizationDidBinding(ctx, input, pollOptions) {
42
+ return requireClientMethod(this.client, 'submitOrganizationDidBinding')(ctx, input, pollOptions);
43
+ }
19
44
  /**
20
45
  * Creates an employee/professional under the current organization tenant.
21
46
  */
@@ -1,7 +1,7 @@
1
1
  import { type NodeRuntimeClient, type PollOptions, type SubmitAndPollResult, type SubmitPayload } from './client-port.js';
2
2
  import type { IndividualOrganizationBootstrapInput, IndividualOrganizationStartResult } from '../individual-start.js';
3
3
  import type { RouteContext } from '../individual-onboarding.js';
4
- import type { ClinicalBundleSearchInput, CommunicationIngestionInput, DigitalTwinGenerationInput, GrantProfessionalAccessInput, GrantProfessionalAccessResult, IpsOrFhirImportInput, LicenseListRuntimeSearchInput, LicenseOfferRuntimeSearchInput, LicenseOrderRuntimeSearchInput } from '../resource-operations.js';
4
+ import type { ClinicalBundleSearchInput, CommunicationIngestionInput, CommunicationParticipantRuntimeSearchInput, DigitalTwinGenerationInput, GrantProfessionalAccessInput, GrantProfessionalAccessResult, IpsOrFhirImportInput, LicenseListRuntimeSearchInput, LicenseOfferRuntimeSearchInput, LicenseOrderRuntimeSearchInput } from '../resource-operations.js';
5
5
  import type { SmartTokenExchangeResult, SmartTokenRequestInput } from '../smart-token.js';
6
6
  export declare class PersonalSdk {
7
7
  private readonly client;
@@ -14,6 +14,8 @@ export declare class PersonalSdk {
14
14
  importIpsOrFhirAndUpdateIndex(ctx: RouteContext, input: IpsOrFhirImportInput): Promise<SubmitAndPollResult>;
15
15
  /** Ingests canonical Communication and waits for projection completion. */
16
16
  ingestCommunicationAndUpdateIndex(ctx: RouteContext, input: CommunicationIngestionInput): Promise<SubmitAndPollResult>;
17
+ /** Searches indexed communication channel records by subject and participant identifiers. */
18
+ searchCommunicationParticipants(ctx: RouteContext, input: CommunicationParticipantRuntimeSearchInput): Promise<SubmitAndPollResult>;
17
19
  /** Triggers digital twin generation from subject data. */
18
20
  generateDigitalTwinFromSubjectData(ctx: RouteContext, input: DigitalTwinGenerationInput): Promise<SubmitAndPollResult>;
19
21
  /** Searches indexed clinical bundles for the current subject/controller context. */
@@ -20,6 +20,10 @@ export class PersonalSdk {
20
20
  ingestCommunicationAndUpdateIndex(ctx, input) {
21
21
  return requireClientMethod(this.client, 'ingestCommunicationAndUpdateIndex')(ctx, input);
22
22
  }
23
+ /** Searches indexed communication channel records by subject and participant identifiers. */
24
+ searchCommunicationParticipants(ctx, input) {
25
+ return requireClientMethod(this.client, 'searchCommunicationParticipants')(ctx, input);
26
+ }
23
27
  /** Triggers digital twin generation from subject data. */
24
28
  generateDigitalTwinFromSubjectData(ctx, input) {
25
29
  return requireClientMethod(this.client, 'generateDigitalTwinFromSubjectData')(ctx, input);
@@ -1,7 +1,7 @@
1
1
  import { type NodeRuntimeClient, type PollOptions, type SubmitAndPollResult, type SubmitPayload } from './client-port.js';
2
2
  import type { RouteContext } from '../individual-onboarding.js';
3
3
  import type { SmartTokenExchangeResult, SmartTokenRequestInput } from '../smart-token.js';
4
- import type { CommunicationIngestionInput, GrantProfessionalAccessInput, GrantProfessionalAccessResult } from '../resource-operations.js';
4
+ import type { CommunicationIngestionInput, CommunicationParticipantRuntimeSearchInput, ClinicalBundleSearchInput, GrantProfessionalAccessInput, GrantProfessionalAccessResult } from '../resource-operations.js';
5
5
  /**
6
6
  * Professional-oriented facade for runtime actions that belong to the
7
7
  * professional actor itself after tenant and employee provisioning have already
@@ -29,10 +29,25 @@ export declare class ProfessionalSdk {
29
29
  * `NodeHttpClient({ ctx })` instead of being repeated on every call.
30
30
  */
31
31
  requestSmartToken(input: SmartTokenRequestInput): Promise<SmartTokenExchangeResult>;
32
+ /**
33
+ * Executes one clinical `Bundle/_search` using the professional actor
34
+ * session and tenant route context.
35
+ */
36
+ searchClinicalBundle(ctx: RouteContext, input: ClinicalBundleSearchInput): Promise<SubmitAndPollResult>;
37
+ /**
38
+ * Reads the latest IPS-oriented document projection available to the
39
+ * professional actor for one subject.
40
+ */
41
+ getLatestIps(ctx: RouteContext, input: Omit<ClinicalBundleSearchInput, 'includedTypes'>): Promise<SubmitAndPollResult>;
32
42
  /**
33
43
  * Ingests a FHIR `Communication` and waits for indexing.
34
44
  */
35
45
  ingestCommunicationAndUpdateIndex(ctx: RouteContext, input: CommunicationIngestionInput): Promise<SubmitAndPollResult>;
46
+ /**
47
+ * Searches indexed communication channel records by subject and participant
48
+ * identifiers.
49
+ */
50
+ searchCommunicationParticipants(ctx: RouteContext, input: CommunicationParticipantRuntimeSearchInput): Promise<SubmitAndPollResult>;
36
51
  /**
37
52
  * Grants access to a professional through a consent flow.
38
53
  */
@@ -31,12 +31,33 @@ export class ProfessionalSdk {
31
31
  requestSmartToken(input) {
32
32
  return requireClientMethod(this.client, 'requestSmartToken')(input);
33
33
  }
34
+ /**
35
+ * Executes one clinical `Bundle/_search` using the professional actor
36
+ * session and tenant route context.
37
+ */
38
+ searchClinicalBundle(ctx, input) {
39
+ return requireClientMethod(this.client, 'searchClinicalBundle')(ctx, input);
40
+ }
41
+ /**
42
+ * Reads the latest IPS-oriented document projection available to the
43
+ * professional actor for one subject.
44
+ */
45
+ getLatestIps(ctx, input) {
46
+ return requireClientMethod(this.client, 'getLatestIps')(ctx, input);
47
+ }
34
48
  /**
35
49
  * Ingests a FHIR `Communication` and waits for indexing.
36
50
  */
37
51
  ingestCommunicationAndUpdateIndex(ctx, input) {
38
52
  return requireClientMethod(this.client, 'ingestCommunicationAndUpdateIndex')(ctx, input);
39
53
  }
54
+ /**
55
+ * Searches indexed communication channel records by subject and participant
56
+ * identifiers.
57
+ */
58
+ searchCommunicationParticipants(ctx, input) {
59
+ return requireClientMethod(this.client, 'searchCommunicationParticipants')(ctx, input);
60
+ }
40
61
  /**
41
62
  * Grants access to a professional through a consent flow.
42
63
  */