gdc-sdk-node-ts 2.2.2 → 2.3.1

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 (44) hide show
  1. package/dist/backend-profile-runtime.d.ts +23 -0
  2. package/dist/backend-profile-runtime.js +23 -0
  3. package/dist/index.d.ts +2 -0
  4. package/dist/index.js +2 -0
  5. package/dist/individual-start.d.ts +33 -0
  6. package/dist/individual-start.js +45 -2
  7. package/dist/node-runtime-client.d.ts +39 -4
  8. package/dist/node-runtime-client.js +124 -4
  9. package/dist/orchestration/client-port.d.ts +4 -1
  10. package/dist/orchestration/individual-controller-sdk.d.ts +10 -1
  11. package/dist/orchestration/individual-controller-sdk.js +15 -0
  12. package/dist/orchestration/individual-member-sdk.d.ts +10 -1
  13. package/dist/orchestration/individual-member-sdk.js +15 -0
  14. package/dist/resource-operations.d.ts +111 -4
  15. package/dist/resource-operations.js +83 -3
  16. package/dist/runtime-client-paths.d.ts +6 -2
  17. package/dist/runtime-client-paths.js +4 -0
  18. package/dist/runtime-transport.d.ts +13 -1
  19. package/dist/runtime-transport.js +18 -3
  20. package/dist/server-profile-protection.d.ts +64 -0
  21. package/dist/server-profile-protection.js +110 -0
  22. package/dist/server-profile-session.d.ts +115 -0
  23. package/dist/server-profile-session.js +259 -0
  24. package/dist/session.d.ts +7 -0
  25. package/dist/session.js +10 -0
  26. package/package.json +3 -3
  27. package/dist/legal-organization-onboarding-facade.d.ts +0 -70
  28. package/dist/legal-organization-onboarding-facade.js +0 -169
  29. package/dist/lifecycle-examples.d.ts +0 -7
  30. package/dist/lifecycle-examples.js +0 -8
  31. package/dist/runtime-software-proof.d.ts +0 -51
  32. package/dist/runtime-software-proof.js +0 -34
  33. package/dist/simple-device-activation.d.ts +0 -44
  34. package/dist/simple-device-activation.js +0 -44
  35. package/dist/simple-host-onboarding.d.ts +0 -27
  36. package/dist/simple-host-onboarding.js +0 -39
  37. package/dist/simple-individual-onboarding.d.ts +0 -27
  38. package/dist/simple-individual-onboarding.js +0 -38
  39. package/dist/simple-individual-start.d.ts +0 -45
  40. package/dist/simple-individual-start.js +0 -59
  41. package/dist/simple-poll-options.d.ts +0 -5
  42. package/dist/simple-poll-options.js +0 -17
  43. package/dist/simple-smart-token.d.ts +0 -58
  44. package/dist/simple-smart-token.js +0 -85
@@ -2,6 +2,8 @@ import type { ActorProfileDescriptor, IJobManager, ActorKind, LoadedActorProfile
2
2
  import type { ActorSession } from './session.js';
3
3
  import type { RuntimeClient } from './orchestration/client-port.js';
4
4
  import { IndividualControllerSdk } from './orchestration/individual-controller-sdk.js';
5
+ import { IndividualMemberSdk } from './orchestration/individual-member-sdk.js';
6
+ import { PersonalSdk } from './orchestration/personal-sdk.js';
5
7
  import { OrganizationControllerSdk } from './orchestration/organization-controller-sdk.js';
6
8
  import { ProfessionalSdk } from './orchestration/professional-sdk.js';
7
9
  import type { RouteContext } from './individual-onboarding.js';
@@ -51,6 +53,16 @@ export type BackendIndividualControllerProfile = {
51
53
  session: ActorSession;
52
54
  sdk: IndividualControllerSdk;
53
55
  };
56
+ export type BackendPersonalProfile = {
57
+ profile: BackendLoadedActorProfile;
58
+ session: ActorSession;
59
+ sdk: PersonalSdk;
60
+ };
61
+ export type BackendIndividualMemberProfile = {
62
+ profile: BackendLoadedActorProfile;
63
+ session: ActorSession;
64
+ sdk: IndividualMemberSdk;
65
+ };
54
66
  export type BackendOrganizationControllerProfile = {
55
67
  profile: BackendLoadedActorProfile;
56
68
  session: ActorSession;
@@ -224,6 +236,10 @@ export declare function requireBackendIndividualControllerSession(profile: Backe
224
236
  * backend profile.
225
237
  */
226
238
  export declare function requireBackendIndividualControllerSdk(profile: BackendLoadedActorProfile): IndividualControllerSdk;
239
+ /** Returns the individual-member session from one loaded backend profile. */
240
+ export declare function requireBackendIndividualMemberSession(profile: BackendLoadedActorProfile): ActorSession;
241
+ /** Materializes the individual-member facade from one loaded backend profile. */
242
+ export declare function requireBackendIndividualMemberSdk(profile: BackendLoadedActorProfile): IndividualMemberSdk;
227
243
  /**
228
244
  * Returns the organization-controller session from one loaded backend profile.
229
245
  */
@@ -251,6 +267,13 @@ export declare function requireBackendProfessionalSdk(profile: BackendLoadedActo
251
267
  * from the individual-controller flow.
252
268
  */
253
269
  export declare function loadBackendIndividualControllerProfile(client: BackendProfileRuntimeClient, input: ProfileLoadRequest): Promise<BackendIndividualControllerProfile>;
270
+ /**
271
+ * Loads a self-managed individual profile. The canonical actor kind remains
272
+ * individual-controller, while PersonalSdk presents the reduced self surface.
273
+ */
274
+ export declare function loadBackendPersonalProfile(client: BackendProfileRuntimeClient, input: ProfileLoadRequest): Promise<BackendPersonalProfile>;
275
+ /** Loads an accepted individual-member/RelatedPerson backend profile. */
276
+ export declare function loadBackendIndividualMemberProfile(client: BackendProfileRuntimeClient, input: ProfileLoadRequest): Promise<BackendIndividualMemberProfile>;
254
277
  /**
255
278
  * Loads one backend profile and resolves the organization-controller session in
256
279
  * one step.
@@ -421,6 +421,14 @@ export function requireBackendIndividualControllerSession(profile) {
421
421
  export function requireBackendIndividualControllerSdk(profile) {
422
422
  return requireBackendIndividualControllerSession(profile).asIndividualController();
423
423
  }
424
+ /** Returns the individual-member session from one loaded backend profile. */
425
+ export function requireBackendIndividualMemberSession(profile) {
426
+ return requireBackendActorSession(profile, ActorKinds.IndividualMember);
427
+ }
428
+ /** Materializes the individual-member facade from one loaded backend profile. */
429
+ export function requireBackendIndividualMemberSdk(profile) {
430
+ return requireBackendIndividualMemberSession(profile).asIndividualMember();
431
+ }
424
432
  /**
425
433
  * Returns the organization-controller session from one loaded backend profile.
426
434
  */
@@ -464,6 +472,21 @@ export async function loadBackendIndividualControllerProfile(client, input) {
464
472
  sdk: session.asIndividualController(),
465
473
  };
466
474
  }
475
+ /**
476
+ * Loads a self-managed individual profile. The canonical actor kind remains
477
+ * individual-controller, while PersonalSdk presents the reduced self surface.
478
+ */
479
+ export async function loadBackendPersonalProfile(client, input) {
480
+ const profile = await loadBackendProfile(client, input);
481
+ const session = requireBackendIndividualControllerSession(profile);
482
+ return { profile, session, sdk: session.asPersonal() };
483
+ }
484
+ /** Loads an accepted individual-member/RelatedPerson backend profile. */
485
+ export async function loadBackendIndividualMemberProfile(client, input) {
486
+ const profile = await loadBackendProfile(client, input);
487
+ const session = requireBackendIndividualMemberSession(profile);
488
+ return { profile, session, sdk: session.asIndividualMember() };
489
+ }
467
490
  /**
468
491
  * Loads one backend profile and resolves the organization-controller session in
469
492
  * one step.
package/dist/index.d.ts CHANGED
@@ -3,6 +3,8 @@ export * from './runtime-contracts.js';
3
3
  export * from './identity-bootstrap.js';
4
4
  export * from './async-polling.js';
5
5
  export * from './backend-profile-runtime.js';
6
+ export * from './server-profile-session.js';
7
+ export * from './server-profile-protection.js';
6
8
  export * from './backend-profile-workspace.js';
7
9
  export * from './individual-controller-backend-runtime.js';
8
10
  export * from './organization-controller-backend-runtime.js';
package/dist/index.js CHANGED
@@ -4,6 +4,8 @@ export * from './runtime-contracts.js';
4
4
  export * from './identity-bootstrap.js';
5
5
  export * from './async-polling.js';
6
6
  export * from './backend-profile-runtime.js';
7
+ export * from './server-profile-session.js';
8
+ export * from './server-profile-protection.js';
7
9
  export * from './backend-profile-workspace.js';
8
10
  export * from './individual-controller-backend-runtime.js';
9
11
  export * from './organization-controller-backend-runtime.js';
@@ -1,3 +1,4 @@
1
+ import type { FamilyRegistrationStatus } from 'gdc-common-utils-ts/utils/family-organization-summary';
1
2
  import type { PollOptions, SubmitAndPollResult } from './orchestration/client-port.js';
2
3
  import type { RouteContext } from './individual-onboarding.js';
3
4
  import type { OfferPreview } from './order-offer-summary.js';
@@ -59,6 +60,29 @@ export type IndividualOrganizationStartResult = {
59
60
  registration: SubmitAndPollResult;
60
61
  offerId: string;
61
62
  offerPreview: OfferPreview;
63
+ /** Lifecycle state returned by GW for this registration receipt. */
64
+ registrationStatus?: FamilyRegistrationStatus;
65
+ /** False when the same family registration is already active. */
66
+ orderConfirmationRequired: boolean;
67
+ /**
68
+ * Canonical subject identity projected from the GW registration receipt.
69
+ *
70
+ * It is optional only for compatibility with older/non-conforming GW
71
+ * responses. Current GW responses expose both `resource.id` and
72
+ * `Offer.offeredBy`, allowing every BFF/channel to consume the same derived
73
+ * identity without rebuilding a provider DID from route fragments or VAT.
74
+ */
75
+ identity?: IndividualOrganizationBootstrapIdentity;
76
+ };
77
+ export type IndividualOrganizationBootstrapIdentity = {
78
+ /** Technical UUID returned as `Bundle.data[0].resource.id`. */
79
+ resourceId: string;
80
+ /** Stable UUID-byte identifier serialized as multibase base58btc. */
81
+ individualId: string;
82
+ /** Authoritative provider DID returned by GW in `Offer.offeredBy`. */
83
+ providerDidWeb: string;
84
+ /** Canonical child DID built beneath the exact provider DID returned by GW. */
85
+ subjectDid: string;
62
86
  };
63
87
  type StartIndividualOrganizationDeps = {
64
88
  input: IndividualOrganizationBootstrapInput;
@@ -75,4 +99,13 @@ type StartIndividualOrganizationDeps = {
75
99
  getOfferPreviewFromResponse: (result: SubmitAndPollResult) => OfferPreview;
76
100
  };
77
101
  export declare function startIndividualOrganizationWithDeps(deps: StartIndividualOrganizationDeps): Promise<IndividualOrganizationStartResult>;
102
+ /**
103
+ * Projects the reusable subject identity from an individual bootstrap receipt.
104
+ *
105
+ * `providerDidWeb` is deliberately read from `Offer.offeredBy` and preserved
106
+ * byte-for-byte. The provider root uses the colon-delimited
107
+ * `:organization:taxid:` DID path. `buildIndividualDidWeb(...)` only adds the
108
+ * individual suffix and never rewrites that provider lineage.
109
+ */
110
+ export declare function readIndividualOrganizationBootstrapIdentity(responseBody: unknown): IndividualOrganizationBootstrapIdentity | undefined;
78
111
  export {};
@@ -1,5 +1,6 @@
1
1
  // Copyright 2026 Antifraud Services Inc. under the Apache License, Version 2.0.
2
- import { ClaimsOrganizationSchemaorg, ClaimsPersonSchemaorg, ClaimsServiceSchemaorg, } from 'gdc-common-utils-ts/constants';
2
+ import { ClaimsOfferSchemaorg, ClaimsOrganizationSchemaorg, ClaimsPersonSchemaorg, ClaimsServiceSchemaorg, } from 'gdc-common-utils-ts/constants';
3
+ import { buildIndividualDidWeb, encodeHexToMultibase58btc, extractPrimaryClaims, readFamilyOrganizationSummaryFromResponseBody, } from 'gdc-common-utils-ts';
3
4
  import { GwCoreLifecycleRequestType } from './constants/lifecycle.js';
4
5
  import { resolvePollOptionsFromSeconds } from './poll-options.js';
5
6
  export async function startIndividualOrganizationWithDeps(deps) {
@@ -27,6 +28,7 @@ export async function startIndividualOrganizationWithDeps(deps) {
27
28
  const controllerRole = String(deps.input.controllerRole || 'RESPRSN').trim();
28
29
  const claims = {
29
30
  '@context': 'org.schema',
31
+ ...(deps.input.additionalClaims || {}),
30
32
  [ClaimsOrganizationSchemaorg.alternateName]: alternateName,
31
33
  [ClaimsServiceSchemaorg.category]: deps.routeCtx.sector,
32
34
  [ClaimsPersonSchemaorg.hasOccupationalRoleValue]: controllerRole,
@@ -42,7 +44,6 @@ export async function startIndividualOrganizationWithDeps(deps) {
42
44
  [ClaimsPersonSchemaorg.telephone]: controllerTelephone,
43
45
  }
44
46
  : {}),
45
- ...(deps.input.additionalClaims || {}),
46
47
  };
47
48
  const registrationPayload = {
48
49
  jti: `jti-${createRuntimeUuid()}`,
@@ -77,12 +78,54 @@ export async function startIndividualOrganizationWithDeps(deps) {
77
78
  if (!offerId) {
78
79
  throw new Error('startIndividualOrganization failed: missing offerId in registration response.');
79
80
  }
81
+ const registrationSummary = readFamilyOrganizationSummaryFromResponseBody(registration.poll.body);
80
82
  return {
81
83
  registration,
82
84
  offerId,
83
85
  offerPreview: deps.getOfferPreviewFromResponse(registration),
86
+ registrationStatus: registrationSummary?.status,
87
+ orderConfirmationRequired: registrationSummary?.status !== 'already_exists',
88
+ identity: readIndividualOrganizationBootstrapIdentity(registration.poll.body),
89
+ };
90
+ }
91
+ /**
92
+ * Projects the reusable subject identity from an individual bootstrap receipt.
93
+ *
94
+ * `providerDidWeb` is deliberately read from `Offer.offeredBy` and preserved
95
+ * byte-for-byte. The provider root uses the colon-delimited
96
+ * `:organization:taxid:` DID path. `buildIndividualDidWeb(...)` only adds the
97
+ * individual suffix and never rewrites that provider lineage.
98
+ */
99
+ export function readIndividualOrganizationBootstrapIdentity(responseBody) {
100
+ const root = asRecord(responseBody);
101
+ const body = asRecord(root?.body) || root;
102
+ const entries = Array.isArray(body?.data) ? body.data : [];
103
+ const first = asRecord(entries[0]);
104
+ const resource = asRecord(first?.resource);
105
+ const resourceId = String(resource?.id || '').trim();
106
+ const claims = extractPrimaryClaims(responseBody);
107
+ const providerDidWeb = String(claims[ClaimsOfferSchemaorg.offeredBy] || '').trim();
108
+ if (!resourceId || !providerDidWeb)
109
+ return undefined;
110
+ let individualId;
111
+ try {
112
+ individualId = encodeHexToMultibase58btc(resourceId);
113
+ }
114
+ catch {
115
+ return undefined;
116
+ }
117
+ return {
118
+ resourceId,
119
+ individualId,
120
+ providerDidWeb,
121
+ subjectDid: buildIndividualDidWeb({ providerDidWeb, individualId }),
84
122
  };
85
123
  }
124
+ function asRecord(value) {
125
+ return value && typeof value === 'object' && !Array.isArray(value)
126
+ ? value
127
+ : undefined;
128
+ }
86
129
  function createRuntimeUuid() {
87
130
  const fromCrypto = globalThis.crypto?.randomUUID?.();
88
131
  if (fromCrypto) {
@@ -1,16 +1,17 @@
1
1
  import type { OrganizationDidBindingInput } from 'gdc-sdk-core-ts';
2
2
  import type { AppInfo } from 'gdc-sdk-core-ts';
3
3
  import type { IndividualOrganizationLifecycleInput } from 'gdc-sdk-core-ts';
4
- import { type ResolvedAppInfo } from 'gdc-sdk-core-ts';
4
+ import { type ResolvedAppInfo, type CommunicationClinicalFormatRenderers, type SecureDidcommTransportAdapter, type TransportProfile } from 'gdc-sdk-core-ts';
5
5
  import { type HostRouteContext, type HostedTenantLifecycleInput } from './host-onboarding.js';
6
6
  import type { NodeLegalOrganizationVerificationTransactionInput, NodeOrganizationDidBindingInput, NodeOrganizationActivationInput } from './orchestration/client-port.js';
7
7
  import { type IndividualOrganizationConfirmOrderInput, type RouteContext } from './individual-onboarding.js';
8
8
  import { type EnsureFamilyOrganizationRegistrationInput } from './family-organization-registration.js';
9
9
  import { type FamilyOrganizationSearchInput } from './family-organization-search.js';
10
10
  import { type SmartTokenRequestInput } from './smart-token.js';
11
+ import { type EmployeeDeviceActivationRequestInput, type EmployeeDeviceActivationResult } from './device-activation.js';
11
12
  import { type OrganizationLicenseOrderConfirmInput } from './organization-license-order.js';
12
13
  import { type IndividualOrganizationBootstrapInput, type IndividualOrganizationStartResult } from './individual-start.js';
13
- import { type CommunicationIngestionInput, type BlockchainArtifactRegistrationInput, type VitalSignBatchCommunicationFromSearchResponseInput, type CommunicationParticipantRuntimeSearchInput, type ClinicalBundleSearchInput, type GrantProfessionalAccessInput, type GrantProfessionalAccessResult, type IndividualMemberLifecycleInput, type LicenseListRuntimeSearchInput, type LicenseOfferRuntimeSearchInput, type LicenseOrderRuntimeSearchInput, type OrganizationEmployeeCreationInput, type OrganizationEmployeeLifecycleInput, type OrganizationEmployeeSearchInput, type RevokeProfessionalAccessInput, type RevokeProfessionalAccessResult, type RelatedPersonUpsertInput } from './resource-operations.js';
14
+ import { type CommunicationIngestionInput, type BlockchainArtifactRegistrationInput, type VitalSignBatchCommunicationFromSearchResponseInput, type CommunicationParticipantRuntimeSearchInput, type ClinicalBundleSearchInput, type GrantProfessionalAccessInput, type GrantProfessionalAccessResult, type IndividualMemberLifecycleInput, type IndividualMemberLicenseAddInput, type IndividualMemberLicenseInvitationInput, type IndividualMemberLicenseTransitionInput, type LicenseListRuntimeSearchInput, type LicenseOfferRuntimeSearchInput, type LicenseOrderRuntimeSearchInput, type OrganizationEmployeeCreationInput, type OrganizationEmployeeLifecycleInput, type OrganizationEmployeeSearchInput, type RevokeProfessionalAccessInput, type RevokeProfessionalAccessResult, type RelatedPersonUpsertInput } from './resource-operations.js';
14
15
  import type { LegalOrganizationOrderInput } from './host-onboarding.js';
15
16
  import type { SmartTokenExchangeResult } from './smart-token.js';
16
17
  import type { NodeRuntimeClient, PollOptions, PollResult, SubmitAndPollResult, SubmitPayload, SubmitResponse } from './orchestration/client-port.js';
@@ -48,6 +49,14 @@ export type HttpRuntimeClientOptions = {
48
49
  ctx?: RouteContext;
49
50
  defaultHeaders?: Record<string, string>;
50
51
  requestTimeoutMs?: number;
52
+ /** Default wire profile for high-level clinical outbox submissions. */
53
+ transportProfile?: TransportProfile;
54
+ /** Wallet-backed pack/unpack adapter required by the secure-form profile. */
55
+ secureTransportAdapter?: SecureDidcommTransportAdapter;
56
+ /** Product-supplied clinical projections not owned by the generic runtime. */
57
+ communicationFormatRenderers?: CommunicationClinicalFormatRenderers;
58
+ /** Injectable fetch implementation for BFF adapters and deterministic tests. */
59
+ fetchImpl?: typeof fetch;
51
60
  };
52
61
  /**
53
62
  * @deprecated Prefer `HttpRuntimeClientOptions`.
@@ -69,6 +78,10 @@ export declare class HttpRuntimeClient implements NodeRuntimeClient {
69
78
  private readonly ctx?;
70
79
  private readonly defaultHeaders;
71
80
  private readonly requestTimeoutMs;
81
+ private readonly transportProfile;
82
+ private readonly secureTransportAdapter?;
83
+ private readonly communicationFormatRenderers;
84
+ private readonly fetchImpl?;
72
85
  private readonly httpTraceFile?;
73
86
  private readonly tokenCache;
74
87
  private readonly paths;
@@ -115,6 +128,7 @@ export declare class HttpRuntimeClient implements NodeRuntimeClient {
115
128
  * Convenience wrapper that performs submit and poll in sequence.
116
129
  */
117
130
  submitAndPoll(submitPath: string, pollPath: string, payload: SubmitPayload, pollOptions?: PollOptions): Promise<SubmitAndPollResult>;
131
+ private submitAndPollWithBearerToken;
118
132
  /**
119
133
  * Starts the host-side legal-organization verification transaction that GW
120
134
  * CORE forwards to ICA `_verify`.
@@ -336,6 +350,12 @@ export declare class HttpRuntimeClient implements NodeRuntimeClient {
336
350
  * with optional filters.
337
351
  */
338
352
  listIndividualLicenses(ctx: RouteContext, input?: LicenseListRuntimeSearchInput): Promise<SubmitAndPollResult>;
353
+ /** Adds zero-cost seats to one individual organization's member pool. */
354
+ addFreeIndividualMemberLicenses(ctx: RouteContext, input: IndividualMemberLicenseAddInput): Promise<SubmitAndPollResult>;
355
+ /** Reserves one individual seat for an existing FHIR v3-role contact. */
356
+ issueIndividualMemberLicense(ctx: RouteContext, input: IndividualMemberLicenseInvitationInput): Promise<SubmitAndPollResult>;
357
+ /** Accepts, deactivates or releases one individual-member seat. */
358
+ transitionIndividualMemberLicense(ctx: RouteContext, action: '_accept' | '_deactivate' | '_release', input: IndividualMemberLicenseTransitionInput): Promise<SubmitAndPollResult>;
339
359
  searchIndividualLicenseOffers(ctx: RouteContext, input: LicenseOfferRuntimeSearchInput): Promise<SubmitAndPollResult>;
340
360
  listIndividualLicenseOffers(ctx: RouteContext, input?: LicenseOfferRuntimeSearchInput): Promise<SubmitAndPollResult>;
341
361
  searchIndividualLicenseOrders(ctx: RouteContext, input: LicenseOrderRuntimeSearchInput): Promise<SubmitAndPollResult>;
@@ -363,6 +383,12 @@ export declare class HttpRuntimeClient implements NodeRuntimeClient {
363
383
  * the default client route context configured in the constructor.
364
384
  */
365
385
  requestSmartToken(input: SmartTokenRequestInput): Promise<SmartTokenExchangeResult>;
386
+ /**
387
+ * Registers any actor profile device through activation-code exchange plus
388
+ * GW DCR. The historical helper name says employee, but the transport is
389
+ * actor-neutral and is used by portal and telephone profile runtimes.
390
+ */
391
+ activateProfileDeviceWithActivationRequest(input: EmployeeDeviceActivationRequestInput): Promise<EmployeeDeviceActivationResult>;
366
392
  /**
367
393
  * Creates or updates a `RelatedPerson` for non-employee family/caregiver
368
394
  * roles such as a grandfather, guardian, or external caregiver.
@@ -376,6 +402,13 @@ export declare class HttpRuntimeClient implements NodeRuntimeClient {
376
402
  * @param input Communication payload plus route/format options.
377
403
  */
378
404
  ingestCommunicationAndUpdateIndex(ctx: RouteContext, input: CommunicationIngestionInput): Promise<SubmitAndPollResult>;
405
+ /**
406
+ * Renders and submits one canonical clinical outbox job without requiring
407
+ * BFF, portal or assistant consumers to know GW wire envelopes.
408
+ */
409
+ private submitCommunicationOutboxJobAndPoll;
410
+ /** Applies the configured wire profile to subject-scoped clinical searches. */
411
+ private submitClinicalMessageAndPoll;
379
412
  /**
380
413
  * Registers one FHIR resource or raw artifact on blockchain and waits until
381
414
  * GW has indexed the resulting DocumentReference projection.
@@ -477,6 +510,8 @@ export declare class HttpRuntimeClient implements NodeRuntimeClient {
477
510
  individualFamilyOrganizationPurgePollPath(ctx?: RouteContext): string;
478
511
  individualLicenseSearchPath(ctx?: RouteContext): string;
479
512
  individualLicenseSearchPollPath(ctx?: RouteContext): string;
513
+ individualLicenseActionPath(ctx: RouteContext | undefined, action: string): string;
514
+ individualLicenseActionPollPath(ctx: RouteContext | undefined, action: string): string;
480
515
  individualLicenseOfferSearchPath(ctx?: RouteContext): string;
481
516
  individualLicenseOfferSearchPollPath(ctx?: RouteContext): string;
482
517
  individualLicenseOrderSearchPath(ctx?: RouteContext): string;
@@ -489,8 +524,8 @@ export declare class HttpRuntimeClient implements NodeRuntimeClient {
489
524
  individualRelatedPersonPurgePollPath(ctx?: RouteContext): string;
490
525
  individualConsentR4BatchPath(ctx: RouteContext): string;
491
526
  individualConsentR4PollPath(ctx: RouteContext): string;
492
- individualCommunicationBatchPath(ctx: RouteContext, format: 'org.hl7.fhir.api' | 'org.hl7.fhir.r4'): string;
493
- individualCommunicationPollPath(ctx: RouteContext, format: 'org.hl7.fhir.api' | 'org.hl7.fhir.r4'): string;
527
+ individualCommunicationBatchPath(ctx: RouteContext, format: string): string;
528
+ individualCommunicationPollPath(ctx: RouteContext, format: string): string;
494
529
  individualCommunicationSearchPath(ctx: RouteContext): string;
495
530
  individualCommunicationSearchPollPath(ctx: RouteContext): string;
496
531
  individualDocumentReferenceBatchPath(ctx: RouteContext): string;
@@ -1,19 +1,20 @@
1
1
  // Copyright 2026 Antifraud Services Inc. under the Apache License, Version 2.0.
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 { DIDCOMM_PLAINTEXT_JSON_MEDIA_TYPE, } from 'gdc-common-utils-ts/utils/didcomm-submit';
4
- import { buildAppHeaders, createBootstrapFacade, resolveAppInfo, } from 'gdc-sdk-core-ts';
4
+ import { buildAppHeaders, createBootstrapFacade, decodeTransportResponse, renderCommunicationOutboxRequest, renderGatewayMessageRequest, renderTransportPollRequest, resolveAppInfo, TransportProfiles, } from 'gdc-sdk-core-ts';
5
5
  import { pollUntilCompleteWithMethod } from './async-polling.js';
6
6
  import { confirmLegalOrganizationOrderWithDeps, HostLifecycleRequestType, HostedTenantLifecycleRequestType, submitHostedTenantLifecycleWithDeps, } from './host-onboarding.js';
7
7
  import { confirmIndividualOrganizationOrderWithDeps, } from './individual-onboarding.js';
8
8
  import { ensureFamilyOrganizationRegistrationWithDeps, } from './family-organization-registration.js';
9
9
  import { searchFamilyOrganizationWithDeps } from './family-organization-search.js';
10
10
  import { requestSmartTokenWithDeps } from './smart-token.js';
11
+ import { activateEmployeeDeviceWithActivationCodeWithDeps, activateEmployeeDeviceWithActivationRequestWithDeps, } from './device-activation.js';
11
12
  import { extractOfferIdFromResponseBody, extractOfferPreviewFromResponseBody, } from './order-offer-summary.js';
12
13
  import { confirmOrganizationLicenseOrderWithDeps } from './organization-license-order.js';
13
14
  import { startIndividualOrganizationWithDeps } from './individual-start.js';
14
- import { createOrganizationEmployeeWithDeps, disableIndividualMemberWithDeps, disableIndividualOrganizationWithDeps, disableOrganizationEmployeeWithDeps, listIndividualLicenseOffersWithDeps, listIndividualLicenseOrdersWithDeps, listIndividualLicensesWithDeps, listOrganizationLicenseOffersWithDeps, listOrganizationLicenseOrdersWithDeps, listOrganizationLicensesWithDeps, grantProfessionalAccessWithDeps, ingestCommunicationAndUpdateIndexWithDeps, buildVitalSignBatchCommunicationFromSearchResponse, registerBlockchainArtifactAndUpdateIndexWithDeps, revokeProfessionalAccessWithDeps, searchCommunicationParticipantsWithDeps, purgeIndividualMemberWithDeps, purgeIndividualOrganizationWithDeps, purgeOrganizationEmployeeWithDeps, searchIndividualLicensesWithDeps, searchIndividualLicenseOffersWithDeps, searchIndividualLicenseOrdersWithDeps, searchOrganizationLicensesWithDeps, searchOrganizationLicenseOffersWithDeps, searchOrganizationLicenseOrdersWithDeps, searchOrganizationEmployeesWithDeps, searchClinicalBundleWithDeps, searchLatestIpsWithDeps, upsertRelatedPersonAndPollWithDeps, } from './resource-operations.js';
15
+ import { createOrganizationEmployeeWithDeps, disableIndividualMemberWithDeps, disableIndividualOrganizationWithDeps, disableOrganizationEmployeeWithDeps, listIndividualLicenseOffersWithDeps, listIndividualLicenseOrdersWithDeps, listIndividualLicensesWithDeps, addFreeIndividualMemberLicensesWithDeps, issueIndividualMemberLicenseWithDeps, transitionIndividualMemberLicenseWithDeps, listOrganizationLicenseOffersWithDeps, listOrganizationLicenseOrdersWithDeps, listOrganizationLicensesWithDeps, grantProfessionalAccessWithDeps, ingestCommunicationAndUpdateIndexWithDeps, buildVitalSignBatchCommunicationFromSearchResponse, registerBlockchainArtifactAndUpdateIndexWithDeps, revokeProfessionalAccessWithDeps, searchCommunicationParticipantsWithDeps, purgeIndividualMemberWithDeps, purgeIndividualOrganizationWithDeps, purgeOrganizationEmployeeWithDeps, searchIndividualLicensesWithDeps, searchIndividualLicenseOffersWithDeps, searchIndividualLicenseOrdersWithDeps, searchOrganizationLicensesWithDeps, searchOrganizationLicenseOffersWithDeps, searchOrganizationLicenseOrdersWithDeps, searchOrganizationEmployeesWithDeps, searchClinicalBundleWithDeps, searchLatestIpsWithDeps, upsertRelatedPersonAndPollWithDeps, normalizeCommunicationPathFormatSegment, } from './resource-operations.js';
15
16
  import { submitAndPollWithMethods } from './orchestration/client-port.js';
16
- import { buildRuntimeHeaders, fetchWithTimeout, parseResponseBody, pollBatchResponseWithRuntimeConfig, postJsonWithRuntimeConfig, } from './runtime-transport.js';
17
+ import { buildRuntimeHeaders, fetchWithTimeout, parseResponseBody, pollBatchResponseWithRuntimeConfig, postJsonWithRuntimeConfig, postRenderedWithRuntimeConfig, } from './runtime-transport.js';
17
18
  import { activateOrganizationInGatewayFromIcaProofWithDeps, submitLegalOrganizationIssueWithDeps, submitLegalOrganizationVerificationTransactionWithDeps, submitOrganizationDidBindingWithDeps, } from './runtime-host-submission.js';
18
19
  import { buildGrantProfessionalAccessClaimsWithCid } from './runtime-consent.js';
19
20
  import { RuntimeClientPaths } from './runtime-client-paths.js';
@@ -35,6 +36,7 @@ export class HttpRuntimeClient {
35
36
  defaultHeaders: this.defaultHeaders,
36
37
  requestTimeoutMs: this.requestTimeoutMs,
37
38
  httpTraceFile: this.httpTraceFile,
39
+ fetchImpl: this.fetchImpl,
38
40
  };
39
41
  }
40
42
  /**
@@ -62,6 +64,10 @@ export class HttpRuntimeClient {
62
64
  ...(options.defaultHeaders || {}),
63
65
  };
64
66
  this.requestTimeoutMs = Math.max(1, Math.floor(options.requestTimeoutMs ?? 15000));
67
+ this.transportProfile = options.transportProfile || TransportProfiles.DidcommPlainJson;
68
+ this.secureTransportAdapter = options.secureTransportAdapter;
69
+ this.communicationFormatRenderers = options.communicationFormatRenderers || {};
70
+ this.fetchImpl = options.fetchImpl;
65
71
  this.httpTraceFile = String(process.env.SDK_HTTP_TRACE_FILE || '').trim() || undefined;
66
72
  this.paths = new RuntimeClientPaths(this.ctx);
67
73
  }
@@ -109,6 +115,15 @@ export class HttpRuntimeClient {
109
115
  async submitAndPoll(submitPath, pollPath, payload, pollOptions) {
110
116
  return submitAndPollWithMethods(this, submitPath, pollPath, payload, pollOptions);
111
117
  }
118
+ async submitAndPollWithBearerToken(bearerToken, submitPath, pollPath, payload, pollOptions) {
119
+ const config = { ...this.transportConfig, bearerToken };
120
+ const submitted = await postJsonWithRuntimeConfig(config, submitPath, payload, DIDCOMM_PLAINTEXT_JSON_MEDIA_TYPE);
121
+ const poll = await pollUntilCompleteWithMethod((path, request) => pollBatchResponseWithRuntimeConfig(config, path, request), pollPath, { thid: String(payload.thid) }, pollOptions);
122
+ return {
123
+ submit: { status: submitted.status, location: submitted.location, body: submitted.body },
124
+ poll,
125
+ };
126
+ }
112
127
  /**
113
128
  * Starts the host-side legal-organization verification transaction that GW
114
129
  * CORE forwards to ICA `_verify`.
@@ -570,6 +585,30 @@ export class HttpRuntimeClient {
570
585
  submitAndPoll: this.submitAndPoll.bind(this),
571
586
  });
572
587
  }
588
+ /** Adds zero-cost seats to one individual organization's member pool. */
589
+ async addFreeIndividualMemberLicenses(ctx, input) {
590
+ return addFreeIndividualMemberLicensesWithDeps(ctx, input, {
591
+ individualLicenseActionPath: this.paths.individualLicenseActionPath.bind(this.paths),
592
+ individualLicenseActionPollPath: this.paths.individualLicenseActionPollPath.bind(this.paths),
593
+ submitAndPoll: this.submitAndPoll.bind(this),
594
+ });
595
+ }
596
+ /** Reserves one individual seat for an existing FHIR v3-role contact. */
597
+ async issueIndividualMemberLicense(ctx, input) {
598
+ return issueIndividualMemberLicenseWithDeps(ctx, input, {
599
+ individualLicenseActionPath: this.paths.individualLicenseActionPath.bind(this.paths),
600
+ individualLicenseActionPollPath: this.paths.individualLicenseActionPollPath.bind(this.paths),
601
+ submitAndPoll: this.submitAndPoll.bind(this),
602
+ });
603
+ }
604
+ /** Accepts, deactivates or releases one individual-member seat. */
605
+ async transitionIndividualMemberLicense(ctx, action, input) {
606
+ return transitionIndividualMemberLicenseWithDeps(ctx, action, input, {
607
+ individualLicenseActionPath: this.paths.individualLicenseActionPath.bind(this.paths),
608
+ individualLicenseActionPollPath: this.paths.individualLicenseActionPollPath.bind(this.paths),
609
+ submitAndPoll: this.submitAndPoll.bind(this),
610
+ });
611
+ }
573
612
  async searchIndividualLicenseOffers(ctx, input) {
574
613
  return searchIndividualLicenseOffersWithDeps(ctx, input, {
575
614
  individualLicenseOfferSearchPath: this.paths.individualLicenseOfferSearchPath.bind(this.paths),
@@ -655,6 +694,27 @@ export class HttpRuntimeClient {
655
694
  setTokenCache: (tokenCacheKey, token) => this.tokenCache.set(tokenCacheKey, token),
656
695
  });
657
696
  }
697
+ /**
698
+ * Registers any actor profile device through activation-code exchange plus
699
+ * GW DCR. The historical helper name says employee, but the transport is
700
+ * actor-neutral and is used by portal and telephone profile runtimes.
701
+ */
702
+ async activateProfileDeviceWithActivationRequest(input) {
703
+ const routeCtx = this.paths.routeCtxFromInput(input);
704
+ return activateEmployeeDeviceWithActivationRequestWithDeps({
705
+ routeCtx,
706
+ input,
707
+ activateEmployeeDeviceWithActivationCode: (ctx, activationInput) => activateEmployeeDeviceWithActivationCodeWithDeps({
708
+ routeCtx: ctx,
709
+ input: activationInput,
710
+ identityTokenExchangePath: this.paths.identityTokenExchangePath.bind(this.paths),
711
+ identityTokenExchangePollPath: this.paths.identityTokenExchangePollPath.bind(this.paths),
712
+ identityDeviceDcrPath: this.paths.identityDeviceDcrPath.bind(this.paths),
713
+ identityDeviceDcrPollPath: this.paths.identityDeviceDcrPollPath.bind(this.paths),
714
+ submitAndPollWithBearerToken: this.submitAndPollWithBearerToken.bind(this),
715
+ }),
716
+ });
717
+ }
658
718
  /**
659
719
  * Creates or updates a `RelatedPerson` for non-employee family/caregiver
660
720
  * roles such as a grandfather, guardian, or external caregiver.
@@ -674,12 +734,70 @@ export class HttpRuntimeClient {
674
734
  * @param input Communication payload plus route/format options.
675
735
  */
676
736
  async ingestCommunicationAndUpdateIndex(ctx, input) {
737
+ if (input.communicationJob) {
738
+ return this.submitCommunicationOutboxJobAndPoll(ctx, input);
739
+ }
677
740
  return ingestCommunicationAndUpdateIndexWithDeps(ctx, input, {
678
741
  individualCommunicationBatchPath: this.paths.individualCommunicationBatchPath.bind(this.paths),
679
742
  individualCommunicationPollPath: this.paths.individualCommunicationPollPath.bind(this.paths),
680
743
  submitAndPoll: this.submitAndPoll.bind(this),
681
744
  });
682
745
  }
746
+ /**
747
+ * Renders and submits one canonical clinical outbox job without requiring
748
+ * BFF, portal or assistant consumers to know GW wire envelopes.
749
+ */
750
+ async submitCommunicationOutboxJobAndPoll(ctx, input) {
751
+ const job = input.communicationJob;
752
+ const profile = input.transportProfile || this.transportProfile;
753
+ const format = normalizeCommunicationPathFormatSegment(input.clinicalFormat || input.pathFormatSegment);
754
+ const submitPath = this.paths.individualCommunicationBatchPath(ctx, format);
755
+ const pollPath = this.paths.individualCommunicationPollPath(ctx, format);
756
+ const renderedSubmit = await renderCommunicationOutboxRequest(job, profile, this.secureTransportAdapter, {
757
+ clinicalFormat: input.clinicalFormat || input.pathFormatSegment || 'api',
758
+ formatRenderers: this.communicationFormatRenderers,
759
+ });
760
+ const submit = await postRenderedWithRuntimeConfig(this.transportConfig, submitPath, renderedSubmit);
761
+ const poll = await pollUntilCompleteWithMethod(async (path, request) => {
762
+ const renderedPoll = await renderTransportPollRequest(request.thid, profile, this.secureTransportAdapter);
763
+ const response = await postRenderedWithRuntimeConfig(this.transportConfig, path, renderedPoll);
764
+ return {
765
+ status: response.status,
766
+ body: response.status === 202
767
+ ? response.body
768
+ : await decodeTransportResponse(response.body, profile, this.secureTransportAdapter),
769
+ retryAfterMs: response.retryAfterMs,
770
+ };
771
+ }, pollPath, { thid: job.thid }, input.pollOptions);
772
+ return {
773
+ submit: {
774
+ status: submit.status,
775
+ location: submit.location,
776
+ body: submit.body,
777
+ },
778
+ poll,
779
+ };
780
+ }
781
+ /** Applies the configured wire profile to subject-scoped clinical searches. */
782
+ async submitClinicalMessageAndPoll(submitPath, pollPath, payload, profile, pollOptions) {
783
+ const renderedSubmit = await renderGatewayMessageRequest(payload, profile, this.secureTransportAdapter);
784
+ const submit = await postRenderedWithRuntimeConfig(this.transportConfig, submitPath, renderedSubmit);
785
+ const poll = await pollUntilCompleteWithMethod(async (path, request) => {
786
+ const renderedPoll = await renderTransportPollRequest(request.thid, profile, this.secureTransportAdapter);
787
+ const response = await postRenderedWithRuntimeConfig(this.transportConfig, path, renderedPoll);
788
+ return {
789
+ status: response.status,
790
+ body: response.status === 202
791
+ ? response.body
792
+ : await decodeTransportResponse(response.body, profile, this.secureTransportAdapter),
793
+ retryAfterMs: response.retryAfterMs,
794
+ };
795
+ }, pollPath, { thid: renderedSubmit.thid }, pollOptions);
796
+ return {
797
+ submit: { status: submit.status, location: submit.location, body: submit.body },
798
+ poll,
799
+ };
800
+ }
683
801
  /**
684
802
  * Registers one FHIR resource or raw artifact on blockchain and waits until
685
803
  * GW has indexed the resulting DocumentReference projection.
@@ -732,7 +850,7 @@ export class HttpRuntimeClient {
732
850
  return searchClinicalBundleWithDeps(ctx, input, {
733
851
  bundleSearchPath: this.paths.individualBundleSearchPath.bind(this.paths),
734
852
  bundleSearchPollPath: this.paths.individualBundleSearchPollPath.bind(this.paths),
735
- submitAndPoll: this.submitAndPoll.bind(this),
853
+ submitAndPoll: (submitPath, pollPath, payload, pollOptions) => this.submitClinicalMessageAndPoll(submitPath, pollPath, payload, input.transportProfile || this.transportProfile, pollOptions),
736
854
  });
737
855
  }
738
856
  /**
@@ -830,6 +948,8 @@ export class HttpRuntimeClient {
830
948
  individualFamilyOrganizationPurgePollPath(ctx) { return this.paths.individualFamilyOrganizationPurgePollPath(ctx); }
831
949
  individualLicenseSearchPath(ctx) { return this.paths.individualLicenseSearchPath(ctx); }
832
950
  individualLicenseSearchPollPath(ctx) { return this.paths.individualLicenseSearchPollPath(ctx); }
951
+ individualLicenseActionPath(ctx, action) { return this.paths.individualLicenseActionPath(ctx, action); }
952
+ individualLicenseActionPollPath(ctx, action) { return this.paths.individualLicenseActionPollPath(ctx, action); }
833
953
  individualLicenseOfferSearchPath(ctx) { return this.paths.individualLicenseOfferSearchPath(ctx); }
834
954
  individualLicenseOfferSearchPollPath(ctx) { return this.paths.individualLicenseOfferSearchPollPath(ctx); }
835
955
  individualLicenseOrderSearchPath(ctx) { return this.paths.individualLicenseOrderSearchPath(ctx); }
@@ -13,7 +13,7 @@ import type { FamilyOrganizationSearchInput } from '../family-organization-searc
13
13
  import type { EnsureFamilyOrganizationRegistrationInput, EnsureFamilyOrganizationRegistrationResult } from '../family-organization-registration.js';
14
14
  import type { OrganizationLicenseOrderConfirmInput } from '../organization-license-order.js';
15
15
  import type { SmartTokenExchangeResult, SmartTokenRequestInput } from '../smart-token.js';
16
- import type { CommunicationIngestionInput, BlockchainArtifactRegistrationInput, CommunicationParticipantRuntimeSearchInput, ClinicalBundleSearchInput, VitalSignBatchCommunicationFromSearchResponseInput, DigitalTwinGenerationInput, GrantProfessionalAccessInput, GrantProfessionalAccessResult, IndividualMemberLifecycleInput, IpsOrFhirImportInput, OrganizationEmployeeCreationInput, OrganizationEmployeeLifecycleInput, OrganizationEmployeeSearchInput, RevokeProfessionalAccessInput, RevokeProfessionalAccessResult, RelatedPersonUpsertInput } from '../resource-operations.js';
16
+ import type { CommunicationIngestionInput, BlockchainArtifactRegistrationInput, CommunicationParticipantRuntimeSearchInput, ClinicalBundleSearchInput, VitalSignBatchCommunicationFromSearchResponseInput, DigitalTwinGenerationInput, GrantProfessionalAccessInput, GrantProfessionalAccessResult, IndividualMemberLifecycleInput, IndividualMemberLicenseAddInput, IndividualMemberLicenseInvitationInput, IndividualMemberLicenseTransitionInput, IpsOrFhirImportInput, OrganizationEmployeeCreationInput, OrganizationEmployeeLifecycleInput, OrganizationEmployeeSearchInput, RevokeProfessionalAccessInput, RevokeProfessionalAccessResult, RelatedPersonUpsertInput } from '../resource-operations.js';
17
17
  /**
18
18
  * Shared node-runtime activation input.
19
19
  *
@@ -95,6 +95,9 @@ export type RuntimeClient = {
95
95
  revokeProfessionalAccess?: (ctx: RouteContext, input: RevokeProfessionalAccessInput) => Promise<RevokeProfessionalAccessResult>;
96
96
  searchIndividualLicenses?: (ctx: RouteContext, input: LicenseListRuntimeSearchInput) => Promise<SubmitAndPollResult>;
97
97
  listIndividualLicenses?: (ctx: RouteContext, input?: LicenseListRuntimeSearchInput) => Promise<SubmitAndPollResult>;
98
+ addFreeIndividualMemberLicenses?: (ctx: RouteContext, input: IndividualMemberLicenseAddInput) => Promise<SubmitAndPollResult>;
99
+ issueIndividualMemberLicense?: (ctx: RouteContext, input: IndividualMemberLicenseInvitationInput) => Promise<SubmitAndPollResult>;
100
+ transitionIndividualMemberLicense?: (ctx: RouteContext, action: '_accept' | '_deactivate' | '_release', input: IndividualMemberLicenseTransitionInput) => Promise<SubmitAndPollResult>;
98
101
  searchIndividualLicenseOffers?: (ctx: RouteContext, input: LicenseOfferRuntimeSearchInput) => Promise<SubmitAndPollResult>;
99
102
  listIndividualLicenseOffers?: (ctx: RouteContext, input?: LicenseOfferRuntimeSearchInput) => Promise<SubmitAndPollResult>;
100
103
  searchIndividualLicenseOrders?: (ctx: RouteContext, input: LicenseOrderRuntimeSearchInput) => Promise<SubmitAndPollResult>;
@@ -7,7 +7,7 @@ import type { IndividualOrganizationConfirmOrderInput, RouteContext } from '../i
7
7
  import type { IndividualOrganizationBootstrapInput, IndividualOrganizationStartResult } from '../individual-start.js';
8
8
  import type { NodeCapability } from '../session.js';
9
9
  import type { IndividualOrganizationLifecycleInput } from 'gdc-sdk-core-ts';
10
- import type { BlockchainArtifactRegistrationInput, ClinicalBundleSearchInput, CommunicationIngestionInput, CommunicationParticipantRuntimeSearchInput, DigitalTwinGenerationInput, GrantProfessionalAccessInput, GrantProfessionalAccessResult, IndividualMemberLifecycleInput, IpsOrFhirImportInput, LicenseListRuntimeSearchInput, LicenseOfferRuntimeSearchInput, LicenseOrderRuntimeSearchInput, RevokeProfessionalAccessInput, RevokeProfessionalAccessResult, RelatedPersonUpsertInput } from '../resource-operations.js';
10
+ import type { BlockchainArtifactRegistrationInput, ClinicalBundleSearchInput, CommunicationIngestionInput, CommunicationParticipantRuntimeSearchInput, DigitalTwinGenerationInput, GrantProfessionalAccessInput, GrantProfessionalAccessResult, IndividualMemberLifecycleInput, IndividualMemberLicenseAddInput, IndividualMemberLicenseInvitationInput, IndividualMemberLicenseTransitionInput, IpsOrFhirImportInput, LicenseListRuntimeSearchInput, LicenseOfferRuntimeSearchInput, LicenseOrderRuntimeSearchInput, RevokeProfessionalAccessInput, RevokeProfessionalAccessResult, RelatedPersonUpsertInput } from '../resource-operations.js';
11
11
  import type { SmartTokenExchangeResult, SmartTokenRequestInput } from '../smart-token.js';
12
12
  /**
13
13
  * Individual-controller oriented facade over a `NodeRuntimeClient`.
@@ -116,6 +116,15 @@ export declare class IndividualControllerSdk {
116
116
  * Lists subject/individual-side license seats with optional filters.
117
117
  */
118
118
  listLicenses(ctx: RouteContext, input?: LicenseListRuntimeSearchInput): Promise<SubmitAndPollResult>;
119
+ /** Adds zero-cost member seats to the selected individual organization. */
120
+ addFreeMemberLicenses(ctx: RouteContext, input: IndividualMemberLicenseAddInput): Promise<SubmitAndPollResult>;
121
+ /**
122
+ * Reserves one member seat for an existing FHIR v3 RoleCode contact.
123
+ * ISCO professionals must use Consent without this operation.
124
+ */
125
+ issueMemberInvitationLicense(ctx: RouteContext, input: IndividualMemberLicenseInvitationInput): Promise<SubmitAndPollResult>;
126
+ /** Accepts, deactivates or releases one member invitation seat. */
127
+ transitionMemberLicense(ctx: RouteContext, action: '_accept' | '_deactivate' | '_release', input: IndividualMemberLicenseTransitionInput): Promise<SubmitAndPollResult>;
119
128
  /**
120
129
  * Searches commercial license offers known for the individual/family
121
130
  * context.
@@ -169,6 +169,21 @@ export class IndividualControllerSdk {
169
169
  listLicenses(ctx, input = {}) {
170
170
  return requireClientMethod(this.client, 'listIndividualLicenses')(ctx, input);
171
171
  }
172
+ /** Adds zero-cost member seats to the selected individual organization. */
173
+ addFreeMemberLicenses(ctx, input) {
174
+ return requireClientMethod(this.client, 'addFreeIndividualMemberLicenses')(ctx, input);
175
+ }
176
+ /**
177
+ * Reserves one member seat for an existing FHIR v3 RoleCode contact.
178
+ * ISCO professionals must use Consent without this operation.
179
+ */
180
+ issueMemberInvitationLicense(ctx, input) {
181
+ return requireClientMethod(this.client, 'issueIndividualMemberLicense')(ctx, input);
182
+ }
183
+ /** Accepts, deactivates or releases one member invitation seat. */
184
+ transitionMemberLicense(ctx, action, input) {
185
+ return requireClientMethod(this.client, 'transitionIndividualMemberLicense')(ctx, action, input);
186
+ }
172
187
  /**
173
188
  * Searches commercial license offers known for the individual/family
174
189
  * context.