Skip to content
Talk to our solutions team

Secrets & Security

Vault access, secret generation, hashing and encryption. Each function lists its parameters, defaults and return value.

Vault secret management functions using the service’s pre-initialized vault client.

Scope: Network

Note: The vault namespace is NOT included in the default namespace set. Enable it explicitly via namespaces: "http,vault" or namespaces: "all" in your script task config.

Unlike the vault task (which requires full TLS/infrastructure parameters to create its own vault client), the vault namespace uses the vault client already initialized during service boot. Scripts just provide secret names — no need for datacenter, cluster, certificate, or URL parameters.

The vault client is resolved from the service container at call time. If the service was not initialized with a vault client (e.g., running locally without vault), the functions return {success: false, error: "vault client not available"}.

FunctionDescription
vault.get()Retrieve a secret by name
vault.save()Save a secret to vault
vault.exists()Check if a secret exists
vault.delete()Delete a secret
vault.serviceJwt()Get a service JWT token for internal service auth

Retrieve a secret value from vault by name.

Accepts either a string or a map:

InputTypeDescription
(string)stringSecret name (shorthand: vault.get("name"))
namestringSecret name (map form: vault.get({name: "name"}))
FieldTypeDescription
successboolWhether the operation succeeded
valuestringThe secret value
errorstringError message if failed
// String shorthand
var result = vault.get("database-password");
if (result.success) {
log("Password: " + result.value.substring(0, 3) + "***");
}
// Map form
var result = vault.get({name: "stripe-api-key"});
log("API key retrieved: " + result.success);
// Error handling
var result = vault.get("nonexistent-key");
if (!result.success) {
log("Error: " + result.error);
}

Save a secret to vault.

ParameterTypeRequiredDefaultDescription
namestringYes-Secret name
valuestringYes-Secret value
startdatestringNo""Validity start date
enddatestringNo""Validity end date
indefiniteboolNofalseIf true, secret has no expiry
FieldTypeDescription
successboolWhether the operation succeeded
errorstringError message if failed
// Save a simple secret
var result = vault.save({
name: "api-key",
value: "sk_live_abc123def456"
});
// Save with date range
vault.save({
name: "temp-token",
value: "tok-xyz",
startdate: "2026-01-01",
enddate: "2026-12-31"
});
// Save with no expiry
vault.save({
name: "master-key",
value: "mk-permanent",
indefinite: true
});
// Generate and save
var newKey = "sk_" + id.generate({pattern: "hex", length: 32}).id;
vault.save({name: "generated-key", value: newKey, indefinite: true});

Check if a secret exists in vault.

Accepts either a string or a map:

InputTypeDescription
(string)stringSecret name (shorthand: vault.exists("name"))
namestringSecret name (map form: vault.exists({name: "name"}))
FieldTypeDescription
successboolWhether the operation succeeded
existsboolWhether the secret exists
errorstringError message if failed
// Check before reading
var check = vault.exists("database-password");
if (check.success && check.exists) {
var secret = vault.get("database-password");
// use secret.value
} else {
log("Secret not found, creating default...");
vault.save({name: "database-password", value: "default-pass", indefinite: true});
}
// Map form
var check = vault.exists({name: "api-key"});
log("Exists: " + check.exists);

Delete a secret from vault.

Accepts either a string or a map:

InputTypeDescription
(string)stringSecret name (shorthand: vault.delete("name"))
namestringSecret name (map form: vault.delete({name: "name"}))
FieldTypeDescription
successboolWhether the operation succeeded
deletedboolWhether the secret was deleted
errorstringError message if failed
// Delete by name
var result = vault.delete("old-api-key");
log("Deleted: " + result.deleted);
// Rotate: delete old, save new
vault.delete("service-token");
vault.save({
name: "service-token",
value: "new-token-value",
indefinite: true
});

Obtain a service JWT token from vault for authenticating with other internal services. The JWT is signed by the vault and can be used as a Bearer token in Authorization headers.

Accepts zero arguments, a string, or a map:

InputTypeDescription
(none)Uses the current service name (auto-detected)
(string)stringService name to authenticate as
servicestringService name (map form)
FieldTypeDescription
successboolWhether the operation succeeded
tokenstringThe JWT token string
errorstringError message if failed
// Get JWT for the current service (auto-detected name)
var auth = vault.serviceJwt();
if (auth.success) {
// Use token in HTTP requests to internal services
var resp = http.get({
url: "https://internal-api.example.com/data",
headers: {"Authorization": auth.token}
});
}
// Get JWT for a specific service name
var auth = vault.serviceJwt("jobs");
// Map form
var auth = vault.serviceJwt({service: "vulcan"});
name: secret-rotation
tasks:
- name: rotate-secrets
script:
language: javascript
namespaces: http,vault,id
code: |
// Check if current key exists
var existing = vault.exists("service-api-key");
if (existing.exists) {
// Back up old key
var old = vault.get("service-api-key");
vault.save({
name: "service-api-key-backup",
value: old.value,
startdate: "2026-01-01",
enddate: "2026-03-01"
});
}
// Generate and store new key
var newKey = "sk_" + id.generate({pattern: "hex", length: 32}).id;
vault.save({name: "service-api-key", value: newKey, indefinite: true});
// Verify
var verify = vault.get("service-api-key");
if (verify.value !== newKey) {
throw new Error("Key rotation verification failed");
}
setvar: rotation_result
Featurevault taskvault namespace
Vault clientCreates new per-executionUses service’s pre-initialized client
ParametersFull (URL, cert, DC, cluster, …)Just secret name/value
Use caseCross-cluster or custom vault accessSame-service secret operations
Config neededAll infrastructure params in YAMLnamespaces: "vault" in script task
Available inAny workflow taskScript tasks only
JWT authNot availablevault.serviceJwt() for internal service calls

Secret generation and encoding functions.

Scope: System

FunctionDescription
secret.generate()Generate random secrets and passwords
secret.encode()Encode data using various encoding schemes
secret.decode()Decode encoded data
secret.hash()Hash a secret value using bcrypt
secret.validate()Validate password strength

Generate random secrets and passwords with configurable patterns and character sets.

ParameterTypeDefaultDescription
patternstring"alphanumeric"Secret pattern (see table below)
lengthint32Secret length
prefixstringPrefix to add to generated secret
uppercaseboolfalseInclude uppercase letters
lowercaseboolfalseInclude lowercase letters
digitsboolfalseInclude digits
specialboolfalseInclude special characters
charsetstringCustom character set
hashboolfalseAlso return hash of the secret
separatorstring"-"Separator for passphrase pattern
wordsintNumber of words for passphrase pattern
PatternDescription
alphanumericLetters and digits
hexHexadecimal characters
base64Base64 characters
passphraseWord-based passphrase
numericDigits only
alphaLetters only
specialSpecial characters only
urlURL-safe characters
customCustom character set (use charset)
apikeyAPI key format
FieldTypeDescription
successboolWhether generation succeeded
secretstringGenerated secret
hashstringHash of the secret (if hash: true)
// Generate alphanumeric secret (default)
let result = secret.generate({})
log("Secret: " + result.secret)
// Generate hex secret
let result = secret.generate({
pattern: "hex",
length: 64
})
log("Hex: " + result.secret)
// Generate API key with prefix
let result = secret.generate({
pattern: "apikey",
prefix: "sk_live_"
})
log("API Key: " + result.secret)
// Generate passphrase
let result = secret.generate({
pattern: "passphrase",
words: 4,
separator: "-"
})
log("Passphrase: " + result.secret)
// Generate with hash
let result = secret.generate({
pattern: "alphanumeric",
length: 16,
hash: true
})
log("Secret: " + result.secret)
log("Hash: " + result.hash)
// Custom character set
let result = secret.generate({
charset: "ABCDEF0123456789",
length: 8
})
log("Custom: " + result.secret)

Encode data using various encoding schemes.

ParameterTypeDefaultDescription
datastringString data to encode (required)
encodingstring"base64"Encoding scheme: "base64", "base32", "hex"
FieldTypeDescription
successboolWhether encoding succeeded
encodedstringEncoded string
// Base64 encode
let result = secret.encode({
data: "Hello, World!",
encoding: "base64"
})
log("Base64: " + result.encoded)
// Hex encode
let result = secret.encode({
data: "secret data",
encoding: "hex"
})
log("Hex: " + result.encoded)

Decode encoded data.

ParameterTypeDefaultDescription
datastringEncoded string to decode (required)
encodingstring"base64"Encoding scheme: "base64", "base32", "hex"
FieldTypeDescription
successboolWhether decoding succeeded
decodedstringDecoded string
// Base64 decode
let result = secret.decode({
data: "SGVsbG8sIFdvcmxkIQ==",
encoding: "base64"
})
log("Decoded: " + result.decoded)
// Hex decode
let result = secret.decode({
data: "48656c6c6f",
encoding: "hex"
})
log("Decoded: " + result.decoded)

Hash a secret value using bcrypt for secure password storage.

ParameterTypeDefaultDescription
valuestringSecret value to hash (required)
FieldTypeDescription
successboolWhether hashing succeeded
hashstringBcrypt hash
// Hash a password
let result = secret.hash({ value: "my-password-123" })
log("Bcrypt hash: " + result.hash)
// Store hash in database
let hashed = secret.hash({ value: userPassword })
db.exec({
connectionId: conn.connectionId,
sql: "UPDATE users SET password_hash = $1 WHERE id = $2",
args: [hashed.hash, userId]
})

Validate a secret against password strength requirements.

ParameterTypeDefaultDescription
valuestringSecret value to validate (required)
FieldTypeDescription
successbooltrue if the password meets strength requirements
errorstringValidation error message if requirements not met
// Validate password strength
let result = secret.validate({ value: "weak" })
if (!result.success) {
log("Password too weak: " + result.error)
}
// Validate a strong password
let result = secret.validate({ value: "C0mpl3x!P@ssw0rd" })
if (result.success) {
log("Password meets requirements")
}

Encryption and decryption functions.

Scope: System

FunctionDescription
crypt.encryptFile()Encrypt a file using AES encryption
crypt.decryptFile()Decrypt a file using AES decryption
crypt.encrypt()Encrypt data in memory
crypt.decrypt()Decrypt data in memory
AlgorithmDescription
aes-256-gcmAES-256 in GCM mode (default, authenticated encryption)
aes-256-cbcAES-256 in CBC mode
aes-128-gcmAES-128 in GCM mode

Encrypt a file using AES encryption with PBKDF2 key derivation.

ParameterTypeDefaultDescription
secretstringEncryption key/passphrase (required)
sourcestringSource file path (required)
destinationstringDestination file path (required)
algorithmstring"aes-256-gcm"Encryption algorithm
overwriteboolfalseOverwrite existing destination file
iterationsint100000PBKDF2 iterations for key derivation
FieldTypeDescription
successboolWhether encryption succeeded
destinationstringOutput file path
// Encrypt a file
crypt.encryptFile({
secret: "my-encryption-key",
source: "/data/sensitive.json",
destination: "/data/sensitive.json.enc"
})
// Encrypt with specific algorithm
crypt.encryptFile({
secret: "my-key",
source: "/data/backup.tar.gz",
destination: "/data/backup.tar.gz.enc",
algorithm: "aes-256-cbc",
overwrite: true
})

Decrypt a file using AES decryption.

ParameterTypeDefaultDescription
secretstringDecryption key/passphrase (required)
sourcestringSource file path (required)
destinationstringDestination file path (required)
algorithmstring"aes-256-gcm"Decryption algorithm
overwriteboolfalseOverwrite existing destination file
iterationsint100000PBKDF2 iterations for key derivation
FieldTypeDescription
successboolWhether decryption succeeded
destinationstringOutput file path
// Decrypt a file
crypt.decryptFile({
secret: "my-encryption-key",
source: "/data/sensitive.json.enc",
destination: "/data/sensitive.json"
})
// Decrypt with overwrite
crypt.decryptFile({
secret: "my-key",
source: "/data/backup.tar.gz.enc",
destination: "/data/backup.tar.gz",
overwrite: true
})

Encrypt data in memory using AES encryption. Returns encrypted data as a base64-encoded string.

ParameterTypeDefaultDescription
secretstringEncryption key/passphrase (required)
datastringString data to encrypt (required)
algorithmstring"aes-256-gcm"Encryption algorithm
iterationsint100000PBKDF2 iterations
FieldTypeDescription
successboolWhether encryption succeeded
encryptedstringBase64-encoded encrypted data
// Encrypt a string
let result = crypt.encrypt({
secret: "my-key",
data: "sensitive information"
})
log("Encrypted: " + result.encrypted)
// Store encrypted value
let encrypted = crypt.encrypt({
secret: "app-secret",
data: JSON.stringify({ apiKey: "sk-123", dbPass: "secret" })
})
file.write({
path: "/config/secrets.enc",
content: encrypted.encrypted
})

Decrypt data in memory. Accepts base64-encoded encrypted data.

ParameterTypeDefaultDescription
secretstringDecryption key/passphrase (required)
datastringBase64-encoded encrypted data (required)
algorithmstring"aes-256-gcm"Decryption algorithm
iterationsint100000PBKDF2 iterations
FieldTypeDescription
successboolWhether decryption succeeded
decryptedstringDecrypted string
// Decrypt a string
let result = crypt.decrypt({
secret: "my-key",
data: encryptedBase64String
})
log("Decrypted: " + result.decrypted)
// Round-trip encryption/decryption
let encrypted = crypt.encrypt({
secret: "my-key",
data: "hello world"
})
let decrypted = crypt.decrypt({
secret: "my-key",
data: encrypted.encrypted
})
log(decrypted.decrypted) // "hello world"
// Read and decrypt stored secrets
let encData = file.read({ path: "/config/secrets.enc" })
let secrets = crypt.decrypt({
secret: "app-secret",
data: encData.content
})
let config = JSON.parse(secrets.decrypted)
log("API Key: " + config.apiKey)

Cryptographic hashing functions.

Scope: System

FunctionDescription
hash.string()Compute a hash of a string value
hash.file()Compute a hash of a file
hash.bytes()Compute a hash of byte data
AlgorithmDescription
sha256SHA-256 (default)
sha512SHA-512
sha1SHA-1
md5MD5
blake2bBLAKE2b
xxhashxxHash (fast, non-cryptographic)

Compute a hash of a string value.

ParameterTypeDefaultDescription
datastringString data to hash (required)
algorithmstring"sha256"Hash algorithm
lengthint0Truncate hash to specified length (0 = full hash)
FieldTypeDescription
successboolWhether hashing succeeded
hashstringHex-encoded hash value
algorithmstringAlgorithm used
// SHA-256 hash (default)
let result = hash.string({ data: "hello world" })
log("SHA-256: " + result.hash)
// MD5 hash
let result = hash.string({
data: "hello world",
algorithm: "md5"
})
log("MD5: " + result.hash)
// Truncated hash
let result = hash.string({
data: "hello world",
algorithm: "sha256",
length: 8
})
log("Short hash: " + result.hash)
// xxHash for fast non-crypto hashing
let result = hash.string({
data: "large content here",
algorithm: "xxhash"
})
log("xxHash: " + result.hash)

Compute a hash of a file.

ParameterTypeDefaultDescription
pathstringPath to file to hash (required)
algorithmstring"sha256"Hash algorithm
lengthint0Truncate hash to specified length
FieldTypeDescription
successboolWhether hashing succeeded
hashstringHex-encoded hash value
algorithmstringAlgorithm used
// Hash a file
let result = hash.file({ path: "/tmp/release.tar.gz" })
log("File SHA-256: " + result.hash)
// Verify file integrity
let expected = "abc123..."
let result = hash.file({
path: "/tmp/download.bin",
algorithm: "sha256"
})
if (result.hash === expected) {
log("File integrity verified")
}
// Quick hash for comparison
let result = hash.file({
path: "/data/large-file.bin",
algorithm: "xxhash"
})
log("Fast hash: " + result.hash)

Compute a hash of byte data (passed as string).

ParameterTypeDefaultDescription
datastringByte data as string (required)
algorithmstring"sha256"Hash algorithm
lengthint0Truncate hash to specified length
FieldTypeDescription
successboolWhether hashing succeeded
hashstringHex-encoded hash value
algorithmstringAlgorithm used
// Hash byte data
let result = hash.bytes({
data: "binary content",
algorithm: "blake2b"
})
log("BLAKE2b: " + result.hash)

Identifier generation functions.

Scope: System

FunctionDescription
id.generate()Generate unique identifiers (ULID, UUID, NanoID, KSUID, XID)

Generate unique identifiers of various types.

ParameterTypeDefaultDescription
typestring"ulid"ID type: "ulid", "uuid", "nanoid", "ksuid", "xid"
countint1Number of IDs to generate
TypeDescriptionExample
ulidUniversally Unique Lexicographically Sortable Identifier01ARZ3NDEKTSV4RRFFQ69G5FAV
uuidUUID v4 (random)550e8400-e29b-41d4-a716-446655440000
nanoidCompact URL-safe identifierV1StGXR8_Z5jdHi6B-myT
ksuidK-Sortable Unique Identifier1HCpXwx2EK9oYluGXoYAtlFNRpk
xidGlobally unique, sortable, compact9m4e2mr0ui3e8a215n4g
FieldTypeDescription
successboolWhether generation succeeded
idstringGenerated ID (when count is 1)
idsarrayArray of generated IDs
// Generate a ULID (default)
let result = id.generate({})
log("ID: " + result.id)
// Generate a UUID
let result = id.generate({ type: "uuid" })
log("UUID: " + result.id)
// Generate a NanoID
let result = id.generate({ type: "nanoid" })
log("NanoID: " + result.id)
// Generate multiple IDs
let result = id.generate({ type: "ulid", count: 5 })
for (let id of result.ids) {
log("ID: " + id)
}
// Generate a KSUID
let result = id.generate({ type: "ksuid" })
log("KSUID: " + result.id)