---
title: Library scripts
description: To reuse an existing script, create a library script containing the functionality you want to reuse and reference it from a next-generation script.
component: pingoneaic
page_id: pingoneaic:am-scripting:library-scripts
canonical_url: https://docs.pingidentity.com/pingoneaic/am-scripting/library-scripts.html
keywords: ["Scripts"]
section_ids:
  create-library-script: Create a library script
  import-library-script: Import a library script
---

# Library scripts

To reuse an existing script, create a *library* script containing the functionality you want to reuse and reference it from a [next-generation](next-generation-scripts.html) 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 Advanced Identity Cloud 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 Advanced Identity Cloud admin console, [create a script](../developer-docs/scripting-auth.html#create-a-new-auth-script) of type `Library`.

2. In the JavaScript editor, paste the contents of a minified third-party JavaScript library or write your own code.

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

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

   ```javascript
   function add(i, j) {
     return i + j;
   }

   function logTotal(i) {
     logger.info("Total so far: " + i);
   }

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

   // export a constant
   exports.PI = 3.14;

   // direct export using an inline declaration
   exports.encodeURL = (url) => {
     return utils.base64url.encode(url);
   }
   ```

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

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

   As a [next-generation](next-generation-scripts.html) script, a library script has access to all the next-generation [common bindings](script-bindings.html). You can also pass in parameters.

   |   |                                                                                                                                                                                                                                                                                                                                                                                          |
   | - | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
   |   | Make sure you don't use the same name for a local variable as that of a common binding in your script. These names are reserved for common bindings only.If you have already defined a local variable with the same name as one that's added to common bindings in a more recent version of Advanced Identity Cloud; for example, `utils`, you must rename the variable in your scripts. |

3. Save your changes.

## Import a library script

1. In the Advanced Identity Cloud admin console, [create or edit](../developer-docs/scripting-auth.html#create-decision-scripts) a next-generation script.

   |   |                                                                  |
   | - | ---------------------------------------------------------------- |
   |   | Only next-generation scripts support the use of library scripts. |

   Alternatively, [create or edit](../developer-docs/scripting-auth.html#create-a-new-auth-script) a `Library` script to nest library scripts.

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

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

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

   ```javascript
   var i = mylib.add(10, mylib.PI);
   mylib.logTotal(i);

   var encoded = mylib.encodeURL("http://maths.example.com");
   ```

4. Save your changes.
