gdc-sdk-node-ts 0.9.1 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -14,6 +14,24 @@ Use this package when your backend needs to:
14
14
  This package is for runtime execution. It is not the place where the canonical
15
15
  business contract is defined.
16
16
 
17
+ Important test-harness boundary:
18
+
19
+ - `gdc-sdk-node-ts` is not the product BFF
20
+ - the live E2E suite simulates a controlled `virtual API` with a BFF-like role
21
+ only to validate GW CORE lifecycles end to end
22
+ - the current live suites run with the future `user job manager` queue disabled,
23
+ so every high-level call goes directly through that controlled `virtual API`
24
+ - app-side job queues, offline retry, local vault/read models, and the future
25
+ user job manager are separate follow-up concerns
26
+
27
+ Important live-run rule:
28
+
29
+ - the canonical live E2E result must come from the user's real terminal/TTY
30
+ - do not assume an AI agent sandbox has equivalent localhost, Docker, DNS, or
31
+ GCP connectivity
32
+ - if sandboxed runs disagree with the user's terminal, trust the user's
33
+ terminal for live GW validation
34
+
17
35
  Architectural rule:
18
36
 
19
37
  - shared contracts and actor boundaries come from `gdc-sdk-core-ts`
@@ -44,10 +62,16 @@ If you are integrating this package for the first time, open these in order:
44
62
  5. [gdc-sdk-core-ts/docs/101-SDK_FLOWS.md](https://github.com/Global-DataCare/gdc-sdk-core-ts/blob/main/docs/101-SDK_FLOWS.md)
45
63
  Actor split and business-flow map across organization, individual,
46
64
  permissions, invitation, import, and SMART flows.
47
- 6. [gdc-common-utils-ts/src/examples/](https://github.com/Global-DataCare/gdc-common-utils-ts/tree/main/src/examples)
65
+ 6. [gwtemplate-node-ts/docs/PORTAL_API_TO_GW_CORE.md](https://github.com/Global-DataCare/gwtemplate-node-ts/blob/main/docs/PORTAL_API_TO_GW_CORE.md)
66
+ Canonical portal/BFF functional map over GW CORE, including the domain
67
+ split between `employees`, `related persons`, `members`, and `consents`.
68
+ 7. [gdc-common-utils-ts/src/examples/](https://github.com/Global-DataCare/gdc-common-utils-ts/tree/main/src/examples)
48
69
  Shared payload values used by the docs and tests.
49
- 7. [gdc-common-utils-ts/docs/101-LIFECYCLE.md](https://github.com/Global-DataCare/gdc-common-utils-ts/blob/main/docs/101-LIFECYCLE.md)
70
+ 8. [gdc-common-utils-ts/docs/101-LIFECYCLE.md](https://github.com/Global-DataCare/gdc-common-utils-ts/blob/main/docs/101-LIFECYCLE.md)
50
71
  Canonical `enable/disable/delete` semantics and copy/paste placeholders.
72
+ 9. [docs/NEXT_STEPS.md](./docs/NEXT_STEPS.md)
73
+ Follow-up scope after GW CORE live validation, including the future user job
74
+ manager boundary.
51
75
 
52
76
  If you need the shortest path:
53
77
 
@@ -98,12 +122,20 @@ Before running that suite, read:
98
122
 
99
123
  - [docs/101-LIVE_GW_LOCAL.md](./docs/101-LIVE_GW_LOCAL.md)
100
124
 
125
+ Execution requirement:
126
+
127
+ - run the live suite from a real user terminal/TTY
128
+ - if an AI agent is assisting, it should prefer a long-lived TTY process and
129
+ avoid treating sandbox-local connectivity failures as product failures
130
+
101
131
  Teaching rule:
102
132
 
103
133
  - defaults come from `gdc-common-utils-ts/examples`
104
134
  - override with env vars only when your tenant, bearer, or route is different
105
135
  - local GW default is `http://127.0.0.1:3000`
106
136
  - Docker-exposed GW can be overridden with `BASE_URL=http://127.0.0.1:8000`
137
+ - `LIVE_GW_E2E_EXECUTION_MODE=direct` is the current and only supported mode
138
+ for live validation; queued app-side job management is a later phase
107
139
 
108
140
  Current live flow covered by the test suite:
109
141
 
@@ -118,6 +150,47 @@ Current live flow covered by the test suite:
118
150
  7. verify the returned bundle document contains both medication statements
119
151
  8. persist audit/debug traces in `test-results/*.jsonl`
120
152
 
153
+ What is still not fully covered as one single root lifecycle:
154
+
155
+ - initial organization license listing
156
+ - extra-seat activation after the portal-side fictitious payment confirmation
157
+ - relisting licenses after seat activation
158
+ - one employee bundle with employee `A` and employee `B`
159
+ - selective disable/purge validation across both employees
160
+ - consent escalation from partial IPS access to broader IPS access
161
+ - final cleanup of consent, individual, remaining employees, and tenant
162
+
163
+ Current invoice/readback behavior:
164
+
165
+ - both host and individual `Order/_batch-response` flows now return the flat
166
+ compatibility claims and an embedded invoice `Bundle`
167
+ - the invoice bundle contains one FHIR `Invoice`, one PDF
168
+ `DocumentReference`, and one structured JSON/XML `DocumentReference`
169
+ - live suites can read that bundle back through the same high-level response
170
+ body that the virtual API exposes to the simulated front
171
+
172
+ Current runtime boundary:
173
+
174
+ - `OrganizationControllerSdk.confirmOrganizationLicenseOrder(...)` now uses the
175
+ public host `Order/_batch` route used by GW CORE for portal-managed
176
+ post-payment seat activation
177
+ - the long root lifecycle is still not fully closed because the suite does not
178
+ yet orchestrate the whole `license list -> pay -> confirm -> relist -> two
179
+ employees -> selective purge -> cleanup` dialogue as one single test
180
+
181
+ The exact pending release-readiness checklist lives in:
182
+
183
+ - [docs/NEXT_STEPS.md](./docs/NEXT_STEPS.md)
184
+
185
+ Optional live lifecycle extension:
186
+
187
+ - set `RUN_LIVE_GW_E2E_INDIVIDUAL_LIFECYCLE=1` to extend the same suite with
188
+ `disableIndividual(...)` + `purgeIndividual(...)` against the real
189
+ `gwtemplate-node-ts` runtime contract
190
+ - this extra block is intentionally separate from the default happy path
191
+ because it changes lifecycle state and should only run when that tenant/test
192
+ subject is disposable
193
+
121
194
  Shared example source of truth:
122
195
 
123
196
  - tenant/route/controller/professional defaults:
@@ -141,6 +214,20 @@ Run the full live runtime baseline:
141
214
  npm run test:e2e:live-gw
142
215
  ```
143
216
 
217
+ Select one live transport profile from the same Node entrypoint:
218
+
219
+ ```bash
220
+ npm run test:e2e:live-gw:didcomm-plain
221
+ npm run test:e2e:live-gw:legacy-fhir
222
+ npm run test:e2e:live-gw:all
223
+ ```
224
+
225
+ Profile note:
226
+
227
+ - `didcomm-plain` is the current live baseline implemented by the Node runtime client
228
+ - `legacy-fhir` exercises raw `application/fhir+json` async batch submission for `org.hl7.fhir.*`
229
+ - `all` runs every implemented profile from the same suite file
230
+
144
231
  Run the IPS ingestion/search branch as well:
145
232
 
146
233
  ```bash
@@ -31,6 +31,7 @@ export declare const GwCoreLifecycleRequestType: Readonly<{
31
31
  readonly IndividualOrganizationRegistration: "SubjectOrg-registration-form-v1.0";
32
32
  readonly IndividualOrganizationDisable: "Family-disable-request-v1.0";
33
33
  readonly IndividualOrganizationPurge: "Family-purge-request-v1.0";
34
+ readonly IndividualMemberPurge: "RelatedPerson-purge-request-v1.0";
34
35
  }>;
35
36
  /**
36
37
  * Named TODO ids kept close to the current lifecycle implementation so the
@@ -1,4 +1,5 @@
1
1
  // Copyright 2026 Antifraud Services Inc. under the Apache License, Version 2.0.
2
+ import { LifecycleRequestType } from 'gdc-common-utils-ts';
2
3
  /**
3
4
  * GW CORE lifecycle route/action tokens used by the Node runtime SDK.
4
5
  *
@@ -32,6 +33,7 @@ export const GwCoreLifecycleRequestType = Object.freeze({
32
33
  IndividualOrganizationRegistration: 'SubjectOrg-registration-form-v1.0',
33
34
  IndividualOrganizationDisable: 'Family-disable-request-v1.0',
34
35
  IndividualOrganizationPurge: 'Family-purge-request-v1.0',
36
+ IndividualMemberPurge: LifecycleRequestType.RelatedPersonPurge,
35
37
  });
36
38
  /**
37
39
  * Named TODO ids kept close to the current lifecycle implementation so the
@@ -3,14 +3,18 @@ import { ActorCapabilities } from 'gdc-common-utils-ts/constants/actor-session';
3
3
  import { expandActorSessionDescriptorToFacades, filterCapabilitiesForActor, } from 'gdc-sdk-core-ts';
4
4
  import { ActorSession, NodeActorSession } from './session.js';
5
5
  const capabilityMap = {
6
- [ActorCapabilities.HostActivateOrganization]: ActorCapabilities.HostActivateOrganization,
7
- [ActorCapabilities.HostConfirmOrder]: ActorCapabilities.HostConfirmOrder,
6
+ [ActorCapabilities.HostingActivateOrganization]: ActorCapabilities.HostingActivateOrganization,
7
+ [ActorCapabilities.HostingConfirmOrder]: ActorCapabilities.HostingConfirmOrder,
8
+ [ActorCapabilities.HostingDisableHost]: ActorCapabilities.HostingDisableHost,
9
+ [ActorCapabilities.HostingPurgeHost]: ActorCapabilities.HostingPurgeHost,
8
10
  [ActorCapabilities.OrganizationCreateEmployee]: ActorCapabilities.OrganizationCreateEmployee,
9
11
  [ActorCapabilities.OrganizationActivateDevice]: ActorCapabilities.OrganizationActivateDevice,
10
12
  [ActorCapabilities.OrganizationIssueActivationCode]: ActorCapabilities.OrganizationIssueActivationCode,
11
13
  [ActorCapabilities.OrganizationRequestSmartToken]: ActorCapabilities.OrganizationRequestSmartToken,
12
14
  [ActorCapabilities.OrganizationDisableEmployee]: ActorCapabilities.OrganizationDisableEmployee,
13
15
  [ActorCapabilities.OrganizationPurgeEmployee]: ActorCapabilities.OrganizationPurgeEmployee,
16
+ [ActorCapabilities.OrganizationDisableTenant]: ActorCapabilities.OrganizationDisableTenant,
17
+ [ActorCapabilities.OrganizationPurgeTenant]: ActorCapabilities.OrganizationPurgeTenant,
14
18
  [ActorCapabilities.IndividualBootstrap]: ActorCapabilities.IndividualBootstrap,
15
19
  [ActorCapabilities.IndividualDisable]: ActorCapabilities.IndividualDisable,
16
20
  [ActorCapabilities.IndividualPurge]: ActorCapabilities.IndividualPurge,
@@ -1,42 +1,9 @@
1
- import type { PollOptions, SubmitAndPollResult } from './orchestration/client-port.js';
2
1
  /**
3
- * Current host-registry route context for existing host endpoints.
2
+ * Compatibility re-export.
4
3
  *
5
- * This is a routing object for host registry calls. It is not the same thing as
6
- * a host discovery descriptor.
4
+ * The canonical host/hosting facade contract now lives in `gdc-sdk-core-ts` so
5
+ * browser and Node runtimes can share the same orchestration surface. This
6
+ * file stays as a stable import path for existing Node consumers.
7
7
  */
8
- export type HostRouteContext = {
9
- jurisdiction: string;
10
- hostNetwork?: string;
11
- /** @deprecated Use `hostNetwork`. */
12
- sector?: string;
13
- controllerDid?: string;
14
- hostDid?: string;
15
- };
16
- /**
17
- * Input for legal-organization order confirmation in the host registry.
18
- */
19
- export type LegalOrganizationOrderInput = {
20
- offerId: string;
21
- jurisdiction?: string;
22
- hostNetwork?: string;
23
- /** @deprecated Use `hostNetwork`. */
24
- sector?: string;
25
- dataType?: string;
26
- additionalClaims?: Record<string, unknown>;
27
- timeoutSeconds?: number;
28
- intervalSeconds?: number;
29
- };
30
- type ConfirmLegalOrganizationOrderDeps = {
31
- input: LegalOrganizationOrderInput;
32
- hostCtx: HostRouteContext;
33
- defaultTimeoutMs?: number;
34
- defaultIntervalMs?: number;
35
- hostRegistryOrderBatchPath: (ctx: HostRouteContext) => string;
36
- hostRegistryOrderPollPath: (ctx: HostRouteContext) => string;
37
- submitAndPoll: (submitPath: string, pollPath: string, payload: {
38
- thid?: string;
39
- } & Record<string, unknown>, options?: PollOptions) => Promise<SubmitAndPollResult>;
40
- };
41
- export declare function confirmLegalOrganizationOrderWithDeps(deps: ConfirmLegalOrganizationOrderDeps): Promise<SubmitAndPollResult>;
42
- export {};
8
+ export { confirmLegalOrganizationOrderWithDeps, HostLifecycleRequestType, HostedTenantLifecycleRequestType, submitHostedTenantLifecycleWithDeps, } from 'gdc-sdk-core-ts';
9
+ export type { HostingControllerFacade, HostLifecycleInput, HostRouteContext, HostedTenantLifecycleInput, LegalOrganizationOrderInput, } from 'gdc-sdk-core-ts';
@@ -1,39 +1,9 @@
1
1
  // Copyright 2026 Antifraud Services Inc. under the Apache License, Version 2.0.
2
- import { resolvePollOptionsFromSeconds } from './poll-options.js';
3
- export async function confirmLegalOrganizationOrderWithDeps(deps) {
4
- const offerId = String(deps.input.offerId || '').trim();
5
- if (!offerId) {
6
- throw new Error('confirmLegalOrganizationOrder requires offerId.');
7
- }
8
- const claims = {
9
- '@context': 'org.schema',
10
- 'Order.acceptedOffer.identifier': offerId,
11
- ...(deps.input.additionalClaims || {}),
12
- };
13
- const payload = {
14
- jti: `jti-${createRuntimeUuid()}`,
15
- iss: String(deps.hostCtx.controllerDid || '').trim() || undefined,
16
- aud: String(deps.hostCtx.hostDid || '').trim() || undefined,
17
- type: 'application/didcomm-plain+json',
18
- thid: `order-${createRuntimeUuid()}`,
19
- body: {
20
- data: [{
21
- type: deps.input.dataType || 'Organization-order-request-v1.0',
22
- meta: { claims },
23
- resource: { meta: { claims } },
24
- }],
25
- },
26
- };
27
- const pollOptions = resolvePollOptionsFromSeconds(deps.input.timeoutSeconds, deps.input.intervalSeconds, {
28
- timeoutMs: deps.defaultTimeoutMs,
29
- intervalMs: deps.defaultIntervalMs,
30
- });
31
- return deps.submitAndPoll(deps.hostRegistryOrderBatchPath(deps.hostCtx), deps.hostRegistryOrderPollPath(deps.hostCtx), payload, pollOptions);
32
- }
33
- function createRuntimeUuid() {
34
- const fromCrypto = globalThis.crypto?.randomUUID?.();
35
- if (fromCrypto) {
36
- return fromCrypto;
37
- }
38
- return `fallback-${Date.now()}-${Math.random().toString(16).slice(2)}`;
39
- }
2
+ /**
3
+ * Compatibility re-export.
4
+ *
5
+ * The canonical host/hosting facade contract now lives in `gdc-sdk-core-ts` so
6
+ * browser and Node runtimes can share the same orchestration surface. This
7
+ * file stays as a stable import path for existing Node consumers.
8
+ */
9
+ export { confirmLegalOrganizationOrderWithDeps, HostLifecycleRequestType, HostedTenantLifecycleRequestType, submitHostedTenantLifecycleWithDeps, } from 'gdc-sdk-core-ts';
package/dist/index.d.ts CHANGED
@@ -8,7 +8,10 @@ export * from './individual-start.js';
8
8
  export * from './individual-onboarding.js';
9
9
  export * from './device-activation.js';
10
10
  export * from './smart-token.js';
11
+ export * from './order-offer-summary.js';
12
+ export * from './organization-license-order.js';
11
13
  export * from './resource-operations.js';
14
+ export * from './constants/lifecycle.js';
12
15
  export * from './consent-claim-helpers.js';
13
16
  export * from './session.js';
14
17
  export * from './node-runtime-client.js';
package/dist/index.js CHANGED
@@ -9,7 +9,10 @@ export * from './individual-start.js';
9
9
  export * from './individual-onboarding.js';
10
10
  export * from './device-activation.js';
11
11
  export * from './smart-token.js';
12
+ export * from './order-offer-summary.js';
13
+ export * from './organization-license-order.js';
12
14
  export * from './resource-operations.js';
15
+ export * from './constants/lifecycle.js';
13
16
  export * from './consent-claim-helpers.js';
14
17
  export * from './session.js';
15
18
  export * from './node-runtime-client.js';
@@ -17,6 +17,7 @@ export type IndividualOrganizationConfirmOrderInput = {
17
17
  jurisdiction?: string;
18
18
  sector?: string;
19
19
  offerId: string;
20
+ additionalClaims?: Record<string, unknown>;
20
21
  timeoutSeconds?: number;
21
22
  intervalSeconds?: number;
22
23
  };
@@ -8,6 +8,7 @@ export async function confirmIndividualOrganizationOrderWithDeps(deps) {
8
8
  const orderClaims = {
9
9
  '@context': 'org.schema',
10
10
  'Order.acceptedOffer.identifier': offerId,
11
+ ...(deps.input.additionalClaims || {}),
11
12
  };
12
13
  const payload = {
13
14
  jti: `jti-${createRuntimeUuid()}`,
@@ -1,5 +1,6 @@
1
1
  import type { PollOptions, SubmitAndPollResult } from './orchestration/client-port.js';
2
2
  import type { RouteContext } from './individual-onboarding.js';
3
+ import type { OfferPreview } from './order-offer-summary.js';
3
4
  export type IndividualOrganizationBootstrapInput = {
4
5
  /**
5
6
  * Preferred route identifier for the selected personal indexing service provider.
@@ -54,16 +55,6 @@ export type IndividualOrganizationBootstrapInput = {
54
55
  timeoutSeconds?: number;
55
56
  intervalSeconds?: number;
56
57
  };
57
- export type OfferPreview = {
58
- offerId?: string;
59
- amount?: string;
60
- currency?: string;
61
- seats?: number | undefined;
62
- planName?: string;
63
- sku?: string;
64
- paymentMethod?: string;
65
- checkoutUrl?: string;
66
- };
67
58
  export type IndividualOrganizationStartResult = {
68
59
  registration: SubmitAndPollResult;
69
60
  offerId: string;
@@ -1,6 +1,7 @@
1
1
  export { activateEmployeeDeviceWithActivationRequestWithDeps as activateEmployeeDeviceWithActivationCodeSimpleWithDeps, } from './device-activation.js';
2
2
  export { confirmLegalOrganizationOrderWithDeps as confirmLegalOrganizationOrderSimpleWithDeps, } from './host-onboarding.js';
3
3
  export { confirmIndividualOrganizationOrderWithDeps as confirmIndividualOrganizationOrderSimpleWithDeps, } from './individual-onboarding.js';
4
+ export { confirmOrganizationLicenseOrderWithDeps as confirmOrganizationLicenseOrderSimpleWithDeps, } from './organization-license-order.js';
4
5
  export { requestSmartTokenWithDeps as requestSmartTokenSimpleWithDeps, } from './smart-token.js';
5
6
  export { startIndividualOrganizationWithDeps as startIndividualOrganizationSimpleWithDeps, } from './individual-start.js';
6
7
  export { grantProfessionalAccessWithDeps as grantProfessionalAccessSimpleWithDeps } from './resource-operations.js';
@@ -8,6 +9,7 @@ export { resolvePollOptionsFromSeconds as resolveSimplePollOptions } from './pol
8
9
  export type { EmployeeDeviceActivationRequestInput as EmployeeDeviceActivationSimpleInput, } from './device-activation.js';
9
10
  export type { LegalOrganizationOrderInput as LegalOrganizationOrderSimpleInput, } from './host-onboarding.js';
10
11
  export type { IndividualOrganizationConfirmOrderInput as IndividualOrganizationConfirmOrderSimpleInput, } from './individual-onboarding.js';
12
+ export type { OrganizationLicenseOrderConfirmInput as OrganizationLicenseOrderConfirmSimpleInput, } from './organization-license-order.js';
11
13
  export type { IndividualOrganizationBootstrapInput as IndividualOrganizationBootstrapSimpleInput, IndividualOrganizationStartResult as IndividualOrganizationStartSimpleResult, } from './individual-start.js';
12
14
  export type { SmartTokenRequestInput as SmartTokenRequestSimpleInput, } from './smart-token.js';
13
15
  export type { GrantProfessionalAccessInput as GrantProfessionalAccessSimpleInput, GrantProfessionalAccessResult as GrantProfessionalAccessSimpleResult, } from './resource-operations.js';
@@ -3,6 +3,7 @@
3
3
  export { activateEmployeeDeviceWithActivationRequestWithDeps as activateEmployeeDeviceWithActivationCodeSimpleWithDeps, } from './device-activation.js';
4
4
  export { confirmLegalOrganizationOrderWithDeps as confirmLegalOrganizationOrderSimpleWithDeps, } from './host-onboarding.js';
5
5
  export { confirmIndividualOrganizationOrderWithDeps as confirmIndividualOrganizationOrderSimpleWithDeps, } from './individual-onboarding.js';
6
+ export { confirmOrganizationLicenseOrderWithDeps as confirmOrganizationLicenseOrderSimpleWithDeps, } from './organization-license-order.js';
6
7
  export { requestSmartTokenWithDeps as requestSmartTokenSimpleWithDeps, } from './smart-token.js';
7
8
  export { startIndividualOrganizationWithDeps as startIndividualOrganizationSimpleWithDeps, } from './individual-start.js';
8
9
  export { grantProfessionalAccessWithDeps as grantProfessionalAccessSimpleWithDeps } from './resource-operations.js';
@@ -1,11 +1,12 @@
1
1
  import type { AppInfo } from 'gdc-sdk-core-ts';
2
2
  import { type ResolvedAppInfo } from 'gdc-sdk-core-ts';
3
- import { type HostRouteContext } from './host-onboarding.js';
3
+ import { type HostRouteContext, type HostedTenantLifecycleInput } from './host-onboarding.js';
4
4
  import type { NodeOrganizationActivationInput } from './orchestration/client-port.js';
5
5
  import { type IndividualOrganizationConfirmOrderInput, type RouteContext } from './individual-onboarding.js';
6
6
  import { type SmartTokenRequestInput } from './smart-token.js';
7
+ import { type OrganizationLicenseOrderConfirmInput } from './organization-license-order.js';
7
8
  import { type IndividualOrganizationBootstrapInput, type IndividualOrganizationStartResult } from './individual-start.js';
8
- import { type CommunicationIngestionInput, type ClinicalBundleSearchInput, type GrantProfessionalAccessInput, type GrantProfessionalAccessResult, type IndividualMemberLifecycleInput, type IndividualOrganizationLifecycleInput, type OrganizationEmployeeCreationInput, type OrganizationEmployeeLifecycleInput, type OrganizationEmployeeSearchInput, type RelatedPersonUpsertInput } from './resource-operations.js';
9
+ import { type CommunicationIngestionInput, type ClinicalBundleSearchInput, type GrantProfessionalAccessInput, type GrantProfessionalAccessResult, type IndividualMemberLifecycleInput, type IndividualOrganizationLifecycleInput, type LicenseListRuntimeSearchInput, type LicenseOfferRuntimeSearchInput, type LicenseOrderRuntimeSearchInput, type OrganizationEmployeeCreationInput, type OrganizationEmployeeLifecycleInput, type OrganizationEmployeeSearchInput, type RelatedPersonUpsertInput } from './resource-operations.js';
9
10
  import type { LegalOrganizationOrderInput } from './host-onboarding.js';
10
11
  import type { SmartTokenExchangeResult } from './smart-token.js';
11
12
  import type { NodeRuntimeClient, PollOptions, PollResult, SubmitAndPollResult, SubmitPayload, SubmitResponse } from './orchestration/client-port.js';
@@ -117,6 +118,25 @@ export declare class HttpRuntimeClient implements NodeRuntimeClient {
117
118
  * Confirms a host-side legal organization order after the initial activation.
118
119
  */
119
120
  confirmLegalOrganizationOrder(hostCtx: HostRouteContext, input: LegalOrganizationOrderInput, pollOptions?: PollOptions): Promise<SubmitAndPollResult>;
121
+ /**
122
+ * Disables the host registration itself after every hosted tenant has
123
+ * already been purged from the host registry.
124
+ */
125
+ disableHost(hostCtx: HostRouteContext, input: HostedTenantLifecycleInput, pollOptions?: PollOptions): Promise<SubmitAndPollResult>;
126
+ /**
127
+ * Purges the disabled host registration after the hosted tenant registry has
128
+ * become empty.
129
+ */
130
+ purgeHost(hostCtx: HostRouteContext, input: HostedTenantLifecycleInput, pollOptions?: PollOptions): Promise<SubmitAndPollResult>;
131
+ /**
132
+ * Disables one hosted tenant through the host registry after its descendants
133
+ * have already been disabled/purged.
134
+ */
135
+ disableTenant(hostCtx: HostRouteContext, input: HostedTenantLifecycleInput, pollOptions?: PollOptions): Promise<SubmitAndPollResult>;
136
+ /**
137
+ * Purges one already-disabled hosted tenant through the host registry.
138
+ */
139
+ purgeTenant(hostCtx: HostRouteContext, input: HostedTenantLifecycleInput, pollOptions?: PollOptions): Promise<SubmitAndPollResult>;
120
140
  /**
121
141
  * Creates an employee or professional entry under an existing organization tenant.
122
142
  */
@@ -147,6 +167,31 @@ export declare class HttpRuntimeClient implements NodeRuntimeClient {
147
167
  * Searches employees/professionals under the selected organization tenant.
148
168
  */
149
169
  searchOrganizationEmployees(ctx: RouteContext, input: OrganizationEmployeeSearchInput): Promise<SubmitAndPollResult>;
170
+ /**
171
+ * Searches organization-owned license seats through the canonical
172
+ * `License/_search` route.
173
+ */
174
+ searchOrganizationLicenses(ctx: RouteContext, input: LicenseListRuntimeSearchInput): Promise<SubmitAndPollResult>;
175
+ /**
176
+ * Lists organization-owned license seats using the same `License/_search`
177
+ * route with optional filters.
178
+ */
179
+ listOrganizationLicenses(ctx: RouteContext, input?: LicenseListRuntimeSearchInput): Promise<SubmitAndPollResult>;
180
+ searchOrganizationLicenseOffers(ctx: RouteContext, input: LicenseOfferRuntimeSearchInput): Promise<SubmitAndPollResult>;
181
+ listOrganizationLicenseOffers(ctx: RouteContext, input?: LicenseOfferRuntimeSearchInput): Promise<SubmitAndPollResult>;
182
+ searchOrganizationLicenseOrders(ctx: RouteContext, input: LicenseOrderRuntimeSearchInput): Promise<SubmitAndPollResult>;
183
+ listOrganizationLicenseOrders(ctx: RouteContext, input?: LicenseOrderRuntimeSearchInput): Promise<SubmitAndPollResult>;
184
+ /**
185
+ * Confirms an already paid organization-side license order so additional
186
+ * seats become usable once GW CORE exposes the public converged route.
187
+ *
188
+ * Current runtime note:
189
+ * - search/list for organization license offers and orders already works
190
+ * - the public/write post-payment seat activation route is not wired yet
191
+ * - this method therefore fails explicitly instead of guessing a transport
192
+ * contract that is not stable in GW CORE
193
+ */
194
+ confirmOrganizationLicenseOrder(ctx: RouteContext, input: OrganizationLicenseOrderConfirmInput, pollOptions?: PollOptions): Promise<SubmitAndPollResult>;
150
195
  /**
151
196
  * Starts the onboarding flow for an individual-oriented tenant or index.
152
197
  */
@@ -178,19 +223,31 @@ export declare class HttpRuntimeClient implements NodeRuntimeClient {
178
223
  */
179
224
  purgeIndividual(ctx: RouteContext, input: IndividualOrganizationLifecycleInput, pollOptions?: PollOptions): Promise<SubmitAndPollResult>;
180
225
  /**
181
- * Placeholder for a future GW CORE member/caregiver lifecycle contract.
182
- *
183
- * Current GW CORE does not yet expose a stable lifecycle route for
184
- * `RelatedPerson` / individual-member disable.
226
+ * Soft-disables a `RelatedPerson` membership/contact using the current
227
+ * public batch-update path and `RelatedPerson.active = false`.
185
228
  */
186
- disableIndividualMember(_ctx: RouteContext, _input: IndividualMemberLifecycleInput, _pollOptions?: PollOptions): Promise<SubmitAndPollResult>;
229
+ disableIndividualMember(ctx: RouteContext, input: IndividualMemberLifecycleInput, pollOptions?: PollOptions): Promise<SubmitAndPollResult>;
230
+ /**
231
+ * Searches individual/family-side license seats through the canonical
232
+ * `License/_search` route.
233
+ */
234
+ searchIndividualLicenses(ctx: RouteContext, input: LicenseListRuntimeSearchInput): Promise<SubmitAndPollResult>;
235
+ /**
236
+ * Lists individual/family-side license seats using the same search route
237
+ * with optional filters.
238
+ */
239
+ listIndividualLicenses(ctx: RouteContext, input?: LicenseListRuntimeSearchInput): Promise<SubmitAndPollResult>;
240
+ searchIndividualLicenseOffers(ctx: RouteContext, input: LicenseOfferRuntimeSearchInput): Promise<SubmitAndPollResult>;
241
+ listIndividualLicenseOffers(ctx: RouteContext, input?: LicenseOfferRuntimeSearchInput): Promise<SubmitAndPollResult>;
242
+ searchIndividualLicenseOrders(ctx: RouteContext, input: LicenseOrderRuntimeSearchInput): Promise<SubmitAndPollResult>;
243
+ listIndividualLicenseOrders(ctx: RouteContext, input?: LicenseOrderRuntimeSearchInput): Promise<SubmitAndPollResult>;
187
244
  /**
188
245
  * Placeholder for a future GW CORE member/caregiver lifecycle contract.
189
246
  *
190
247
  * Current GW CORE does not yet expose a stable lifecycle route for
191
248
  * `RelatedPerson` / individual-member purge.
192
249
  */
193
- purgeIndividualMember(_ctx: RouteContext, _input: IndividualMemberLifecycleInput, _pollOptions?: PollOptions): Promise<SubmitAndPollResult>;
250
+ purgeIndividualMember(ctx: RouteContext, input: IndividualMemberLifecycleInput, pollOptions?: PollOptions): Promise<SubmitAndPollResult>;
194
251
  /**
195
252
  * Creates and submits a consent-oriented access grant for a professional actor.
196
253
  */
@@ -241,6 +298,10 @@ export declare class HttpRuntimeClient implements NodeRuntimeClient {
241
298
  * @param input Subject-scoped search parameters.
242
299
  */
243
300
  searchLatestIps(ctx: RouteContext, input: Omit<ClinicalBundleSearchInput, 'includedTypes'>): Promise<SubmitAndPollResult>;
301
+ /**
302
+ * Preferred runtime alias for latest-IPS retrieval used by shared facades.
303
+ */
304
+ getLatestIps(ctx: RouteContext, input: Omit<ClinicalBundleSearchInput, 'includedTypes'>): Promise<SubmitAndPollResult>;
244
305
  /**
245
306
  * Searches a communication/document thread using `thid` and returns the
246
307
  * indexed communication/document projections.
@@ -262,12 +323,22 @@ export declare class HttpRuntimeClient implements NodeRuntimeClient {
262
323
  private requireHostRouteContext;
263
324
  hostRegistryOrganizationActivatePath(ctx?: HostRouteContext): string;
264
325
  hostRegistryOrganizationActivatePollPath(ctx?: HostRouteContext): string;
326
+ hostRegistryOrganizationDisablePath(ctx?: HostRouteContext): string;
327
+ hostRegistryOrganizationDisablePollPath(ctx?: HostRouteContext): string;
328
+ hostRegistryOrganizationPurgePath(ctx?: HostRouteContext): string;
329
+ hostRegistryOrganizationPurgePollPath(ctx?: HostRouteContext): string;
265
330
  hostRegistryOrderBatchPath(ctx?: HostRouteContext): string;
266
331
  hostRegistryOrderPollPath(ctx?: HostRouteContext): string;
267
332
  employeeBatchPath(ctx?: RouteContext): string;
268
333
  employeePollPath(ctx?: RouteContext): string;
269
334
  employeeSearchPath(ctx?: RouteContext): string;
270
335
  employeeSearchPollPath(ctx?: RouteContext): string;
336
+ organizationLicenseSearchPath(ctx?: RouteContext): string;
337
+ organizationLicenseSearchPollPath(ctx?: RouteContext): string;
338
+ organizationLicenseOfferSearchPath(ctx?: RouteContext): string;
339
+ organizationLicenseOfferSearchPollPath(ctx?: RouteContext): string;
340
+ organizationLicenseOrderSearchPath(ctx?: RouteContext): string;
341
+ organizationLicenseOrderSearchPollPath(ctx?: RouteContext): string;
271
342
  employeePurgePath(ctx?: RouteContext): string;
272
343
  employeePurgePollPath(ctx?: RouteContext): string;
273
344
  individualFamilyOrganizationBatchPath(ctx?: RouteContext): string;
@@ -278,10 +349,18 @@ export declare class HttpRuntimeClient implements NodeRuntimeClient {
278
349
  individualFamilyOrganizationDisablePollPath(ctx?: RouteContext): string;
279
350
  individualFamilyOrganizationPurgePath(ctx?: RouteContext): string;
280
351
  individualFamilyOrganizationPurgePollPath(ctx?: RouteContext): string;
352
+ individualLicenseSearchPath(ctx?: RouteContext): string;
353
+ individualLicenseSearchPollPath(ctx?: RouteContext): string;
354
+ individualLicenseOfferSearchPath(ctx?: RouteContext): string;
355
+ individualLicenseOfferSearchPollPath(ctx?: RouteContext): string;
356
+ individualLicenseOrderSearchPath(ctx?: RouteContext): string;
357
+ individualLicenseOrderSearchPollPath(ctx?: RouteContext): string;
281
358
  individualFamilyOrderBatchPath(ctx?: RouteContext): string;
282
359
  individualFamilyOrderPollPath(ctx?: RouteContext): string;
283
360
  individualRelatedPersonBatchPath(ctx?: RouteContext): string;
284
361
  individualRelatedPersonPollPath(ctx?: RouteContext): string;
362
+ individualRelatedPersonPurgePath(ctx?: RouteContext): string;
363
+ individualRelatedPersonPurgePollPath(ctx?: RouteContext): string;
285
364
  individualConsentR4BatchPath(ctx: RouteContext): string;
286
365
  individualConsentR4PollPath(ctx: RouteContext): string;
287
366
  individualCommunicationBatchPath(ctx: RouteContext, format: 'org.hl7.fhir.api' | 'org.hl7.fhir.r4'): string;
@@ -292,7 +371,6 @@ export declare class HttpRuntimeClient implements NodeRuntimeClient {
292
371
  identityTokenExchangePollPath(ctx: RouteContext): string;
293
372
  identityOpenIdSmartTokenPath(ctx: RouteContext): string;
294
373
  identityOpenIdSmartTokenPollPath(ctx: RouteContext): string;
295
- private extractOfferId;
296
374
  private appendHttpTrace;
297
375
  private parseTraceBody;
298
376
  private parseTraceRawText;