---
title: Reuse scripts
description: To use an existing script in a Scripted Decision node, create a library script containing the functionality you want to reuse and reference it from a decision node script.
component: pingam
version: 7.4
page_id: pingam:am-scripting:library-scripts
canonical_url: https://docs.pingidentity.com/pingam/8.1/am-scripting/library-scripts.html
llms_txt: https://docs.pingidentity.com/pingam/llms.txt
docs_for_agents: https://developer.pingidentity.com/build-with-ai/docs-for-agents.md
keywords: ["Scripts"]
page_aliases: ["scripting-guide:library-scripts.adoc"]
superseded_by: https://docs.pingidentity.com/pingam/8.1/am-scripting/library-scripts.html
section_ids:
  create-library-script: Create a library script
  import-library-script: Import a library script
---

# Reuse scripts

To use an existing script in a [Scripted Decision node](https://docs.pingidentity.com/auth-node-ref/7.4/scripted-decision.html), create a *library* script containing the functionality you want to reuse and reference it from a decision node script.

A library script can take the format of any JavaScript code. You can also import functionality from another library script.

For example:

* Create a library script using a minified third-party JavaScript utility library, such as [`lodash.js`](https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js).

  |   |                                                                                                                                                                               |
  | - | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
  |   | Only import scripts from trusted third parties that you know take security seriously. It is your responsibility to ensure that third-party code is secure and to maintain it. |

* Write your own reusable snippet that enhances PingAM debugging functionality.

|   |                                                                                                                                                                                                   |
| - | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|   | Modules that use file systems, such as `node:fs` or `XMLHTTPRequest`, are not supported. Only modules that are self-contained and don't use a file system explicitly or indirectly are supported. |

## Create a library script

1. In the AM admin UI, [create a script](manage-scripts-console.html#create-scripts-with-console) of type `Library`.

   The Evaluator Version is automatically set to Next Generation.

2. In the Script field, paste the contents of a third-party JavaScript or write your own JavaScript code.

   Expose the reusable functions of your library script by defining properties on the `exports` object.

   For similar functionality, refer to the [CommonJS modules](https://nodejs.org/api/modules.html#modules-commonjs-modules).

   For this example, `myExampleLibrary` defines and exports three functions:

   ```javascript
   var i = 0;

   function add(j) {i += j};
   function logTotal(log) { log.info("Total: " + i) };

   // export constant
   exports.MSG = 'Final sum';

   // export functions
   exports.add = add;
   exports.logTotal = logTotal;

   //direct export using an inline declaration
   exports.logTotalWithMessage = (log, message) => log.info(message + ": " + i);
   ```

   A library script doesn't have access to bindings, but you can pass in parameters. In the example, the `log` object is passed in from the scripted decision node that calls the `logTotal` and `logTotalWithMessage` functions.

   |   |                                                                                        |
   | - | -------------------------------------------------------------------------------------- |
   |   | You can't create or export *classes* in library scripts, only functions and constants. |

3. Save your changes.

## Import a library script

1. In the AM admin UI, [create or edit a script](manage-scripts-console.html#create-scripts-with-console) of type `Decision node script for authentication trees` or `Library`.

2. In the Script field, load the library using the `require(LIBRARY_SCRIPT)` notation; for example:

   `var mylib = require('myExampleLibrary');`

3. Access the exported functions using the library variable; in this case, `mylib`:

   ```javascript
   mylib.add(1);
   mylib.logTotal(logger);
   mylib.add(3);
   mylib.logTotalWithMessage(logger, mylib.MSG);
   ```
