gdc-sdk-node-ts 2.0.2 → 2.0.5
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 +72 -30
- package/dist/backend-profile-runtime.d.ts +48 -0
- package/dist/backend-profile-runtime.js +62 -0
- package/dist/family-organization-registration.d.ts +40 -0
- package/dist/family-organization-registration.js +54 -0
- package/dist/family-organization-search.d.ts +30 -0
- package/dist/family-organization-search.js +59 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +5 -0
- package/dist/individual-controller-backend-runtime.d.ts +13 -0
- package/dist/individual-controller-backend-runtime.js +14 -0
- package/dist/legal-organization-onboarding-facade.d.ts +70 -0
- package/dist/legal-organization-onboarding-facade.js +169 -0
- package/dist/node-runtime-client.d.ts +47 -4
- package/dist/node-runtime-client.js +75 -7
- package/dist/orchestration/client-port.d.ts +7 -1
- package/dist/orchestration/individual-controller-sdk.d.ts +18 -1
- package/dist/orchestration/individual-controller-sdk.js +21 -0
- package/dist/orchestration/organization-controller-sdk.d.ts +3 -2
- package/dist/orchestration/organization-controller-sdk.js +3 -2
- package/dist/orchestration/professional-sdk.d.ts +11 -1
- package/dist/orchestration/professional-sdk.js +14 -0
- package/dist/organization-controller-backend-runtime.d.ts +65 -0
- package/dist/organization-controller-backend-runtime.js +83 -0
- package/dist/professional-backend-runtime.d.ts +36 -0
- package/dist/professional-backend-runtime.js +41 -0
- package/dist/profile-workspace.d.ts +82 -0
- package/dist/profile-workspace.js +127 -0
- package/dist/resource-operations.d.ts +24 -0
- package/dist/resource-operations.js +24 -1
- package/package.json +4 -3
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { LegalOrganizationVerificationRouting, LegalOrganizationVerificationTransactionController, LegalOrganizationVerificationTransactionInput, LegalOrganizationVerificationTransactionOrganization, LegalOrganizationVerificationRepresentativePayload } from 'gdc-common-utils-ts/utils/legal-organization-verification-transaction';
|
|
2
|
+
import type { NodeOrganizationActivationInput } from './orchestration/client-port.js';
|
|
3
|
+
export type LegalOrganizationFormFields = Readonly<{
|
|
4
|
+
legalName?: string;
|
|
5
|
+
legalIdentifierType?: string;
|
|
6
|
+
legalIdentifierValue?: string;
|
|
7
|
+
taxId?: string;
|
|
8
|
+
addressCountry?: string;
|
|
9
|
+
controllerEmail?: string;
|
|
10
|
+
controllerRole?: string;
|
|
11
|
+
serviceCategory?: string;
|
|
12
|
+
serviceIdentifier?: string;
|
|
13
|
+
serviceUrl?: string;
|
|
14
|
+
}>;
|
|
15
|
+
export type LegalOrganizationOnboardingValidationIssue = Readonly<{
|
|
16
|
+
severity: 'error' | 'warning';
|
|
17
|
+
code: string;
|
|
18
|
+
message: string;
|
|
19
|
+
field?: keyof LegalOrganizationFormFields | 'claims' | string;
|
|
20
|
+
}>;
|
|
21
|
+
export type LegalOrganizationOnboardingValidationResult = Readonly<{
|
|
22
|
+
ok: boolean;
|
|
23
|
+
errors: LegalOrganizationOnboardingValidationIssue[];
|
|
24
|
+
warnings: LegalOrganizationOnboardingValidationIssue[];
|
|
25
|
+
normalizedClaims: Record<string, unknown>;
|
|
26
|
+
}>;
|
|
27
|
+
export interface LegalOrganizationOnboardingEditor {
|
|
28
|
+
setLegalName(value: string): LegalOrganizationOnboardingEditor;
|
|
29
|
+
setLegalIdentifierType(value: string): LegalOrganizationOnboardingEditor;
|
|
30
|
+
setLegalIdentifierValue(value: string): LegalOrganizationOnboardingEditor;
|
|
31
|
+
setTaxId(value: string): LegalOrganizationOnboardingEditor;
|
|
32
|
+
setAddressCountry(value: string): LegalOrganizationOnboardingEditor;
|
|
33
|
+
setControllerEmail(value: string): LegalOrganizationOnboardingEditor;
|
|
34
|
+
setControllerRole(value: string): LegalOrganizationOnboardingEditor;
|
|
35
|
+
setServiceCategory(value: string): LegalOrganizationOnboardingEditor;
|
|
36
|
+
setServiceIdentifier(value: string): LegalOrganizationOnboardingEditor;
|
|
37
|
+
setServiceUrl(value: string): LegalOrganizationOnboardingEditor;
|
|
38
|
+
getFormFields(): LegalOrganizationFormFields;
|
|
39
|
+
buildClaims(): Record<string, unknown>;
|
|
40
|
+
validate(): LegalOrganizationOnboardingValidationResult;
|
|
41
|
+
buildVerificationTransactionInput(input: Readonly<{
|
|
42
|
+
controller: LegalOrganizationVerificationTransactionController;
|
|
43
|
+
organization?: LegalOrganizationVerificationTransactionOrganization;
|
|
44
|
+
legalRepresentativePayload?: LegalOrganizationVerificationRepresentativePayload;
|
|
45
|
+
verification?: LegalOrganizationVerificationRouting;
|
|
46
|
+
attachments?: unknown[];
|
|
47
|
+
}>): LegalOrganizationVerificationTransactionInput;
|
|
48
|
+
buildActivationInput(input: Readonly<{
|
|
49
|
+
vpToken: string;
|
|
50
|
+
controller: LegalOrganizationVerificationTransactionController;
|
|
51
|
+
capabilities?: readonly string[];
|
|
52
|
+
}>): NodeOrganizationActivationInput;
|
|
53
|
+
}
|
|
54
|
+
export interface LegalOrganizationOnboardingFacade {
|
|
55
|
+
createDraft(initial?: LegalOrganizationFormFields): LegalOrganizationFormFields;
|
|
56
|
+
createEditor(initial?: LegalOrganizationFormFields): LegalOrganizationOnboardingEditor;
|
|
57
|
+
setLegalName(fields: LegalOrganizationFormFields, value: string): LegalOrganizationFormFields;
|
|
58
|
+
setLegalIdentifierType(fields: LegalOrganizationFormFields, value: string): LegalOrganizationFormFields;
|
|
59
|
+
setLegalIdentifierValue(fields: LegalOrganizationFormFields, value: string): LegalOrganizationFormFields;
|
|
60
|
+
setTaxId(fields: LegalOrganizationFormFields, value: string): LegalOrganizationFormFields;
|
|
61
|
+
setAddressCountry(fields: LegalOrganizationFormFields, value: string): LegalOrganizationFormFields;
|
|
62
|
+
setControllerEmail(fields: LegalOrganizationFormFields, value: string): LegalOrganizationFormFields;
|
|
63
|
+
setControllerRole(fields: LegalOrganizationFormFields, value: string): LegalOrganizationFormFields;
|
|
64
|
+
setServiceCategory(fields: LegalOrganizationFormFields, value: string): LegalOrganizationFormFields;
|
|
65
|
+
setServiceIdentifier(fields: LegalOrganizationFormFields, value: string): LegalOrganizationFormFields;
|
|
66
|
+
setServiceUrl(fields: LegalOrganizationFormFields, value: string): LegalOrganizationFormFields;
|
|
67
|
+
buildClaims(fields: LegalOrganizationFormFields): Record<string, unknown>;
|
|
68
|
+
validate(fields: LegalOrganizationFormFields): LegalOrganizationOnboardingValidationResult;
|
|
69
|
+
}
|
|
70
|
+
export declare function createLegalOrganizationOnboardingFacade(): LegalOrganizationOnboardingFacade;
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
// Copyright 2026 Antifraud Services Inc. under the Apache License, Version 2.0.
|
|
2
|
+
import { ClaimsOrganizationSchemaorg, ClaimsPersonSchemaorg, ClaimsServiceSchemaorg, } from 'gdc-common-utils-ts/constants/schemaorg';
|
|
3
|
+
import { ServiceCapability } from 'gdc-common-utils-ts/constants/service-capabilities';
|
|
4
|
+
import { validateLegalOrganizationOnboardingClaims, } from 'gdc-common-utils-ts/utils/legal-organization-onboarding';
|
|
5
|
+
function normalizeText(value) {
|
|
6
|
+
return typeof value === 'string' ? value.trim() : '';
|
|
7
|
+
}
|
|
8
|
+
function normalizeOptionalText(value) {
|
|
9
|
+
const normalized = normalizeText(value);
|
|
10
|
+
return normalized || undefined;
|
|
11
|
+
}
|
|
12
|
+
function cloneFields(fields) {
|
|
13
|
+
return { ...(fields || {}) };
|
|
14
|
+
}
|
|
15
|
+
function patchFields(fields, patch) {
|
|
16
|
+
return {
|
|
17
|
+
...cloneFields(fields),
|
|
18
|
+
...patch,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function createIssues(fields) {
|
|
22
|
+
const issues = [];
|
|
23
|
+
if (!normalizeOptionalText(fields.legalName)) {
|
|
24
|
+
issues.push({ severity: 'error', code: 'missing-legal-name', message: 'Legal organization name is required.', field: 'legalName' });
|
|
25
|
+
}
|
|
26
|
+
if (!normalizeOptionalText(fields.legalIdentifierType)) {
|
|
27
|
+
issues.push({ severity: 'error', code: 'missing-legal-identifier-type', message: 'Legal identifier type is required.', field: 'legalIdentifierType' });
|
|
28
|
+
}
|
|
29
|
+
if (!normalizeOptionalText(fields.addressCountry)) {
|
|
30
|
+
issues.push({ severity: 'error', code: 'missing-address-country', message: 'Address country is required.', field: 'addressCountry' });
|
|
31
|
+
}
|
|
32
|
+
if (!normalizeOptionalText(fields.controllerEmail)) {
|
|
33
|
+
issues.push({ severity: 'error', code: 'missing-controller-email', message: 'Controller email is required.', field: 'controllerEmail' });
|
|
34
|
+
}
|
|
35
|
+
if (!normalizeOptionalText(fields.serviceCategory)) {
|
|
36
|
+
issues.push({ severity: 'error', code: 'missing-service-category', message: 'Service category is required.', field: 'serviceCategory' });
|
|
37
|
+
}
|
|
38
|
+
return issues;
|
|
39
|
+
}
|
|
40
|
+
function createEditorFromFacade(facade, initial) {
|
|
41
|
+
let formFields = facade.createDraft(initial);
|
|
42
|
+
const editor = {
|
|
43
|
+
setLegalName(value) { formFields = facade.setLegalName(formFields, value); return editor; },
|
|
44
|
+
setLegalIdentifierType(value) { formFields = facade.setLegalIdentifierType(formFields, value); return editor; },
|
|
45
|
+
setLegalIdentifierValue(value) { formFields = facade.setLegalIdentifierValue(formFields, value); return editor; },
|
|
46
|
+
setTaxId(value) { formFields = facade.setTaxId(formFields, value); return editor; },
|
|
47
|
+
setAddressCountry(value) { formFields = facade.setAddressCountry(formFields, value); return editor; },
|
|
48
|
+
setControllerEmail(value) { formFields = facade.setControllerEmail(formFields, value); return editor; },
|
|
49
|
+
setControllerRole(value) { formFields = facade.setControllerRole(formFields, value); return editor; },
|
|
50
|
+
setServiceCategory(value) { formFields = facade.setServiceCategory(formFields, value); return editor; },
|
|
51
|
+
setServiceIdentifier(value) { formFields = facade.setServiceIdentifier(formFields, value); return editor; },
|
|
52
|
+
setServiceUrl(value) { formFields = facade.setServiceUrl(formFields, value); return editor; },
|
|
53
|
+
getFormFields() { return cloneFields(formFields); },
|
|
54
|
+
buildClaims() { return facade.buildClaims(formFields); },
|
|
55
|
+
validate() { return facade.validate(formFields); },
|
|
56
|
+
buildVerificationTransactionInput(input) {
|
|
57
|
+
return {
|
|
58
|
+
claims: facade.buildClaims(formFields),
|
|
59
|
+
controller: input.controller,
|
|
60
|
+
...(input.organization ? { organization: input.organization } : {}),
|
|
61
|
+
...(input.legalRepresentativePayload ? { legalRepresentativePayload: input.legalRepresentativePayload } : {}),
|
|
62
|
+
...(input.verification ? { verification: input.verification } : {}),
|
|
63
|
+
...(input.attachments ? { attachments: input.attachments } : {}),
|
|
64
|
+
};
|
|
65
|
+
},
|
|
66
|
+
buildActivationInput(input) {
|
|
67
|
+
const claims = facade.buildClaims(formFields);
|
|
68
|
+
const service = {
|
|
69
|
+
url: String(claims[ClaimsServiceSchemaorg.url] || '').trim() || undefined,
|
|
70
|
+
capabilities: [...new Set((input.capabilities || [ServiceCapability.IndexProvider, ServiceCapability.DigitalTwinReader])
|
|
71
|
+
.map((item) => String(item || '').trim())
|
|
72
|
+
.filter(Boolean))],
|
|
73
|
+
};
|
|
74
|
+
return {
|
|
75
|
+
vpToken: input.vpToken,
|
|
76
|
+
controller: input.controller,
|
|
77
|
+
service,
|
|
78
|
+
additionalClaims: claims,
|
|
79
|
+
};
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
return editor;
|
|
83
|
+
}
|
|
84
|
+
export function createLegalOrganizationOnboardingFacade() {
|
|
85
|
+
return {
|
|
86
|
+
createDraft(initial = {}) {
|
|
87
|
+
return cloneFields(initial);
|
|
88
|
+
},
|
|
89
|
+
createEditor(initial = {}) {
|
|
90
|
+
return createEditorFromFacade(this, initial);
|
|
91
|
+
},
|
|
92
|
+
setLegalName(fields, value) {
|
|
93
|
+
return patchFields(fields, { legalName: normalizeOptionalText(value) });
|
|
94
|
+
},
|
|
95
|
+
setLegalIdentifierType(fields, value) {
|
|
96
|
+
return patchFields(fields, { legalIdentifierType: normalizeOptionalText(value) });
|
|
97
|
+
},
|
|
98
|
+
setLegalIdentifierValue(fields, value) {
|
|
99
|
+
return patchFields(fields, { legalIdentifierValue: normalizeOptionalText(value) });
|
|
100
|
+
},
|
|
101
|
+
setTaxId(fields, value) {
|
|
102
|
+
return patchFields(fields, { taxId: normalizeOptionalText(value) });
|
|
103
|
+
},
|
|
104
|
+
setAddressCountry(fields, value) {
|
|
105
|
+
return patchFields(fields, { addressCountry: normalizeOptionalText(value) });
|
|
106
|
+
},
|
|
107
|
+
setControllerEmail(fields, value) {
|
|
108
|
+
const normalized = normalizeOptionalText(value);
|
|
109
|
+
return patchFields(fields, { controllerEmail: normalized?.toLowerCase() });
|
|
110
|
+
},
|
|
111
|
+
setControllerRole(fields, value) {
|
|
112
|
+
return patchFields(fields, { controllerRole: normalizeOptionalText(value) });
|
|
113
|
+
},
|
|
114
|
+
setServiceCategory(fields, value) {
|
|
115
|
+
return patchFields(fields, { serviceCategory: normalizeOptionalText(value) });
|
|
116
|
+
},
|
|
117
|
+
setServiceIdentifier(fields, value) {
|
|
118
|
+
return patchFields(fields, { serviceIdentifier: normalizeOptionalText(value) });
|
|
119
|
+
},
|
|
120
|
+
setServiceUrl(fields, value) {
|
|
121
|
+
return patchFields(fields, { serviceUrl: normalizeOptionalText(value) });
|
|
122
|
+
},
|
|
123
|
+
buildClaims(fields) {
|
|
124
|
+
const claims = {
|
|
125
|
+
'@context': 'org.schema',
|
|
126
|
+
};
|
|
127
|
+
if (normalizeOptionalText(fields.legalName))
|
|
128
|
+
claims[ClaimsOrganizationSchemaorg.legalName] = normalizeText(fields.legalName);
|
|
129
|
+
if (normalizeOptionalText(fields.legalIdentifierType))
|
|
130
|
+
claims[ClaimsOrganizationSchemaorg.identifierType] = normalizeText(fields.legalIdentifierType);
|
|
131
|
+
if (normalizeOptionalText(fields.legalIdentifierValue))
|
|
132
|
+
claims[ClaimsOrganizationSchemaorg.identifierValue] = normalizeText(fields.legalIdentifierValue);
|
|
133
|
+
if (normalizeOptionalText(fields.taxId))
|
|
134
|
+
claims[ClaimsOrganizationSchemaorg.taxId] = normalizeText(fields.taxId);
|
|
135
|
+
if (normalizeOptionalText(fields.addressCountry))
|
|
136
|
+
claims[ClaimsOrganizationSchemaorg.addressCountry] = normalizeText(fields.addressCountry);
|
|
137
|
+
if (normalizeOptionalText(fields.controllerEmail))
|
|
138
|
+
claims[ClaimsPersonSchemaorg.email] = normalizeText(fields.controllerEmail).toLowerCase();
|
|
139
|
+
if (normalizeOptionalText(fields.controllerRole))
|
|
140
|
+
claims[ClaimsPersonSchemaorg.hasOccupationalRoleValue] = normalizeText(fields.controllerRole);
|
|
141
|
+
if (normalizeOptionalText(fields.serviceCategory))
|
|
142
|
+
claims[ClaimsServiceSchemaorg.category] = normalizeText(fields.serviceCategory);
|
|
143
|
+
if (normalizeOptionalText(fields.serviceIdentifier))
|
|
144
|
+
claims[ClaimsServiceSchemaorg.identifier] = normalizeText(fields.serviceIdentifier);
|
|
145
|
+
if (normalizeOptionalText(fields.serviceUrl))
|
|
146
|
+
claims[ClaimsServiceSchemaorg.url] = normalizeText(fields.serviceUrl);
|
|
147
|
+
return validateLegalOrganizationOnboardingClaims(claims).normalizedClaims;
|
|
148
|
+
},
|
|
149
|
+
validate(fields) {
|
|
150
|
+
const normalizedClaims = this.buildClaims(fields);
|
|
151
|
+
const issues = createIssues(fields);
|
|
152
|
+
const sharedValidation = validateLegalOrganizationOnboardingClaims(normalizedClaims);
|
|
153
|
+
for (const error of sharedValidation.errors) {
|
|
154
|
+
issues.push({
|
|
155
|
+
severity: 'error',
|
|
156
|
+
code: error.code.toLowerCase(),
|
|
157
|
+
message: error.message,
|
|
158
|
+
field: error.claimPaths[0] || 'claims',
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
return {
|
|
162
|
+
ok: !issues.some((issue) => issue.severity === 'error'),
|
|
163
|
+
errors: issues.filter((issue) => issue.severity === 'error'),
|
|
164
|
+
warnings: issues.filter((issue) => issue.severity === 'warning'),
|
|
165
|
+
normalizedClaims,
|
|
166
|
+
};
|
|
167
|
+
},
|
|
168
|
+
};
|
|
169
|
+
}
|
|
@@ -4,10 +4,12 @@ import { type ResolvedAppInfo } from 'gdc-sdk-core-ts';
|
|
|
4
4
|
import { type HostRouteContext, type HostedTenantLifecycleInput } from './host-onboarding.js';
|
|
5
5
|
import type { NodeLegalOrganizationVerificationTransactionInput, NodeOrganizationDidBindingInput, NodeOrganizationActivationInput } from './orchestration/client-port.js';
|
|
6
6
|
import { type IndividualOrganizationConfirmOrderInput, type RouteContext } from './individual-onboarding.js';
|
|
7
|
+
import { type EnsureFamilyOrganizationRegistrationInput } from './family-organization-registration.js';
|
|
8
|
+
import { type FamilyOrganizationSearchInput } from './family-organization-search.js';
|
|
7
9
|
import { type SmartTokenRequestInput } from './smart-token.js';
|
|
8
10
|
import { type OrganizationLicenseOrderConfirmInput } from './organization-license-order.js';
|
|
9
11
|
import { type IndividualOrganizationBootstrapInput, type IndividualOrganizationStartResult } from './individual-start.js';
|
|
10
|
-
import { type CommunicationIngestionInput, type CommunicationParticipantRuntimeSearchInput, 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';
|
|
12
|
+
import { type CommunicationIngestionInput, type CommunicationParticipantRuntimeSearchInput, type ClinicalBundleSearchInput, type GrantProfessionalAccessInput, type GrantProfessionalAccessResult, type IndividualMemberLifecycleInput, type IndividualOrganizationLifecycleInput, type LicenseListRuntimeSearchInput, type LicenseOfferRuntimeSearchInput, type LicenseOrderRuntimeSearchInput, type OrganizationEmployeeCreationInput, type OrganizationEmployeeLifecycleInput, type OrganizationEmployeeSearchInput, type RevokeProfessionalAccessInput, type RevokeProfessionalAccessResult, type RelatedPersonUpsertInput } from './resource-operations.js';
|
|
11
13
|
import type { LegalOrganizationOrderInput } from './host-onboarding.js';
|
|
12
14
|
import type { SmartTokenExchangeResult } from './smart-token.js';
|
|
13
15
|
import type { NodeRuntimeClient, PollOptions, PollResult, SubmitAndPollResult, SubmitPayload, SubmitResponse } from './orchestration/client-port.js';
|
|
@@ -120,8 +122,9 @@ export declare class HttpRuntimeClient implements NodeRuntimeClient {
|
|
|
120
122
|
* - keeps the controller business key inside the submitted bundle payload
|
|
121
123
|
*
|
|
122
124
|
* Flow separation:
|
|
123
|
-
* - `_transaction` is the
|
|
124
|
-
* -
|
|
125
|
+
* - `_transaction` is the new host onboarding step
|
|
126
|
+
* - this runtime does not chain `_activate` after `_transaction`
|
|
127
|
+
* - `_activate` remains available only for the older ICA `_verify` based flow
|
|
125
128
|
*/
|
|
126
129
|
submitLegalOrganizationVerificationTransaction(hostCtx: HostRouteContext, input: NodeLegalOrganizationVerificationTransactionInput, pollOptions?: PollOptions): Promise<SubmitAndPollResult>;
|
|
127
130
|
/**
|
|
@@ -140,7 +143,7 @@ export declare class HttpRuntimeClient implements NodeRuntimeClient {
|
|
|
140
143
|
*
|
|
141
144
|
* Plaintext transport note:
|
|
142
145
|
* - this Node runtime currently submits `_activate` as
|
|
143
|
-
* `application/didcomm-
|
|
146
|
+
* `application/didcomm-plain+json`
|
|
144
147
|
* - because there is no real outer JWS/JWE envelope in that mode, the
|
|
145
148
|
* runtime mirrors the technical communication metadata derived from
|
|
146
149
|
* `controller.publicKeyJwk` / `controller.jwks` into `meta.jws.protected`
|
|
@@ -233,6 +236,27 @@ export declare class HttpRuntimeClient implements NodeRuntimeClient {
|
|
|
233
236
|
* Starts the onboarding flow for an individual-oriented tenant or index.
|
|
234
237
|
*/
|
|
235
238
|
startIndividualOrganization(input: IndividualOrganizationBootstrapInput): Promise<IndividualOrganizationStartResult>;
|
|
239
|
+
/**
|
|
240
|
+
* Searches one existing family/individual registration by controller phone +
|
|
241
|
+
* usualname, with optional birth-date disambiguation.
|
|
242
|
+
*/
|
|
243
|
+
searchFamilyOrganization(ctx: RouteContext, input: FamilyOrganizationSearchInput): Promise<Readonly<{
|
|
244
|
+
status: import("gdc-common-utils-ts").FamilyRegistrationStatus;
|
|
245
|
+
offerId?: string;
|
|
246
|
+
organizationId?: string;
|
|
247
|
+
subjectInfo?: import("gdc-common-utils-ts").FamilyOrganizationSubjectInfo;
|
|
248
|
+
missingFields?: string[];
|
|
249
|
+
updatedAt?: string;
|
|
250
|
+
}> | null>;
|
|
251
|
+
/**
|
|
252
|
+
* Searches one existing family/individual registration and starts the
|
|
253
|
+
* bootstrap flow only when the registration does not already exist.
|
|
254
|
+
*/
|
|
255
|
+
ensureFamilyOrganizationRegistration(ctx: RouteContext, input: EnsureFamilyOrganizationRegistrationInput): Promise<Readonly<{
|
|
256
|
+
status: "already_exists" | "resume_required" | "new_created";
|
|
257
|
+
summary?: import("gdc-common-utils-ts").FamilyOrganizationSummary;
|
|
258
|
+
started?: IndividualOrganizationStartResult;
|
|
259
|
+
}>>;
|
|
236
260
|
/**
|
|
237
261
|
* Confirms the order returned by `startIndividualOrganization(...)`.
|
|
238
262
|
*/
|
|
@@ -289,6 +313,11 @@ export declare class HttpRuntimeClient implements NodeRuntimeClient {
|
|
|
289
313
|
* Creates and submits a consent-oriented access grant for a professional actor.
|
|
290
314
|
*/
|
|
291
315
|
grantProfessionalAccess(ctx: RouteContext, input: GrantProfessionalAccessInput): Promise<GrantProfessionalAccessResult>;
|
|
316
|
+
/**
|
|
317
|
+
* Closes an existing professional consent by setting its period end and
|
|
318
|
+
* resubmitting the updated consent resource.
|
|
319
|
+
*/
|
|
320
|
+
revokeProfessionalAccess(ctx: RouteContext, input: RevokeProfessionalAccessInput): Promise<RevokeProfessionalAccessResult>;
|
|
292
321
|
/**
|
|
293
322
|
* Requests SMART/OpenID token material through the gateway.
|
|
294
323
|
*
|
|
@@ -367,6 +396,18 @@ export declare class HttpRuntimeClient implements NodeRuntimeClient {
|
|
|
367
396
|
*/
|
|
368
397
|
private wrapBundleAsGatewayTransactionMessage;
|
|
369
398
|
private hostRegistryPath;
|
|
399
|
+
/**
|
|
400
|
+
* Resolves the host route segment without forcing callers to remember whether
|
|
401
|
+
* the same raw string is named `hostNetwork` or `sector` in a given layer.
|
|
402
|
+
*
|
|
403
|
+
* Step by step:
|
|
404
|
+
* - host routes use `/host/cds-{jurisdiction}/v1/{host-network}`
|
|
405
|
+
* - tenant routes use `/{tenantId}/cds-{jurisdiction}/v1/{tenant-sector}`
|
|
406
|
+
* - older live tests and adapters sometimes passed the host segment under
|
|
407
|
+
* `sector`, which is semantically wrong for host routes
|
|
408
|
+
* - new code should prefer `hostNetwork`
|
|
409
|
+
* - compatibility code may pass `hostNetworkOrTenantSector`
|
|
410
|
+
*/
|
|
370
411
|
private requireHostRouteContext;
|
|
371
412
|
hostRegistryOrganizationTransactionPath(ctx?: HostRouteContext): string;
|
|
372
413
|
hostRegistryOrganizationTransactionPollPath(ctx?: HostRouteContext): string;
|
|
@@ -394,6 +435,8 @@ export declare class HttpRuntimeClient implements NodeRuntimeClient {
|
|
|
394
435
|
employeePurgePollPath(ctx?: RouteContext): string;
|
|
395
436
|
individualFamilyOrganizationBatchPath(ctx?: RouteContext): string;
|
|
396
437
|
individualFamilyOrganizationPollPath(ctx?: RouteContext): string;
|
|
438
|
+
individualFamilyOrganizationSearchPath(ctx?: RouteContext): string;
|
|
439
|
+
individualFamilyOrganizationSearchPollPath(ctx?: RouteContext): string;
|
|
397
440
|
individualFamilyOrganizationTransactionPath(ctx?: RouteContext): string;
|
|
398
441
|
individualFamilyOrganizationTransactionPollPath(ctx?: RouteContext): string;
|
|
399
442
|
individualFamilyOrganizationDisablePath(ctx?: RouteContext): string;
|
|
@@ -2,17 +2,20 @@
|
|
|
2
2
|
// Always create JSDoc, do not use strings inline in keys nor values, use types instead, and reuse the data test examples.
|
|
3
3
|
import fs from 'node:fs';
|
|
4
4
|
import path from 'node:path';
|
|
5
|
+
import { DIDCOMM_DEFAULT_ACCEPT_HEADER, DIDCOMM_PLAINTEXT_JSON_MEDIA_TYPE, } from 'gdc-common-utils-ts/utils/didcomm-submit';
|
|
5
6
|
import { buildLegalOrganizationVerificationGatewayRequestBundle, buildOrganizationDidBindingBundle, buildAppHeaders, createBootstrapFacade, resolveAppInfo, } from 'gdc-sdk-core-ts';
|
|
6
7
|
import { buildConsentClaimsSimpleWithCid } from 'gdc-common-utils-ts/utils/consent';
|
|
7
8
|
import { buildDidcommPlaintextTransportMetadata } from 'gdc-common-utils-ts/utils/activation-request';
|
|
8
9
|
import { pollUntilCompleteWithMethod } from './async-polling.js';
|
|
9
10
|
import { confirmLegalOrganizationOrderWithDeps, HostLifecycleRequestType, HostedTenantLifecycleRequestType, submitHostedTenantLifecycleWithDeps, } from './host-onboarding.js';
|
|
10
11
|
import { confirmIndividualOrganizationOrderWithDeps, } from './individual-onboarding.js';
|
|
12
|
+
import { ensureFamilyOrganizationRegistrationWithDeps, } from './family-organization-registration.js';
|
|
13
|
+
import { searchFamilyOrganizationWithDeps } from './family-organization-search.js';
|
|
11
14
|
import { requestSmartTokenWithDeps } from './smart-token.js';
|
|
12
15
|
import { extractOfferIdFromResponseBody, extractOfferPreviewFromResponseBody, } from './order-offer-summary.js';
|
|
13
16
|
import { confirmOrganizationLicenseOrderWithDeps } from './organization-license-order.js';
|
|
14
17
|
import { startIndividualOrganizationWithDeps } from './individual-start.js';
|
|
15
|
-
import { createOrganizationEmployeeWithDeps, disableIndividualMemberWithDeps, disableIndividualOrganizationWithDeps, disableOrganizationEmployeeWithDeps, listIndividualLicenseOffersWithDeps, listIndividualLicenseOrdersWithDeps, listIndividualLicensesWithDeps, listOrganizationLicenseOffersWithDeps, listOrganizationLicenseOrdersWithDeps, listOrganizationLicensesWithDeps, grantProfessionalAccessWithDeps, ingestCommunicationAndUpdateIndexWithDeps, searchCommunicationParticipantsWithDeps, purgeIndividualMemberWithDeps, purgeIndividualOrganizationWithDeps, purgeOrganizationEmployeeWithDeps, searchIndividualLicensesWithDeps, searchIndividualLicenseOffersWithDeps, searchIndividualLicenseOrdersWithDeps, searchOrganizationLicensesWithDeps, searchOrganizationLicenseOffersWithDeps, searchOrganizationLicenseOrdersWithDeps, searchOrganizationEmployeesWithDeps, searchClinicalBundleWithDeps, searchLatestIpsWithDeps, upsertRelatedPersonAndPollWithDeps, } from './resource-operations.js';
|
|
18
|
+
import { createOrganizationEmployeeWithDeps, disableIndividualMemberWithDeps, disableIndividualOrganizationWithDeps, disableOrganizationEmployeeWithDeps, listIndividualLicenseOffersWithDeps, listIndividualLicenseOrdersWithDeps, listIndividualLicensesWithDeps, listOrganizationLicenseOffersWithDeps, listOrganizationLicenseOrdersWithDeps, listOrganizationLicensesWithDeps, grantProfessionalAccessWithDeps, ingestCommunicationAndUpdateIndexWithDeps, revokeProfessionalAccessWithDeps, searchCommunicationParticipantsWithDeps, purgeIndividualMemberWithDeps, purgeIndividualOrganizationWithDeps, purgeOrganizationEmployeeWithDeps, searchIndividualLicensesWithDeps, searchIndividualLicenseOffersWithDeps, searchIndividualLicenseOrdersWithDeps, searchOrganizationLicensesWithDeps, searchOrganizationLicenseOffersWithDeps, searchOrganizationLicenseOrdersWithDeps, searchOrganizationEmployeesWithDeps, searchClinicalBundleWithDeps, searchLatestIpsWithDeps, upsertRelatedPersonAndPollWithDeps, } from './resource-operations.js';
|
|
16
19
|
import { submitAndPollWithMethods } from './orchestration/client-port.js';
|
|
17
20
|
import { GwCoreLifecycleAction } from './constants/lifecycle.js';
|
|
18
21
|
const bootstrapFacade = createBootstrapFacade();
|
|
@@ -83,7 +86,7 @@ export class HttpRuntimeClient {
|
|
|
83
86
|
* Submits a batch payload to a gateway batch endpoint.
|
|
84
87
|
*/
|
|
85
88
|
async submitBatch(path, payload) {
|
|
86
|
-
return this.postJson(path, payload,
|
|
89
|
+
return this.postJson(path, payload, DIDCOMM_PLAINTEXT_JSON_MEDIA_TYPE);
|
|
87
90
|
}
|
|
88
91
|
/**
|
|
89
92
|
* Polls a batch-response endpoint until the GW reports a terminal state.
|
|
@@ -107,8 +110,9 @@ export class HttpRuntimeClient {
|
|
|
107
110
|
* - keeps the controller business key inside the submitted bundle payload
|
|
108
111
|
*
|
|
109
112
|
* Flow separation:
|
|
110
|
-
* - `_transaction` is the
|
|
111
|
-
* -
|
|
113
|
+
* - `_transaction` is the new host onboarding step
|
|
114
|
+
* - this runtime does not chain `_activate` after `_transaction`
|
|
115
|
+
* - `_activate` remains available only for the older ICA `_verify` based flow
|
|
112
116
|
*/
|
|
113
117
|
async submitLegalOrganizationVerificationTransaction(hostCtx, input, pollOptions) {
|
|
114
118
|
const thid = `organization-verification-transaction-${runtimeUuid()}`;
|
|
@@ -428,6 +432,38 @@ export class HttpRuntimeClient {
|
|
|
428
432
|
getOfferPreviewFromResponse: (result) => extractOfferPreviewFromResponseBody(result.poll.body),
|
|
429
433
|
});
|
|
430
434
|
}
|
|
435
|
+
/**
|
|
436
|
+
* Searches one existing family/individual registration by controller phone +
|
|
437
|
+
* usualname, with optional birth-date disambiguation.
|
|
438
|
+
*/
|
|
439
|
+
async searchFamilyOrganization(ctx, input) {
|
|
440
|
+
return searchFamilyOrganizationWithDeps({
|
|
441
|
+
routeCtx: ctx,
|
|
442
|
+
input,
|
|
443
|
+
defaultTimeoutMs: 20000,
|
|
444
|
+
defaultIntervalMs: 1000,
|
|
445
|
+
individualFamilyOrganizationSearchPath: this.individualFamilyOrganizationSearchPath.bind(this),
|
|
446
|
+
individualFamilyOrganizationSearchPollPath: this.individualFamilyOrganizationSearchPollPath.bind(this),
|
|
447
|
+
submitAndPoll: this.submitAndPoll.bind(this),
|
|
448
|
+
});
|
|
449
|
+
}
|
|
450
|
+
/**
|
|
451
|
+
* Searches one existing family/individual registration and starts the
|
|
452
|
+
* bootstrap flow only when the registration does not already exist.
|
|
453
|
+
*/
|
|
454
|
+
async ensureFamilyOrganizationRegistration(ctx, input) {
|
|
455
|
+
return ensureFamilyOrganizationRegistrationWithDeps({
|
|
456
|
+
routeCtx: ctx,
|
|
457
|
+
input,
|
|
458
|
+
defaultTimeoutMs: 20000,
|
|
459
|
+
defaultIntervalMs: 1000,
|
|
460
|
+
individualFamilyOrganizationSearchPath: this.individualFamilyOrganizationSearchPath.bind(this),
|
|
461
|
+
individualFamilyOrganizationSearchPollPath: this.individualFamilyOrganizationSearchPollPath.bind(this),
|
|
462
|
+
individualFamilyOrganizationBatchPath: this.individualFamilyOrganizationTransactionPath.bind(this),
|
|
463
|
+
individualFamilyOrganizationPollPath: this.individualFamilyOrganizationTransactionPollPath.bind(this),
|
|
464
|
+
submitAndPoll: this.submitAndPoll.bind(this),
|
|
465
|
+
});
|
|
466
|
+
}
|
|
431
467
|
/**
|
|
432
468
|
* Confirms the order returned by `startIndividualOrganization(...)`.
|
|
433
469
|
*/
|
|
@@ -564,6 +600,17 @@ export class HttpRuntimeClient {
|
|
|
564
600
|
submitAndPoll: this.submitAndPoll.bind(this),
|
|
565
601
|
});
|
|
566
602
|
}
|
|
603
|
+
/**
|
|
604
|
+
* Closes an existing professional consent by setting its period end and
|
|
605
|
+
* resubmitting the updated consent resource.
|
|
606
|
+
*/
|
|
607
|
+
async revokeProfessionalAccess(ctx, input) {
|
|
608
|
+
return revokeProfessionalAccessWithDeps(ctx, input, {
|
|
609
|
+
individualConsentR4BatchPath: this.individualConsentR4BatchPath.bind(this),
|
|
610
|
+
individualConsentR4PollPath: this.individualConsentR4PollPath.bind(this),
|
|
611
|
+
submitAndPoll: this.submitAndPoll.bind(this),
|
|
612
|
+
});
|
|
613
|
+
}
|
|
567
614
|
/**
|
|
568
615
|
* Requests SMART/OpenID token material through the gateway.
|
|
569
616
|
*
|
|
@@ -722,7 +769,7 @@ export class HttpRuntimeClient {
|
|
|
722
769
|
const headers = {
|
|
723
770
|
...this.defaultHeaders,
|
|
724
771
|
'Content-Type': contentType,
|
|
725
|
-
Accept:
|
|
772
|
+
Accept: DIDCOMM_DEFAULT_ACCEPT_HEADER,
|
|
726
773
|
};
|
|
727
774
|
if (this.bearerToken)
|
|
728
775
|
headers.Authorization = `Bearer ${this.bearerToken}`;
|
|
@@ -819,10 +866,29 @@ export class HttpRuntimeClient {
|
|
|
819
866
|
const hostCtx = this.requireHostRouteContext(ctx);
|
|
820
867
|
return `/host/cds-${encodeURIComponent(hostCtx.jurisdiction)}/v1/${encodeURIComponent(hostCtx.hostNetwork || '')}/registry/org.schema/${encodeURIComponent(resourceType)}/${encodeURIComponent(action)}`;
|
|
821
868
|
}
|
|
869
|
+
/**
|
|
870
|
+
* Resolves the host route segment without forcing callers to remember whether
|
|
871
|
+
* the same raw string is named `hostNetwork` or `sector` in a given layer.
|
|
872
|
+
*
|
|
873
|
+
* Step by step:
|
|
874
|
+
* - host routes use `/host/cds-{jurisdiction}/v1/{host-network}`
|
|
875
|
+
* - tenant routes use `/{tenantId}/cds-{jurisdiction}/v1/{tenant-sector}`
|
|
876
|
+
* - older live tests and adapters sometimes passed the host segment under
|
|
877
|
+
* `sector`, which is semantically wrong for host routes
|
|
878
|
+
* - new code should prefer `hostNetwork`
|
|
879
|
+
* - compatibility code may pass `hostNetworkOrTenantSector`
|
|
880
|
+
*/
|
|
822
881
|
requireHostRouteContext(ctx) {
|
|
882
|
+
const hostCtx = (ctx || {});
|
|
823
883
|
const runtimeCtx = (this.ctx || {});
|
|
824
|
-
const jurisdiction = String(
|
|
825
|
-
const hostNetwork = String(
|
|
884
|
+
const jurisdiction = String(hostCtx.jurisdiction || this.ctx?.jurisdiction || '').trim();
|
|
885
|
+
const hostNetwork = String(hostCtx.hostNetwork
|
|
886
|
+
|| hostCtx.hostNetworkOrTenantSector
|
|
887
|
+
|| hostCtx.sector
|
|
888
|
+
|| runtimeCtx.hostNetwork
|
|
889
|
+
|| runtimeCtx.hostNetworkOrTenantSector
|
|
890
|
+
|| runtimeCtx.sector
|
|
891
|
+
|| '').trim();
|
|
826
892
|
if (!jurisdiction || !hostNetwork)
|
|
827
893
|
throw new Error('Host route context is required.');
|
|
828
894
|
return { jurisdiction, hostNetwork };
|
|
@@ -859,6 +925,8 @@ export class HttpRuntimeClient {
|
|
|
859
925
|
employeePurgePollPath(ctx) { return this.v1Path(ctx, 'entity', 'org.schema', 'Employee', `${GwCoreLifecycleAction.Purge}-response`); }
|
|
860
926
|
individualFamilyOrganizationBatchPath(ctx) { return this.v1Path(ctx, 'individual', 'org.schema', 'Organization', GwCoreLifecycleAction.Batch); }
|
|
861
927
|
individualFamilyOrganizationPollPath(ctx) { return this.v1Path(ctx, 'individual', 'org.schema', 'Organization', GwCoreLifecycleAction.BatchResponse); }
|
|
928
|
+
individualFamilyOrganizationSearchPath(ctx) { return this.v1Path(ctx, 'individual', 'org.schema', 'Organization', '_search'); }
|
|
929
|
+
individualFamilyOrganizationSearchPollPath(ctx) { return this.v1Path(ctx, 'individual', 'org.schema', 'Organization', '_search-response'); }
|
|
862
930
|
individualFamilyOrganizationTransactionPath(ctx) { return this.v1Path(ctx, 'individual', 'org.schema', 'Organization', GwCoreLifecycleAction.Transaction); }
|
|
863
931
|
individualFamilyOrganizationTransactionPollPath(ctx) { return this.v1Path(ctx, 'individual', 'org.schema', 'Organization', GwCoreLifecycleAction.TransactionResponse); }
|
|
864
932
|
individualFamilyOrganizationDisablePath(ctx) { return this.v1Path(ctx, 'individual', 'org.schema', 'Organization', GwCoreLifecycleAction.Disable); }
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ControllerBindingInput } from 'gdc-common-utils-ts/models';
|
|
2
|
+
import type { FamilyOrganizationSummary } from 'gdc-common-utils-ts/utils/family-organization-summary';
|
|
2
3
|
import type { LegalOrganizationVerificationTransactionInput } from 'gdc-common-utils-ts/utils/legal-organization-verification-transaction';
|
|
3
4
|
import type { OrganizationDidBindingInput } from 'gdc-sdk-core-ts';
|
|
4
5
|
import type { LicenseListRuntimeSearchInput, LicenseOfferRuntimeSearchInput, LicenseOrderRuntimeSearchInput } from '../resource-operations.js';
|
|
@@ -8,9 +9,11 @@ import type { EmployeeDeviceActivationResult, EmployeeDeviceActivationRequestInp
|
|
|
8
9
|
import type { HostRouteContext, HostedTenantLifecycleInput, LegalOrganizationOrderInput } from '../host-onboarding.js';
|
|
9
10
|
import type { IndividualOrganizationConfirmOrderInput, RouteContext } from '../individual-onboarding.js';
|
|
10
11
|
import type { IndividualOrganizationBootstrapInput, IndividualOrganizationStartResult } from '../individual-start.js';
|
|
12
|
+
import type { FamilyOrganizationSearchInput } from '../family-organization-search.js';
|
|
13
|
+
import type { EnsureFamilyOrganizationRegistrationInput, EnsureFamilyOrganizationRegistrationResult } from '../family-organization-registration.js';
|
|
11
14
|
import type { OrganizationLicenseOrderConfirmInput } from '../organization-license-order.js';
|
|
12
15
|
import type { SmartTokenExchangeResult, SmartTokenRequestInput } from '../smart-token.js';
|
|
13
|
-
import type { CommunicationIngestionInput, CommunicationParticipantRuntimeSearchInput, ClinicalBundleSearchInput, DigitalTwinGenerationInput, GrantProfessionalAccessInput, GrantProfessionalAccessResult, IndividualMemberLifecycleInput, IndividualOrganizationLifecycleInput, IpsOrFhirImportInput, OrganizationEmployeeCreationInput, OrganizationEmployeeLifecycleInput, OrganizationEmployeeSearchInput, RelatedPersonUpsertInput } from '../resource-operations.js';
|
|
16
|
+
import type { CommunicationIngestionInput, CommunicationParticipantRuntimeSearchInput, ClinicalBundleSearchInput, DigitalTwinGenerationInput, GrantProfessionalAccessInput, GrantProfessionalAccessResult, IndividualMemberLifecycleInput, IndividualOrganizationLifecycleInput, IpsOrFhirImportInput, OrganizationEmployeeCreationInput, OrganizationEmployeeLifecycleInput, OrganizationEmployeeSearchInput, RevokeProfessionalAccessInput, RevokeProfessionalAccessResult, RelatedPersonUpsertInput } from '../resource-operations.js';
|
|
14
17
|
/**
|
|
15
18
|
* Shared node-runtime activation input.
|
|
16
19
|
*
|
|
@@ -74,6 +77,8 @@ export type RuntimeClient = {
|
|
|
74
77
|
activateEmployeeDeviceWithActivationRequest?: (input: EmployeeDeviceActivationRequestInput) => Promise<EmployeeDeviceActivationResult>;
|
|
75
78
|
requestSmartToken?: (input: SmartTokenRequestInput) => Promise<SmartTokenExchangeResult>;
|
|
76
79
|
startIndividualOrganization?: (input: IndividualOrganizationBootstrapInput) => Promise<IndividualOrganizationStartResult>;
|
|
80
|
+
searchFamilyOrganization?: (ctx: RouteContext, input: FamilyOrganizationSearchInput) => Promise<FamilyOrganizationSummary | null>;
|
|
81
|
+
ensureFamilyOrganizationRegistration?: (ctx: RouteContext, input: EnsureFamilyOrganizationRegistrationInput) => Promise<EnsureFamilyOrganizationRegistrationResult>;
|
|
77
82
|
confirmIndividualOrganizationOrder?: (input: IndividualOrganizationConfirmOrderInput) => Promise<SubmitAndPollResult>;
|
|
78
83
|
disableIndividual?: (ctx: RouteContext, input: IndividualOrganizationLifecycleInput, pollOptions?: PollOptions) => Promise<SubmitAndPollResult>;
|
|
79
84
|
purgeIndividual?: (ctx: RouteContext, input: IndividualOrganizationLifecycleInput, pollOptions?: PollOptions) => Promise<SubmitAndPollResult>;
|
|
@@ -84,6 +89,7 @@ export type RuntimeClient = {
|
|
|
84
89
|
ingestCommunicationAndUpdateIndex?: (ctx: RouteContext, input: CommunicationIngestionInput) => Promise<SubmitAndPollResult>;
|
|
85
90
|
searchCommunicationParticipants?: (ctx: RouteContext, input: CommunicationParticipantRuntimeSearchInput) => Promise<SubmitAndPollResult>;
|
|
86
91
|
grantProfessionalAccess?: (ctx: RouteContext, input: GrantProfessionalAccessInput) => Promise<GrantProfessionalAccessResult>;
|
|
92
|
+
revokeProfessionalAccess?: (ctx: RouteContext, input: RevokeProfessionalAccessInput) => Promise<RevokeProfessionalAccessResult>;
|
|
87
93
|
searchIndividualLicenses?: (ctx: RouteContext, input: LicenseListRuntimeSearchInput) => Promise<SubmitAndPollResult>;
|
|
88
94
|
listIndividualLicenses?: (ctx: RouteContext, input?: LicenseListRuntimeSearchInput) => Promise<SubmitAndPollResult>;
|
|
89
95
|
searchIndividualLicenseOffers?: (ctx: RouteContext, input: LicenseOfferRuntimeSearchInput) => Promise<SubmitAndPollResult>;
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { type NodeRuntimeClient, type PollOptions, type SubmitAndPollResult, type SubmitPayload } from './client-port.js';
|
|
2
|
+
import type { FamilyOrganizationSummary } from 'gdc-common-utils-ts/utils/family-organization-summary';
|
|
3
|
+
import type { EnsureFamilyOrganizationRegistrationInput, EnsureFamilyOrganizationRegistrationResult } from '../family-organization-registration.js';
|
|
4
|
+
import type { FamilyOrganizationSearchInput } from '../family-organization-search.js';
|
|
2
5
|
import type { IndividualOrganizationConfirmOrderInput, RouteContext } from '../individual-onboarding.js';
|
|
3
6
|
import type { IndividualOrganizationBootstrapInput, IndividualOrganizationStartResult } from '../individual-start.js';
|
|
4
7
|
import type { NodeCapability } from '../session.js';
|
|
5
|
-
import type { ClinicalBundleSearchInput, CommunicationIngestionInput, CommunicationParticipantRuntimeSearchInput, DigitalTwinGenerationInput, GrantProfessionalAccessInput, GrantProfessionalAccessResult, IndividualMemberLifecycleInput, IndividualOrganizationLifecycleInput, IpsOrFhirImportInput, LicenseListRuntimeSearchInput, LicenseOfferRuntimeSearchInput, LicenseOrderRuntimeSearchInput, RelatedPersonUpsertInput } from '../resource-operations.js';
|
|
8
|
+
import type { ClinicalBundleSearchInput, CommunicationIngestionInput, CommunicationParticipantRuntimeSearchInput, DigitalTwinGenerationInput, GrantProfessionalAccessInput, GrantProfessionalAccessResult, IndividualMemberLifecycleInput, IndividualOrganizationLifecycleInput, IpsOrFhirImportInput, LicenseListRuntimeSearchInput, LicenseOfferRuntimeSearchInput, LicenseOrderRuntimeSearchInput, RevokeProfessionalAccessInput, RevokeProfessionalAccessResult, RelatedPersonUpsertInput } from '../resource-operations.js';
|
|
6
9
|
import type { SmartTokenExchangeResult, SmartTokenRequestInput } from '../smart-token.js';
|
|
7
10
|
/**
|
|
8
11
|
* Individual-controller oriented facade over a `NodeRuntimeClient`.
|
|
@@ -21,6 +24,16 @@ export declare class IndividualControllerSdk {
|
|
|
21
24
|
* Starts the individual onboarding/bootstrap flow.
|
|
22
25
|
*/
|
|
23
26
|
startIndividualOrganization(input: IndividualOrganizationBootstrapInput): Promise<IndividualOrganizationStartResult>;
|
|
27
|
+
/**
|
|
28
|
+
* Searches one existing family/individual registration by the phone-first
|
|
29
|
+
* business key used by channel apps.
|
|
30
|
+
*/
|
|
31
|
+
searchFamilyOrganization(ctx: RouteContext, input: FamilyOrganizationSearchInput): Promise<FamilyOrganizationSummary | null>;
|
|
32
|
+
/**
|
|
33
|
+
* Searches one existing family/individual registration and starts the
|
|
34
|
+
* bootstrap flow only when the registration is still missing.
|
|
35
|
+
*/
|
|
36
|
+
ensureFamilyOrganizationRegistration(ctx: RouteContext, input: EnsureFamilyOrganizationRegistrationInput): Promise<EnsureFamilyOrganizationRegistrationResult>;
|
|
24
37
|
/**
|
|
25
38
|
* Confirms the order returned by `startIndividualOrganization(...)`.
|
|
26
39
|
*/
|
|
@@ -59,6 +72,10 @@ export declare class IndividualControllerSdk {
|
|
|
59
72
|
* Grants access to a professional through a consent flow.
|
|
60
73
|
*/
|
|
61
74
|
grantProfessionalAccess(ctx: RouteContext, input: GrantProfessionalAccessInput): Promise<GrantProfessionalAccessResult>;
|
|
75
|
+
/**
|
|
76
|
+
* Closes an existing professional consent by setting its period end.
|
|
77
|
+
*/
|
|
78
|
+
revokeProfessionalAccess(ctx: RouteContext, input: RevokeProfessionalAccessInput): Promise<RevokeProfessionalAccessResult>;
|
|
62
79
|
/**
|
|
63
80
|
* Imports a FHIR/IPS payload and waits until it is indexed.
|
|
64
81
|
*/
|
|
@@ -23,6 +23,20 @@ export class IndividualControllerSdk {
|
|
|
23
23
|
assertFacadeCapability(this.capabilities, ActorCapabilities.IndividualBootstrap, ActorKinds.IndividualController, 'startIndividualOrganization');
|
|
24
24
|
return requireClientMethod(this.client, 'startIndividualOrganization')(input);
|
|
25
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Searches one existing family/individual registration by the phone-first
|
|
28
|
+
* business key used by channel apps.
|
|
29
|
+
*/
|
|
30
|
+
searchFamilyOrganization(ctx, input) {
|
|
31
|
+
return requireClientMethod(this.client, 'searchFamilyOrganization')(ctx, input);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Searches one existing family/individual registration and starts the
|
|
35
|
+
* bootstrap flow only when the registration is still missing.
|
|
36
|
+
*/
|
|
37
|
+
ensureFamilyOrganizationRegistration(ctx, input) {
|
|
38
|
+
return requireClientMethod(this.client, 'ensureFamilyOrganizationRegistration')(ctx, input);
|
|
39
|
+
}
|
|
26
40
|
/**
|
|
27
41
|
* Confirms the order returned by `startIndividualOrganization(...)`.
|
|
28
42
|
*/
|
|
@@ -85,6 +99,13 @@ export class IndividualControllerSdk {
|
|
|
85
99
|
assertFacadeCapability(this.capabilities, ActorCapabilities.ConsentGrantProfessionalAccess, ActorKinds.IndividualController, 'grantProfessionalAccess');
|
|
86
100
|
return requireClientMethod(this.client, 'grantProfessionalAccess')(ctx, input);
|
|
87
101
|
}
|
|
102
|
+
/**
|
|
103
|
+
* Closes an existing professional consent by setting its period end.
|
|
104
|
+
*/
|
|
105
|
+
revokeProfessionalAccess(ctx, input) {
|
|
106
|
+
assertFacadeCapability(this.capabilities, ActorCapabilities.ConsentGrantProfessionalAccess, ActorKinds.IndividualController, 'revokeProfessionalAccess');
|
|
107
|
+
return requireClientMethod(this.client, 'revokeProfessionalAccess')(ctx, input);
|
|
108
|
+
}
|
|
88
109
|
/**
|
|
89
110
|
* Imports a FHIR/IPS payload and waits until it is indexed.
|
|
90
111
|
*/
|
|
@@ -23,9 +23,10 @@ export declare class OrganizationControllerSdk {
|
|
|
23
23
|
* Starts the host-side legal-organization verification transaction that GW
|
|
24
24
|
* CORE forwards to ICA `_verify`.
|
|
25
25
|
*
|
|
26
|
-
* This is intentionally distinct from the
|
|
26
|
+
* This is intentionally distinct from the older host `_activate` step:
|
|
27
27
|
* - `_transaction` carries signed evidence and controller business binding
|
|
28
|
-
* - `
|
|
28
|
+
* - `_transaction` is complete on its own for the new flow
|
|
29
|
+
* - `_activate` remains only for the legacy ICA `_verify` compatibility path
|
|
29
30
|
*/
|
|
30
31
|
submitLegalOrganizationVerificationTransaction(hostCtx: HostRouteContext, input: NodeLegalOrganizationVerificationTransactionInput, pollOptions?: PollOptions): Promise<SubmitAndPollResult>;
|
|
31
32
|
/**
|
|
@@ -20,9 +20,10 @@ export class OrganizationControllerSdk {
|
|
|
20
20
|
* Starts the host-side legal-organization verification transaction that GW
|
|
21
21
|
* CORE forwards to ICA `_verify`.
|
|
22
22
|
*
|
|
23
|
-
* This is intentionally distinct from the
|
|
23
|
+
* This is intentionally distinct from the older host `_activate` step:
|
|
24
24
|
* - `_transaction` carries signed evidence and controller business binding
|
|
25
|
-
* - `
|
|
25
|
+
* - `_transaction` is complete on its own for the new flow
|
|
26
|
+
* - `_activate` remains only for the legacy ICA `_verify` compatibility path
|
|
26
27
|
*/
|
|
27
28
|
submitLegalOrganizationVerificationTransaction(hostCtx, input, pollOptions) {
|
|
28
29
|
return requireClientMethod(this.client, 'submitLegalOrganizationVerificationTransaction')(hostCtx, input, pollOptions);
|