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.
- package/dist/backend-profile-runtime.d.ts +23 -0
- package/dist/backend-profile-runtime.js +23 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/individual-start.d.ts +33 -0
- package/dist/individual-start.js +45 -2
- package/dist/node-runtime-client.d.ts +39 -4
- package/dist/node-runtime-client.js +124 -4
- package/dist/orchestration/client-port.d.ts +4 -1
- package/dist/orchestration/individual-controller-sdk.d.ts +10 -1
- package/dist/orchestration/individual-controller-sdk.js +15 -0
- package/dist/orchestration/individual-member-sdk.d.ts +10 -1
- package/dist/orchestration/individual-member-sdk.js +15 -0
- package/dist/resource-operations.d.ts +111 -4
- package/dist/resource-operations.js +83 -3
- package/dist/runtime-client-paths.d.ts +6 -2
- package/dist/runtime-client-paths.js +4 -0
- package/dist/runtime-transport.d.ts +13 -1
- package/dist/runtime-transport.js +18 -3
- package/dist/server-profile-protection.d.ts +64 -0
- package/dist/server-profile-protection.js +110 -0
- package/dist/server-profile-session.d.ts +115 -0
- package/dist/server-profile-session.js +259 -0
- package/dist/session.d.ts +7 -0
- package/dist/session.js +10 -0
- package/package.json +3 -3
- package/dist/legal-organization-onboarding-facade.d.ts +0 -70
- package/dist/legal-organization-onboarding-facade.js +0 -169
- package/dist/lifecycle-examples.d.ts +0 -7
- package/dist/lifecycle-examples.js +0 -8
- package/dist/runtime-software-proof.d.ts +0 -51
- package/dist/runtime-software-proof.js +0 -34
- package/dist/simple-device-activation.d.ts +0 -44
- package/dist/simple-device-activation.js +0 -44
- package/dist/simple-host-onboarding.d.ts +0 -27
- package/dist/simple-host-onboarding.js +0 -39
- package/dist/simple-individual-onboarding.d.ts +0 -27
- package/dist/simple-individual-onboarding.js +0 -38
- package/dist/simple-individual-start.d.ts +0 -45
- package/dist/simple-individual-start.js +0 -59
- package/dist/simple-poll-options.d.ts +0 -5
- package/dist/simple-poll-options.js +0 -17
- package/dist/simple-smart-token.d.ts +0 -58
- 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 {};
|
package/dist/individual-start.js
CHANGED
|
@@ -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:
|
|
493
|
-
individualCommunicationPollPath(ctx: RouteContext, format:
|
|
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.
|
|
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.
|