diff --git a/.github/workflows/cve-scanning-maven.yml b/.github/workflows/cve-scanning-maven.yml index 11f7eb25..d0f433dc 100644 --- a/.github/workflows/cve-scanning-maven.yml +++ b/.github/workflows/cve-scanning-maven.yml @@ -9,6 +9,11 @@ on: - '**/pom.xml' - '.github/workflows/maven-cve-ignore-list.xml' - '.github/workflows/cve-scanning-maven.yml' + pull_request: + paths: + - '**/pom.xml' + - '.github/workflows/maven-cve-ignore-list.xml' + - '.github/workflows/cve-scanning-maven.yml' jobs: depchecktest: diff --git a/.github/workflows/cve-scanning-node.yml b/.github/workflows/cve-scanning-node.yml index e603626e..f1567844 100644 --- a/.github/workflows/cve-scanning-node.yml +++ b/.github/workflows/cve-scanning-node.yml @@ -10,6 +10,12 @@ on: - '**/package-lock.json' - '.github/workflows/node-cve-ignore-list.xml' - '.github/workflows/cve-scanning-node.yml' + pull_request: + paths: + - '**/package.json' + - '**/package-lock.json' + - '.github/workflows/node-cve-ignore-list.xml' + - '.github/workflows/cve-scanning-node.yml' jobs: node-modules-scan: diff --git a/.github/workflows/spectral-validation.yml b/.github/workflows/spectral-validation.yml index d0d060ab..21753e1a 100644 --- a/.github/workflows/spectral-validation.yml +++ b/.github/workflows/spectral-validation.yml @@ -31,5 +31,5 @@ jobs: with: node-version: v20 - run: npm install @stoplight/spectral-cli - - run: npx spectral lint --ruleset spectral/instantiation/validation-rules.yaml 'calm/samples/**/*(*.json|*.yaml)' + - run: npx spectral lint --ruleset spectral/instantiation/validation-rules.yaml 'calm/samples/api-gateway-instantiation(*.json|*.yaml)' diff --git a/calm/draft/2024-10/meta/flow.json b/calm/draft/2024-10/meta/flow.json new file mode 100644 index 00000000..cbe11b5b --- /dev/null +++ b/calm/draft/2024-10/meta/flow.json @@ -0,0 +1,82 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://calm.finos.org/draft/2024-10/meta/flow.json", + "title": "Business Flow Model", + "description": "Defines business flows that relate to technical architectures, allowing mapping of flows to technical components and attaching control requirements.", + "type": "object", + "properties": { + "unique-id": { + "type": "string", + "description": "Unique identifier for the flow" + }, + "name": { + "type": "string", + "description": "Descriptive name for the business flow" + }, + "description": { + "type": "string", + "description": "Detailed description of the flow's purpose" + }, + "requirement-url": { + "type": "string", + "description": "Link to a detailed requirement document" + }, + "transitions": { + "type": "array", + "items": { + "$ref": "#/defs/transition" + } + }, + "controls": { + "$ref": "https://calm.finos.org/draft/2024-10/meta/control.json#/defs/controls" + }, + "metadata": { + "$ref": "#/defs/metadata" + } + }, + "required": [ + "unique-id", + "name", + "description", + "transitions" + ], + "defs": { + "transition": { + "type": "object", + "properties": { + "relationship-unique-id": { + "type": "string", + "description": "Unique identifier for the relationship in the architecture" + }, + "sequence-number": { + "type": "integer", + "description": "Indicates the sequence of the relationship in the flow" + }, + "summary": { + "type": "string", + "description": "Functional summary of what is happening in the transition" + }, + "direction": { + "enum": [ + "source-to-destination", + "destination-to-source" + ], + "default": "source-to-destination" + }, + "required": [ + "relationship-unique-id", + "sequence-number", + "summary" + ] + }, + "minItems": 1 + }, + "metadata": { + "type": "array", + "items": { + "type": "object" + } + } + } +} + diff --git a/calm/samples/traderx/controls/flow-sla-control-requirement.json b/calm/samples/traderx/controls/flow-sla-control-requirement.json new file mode 100644 index 00000000..6106d0e0 --- /dev/null +++ b/calm/samples/traderx/controls/flow-sla-control-requirement.json @@ -0,0 +1,182 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://calm.finos.org/traderx/controls/flow-sla-control-requirement.json", + "title": "Flow SLA Control", + "type": "object", + "allOf": [ + { + "$ref": "https://calm.finos.org/draft/2024-10/meta/control-requirement.json" + } + ], + "properties": { + "control-id": { + "const": "flow-sla-001" + }, + "name": { + "const": "Flow SLA Control" + }, + "description": { + "const": "Ensure that each flow meets the defined Service Level Agreement (SLA)" + }, + "latency": { + "type": "object", + "properties": { + "expected-latency": { + "$ref": "https://calm.finos.org/draft/2024-10/meta/units.json#/defs/time-unit", + "description": "The expected latency for completion of flow" + }, + "alert-threshold": { + "$ref": "https://calm.finos.org/draft/2024-10/meta/units.json#/defs/time-unit", + "description": "If latency exceeds this threshold, an alert will be triggered." + } + }, + "required": [ + "expected-latency", + "alert-threshold" + ] + }, + "throughput": { + "type": "object", + "properties": { + "expected-message-rate": { + "$ref": "https://calm.finos.org/draft/2024-10/meta/units.json#/defs/time-unit", + "description": "Define the expected message rate that the flow should handle e.g. 1000 per second" + } + }, + "required": [ + "expected-message-rate" + ] + }, + "availability": { + "type": "object", + "properties": { + "uptime-guarantee": { + "type": "number", + "description": "Percentage of availability required (e.g., 99.9%).", + "minimum": 0, + "maximum": 100 + } + }, + "required": [ + "uptime-guarantee" + ] + }, + "data-integrity": { + "type": "object", + "properties": { + "message-reliability": { + "enum": [ + "atLeastOnce", + "atMostOnce", + "exactlyOnce" + ], + "description": "Guarantee that messages are delivered in the correct order and without duplication." + }, + "loss-tolerance": { + "type": "number", + "description": "Specify acceptable levels of message loss as a percentage (e.g., 0 to 100).", + "minimum": 0, + "maximum": 100 + } + }, + "required": [ + "message-reliability", + "loss-tolerance" + ] + }, + "error-handling": { + "type": "object", + "properties": { + "retry-logic": { + "type": "object", + "properties": { + "max-retries": { + "type": "integer", + "description": "Specify the maximum number of retries in case of failures." + }, + "retry-interval": { + "$ref": "https://calm.finos.org/draft/2024-10/meta/units.json#/defs/time-unit", + "description": "Define the interval between retries." + } + }, + "required": ["max-retries", "retry-interval"] + } + }, + "required": [ + "retry-logic" + ] + }, + "monitoring": { + "type": "object", + "properties": { + "real-time-monitoring": { + "type": "string", + "description": "Define the monitoring systems for tracking performance against the SLA." + }, + "consumer-reporting": { + "$ref": "https://calm.finos.org/draft/2024-10/meta/units.json#/defs/time-unit", + "description": "Specify the reporting frequency for the consumer, e.g., daily, weekly, or monthly." + } + }, + "required": [ + "real-time-monitoring", + "consumer-reporting" + ] + }, + "incident-response": { + "type": "object", + "properties": { + "incident-resolution-time": { + "$ref": "https://calm.finos.org/draft/2024-10/meta/units.json#/defs/time-unit", + "description": "Define timeframes for responding to SLA-impacting issues." + }, + "escalation-protocols": { + "type": "object", + "properties": { + "incident-start-time-post-alert": { + "$ref": "https://calm.finos.org/draft/2024-10/meta/units.json#/defs/time-unit", + "description": "Timeframe for initiating incident response after an alert." + }, + "escalation-path": { + "type": "string", + "description": "Specify the escalation path for SLA violations." + } + }, + "required": [ + "incident-start-time-post-alert", + "escalation-path" + ] + } + }, + "required": [ + "incident-resolution-time", + "escalation-protocols" + ] + }, + "review-adjustments": { + "type": "object", + "properties": { + "sla-review": { + "$ref": "https://calm.finos.org/draft/2024-10/meta/units.json#/defs/time-unit", + "description": "Outline a schedule for regularly reviewing the SLA." + } + }, + "required": [ + "sla-review" + ] + } + }, + "required": [ + "control-id", + "name", + "description", + "latency", + "throughput", + "availability", + "data-integrity", + "error-handling", + "monitoring", + "incident-response", + "review-adjustments" + ] +} diff --git a/calm/samples/traderx/flows/add-update-account/add-update-account-control-configuration.json b/calm/samples/traderx/flows/add-update-account/add-update-account-control-configuration.json new file mode 100644 index 00000000..3c081a15 --- /dev/null +++ b/calm/samples/traderx/flows/add-update-account/add-update-account-control-configuration.json @@ -0,0 +1,65 @@ +{ + "$schema": "https://calm.finos.org/traderx/controls/flow-sla-control-requirement.json", + "$id": "https://calm.finos.org/traderx/flows/add-update-account/add-update-account-control-configuration.json", + "control-id": "flow-sla-001", + "name": "Flow SLA Control for Add or Update Account", + "description": "Ensure that the Add or Update Account flow meets the defined Service Level Agreement (SLA).", + "latency": { + "expected-latency": { + "value": 100, + "unit": "milliseconds" + }, + "alert-threshold": { + "value": 150, + "unit": "milliseconds" + } + }, + "throughput": { + "expected-message-rate": { + "value": 500, + "unit": "seconds" + } + }, + "availability": { + "uptime-guarantee": 99.9 + }, + "data-integrity": { + "message-reliability": "atLeastOnce", + "loss-tolerance": 0 + }, + "error-handling": { + "retry-logic": { + "max-retries": 3, + "retry-interval": { + "value": 10, + "unit": "seconds" + } + } + }, + "monitoring": { + "real-time-monitoring": "Use of monitoring tools like Prometheus or Grafana for SLA tracking.", + "consumer-reporting": { + "value": 1, + "unit": "days" + } + }, + "incident-response": { + "incident-resolution-time": { + "value": 30, + "unit": "minutes" + }, + "escalation-protocols": { + "incident-start-time-post-alert": { + "value": 5, + "unit": "minutes" + }, + "escalation-path": "Notify the incident response team via the dedicated Slack channel." + } + }, + "review-adjustments": { + "sla-review": { + "value": 1, + "unit": "months" + } + } +} diff --git a/calm/samples/traderx/flows/add-update-account/add-update-account.json b/calm/samples/traderx/flows/add-update-account/add-update-account.json new file mode 100644 index 00000000..f2feb59b --- /dev/null +++ b/calm/samples/traderx/flows/add-update-account/add-update-account.json @@ -0,0 +1,36 @@ +{ + "$schema": "https://calm.finos.org/draft/2024-10/meta/flow.json", + "$id": "https://calm.finos.org/traderx/flows/add-update-account.json", + "unique-id": "flow-add-update-account", + "name": "Add or Update Account", + "description": "Flow for adding or updating account information in the database.", + "transitions": [ + { + "relationship-unique-id": "web-gui-process-uses-accounts-service", + "sequence-number": 1, + "summary": "Submit Account Create/Update" + }, + { + "relationship-unique-id": "accounts-service-uses-traderx-db-for-accounts", + "sequence-number": 2, + "summary": "inserts or updates account" + }, + { + "relationship-unique-id": "web-gui-process-uses-accounts-service", + "sequence-number": 3, + "summary": "Returns Account Create/Update Response Status", + "direction": "destination-to-source" + } + ], + "controls": { + "add-update-account-sla": { + "description": "Control requirement for flow SLA", + "requirements": [ + { + "control-requirement": "https://calm.finos.org/traderx/controls/flow-sla-control-requirement.json", + "control-config": "https://calm.finos.org/traderx/flows/add-update-account/add-update-account-control-configuration.json" + } + ] + } + } +} diff --git a/calm/samples/traderx/flows/bootstrapping-position-blotter/bootstrapping-position-blotter.json b/calm/samples/traderx/flows/bootstrapping-position-blotter/bootstrapping-position-blotter.json new file mode 100644 index 00000000..0c37a7a3 --- /dev/null +++ b/calm/samples/traderx/flows/bootstrapping-position-blotter/bootstrapping-position-blotter.json @@ -0,0 +1,42 @@ +{ + "$schema": "https://calm.finos.org/draft/2024-10/meta/flow.json", + "$id": "https://calm.finos.org/traderx/flows/load-positions.json", + "unique-id": "flow-load-positions", + "name": "Load Positions", + "description": "Flow for loading positions for a specific account and subscribing to updates.", + "transitions": [ + { + "relationship-unique-id": "web-gui-uses-position-service-for-position-queries", + "sequence-number": 1, + "summary": "Load Positions (acc)" + }, + { + "relationship-unique-id": "position-service-uses-traderx-db-for-positions", + "sequence-number": 2, + "summary": "Query Positions for Account" + }, + { + "relationship-unique-id": "position-service-uses-traderx-db-for-positions", + "sequence-number": 3, + "summary": "Return Positions for Account", + "direction": "destination-to-source" + }, + { + "relationship-unique-id": "web-gui-uses-position-service-for-position-queries", + "sequence-number": 4, + "summary": "Return Positions for Account", + "direction": "destination-to-source" + }, + { + "relationship-unique-id": "web-gui-uses-trade-feed", + "sequence-number": 5, + "summary": "Subscribe to Position updates (accounts/$id/positions)" + }, + { + "relationship-unique-id": "web-gui-uses-trade-feed", + "sequence-number": 6, + "summary": "Publish Position Updates", + "direction": "destination-to-source" + } + ] +} diff --git a/calm/samples/traderx/flows/load-list-of-accounts/load-list-of-accounts.json b/calm/samples/traderx/flows/load-list-of-accounts/load-list-of-accounts.json new file mode 100644 index 00000000..877a2bcc --- /dev/null +++ b/calm/samples/traderx/flows/load-list-of-accounts/load-list-of-accounts.json @@ -0,0 +1,31 @@ +{ + "$schema": "https://calm.finos.org/draft/2024-10/meta/flow.json", + "$id": "https://calm.finos.org/traderx/flows/load-list-of-accounts.json", + "unique-id": "flow-load-list-of-accounts", + "name": "Load List of Accounts", + "description": "Flow for loading a list of accounts from the database to populate the GUI drop-down for user account selection.", + "transitions": [ + { + "relationship-unique-id": "web-gui-process-uses-accounts-service", + "sequence-number": 1, + "summary": "Load list of accounts" + }, + { + "relationship-unique-id": "accounts-service-uses-traderx-db-for-accounts", + "sequence-number": 2, + "summary": "Query for all Accounts" + }, + { + "relationship-unique-id": "accounts-service-uses-traderx-db-for-accounts", + "sequence-number": 3, + "summary": "Returns list of accounts", + "direction": "destination-to-source" + }, + { + "relationship-unique-id": "web-gui-process-uses-accounts-service", + "sequence-number": 4, + "summary": "Returns list of accounts", + "direction": "destination-to-source" + } + ] +} diff --git a/calm/samples/traderx/flows/submit-trade-ticket/submit-trade-ticket-control-configuration.json b/calm/samples/traderx/flows/submit-trade-ticket/submit-trade-ticket-control-configuration.json new file mode 100644 index 00000000..60dedf27 --- /dev/null +++ b/calm/samples/traderx/flows/submit-trade-ticket/submit-trade-ticket-control-configuration.json @@ -0,0 +1,65 @@ +{ + "$schema": "https://calm.finos.org/traderx/controls/flow-sla-control-requirement.json", + "$id": "https://calm.finos.org/traderx/flows/submit-trade-ticket/submit-trade-ticket-control-configuration.json", + "control-id": "flow-sla-001", + "name": "Flow SLA Control for Trade Ticket Submission", + "description": "Ensure that Trade Ticket Submission flow meets the defined Service Level Agreement (SLA).", + "latency": { + "expected-latency": { + "value": 100, + "unit": "milliseconds" + }, + "alert-threshold": { + "value": 150, + "unit": "milliseconds" + } + }, + "throughput": { + "expected-message-rate": { + "value": 1000, + "unit": "seconds" + } + }, + "availability": { + "uptime-guarantee": 99.9 + }, + "data-integrity": { + "message-reliability": "exactlyOnce", + "loss-tolerance": 0 + }, + "error-handling": { + "retry-logic": { + "max-retries": 3, + "retry-interval": { + "value": 10, + "unit": "seconds" + } + } + }, + "monitoring": { + "real-time-monitoring": "Use of monitoring tools like Prometheus or Grafana for SLA tracking.", + "consumer-reporting": { + "value": 1, + "unit": "days" + } + }, + "incident-response": { + "incident-resolution-time": { + "value": 30, + "unit": "minutes" + }, + "escalation-protocols": { + "incident-start-time-post-alert": { + "value": 5, + "unit": "minutes" + }, + "escalation-path": "Notify the incident response team via the dedicated Slack channel." + } + }, + "review-adjustments": { + "sla-review": { + "value": 1, + "unit": "months" + } + } +} diff --git a/calm/samples/traderx/flows/submit-trade-ticket/submit-trade-ticket.json b/calm/samples/traderx/flows/submit-trade-ticket/submit-trade-ticket.json new file mode 100644 index 00000000..c81c49c8 --- /dev/null +++ b/calm/samples/traderx/flows/submit-trade-ticket/submit-trade-ticket.json @@ -0,0 +1,55 @@ +{ + "$schema": "https://calm.finos.org/draft/2024-10/meta/flow.json", + "$id": "https://calm.finos.org/traderx/flows/submit-trade-ticket/submit-trade-ticket.json", + "unique-id": "flow-submit-trade-ticket", + "name": "Submitting a Trade Ticket", + "description": "Flow for submitting a trade ticket and validating the trade, account, and publishing a new trade event.", + "transitions": [ + { + "relationship-unique-id": "web-gui-process-uses-reference-data-service", + "sequence-number": 1, + "summary": "Load ticker list" + }, + { + "relationship-unique-id": "web-gui-process-uses-reference-data-service", + "sequence-number": 2, + "summary": "Return ticker list", + "direction": "destination-to-source" + }, + { + "relationship-unique-id": "web-gui-process-uses-trading-services", + "sequence-number": 3, + "summary": "Submit trade (acct, ticker, side, qty)" + }, + { + "relationship-unique-id": "trading-services-connects-to-reference-data-service", + "sequence-number": 4, + "summary": "Validate Ticker" + }, + { + "relationship-unique-id": "trading-services-uses-account-service", + "sequence-number": 5, + "summary": "Validate Account Number" + }, + { + "relationship-unique-id": "trading-services-uses-trade-feed", + "sequence-number": 6, + "summary": "Publish new Trade Event (trades/new)" + }, + { + "relationship-unique-id": "web-gui-process-uses-trading-services", + "sequence-number": 7, + "summary": "Trade Submission Complete", + "direction": "destination-to-source" + } + ], + "submit-trade-ticket-sla": { + "description": "Control requirement for flow SLA", + "requirements": [ + { + "control-requirement": "https://calm.finos.org/traderx/controls/flow-sla-control-requirement.json", + "control-config": "https://calm.finos.org/traderx/flows/submit-trade-ticket/submit-trade-ticket-control-configuration.json" + } + ] + } +} diff --git a/calm/samples/traderx/flows/trade-processing/trade-processing-control-configuration.json b/calm/samples/traderx/flows/trade-processing/trade-processing-control-configuration.json new file mode 100644 index 00000000..b6703fe1 --- /dev/null +++ b/calm/samples/traderx/flows/trade-processing/trade-processing-control-configuration.json @@ -0,0 +1,65 @@ +{ + "$schema": "https://calm.finos.org/traderx/controls/flow-sla-control-requirement.json", + "$id": "https://calm.finos.org/traderx/flows/trade-processing/trade-processing-control-configuration.json", + "control-id": "flow-sla-001", + "name": "Flow SLA Control for Trade Processing", + "description": "Ensure that Trade Processing flows meet the defined Service Level Agreement (SLA).", + "latency": { + "expected-latency": { + "value": 100, + "unit": "milliseconds" + }, + "alert-threshold": { + "value": 150, + "unit": "milliseconds" + } + }, + "throughput": { + "expected-message-rate": { + "value": 1000, + "unit": "seconds" + } + }, + "availability": { + "uptime-guarantee": 99.9 + }, + "data-integrity": { + "message-reliability": "atLeastOnce", + "loss-tolerance": 0 + }, + "error-handling": { + "retry-logic": { + "max-retries": 3, + "retry-interval": { + "value": 10, + "unit": "seconds" + } + } + }, + "monitoring": { + "real-time-monitoring": "Use of monitoring tools like Prometheus or Grafana for SLA tracking.", + "consumer-reporting": { + "value": 1, + "unit": "days" + } + }, + "incident-response": { + "incident-resolution-time": { + "value": 30, + "unit": "minutes" + }, + "escalation-protocols": { + "incident-start-time-post-alert": { + "value": 5, + "unit": "minutes" + }, + "escalation-path": "Notify the incident response team via the dedicated Slack channel." + } + }, + "review-adjustments": { + "sla-review": { + "value": 1, + "unit": "months" + } + } +} diff --git a/calm/samples/traderx/flows/trade-processing/trade-processing-new-trade.json b/calm/samples/traderx/flows/trade-processing/trade-processing-new-trade.json new file mode 100644 index 00000000..60dc99fd --- /dev/null +++ b/calm/samples/traderx/flows/trade-processing/trade-processing-new-trade.json @@ -0,0 +1,52 @@ +{ + "$schema": "https://calm.finos.org/draft/2024-10/meta/flow.json", + "$id": "https://calm.finos.org/traderx/flows/trade-processing.json", + "unique-id": "flow-trade-processing", + "name": "Trade Processing - New Trade", + "description": "The process flow for handling new trade events", + "transitions": [ + { + "relationship-unique-id": "trade-processor-connects-to-trade-feed", + "sequence-number": 1, + "summary": "New Trade Request (trades/new)", + "direction": "destination-to-source" + }, + { + "relationship-unique-id": "trade-processor-connects-to-traderx-db", + "sequence-number": 2, + "summary": "Insert New Trade" + }, + { + "relationship-unique-id": "trade-processor-connects-to-trade-feed", + "sequence-number": 3, + "summary": "Publish New TradeEvent (accounts/$id/trades)" + }, + { + "relationship-unique-id": "trade-processor-connects-to-trade-feed", + "sequence-number": 3, + "summary": "Publish PositionEvent (accounts/$id/positions)" + }, + { + "relationship-unique-id": "web-gui-process-uses-trade-feed", + "sequence-number": 4, + "summary": "New Trade Created", + "direction": "destination-to-source" + }, + { + "relationship-unique-id": "web-gui-process-uses-trade-feed", + "sequence-number": 4, + "summary": "Position Updated", + "direction": "destination-to-source" + } + ], + "trade-processing-sla": { + "description": "Control requirement for flow SLA", + "requirements": [ + { + "control-requirement": "https://calm.finos.org/traderx/controls/flow-sla-control-requirement.json", + "control-config": "https://calm.finos.org/traderx/flows/trade-processing/trade-processing-control-configuration.json" + } + ] + } +} + diff --git a/calm/samples/traderx/flows/trade-processing/trade-processing-update-trade.json b/calm/samples/traderx/flows/trade-processing/trade-processing-update-trade.json new file mode 100644 index 00000000..fa13a2b4 --- /dev/null +++ b/calm/samples/traderx/flows/trade-processing/trade-processing-update-trade.json @@ -0,0 +1,51 @@ +{ + "$schema": "https://calm.finos.org/draft/2024-10/meta/flow.json", + "$id": "https://calm.finos.org/traderx/flows/trade-processing.json", + "unique-id": "flow-trade-processing", + "name": "Trade Processing - New Trade", + "description": "The process flow for handling update trade events", + "transitions": [ + { + "relationship-unique-id": "trade-processor-connects-to-trade-feed", + "sequence-number": 1, + "summary": "Update Trade Request (trades/update)", + "direction": "destination-to-source" + }, + { + "relationship-unique-id": "trade-processor-connects-to-traderx-db", + "sequence-number": 2, + "summary": "Update Trade" + }, + { + "relationship-unique-id": "trade-processor-connects-to-trade-feed", + "sequence-number": 3, + "summary": "Publish TradeUpdatedEvent (accounts/$id/trades)" + }, + { + "relationship-unique-id": "trade-processor-connects-to-trade-feed", + "sequence-number": 3, + "summary": "Publish PositionEvent (accounts/$id/positions)" + }, + { + "relationship-unique-id": "web-gui-process-uses-trade-feed", + "sequence-number": 4, + "summary": "Trade Updated", + "direction": "destination-to-source" + }, + { + "relationship-unique-id": "web-gui-process-uses-trade-feed", + "sequence-number": 4, + "summary": "Position Updated", + "direction": "destination-to-source" + } + ], + "trade-processing-sla": { + "description": "Control requirement for flow SLA", + "requirements": [ + { + "control-requirement": "https://calm.finos.org/traderx/controls/flow-sla-control-requirement.json", + "control-config": "https://calm.finos.org/traderx/flows/trade-processing/trade-processing-control-configuration.json" + } + ] + } +} diff --git a/calm/samples/traderx/traderx.json b/calm/samples/traderx/traderx.json index 15ee074a..e0e4f752 100644 --- a/calm/samples/traderx/traderx.json +++ b/calm/samples/traderx/traderx.json @@ -437,6 +437,21 @@ } }, "protocol": "HTTPS" + }, + { + "unique-id": "accounts-service-uses-traderx-db-for-accounts", + "description": "CRUD operations on account", + "relationship-type": { + "connects": { + "source": { + "node": "accounts-service" + }, + "destination": { + "node": "traderx-db" + } + } + }, + "protocol": "JDBC" } ] } \ No newline at end of file diff --git a/cli/package-lock.json b/cli/package-lock.json index f55c9d10..8c9faaa4 100644 --- a/cli/package-lock.json +++ b/cli/package-lock.json @@ -8755,9 +8755,9 @@ } }, "node_modules/typescript": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", - "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", "dev": true, "license": "Apache-2.0", "bin": { diff --git a/docs/package-lock.json b/docs/package-lock.json index e5e6fe59..cc607f2c 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -21,7 +21,9 @@ }, "devDependencies": { "@docusaurus/module-type-aliases": "3.5.2", - "@docusaurus/types": "3.5.2" + "@docusaurus/types": "3.5.2", + "express": "^4.21.1", + "webpack-dev-server": "^5.1.0" }, "engines": { "node": ">=18.0" @@ -2483,6 +2485,158 @@ "react-dom": "^18.0.0" } }, + "node_modules/@docusaurus/core/node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "license": "MIT" + }, + "node_modules/@docusaurus/core/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@docusaurus/core/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@docusaurus/core/node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@docusaurus/core/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@docusaurus/core/node_modules/webpack-dev-middleware": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", + "license": "MIT", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/@docusaurus/core/node_modules/webpack-dev-server": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", + "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", + "license": "MIT", + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.5", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.4", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/@docusaurus/core/node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/@docusaurus/cssnano-preset": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.5.2.tgz", @@ -3114,6 +3268,63 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.1.0.tgz", + "integrity": "sha512-zlQONA+msXPPwHWZMKFVS78ewFczIll5lXiVPwFPCZUsrOKdxc2AvxU1HoNBmMRhqDZUR9HkC3UOm+6pME6Xsg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "^1.1.1", + "@jsonjoy.com/util": "^1.1.2", + "hyperdyperid": "^1.2.0", + "thingies": "^1.20.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.5.0.tgz", + "integrity": "sha512-ojoNsrIuPI9g6o8UxhraZQSyF2ByJanAY4cTFbc8Mf2AXEF4aQRGY1dJxyJpuyav8r9FGflEt/Ff3u5Nt6YMPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", @@ -3873,9 +4084,10 @@ } }, "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", + "dev": true, "license": "MIT" }, "node_modules/@types/sax": { @@ -4772,6 +4984,22 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "license": "MIT" }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -5360,9 +5588,9 @@ "license": "MIT" }, "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -5922,6 +6150,36 @@ "node": ">=0.10.0" } }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/default-gateway": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", @@ -6616,9 +6874,9 @@ } }, "node_modules/express": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", - "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", "license": "MIT", "dependencies": { "accepts": "~1.3.8", @@ -6626,7 +6884,7 @@ "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.6.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -8097,6 +8355,16 @@ "node": ">=10.17.0" } }, + "node_modules/hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.18" + } + }, "node_modules/icss-utils": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", @@ -8394,6 +8662,41 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container/node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-installed-globally": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", @@ -8410,6 +8713,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-network-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", + "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-npm": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz", @@ -11626,16 +11942,21 @@ } }, "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.0.tgz", + "integrity": "sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA==", + "dev": true, "license": "MIT", "dependencies": { - "@types/retry": "0.12.0", + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", "retry": "^0.13.1" }, "engines": { - "node": ">=8" + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-try": { @@ -13644,6 +13965,19 @@ "node": ">=12.0.0" } }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -14664,6 +14998,19 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "license": "MIT" }, + "node_modules/thingies": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz", + "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==", + "dev": true, + "license": "Unlicense", + "engines": { + "node": ">=10.18" + }, + "peerDependencies": { + "tslib": "^2" + } + }, "node_modules/thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", @@ -14721,6 +15068,23 @@ "node": ">=6" } }, + "node_modules/tree-dump": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.2.tgz", + "integrity": "sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, "node_modules/trim-lines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", @@ -15424,32 +15788,60 @@ } }, "node_modules/webpack-dev-middleware": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", - "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.2.tgz", + "integrity": "sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==", + "dev": true, "license": "MIT", "dependencies": { "colorette": "^2.0.10", - "memfs": "^3.4.3", + "memfs": "^4.6.0", "mime-types": "^2.1.31", + "on-finished": "^2.4.1", "range-parser": "^1.2.1", "schema-utils": "^4.0.0" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware/node_modules/memfs": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.13.0.tgz", + "integrity": "sha512-dIs5KGy24fbdDhIAg0RxXpFqQp3RwL6wgSMRF9OSuphL/Uc9a4u2/SDJKPLj/zUgtOGKuHrRMrj563+IErj4Cg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/json-pack": "^1.0.3", + "@jsonjoy.com/util": "^1.3.0", + "tree-dump": "^1.0.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">= 4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" } }, "node_modules/webpack-dev-middleware/node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -15459,6 +15851,7 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, "license": "MIT", "dependencies": { "mime-db": "1.52.0" @@ -15471,60 +15864,60 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/webpack-dev-server": { - "version": "4.15.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", - "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", - "license": "MIT", - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.5", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.1.0.tgz", + "integrity": "sha512-aQpaN81X6tXie1FoOB7xlMfCsN19pSvRAeYUHOdFWOlhpQ/LlbfTqYwwmEDFV0h8GGuqmCmKmT+pxcUV/Nt2gQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/bonjour": "^3.5.13", + "@types/connect-history-api-fallback": "^1.5.4", + "@types/express": "^4.17.21", + "@types/serve-index": "^1.9.4", + "@types/serve-static": "^1.15.5", + "@types/sockjs": "^0.3.36", + "@types/ws": "^8.5.10", "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", + "bonjour-service": "^1.2.1", + "chokidar": "^3.6.0", "colorette": "^2.0.10", "compression": "^1.7.4", "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", + "express": "^4.19.2", "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", + "html-entities": "^2.4.0", "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", + "ipaddr.js": "^2.1.0", + "launch-editor": "^2.6.1", + "open": "^10.0.3", + "p-retry": "^6.2.0", + "schema-utils": "^4.2.0", + "selfsigned": "^2.4.1", "serve-index": "^1.9.1", "sockjs": "^0.3.24", "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.4", - "ws": "^8.13.0" + "webpack-dev-middleware": "^7.4.2", + "ws": "^8.18.0" }, "bin": { "webpack-dev-server": "bin/webpack-dev-server.js" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" + "webpack": "^5.0.0" }, "peerDependenciesMeta": { "webpack": { @@ -15535,10 +15928,59 @@ } } }, + "node_modules/webpack-dev-server/node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webpack-dev-server/node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webpack-dev-server/node_modules/open": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", + "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/webpack-dev-server/node_modules/ws": { "version": "8.18.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "dev": true, "license": "MIT", "engines": { "node": ">=10.0.0" diff --git a/docs/package.json b/docs/package.json index ab944fbc..35e5dcda 100644 --- a/docs/package.json +++ b/docs/package.json @@ -33,7 +33,9 @@ }, "devDependencies": { "@docusaurus/module-type-aliases": "3.5.2", - "@docusaurus/types": "3.5.2" + "@docusaurus/types": "3.5.2", + "express": "^4.21.1", + "webpack-dev-server": "^5.1.0" }, "browserslist": { "production": [