@techspokes/typescript-wsdl-client 1.1.5 → 1.1.8
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 +64 -66
- package/dist/app/generateApp.d.ts +0 -1
- package/dist/app/generateApp.js +1 -1
- package/dist/app/generateCheckedApp.d.ts +38 -0
- package/dist/app/generateCheckedApp.js +108 -0
- package/dist/checkedPipeline.d.ts +155 -0
- package/dist/checkedPipeline.js +448 -0
- package/dist/checkedPlanning.d.ts +123 -0
- package/dist/checkedPlanning.js +245 -0
- package/dist/cli.d.ts +0 -1
- package/dist/cli.js +75 -1
- package/dist/client/checkedDirectRuntime.d.ts +40 -3
- package/dist/client/checkedDirectRuntime.js +28 -8
- package/dist/client/directClientRuntime.d.ts +27 -2
- package/dist/client/directClientRuntime.js +142 -89
- package/dist/client/directClientVersion.d.ts +3 -1
- package/dist/client/directClientVersion.js +3 -0
- package/dist/client/generateClient.d.ts +0 -1
- package/dist/client/generateClient.js +26 -12
- package/dist/client/generateDirectClient.d.ts +21 -3
- package/dist/client/generateDirectClient.js +138 -6
- package/dist/client/generateOperations.d.ts +0 -1
- package/dist/client/generateTypes.d.ts +0 -1
- package/dist/client/generateUtils.d.ts +0 -1
- package/dist/client/generateUtils.js +3 -1
- package/dist/compiler/applicationGroups.d.ts +53 -0
- package/dist/compiler/applicationGroups.js +403 -0
- package/dist/compiler/buildCanonicalGraph.d.ts +0 -1
- package/dist/compiler/canonicalGraph.d.ts +0 -1
- package/dist/compiler/catalogErrors.d.ts +0 -1
- package/dist/compiler/catalogProvenance.d.ts +0 -1
- package/dist/compiler/checkedAssessment.d.ts +0 -1
- package/dist/compiler/checkedAssessment.js +1 -1
- package/dist/compiler/checkedComponentSource.d.ts +16 -0
- package/dist/compiler/checkedComponentSource.js +31 -0
- package/dist/compiler/checkedSourcePreparation.d.ts +38 -1
- package/dist/compiler/checkedSourcePreparation.js +71 -0
- package/dist/compiler/complexTypeContent.d.ts +5 -6
- package/dist/compiler/complexTypeContent.js +2 -2
- package/dist/compiler/componentCorrespondence.d.ts +32 -0
- package/dist/compiler/componentCorrespondence.js +140 -0
- package/dist/compiler/componentRecordProjection.d.ts +109 -0
- package/dist/compiler/componentRecordProjection.js +319 -0
- package/dist/compiler/componentSoapPreparation.d.ts +20 -0
- package/dist/compiler/componentSoapPreparation.js +36 -0
- package/dist/compiler/composeCanonicalGraph.d.ts +0 -1
- package/dist/compiler/dataOwnership.d.ts +0 -1
- package/dist/compiler/dataOwnership.js +14 -4
- package/dist/compiler/datatypeValues.d.ts +0 -1
- package/dist/compiler/directCodec.d.ts +59 -2
- package/dist/compiler/directCodec.js +275 -90
- package/dist/compiler/directExecutionPolicy.d.ts +0 -1
- package/dist/compiler/directOperation.d.ts +46 -4
- package/dist/compiler/directOperation.js +105 -14
- package/dist/compiler/directSoap.d.ts +29 -5
- package/dist/compiler/directSoap.js +130 -37
- package/dist/compiler/directSoapSource.d.ts +24 -1
- package/dist/compiler/directSoapSource.js +166 -19
- package/dist/compiler/directSourceCapsule.d.ts +74 -2
- package/dist/compiler/directSourceCapsule.js +428 -6
- package/dist/compiler/directStructure.d.ts +83 -6
- package/dist/compiler/directStructure.js +349 -58
- package/dist/compiler/directStructurePlan.d.ts +135 -2
- package/dist/compiler/directStructurePlan.js +594 -29
- package/dist/compiler/directValues.d.ts +63 -4
- package/dist/compiler/directValues.js +950 -116
- package/dist/compiler/finiteRe01Construction.d.ts +69 -0
- package/dist/compiler/finiteRe01Construction.js +422 -0
- package/dist/compiler/finiteRe01Verification.d.ts +81 -3
- package/dist/compiler/finiteRe01Verification.js +391 -4
- package/dist/compiler/generateCatalog.d.ts +0 -1
- package/dist/compiler/graphTraversal.d.ts +0 -1
- package/dist/compiler/hypotheticalScopedIdentity.d.ts +0 -1
- package/dist/compiler/occurrenceAnalysis.d.ts +2 -1
- package/dist/compiler/occurrenceAnalysis.js +23 -7
- package/dist/compiler/originalSourceMembership.d.ts +0 -1
- package/dist/compiler/particleAttribution.d.ts +0 -1
- package/dist/compiler/particleAttribution.js +20 -0
- package/dist/compiler/particleDeclarationConsistency.d.ts +0 -1
- package/dist/compiler/particleDeclarationConsistency.js +9 -0
- package/dist/compiler/particleExtension.d.ts +0 -1
- package/dist/compiler/particleExtension.js +5 -1
- package/dist/compiler/particleLocalAssessment.d.ts +0 -1
- package/dist/compiler/particleRestriction.d.ts +0 -1
- package/dist/compiler/particleRestriction.js +6 -1
- package/dist/compiler/particleSemanticView.d.ts +2 -1
- package/dist/compiler/particleSemanticView.js +16 -3
- package/dist/compiler/particleWildcardRelation.d.ts +0 -1
- package/dist/compiler/projectionScalar.d.ts +32 -0
- package/dist/compiler/projectionScalar.js +184 -0
- package/dist/compiler/re01CandidateAssignments.d.ts +95 -0
- package/dist/compiler/re01CandidateAssignments.js +341 -0
- package/dist/compiler/re01CandidateCorrespondence.d.ts +22 -1
- package/dist/compiler/re01CandidateCorrespondence.js +167 -38
- package/dist/compiler/re01TypeProperties.d.ts +0 -1
- package/dist/compiler/re01TypePropertyValidation.d.ts +0 -1
- package/dist/compiler/resolveCanonicalGraph.d.ts +5 -2
- package/dist/compiler/resolveCanonicalGraph.js +77 -7
- package/dist/compiler/scalarSchemaAssessment.d.ts +0 -1
- package/dist/compiler/schemaAttributeGroupProperties.d.ts +0 -1
- package/dist/compiler/schemaAttributeProperties.d.ts +0 -1
- package/dist/compiler/schemaAttributeUses.d.ts +22 -2
- package/dist/compiler/schemaAttributeUses.js +86 -13
- package/dist/compiler/schemaBinaryWordReconstruction.d.ts +0 -1
- package/dist/compiler/schemaBuiltinFacets.d.ts +0 -1
- package/dist/compiler/schemaCalendarImages.d.ts +0 -1
- package/dist/compiler/schemaCalendarLanguage.d.ts +0 -1
- package/dist/compiler/schemaCompiler.d.ts +0 -1
- package/dist/compiler/schemaComponentEquality.d.ts +0 -1
- package/dist/compiler/schemaConstructionAssessment.d.ts +34 -1
- package/dist/compiler/schemaConstructionAssessment.js +88 -6
- package/dist/compiler/schemaDatatypeValues.d.ts +0 -1
- package/dist/compiler/schemaDecimalLanguage.d.ts +0 -1
- package/dist/compiler/schemaDeclarationPrimitives.d.ts +7 -2
- package/dist/compiler/schemaDeclarationPrimitives.js +18 -1
- package/dist/compiler/schemaDocumentSyntax.d.ts +0 -1
- package/dist/compiler/schemaDurationLanguage.d.ts +0 -1
- package/dist/compiler/schemaElementInstance.d.ts +30 -0
- package/dist/compiler/schemaElementInstance.js +45 -0
- package/dist/compiler/schemaElementProperties.d.ts +0 -1
- package/dist/compiler/schemaEndpointWordCapacity.d.ts +0 -1
- package/dist/compiler/schemaExactCalendar.d.ts +0 -1
- package/dist/compiler/schemaFacetAnnotation.d.ts +0 -1
- package/dist/compiler/schemaGeneratedScalarShape.d.ts +0 -1
- package/dist/compiler/schemaGeneratedScalarShape.js +2 -0
- package/dist/compiler/schemaIdentityConstraints.d.ts +0 -1
- package/dist/compiler/schemaIeeeLanguage.d.ts +0 -1
- package/dist/compiler/schemaIntegerImages.d.ts +0 -1
- package/dist/compiler/schemaLexicalPredicates.d.ts +0 -1
- package/dist/compiler/schemaNotationProperties.d.ts +0 -1
- package/dist/compiler/schemaNumericImageConditions.d.ts +0 -1
- package/dist/compiler/schemaParticleWildcardProperties.d.ts +0 -1
- package/dist/compiler/schemaPattern.d.ts +0 -1
- package/dist/compiler/schemaRegularLanguage.d.ts +0 -1
- package/dist/compiler/schemaScalarContext.d.ts +5 -1
- package/dist/compiler/schemaScalarKernel.d.ts +0 -1
- package/dist/compiler/schemaScalarWitnesses.d.ts +0 -1
- package/dist/compiler/schemaSimpleTypeProperties.d.ts +0 -1
- package/dist/compiler/schemaSourceGrammar.d.ts +0 -1
- package/dist/compiler/schemaSourceLexical.d.ts +0 -1
- package/dist/compiler/schemaSourceValues.d.ts +0 -1
- package/dist/compiler/schemaSourceWildcards.d.ts +1 -2
- package/dist/compiler/schemaSourceWildcards.js +3 -1
- package/dist/compiler/schemaSymbolicSequences.d.ts +0 -1
- package/dist/compiler/schemaSymbolicValueSets.d.ts +0 -1
- package/dist/compiler/schemaSyntaxAssessment.d.ts +0 -1
- package/dist/compiler/schemaTemporalAliases.d.ts +0 -1
- package/dist/compiler/schemaTokenImages.d.ts +0 -1
- package/dist/compiler/schemaTypeIdentity.d.ts +0 -1
- package/dist/compiler/schemaTypeIdentity.js +2 -0
- package/dist/compiler/schemaTypeRelations.d.ts +0 -1
- package/dist/compiler/schemaUri.d.ts +0 -1
- package/dist/compiler/schemaValueContext.d.ts +0 -1
- package/dist/compiler/schemaValueImages.d.ts +0 -1
- package/dist/compiler/schemaValueSequences.d.ts +0 -1
- package/dist/compiler/semanticBudget.d.ts +18 -1
- package/dist/compiler/semanticBudget.js +17 -2
- package/dist/compiler/semanticCatalog.d.ts +1 -2
- package/dist/compiler/semanticContext.d.ts +12 -1
- package/dist/compiler/semanticContext.js +39 -0
- package/dist/compiler/semanticTypeDependencies.d.ts +0 -1
- package/dist/compiler/semanticTypeReference.d.ts +0 -1
- package/dist/compiler/shapeResolver.d.ts +0 -1
- package/dist/compiler/soapHeaders.d.ts +16 -0
- package/dist/compiler/soapHeaders.js +42 -0
- package/dist/compiler/sourceSchemaBinding.d.ts +0 -1
- package/dist/compiler/standardSchemaComponents.d.ts +71 -0
- package/dist/compiler/standardSchemaComponents.js +74 -0
- package/dist/compiler/standardSchemaConstruction.d.ts +20 -0
- package/dist/compiler/standardSchemaConstruction.js +34 -0
- package/dist/compiler/structuralCompanions.d.ts +0 -1
- package/dist/compiler/validateSemanticGraph.d.ts +0 -1
- package/dist/compiler/wildcardAlgebra.d.ts +0 -1
- package/dist/compiler/wsdlPolicyRequirements.d.ts +43 -0
- package/dist/compiler/wsdlPolicyRequirements.js +239 -0
- package/dist/config.d.ts +0 -1
- package/dist/gateway/generateCheckedGateway.d.ts +32 -0
- package/dist/gateway/generateCheckedGateway.js +293 -0
- package/dist/gateway/generateGateway.d.ts +0 -1
- package/dist/gateway/generators.d.ts +0 -1
- package/dist/gateway/helpers.d.ts +0 -1
- package/dist/generation/componentShape.d.ts +14 -0
- package/dist/generation/componentShape.js +269 -0
- package/dist/generation/preamble.d.ts +0 -1
- package/dist/generation/sourceLayout.d.ts +13 -0
- package/dist/generation/sourceLayout.js +40 -0
- package/dist/generation/writeGeneratedSource.d.ts +0 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.js +2 -1
- package/dist/loader/fetch.d.ts +0 -1
- package/dist/loader/orderedSyntax.d.ts +8 -1
- package/dist/loader/orderedSyntax.js +26 -6
- package/dist/loader/resolutionDepth.d.ts +0 -1
- package/dist/loader/schemaInput.d.ts +28 -1
- package/dist/loader/schemaInput.js +41 -4
- package/dist/loader/schemaResources.d.ts +2 -1
- package/dist/loader/schemaResources.js +45 -4
- package/dist/loader/wsdlLoader.d.ts +0 -1
- package/dist/openapi/casing.d.ts +0 -1
- package/dist/openapi/generateOpenAPI.d.ts +0 -1
- package/dist/openapi/generatePaths.d.ts +0 -1
- package/dist/openapi/generateSchemas.d.ts +0 -1
- package/dist/openapi/security.d.ts +0 -1
- package/dist/pipeline.d.ts +6 -2
- package/dist/pipeline.js +13 -0
- package/dist/test/generateCheckedTests.d.ts +17 -0
- package/dist/test/generateCheckedTests.js +60 -0
- package/dist/test/generateTests.d.ts +0 -1
- package/dist/test/generators.d.ts +0 -1
- package/dist/test/mockData.d.ts +0 -1
- package/dist/test/mockData.js +20 -14
- package/dist/util/attributeWildcards.d.ts +0 -1
- package/dist/util/builder.d.ts +0 -1
- package/dist/util/catalogMeta.d.ts +0 -1
- package/dist/util/checkedCliDiagnostics.d.ts +11 -0
- package/dist/util/checkedCliDiagnostics.js +22 -0
- package/dist/util/cli.d.ts +0 -1
- package/dist/util/errors.d.ts +0 -1
- package/dist/util/imports.d.ts +0 -1
- package/dist/util/runtimeSource.d.ts +0 -1
- package/dist/util/runtimeSource.js +3 -5
- package/dist/util/securityConfig.d.ts +0 -1
- package/dist/util/streamConfig.d.ts +0 -1
- package/dist/util/tools.d.ts +0 -1
- package/dist/util/xmlWhitespace.d.ts +0 -1
- package/dist/xsd/primitives.d.ts +0 -1
- package/docs/agent-skill.md +2 -0
- package/docs/api-reference.md +1 -1
- package/docs/checked-gateway.md +210 -0
- package/docs/checked-generation.md +161 -0
- package/docs/cli-reference.md +23 -1
- package/docs/concepts.md +136 -1
- package/docs/configuration.md +5 -1
- package/docs/corpus.md +33 -0
- package/docs/direct-values.md +13 -13
- package/docs/examples/checked-forecast.wsdl +19 -0
- package/docs/gateway-guide.md +1 -1
- package/docs/generated-code.md +10 -5
- package/docs/mapping-contract.md +114 -0
- package/docs/migration-playbook.md +1 -1
- package/docs/output-anatomy.md +1 -1
- package/docs/start-here.md +8 -2
- package/docs/supported-patterns.md +7 -3
- package/docs/testing.md +117 -31
- package/llms.txt +7 -7
- package/package.json +63 -22
- package/src/runtime/checkedGatewayHost.tpl.txt +157 -0
- package/src/runtime/streamXml.ts +1 -1
- package/dist/app/generateApp.d.ts.map +0 -1
- package/dist/cli.d.ts.map +0 -1
- package/dist/client/checkedDirectRuntime.d.ts.map +0 -1
- package/dist/client/directClientRuntime.d.ts.map +0 -1
- package/dist/client/directClientVersion.d.ts.map +0 -1
- package/dist/client/generateClient.d.ts.map +0 -1
- package/dist/client/generateDirectClient.d.ts.map +0 -1
- package/dist/client/generateOperations.d.ts.map +0 -1
- package/dist/client/generateTypes.d.ts.map +0 -1
- package/dist/client/generateUtils.d.ts.map +0 -1
- package/dist/compiler/buildCanonicalGraph.d.ts.map +0 -1
- package/dist/compiler/canonicalGraph.d.ts.map +0 -1
- package/dist/compiler/catalogErrors.d.ts.map +0 -1
- package/dist/compiler/catalogProvenance.d.ts.map +0 -1
- package/dist/compiler/checkedAssessment.d.ts.map +0 -1
- package/dist/compiler/checkedSourcePreparation.d.ts.map +0 -1
- package/dist/compiler/complexTypeContent.d.ts.map +0 -1
- package/dist/compiler/composeCanonicalGraph.d.ts.map +0 -1
- package/dist/compiler/dataOwnership.d.ts.map +0 -1
- package/dist/compiler/datatypeValues.d.ts.map +0 -1
- package/dist/compiler/directCodec.d.ts.map +0 -1
- package/dist/compiler/directExecutionPolicy.d.ts.map +0 -1
- package/dist/compiler/directOperation.d.ts.map +0 -1
- package/dist/compiler/directSoap.d.ts.map +0 -1
- package/dist/compiler/directSoapSource.d.ts.map +0 -1
- package/dist/compiler/directSourceCapsule.d.ts.map +0 -1
- package/dist/compiler/directStructure.d.ts.map +0 -1
- package/dist/compiler/directStructurePlan.d.ts.map +0 -1
- package/dist/compiler/directValues.d.ts.map +0 -1
- package/dist/compiler/finiteRe01Verification.d.ts.map +0 -1
- package/dist/compiler/generateCatalog.d.ts.map +0 -1
- package/dist/compiler/graphTraversal.d.ts.map +0 -1
- package/dist/compiler/hypotheticalScopedIdentity.d.ts.map +0 -1
- package/dist/compiler/occurrenceAnalysis.d.ts.map +0 -1
- package/dist/compiler/originalSourceMembership.d.ts.map +0 -1
- package/dist/compiler/particleAttribution.d.ts.map +0 -1
- package/dist/compiler/particleDeclarationConsistency.d.ts.map +0 -1
- package/dist/compiler/particleExtension.d.ts.map +0 -1
- package/dist/compiler/particleLocalAssessment.d.ts.map +0 -1
- package/dist/compiler/particleRestriction.d.ts.map +0 -1
- package/dist/compiler/particleSemanticView.d.ts.map +0 -1
- package/dist/compiler/particleWildcardRelation.d.ts.map +0 -1
- package/dist/compiler/re01CandidateCorrespondence.d.ts.map +0 -1
- package/dist/compiler/re01TypeProperties.d.ts.map +0 -1
- package/dist/compiler/re01TypePropertyValidation.d.ts.map +0 -1
- package/dist/compiler/resolveCanonicalGraph.d.ts.map +0 -1
- package/dist/compiler/scalarSchemaAssessment.d.ts.map +0 -1
- package/dist/compiler/schemaAttributeGroupProperties.d.ts.map +0 -1
- package/dist/compiler/schemaAttributeProperties.d.ts.map +0 -1
- package/dist/compiler/schemaAttributeUses.d.ts.map +0 -1
- package/dist/compiler/schemaBinaryWordReconstruction.d.ts.map +0 -1
- package/dist/compiler/schemaBuiltinFacets.d.ts.map +0 -1
- package/dist/compiler/schemaCalendarImages.d.ts.map +0 -1
- package/dist/compiler/schemaCalendarLanguage.d.ts.map +0 -1
- package/dist/compiler/schemaCompiler.d.ts.map +0 -1
- package/dist/compiler/schemaComponentEquality.d.ts.map +0 -1
- package/dist/compiler/schemaConstructionAssessment.d.ts.map +0 -1
- package/dist/compiler/schemaDatatypeValues.d.ts.map +0 -1
- package/dist/compiler/schemaDecimalLanguage.d.ts.map +0 -1
- package/dist/compiler/schemaDeclarationPrimitives.d.ts.map +0 -1
- package/dist/compiler/schemaDocumentSyntax.d.ts.map +0 -1
- package/dist/compiler/schemaDurationLanguage.d.ts.map +0 -1
- package/dist/compiler/schemaElementProperties.d.ts.map +0 -1
- package/dist/compiler/schemaEndpointWordCapacity.d.ts.map +0 -1
- package/dist/compiler/schemaExactCalendar.d.ts.map +0 -1
- package/dist/compiler/schemaFacetAnnotation.d.ts.map +0 -1
- package/dist/compiler/schemaGeneratedScalarShape.d.ts.map +0 -1
- package/dist/compiler/schemaIdentityConstraints.d.ts.map +0 -1
- package/dist/compiler/schemaIeeeLanguage.d.ts.map +0 -1
- package/dist/compiler/schemaIntegerImages.d.ts.map +0 -1
- package/dist/compiler/schemaLexicalPredicates.d.ts.map +0 -1
- package/dist/compiler/schemaNotationProperties.d.ts.map +0 -1
- package/dist/compiler/schemaNumericImageConditions.d.ts.map +0 -1
- package/dist/compiler/schemaParticleWildcardProperties.d.ts.map +0 -1
- package/dist/compiler/schemaPattern.d.ts.map +0 -1
- package/dist/compiler/schemaRegularLanguage.d.ts.map +0 -1
- package/dist/compiler/schemaScalarContext.d.ts.map +0 -1
- package/dist/compiler/schemaScalarKernel.d.ts.map +0 -1
- package/dist/compiler/schemaScalarWitnesses.d.ts.map +0 -1
- package/dist/compiler/schemaSimpleTypeProperties.d.ts.map +0 -1
- package/dist/compiler/schemaSourceGrammar.d.ts.map +0 -1
- package/dist/compiler/schemaSourceLexical.d.ts.map +0 -1
- package/dist/compiler/schemaSourceValues.d.ts.map +0 -1
- package/dist/compiler/schemaSourceWildcards.d.ts.map +0 -1
- package/dist/compiler/schemaSymbolicSequences.d.ts.map +0 -1
- package/dist/compiler/schemaSymbolicValueSets.d.ts.map +0 -1
- package/dist/compiler/schemaSyntaxAssessment.d.ts.map +0 -1
- package/dist/compiler/schemaTemporalAliases.d.ts.map +0 -1
- package/dist/compiler/schemaTokenImages.d.ts.map +0 -1
- package/dist/compiler/schemaTypeIdentity.d.ts.map +0 -1
- package/dist/compiler/schemaTypeRelations.d.ts.map +0 -1
- package/dist/compiler/schemaUri.d.ts.map +0 -1
- package/dist/compiler/schemaValueContext.d.ts.map +0 -1
- package/dist/compiler/schemaValueImages.d.ts.map +0 -1
- package/dist/compiler/schemaValueSequences.d.ts.map +0 -1
- package/dist/compiler/semanticBudget.d.ts.map +0 -1
- package/dist/compiler/semanticCatalog.d.ts.map +0 -1
- package/dist/compiler/semanticContext.d.ts.map +0 -1
- package/dist/compiler/semanticTypeDependencies.d.ts.map +0 -1
- package/dist/compiler/semanticTypeReference.d.ts.map +0 -1
- package/dist/compiler/shapeResolver.d.ts.map +0 -1
- package/dist/compiler/sourceSchemaBinding.d.ts.map +0 -1
- package/dist/compiler/structuralCompanions.d.ts.map +0 -1
- package/dist/compiler/validateSemanticGraph.d.ts.map +0 -1
- package/dist/compiler/wildcardAlgebra.d.ts.map +0 -1
- package/dist/config.d.ts.map +0 -1
- package/dist/gateway/generateGateway.d.ts.map +0 -1
- package/dist/gateway/generators.d.ts.map +0 -1
- package/dist/gateway/helpers.d.ts.map +0 -1
- package/dist/generation/preamble.d.ts.map +0 -1
- package/dist/generation/writeGeneratedSource.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/loader/fetch.d.ts.map +0 -1
- package/dist/loader/orderedSyntax.d.ts.map +0 -1
- package/dist/loader/resolutionDepth.d.ts.map +0 -1
- package/dist/loader/schemaInput.d.ts.map +0 -1
- package/dist/loader/schemaResources.d.ts.map +0 -1
- package/dist/loader/wsdlLoader.d.ts.map +0 -1
- package/dist/openapi/casing.d.ts.map +0 -1
- package/dist/openapi/generateOpenAPI.d.ts.map +0 -1
- package/dist/openapi/generatePaths.d.ts.map +0 -1
- package/dist/openapi/generateSchemas.d.ts.map +0 -1
- package/dist/openapi/security.d.ts.map +0 -1
- package/dist/pipeline.d.ts.map +0 -1
- package/dist/runtime/jsonArray.d.ts +0 -24
- package/dist/runtime/jsonArray.d.ts.map +0 -1
- package/dist/runtime/jsonArray.js +0 -52
- package/dist/runtime/ndjson.d.ts +0 -24
- package/dist/runtime/ndjson.d.ts.map +0 -1
- package/dist/runtime/ndjson.js +0 -30
- package/dist/runtime/streamXml.d.ts +0 -45
- package/dist/runtime/streamXml.d.ts.map +0 -1
- package/dist/runtime/streamXml.js +0 -212
- package/dist/test/generateTests.d.ts.map +0 -1
- package/dist/test/generators.d.ts.map +0 -1
- package/dist/test/mockData.d.ts.map +0 -1
- package/dist/util/attributeWildcards.d.ts.map +0 -1
- package/dist/util/builder.d.ts.map +0 -1
- package/dist/util/catalogMeta.d.ts.map +0 -1
- package/dist/util/cli.d.ts.map +0 -1
- package/dist/util/errors.d.ts.map +0 -1
- package/dist/util/imports.d.ts.map +0 -1
- package/dist/util/runtimeSource.d.ts.map +0 -1
- package/dist/util/securityConfig.d.ts.map +0 -1
- package/dist/util/streamConfig.d.ts.map +0 -1
- package/dist/util/tools.d.ts.map +0 -1
- package/dist/util/xmlWhitespace.d.ts.map +0 -1
- package/dist/xsd/primitives.d.ts.map +0 -1
- package/docs/AGENTS.md +0 -47
- package/docs/README.md +0 -69
- package/docs/architecture.md +0 -158
- package/docs/content-model-analysis.md +0 -92
- package/docs/content-model-baseline.md +0 -121
- package/docs/content-model-catalog.md +0 -116
- package/docs/content-model-companions.md +0 -90
- package/docs/content-model-composition.md +0 -103
- package/docs/content-model-decisions.md +0 -79
- package/docs/content-model-gateway-feasibility.md +0 -169
- package/docs/content-model-graph.md +0 -121
- package/docs/content-model-loading.md +0 -163
- package/docs/content-model-matching.md +0 -85
- package/docs/content-model-readiness.md +0 -144
- package/docs/content-model-resolution.md +0 -81
- package/docs/content-model-s02-handoff.md +0 -98
- package/docs/content-model-s06-au-01.md +0 -425
- package/docs/content-model-s06-dt-01.md +0 -386
- package/docs/content-model-s06-pw-01.md +0 -350
- package/docs/content-model-s06-re-01-resolver-implementation.md +0 -869
- package/docs/content-model-s06-re-01-resolver.md +0 -513
- package/docs/content-model-s06-re-01-scalar-witnesses.md +0 -1423
- package/docs/content-model-s06-re-01-support-reconstruction.md +0 -6337
- package/docs/content-model-s06-re-01.md +0 -7477
- package/docs/content-model-s06-research-handoff.md +0 -909
- package/docs/content-model-shipped-fix.md +0 -83
- package/docs/content-model-soap-feasibility.md +0 -165
- package/docs/decisions/001-test-generation.md +0 -36
- package/docs/decisions/002-streamable-responses.md +0 -332
- package/docs/decisions/003-content-model-contracts.md +0 -280
- package/docs/file-naming-and-path-organization.md +0 -213
- package/docs/reference-validation.md +0 -243
- package/docs/releases/README.md +0 -94
- package/docs/releases/v0.20.0.md +0 -22
- package/docs/releases/v0.21.0.md +0 -30
- package/docs/releases/v0.22.0.md +0 -30
- package/docs/releases/v0.23.0.md +0 -31
- package/docs/releases/v0.24.0.md +0 -38
- package/docs/releases/v0.25.0.md +0 -31
- package/docs/releases/v0.25.2.md +0 -32
- package/docs/releases/v0.26.0.md +0 -32
- package/docs/releases/v0.27.0.md +0 -31
- package/docs/releases/v0.28.0.md +0 -32
- package/docs/releases/v0.29.0.md +0 -32
- package/docs/releases/v0.30.0.md +0 -30
- package/docs/releases/v0.30.1.md +0 -31
- package/docs/releases/v0.30.2.md +0 -30
- package/docs/releases/v0.30.3.md +0 -33
- package/docs/releases/v0.31.0.md +0 -33
- package/docs/releases/v0.32.0.md +0 -33
- package/docs/releases/v0.33.0.md +0 -34
- package/docs/releases/v0.34.0.md +0 -30
- package/docs/releases/v0.35.0.md +0 -33
- package/docs/releases/v0.36.0.md +0 -32
- package/docs/releases/v0.37.0.md +0 -33
- package/docs/releases/v0.38.0.md +0 -35
- package/docs/releases/v0.39.0.md +0 -35
- package/docs/releases/v0.40.0.md +0 -45
- package/docs/releases/v0.40.1.md +0 -34
- package/docs/releases/v1.0.0.md +0 -42
- package/docs/releases/v1.0.1.md +0 -38
- package/docs/releases/v1.0.2.md +0 -51
- package/docs/releases/v1.0.3.md +0 -37
- package/docs/releases/v1.0.4.md +0 -45
- package/docs/releases/v1.0.5.md +0 -41
- package/docs/releases/v1.0.6.md +0 -35
- package/docs/releases/v1.0.7.md +0 -36
- package/docs/releases/v1.1.0.md +0 -42
- package/docs/releases/v1.1.1.md +0 -44
- package/docs/releases/v1.1.2.md +0 -42
- package/docs/releases/v1.1.3.md +0 -36
- package/docs/releases/v1.1.4.md +0 -36
- package/docs/releases/v1.1.5.md +0 -38
- package/docs/roadmap/README.md +0 -107
- package/docs/roadmap/v1.0-capability-conformance-framework.md +0 -582
- package/docs/roadmap/v1.0-choice-union-mode.md +0 -90
- package/docs/roadmap/v1.0-contract-audit.md +0 -75
- package/docs/roadmap/v1.0-json-array-streaming.md +0 -101
- package/docs/roadmap/v1.0-openapi-fastify-compatibility.md +0 -99
- package/docs/roadmap/v1.0-release-candidate-gates.md +0 -92
- package/docs/roadmap/v1.0-wsdl-coverage-matrix.md +0 -200
- package/docs/roadmap/v1.0-xs-anyattribute-wildcard-bag.md +0 -932
- package/src/runtime/jsonArray.ts +0 -55
- package/src/runtime/ndjson.ts +0 -32
|
@@ -5,14 +5,19 @@ import { SchemaLoadingError, WSDL_NAMESPACE, syntaxAttribute, syntaxElements, is
|
|
|
5
5
|
import { globalId } from './canonicalGraph.js';
|
|
6
6
|
import { createApplicationBudget, DEFAULT_MAX_NODES } from './semanticBudget.js';
|
|
7
7
|
import { qualifyDirectSource } from './checkedSourcePreparation.js';
|
|
8
|
+
import { qualifyComponentSource, inspectComponentSourceQualification } from './checkedComponentSource.js';
|
|
9
|
+
import { prepareWsdlPolicyRequirements, assertWsdlPolicyRequirements } from './wsdlPolicyRequirements.js';
|
|
8
10
|
const SOAP = 'http://schemas.xmlsoap.org/wsdl/soap/';
|
|
9
11
|
const HTTP = 'http://schemas.xmlsoap.org/soap/http';
|
|
12
|
+
const ADDRESSING_WSDL = 'http://www.w3.org/2006/05/addressing/wsdl';
|
|
10
13
|
const issued = new WeakMap();
|
|
11
14
|
/** Object identity authenticates the exact issued roots; context IDs and digests do not. */
|
|
12
15
|
export function inspectDirectOperation(contract, expectedContext) {
|
|
13
16
|
const owned = issued.get(contract);
|
|
14
17
|
if (!owned || expectedContext !== undefined && owned.context !== expectedContext)
|
|
15
18
|
throw new TypeError('Unauthenticated or foreign direct operation');
|
|
19
|
+
if (owned.policyOwner)
|
|
20
|
+
assertWsdlPolicyRequirements(owned.source, owned.policyOwner);
|
|
16
21
|
return owned;
|
|
17
22
|
}
|
|
18
23
|
class Refusal extends Error {
|
|
@@ -32,10 +37,47 @@ export async function selectDirectOperation(source, selector, options) {
|
|
|
32
37
|
}
|
|
33
38
|
/** Private-module composition seam: portable reading and selection share one request. */
|
|
34
39
|
export async function selectDirectOperationInRequest(source, selector, options, budget) {
|
|
40
|
+
return selectOperationInRequest(source, selector, options, budget, 'direct');
|
|
41
|
+
}
|
|
42
|
+
/** Select through additive native component qualification without granting codec, transport or runtime admission.
|
|
43
|
+
* @remarks The same WSDL binding/message owner is used by the existing preview. New contracts carry a distinct
|
|
44
|
+
* basis and correspondence; preview codecs and source capsules continue to refuse them until independently extended.
|
|
45
|
+
* @returns Fresh source-bound operation roots or an explicit qualification/selection failure.
|
|
46
|
+
*/
|
|
47
|
+
export async function selectComponentOperation(source, selector, options) {
|
|
48
|
+
return selectComponentOperationInRequest(source, selector, options, createApplicationBudget(options.limits));
|
|
49
|
+
}
|
|
50
|
+
/** Private composition seam: artifact reading and fresh component selection share the same sticky request. */
|
|
51
|
+
export async function selectComponentOperationInRequest(source, selector, options, budget) {
|
|
52
|
+
return selectOperationInRequest(source, selector, { ...options, standardLibraries: Object.freeze([...(options.standardLibraries ?? [])]) }, budget, 'components');
|
|
53
|
+
}
|
|
54
|
+
/** Select requested service operations against one fresh native source snapshot and sticky request.
|
|
55
|
+
* @remarks Native whole-source qualification is reused by identity within this batch only. Every binding/message
|
|
56
|
+
* selection still runs through the same owner; no source flags, saved reports or operation-name guesses are consumed.
|
|
57
|
+
* @returns One result in each requested position, including explicit refusals. No requested operation is omitted.
|
|
58
|
+
*/
|
|
59
|
+
export async function selectComponentOperations(source, selectors, options) {
|
|
60
|
+
const budget = createApplicationBudget(options.limits), cache = {};
|
|
61
|
+
const owned = budget.snapshot(selectors);
|
|
62
|
+
if (!Array.isArray(owned) || Object.keys(owned).length !== owned.length)
|
|
63
|
+
throw new TypeError('Dense operation selectors required');
|
|
64
|
+
const results = [];
|
|
65
|
+
const captured = { ...options, standardLibraries: Object.freeze([...(options.standardLibraries ?? [])]) };
|
|
66
|
+
for (const selector of owned)
|
|
67
|
+
results.push(await selectOperationInRequest(source, selector, captured, budget, 'components', cache));
|
|
68
|
+
return Object.freeze(results);
|
|
69
|
+
}
|
|
70
|
+
async function selectOperationInRequest(source, selector, options, budget, profile, cache) {
|
|
35
71
|
const check = () => { if (options.signal?.aborted)
|
|
36
72
|
throw new Cancelled(); budget.chargeWork(); };
|
|
37
73
|
const refuse = (kind, rule) => { throw new Refusal(kind, rule); };
|
|
38
74
|
const failure = (kind, rule) => Object.freeze({ kind, rule, usage: Object.freeze({ ...budget.usage() }) });
|
|
75
|
+
const sourceFailure = (kind, rule) => {
|
|
76
|
+
const result = failure(kind, rule);
|
|
77
|
+
if (cache && result.kind !== 'selected')
|
|
78
|
+
cache.failure = result;
|
|
79
|
+
return result;
|
|
80
|
+
};
|
|
39
81
|
try {
|
|
40
82
|
// Fixed terminal envelope and issuance bookkeeping, before any source work.
|
|
41
83
|
budget.chargeWork(4096);
|
|
@@ -44,20 +86,43 @@ export async function selectDirectOperationInRequest(source, selector, options,
|
|
|
44
86
|
const name = (value) => value && typeof value.namespace === 'string' && typeof value.local === 'string' && isXmlNCName(value.local);
|
|
45
87
|
if (!name(ownedSelector.portType) || !name(ownedSelector.binding) || typeof ownedSelector.operation !== 'string' || !isXmlNCName(ownedSelector.operation))
|
|
46
88
|
return failure('selection-refused', 'explicit-selector');
|
|
47
|
-
|
|
89
|
+
if (cache?.failure)
|
|
90
|
+
return failure(cache.failure.kind, cache.failure.rule);
|
|
91
|
+
const input = cache?.input ?? await loadSemanticSchemaInput(source, { ...options.loading, limits: directLoadingLimits(budget, options.loading.limits), signal: options.signal, chargeWork: amount => { check(); budget.chargeWork(amount); } });
|
|
92
|
+
if (cache)
|
|
93
|
+
cache.input = input;
|
|
48
94
|
check();
|
|
49
95
|
const result = budget.guard(() => {
|
|
50
|
-
const
|
|
96
|
+
const qualificationOptions = { budget, maxNodes: options.limits?.maxNodes ?? directLimit(budget, DEFAULT_MAX_NODES), check };
|
|
97
|
+
const qualified = cache?.qualified ?? (profile === 'direct' ? qualifyDirectSource(input, qualificationOptions)
|
|
98
|
+
: qualifyComponentSource(input, { ...qualificationOptions, standardLibraries: options.standardLibraries }));
|
|
51
99
|
if (qualified.kind === 'resource-limit')
|
|
52
|
-
return
|
|
100
|
+
return sourceFailure('resource-limit', 'source-qualification');
|
|
53
101
|
if (qualified.kind === 'source-preparation-failed' && qualified.category === 'resource-limit')
|
|
54
|
-
return
|
|
55
|
-
if (qualified.kind !== 'qualified-source')
|
|
56
|
-
return
|
|
57
|
-
if (
|
|
58
|
-
|
|
59
|
-
const
|
|
102
|
+
return sourceFailure('resource-limit', 'source-preparation');
|
|
103
|
+
if (qualified.kind !== 'qualified-source' && qualified.kind !== 'component-source')
|
|
104
|
+
return sourceFailure(qualified.kind === 'source-preparation-failed' && qualified.category === 'invalid-schema' ? 'invalid-schema' : 'inconclusive', 'source-preparation');
|
|
105
|
+
if (qualified.kind === 'component-source')
|
|
106
|
+
inspectComponentSourceQualification(qualified, input);
|
|
107
|
+
const construction = qualified.kind === 'component-source' ? qualified.construction : qualified;
|
|
108
|
+
const eligible = qualified.kind === 'component-source' ? qualified.schemaEligible : qualified.eligible;
|
|
109
|
+
if (!eligible)
|
|
110
|
+
return sourceFailure(construction.localDisproved || construction.closure.kind === 'invalid-schema' ? 'invalid-schema' : 'inconclusive', qualified.kind === 'component-source' && qualified.correspondence.kind === 'inconclusive-correspondence'
|
|
111
|
+
? `whole-source-qualification:${qualified.correspondence.rule}${qualified.correspondence.path ? ':' + qualified.correspondence.path : ''}` : 'whole-source-qualification');
|
|
112
|
+
const { request } = construction;
|
|
60
113
|
const context = request.actual;
|
|
114
|
+
let policyOwner;
|
|
115
|
+
if (profile === 'components') {
|
|
116
|
+
const policies = cache?.policy ?? prepareWsdlPolicyRequirements(input, budget, check);
|
|
117
|
+
if (policies.kind !== 'wsdl-policy-requirements')
|
|
118
|
+
return sourceFailure(policies.kind, 'rule' in policies ? policies.rule : 'policy-budget');
|
|
119
|
+
assertWsdlPolicyRequirements(input, policies);
|
|
120
|
+
policyOwner = policies;
|
|
121
|
+
if (cache && qualified.kind === 'component-source') {
|
|
122
|
+
cache.qualified = qualified;
|
|
123
|
+
cache.policy = policies;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
61
126
|
const children = (node) => {
|
|
62
127
|
check();
|
|
63
128
|
budget.chargeWork(128 + node.children.length * 16 + node.attributes.length * 32);
|
|
@@ -70,6 +135,15 @@ export async function selectDirectOperationInRequest(source, selector, options,
|
|
|
70
135
|
return syntaxElements(node);
|
|
71
136
|
};
|
|
72
137
|
const attr = syntaxAttribute;
|
|
138
|
+
const addressingMessages = new Set();
|
|
139
|
+
if (profile === 'components')
|
|
140
|
+
for (const document of input.documents) {
|
|
141
|
+
for (const portType of children(document.root).filter(node => node.name.namespace === WSDL_NAMESPACE && node.name.local === 'portType'))
|
|
142
|
+
for (const operation of children(portType).filter(node => node.name.namespace === WSDL_NAMESPACE && node.name.local === 'operation'))
|
|
143
|
+
for (const message of children(operation).filter(node => node.name.namespace === WSDL_NAMESPACE && ['input', 'output', 'fault'].includes(node.name.local)))
|
|
144
|
+
addressingMessages.add(message);
|
|
145
|
+
}
|
|
146
|
+
const addressingAttribute = (node, namespace, local) => addressingMessages.has(node) && namespace === ADDRESSING_WSDL && local === 'Action';
|
|
73
147
|
const exactly = (node, namespace, local) => {
|
|
74
148
|
const found = children(node).filter(c => c.name.namespace === namespace && c.name.local === local);
|
|
75
149
|
if (found.length !== 1)
|
|
@@ -78,7 +152,8 @@ export async function selectDirectOperationInRequest(source, selector, options,
|
|
|
78
152
|
};
|
|
79
153
|
const shape = (node, allowed) => {
|
|
80
154
|
for (const child of children(node))
|
|
81
|
-
if (!allowed.includes(`${child.name.namespace}#${child.name.local}`)
|
|
155
|
+
if (!allowed.includes(`${child.name.namespace}#${child.name.local}`)
|
|
156
|
+
&& !policyOwner?.isPolicyMetadata(child))
|
|
82
157
|
refuse('unsupported', 'binding-child-shape');
|
|
83
158
|
for (const child of node.children) {
|
|
84
159
|
if (child.kind !== 'text')
|
|
@@ -93,7 +168,8 @@ export async function selectDirectOperationInRequest(source, selector, options,
|
|
|
93
168
|
const attrs = (node, allowed) => {
|
|
94
169
|
children(node);
|
|
95
170
|
for (const a of node.attributes)
|
|
96
|
-
if (a.name.namespace
|
|
171
|
+
if (!addressingAttribute(node, a.name.namespace, a.name.local)
|
|
172
|
+
&& (a.name.namespace !== '' || !allowed.includes(a.name.local)))
|
|
97
173
|
refuse('unsupported', 'binding-attribute-shape');
|
|
98
174
|
};
|
|
99
175
|
// Conservative extension policy: only known WSDL 1.1/SOAP 1.1 syntax, even when optional.
|
|
@@ -113,12 +189,18 @@ export async function selectDirectOperationInRequest(source, selector, options,
|
|
|
113
189
|
const nested = children(node);
|
|
114
190
|
if (qualifiedSchemas.has(node))
|
|
115
191
|
continue;
|
|
192
|
+
if (policyOwner?.isPolicyMetadata(node))
|
|
193
|
+
continue;
|
|
116
194
|
if (node.name.namespace === WSDL_NAMESPACE && node.name.local === 'documentation')
|
|
117
195
|
continue;
|
|
118
196
|
const allowed = node.name.namespace === WSDL_NAMESPACE ? attributes[node.name.local] : node.name.namespace === SOAP ? soapAttributes[node.name.local] : undefined;
|
|
119
197
|
if (!allowed)
|
|
120
198
|
return refuse('unsupported', 'wsdl-extension');
|
|
121
199
|
for (const a of node.attributes) {
|
|
200
|
+
// @why The May 2006 WSDL binding assigns no normative intent to Action without UsingAddressing.
|
|
201
|
+
// UsingAddressing remains unsupported, so these attributes are retained metadata, never SOAP header instructions.
|
|
202
|
+
if (addressingAttribute(node, a.name.namespace, a.name.local))
|
|
203
|
+
continue;
|
|
122
204
|
if (a.name.namespace === WSDL_NAMESPACE && a.name.local === 'required' && node.name.namespace === SOAP && ['true', '1', 'false', '0'].includes(a.value))
|
|
123
205
|
continue;
|
|
124
206
|
if (a.name.namespace !== '' || !allowed.includes(a.name.local))
|
|
@@ -255,15 +337,24 @@ export async function selectDirectOperationInRequest(source, selector, options,
|
|
|
255
337
|
});
|
|
256
338
|
check();
|
|
257
339
|
// Charge publication traversal before retaining authority. Roots stay exact context objects.
|
|
258
|
-
const contract = { selector: ownedSelector, contextId: context.contextId,
|
|
340
|
+
const contract = { selector: ownedSelector, contextId: context.contextId,
|
|
341
|
+
basis: profile === 'direct' ? 'native-direct-premises-v1' : 'native-component-premises-v1',
|
|
342
|
+
correspondence: profile === 'direct' ? 'dated-XSD-2004-direct-v1' : 'dated-XSD-2004-components-v1',
|
|
259
343
|
binding: { version: '1.1', style: 'document', use: 'literal', transport: HTTP, action, source: binding.context.source },
|
|
260
344
|
input: requestRoot, output: responseRoot, faults,
|
|
261
|
-
|
|
345
|
+
...(policyOwner ? { policy: policyOwner.forBinding(binding.syntax), addressingActions: { required: false,
|
|
346
|
+
input: attr(abstractInput, 'Action', ADDRESSING_WSDL), output: attr(abstractOutput, 'Action', ADDRESSING_WSDL),
|
|
347
|
+
faults: declaredFaults.flatMap(fault => {
|
|
348
|
+
const action = attr(fault, 'Action', ADDRESSING_WSDL);
|
|
349
|
+
return action === undefined ? [] : [{ name: attr(fault, 'name'), action }];
|
|
350
|
+
}) } } : {}),
|
|
351
|
+
missingCapabilities: ['matcher', 'projection', 'scalar-payload', 'bundle', 'codec', 'buffered-transport', 'structured-generation',
|
|
352
|
+
...(policyOwner?.forBinding(binding.syntax).kind === 'https-transport' ? ['policy-enforcement'] : [])], admitted: false };
|
|
262
353
|
budget.freeze(contract);
|
|
263
354
|
check();
|
|
264
355
|
budget.chargeWork(256);
|
|
265
356
|
const selected = Object.freeze({ kind: 'selected', contract, usage: Object.freeze({ ...budget.usage() }) });
|
|
266
|
-
issued.set(contract, Object.freeze({ contract, context, source: input, evidence: qualified }));
|
|
357
|
+
issued.set(contract, Object.freeze({ contract, context, source: input, evidence: qualified, ...(policyOwner ? { policyOwner } : {}) }));
|
|
267
358
|
return selected;
|
|
268
359
|
});
|
|
269
360
|
return result.kind === 'resource-limit' ? failure('resource-limit', 'request-budget') : result;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { DirectOperationContract } from './directOperation.js';
|
|
2
|
-
import type { DirectCodecFailure, DirectDecodedXml, DirectXmlLimits } from './directCodec.js';
|
|
2
|
+
import type { DirectCodecFailure, DirectDecodedXml, ComponentDecodedXml, DirectXmlLimits } from './directCodec.js';
|
|
3
3
|
import type { ExpandedName, SyntaxElement } from '../loader/orderedSyntax.js';
|
|
4
4
|
import type { ResolverUsage } from './semanticBudget.js';
|
|
5
|
+
import type { ComponentRecordProjection, ComponentRecordDecodedXml } from './componentRecordProjection.js';
|
|
5
6
|
export interface DirectSoapOptions {
|
|
6
7
|
readonly service: ExpandedName;
|
|
7
8
|
readonly port: string;
|
|
@@ -18,11 +19,12 @@ export interface DirectSoapFailure {
|
|
|
18
19
|
readonly kind: DirectCodecFailure['kind'] | 'transport' | 'protocol';
|
|
19
20
|
readonly rule: string;
|
|
20
21
|
readonly usage: ResolverUsage;
|
|
22
|
+
readonly phase?: 'input' | 'response';
|
|
21
23
|
}
|
|
22
|
-
|
|
24
|
+
type SoapResult<D> = DirectSoapFailure | Readonly<{
|
|
23
25
|
kind: 'soap-response' | 'soap-fault';
|
|
24
26
|
admitted: false;
|
|
25
|
-
decoded:
|
|
27
|
+
decoded: D;
|
|
26
28
|
/** Actual bounded HTTP entity bytes, before any decoding; caller-owned data. */
|
|
27
29
|
responseBytes: Uint8Array;
|
|
28
30
|
status: number;
|
|
@@ -33,10 +35,32 @@ export type DirectSoapResult = DirectSoapFailure | Readonly<{
|
|
|
33
35
|
string: string;
|
|
34
36
|
actor?: string;
|
|
35
37
|
}>;
|
|
38
|
+
/** Qualified optional response blocks ignored under SOAP 1.1; their application semantics were not assessed. */
|
|
39
|
+
ignoredHeaders?: readonly ExpandedName[];
|
|
36
40
|
usage: ResolverUsage;
|
|
37
41
|
}>;
|
|
42
|
+
export type DirectSoapResult = SoapResult<DirectDecodedXml>;
|
|
43
|
+
export type ComponentSoapResult = SoapResult<ComponentDecodedXml>;
|
|
44
|
+
export type ComponentRecordSoapResult = SoapResult<ComponentDecodedXml | ComponentRecordDecodedXml>;
|
|
45
|
+
export interface ComponentSoapOptions extends Omit<DirectSoapOptions, 'endpoint' | 'allowEndpoint'> {
|
|
46
|
+
readonly endpoint?: string;
|
|
47
|
+
/** Optional restriction; omission permits only the configured or selected address. */
|
|
48
|
+
readonly allowEndpoint?: (endpoint: URL) => boolean;
|
|
49
|
+
/** Additional caller-owned PEM trust anchor; certificate and hostname verification remain enabled. */
|
|
50
|
+
readonly ca?: string;
|
|
51
|
+
}
|
|
38
52
|
/** Shared entry guard: consumers must call before reading any SOAP option. */
|
|
39
|
-
export declare function directSoapOptionsShape(options: unknown, check: () => void): string | undefined;
|
|
53
|
+
export declare function directSoapOptionsShape(options: unknown, check: () => void, additional?: readonly string[]): string | undefined;
|
|
40
54
|
/** Authentication and fresh-value validation precede dependency bootstrap and all HTTP I/O. */
|
|
41
55
|
export declare function exchangeDirectSoap(contract: DirectOperationContract, inputMapping: unknown, application: unknown, options: DirectSoapOptions): Promise<DirectSoapResult>;
|
|
42
|
-
|
|
56
|
+
/** Execute one authenticated component mapping through the existing SOAP client and native XML checks.
|
|
57
|
+
* @remarks HTTPS transport with verified server identity is supported. Client certificates, timestamps and
|
|
58
|
+
* timestamp layouts refuse before I/O. Algorithm suites constrain WS-Security cryptographic operations;
|
|
59
|
+
* this fragment has no supporting tokens, signature or encryption operations and emits no security header.
|
|
60
|
+
* Optional caller restrictions narrow the selected/configured endpoint. No gateway or source admission is granted here.
|
|
61
|
+
* @returns A validated response/fault or explicit failure, with owned work and connections closed.
|
|
62
|
+
* @throws TypeError For foreign native handles. Invalid explicit timer/XML capacities throw RangeError.
|
|
63
|
+
*/
|
|
64
|
+
export declare function exchangeComponentSoap(contract: DirectOperationContract, inputMapping: unknown, application: unknown, options: ComponentSoapOptions): Promise<ComponentSoapResult>;
|
|
65
|
+
export declare function exchangeComponentSoap(contract: DirectOperationContract, inputMapping: unknown, application: unknown, options: ComponentSoapOptions, responseProjection: ComponentRecordProjection): Promise<ComponentRecordSoapResult>;
|
|
66
|
+
export {};
|
|
@@ -1,18 +1,21 @@
|
|
|
1
1
|
import { isApplicationUnmetered } from './semanticBudget.js';
|
|
2
2
|
import { directDataOwnership, directLimit } from './directExecutionPolicy.js';
|
|
3
|
-
/**
|
|
3
|
+
/** Shared retained-operation SOAP 1.1 exchange; profile-specific authority stays explicit. */
|
|
4
4
|
import { checkSemanticBudget } from './semanticBudget.js';
|
|
5
5
|
import { DataOwnershipLimitError } from './dataOwnership.js';
|
|
6
6
|
import { Agent } from 'node:http';
|
|
7
|
+
import { Agent as HttpsAgent } from 'node:https';
|
|
7
8
|
import { types } from 'node:util';
|
|
8
9
|
import { WSDL } from 'soap/lib/wsdl/index.js';
|
|
9
10
|
import { Client } from 'soap/lib/client.js';
|
|
10
11
|
import { HttpClient } from 'soap/lib/http.js';
|
|
11
12
|
import { inspectDirectOperation } from './directOperation.js';
|
|
12
|
-
import { createDirectValueMapping, inspectDirectValueMapping } from './directValues.js';
|
|
13
|
-
import { decodeDirectXml, encodeDirectXml, DIRECT_XML_LIMITS } from './directCodec.js';
|
|
14
|
-
import { prepareDirectSoapSource, DirectSoapSourceError } from './directSoapSource.js';
|
|
15
|
-
import { isXmlNCName, resolveLexicalQName, SchemaLoadingError } from '../loader/orderedSyntax.js';
|
|
13
|
+
import { createDirectValueMapping, inspectDirectValueMapping, createComponentDirectionalMapping, inspectComponentValueMapping } from './directValues.js';
|
|
14
|
+
import { decodeDirectXml, encodeDirectXml, decodeComponentXml, encodeComponentXml, DIRECT_XML_LIMITS } from './directCodec.js';
|
|
15
|
+
import { prepareDirectSoapSource, prepareComponentSoapWsdl, DirectSoapSourceError } from './directSoapSource.js';
|
|
16
|
+
import { isXmlNCName, resolveLexicalQName, SchemaLoadingError, syntaxElements, syntaxAttribute, WSDL_NAMESPACE } from '../loader/orderedSyntax.js';
|
|
17
|
+
import { decodeComponentRecordXml, inspectComponentRecordProjection } from './componentRecordProjection.js';
|
|
18
|
+
import { assessComponentSoapHeader } from './soapHeaders.js';
|
|
16
19
|
const SOAP = 'http://schemas.xmlsoap.org/soap/envelope/';
|
|
17
20
|
class Stop extends Error {
|
|
18
21
|
kind;
|
|
@@ -25,11 +28,11 @@ class Stop extends Error {
|
|
|
25
28
|
}
|
|
26
29
|
const same = (a, b) => a.namespace === b.namespace && a.local === b.local;
|
|
27
30
|
/** Shared entry guard: consumers must call before reading any SOAP option. */
|
|
28
|
-
export function directSoapOptionsShape(options, check) {
|
|
31
|
+
export function directSoapOptionsShape(options, check, additional = []) {
|
|
29
32
|
if (!options || typeof options !== 'object' || types.isProxy(options)
|
|
30
33
|
|| ![null, Object.prototype].includes(Object.getPrototypeOf(options)))
|
|
31
34
|
return 'data-only SOAP options required';
|
|
32
|
-
const allowed = new Set(['service', 'port', 'endpoint', 'allowEndpoint', 'signal', 'timeoutMs', 'limits', 'capabilities']);
|
|
35
|
+
const allowed = new Set(['service', 'port', 'endpoint', 'allowEndpoint', 'signal', 'timeoutMs', 'limits', 'capabilities', ...additional]);
|
|
33
36
|
for (const key of Reflect.ownKeys(options)) {
|
|
34
37
|
check();
|
|
35
38
|
const descriptor = Object.getOwnPropertyDescriptor(options, key);
|
|
@@ -40,12 +43,58 @@ export function directSoapOptionsShape(options, check) {
|
|
|
40
43
|
}
|
|
41
44
|
/** Authentication and fresh-value validation precede dependency bootstrap and all HTTP I/O. */
|
|
42
45
|
export async function exchangeDirectSoap(contract, inputMapping, application, options) {
|
|
43
|
-
const { context, source } = inspectDirectOperation(contract);
|
|
44
46
|
const input = inspectDirectValueMapping(inputMapping, contract);
|
|
47
|
+
return exchangeSoap(contract, input, application, options, {
|
|
48
|
+
component: false, encode: encodeDirectXml, decode: decodeDirectXml, create: createDirectValueMapping,
|
|
49
|
+
prepare: async (selection, check) => {
|
|
50
|
+
const { source } = inspectDirectOperation(contract);
|
|
51
|
+
const { wsdlText } = prepareDirectSoapSource(contract, selection, check);
|
|
52
|
+
const wsdl = new WSDL(wsdlText, source.root.uri, { wsdl_options: { overrideImportLocation: () => { throw new Stop('unsupported', 'dependency import forbidden'); } } });
|
|
53
|
+
await new Promise((resolve, reject) => wsdl.onReady(error => error ? reject(error) : resolve()));
|
|
54
|
+
return wsdl;
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
export async function exchangeComponentSoap(contract, inputMapping, application, options, responseProjection) {
|
|
59
|
+
const { mapping: input } = inspectComponentValueMapping(inputMapping, contract);
|
|
60
|
+
if (responseProjection !== undefined) {
|
|
61
|
+
inspectComponentRecordProjection(responseProjection, contract);
|
|
62
|
+
return exchangeSoap(contract, input, application, options, {
|
|
63
|
+
component: true,
|
|
64
|
+
encode(owner, mapping, value, controls) {
|
|
65
|
+
if (mapping.kind !== 'component-mapping')
|
|
66
|
+
throw new TypeError('SOAP input requires the native input mapping');
|
|
67
|
+
return encodeComponentXml(owner, mapping, value, controls);
|
|
68
|
+
},
|
|
69
|
+
decode(owner, mapping, bytes, controls) {
|
|
70
|
+
if (mapping.kind === 'component-record-projection')
|
|
71
|
+
return decodeComponentRecordXml(owner, mapping, bytes, controls);
|
|
72
|
+
return decodeComponentXml(owner, mapping, bytes, { ...controls, selectPayload(root) {
|
|
73
|
+
const selected = controls.selectPayload(root);
|
|
74
|
+
if (selected.mapping.kind !== 'component-mapping')
|
|
75
|
+
throw new TypeError('Normal component decoding requires its exact mapping');
|
|
76
|
+
return { payload: selected.payload, mapping: selected.mapping };
|
|
77
|
+
} });
|
|
78
|
+
},
|
|
79
|
+
create(owner, direction, controls) {
|
|
80
|
+
return direction.kind === 'output' ? responseProjection : createComponentDirectionalMapping(owner, input, direction, controls);
|
|
81
|
+
},
|
|
82
|
+
prepare: (selection, check) => prepareComponentSoapWsdl(contract, selection, check),
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
return exchangeSoap(contract, input, application, options, {
|
|
86
|
+
component: true, encode: encodeComponentXml, decode: decodeComponentXml,
|
|
87
|
+
create: (owner, direction, controls) => createComponentDirectionalMapping(owner, input, direction, controls),
|
|
88
|
+
prepare: (selection, check) => prepareComponentSoapWsdl(contract, selection, check),
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
async function exchangeSoap(contract, input, application, options, profile) {
|
|
92
|
+
const { context } = inspectDirectOperation(contract);
|
|
45
93
|
if (input.direction.kind !== 'input')
|
|
46
94
|
throw new TypeError('SOAP request requires the exact input mapping');
|
|
47
95
|
const { budget } = context;
|
|
48
|
-
const fail = (kind, rule) => Object.freeze({ kind, rule,
|
|
96
|
+
const fail = (kind, rule, phase) => Object.freeze({ kind, rule,
|
|
97
|
+
...(profile.component && phase ? { phase } : {}), usage: Object.freeze({ ...budget.usage() }) });
|
|
49
98
|
let signal;
|
|
50
99
|
const check = () => { checkSemanticBudget(budget); if (signal?.aborted)
|
|
51
100
|
throw new Stop('cancelled', 'cooperative-cancellation'); };
|
|
@@ -58,7 +107,7 @@ export async function exchangeDirectSoap(contract, inputMapping, application, op
|
|
|
58
107
|
check();
|
|
59
108
|
// Options are a closed capability surface. Never silently discard security,
|
|
60
109
|
// headers, endpoint agents, redirects, streaming or other caller extensions.
|
|
61
|
-
const optionRule = directSoapOptionsShape(options, check);
|
|
110
|
+
const optionRule = directSoapOptionsShape(options, check, profile.component ? ['ca'] : []);
|
|
62
111
|
if (optionRule)
|
|
63
112
|
return fail('unsupported', optionRule);
|
|
64
113
|
signal = options.signal;
|
|
@@ -66,8 +115,20 @@ export async function exchangeDirectSoap(contract, inputMapping, application, op
|
|
|
66
115
|
return fail('unsupported', 'native AbortSignal required');
|
|
67
116
|
const allowEndpoint = options.allowEndpoint;
|
|
68
117
|
check();
|
|
69
|
-
|
|
70
|
-
|
|
118
|
+
let selectedEndpoint = options.endpoint;
|
|
119
|
+
if (profile.component && selectedEndpoint === undefined) {
|
|
120
|
+
const { source } = inspectDirectOperation(contract);
|
|
121
|
+
const services = source.documents.flatMap(d => syntaxElements(d.root, WSDL_NAMESPACE, 'service').filter(n => syntaxAttribute(d.root, 'targetNamespace') === options.service?.namespace && syntaxAttribute(n, 'name') === options.service?.local));
|
|
122
|
+
const ports = services.flatMap(n => syntaxElements(n, WSDL_NAMESPACE, 'port').filter(p => syntaxAttribute(p, 'name') === options.port));
|
|
123
|
+
const addresses = ports.flatMap(p => syntaxElements(p, 'http://schemas.xmlsoap.org/wsdl/soap/', 'address'));
|
|
124
|
+
if (services.length !== 1 || ports.length !== 1 || addresses.length !== 1 || !syntaxAttribute(addresses[0], 'location')) {
|
|
125
|
+
return fail('unsupported', 'Select one SOAP service/port address or supply an endpoint override');
|
|
126
|
+
}
|
|
127
|
+
selectedEndpoint = syntaxAttribute(addresses[0], 'location');
|
|
128
|
+
}
|
|
129
|
+
const config = directDataOwnership(budget).freeze(directDataOwnership(budget).snapshot({ service: options.service, port: options.port, endpoint: selectedEndpoint,
|
|
130
|
+
timeoutMs: options.timeoutMs ?? (profile.component || isApplicationUnmetered(budget) ? 0 : 15_000), limits: options.limits ?? {},
|
|
131
|
+
ca: options.ca, capabilities: options.capabilities ?? [] }));
|
|
71
132
|
if (!Array.isArray(config.capabilities) || config.capabilities.length)
|
|
72
133
|
return fail('unsupported', 'SOAP capability');
|
|
73
134
|
if (!Number.isSafeInteger(config.timeoutMs) || config.timeoutMs < 0 || config.timeoutMs > 2_147_483_647)
|
|
@@ -81,31 +142,52 @@ export async function exchangeDirectSoap(contract, inputMapping, application, op
|
|
|
81
142
|
if (typeof config.endpoint !== 'string' || typeof config.port !== 'string' || !isXmlNCName(config.port)
|
|
82
143
|
|| !config.service || typeof config.service.namespace !== 'string' || !isXmlNCName(config.service.local))
|
|
83
144
|
return fail('unsupported', 'explicit SOAP selection');
|
|
84
|
-
|
|
85
|
-
|
|
145
|
+
let endpoint;
|
|
146
|
+
try {
|
|
147
|
+
endpoint = new URL(config.endpoint);
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
return fail('unsupported', 'explicit HTTP(S) endpoint required');
|
|
151
|
+
}
|
|
152
|
+
if (profile.component) {
|
|
153
|
+
if (!['http:', 'https:'].includes(endpoint.protocol) || endpoint.username || endpoint.password || endpoint.hash || endpoint.search)
|
|
154
|
+
return fail('unsupported', 'explicit HTTP(S) endpoint required');
|
|
155
|
+
if (config.ca !== undefined && (typeof config.ca !== 'string' || endpoint.protocol !== 'https:'))
|
|
156
|
+
return fail('unsupported', 'HTTPS PEM trust anchor required');
|
|
157
|
+
const policy = contract.policy;
|
|
158
|
+
if (!policy)
|
|
159
|
+
return fail('unsupported', 'component policy authority required');
|
|
160
|
+
if (policy.kind === 'https-transport') {
|
|
161
|
+
if (endpoint.protocol !== 'https:')
|
|
162
|
+
return fail('unsupported', 'policy requires HTTPS');
|
|
163
|
+
if (policy.requireClientCertificate || policy.includeTimestamp || !['Strict', 'Lax'].includes(policy.layout))
|
|
164
|
+
return fail('unsupported', 'message security or client certificate capability required');
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
else if (endpoint.protocol !== 'http:' || endpoint.hostname !== '127.0.0.1' || !endpoint.port || endpoint.port === '1'
|
|
86
168
|
|| endpoint.username || endpoint.password || endpoint.hash || endpoint.search)
|
|
87
169
|
return fail('unsupported', 'owned loopback HTTP endpoint required');
|
|
88
|
-
if (
|
|
170
|
+
if (!(profile.component && allowEndpoint === undefined)
|
|
171
|
+
&& (typeof allowEndpoint !== 'function' || allowEndpoint(new URL(endpoint.href)) !== true))
|
|
89
172
|
return fail('unsupported', 'endpoint authorization');
|
|
90
173
|
const action = contract.binding.action;
|
|
91
174
|
if (/[^\x20-\x21\x23-\x7e]|\\/.test(action))
|
|
92
175
|
return fail('unsupported', 'unsafe SOAPAction');
|
|
93
|
-
const { wsdlText } = prepareDirectSoapSource(contract, config, check);
|
|
94
176
|
const elements = (node) => {
|
|
95
177
|
check();
|
|
96
178
|
return node.children.filter((child) => child.kind === 'element');
|
|
97
179
|
};
|
|
98
|
-
const encoded =
|
|
99
|
-
if (
|
|
100
|
-
return fail(encoded.kind, encoded.rule);
|
|
101
|
-
const output =
|
|
102
|
-
if (
|
|
180
|
+
const encoded = profile.encode(contract, input, application, { signal, limits });
|
|
181
|
+
if (!('bytes' in encoded))
|
|
182
|
+
return fail(encoded.kind, encoded.rule, 'input');
|
|
183
|
+
const output = profile.create(contract, { kind: 'output' }, { signal });
|
|
184
|
+
if (!('direction' in output))
|
|
103
185
|
return fail(output.kind, output.rule);
|
|
104
186
|
const faults = new Map();
|
|
105
187
|
for (const fault of contract.faults) {
|
|
106
188
|
check();
|
|
107
|
-
const mapping =
|
|
108
|
-
if (
|
|
189
|
+
const mapping = profile.create(contract, { kind: 'fault', name: fault.name }, { signal });
|
|
190
|
+
if (!('direction' in mapping))
|
|
109
191
|
return fail(mapping.kind, mapping.rule);
|
|
110
192
|
faults.set(fault.name, mapping);
|
|
111
193
|
}
|
|
@@ -115,12 +197,23 @@ export async function exchangeDirectSoap(contract, inputMapping, application, op
|
|
|
115
197
|
stop('protocol', 'SOAP protocol attributes or text');
|
|
116
198
|
return children;
|
|
117
199
|
};
|
|
118
|
-
const
|
|
200
|
+
const ignoredHeaders = [];
|
|
201
|
+
const bodyRoot = (root, incoming = false) => {
|
|
119
202
|
if (!same(root.name, { namespace: SOAP, local: 'Envelope' }))
|
|
120
203
|
stop('protocol', 'SOAP 1.1 Envelope required');
|
|
121
204
|
const children = shape(root);
|
|
122
205
|
if (children[0]?.name.namespace === SOAP && children[0].name.local === 'Header') {
|
|
123
|
-
if (
|
|
206
|
+
if (profile.component && incoming) {
|
|
207
|
+
const assessed = assessComponentSoapHeader(children[0], check);
|
|
208
|
+
if (assessed.kind !== 'ignored-optional-headers')
|
|
209
|
+
stop(assessed.kind, assessed.rule);
|
|
210
|
+
else
|
|
211
|
+
for (const name of assessed.headers) {
|
|
212
|
+
check();
|
|
213
|
+
ignoredHeaders.push(name);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
else if (shape(children[0]).length)
|
|
124
217
|
stop('unsupported', 'incoming SOAP headers');
|
|
125
218
|
children.shift();
|
|
126
219
|
}
|
|
@@ -131,12 +224,11 @@ export async function exchangeDirectSoap(contract, inputMapping, application, op
|
|
|
131
224
|
stop('protocol', 'one SOAP Body payload required');
|
|
132
225
|
return body[0];
|
|
133
226
|
};
|
|
134
|
-
|
|
135
|
-
const wsdl = new WSDL(wsdlText, source.root.uri, { wsdl_options: { overrideImportLocation: () => { throw new Stop('unsupported', 'dependency import forbidden'); } } });
|
|
136
|
-
await new Promise((resolve, reject) => wsdl.onReady(error => error ? reject(error) : resolve()));
|
|
227
|
+
const wsdl = await profile.prepare(config, check);
|
|
137
228
|
check();
|
|
138
229
|
// HTTP and codec byte limits bound buffering and output copies directly.
|
|
139
|
-
agent = new
|
|
230
|
+
agent = endpoint.protocol === 'https:' ? new HttpsAgent({ keepAlive: false, maxSockets: 1, rejectUnauthorized: true,
|
|
231
|
+
...(config.ca === undefined ? {} : { ca: config.ca }) }) : new Agent({ keepAlive: false, maxSockets: 1 });
|
|
140
232
|
controller = new AbortController();
|
|
141
233
|
signal?.addEventListener('abort', abort, { once: true });
|
|
142
234
|
let timedOut = false;
|
|
@@ -153,9 +245,9 @@ export async function exchangeDirectSoap(contract, inputMapping, application, op
|
|
|
153
245
|
stop('protocol', 'dependency dispatch mismatch');
|
|
154
246
|
if (Buffer.byteLength(data) > limits.maxBytes)
|
|
155
247
|
stop('resource-limit', 'SOAP request byte limit');
|
|
156
|
-
const outgoing =
|
|
248
|
+
const outgoing = profile.decode(contract, input, Buffer.from(data), { signal, limits,
|
|
157
249
|
uri: 'urn:typescript-wsdl-client:outgoing-soap', selectPayload: root => ({ payload: bodyRoot(root), mapping: input }) });
|
|
158
|
-
if (
|
|
250
|
+
if (!('validated' in outgoing))
|
|
159
251
|
stop(outgoing.kind, outgoing.rule);
|
|
160
252
|
check();
|
|
161
253
|
}
|
|
@@ -185,7 +277,7 @@ export async function exchangeDirectSoap(contract, inputMapping, application, op
|
|
|
185
277
|
// xmlToObject, including its special err.response parsing path.
|
|
186
278
|
callback(complete);
|
|
187
279
|
}, headers, { responseType: 'arraybuffer', decompress: false, maxRedirects: 0, maxContentLength: limits.maxBytes,
|
|
188
|
-
maxBodyLength: limits.maxBytes, proxy: false, httpAgent: agent, signal: controller.signal, timeout: config.timeoutMs });
|
|
280
|
+
maxBodyLength: limits.maxBytes, proxy: false, httpAgent: agent, httpsAgent: agent, signal: controller.signal, timeout: config.timeoutMs });
|
|
189
281
|
}
|
|
190
282
|
}
|
|
191
283
|
const client = new Client(wsdl, endpoint.href, { httpClient: new BufferedHttp() });
|
|
@@ -221,9 +313,9 @@ export async function exchangeDirectSoap(contract, inputMapping, application, op
|
|
|
221
313
|
if (charset && charset !== bom && !(charset === 'utf-16' && bom.startsWith('utf-16')))
|
|
222
314
|
return fail('protocol', 'SOAP charset disagrees with bytes');
|
|
223
315
|
let faultInfo;
|
|
224
|
-
const decoded =
|
|
316
|
+
const decoded = profile.decode(contract, output, observed.bytes, { signal, limits, uri: endpoint.href,
|
|
225
317
|
selectPayload: root => {
|
|
226
|
-
const payload = bodyRoot(root);
|
|
318
|
+
const payload = bodyRoot(root, true);
|
|
227
319
|
if (!same(payload.name, { namespace: SOAP, local: 'Fault' })) {
|
|
228
320
|
if (observed.status !== 200)
|
|
229
321
|
stop('protocol', 'HTTP 500 requires SOAP Fault');
|
|
@@ -261,12 +353,13 @@ export async function exchangeDirectSoap(contract, inputMapping, application, op
|
|
|
261
353
|
directDataOwnership(budget).freeze(faultInfo);
|
|
262
354
|
return { payload: detail[0], mapping: faults.get(faultInfo.name) };
|
|
263
355
|
} });
|
|
264
|
-
if (
|
|
265
|
-
return fail(decoded.kind, decoded.rule);
|
|
356
|
+
if (!('validated' in decoded))
|
|
357
|
+
return fail(decoded.kind, decoded.rule, 'response');
|
|
266
358
|
check();
|
|
267
359
|
check();
|
|
268
360
|
return Object.freeze({ kind: faultInfo ? 'soap-fault' : 'soap-response', admitted: false, decoded,
|
|
269
|
-
responseBytes: new Uint8Array(observed.bytes), status: observed.status, ...(faultInfo ? { fault: faultInfo } : {}),
|
|
361
|
+
responseBytes: new Uint8Array(observed.bytes), status: observed.status, ...(faultInfo ? { fault: faultInfo } : {}),
|
|
362
|
+
...(ignoredHeaders.length ? { ignoredHeaders: Object.freeze(ignoredHeaders) } : {}), usage: Object.freeze({ ...budget.usage() }) });
|
|
270
363
|
}
|
|
271
364
|
catch (error) {
|
|
272
365
|
if (budget.exhausted())
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { DirectOperationContract } from './directOperation.js';
|
|
2
2
|
import type { ExpandedName } from '../loader/orderedSyntax.js';
|
|
3
|
+
import { WSDL } from 'soap/lib/wsdl/index.js';
|
|
3
4
|
export declare const DIRECT_SOAP_SOURCE_MAX_BYTES: number;
|
|
4
5
|
export declare class DirectSoapSourceError extends Error {
|
|
5
6
|
readonly kind: 'unsupported' | 'resource-limit';
|
|
@@ -12,4 +13,26 @@ export declare function prepareDirectSoapSource(contract: DirectOperationContrac
|
|
|
12
13
|
original: Uint8Array<ArrayBufferLike>;
|
|
13
14
|
wsdlText: string;
|
|
14
15
|
};
|
|
15
|
-
|
|
16
|
+
/** Check each native operation before sharing its source metadata.
|
|
17
|
+
* @param contract Authentic component operation.
|
|
18
|
+
* @param config Exact service and port.
|
|
19
|
+
* @param check Invocation cancellation/resource checks.
|
|
20
|
+
* @returns No metadata or portable authority.
|
|
21
|
+
* @throws For foreign handles, unsupported source profile, action or selection.
|
|
22
|
+
*/
|
|
23
|
+
export declare function validateComponentSoapSelection(contract: DirectOperationContract, config: {
|
|
24
|
+
service: ExpandedName;
|
|
25
|
+
port: string;
|
|
26
|
+
}, check: () => void): void;
|
|
27
|
+
/** Build the existing SOAP dependency from the exact authorized snapshot, with no file/network import fallback.
|
|
28
|
+
* @remarks Acyclic metadata resources are decoded independently under the native metadata policy. Original bytes and native semantics
|
|
29
|
+
* are unchanged. The dependency receives private aliases and a fresh prefilled cache; its import hook accepts only
|
|
30
|
+
* unambiguous native source edges to already prepared resources. This grants no endpoint or policy enforcement.
|
|
31
|
+
* @returns A prepared node-soap WSDL for the exact original service/port/binding.
|
|
32
|
+
* @throws DirectSoapSourceError For incompatible source/profile, unsafe dependency names, cycles or ambiguous imports.
|
|
33
|
+
* Caller cancellation/resource exceptions propagate unchanged.
|
|
34
|
+
*/
|
|
35
|
+
export declare function prepareComponentSoapWsdl(contract: DirectOperationContract, config: {
|
|
36
|
+
service: ExpandedName;
|
|
37
|
+
port: string;
|
|
38
|
+
}, check: () => void): Promise<WSDL>;
|