New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

cds-feature-toggle

Package Overview
Dependencies
Maintainers
1
Versions
7
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

cds-feature-toggle

support feature toggle pattern for SAP CAP

0.0.6
latest
npm
Version published
Weekly downloads
0
-100%
Maintainers
1
Weekly downloads
 
Created
Source

cds feature toggle

support feature toggle pattern for SAP CAP cds

node-test npm codecov license

Quick Overview

// all event/entity/action/function require 'class-service' feature
@cds.features.required : ['class-service'] 
service ClassService {

  // annotate the entity built-in events
  @cds.features : [
    {
      on       : 'DELETE',
      required : 'feat-student-delete' // generally, maybe we dis-allowed user to delete entry
    }
    // other event will skip feature check
  ]
  entity Students               as projection on training.Student;

  // or simply require feature for all events/action/function under the entity
  @cds.features.required: 'feat-teacher-management'
  entity Teachers  as projection on training.Teacher;

  // enabled by default
  // if 'metricV2' or 'metricV3' is enabled, 
  // will prefer to trigger the redirect action
  @cds.features.redirect.target : [metricV2]
  action metric() returns MetricResponse;

  // enabled when request context has the feature 'feature-metrics-v2'
  @cds.features.required         : 'feature-metrics-v2'
  action metricV2() returns MetricResponse;


}

Setup

you need to enable the cds-feature-toggle by cds-hyper-app-service extension config

npm i -S cds-hyper-app-service cds-feature-toggle
{
  "cds": {
    "requires": {
      "app-service": {
        "impl": "cds-hyper-app-service",
        "exts": [
          "builtIn",
          {
            "impl": "cds-feature-toggle",
            "providers": [
              {
                "impl": "CDSRequestProvider",
                "header": "x-cds-features"
              }
            ]
          }
        ]
      }
    }
  }
}

Providers

cds-feature-toggle provided a very simple provider which named CDSRequestProvider, it will extract http header x-cds-features as feature labels.

export class CDSRequestProvider implements FeatureProvider {
  #headerName = HEADER_X_CDS_FEATURES_NAME;
  /**
   * extract http header as (enabled) feature list for current request
   * 
   * @param options.featureHeaderName default is `x-cds-features`
   */
  constructor(options: { featureHeaderName?: string }) {
    if (typeof options?.featureHeaderName === "string") {
      this.#headerName = options?.featureHeaderName;
    }
  }
  public getFeatures(context: DetermineContext) {
    // TODO: add signature verify
    return Promise.resolve(context?.request?.get?.(this.#headerName)?.split(",") ?? []);
  }
}

you can easily implement a feature provider by yourself, read feature from redis or database, it depends on you.

TODO

  • support redirect for bounded action/function
  • support @cds.features.required on full entity
  • built-in provider interface
    • cds request header provider
    • dummy provider for test
  • support cds-nats KV

Limitation

  • the default no handler behavior for action/function will be little difference

CHANGELOG

LICENSE

Keywords

CAP

FAQs

Package last updated on 09 Jun 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts