ssjs-data
v2.1.1
Published
Canonical SSJS (Server-Side JavaScript) function catalog, Core library objects, Platform methods, and globals for SFMC tooling
Maintainers
Readme
ssjs-data
Canonical SSJS (Server-Side JavaScript) function catalog, Core library objects, Platform methods, and globals for Salesforce Marketing Cloud (SFMC) tooling.
This package is the single source of truth consumed by:
- eslint-plugin-sfmc — globals registration, unknown-function detection, platform-load checks
- prettier-plugin-sfmc — language registration
- VSCode: sfmc-language — completions, hover, and diagnostics
KNOWN_UNSUPPORTED includes Object.fromEntries, Array.prototype.toReversed,
Array.prototype.toSorted, Array.prototype.toSpliced, String.prototype.replaceAll,
String.prototype.matchAll, global structuredClone, Object.groupBy, and
Array.prototype.findLastIndex.
Their native absence and direct invocation failures were confirmed in Engagement
CloudPage contexts before Core loading and separately with Core 1.1.1 and 1.1.5;
this does not establish behavior in email or other contexts. These entries have
no bundled verified polyfill (hasPolyfill: false), not a claim that a polyfill
is impossible. Their listed return types describe the reference APIs, not successful
SSJS invocations; matchAll uses the coarse object type for its reference iterator,
and structuredClone uses any without claiming preservation of classes or prototypes.
Installation
npm install ssjs-dataUsage
import {
// Globals
SSJS_GLOBALS,
SSJS_GLOBALS_MAP,
ssjsGlobalsLookup,
// Platform methods
PLATFORM_METHODS,
PLATFORM_FUNCTIONS,
platformFunctionLookup,
platformFunctionNames,
// Platform objects
PLATFORM_VARIABLE_METHODS,
platformVariableLookup,
PLATFORM_RESPONSE_METHODS,
platformResponseLookup,
PLATFORM_REQUEST_METHODS,
platformRequestLookup,
PLATFORM_RECIPIENT_METHODS,
platformRecipientMethodNames,
platformRecipientLookup,
// Core library objects
CORE_LIBRARY_OBJECTS,
coreObjectNames,
coreObjectLookup,
coreMethodArityLookup,
coreNonFunctionalMethodLookup,
coreDeprecatedMethodLookup,
// HTTP + HTTPHeader
HTTP_METHODS,
httpMethodNames,
httpMethodLookup,
HTTPHEADER_METHODS,
httpHeaderMethodNames,
httpHeaderMethodLookup,
// WSProxy
WSPROXY_METHODS,
wsproxyMethodNames,
wsproxyMethodLookup,
// WSProxy object-specific method arrays
ACCOUNT_METHODS,
ACCOUNT_TRACKING_METHODS,
ACCOUNT_USER_METHODS,
ATTRIBUTE_METHODS,
attributeMethodNames,
attributeMethodLookup,
CONTENT_AREA_OBJ_METHODS,
DATA_EXTENSION_METHODS,
DATA_EXTENSION_FIELDS_METHODS,
DATA_EXTENSION_ROWS_METHODS,
DELIVERY_PROFILE_METHODS,
EMAIL_METHODS,
EVENT_METHODS,
FILTER_DEFINITION_METHODS,
FOLDER_METHODS,
LIST_METHODS,
LIST_SUBSCRIBERS_METHODS,
LIST_SUBSCRIBERS_TRACKING_METHODS,
PORTFOLIO_METHODS,
QUERY_DEFINITION_METHODS,
SEND_METHODS,
SEND_CLASSIFICATION_METHODS,
SEND_DEFINITION_METHODS,
SEND_TRACKING_METHODS,
SENDER_PROFILE_METHODS,
SUBSCRIBER_METHODS,
SUBSCRIBER_ATTRIBUTES_METHODS,
SUBSCRIBER_LISTS_METHODS,
TEMPLATE_METHODS,
TRIGGERED_SEND_METHODS,
TRIGGERED_SEND_TRACKING_METHODS,
TRIGGERED_SEND_TRACKING_CLICKS_METHODS,
TRIGGERED_SEND_TRACKING_TOTAL_BY_INTERVAL_METHODS,
// DateTime / ErrorUtil
DATE_TIME_METHODS,
DATE_TIME_TIMEZONE_METHODS,
ERROR_UTIL_METHODS,
// Core-version constraints
maxCoreVersionLookup,
// Script.Util
SCRIPT_UTIL_CONSTRUCTORS,
SCRIPT_UTIL_REQUEST_METHODS,
// ECMAScript / polyfills / unsupported syntax
ECMASCRIPT_BUILTINS,
UNSUPPORTED_SYNTAX,
unsupportedByNodeType,
POLYFILLABLE_METHODS,
polyfillByPrototypeName,
polyfillByStaticName,
} from 'ssjs-data';SSJS_GLOBALS / SSJS_GLOBALS_MAP
Global functions and objects available at the top scope of any SSJS execution context (no Platform.Load required):
import { SSJS_GLOBALS, SSJS_GLOBALS_MAP } from 'ssjs-data';
for (const global of SSJS_GLOBALS) {
console.log(global.name); // e.g. 'Write', 'Stringify'
console.log(global.type); // 'function' | 'object'
console.log(global.description);
}
// SSJS_GLOBALS_MAP is shaped for ESLint's globals config:
// { Write: 'readonly', Platform: 'readonly', ... }
console.log(SSJS_GLOBALS_MAP['Write']); // 'readonly'PLATFORM_METHODS
Top-level Platform.* methods (e.g. Platform.Load):
import { PLATFORM_METHODS } from 'ssjs-data';
for (const method of PLATFORM_METHODS) {
console.log(method.name); // e.g. 'Load'
console.log(method.syntax); // e.g. 'Platform.Load(libraryName, version)'
console.log(method.minArgs);
console.log(method.maxArgs);
}PLATFORM_FUNCTIONS / platformFunctionLookup / platformFunctionNames
The Platform.Function.* catalog — available without Platform.Load:
import { PLATFORM_FUNCTIONS, platformFunctionLookup, platformFunctionNames } from 'ssjs-data';
// Full catalog
for (const fn of PLATFORM_FUNCTIONS) {
console.log(fn.name); // e.g. 'Lookup'
console.log(fn.minArgs);
console.log(fn.maxArgs);
console.log(fn.description);
console.log(fn.params); // array of { name, description, type?, optional? }
console.log(fn.returnType);
console.log(fn.syntax);
}
// O(1) lookup by lowercase name
const entry = platformFunctionLookup.get('lookup');
// Existence check
if (platformFunctionNames.has('lookup')) {
/* ... */
}CORE_LIBRARY_OBJECTS / coreObjectNames / coreObjectLookup
Objects that require Platform.Load("core", "1") before use (e.g. DataExtension, Subscriber):
import { CORE_LIBRARY_OBJECTS, coreObjectNames, coreObjectLookup } from 'ssjs-data';
for (const obj of CORE_LIBRARY_OBJECTS) {
console.log(obj.name); // e.g. 'DataExtension', 'DataExtension.Rows'
console.log(obj.methods); // e.g. ['Init', 'Add', 'Remove', 'Update', 'Retrieve']
console.log(obj.description);
}
// Existence check
if (coreObjectNames.has('DataExtension')) {
/* ... */
}
// O(1) lookup
const de = coreObjectLookup.get('DataExtension');HTTP_METHODS / httpMethodNames / httpMethodLookup
Methods available on the HTTP platform object:
import { HTTP_METHODS, httpMethodNames, httpMethodLookup } from 'ssjs-data';
for (const method of HTTP_METHODS) {
console.log(method.name); // e.g. 'Get', 'Post'
console.log(method.syntax);
}
if (httpMethodNames.has('get')) {
/* ... */
}
const m = httpMethodLookup.get('get');WSPROXY_METHODS / wsproxyMethodNames / wsproxyMethodLookup
SOAP API methods available on the WSProxy object:
import { WSPROXY_METHODS, wsproxyMethodNames, wsproxyMethodLookup } from 'ssjs-data';
for (const method of WSPROXY_METHODS) {
console.log(method.name); // e.g. 'retrieve', 'create', 'update'
console.log(method.syntax);
}
if (wsproxyMethodNames.has('retrieve')) {
/* ... */
}
const method = wsproxyMethodLookup.get('retrieve');HTTPHEADER_METHODS / httpHeaderMethodNames / httpHeaderMethodLookup
Methods on the HTTPHeader Core object (requires Platform.Load("core", "1")):
import { HTTPHEADER_METHODS, httpHeaderMethodNames, httpHeaderMethodLookup } from 'ssjs-data';
for (const method of HTTPHEADER_METHODS) {
console.log(method.name); // 'GetValue', 'SetValue'
console.log(method.syntax);
}
if (httpHeaderMethodNames.has('getvalue')) {
/* ... */
}
const method2 = httpHeaderMethodLookup.get('getvalue');PLATFORM_VARIABLE_METHODS / platformVariableLookup
Methods on the Platform.Variable bridge (reads and writes AMPscript variables from SSJS):
import { PLATFORM_VARIABLE_METHODS, platformVariableLookup } from 'ssjs-data';
for (const method of PLATFORM_VARIABLE_METHODS) {
console.log(method.name); // 'GetValue', 'SetValue'
}
const m = platformVariableLookup.get('getvalue');PLATFORM_RESPONSE_METHODS / platformResponseLookup
Methods on the Platform.Response object (HTTP response control):
import { PLATFORM_RESPONSE_METHODS, platformResponseLookup } from 'ssjs-data';
for (const method of PLATFORM_RESPONSE_METHODS) {
console.log(method.name); // e.g. 'Write', 'Redirect', 'SetResponseHeader'
}
const m = platformResponseLookup.get('write');PLATFORM_REQUEST_METHODS / platformRequestLookup
Methods on the Platform.Request object (HTTP request introspection):
import { PLATFORM_REQUEST_METHODS, platformRequestLookup } from 'ssjs-data';
for (const method of PLATFORM_REQUEST_METHODS) {
console.log(method.name); // e.g. 'GetQueryStringParameter', 'GetPostData'
}
const m = platformRequestLookup.get('getquerystringparameter');PLATFORM_RECIPIENT_METHODS / platformRecipientMethodNames / platformRecipientLookup
Methods on the Platform.Recipient object (subscriber / recipient data):
import {
PLATFORM_RECIPIENT_METHODS,
platformRecipientMethodNames,
platformRecipientLookup,
} from 'ssjs-data';
for (const method of PLATFORM_RECIPIENT_METHODS) {
console.log(method.name); // e.g. 'GetAttributeValue'
}
if (platformRecipientMethodNames.has('getattributevalue')) {
/* ... */
}
const m = platformRecipientLookup.get('getattributevalue');ATTRIBUTE_METHODS / attributeMethodNames / attributeMethodLookup
Methods on the Attribute Core object (requires Platform.Load("core", "1.1.5")):
import { ATTRIBUTE_METHODS, attributeMethodNames, attributeMethodLookup } from 'ssjs-data';
for (const method of ATTRIBUTE_METHODS) {
console.log(method.name); // 'GetValue'
console.log(method.description); // reads subscriber attribute / DE field for current recipient
}
if (attributeMethodNames.has('getvalue')) {
/* ... */
}
const m = attributeMethodLookup.get('getvalue');DATE_TIME_METHODS
DateTime namespace methods for date conversion between local and system (UTC) time. These require Platform.Load("core", "1"):
import { DATE_TIME_METHODS } from 'ssjs-data';
for (const method of DATE_TIME_METHODS) {
console.log(method.name); // e.g. 'SystemDateToLocalDate', 'LocalDateToSystemDate'
console.log(method.syntax); // e.g. 'DateTime.SystemDateToLocalDate(dateString)'
}DATE_TIME_TIMEZONE_METHODS
Methods on the DateTime.TimeZone namespace (requires Platform.Load("core", "1.1.5")):
import { DATE_TIME_TIMEZONE_METHODS } from 'ssjs-data';
for (const method of DATE_TIME_TIMEZONE_METHODS) {
console.log(method.name); // 'Retrieve'
console.log(method.syntax); // 'DateTime.TimeZone.Retrieve(filter)'
}ERROR_UTIL_METHODS
Utility methods on the ErrorUtil namespace for WSProxy error handling. Runtime-verified: ErrorUtil is only provided by Platform.Load("core", "1") and is undefined under any newer Core version, so both the namespace and its method carry deprecated: true and maxCoreVersion: '1':
import { ERROR_UTIL_METHODS } from 'ssjs-data';
for (const method of ERROR_UTIL_METHODS) {
console.log(method.name); // 'ThrowWSProxyError'
console.log(method.syntax);
console.log(method.maxCoreVersion); // '1'
}maxCoreVersionLookup
Members that only exist up to a maximum Platform.Load("Core", <version>). Beyond that version they resolve to undefined at runtime, so calling them throws. Keyed by lowercase qualified name:
import { maxCoreVersionLookup } from 'ssjs-data';
maxCoreVersionLookup.get('errorutil');
// { name: 'ErrorUtil', maxCoreVersion: '1' }
maxCoreVersionLookup.get('errorutil.throwwsproxyerror');
// { name: 'ErrorUtil.ThrowWSProxyError', maxCoreVersion: '1' }The map is built generically from the catalogs — adding maxCoreVersion to any global or owned method is enough to have it surface here (and in the consuming linters).
WSProxy object-specific method arrays
Each WSProxy-accessible object has its own named export. These follow the same shape as WSPROXY_METHODS and are used by tooling for per-object completions and hover.
| Export | WSProxy object |
| --------------------------------------------------- | ---------------------------------------- |
| ACCOUNT_METHODS | Account |
| ACCOUNT_TRACKING_METHODS | Account.Tracking |
| ACCOUNT_USER_METHODS | AccountUser |
| CONTENT_AREA_OBJ_METHODS | ContentAreaObj |
| DATA_EXTENSION_METHODS | DataExtension |
| DATA_EXTENSION_FIELDS_METHODS | DataExtension.Fields |
| DATA_EXTENSION_ROWS_METHODS | DataExtension.Rows |
| DELIVERY_PROFILE_METHODS | DeliveryProfile |
| EMAIL_METHODS | Email |
| EVENT_METHODS | Event |
| FILTER_DEFINITION_METHODS | FilterDefinition |
| FOLDER_METHODS | Folder |
| LIST_METHODS | List |
| LIST_SUBSCRIBERS_METHODS | List.Subscribers |
| LIST_SUBSCRIBERS_TRACKING_METHODS | List.Subscribers.Tracking |
| PORTFOLIO_METHODS | Portfolio |
| QUERY_DEFINITION_METHODS | QueryDefinition |
| SEND_METHODS | Send |
| SEND_CLASSIFICATION_METHODS | SendClassification |
| SEND_DEFINITION_METHODS | SendDefinition |
| SEND_TRACKING_METHODS | Send.Tracking |
| SENDER_PROFILE_METHODS | SenderProfile |
| SUBSCRIBER_METHODS | Subscriber |
| SUBSCRIBER_ATTRIBUTES_METHODS | Subscriber.Attributes |
| SUBSCRIBER_LISTS_METHODS | Subscriber.Lists |
| TEMPLATE_METHODS | Template |
| TRIGGERED_SEND_METHODS | TriggeredSend |
| TRIGGERED_SEND_TRACKING_METHODS | TriggeredSend.Tracking |
| TRIGGERED_SEND_TRACKING_CLICKS_METHODS | TriggeredSend.Tracking.Clicks |
| TRIGGERED_SEND_TRACKING_TOTAL_BY_INTERVAL_METHODS | TriggeredSend.Tracking.TotalByInterval |
ssjsGlobalsLookup / coreMethodArityLookup / coreNonFunctionalMethodLookup / coreDeprecatedMethodLookup
Additional O(1) lookup maps:
import {
ssjsGlobalsLookup,
coreMethodArityLookup,
coreNonFunctionalMethodLookup,
coreDeprecatedMethodLookup,
} from 'ssjs-data';
// Lookup a global by lowercase name
const writeGlobal = ssjsGlobalsLookup.get('write');
// Lookup arity (min/max args) of a Core library method by 'ObjectName.methodName'
const arity = coreMethodArityLookup.get('DataExtension.Init');
// e.g. { minArgs: 1, maxArgs: 1 }
// Core methods that resolve at runtime but never take effect (verified on a live BU).
// Nested map: lowercase object name -> lowercase method name -> method definition.
const brokenOnFilterDefinition = coreNonFunctionalMethodLookup.get('filterdefinition');
const update = brokenOnFilterDefinition && brokenOnFilterDefinition.get('update');
// update.nonFunctionalAtRuntime === true
// update.officialDocsNote explains what was observed on the live account
// Core methods that still work but are deprecated (superseded by newer functionality,
// e.g. Content Builder assets replacing Classic Content). Same nested-map shape.
const deprecatedOnSend = coreDeprecatedMethodLookup.get('send.definition');
const add = deprecatedOnSend && deprecatedOnSend.get('add');
// add.deprecated === trueSCRIPT_UTIL_CONSTRUCTORS / SCRIPT_UTIL_REQUEST_METHODS
Script.Util constructors (e.g. Script.Util.HttpRequest) and their instance methods:
import { SCRIPT_UTIL_CONSTRUCTORS, SCRIPT_UTIL_REQUEST_METHODS } from 'ssjs-data';
for (const ctor of SCRIPT_UTIL_CONSTRUCTORS) {
console.log(ctor.name); // e.g. 'HttpRequest'
console.log(ctor.returnType); // e.g. 'HttpRequest'
}
for (const method of SCRIPT_UTIL_REQUEST_METHODS) {
console.log(method.name); // e.g. 'send', 'setHeader'
}ECMASCRIPT_BUILTINS
ECMAScript built-in methods and properties supported by the SSJS engine:
import { ECMASCRIPT_BUILTINS } from 'ssjs-data';
for (const builtin of ECMASCRIPT_BUILTINS) {
console.log(builtin.name); // e.g. 'push', 'slice'
console.log(builtin.owner); // e.g. 'Array', 'String', 'Math'
console.log(builtin.description);
}UNSUPPORTED_SYNTAX / unsupportedByNodeType
JavaScript syntax constructs that the SSJS engine does not support:
import { UNSUPPORTED_SYNTAX, unsupportedByNodeType } from 'ssjs-data';
for (const item of UNSUPPORTED_SYNTAX) {
console.log(item.nodeType); // AST node type, e.g. 'ArrowFunctionExpression'
console.log(item.name); // human-readable name
console.log(item.description);
}
// Keyed lookup by AST node type
const info = unsupportedByNodeType.get('ArrowFunctionExpression');POLYFILLABLE_METHODS / polyfillByPrototypeName / polyfillByStaticName
Methods that are absent from the SSJS engine but can be polyfilled:
import { POLYFILLABLE_METHODS, polyfillByPrototypeName, polyfillByStaticName } from 'ssjs-data';
for (const method of POLYFILLABLE_METHODS) {
console.log(method.name); // e.g. 'startsWith'
console.log(method.owner); // e.g. 'String'
console.log(method.description);
}
// Lookup by prototype method name (e.g. 'startsWith')
const info = polyfillByPrototypeName.get('startsWith');
// Lookup by static invocation name (e.g. 'Array.isArray')
const info2 = polyfillByStaticName.get('Array.isArray');License
MIT
