Repository files navigation

dvelop-sdk-node

GitHub

Apps

npm (scoped)npm (scoped)npm (scoped)npm (scoped)npm (scoped)

Utilities

npm (scoped)npm (scoped)

Explore the docs »

Explore on npm »


About

This is the official SDK to build apps for d.velop cloud using node.js and typescript.

Getting started

This SDK is diveded into apps. Install individual packages per d-velop app you want to use.

npm i @dvelop-sdk/dms
import{Repository,getRepository}from"@dvelop-sdk/dms";(asyncfunctionmain(){constrepo: Repository=awaitgetRepository({systemBaseUri: "https://steamwheedle-cartel.d-velop.cloud",authSessionId: "dQw4w9WgXcQ"},{repositoryId: "qnydFmqHuVo",});console.log(repo.name);// Booty Bay Documents})();
npm i @dvelop-sdk/task
import{createTask}from"@dvelop-sdk/task";(asyncfunctionmain(){consttaskLocation=awaitcreateTask({systemBaseUri: "https://umbrella-corp.d-velop.cloud",authSessionId: "dQw4w9WgXcQ"},{subject: "Cover up lab accident",assignees: ["XiFkyR35v2Y"]});console.log(taskLocation);// some/task/location})();

You can also run them in ES6 javascript without typescript:

npm i @dvelop-sdk/dms
//package.json
{
"type":"module"
}
//main.jsimport{Repository,getRepository}from"@dvelop-sdk/dms";asyncfunctionmain(){constrepo=awaitgetRepository({systemBaseUri: "https://steamwheedle-cartel.d-velop.cloud",authSessionId: "dQw4w9WgXcQ"},{repositoryId: "qnydFmqHuVo",});console.log(repo.name);// Booty Bay Documents}awaitmain();

Build a d.velop app in no time with express

This SDK was designed framework agnostic but with express in mind.

Install dependencies:

npm i express cookie-parser @dvelop-sdk/express-utils
npm i typescript @types/express @types/cookie-parser -D

Be sure to set the esModuleInterop-flag for typescript:

//tsconfig.json
{
"compilerOptions": {
"esModuleInterop": true,
// ...
}
}

Set up your app:

importexpress,{Application,NextFunction,Request,Response}from"express"importcookieParserfrom"cookie-parser";import{authenticationMiddleware,contextMiddleware,validateSignatureMiddlewareFactory,InvalidRequestSignatureError,UnauthorizedError,redirectToLoginPage}from"@dvelop-sdk/express-utils";constapp: Application=express();constappName: string="acme-myapp";constappPort: number=5000;app.use(cookieParser());app.use(contextMiddleware);// Make the req.dvelopContext-property availableapp.use(validateSignatureMiddlewareFactory(process.env.APP_SECRET));// Check the d.velop signature.app.get(`/${appName}/me`,authenticationMiddleware,(req: Request,res: Response)=>{res.status(200).send(`<h1>Hello ${req.dvelopContext.user.displayName}</h1>`);});app.get(`/${appName}`,(req: Request,res: Response)=>{res.status(200).send(`<h1>Hello Tenant ${req.dvelopContext.systemBaseUri} (${req.dvelopContext.tenantId})</h1>`);});app.use((err: any,req: Request,res: Response,_: NextFunction)=>{if(errinstanceofInvalidRequestSignatureError){res.status(403).send("Forbidden");// Indicates a problem with the App-Secret}elseif(errinstanceofUnauthorizedError){redirectToLoginPage(req,res);// Not authenticated => send to IDP login-page}else{console.log(err);res.status(500).send("Internal Server Error");}});app.listen(appPort,()=>{console.log(`D.velop app listening on port ${appPort} ...`);});

Don't forget to set your APP_SECRET and then start your app:

npx tsc && node src/main.js

The req.dvelopContext-property can now be used for other SDK-functions.


Advanced Topics

Every SDK method accepts an optional third parameter options of type DvelopOptions. This lets you customize the HTTP request or intercept the raw response — without needing to understand factory functions or internal abstractions.

import{DvelopOptions}from"@dvelop-sdk/core";

Timeout

import{getRepository}from"@dvelop-sdk/dms";constrepo=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{initOverwrite: {signal: AbortSignal.timeout(5000)}});

Disable TLS verification (Node.js 18+, plain JavaScript only)

Pass an undici dispatcher via initOverwrite. TypeScript will flag the unknown property — use plain JavaScript or a type cast:

import{Agent}from"undici";import{getRepository}from"@dvelop-sdk/dms";constrepo=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{initOverwrite: {dispatcher: newAgent({connect: {rejectUnauthorized: false}})}});

Add extra headers

constrepo=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{initOverwrite: {headers: {"x-my-header": "value"}}});

Access the raw response

Use onResponse to intercept or replace the default JSON transform. Return a value to use it as the method's result; return undefined (or nothing) to let the default transform run.

// Replace the result with raw JSONconstraw=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{onResponse: async(response)=>response.json()});// Log a header without replacing the resultconstrepo=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{onResponse: (response)=>{console.log("ETag:",response.headers.get("etag"));// returns undefined → default transform still runs}});

All HTTP is handled by dvelopFetch from the @dvelop-sdk/core package, which sets the standard d.velop headers (Authorization, x-dv-request-id, traceparent) and calls the built-in Node.js fetch.

Contributing

This project is maintained by d-velop but is looking for contributers. If you consider contributing to this project please read CONTRIBUTING for details on how to get started.

License

Please read LICENSE for licensing information.

Acknowledgments

Thanks to the following projects for inspiration

About

Official SDK to build Apps for d.velop cloud

Resources

Contributing

Stars

14 stars

Watchers

7 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all \u003cpre\u003e\u003ccode\u003e blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks"); } } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); } })(); (function(){ try { var __m = "github.com"; var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

dvelop-sdk-node

GitHub

Apps

npm (scoped)npm (scoped)npm (scoped)npm (scoped)npm (scoped)

Utilities

npm (scoped)npm (scoped)

Explore the docs »

Explore on npm »


About

This is the official SDK to build apps for d.velop cloud using node.js and typescript.

Getting started

This SDK is diveded into apps. Install individual packages per d-velop app you want to use.

npm i @dvelop-sdk/dms
import{Repository,getRepository}from"@dvelop-sdk/dms";(asyncfunctionmain(){constrepo: Repository=awaitgetRepository({systemBaseUri: "https://steamwheedle-cartel.d-velop.cloud",authSessionId: "dQw4w9WgXcQ"},{repositoryId: "qnydFmqHuVo",});console.log(repo.name);// Booty Bay Documents})();
npm i @dvelop-sdk/task
import{createTask}from"@dvelop-sdk/task";(asyncfunctionmain(){consttaskLocation=awaitcreateTask({systemBaseUri: "https://umbrella-corp.d-velop.cloud",authSessionId: "dQw4w9WgXcQ"},{subject: "Cover up lab accident",assignees: ["XiFkyR35v2Y"]});console.log(taskLocation);// some/task/location})();

You can also run them in ES6 javascript without typescript:

npm i @dvelop-sdk/dms
//package.json
{
"type":"module"
}
//main.jsimport{Repository,getRepository}from"@dvelop-sdk/dms";asyncfunctionmain(){constrepo=awaitgetRepository({systemBaseUri: "https://steamwheedle-cartel.d-velop.cloud",authSessionId: "dQw4w9WgXcQ"},{repositoryId: "qnydFmqHuVo",});console.log(repo.name);// Booty Bay Documents}awaitmain();

Build a d.velop app in no time with express

This SDK was designed framework agnostic but with express in mind.

Install dependencies:

npm i express cookie-parser @dvelop-sdk/express-utils
npm i typescript @types/express @types/cookie-parser -D

Be sure to set the esModuleInterop-flag for typescript:

//tsconfig.json
{
"compilerOptions": {
"esModuleInterop": true,
// ...
}
}

Set up your app:

importexpress,{Application,NextFunction,Request,Response}from"express"importcookieParserfrom"cookie-parser";import{authenticationMiddleware,contextMiddleware,validateSignatureMiddlewareFactory,InvalidRequestSignatureError,UnauthorizedError,redirectToLoginPage}from"@dvelop-sdk/express-utils";constapp: Application=express();constappName: string="acme-myapp";constappPort: number=5000;app.use(cookieParser());app.use(contextMiddleware);// Make the req.dvelopContext-property availableapp.use(validateSignatureMiddlewareFactory(process.env.APP_SECRET));// Check the d.velop signature.app.get(`/${appName}/me`,authenticationMiddleware,(req: Request,res: Response)=>{res.status(200).send(`<h1>Hello ${req.dvelopContext.user.displayName}</h1>`);});app.get(`/${appName}`,(req: Request,res: Response)=>{res.status(200).send(`<h1>Hello Tenant ${req.dvelopContext.systemBaseUri} (${req.dvelopContext.tenantId})</h1>`);});app.use((err: any,req: Request,res: Response,_: NextFunction)=>{if(errinstanceofInvalidRequestSignatureError){res.status(403).send("Forbidden");// Indicates a problem with the App-Secret}elseif(errinstanceofUnauthorizedError){redirectToLoginPage(req,res);// Not authenticated => send to IDP login-page}else{console.log(err);res.status(500).send("Internal Server Error");}});app.listen(appPort,()=>{console.log(`D.velop app listening on port ${appPort} ...`);});

Don't forget to set your APP_SECRET and then start your app:

npx tsc && node src/main.js

The req.dvelopContext-property can now be used for other SDK-functions.


Advanced Topics

Every SDK method accepts an optional third parameter options of type DvelopOptions. This lets you customize the HTTP request or intercept the raw response — without needing to understand factory functions or internal abstractions.

import{DvelopOptions}from"@dvelop-sdk/core";

Timeout

import{getRepository}from"@dvelop-sdk/dms";constrepo=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{initOverwrite: {signal: AbortSignal.timeout(5000)}});

Disable TLS verification (Node.js 18+, plain JavaScript only)

Pass an undici dispatcher via initOverwrite. TypeScript will flag the unknown property — use plain JavaScript or a type cast:

import{Agent}from"undici";import{getRepository}from"@dvelop-sdk/dms";constrepo=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{initOverwrite: {dispatcher: newAgent({connect: {rejectUnauthorized: false}})}});

Add extra headers

constrepo=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{initOverwrite: {headers: {"x-my-header": "value"}}});

Access the raw response

Use onResponse to intercept or replace the default JSON transform. Return a value to use it as the method's result; return undefined (or nothing) to let the default transform run.

// Replace the result with raw JSONconstraw=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{onResponse: async(response)=>response.json()});// Log a header without replacing the resultconstrepo=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{onResponse: (response)=>{console.log("ETag:",response.headers.get("etag"));// returns undefined → default transform still runs}});

All HTTP is handled by dvelopFetch from the @dvelop-sdk/core package, which sets the standard d.velop headers (Authorization, x-dv-request-id, traceparent) and calls the built-in Node.js fetch.

Contributing

This project is maintained by d-velop but is looking for contributers. If you consider contributing to this project please read CONTRIBUTING for details on how to get started.

License

Please read LICENSE for licensing information.

Acknowledgments

Thanks to the following projects for inspiration

About

Official SDK to build Apps for d.velop cloud

Resources

Contributing

Stars

14 stars

Watchers

7 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

dvelop-sdk-node

GitHub

Apps

npm (scoped)npm (scoped)npm (scoped)npm (scoped)npm (scoped)

Utilities

npm (scoped)npm (scoped)

Explore the docs »

Explore on npm »


About

This is the official SDK to build apps for d.velop cloud using node.js and typescript.

Getting started

This SDK is diveded into apps. Install individual packages per d-velop app you want to use.

npm i @dvelop-sdk/dms
import{Repository,getRepository}from"@dvelop-sdk/dms";(asyncfunctionmain(){constrepo: Repository=awaitgetRepository({systemBaseUri: "https://steamwheedle-cartel.d-velop.cloud",authSessionId: "dQw4w9WgXcQ"},{repositoryId: "qnydFmqHuVo",});console.log(repo.name);// Booty Bay Documents})();
npm i @dvelop-sdk/task
import{createTask}from"@dvelop-sdk/task";(asyncfunctionmain(){consttaskLocation=awaitcreateTask({systemBaseUri: "https://umbrella-corp.d-velop.cloud",authSessionId: "dQw4w9WgXcQ"},{subject: "Cover up lab accident",assignees: ["XiFkyR35v2Y"]});console.log(taskLocation);// some/task/location})();

You can also run them in ES6 javascript without typescript:

npm i @dvelop-sdk/dms
//package.json
{
"type":"module"
}
//main.jsimport{Repository,getRepository}from"@dvelop-sdk/dms";asyncfunctionmain(){constrepo=awaitgetRepository({systemBaseUri: "https://steamwheedle-cartel.d-velop.cloud",authSessionId: "dQw4w9WgXcQ"},{repositoryId: "qnydFmqHuVo",});console.log(repo.name);// Booty Bay Documents}awaitmain();

Build a d.velop app in no time with express

This SDK was designed framework agnostic but with express in mind.

Install dependencies:

npm i express cookie-parser @dvelop-sdk/express-utils
npm i typescript @types/express @types/cookie-parser -D

Be sure to set the esModuleInterop-flag for typescript:

//tsconfig.json
{
"compilerOptions": {
"esModuleInterop": true,
// ...
}
}

Set up your app:

importexpress,{Application,NextFunction,Request,Response}from"express"importcookieParserfrom"cookie-parser";import{authenticationMiddleware,contextMiddleware,validateSignatureMiddlewareFactory,InvalidRequestSignatureError,UnauthorizedError,redirectToLoginPage}from"@dvelop-sdk/express-utils";constapp: Application=express();constappName: string="acme-myapp";constappPort: number=5000;app.use(cookieParser());app.use(contextMiddleware);// Make the req.dvelopContext-property availableapp.use(validateSignatureMiddlewareFactory(process.env.APP_SECRET));// Check the d.velop signature.app.get(`/${appName}/me`,authenticationMiddleware,(req: Request,res: Response)=>{res.status(200).send(`<h1>Hello ${req.dvelopContext.user.displayName}</h1>`);});app.get(`/${appName}`,(req: Request,res: Response)=>{res.status(200).send(`<h1>Hello Tenant ${req.dvelopContext.systemBaseUri} (${req.dvelopContext.tenantId})</h1>`);});app.use((err: any,req: Request,res: Response,_: NextFunction)=>{if(errinstanceofInvalidRequestSignatureError){res.status(403).send("Forbidden");// Indicates a problem with the App-Secret}elseif(errinstanceofUnauthorizedError){redirectToLoginPage(req,res);// Not authenticated => send to IDP login-page}else{console.log(err);res.status(500).send("Internal Server Error");}});app.listen(appPort,()=>{console.log(`D.velop app listening on port ${appPort} ...`);});

Don't forget to set your APP_SECRET and then start your app:

npx tsc && node src/main.js

The req.dvelopContext-property can now be used for other SDK-functions.


Advanced Topics

Every SDK method accepts an optional third parameter options of type DvelopOptions. This lets you customize the HTTP request or intercept the raw response — without needing to understand factory functions or internal abstractions.

import{DvelopOptions}from"@dvelop-sdk/core";

Timeout

import{getRepository}from"@dvelop-sdk/dms";constrepo=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{initOverwrite: {signal: AbortSignal.timeout(5000)}});

Disable TLS verification (Node.js 18+, plain JavaScript only)

Pass an undici dispatcher via initOverwrite. TypeScript will flag the unknown property — use plain JavaScript or a type cast:

import{Agent}from"undici";import{getRepository}from"@dvelop-sdk/dms";constrepo=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{initOverwrite: {dispatcher: newAgent({connect: {rejectUnauthorized: false}})}});

Add extra headers

constrepo=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{initOverwrite: {headers: {"x-my-header": "value"}}});

Access the raw response

Use onResponse to intercept or replace the default JSON transform. Return a value to use it as the method's result; return undefined (or nothing) to let the default transform run.

// Replace the result with raw JSONconstraw=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{onResponse: async(response)=>response.json()});// Log a header without replacing the resultconstrepo=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{onResponse: (response)=>{console.log("ETag:",response.headers.get("etag"));// returns undefined → default transform still runs}});

All HTTP is handled by dvelopFetch from the @dvelop-sdk/core package, which sets the standard d.velop headers (Authorization, x-dv-request-id, traceparent) and calls the built-in Node.js fetch.

Contributing

This project is maintained by d-velop but is looking for contributers. If you consider contributing to this project please read CONTRIBUTING for details on how to get started.

License

Please read LICENSE for licensing information.

Acknowledgments

Thanks to the following projects for inspiration

About

Official SDK to build Apps for d.velop cloud

Resources

Contributing

Stars

14 stars

Watchers

7 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length \u003e 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

dvelop-sdk-node

GitHub

Apps

npm (scoped)npm (scoped)npm (scoped)npm (scoped)npm (scoped)

Utilities

npm (scoped)npm (scoped)

Explore the docs »

Explore on npm »


About

This is the official SDK to build apps for d.velop cloud using node.js and typescript.

Getting started

This SDK is diveded into apps. Install individual packages per d-velop app you want to use.

npm i @dvelop-sdk/dms
import{Repository,getRepository}from"@dvelop-sdk/dms";(asyncfunctionmain(){constrepo: Repository=awaitgetRepository({systemBaseUri: "https://steamwheedle-cartel.d-velop.cloud",authSessionId: "dQw4w9WgXcQ"},{repositoryId: "qnydFmqHuVo",});console.log(repo.name);// Booty Bay Documents})();
npm i @dvelop-sdk/task
import{createTask}from"@dvelop-sdk/task";(asyncfunctionmain(){consttaskLocation=awaitcreateTask({systemBaseUri: "https://umbrella-corp.d-velop.cloud",authSessionId: "dQw4w9WgXcQ"},{subject: "Cover up lab accident",assignees: ["XiFkyR35v2Y"]});console.log(taskLocation);// some/task/location})();

You can also run them in ES6 javascript without typescript:

npm i @dvelop-sdk/dms
//package.json
{
"type":"module"
}
//main.jsimport{Repository,getRepository}from"@dvelop-sdk/dms";asyncfunctionmain(){constrepo=awaitgetRepository({systemBaseUri: "https://steamwheedle-cartel.d-velop.cloud",authSessionId: "dQw4w9WgXcQ"},{repositoryId: "qnydFmqHuVo",});console.log(repo.name);// Booty Bay Documents}awaitmain();

Build a d.velop app in no time with express

This SDK was designed framework agnostic but with express in mind.

Install dependencies:

npm i express cookie-parser @dvelop-sdk/express-utils
npm i typescript @types/express @types/cookie-parser -D

Be sure to set the esModuleInterop-flag for typescript:

//tsconfig.json
{
"compilerOptions": {
"esModuleInterop": true,
// ...
}
}

Set up your app:

importexpress,{Application,NextFunction,Request,Response}from"express"importcookieParserfrom"cookie-parser";import{authenticationMiddleware,contextMiddleware,validateSignatureMiddlewareFactory,InvalidRequestSignatureError,UnauthorizedError,redirectToLoginPage}from"@dvelop-sdk/express-utils";constapp: Application=express();constappName: string="acme-myapp";constappPort: number=5000;app.use(cookieParser());app.use(contextMiddleware);// Make the req.dvelopContext-property availableapp.use(validateSignatureMiddlewareFactory(process.env.APP_SECRET));// Check the d.velop signature.app.get(`/${appName}/me`,authenticationMiddleware,(req: Request,res: Response)=>{res.status(200).send(`<h1>Hello ${req.dvelopContext.user.displayName}</h1>`);});app.get(`/${appName}`,(req: Request,res: Response)=>{res.status(200).send(`<h1>Hello Tenant ${req.dvelopContext.systemBaseUri} (${req.dvelopContext.tenantId})</h1>`);});app.use((err: any,req: Request,res: Response,_: NextFunction)=>{if(errinstanceofInvalidRequestSignatureError){res.status(403).send("Forbidden");// Indicates a problem with the App-Secret}elseif(errinstanceofUnauthorizedError){redirectToLoginPage(req,res);// Not authenticated => send to IDP login-page}else{console.log(err);res.status(500).send("Internal Server Error");}});app.listen(appPort,()=>{console.log(`D.velop app listening on port ${appPort} ...`);});

Don't forget to set your APP_SECRET and then start your app:

npx tsc && node src/main.js

The req.dvelopContext-property can now be used for other SDK-functions.


Advanced Topics

Every SDK method accepts an optional third parameter options of type DvelopOptions. This lets you customize the HTTP request or intercept the raw response — without needing to understand factory functions or internal abstractions.

import{DvelopOptions}from"@dvelop-sdk/core";

Timeout

import{getRepository}from"@dvelop-sdk/dms";constrepo=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{initOverwrite: {signal: AbortSignal.timeout(5000)}});

Disable TLS verification (Node.js 18+, plain JavaScript only)

Pass an undici dispatcher via initOverwrite. TypeScript will flag the unknown property — use plain JavaScript or a type cast:

import{Agent}from"undici";import{getRepository}from"@dvelop-sdk/dms";constrepo=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{initOverwrite: {dispatcher: newAgent({connect: {rejectUnauthorized: false}})}});

Add extra headers

constrepo=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{initOverwrite: {headers: {"x-my-header": "value"}}});

Access the raw response

Use onResponse to intercept or replace the default JSON transform. Return a value to use it as the method's result; return undefined (or nothing) to let the default transform run.

// Replace the result with raw JSONconstraw=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{onResponse: async(response)=>response.json()});// Log a header without replacing the resultconstrepo=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{onResponse: (response)=>{console.log("ETag:",response.headers.get("etag"));// returns undefined → default transform still runs}});

All HTTP is handled by dvelopFetch from the @dvelop-sdk/core package, which sets the standard d.velop headers (Authorization, x-dv-request-id, traceparent) and calls the built-in Node.js fetch.

Contributing

This project is maintained by d-velop but is looking for contributers. If you consider contributing to this project please read CONTRIBUTING for details on how to get started.

License

Please read LICENSE for licensing information.

Acknowledgments

Thanks to the following projects for inspiration

About

Official SDK to build Apps for d.velop cloud

Resources

Contributing

Stars

14 stars

Watchers

7 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

dvelop-sdk-node

GitHub

Apps

npm (scoped)npm (scoped)npm (scoped)npm (scoped)npm (scoped)

Utilities

npm (scoped)npm (scoped)

Explore the docs »

Explore on npm »


About

This is the official SDK to build apps for d.velop cloud using node.js and typescript.

Getting started

This SDK is diveded into apps. Install individual packages per d-velop app you want to use.

npm i @dvelop-sdk/dms
import{Repository,getRepository}from"@dvelop-sdk/dms";(asyncfunctionmain(){constrepo: Repository=awaitgetRepository({systemBaseUri: "https://steamwheedle-cartel.d-velop.cloud",authSessionId: "dQw4w9WgXcQ"},{repositoryId: "qnydFmqHuVo",});console.log(repo.name);// Booty Bay Documents})();
npm i @dvelop-sdk/task
import{createTask}from"@dvelop-sdk/task";(asyncfunctionmain(){consttaskLocation=awaitcreateTask({systemBaseUri: "https://umbrella-corp.d-velop.cloud",authSessionId: "dQw4w9WgXcQ"},{subject: "Cover up lab accident",assignees: ["XiFkyR35v2Y"]});console.log(taskLocation);// some/task/location})();

You can also run them in ES6 javascript without typescript:

npm i @dvelop-sdk/dms
//package.json
{
"type":"module"
}
//main.jsimport{Repository,getRepository}from"@dvelop-sdk/dms";asyncfunctionmain(){constrepo=awaitgetRepository({systemBaseUri: "https://steamwheedle-cartel.d-velop.cloud",authSessionId: "dQw4w9WgXcQ"},{repositoryId: "qnydFmqHuVo",});console.log(repo.name);// Booty Bay Documents}awaitmain();

Build a d.velop app in no time with express

This SDK was designed framework agnostic but with express in mind.

Install dependencies:

npm i express cookie-parser @dvelop-sdk/express-utils
npm i typescript @types/express @types/cookie-parser -D

Be sure to set the esModuleInterop-flag for typescript:

//tsconfig.json
{
"compilerOptions": {
"esModuleInterop": true,
// ...
}
}

Set up your app:

importexpress,{Application,NextFunction,Request,Response}from"express"importcookieParserfrom"cookie-parser";import{authenticationMiddleware,contextMiddleware,validateSignatureMiddlewareFactory,InvalidRequestSignatureError,UnauthorizedError,redirectToLoginPage}from"@dvelop-sdk/express-utils";constapp: Application=express();constappName: string="acme-myapp";constappPort: number=5000;app.use(cookieParser());app.use(contextMiddleware);// Make the req.dvelopContext-property availableapp.use(validateSignatureMiddlewareFactory(process.env.APP_SECRET));// Check the d.velop signature.app.get(`/${appName}/me`,authenticationMiddleware,(req: Request,res: Response)=>{res.status(200).send(`<h1>Hello ${req.dvelopContext.user.displayName}</h1>`);});app.get(`/${appName}`,(req: Request,res: Response)=>{res.status(200).send(`<h1>Hello Tenant ${req.dvelopContext.systemBaseUri} (${req.dvelopContext.tenantId})</h1>`);});app.use((err: any,req: Request,res: Response,_: NextFunction)=>{if(errinstanceofInvalidRequestSignatureError){res.status(403).send("Forbidden");// Indicates a problem with the App-Secret}elseif(errinstanceofUnauthorizedError){redirectToLoginPage(req,res);// Not authenticated => send to IDP login-page}else{console.log(err);res.status(500).send("Internal Server Error");}});app.listen(appPort,()=>{console.log(`D.velop app listening on port ${appPort} ...`);});

Don't forget to set your APP_SECRET and then start your app:

npx tsc && node src/main.js

The req.dvelopContext-property can now be used for other SDK-functions.


Advanced Topics

Every SDK method accepts an optional third parameter options of type DvelopOptions. This lets you customize the HTTP request or intercept the raw response — without needing to understand factory functions or internal abstractions.

import{DvelopOptions}from"@dvelop-sdk/core";

Timeout

import{getRepository}from"@dvelop-sdk/dms";constrepo=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{initOverwrite: {signal: AbortSignal.timeout(5000)}});

Disable TLS verification (Node.js 18+, plain JavaScript only)

Pass an undici dispatcher via initOverwrite. TypeScript will flag the unknown property — use plain JavaScript or a type cast:

import{Agent}from"undici";import{getRepository}from"@dvelop-sdk/dms";constrepo=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{initOverwrite: {dispatcher: newAgent({connect: {rejectUnauthorized: false}})}});

Add extra headers

constrepo=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{initOverwrite: {headers: {"x-my-header": "value"}}});

Access the raw response

Use onResponse to intercept or replace the default JSON transform. Return a value to use it as the method's result; return undefined (or nothing) to let the default transform run.

// Replace the result with raw JSONconstraw=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{onResponse: async(response)=>response.json()});// Log a header without replacing the resultconstrepo=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{onResponse: (response)=>{console.log("ETag:",response.headers.get("etag"));// returns undefined → default transform still runs}});

All HTTP is handled by dvelopFetch from the @dvelop-sdk/core package, which sets the standard d.velop headers (Authorization, x-dv-request-id, traceparent) and calls the built-in Node.js fetch.

Contributing

This project is maintained by d-velop but is looking for contributers. If you consider contributing to this project please read CONTRIBUTING for details on how to get started.

License

Please read LICENSE for licensing information.

Acknowledgments

Thanks to the following projects for inspiration

About

Official SDK to build Apps for d.velop cloud

Resources

Contributing

Stars

14 stars

Watchers

7 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

dvelop-sdk-node

GitHub

Apps

npm (scoped)npm (scoped)npm (scoped)npm (scoped)npm (scoped)

Utilities

npm (scoped)npm (scoped)

Explore the docs »

Explore on npm »


About

This is the official SDK to build apps for d.velop cloud using node.js and typescript.

Getting started

This SDK is diveded into apps. Install individual packages per d-velop app you want to use.

npm i @dvelop-sdk/dms
import{Repository,getRepository}from"@dvelop-sdk/dms";(asyncfunctionmain(){constrepo: Repository=awaitgetRepository({systemBaseUri: "https://steamwheedle-cartel.d-velop.cloud",authSessionId: "dQw4w9WgXcQ"},{repositoryId: "qnydFmqHuVo",});console.log(repo.name);// Booty Bay Documents})();
npm i @dvelop-sdk/task
import{createTask}from"@dvelop-sdk/task";(asyncfunctionmain(){consttaskLocation=awaitcreateTask({systemBaseUri: "https://umbrella-corp.d-velop.cloud",authSessionId: "dQw4w9WgXcQ"},{subject: "Cover up lab accident",assignees: ["XiFkyR35v2Y"]});console.log(taskLocation);// some/task/location})();

You can also run them in ES6 javascript without typescript:

npm i @dvelop-sdk/dms
//package.json
{
"type":"module"
}
//main.jsimport{Repository,getRepository}from"@dvelop-sdk/dms";asyncfunctionmain(){constrepo=awaitgetRepository({systemBaseUri: "https://steamwheedle-cartel.d-velop.cloud",authSessionId: "dQw4w9WgXcQ"},{repositoryId: "qnydFmqHuVo",});console.log(repo.name);// Booty Bay Documents}awaitmain();

Build a d.velop app in no time with express

This SDK was designed framework agnostic but with express in mind.

Install dependencies:

npm i express cookie-parser @dvelop-sdk/express-utils
npm i typescript @types/express @types/cookie-parser -D

Be sure to set the esModuleInterop-flag for typescript:

//tsconfig.json
{
"compilerOptions": {
"esModuleInterop": true,
// ...
}
}

Set up your app:

importexpress,{Application,NextFunction,Request,Response}from"express"importcookieParserfrom"cookie-parser";import{authenticationMiddleware,contextMiddleware,validateSignatureMiddlewareFactory,InvalidRequestSignatureError,UnauthorizedError,redirectToLoginPage}from"@dvelop-sdk/express-utils";constapp: Application=express();constappName: string="acme-myapp";constappPort: number=5000;app.use(cookieParser());app.use(contextMiddleware);// Make the req.dvelopContext-property availableapp.use(validateSignatureMiddlewareFactory(process.env.APP_SECRET));// Check the d.velop signature.app.get(`/${appName}/me`,authenticationMiddleware,(req: Request,res: Response)=>{res.status(200).send(`<h1>Hello ${req.dvelopContext.user.displayName}</h1>`);});app.get(`/${appName}`,(req: Request,res: Response)=>{res.status(200).send(`<h1>Hello Tenant ${req.dvelopContext.systemBaseUri} (${req.dvelopContext.tenantId})</h1>`);});app.use((err: any,req: Request,res: Response,_: NextFunction)=>{if(errinstanceofInvalidRequestSignatureError){res.status(403).send("Forbidden");// Indicates a problem with the App-Secret}elseif(errinstanceofUnauthorizedError){redirectToLoginPage(req,res);// Not authenticated => send to IDP login-page}else{console.log(err);res.status(500).send("Internal Server Error");}});app.listen(appPort,()=>{console.log(`D.velop app listening on port ${appPort} ...`);});

Don't forget to set your APP_SECRET and then start your app:

npx tsc && node src/main.js

The req.dvelopContext-property can now be used for other SDK-functions.


Advanced Topics

Every SDK method accepts an optional third parameter options of type DvelopOptions. This lets you customize the HTTP request or intercept the raw response — without needing to understand factory functions or internal abstractions.

import{DvelopOptions}from"@dvelop-sdk/core";

Timeout

import{getRepository}from"@dvelop-sdk/dms";constrepo=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{initOverwrite: {signal: AbortSignal.timeout(5000)}});

Disable TLS verification (Node.js 18+, plain JavaScript only)

Pass an undici dispatcher via initOverwrite. TypeScript will flag the unknown property — use plain JavaScript or a type cast:

import{Agent}from"undici";import{getRepository}from"@dvelop-sdk/dms";constrepo=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{initOverwrite: {dispatcher: newAgent({connect: {rejectUnauthorized: false}})}});

Add extra headers

constrepo=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{initOverwrite: {headers: {"x-my-header": "value"}}});

Access the raw response

Use onResponse to intercept or replace the default JSON transform. Return a value to use it as the method's result; return undefined (or nothing) to let the default transform run.

// Replace the result with raw JSONconstraw=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{onResponse: async(response)=>response.json()});// Log a header without replacing the resultconstrepo=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{onResponse: (response)=>{console.log("ETag:",response.headers.get("etag"));// returns undefined → default transform still runs}});

All HTTP is handled by dvelopFetch from the @dvelop-sdk/core package, which sets the standard d.velop headers (Authorization, x-dv-request-id, traceparent) and calls the built-in Node.js fetch.

Contributing

This project is maintained by d-velop but is looking for contributers. If you consider contributing to this project please read CONTRIBUTING for details on how to get started.

License

Please read LICENSE for licensing information.

Acknowledgments

Thanks to the following projects for inspiration

About

Official SDK to build Apps for d.velop cloud

Resources

Contributing

Stars

14 stars

Watchers

7 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

dvelop-sdk-node

GitHub

Apps

npm (scoped)npm (scoped)npm (scoped)npm (scoped)npm (scoped)

Utilities

npm (scoped)npm (scoped)

Explore the docs »

Explore on npm »


About

This is the official SDK to build apps for d.velop cloud using node.js and typescript.

Getting started

This SDK is diveded into apps. Install individual packages per d-velop app you want to use.

npm i @dvelop-sdk/dms
import{Repository,getRepository}from"@dvelop-sdk/dms";(asyncfunctionmain(){constrepo: Repository=awaitgetRepository({systemBaseUri: "https://steamwheedle-cartel.d-velop.cloud",authSessionId: "dQw4w9WgXcQ"},{repositoryId: "qnydFmqHuVo",});console.log(repo.name);// Booty Bay Documents})();
npm i @dvelop-sdk/task
import{createTask}from"@dvelop-sdk/task";(asyncfunctionmain(){consttaskLocation=awaitcreateTask({systemBaseUri: "https://umbrella-corp.d-velop.cloud",authSessionId: "dQw4w9WgXcQ"},{subject: "Cover up lab accident",assignees: ["XiFkyR35v2Y"]});console.log(taskLocation);// some/task/location})();

You can also run them in ES6 javascript without typescript:

npm i @dvelop-sdk/dms
//package.json
{
"type":"module"
}
//main.jsimport{Repository,getRepository}from"@dvelop-sdk/dms";asyncfunctionmain(){constrepo=awaitgetRepository({systemBaseUri: "https://steamwheedle-cartel.d-velop.cloud",authSessionId: "dQw4w9WgXcQ"},{repositoryId: "qnydFmqHuVo",});console.log(repo.name);// Booty Bay Documents}awaitmain();

Build a d.velop app in no time with express

This SDK was designed framework agnostic but with express in mind.

Install dependencies:

npm i express cookie-parser @dvelop-sdk/express-utils
npm i typescript @types/express @types/cookie-parser -D

Be sure to set the esModuleInterop-flag for typescript:

//tsconfig.json
{
"compilerOptions": {
"esModuleInterop": true,
// ...
}
}

Set up your app:

importexpress,{Application,NextFunction,Request,Response}from"express"importcookieParserfrom"cookie-parser";import{authenticationMiddleware,contextMiddleware,validateSignatureMiddlewareFactory,InvalidRequestSignatureError,UnauthorizedError,redirectToLoginPage}from"@dvelop-sdk/express-utils";constapp: Application=express();constappName: string="acme-myapp";constappPort: number=5000;app.use(cookieParser());app.use(contextMiddleware);// Make the req.dvelopContext-property availableapp.use(validateSignatureMiddlewareFactory(process.env.APP_SECRET));// Check the d.velop signature.app.get(`/${appName}/me`,authenticationMiddleware,(req: Request,res: Response)=>{res.status(200).send(`<h1>Hello ${req.dvelopContext.user.displayName}</h1>`);});app.get(`/${appName}`,(req: Request,res: Response)=>{res.status(200).send(`<h1>Hello Tenant ${req.dvelopContext.systemBaseUri} (${req.dvelopContext.tenantId})</h1>`);});app.use((err: any,req: Request,res: Response,_: NextFunction)=>{if(errinstanceofInvalidRequestSignatureError){res.status(403).send("Forbidden");// Indicates a problem with the App-Secret}elseif(errinstanceofUnauthorizedError){redirectToLoginPage(req,res);// Not authenticated => send to IDP login-page}else{console.log(err);res.status(500).send("Internal Server Error");}});app.listen(appPort,()=>{console.log(`D.velop app listening on port ${appPort} ...`);});

Don't forget to set your APP_SECRET and then start your app:

npx tsc && node src/main.js

The req.dvelopContext-property can now be used for other SDK-functions.


Advanced Topics

Every SDK method accepts an optional third parameter options of type DvelopOptions. This lets you customize the HTTP request or intercept the raw response — without needing to understand factory functions or internal abstractions.

import{DvelopOptions}from"@dvelop-sdk/core";

Timeout

import{getRepository}from"@dvelop-sdk/dms";constrepo=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{initOverwrite: {signal: AbortSignal.timeout(5000)}});

Disable TLS verification (Node.js 18+, plain JavaScript only)

Pass an undici dispatcher via initOverwrite. TypeScript will flag the unknown property — use plain JavaScript or a type cast:

import{Agent}from"undici";import{getRepository}from"@dvelop-sdk/dms";constrepo=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{initOverwrite: {dispatcher: newAgent({connect: {rejectUnauthorized: false}})}});

Add extra headers

constrepo=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{initOverwrite: {headers: {"x-my-header": "value"}}});

Access the raw response

Use onResponse to intercept or replace the default JSON transform. Return a value to use it as the method's result; return undefined (or nothing) to let the default transform run.

// Replace the result with raw JSONconstraw=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{onResponse: async(response)=>response.json()});// Log a header without replacing the resultconstrepo=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{onResponse: (response)=>{console.log("ETag:",response.headers.get("etag"));// returns undefined → default transform still runs}});

All HTTP is handled by dvelopFetch from the @dvelop-sdk/core package, which sets the standard d.velop headers (Authorization, x-dv-request-id, traceparent) and calls the built-in Node.js fetch.

Contributing

This project is maintained by d-velop but is looking for contributers. If you consider contributing to this project please read CONTRIBUTING for details on how to get started.

License

Please read LICENSE for licensing information.

Acknowledgments

Thanks to the following projects for inspiration

About

Official SDK to build Apps for d.velop cloud

Resources

Contributing

Stars

14 stars

Watchers

7 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

dvelop-sdk-node

GitHub

Apps

npm (scoped)npm (scoped)npm (scoped)npm (scoped)npm (scoped)

Utilities

npm (scoped)npm (scoped)

Explore the docs »

Explore on npm »


About

This is the official SDK to build apps for d.velop cloud using node.js and typescript.

Getting started

This SDK is diveded into apps. Install individual packages per d-velop app you want to use.

npm i @dvelop-sdk/dms
import{Repository,getRepository}from"@dvelop-sdk/dms";(asyncfunctionmain(){constrepo: Repository=awaitgetRepository({systemBaseUri: "https://steamwheedle-cartel.d-velop.cloud",authSessionId: "dQw4w9WgXcQ"},{repositoryId: "qnydFmqHuVo",});console.log(repo.name);// Booty Bay Documents})();
npm i @dvelop-sdk/task
import{createTask}from"@dvelop-sdk/task";(asyncfunctionmain(){consttaskLocation=awaitcreateTask({systemBaseUri: "https://umbrella-corp.d-velop.cloud",authSessionId: "dQw4w9WgXcQ"},{subject: "Cover up lab accident",assignees: ["XiFkyR35v2Y"]});console.log(taskLocation);// some/task/location})();

You can also run them in ES6 javascript without typescript:

npm i @dvelop-sdk/dms
//package.json
{
"type":"module"
}
//main.jsimport{Repository,getRepository}from"@dvelop-sdk/dms";asyncfunctionmain(){constrepo=awaitgetRepository({systemBaseUri: "https://steamwheedle-cartel.d-velop.cloud",authSessionId: "dQw4w9WgXcQ"},{repositoryId: "qnydFmqHuVo",});console.log(repo.name);// Booty Bay Documents}awaitmain();

Build a d.velop app in no time with express

This SDK was designed framework agnostic but with express in mind.

Install dependencies:

npm i express cookie-parser @dvelop-sdk/express-utils
npm i typescript @types/express @types/cookie-parser -D

Be sure to set the esModuleInterop-flag for typescript:

//tsconfig.json
{
"compilerOptions": {
"esModuleInterop": true,
// ...
}
}

Set up your app:

importexpress,{Application,NextFunction,Request,Response}from"express"importcookieParserfrom"cookie-parser";import{authenticationMiddleware,contextMiddleware,validateSignatureMiddlewareFactory,InvalidRequestSignatureError,UnauthorizedError,redirectToLoginPage}from"@dvelop-sdk/express-utils";constapp: Application=express();constappName: string="acme-myapp";constappPort: number=5000;app.use(cookieParser());app.use(contextMiddleware);// Make the req.dvelopContext-property availableapp.use(validateSignatureMiddlewareFactory(process.env.APP_SECRET));// Check the d.velop signature.app.get(`/${appName}/me`,authenticationMiddleware,(req: Request,res: Response)=>{res.status(200).send(`<h1>Hello ${req.dvelopContext.user.displayName}</h1>`);});app.get(`/${appName}`,(req: Request,res: Response)=>{res.status(200).send(`<h1>Hello Tenant ${req.dvelopContext.systemBaseUri} (${req.dvelopContext.tenantId})</h1>`);});app.use((err: any,req: Request,res: Response,_: NextFunction)=>{if(errinstanceofInvalidRequestSignatureError){res.status(403).send("Forbidden");// Indicates a problem with the App-Secret}elseif(errinstanceofUnauthorizedError){redirectToLoginPage(req,res);// Not authenticated => send to IDP login-page}else{console.log(err);res.status(500).send("Internal Server Error");}});app.listen(appPort,()=>{console.log(`D.velop app listening on port ${appPort} ...`);});

Don't forget to set your APP_SECRET and then start your app:

npx tsc && node src/main.js

The req.dvelopContext-property can now be used for other SDK-functions.


Advanced Topics

Every SDK method accepts an optional third parameter options of type DvelopOptions. This lets you customize the HTTP request or intercept the raw response — without needing to understand factory functions or internal abstractions.

import{DvelopOptions}from"@dvelop-sdk/core";

Timeout

import{getRepository}from"@dvelop-sdk/dms";constrepo=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{initOverwrite: {signal: AbortSignal.timeout(5000)}});

Disable TLS verification (Node.js 18+, plain JavaScript only)

Pass an undici dispatcher via initOverwrite. TypeScript will flag the unknown property — use plain JavaScript or a type cast:

import{Agent}from"undici";import{getRepository}from"@dvelop-sdk/dms";constrepo=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{initOverwrite: {dispatcher: newAgent({connect: {rejectUnauthorized: false}})}});

Add extra headers

constrepo=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{initOverwrite: {headers: {"x-my-header": "value"}}});

Access the raw response

Use onResponse to intercept or replace the default JSON transform. Return a value to use it as the method's result; return undefined (or nothing) to let the default transform run.

// Replace the result with raw JSONconstraw=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{onResponse: async(response)=>response.json()});// Log a header without replacing the resultconstrepo=awaitgetRepository(context,{repositoryId: "qnydFmqHuVo"},{onResponse: (response)=>{console.log("ETag:",response.headers.get("etag"));// returns undefined → default transform still runs}});

All HTTP is handled by dvelopFetch from the @dvelop-sdk/core package, which sets the standard d.velop headers (Authorization, x-dv-request-id, traceparent) and calls the built-in Node.js fetch.

Contributing

This project is maintained by d-velop but is looking for contributers. If you consider contributing to this project please read CONTRIBUTING for details on how to get started.

License

Please read LICENSE for licensing information.

Acknowledgments

Thanks to the following projects for inspiration

About

Official SDK to build Apps for d.velop cloud

Resources

Contributing

Stars

14 stars

Watchers

7 watching

Forks

Used by

Contributors

Languages