API-интерфейсы тегов на стороне сервера

В этом документе описаны API для серверной разметки.


addEventCallback

Регистрирует функцию обратного вызова, которая будет вызвана по завершении события. Функция обратного вызова будет вызвана после выполнения всех тегов события. В функцию обратного вызова передаются два значения: идентификатор контейнера, вызывающего функцию, и объект, содержащий информацию о событии.

При использовании этого API в теге он связывается с текущим событием. При использовании этого API в клиенте его необходимо привязать к конкретному событию с помощью функции bindToEvent API runContainer . Дополнительные сведения см. в примере .

Синтаксис

const addEventCallback = require('addEventCallback');

addEventCallback((containerId, eventData) => {
  // Take some action based on the event data.
});

Параметры

Параметр Тип Описание
callback функция Функция, которая будет вызвана в конце события.

Объект eventData содержит следующие данные:

Имя ключа Тип Описание
tags Множество Массив объектов данных тегов. Каждый тег, сработавший во время события, будет иметь запись в этом массиве. Объект данных тега содержит идентификатор тега ( id ), статус выполнения ( status ) и время выполнения ( executionTime ). Данные тега также будут включать дополнительные метаданные тега, настроенные для тега.

Пример

У клиента:

const addEventCallback = require('addEventCallback');
const claimRequest = require('claimRequest');
const extractEventsFromMpv1 = require('extractEventsFromMpv1');
const logToConsole = require('logToConsole');
const returnResponse = require('returnResponse');
const runContainer = require('runContainer');

claimRequest();

const events = extractEventsFromMpv1();
let eventsCompleted = 0;
events.forEach((evt, i) => {
  runContainer(evt, /* onComplete= */ (bindToEvent) => {
    bindToEvent(addEventCallback)((containerId, eventData) => {
      logToConsole('Event Number: ' + i);
      eventData.tags.forEach((tag) => {
        logToConsole('Tag ID: ' + tag.id);
        logToConsole('Tag Status: ' + tag.status);
        logToConsole('Tag Execution Time: ' + tag.executionTime);
      });
    });
    if (events.length === ++eventsCompleted) {
      returnResponse();
    }
  });
});

В теге:

const addEventCallback = require('addEventCallback');

addEventCallback((containerId, eventData) => {
  // This will be called at the end of the current event.
});

Соответствующие разрешения

read_event_metadata


callLater

Планирует асинхронный вызов функции. Функция будет вызвана после возврата из текущего кода. Это эквивалентно вызову setTimeout(<function>, 0) .

Пример

const callLater = require('callLater');
const logToConsole = require('logToConsole');

callLater(() => {
  logToConsole('Logged asynchronously');
});

Синтаксис

callLater(function)

Параметры

Параметр Тип Описание
function функция Функция, которую нужно вызвать.

Соответствующие разрешения

Никто.


claimRequest

Используйте этот API в клиенте для подтверждения запроса. После подтверждения запроса контейнер не сможет запускать дополнительные клиенты.

Этот API генерирует исключение, если вызывается внутри тега или переменной. Этот API генерирует исключение, если вызывается после возврата клиента (например, если вызывается в асинхронном коллбэке, таком как callLater или функция onComplete runContainer ).

Перед вызовом API runContainer клиент должен подтвердить запрос, используя этот API.

Пример

const claimRequest = require('claimRequest');

claimRequest();

Синтаксис

claimRequest();

Соответствующие разрешения

Никто.


computeEffectiveTldPlusOne

Возвращает эффективный домен верхнего уровня + 1 (eTLD+1) заданного домена или URL. eTLD+1 вычисляется путем сравнения домена с правилами публичного списка суффиксов . eTLD+1 обычно представляет собой домен самого высокого уровня, для которого можно установить cookie.

Если аргумент равен null или undefined, то значение аргумента возвращается без изменений. В противном случае аргумент преобразуется в строку. Если аргумент не является допустимым доменом или URL-адресом, то возвращается пустая строка. Если сервер не может получить список общедоступных суффиксов, то значение аргумента возвращается без изменений.

Пример

const computeEffectiveTldPlusOne = require('computeEffectiveTldPlusOne');

// Returns 'example.co.uk'
computeEffectiveTldPlusOne('analytics.example.co.uk');

// Returns 'example.co.uk'
computeEffectiveTldPlusOne('https://analytics.example.co.uk/path');

Синтаксис

computeEffectiveTldPlusOne(domainOrUrl);

Параметры

Параметр Тип Описание
domainOrUrl нить Домен или URL-адрес, для которого вычисляется eTLD+1.

Соответствующие разрешения

Никто.


createRegex

Создает новый экземпляр регулярного выражения и возвращает его, обернутый в объект. Вы не можете получить доступ к регулярному выражению напрямую. Однако вы можете передать его в API testRegex , а также в методы String.replace() , String.match() и String.search() .

Возвращает null если регулярное выражение недействительно или Re2 недоступен на сервере.

Этот API использует реализацию Re2 . Образ Docker сервера должен быть версии 2.0.0 или более поздней.

Пример

const createRegex = require('createRegex');

const domainRegex = createRegex('\\w+\\.com', 'i');

// Returns '/foobar'
'example.com/foobar'.replace(domainRegex, '');

Синтаксис

createRegex(pattern, flags);

Параметры

Параметр Тип Описание
pattern нить Текст регулярного выражения.
flags нить Необязательная строка, содержащая флаги для создаваемого регулярного выражения. Поддерживаются `g` (глобальный) и `i` (игнорировать регистр). Все остальные символы игнорируются без уведомления.

Соответствующие разрешения

Никто.

Минимальная версия изображения

2.0.0


decodeUri

Декодирует все закодированные символы в предоставленном URI. Возвращает строку , представляющую декодированный URI. Возвращает undefined если предоставлен недопустимый ввод.

Пример

const decodeUri = require('decodeUri');

const decodedUrl = decodeUri(data.encodedUrl);
if (decodedUrl) {
  // ...
}

Синтаксис

decodeUri(encoded_uri);

Параметры

Параметр Тип Описание
encoded_uri нить URI, закодированный с помощью encodeUri() или иным способом.

Соответствующие разрешения

Никто.


decodeUriComponent

Декодирует все закодированные символы в предоставленном компоненте URI. Возвращает строку , представляющую декодированный компонент URI. Возвращает undefined при получении недопустимых входных данных.

Пример

const decodeUriComponent = require('decodeUriComponent');

const decodedQuery = decodeUriComponent(data.query);
if (decodedQuery) {
  // ...
}

Синтаксис

decodeUriComponent(encoded_uri_component);

Параметры

Параметр Тип Описание
encoded_uri_component нить Компонент URI, закодированный с помощью encodeUriComponent() или иным способом.

Соответствующие разрешения

Никто.


encodeUri

Возвращает закодированный унифицированный идентификатор ресурса (URI) путем экранирования специальных символов. Возвращает строку , представляющую предоставленную строку, закодированную как URI.

Пример

const encodeUri = require('encodeUri');
const sendHttpGet = require('sendHttpGet');

sendHttpGet('https://www.example.com/' + encodeUri(pathInput));

Синтаксис

encodeUri(uri);

Параметры

Параметр Тип Описание
uri нить Полный URI.

Соответствующие разрешения

Никто.


encodeUriComponent

Возвращает закодированный унифицированный идентификатор ресурса (URI) путем экранирования специальных символов. Возвращает строку , представляющую предоставленную строку, закодированную как URI.

Пример

const encodeUriComponent = require('encodeUriComponent');
const sendHttpGet = require('sendHttpGet');

sendHttpGet('https://www.example.com/?' + encodeUriComponent(queryInput));

Синтаксис

encodeUriComponent(str);

Параметры

Параметр Тип Описание
str нить Компонент URI.

Соответствующие разрешения

Никто.


extractEventsFromMpv1

Преобразует входящий запрос протокола Measurement Protocol V1 в список событий в формате Unified Schema. Возвращает список извлеченных событий. Генерирует ошибку, если запрос имеет неправильный формат.

Пример

const extractEventsFromMpv1 = require('extractEventsFromMpv1');
const isRequestMpv1 = require('isRequestMpv1');

if (isRequestMpv1()) {
  const events = extractEventsFromMpv1();
  for (let i = 0; i < events.length; ++i) {
    const event = events[i];
    // Process event.
  }
}

Синтаксис

extractEventsFromMpv1();

Соответствующие разрешения

Требуется разрешение read_request ). Разрешение должно быть настроено таким образом, чтобы обеспечить доступ как минимум к:

  • body
  • query parameters

extractEventsFromMpv2

Преобразует входящий запрос протокола Measurement Protocol V2 в список событий в формате Unified Schema. Возвращает список извлеченных событий. Генерирует ошибку, если запрос имеет неправильный формат.

Пример

const extractEventsFromMpv2 = require('extractEventsFromMpv2');
const isRequestMpv2 = require('isRequestMpv2');

if (isRequestMpv2()) {
  const events = extractEventsFromMpv2();
  for (let i = 0; i < events.length; ++i) {
    const event = events[i];
    // Process event.
  }
}

Синтаксис

extractEventsFromMpv2();

Соответствующие разрешения

Требуется разрешение read_request ). Разрешение должно быть настроено таким образом, чтобы обеспечить доступ как минимум к:

  • body
  • query parameters

fromBase64

Декодирует строку, закодированную в формате Base64. Возвращает undefined если входные данные недействительны.

Синтаксис

fromBase64(base64EncodedString);

Параметры

Параметр Тип Описание
base64EncodedString нить Строка, закодированная в Base64.

Пример

const fromBase64 = require('fromBase64');

const greeting = fromBase64('aGVsbG8=');
if (greeting === 'hello') {
  // ...
}

Соответствующие разрешения

Никто.


generateRandom

Возвращает случайное число (целое число) в заданном диапазоне.

Пример

const generateRandom = require('generateRandom');

const randomValue = generateRandom(0, 10000000);

Синтаксис

generateRandom(min, max);

Параметры

Параметр Тип Описание
min число Минимальное потенциальное значение возвращаемого целого числа (включительно).
max число Максимально возможное значение возвращаемого целого числа (включительно).

Соответствующие разрешения

Никто.


getAllEventData

Возвращает копию данных события.

Синтаксис

getAllEventData();

Соответствующие разрешения

read_event_data


getClientName

Возвращает строку , содержащую имя текущего клиента.

Синтаксис

getClientName();

Соответствующие разрешения

read_container_data


getContainerVersion

Возвращает объект , содержащий данные о текущем контейнере. Возвращаемый объект будет иметь следующие поля:

{
  containerId: string,
  debugMode: boolean,
  environmentName: string,
  environmentMode: boolean,
  previewMode: boolean,
  version: string,
}

Пример

const getContainerVersion = require('getContainerVersion');

const containerVersion = getContainerVersion();
const containerId = containerVersion['containerId'];
const isDebug = containerVersion['debugMode'];

Синтаксис

getContainerVersion();

Соответствующие разрешения

read_container_data


getCookieValues

Возвращает массив, содержащий значения всех файлов cookie с заданным именем.

Пример

const getCookieValues = require('getCookieValues');

const lastVisit = getCookieValues('lastVisit')[0];
if (lastVisit) {
  // ...
}

Синтаксис

getCookieValues(name[, noDecode]);

Параметры

Параметр Тип Описание
name нить Название файла cookie.
noDecode логический Если true , значения cookie не будут декодированы перед возвратом. По умолчанию — false .

Соответствующие разрешения

get_cookies


getEventData

Возвращает копию значения по указанному пути в данных события. Возвращает undefined если данные события отсутствуют или если значение по указанному пути отсутствует.

Пример

const getEventData = require('getEventData');

const campaignId = getEventData('campaign.id');
const itemId = getEventData('items.0.id');
const referrer = getEventData('page_referrer');

Параметры

Параметр Тип Описание
keyPath любой Путь ключа, где компоненты пути разделены точками. Компонентами пути могут быть ключи в объекте или индексы в массиве. Если keyPath не является строкой, он преобразуется в строку.

Синтаксис

getEventData(keyPath);

Соответствующие разрешения

read_event_data


getGoogleAuth

Возвращает объект авторизации, который при использовании с sendHttpGet или sendHttpRequest будет включать заголовок авторизации для API Google Cloud. Этот API использует учетные данные приложения по умолчанию для автоматического поиска учетных данных в серверной среде.

Пример

const getGoogleAuth = require('getGoogleAuth');
const logToConsole = require('logToConsole');
const sendHttpGet = require('sendHttpGet');

const auth = getGoogleAuth({
  scopes: ['https://www.googleapis.com/auth/datastore']
});

sendHttpGet(
  'https://firestore.googleapis.com/v1/projects/my-project/databases/(default)/documents/collection/document',
  {authorization: auth}
).then((result) => {
  if (result.statusCode >= 200 && result.statusCode < 300) {
    logToConsole('Result: ' + result.body);
    data.gtmOnSuccess();
  } else {
    data.gtmOnFailure();
  }
});

Синтаксис

getGoogleAuth(scopes);

Параметры

Параметр Тип Описание
scopes Множество Набор областей действия Google API OAuth 2.0, для которых запрашивается доступ.

Соответствующие разрешения

Требуется разрешение use_google_credentials . Разрешение должно быть настроено с одним или несколькими разрешенными областями действия.


getGoogleScript

Получает ресурс из заранее определенного набора скриптов Google и возвращает промис , содержащий скрипт и связанные с ним метаданные для кэширования.

Промис разрешится в объект, содержащий два ключа: script и metadata . Если запрос не удастся, промис будет отклонен с указанием reason .

Объект metadata будет содержать следующие метаданные кэширования, основанные на заголовках ответа ресурса; каждое поле будет присутствовать только в том случае, если соответствующий заголовок присутствует в ответе ресурса.

{
  'cache-control': string,
  'expires': string,
  'last-modified': string,
}

Пример

const getGoogleScript = require('getGoogleScript');

getGoogleScript('ANALYTICS').then((result) => {
  // Operate on result.script and result.metadata here.
});

Синтаксис

getGoogleScript(script[, options]);

Параметры

Параметр Тип Описание
script нить Название скрипта. Поддерживаются скрипты 'ANALYTICS' , 'GTAG' и 'GTM' .

Опция 'ANALYTICS' загружает скрипт Google Analytics с https://www.google-analytics.com/analytics.js .

Опция 'GTAG' загружает глобальный скрипт тега сайта (gtag.js) с https://www.googletagmanager.com/gtag/js .

Опция 'GTM' загружает скрипт Google Tag Manager с https://www.googletagmanager.com/gtm.js .
options объект Дополнительные параметры запроса. Список поддерживаемых вариантов см. ниже.

Параметры

Вариант Тип Описание
id нить Применимо к 'GTAG' с идентификатором измерения gtag и 'GTM' с идентификатором веб-контейнера (например, GTM-XXXX).
debug любой Если значение истинно, запрашивает и возвращает отладочную версию скрипта измерений.
timeout число Время ожидания запроса в миллисекундах; неположительные значения игнорируются. Если запрос истекает по таймауту, будет вызвана функция обратного вызова с значением скрипта undefined и объектом метаданных {} .

Нераспознанные клавиши параметров игнорируются.

Соответствующие разрешения

Требуется разрешение send_http . Разрешение должно быть настроено таким образом, чтобы обеспечить доступ как минимум к:

  • Разрешить домены Google

getRemoteAddress

Возвращает строковое представление IP-адреса, с которого был отправлен запрос, например, 12.345.67.890 для IPv4 или 2001:0db8:85a3:0:0:8a2e:0370:7334 для IPv6, путем чтения заголовков запроса, таких как Forwarded и X-Forwarded-For. Примечание: этот API прилагает все усилия для определения исходного IP-адреса, но не может гарантировать точность результата.

Синтаксис

getRemoteAddress();

Соответствующие разрешения

Требуется разрешение read_request ). Разрешение должно быть настроено таким образом, чтобы обеспечить доступ как минимум к:

  • Заголовки Forwarded и X-Forwarded-For
  • Удаленный IP-адрес

getRequestBody

Возвращает тело запроса в виде строки , если оно присутствует, или undefined в противном случае.

Синтаксис

getRequestBody();

Соответствующие разрешения

read_request


getRequestHeader

Возвращает значение указанного заголовка запроса в виде строки , если он присутствует, или undefined в противном случае. Если заголовок повторяется, возвращаемые значения объединяются с помощью ', ' .

Пример

const getRequestHeader = require('getRequestHeader');

const host = getRequestHeader('host');

Синтаксис

getRequestHeader(headerName);

Параметры

Параметр Тип Описание
headerName нить Название заголовка. Регистр символов не имеет значения.

Соответствующие разрешения

read_request


getRequestMethod

Возвращает метод запроса, например 'GET' или 'POST' , в виде строки .

Пример

const getRequestMethod = require('getRequestMethod');

if (getRequestMethod() === 'POST') {
  // Handle the POST request here.
}

Синтаксис

getRequestMethod();

Соответствующие разрешения

Никто.


getRequestPath

Возвращает путь запроса без строки запроса. Например, если URL — '/foo?id=123' , возвращается '/foo' . Автоматически удаляет префикс URL-адреса контейнера сервера из пути. Например, если URL-адрес контейнера сервера — https://example.com/analytics , а путь запроса — '/analytics/foo' , возвращается '/foo' .

Пример

const getRequestPath = require('getRequestPath');

const requestPath = getRequestPath();
if (requestPath === '/') {
  // Handle a request for the root path.
}

Синтаксис

getRequestPath();

Соответствующие разрешения

read_request


getRequestQueryParameter

Возвращает декодированное значение именованного параметра строки запроса в виде строки или undefined , если параметр отсутствует. Если параметр повторяется в строке запроса, будет возвращено первое значение, которое встречается в строке запроса.

Пример

const getRequestQueryParameter = require('getRequestQueryParameter');

const query = getRequestQueryParameter('query');
if (query) {
  // Process query here.
}

Синтаксис

getRequestQueryParameter(name);

Параметры

Параметр Тип Описание
name нить Имя параметра запроса.

Соответствующие разрешения

read_request


getRequestQueryParameters

Возвращает параметры запроса входящего HTTP-запроса в виде объекта, сопоставляющего имена параметров запроса с соответствующими значениями. Имена и значения параметров декодируются.

Пример

const getRequestQueryParameters = require('getRequestQueryParameters');

const queryParameters = getRequestQueryParameters();
if (queryParameters['search']) {
  // Handle the search query here.
  const maxResults = queryParameters['max_results'];
}

Синтаксис

getRequestQueryParameters();

Соответствующие разрешения

read_request


getRequestQueryString

Возвращает текст запроса в виде строки без вопросительного знака в начале или пустую строку, если URL-адрес запроса не содержит строки запроса.

Пример

const getRequestQueryString = require('getRequestQueryString');

const queryString = getRequestQueryString();
if (queryString !== '') {
  // Handle the query string.
}

Синтаксис

getRequestQueryString();

Соответствующие разрешения

read_request


getTimestamp

Устарело. Предпочтительнее использовать getTimestampMillis .

Возвращает число , представляющее текущее время в миллисекундах с начала эпохи Unix, как это было возвращено функцией Date.now() .

Синтаксис

getTimestamp();

Соответствующие разрешения

Никто.


getTimestampMillis

Возвращает число , представляющее текущее время в миллисекундах с начала эпохи Unix, как это было возвращено функцией Date.now() .

Синтаксис

getTimestampMillis();

Соответствующие разрешения

Никто.


getType

Возвращает строку, описывающую тип заданного значения.

Тип ввода Возвращаемое значение
нить 'string'
число 'number'
логический 'boolean'
нулевой 'null'
неопределенный 'undefined'
Множество 'array'
Объект 'object'
Функция 'function'

Пример

const getType = require('getType');

const type = getType(value);
if (type === 'string') {
  // Handle string input.
} else if (type === 'number') {
  // Handle numeric input.
} else {
  logToConsole('Unsupported input type: ', type);
}

Синтаксис

getType(value);

Параметры

Параметр Тип Описание
value любой Входное значение.

Соответствующие разрешения

Никто.


hmacSha256

Вычисляет закодированную подпись с использованием хеш-кода аутентификации сообщений (HMAC) и алгоритма SHA-256. По умолчанию используется кодировка base64url .

Для использования этого API установите переменную среды SGTM_CREDENTIALS на сервере, указав путь к файлу ключа JSON в кодировке UTF-8 со следующим форматом:

{
  "keys": {
    "key1": "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5",
    "key2": "OTg3NjU0MzIxMHp5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2Jh",
    ...
  }
}

Значения представляют собой закодированные в base64 ключи HMAC. Текст JSON не должен начинаться с маркера порядка байтов.

Пример

const hmacSha256 = require('hmacSha256');
const toBase64 = require('toBase64');

const header = toBase64('{"alg":"HS256","typ":"JWT"}', {urlEncoding: true});
const claim = toBase64('{"sub":"1234567890","iat":1698164946}', {urlEncoding: true});
const signature = hmacSha256(header + '.' + claim, 'key1');

const jwt = header + "." + claim + '.' + signature;

Синтаксис

hmacSha256(data, keyId, options)

Параметры

Параметр Тип Описание
data нить Данные для вычисления значения HMAC.
keyId нить Идентификатор ключа из JSON-файла, указывающий на используемый ключ.
options объект Дополнительная настройка API. (См. раздел «Параметры» ниже.)

Параметры

Вариант Тип Описание
outputEncoding нить Указывает формат кодировки возвращаемого значения. Поддерживаемые форматы: hex , base64 или base64url . По умолчанию используется base64url , если не указан.

Соответствующие разрешения

use_custom_private_keys

Минимальная версия изображения

1.0.0


isRequestMpv1

Возвращает true если входящий запрос является запросом по протоколу Measurement Protocol V1, или false в противном случае.

Пример

const isRequestMpv1 = require('isRequestMpv1');

if (isRequestMpv1()) {
  // Handle Measurement Protocol V1 request.
  const events = extractEventsFromMpv1();
}

Синтаксис

isRequestMpv1();

Соответствующие разрешения

Никто.


isRequestMpv2

Возвращает true если входящий запрос является запросом по протоколу Measurement Protocol V2, или false в противном случае.

Пример

const isRequestMpv2 = require('isRequestMpv2');

if (isRequestMpv2()) {
  // Handle Measurement Protocol V2 request.
  const events = extractEventsFromMpv2();
}

Синтаксис

isRequestMpv2();

Соответствующие разрешения

Никто.


logToConsole

Выводит свои аргументы в консоль.

Эти журналы отображаются в Logs Explorer в консоли Google Cloud. В Logs Explorer выполните запрос logName =~ "stdout" чтобы увидеть записи журналов, созданные этим API.

Пример

const logToConsole = require('logToConsole');

const that = 123;
const those = { ... };
logToConsole('that is: ', that, ' and those is: ', those);

Синтаксис

logToConsole(argument1[, argument2, ...]);

Параметры

API принимает один или несколько аргументов, каждый из которых при необходимости преобразуется в строку и выводится в консоль.

Соответствующие разрешения

logging


makeInteger

Преобразует заданное значение в число (целое число).

Синтаксис

makeInteger(value);

Параметры

Параметр Тип Описание
value любой тип Значение для конвертации.

Соответствующие разрешения

Никто.


makeNumber

Преобразует заданное значение в число .

Синтаксис

makeNumber(value);

Параметры

Параметр Тип Описание
value любой тип Значение для конвертации.

Соответствующие разрешения

Никто.


makeString

Возвращает заданное значение в виде строки .

Синтаксис

makeString(value);

Параметры

Параметр Тип Описание
value любой тип Значение для конвертации.

Соответствующие разрешения

Никто.


makeTableMap

Преобразует простой табличный объект с двумя столбцами в Map . Это используется для преобразования поля шаблона SIMPLE_TABLE с двумя столбцами в более удобный для управления формат.

Например, эта функция может преобразовать объект таблицы:

[
  {'key': 'k1', 'value': 'v1'},
  {'key': 'k2', 'value': 'v2'}
]

на карту:

{
  'k1': 'v1',
  'k2': 'v2'
}

Возвращает объект : преобразованная Map пар ключ-значение добавлена ​​в него, в противном случае — null .

Синтаксис

makeTableMap(tableObj, keyColumnName, valueColumnName);

Параметры

Параметр Тип Описание
tableObj Список Объект таблицы, который необходимо преобразовать. Это список карт, где каждая Map представляет собой строку в таблице. Имя свойства в объекте строки — это имя столбца, а значение свойства — это значение столбца в строке.
keyColumnName нить Название столбца, значения которого станут ключами в преобразованной Map .
valueColumnName нить Название столбца, значения которого станут значениями в преобразованной Map .

Соответствующие разрешения

Никто.


parseUrl

Возвращает объект, содержащий все составляющие части заданного URL-адреса, аналогично объекту URL .

Для некорректно сформированных URL-адресов этот API вернет undefined . Для правильно отформатированных URL-адресов поля, отсутствующие в строке URL, будут иметь значение пустой строки, или, в случае searchParams , пустой объект.

Возвращаемый объект будет содержать следующие поля:

{
  href: string,
  origin: string,
  protocol: string,
  username: string,
  password: string,
  host: string,
  hostname: string,
  port: string,
  pathname: string,
  search: string,
  searchParams: Object<string, (string|Array)>,
  hash: string,
}

Пример

const parseUrl = require('parseUrl');

const urlObject = parseUrl('https://abc:xyz@example.com:8080/foo?param=val%2Cue#bar');

Синтаксис

parseUrl(url);

Параметры

Параметр Тип Описание
url нить Полный URL-адрес, который будет проанализирован.

Соответствующие разрешения

Никто.


returnResponse

Отправляет ответ, ранее заданный другими шаблонами, используя API, изменяющие ответ, включая setCookie , setPixelResponse , setResponseBody , setResponseHeader и setResponseStatus . По умолчанию используется HTTP-статус-код 200, пустое тело ответа и отсутствие заголовков.

Рекомендуется использовать этот API из клиентского шаблона.

Синтаксис

returnResponse();

Пример

См. пример runContainer .

Соответствующие разрешения

return_response


runContainer

Выполняет логику контейнера (переменные, триггеры, теги) в рамках события. Если этот API вызывается во время выполнения контейнера, контейнер запускается снова.

Коллбэки onComplete и onStart получают функцию с именем bindToEvent . Используйте bindToEvent для выполнения API в контексте события. Дополнительные сведения см. в примере addEventCallback .

Рекомендуется использовать этот API из клиентского шаблона.

Пример

const returnResponse = require('returnResponse');
const runContainer = require('runContainer');

// Runs the container with a simple pageview event and then returns a response.
runContainer({'event_name': 'pageview'}, () => returnResponse());

Синтаксис

runContainer(event, onComplete, onStart);

Параметры

Параметр Тип Описание
event объект Параметры события.
onComplete функция Функция обратного вызова, которая срабатывает после завершения обработки всех тегов.
onStart функция Функция обратного вызова, которая срабатывает немедленно, до начала обработки тегов.

Соответствующие разрешения

run_container


sendEventToGoogleAnalytics

Отправляет одно событие с использованием Common Event Data в Google Analytics и возвращает промис , который разрешается в объект с ключом location или отклоняется в объект с ключом reason . Место назначения, Google Analytics, определяется на основе идентификатора измерения в данных события.

Поле location устанавливается в значение заголовка location , если он присутствует.

Пример

const logToConsole = require('logToConsole');
const sendEventToGoogleAnalytics = require('sendEventToGoogleAnalytics');
const setResponseHeader = require('setResponseHeader');
const setResponseStatus = require('setResponseStatus');

// Sends an event to Google Analytics and returns failure if the request did not
// succeed. Additionally, if the request resulted in a redirect request, the
// code nominates a redirect response to be returned.
sendEventToGoogleAnalytics(event).then((response) => {
  if (response.location) {
    setResponseHeader('location', response.location);
    setResponseStatus(302);
  } else {
    setResponseStatus(200);
  }
  data.gtmOnSuccess();
}).catch((error) => {
  logToConsole(error.reason);
  setResponseStatus(500);
  data.gtmOnFailure();
});

Синтаксис

sendEventToGoogleAnalytics(event);

Параметры

Параметр Тип Описание
event объект Событие представлено в формате унифицированной схемы.

Соответствующие разрешения

Требуется разрешение send_http . Разрешение должно быть настроено таким образом, чтобы обеспечить доступ как минимум к:

  • Разрешить домены Google

sendHttpGet

Выполняет HTTP GET-запрос к указанному URL и возвращает промис , который разрешается с результатом после завершения запроса или истечения времени ожидания.

Результатом запроса является объект, содержащий три ключа: statusCode , headers и body . Если запрос не удался (например, неверный URL, отсутствие маршрута к хосту, ошибка согласования SSL и т. д.), промис будет отклонен с ошибкой: {reason: 'failed'} . Если был установлен параметр timeout и запрос истек по времени, промис будет отклонен с ошибкой: {reason: 'timed_out'}

Пример

const sendHttpGet = require('sendHttpGet');

// Returns the response body as the value for a variable.
return sendHttpGet('https://example.com/item/' + data.itemId, {
  headers: {key: 'value'},
  timeout: 500,
}).then((result) => result.body, () => undefined);

Синтаксис

sendHttpGet(url[, options]);

Параметры

Параметр Тип Описание
url нить Запрошенный URL.
options объект Дополнительные параметры запроса. (См. раздел «Параметры» ниже.)

Параметры

Вариант Тип Описание
headers нить Дополнительные заголовки запроса.
timeout число Время ожидания в миллисекундах, после которого запрос будет прерван. По умолчанию — 15000 .
authorization объект Необязательный объект авторизации из вызова функции getGoogleAuth для включения заголовков авторизации при отправке запросов к googleapis.com .

Соответствующие разрешения

send_http


sendHttpRequest

Выполняет HTTP-запрос к указанному URL и возвращает промис , который разрешается с ответом после завершения запроса или истечения времени ожидания.

Результатом запроса является объект, содержащий три ключа: statusCode , headers и body . Если запрос не удался (например, неверный URL, отсутствие маршрута к хосту, ошибка согласования SSL и т. д.), промис будет отклонен с ошибкой: {reason: 'failed'} . Если был установлен параметр timeout и запрос истек по времени, промис будет отклонен с ошибкой: {reason: 'timed_out'}

Пример

const sendHttpRequest = require('sendHttpRequest');
const setResponseBody = require('setResponseBody');
const setResponseHeader = require('setResponseHeader');
const setResponseStatus = require('setResponseStatus');

const postBody = 'interaction=click&campaign=promotion&medium=email';
// Sends a POST request and nominates response based on the response to the POST
// request.
sendHttpRequest('https://example.com/collect', {
  headers: {key: 'value'},
  method: 'POST',
  timeout: 500,
}, postBody).then((result) => {
  setResponseStatus(result.statusCode);
  setResponseBody(result.body);
  setResponseHeader('cache-control', result.headers['cache-control']);
});

Синтаксис

sendHttpRequest(url[, options[, body]]);

Параметры

Параметр Тип Описание
url нить Запрошенный URL.
options объект Дополнительные параметры запроса. (См. раздел «Параметры» ниже.)
body нить Необязательное тело запроса.

Параметры

Вариант Тип Описание
headers нить Дополнительные заголовки запроса.
method объект Метод запроса. По умолчанию используется GET .
timeout число Время ожидания в миллисекундах, после которого запрос будет прерван. По умолчанию — 15000 .
authorization объект Необязательный объект авторизации из вызова функции getGoogleAuth для включения заголовков авторизации при отправке запросов к googleapis.com .

Соответствующие разрешения

send_http


sendPixelFromBrowser

Отправляет команду браузеру для загрузки указанного URL-адреса в виде тега <img> . Этот протокол команд поддерживается в веб-тегах Google Tag for Google Analytics и Google Analytics: GA Event . Необходимо настроить URL-адрес контейнера сервера. Дополнительные сведения см. в инструкциях .

Этот API возвращает false если входящий запрос не поддерживает протокол команд или если ответ уже был отправлен. В противном случае этот API возвращает true .

Пример:

const sendPixelFromBrowser = require('sendPixelFromBrowser');

sendPixelFromBrowser('https://example.com/?id=123');

Синтаксис

sendPixelFromBrowser(url)

Параметры

Параметр Тип Описание
url нить URL-адрес, который нужно отправить в браузер.

Соответствующие разрешения

send_pixel_from_browser


setCookie

Устанавливает или удаляет cookie-файл с указанными параметрами.

Для удаления cookie-файла необходимо создать cookie-файл с тем же путем и доменом, что и при создании cookie-файла, и присвоить ему значение expires, указывающее на прошлое, например "Thu, 01 Jan 1970 00:00:00 GMT" .

Обратите внимание, что для отправки ответа клиенту необходимо вызвать метод returnResponse .

Пример

const setCookie = require('setCookie');

// Sets an httpOnly cookie with a max-age of 3600.
setCookie('cookieName', 'cookieValue', {'max-age': 3600, httpOnly: true});

Синтаксис

setCookie(name, value[, options[, noEncode]]);

Параметры

Параметр Тип Описание
name нить Название файла cookie. Регистр символов не имеет значения.
value нить Значение cookie-файла.
options объект Дополнительные атрибуты cookie: domain , expires , fallbackDomain , httpOnly , max-age , path , secure и sameSite . (См. раздел «Параметры » ниже.)
noEncode логический Если значение истинно, то значение cookie не будет закодировано. По умолчанию — false .

Параметры

  • domain: Хост, на который будет отправлен cookie-файл. Если установлено специальное значение 'auto', то хост будет вычислен автоматически с использованием следующей стратегии:

    • eTLD+1 заголовка Forwarded , если он присутствует.
    • eTLD+1 заголовка X-Forwarded-Host , если он присутствует.
    • eTLD+1 заголовка Host .
  • expires : Максимальный срок действия cookie-файла. Это должна быть строка даты в формате UTC, например, "Sat, 26 Oct 1985 08:21:00 GMT". Если заданы и expires , и max-age , приоритет имеет max-age .

  • httpOnly : Если true запрещает JavaScript доступ к cookie.

  • max-age : Количество секунд до истечения срока действия cookie-файла. Ноль или отрицательное число приведет к немедленному удалению cookie-файла. Если заданы оба параметра expires и max-age , приоритет имеет max-age .

  • path : Путь, который должен присутствовать в запрашиваемом URL-адресе, иначе браузер не отправит заголовок Cookie.

  • secure : Если установлено значение true , cookie отправляется на сервер только при запросе с конечной точки https: :.

  • sameSite : Утверждает, что cookie-файл не должен отправляться с запросами из других источников. Должен быть 'strict' , 'lax' или 'none' .

Соответствующие разрешения

set_cookie


setPixelResponse

Устанавливает тело ответа в виде GIF-изображения размером 1x1, заголовок Content-Type в значение 'image/gif', задает заголовки кэширования таким образом, чтобы пользовательские агенты не кэшировали ответ, и устанавливает статус ответа в значение 200.

Обратите внимание, что для отправки ответа клиенту необходимо вызвать метод returnResponse .

Синтаксис

setPixelResponse();

Соответствующие разрешения

Требуется разрешение access_response . Разрешение должно быть настроено таким образом, чтобы обеспечить доступ как минимум к:

  • headers - Должны разрешать следующие ключи
    • content-type
    • cache-control
    • expires
    • pragma
  • body
  • status

setResponseBody

Устанавливает тело ответа в соответствии с аргументом.

Обратите внимание, что для отправки ответа клиенту необходимо вызвать метод returnResponse .

Синтаксис

setResponseBody(body[, encoding]);

Параметры

Параметр Тип Описание
body нить Значение, которое следует установить в качестве тела ответа.
encoding нить Кодировка символов тела ответа (по умолчанию 'utf8' ). Поддерживаемые значения: 'ascii' , 'utf8' , 'utf16le' , 'ucs2' , 'base64' , 'latin1' , 'binary' и 'hex' .

Соответствующие разрешения

Требуется разрешение access_response . Разрешение должно быть настроено таким образом, чтобы обеспечить доступ как минимум к:

  • body

setResponseHeader

Устанавливает заголовок в возвращаемом ответе. Если заголовок с таким именем (регистр не имеет значения) был ранее установлен этим API, то последующий вызов перезапишет или очистит значение, установленное предыдущим вызовом.

Обратите внимание, что для отправки ответа клиенту необходимо вызвать метод returnResponse .

Синтаксис

setResponseHeader(name, value);

Параметры

Параметр Тип Описание
name нить Название заголовка. Названия HTTP-заголовков нечувствительны к регистру, поэтому название заголовка будет написано строчными буквами.
value строка неопределена Значение заголовка. Если оно равно null или не определено, то этот заголовок удаляется из возвращаемого ответа.

Соответствующие разрешения

Требуется разрешение access_response . Разрешение должно быть настроено таким образом, чтобы обеспечить доступ как минимум к:

  • headers

setResponseStatus

Устанавливает HTTP-код состояния ответа, который будет возвращен.

Обратите внимание, что для отправки ответа клиенту необходимо вызвать метод returnResponse .

Синтаксис

setResponseStatus(statusCode);

Параметры

Параметр Тип Описание
statusCode число Код состояния HTTP, который необходимо вернуть.

Соответствующие разрешения

Требуется разрешение access_response . Разрешение должно быть настроено таким образом, чтобы обеспечить доступ как минимум к:

  • status

sha256

Вычисляет дайджест SHA-256 входных данных и вызывает функцию обратного вызова с дайджестом, закодированным в base64, если только объект options не указывает другую кодировку выходных данных.

Данная сигнатура и поведение API соответствуют API sha256 для веб-контейнеров; однако для упрощения кода в пользовательских шаблонах в серверных контейнерах следует использовать API sha256Sync .

Пример

const encodeUriComponent = require('encodeUriComponent');
const sendHttpGet = require('sendHttpGet');
const sha256 = require('sha256');

sha256('inputString', (digest) => {
  sendHttpGet('https://example.com/collect?id=' + encodeUriComponent(digest));
});

sha256('inputString', (digest) => {
  sendHttpGet('https://example.com/collect?id=' + encodeUriComponent(digest));
}, {outputEncoding: 'hex'});

Синтаксис

sha256(input, onSuccess, options = undefined);

Параметры

Параметр Тип Описание
input нить Строка для хеширования.
onSuccess функция Вызов осуществляется с полученным дайджестом, закодированным в base64, если объект options не указывает другую кодировку вывода.
options объект Необязательный объект параметров для указания кодировки выходных данных. Если указан, объект должен содержать ключ outputEncoding со значением, равным одному из base64 или hex .

Соответствующие разрешения

Никто.


sha256Sync

Вычисляет и возвращает дайджест SHA-256 входных данных, закодированный в base64, если в объекте options не указана другая кодировка выходных данных.

Пример

const encodeUriComponent = require('encodeUriComponent');
const sendHttpGet = require('sendHttpGet');
const sha256Sync = require('sha256Sync');

const digestBase64 = sha256Sync('inputString');
const digestHex = sha256Sync('inputString', {outputEncoding: 'hex'});
sendHttpGet('https://example.com/collect?id=' + encodeUriComponent(digestBase64));
sendHttpGet('https://example.com/collect?id=' + encodeUriComponent(digestHex));

Синтаксис

sha256Sync(input, options = undefined);

Параметры

Параметр Тип Описание
input нить Строка для хеширования.
options объект Необязательный объект параметров для указания кодировки выходных данных. Если указан, объект должен содержать ключ outputEncoding со значением, равным одному из base64 или hex .

Соответствующие разрешения

Никто.


templateDataStorage

Возвращает объект с методами для доступа к хранилищу данных шаблона. Хранилище данных шаблона позволяет совместно использовать данные между выполнениями одного шаблона. Данные, хранящиеся в хранилище данных шаблона, сохраняются на сервере, на котором запущен контейнер. В большинстве случаев контейнер работает на нескольких серверах, поэтому хранение данных в хранилище данных шаблона не гарантирует, что каждый последующий запрос будет иметь доступ к этим данным.

Приставка «data» в названии «templateDataStorage» указывает на то, что с помощью этого API можно хранить только простые типы данных, не являющиеся функциями. Любые функции или ссылки на функции, переданные в API, будут храниться как null .

Синтаксис

const templateDataStorage = require('templateDataStorage');

// Returns a copy of the value stored for the given key, or null if nothing
// is stored with that key.
templateDataStorage.getItemCopy(key);

// Stores a copy of the value for the given key (or removes the data stored
// for the given key if the input value is null).
templateDataStorage.setItemCopy(key, value);

// Removes the value stored for the given key, if present.
templateDataStorage.removeItem(key);

// Deletes all values stored for the current template.
templateDataStorage.clear();

Пример

const sendHttpGet = require('sendHttpGet');
const setResponseBody = require('setResponseBody');
const setResponseStatus = require('setResponseStatus');
const templateDataStorage = require('templateDataStorage');

// Check to see if the item is in the cache.
const cachedBody = templateDataStorage.getItemCopy(data.key);
if (cachedBody) {
  setResponseBody(cachedBody);
  data.gtmOnSuccess();
  return;
}

sendHttpGet(data.url).then((result) => {
  if (result.statusCode >= 200 && result.statusCode < 300) {
    setResponseBody(result.body);
    templateDataStorage.setItemCopy(data.key, result.body);
    data.gtmOnSuccess();
  } else {
    data.gtmOnFailure();
  }
  setResponseStatus(result.statusCode);
});

Соответствующие разрешения

access_template_storage


testRegex

Проверяет строку на соответствие регулярному выражению, созданному с помощью API createRegex . Возвращает true если регулярное выражение совпадает. В противном случае возвращает false .

Регулярное выражение, созданное с использованием глобального флага, является состоянием. Подробности см. в документации по регулярным выражениям .

Пример

const createRegex = require('createRegex');
const testRegex = require('testRegex');

const domainRegex = createRegex('\\w+\\.com', 'i');

// createRegex returns null if the regex is invalid or Re2 is not available.
if (domainRegex === null) return;

// Returns true
testRegex(domainRegex, 'example.com/foobar');

Синтаксис

testRegex(regex, string);

Параметры

Параметр Тип Описание
regex Объект Регулярное выражение для проверки, возвращаемое API функции createRegex.
string нить Тестовая строка для проверки.

Соответствующие разрешения

Никто.


toBase64

Кодирует строку в формате base64 или base64url. По умолчанию используется кодировка base64.

Синтаксис

toBase64(input, options);

Параметры

Параметр Тип Описание
input нить Строка для кодирования.
options объект Дополнительная настройка API. (См. раздел «Параметры» ниже.)

Параметры

Вариант Тип Описание Минимальная версия
urlEncoding логический Если это так, результат будет закодирован с использованием формата base64url . 1.0.0

Пример

const toBase64 = require('toBase64');

const base64Hello = toBase64('hello');
const base64UrlHello = toBase64('hello', {urlEncoding: true});

Соответствующие разрешения

Никто.


BigQuery

Возвращает объект, предоставляющий функции BigQuery.

Функция BigQuery.insert позволяет записывать данные в таблицу BigQuery. Она возвращает промис , который разрешается при успешной вставке или отклоняется при ошибке.

Если вставка прошла успешно, обещание разрешается без аргументов.

Если вставка не удалась, промис отклоняется со списком объектов, содержащих причину ошибки и, возможно, объект строки, если произошла ошибка. Возможно, что часть запроса будет выполнена успешно, а другие части — нет. В этом случае промис отклоняется со списком ошибок для каждой строки, содержащим объект строки, помогающий определить, какие строки были вставлены (см. примеры ошибок ниже). Дополнительную информацию см. в документации BigQuery по сообщениям об ошибках .

Синтаксис

BigQuery.insert(connectionInfo, rows[, options]);

Параметры

Параметр Тип Описание
connectionInfo объект Определяет информацию, необходимую для подключения к таблице BigQuery. Имеется один необязательный и два обязательных параметра:
  • projectIdнеобязательный идентификатор проекта Google Cloud Platform. Если он опущен, projectId извлекается из переменной среды GOOGLE_CLOUD_PROJECT , если параметр разрешения access_bigquery для идентификатора проекта установлен на * или GOOGLE_CLOUD_PROJECT . Если контейнер сервера работает в Google Cloud, GOOGLE_CLOUD_PROJECT уже будет установлена ​​на идентификатор проекта Google Cloud.
  • datasetId - Идентификатор набора данных BigQuery.
  • tableId - Идентификатор таблицы BigQuery.
rows Множество Строки, которые нужно вставить в таблицу.
options объект Дополнительные параметры запроса. Поддерживаются следующие параметры: ignoreUnknownValues ​​и skipInvalidRows . Неизвестные ключи параметров игнорируются. (См. раздел «Параметры» ниже.)

Параметры

Параметр Тип Описание
ignoreUnknownValues логический Если установлено true , то принимаются строки, содержащие значения, не соответствующие схеме. Неизвестные значения игнорируются. По умолчанию — false .
skipInvalidRows логический Если установлено значение true , то будут вставлены все допустимые строки запроса, даже если существуют недопустимые строки. По умолчанию — false .

Примеры ошибок

Ошибка «модуль не найден» означает, что в вашем серверном контейнере, вероятно, используется более старая версия нашего образа, в которой модуль BigQuery еще не включен. Пожалуйста, повторно разверните ваш серверный контейнер с теми же настройками, используя наш скрипт развертывания . Модуль будет автоматически добавлен после завершения операции.

Ошибка, не связанная с вставкой, обычно имеет один объект ошибки с ключом reason :

[{reason: 'invalid'}]

Ошибка вставки может содержать несколько объектов error, включая массив errors и объект row . Ниже приведён пример ответа об ошибке при вставке двух строк, где ошибка обнаружена только в одной строке:

[
  {
    "errors": [
      {
        "reason":"invalid"
      }
    ],
    "row": {
      "string_col":"otherString",
      "number_col":-3,
      "bool_col":3
    }
  },
  {
    "errors": [
      {
        "reason":"stopped"
      }
    ],
    "row": {
      "string_col":"stringValue",
      "number_col":5,
      "bool_col:false
    }
  }
]

Пример

const BigQuery = require('BigQuery');

const connectionInfo = {
  'projectId': 'gcp-cloud-project-id',
  'datasetId': 'destination-dataset',
  'tableId': 'destination-table',
};

const rows = [{
  'column1': 'String1',
  'column2': 1234,
}];

const options = {
  'ignoreUnknownValues': true,
  'skipInvalidRows': false,
};

BigQuery.insert(connectionInfo, rows, options)
  .then(data.gtmOnSuccess, data.gtmOnFailure);

Соответствующие разрешения

access_bigquery


Firestore

Возвращает объект, предоставляющий функции Firestore.

Этот API поддерживает только Firestore в нативном режиме , а не Firestore в режиме хранилища данных . Кроме того, API поддерживает только использование базы данных по умолчанию .

Firestore.read

Функция Firestore.read считывает данные из документа Firestore и возвращает промис , который разрешается в объект, содержащий два ключа: id и data . Если документ не существует, промис отклоняется с объектом, содержащим ключ reason равный not_found .

Синтаксис

Firestore.read(path[, options]);

Параметры

Параметр Тип Описание
path нить Путь к документу или коллекции. Не должен начинаться или заканчиваться символом '/'.
options объект Дополнительные параметры запроса. Поддерживаются следующие параметры: projectId , disableCache и transaction . Неизвестные ключи параметров игнорируются. (См. раздел «Параметры » ниже.)

Параметры

Параметр Тип Описание
projectId нить Необязательный параметр . Идентификатор проекта Google Cloud Platform. Если он опущен, идентификатор projectId извлекается из переменной среды GOOGLE_CLOUD_PROJECT если параметр разрешения access_firestore для идентификатора проекта установлен на * или GOOGLE_CLOUD_PROJECT . Если контейнер сервера работает в Google Cloud, GOOGLE_CLOUD_PROJECT уже будет установлена ​​на идентификатор проекта Google Cloud.
disableCache логический Необязательный параметр . Определяет, следует ли отключать кэширование. Кэширование включено по умолчанию, в этом случае результаты будут кэшироваться на время выполнения запроса.
transaction нить Необязательный параметр . Значение, полученное из метода Firestore.runTransaction(). Указывает операцию, которая будет использоваться в рамках транзакции.

Пример

const Firestore = require('Firestore');

return Firestore.read('collection/document', {
  projectId: 'gcp-cloud-project-id',
}).then((result) => result.data.key, () => undefined);

Firestore.write

Функция Firestore.write записывает данные в документ или коллекцию Firestore. Если путь указывает на коллекцию, будет создан документ со случайно сгенерированным идентификатором. Если путь указывает на документ, который не существует, он будет создан. Этот API возвращает промис, который разрешается в идентификатор добавленного или измененного документа. Если используется опция транзакции, API также возвращает промис, но он не будет содержать идентификатор, поскольку запись выполняется пакетами.

Синтаксис

Firestore.write(path, input[, options]);

Параметры

Параметр Тип Описание
path нить Путь к документу или коллекции. Не должен начинаться или заканчиваться символом '/'.
input объект Значение, которое нужно записать в документ. Если задан параметр слияния, API объединит ключи из входных данных с документом.
options объект Дополнительные параметры запроса. Поддерживаются следующие параметры: projectId , merge и transaction . Неизвестные ключи параметров игнорируются. (См. раздел «Параметры » ниже.)

Параметры

Параметр Тип Описание
projectId нить Необязательный параметр . Идентификатор проекта Google Cloud Platform. Если он опущен, идентификатор projectId извлекается из переменной среды GOOGLE_CLOUD_PROJECT если параметр разрешения access_firestore для идентификатора проекта установлен на * или GOOGLE_CLOUD_PROJECT . Если контейнер сервера работает в Google Cloud, GOOGLE_CLOUD_PROJECT уже будет установлена ​​на идентификатор проекта Google Cloud.
merge логический Необязательный параметр . Если установлено значение true , то ключи из поля ввода объединяются с документом; в противном случае метод переопределит весь документ. По умолчанию — false .
transaction нить Необязательный параметр . Значение, полученное из метода Firestore.runTransaction(). Указывает операцию, которая будет использоваться в рамках транзакции.

Пример

const Firestore = require('Firestore');

const input = {key1: 'value1', key2: 12345};

Firestore.write('collection/document', input, {
  projectId: 'gcp-cloud-project-id',
  merge: true,
}).then((id) => {
  data.gtmOnSuccess();
}, data.gtmOnFailure);

Firestore.query

Функция Firestore.query запрашивает данные из заданной коллекции и возвращает промис, который разрешается в массив документов Firestore, соответствующих условиям запроса. Объект документа Firestore аналогичен объекту Firestore.read , описанному выше. Если документов, соответствующих условиям запроса, нет, возвращаемый промис разрешится в пустой массив.

Синтаксис

Firestore.query(collection, queryConditions[, options]);

Параметры

Параметр Тип Описание
collection нить Путь к коллекции. Не должен начинаться или заканчиваться символом '/'.
queryConditions Множество Массив условий запроса. Каждый запрос представлен в виде массива с тремя значениями: ключ , оператор и ожидаемое значение . Например: [['id', '<', '5'], ['state', '==', 'CA']].

Для формирования результата запроса условия объединяются с помощью операции И. Список совместимых операторов запросов см. в документации Firestore .
options объект Дополнительные параметры запроса. Поддерживаются следующие параметры: projectId , disableCache , limit и transaction . Неизвестные ключи параметров игнорируются. (См. раздел «Параметры » ниже.)

Параметры

Параметр Тип Описание
projectId нить Необязательный параметр . Идентификатор проекта Google Cloud Platform. Если он опущен, идентификатор projectId извлекается из переменной среды GOOGLE_CLOUD_PROJECT если параметр разрешения access_firestore для идентификатора проекта установлен на * или GOOGLE_CLOUD_PROJECT . Если контейнер сервера работает в Google Cloud, GOOGLE_CLOUD_PROJECT уже будет установлена ​​на идентификатор проекта Google Cloud.
disableCache логический Необязательный параметр . Определяет, следует ли отключать кэширование. Кэширование включено по умолчанию, в этом случае результаты будут кэшироваться на время выполнения запроса.
limit число Необязательный параметр . Изменяет максимальное количество результатов, возвращаемых запросом; по умолчанию — 5 .
transaction нить Необязательный параметр . Значение, полученное из метода Firestore.runTransaction(). Указывает операцию, которая будет использоваться в рамках транзакции.

Пример

const Firestore = require('Firestore');

const queries = const queries = [['id', '==', '5']];

return Firestore.query('collection', queries, {
  projectId: 'gcp-cloud-project-id',
  limit: 1,
}).then((documents) => documents[0].data.key, () => undefined);

Firestore.runTransaction

Функция Firestore.runTransaction позволяет пользователю атомарно читать и записывать данные в Firestore. Если возникает конфликт между параллельной записью или другой транзакцией, транзакция будет повторена до двух раз. Если она завершится неудачей после трех попыток, API отклонит запрос с ошибкой. Этот API возвращает промис, который разрешается в массив идентификаторов документов для каждой операции записи, если транзакция успешна, и отклоняет запрос с ошибкой, если она не удалась.

Синтаксис

Firestore.runTransaction(callback[, options]);

Параметры

Параметр Тип Описание
callback функция Функция обратного вызова, которая вызывается с идентификатором транзакции в виде строки. Идентификатор транзакции может передаваться в вызовы API для чтения/записи/запросов. Эта функция обратного вызова должна возвращать промис. Функция обратного вызова может выполняться до трех раз, прежде чем завершится с ошибкой.
options объект Дополнительные параметры запроса. Поддерживается только параметр projectId . Неизвестные ключи параметров игнорируются. (См. раздел «Параметры» ниже.)

Параметры

Параметр Тип Описание
projectId нить Необязательный параметр . Идентификатор проекта Google Cloud Platform. Если он опущен, идентификатор projectId извлекается из переменной среды GOOGLE_CLOUD_PROJECT если параметр разрешения access_firestore для идентификатора проекта установлен на * или GOOGLE_CLOUD_PROJECT . Если контейнер сервера работает в Google Cloud, GOOGLE_CLOUD_PROJECT уже будет установлена ​​на идентификатор проекта Google Cloud.

Пример

const Firestore = require('Firestore');

const path = 'collection/document';
const projectId = 'gcp-cloud-project-id';

Firestore.runTransaction((transaction) => {
  const transactionOptions = {
    projectId: projectId,
    transaction: transaction,
  };
  // Must return a promise.
  return Firestore.read(path, transactionOptions).then((result) => {
    const newInputCount = result.data.inputCount + 1;
    const input = {key1: 'value1', inputCount: newInputCount};
    return Firestore.write(path, input, transactionOptions);
  });
}, {
  projectId: projectId
}).then((ids) => {
  data.gtmOnSuccess();
}, data.gtmOnFailure);

Пример ошибки

В каждой функции Firestore будут обнаружены ошибки, которые будут отклонены с объектом, содержащим ключ reason :

Firestore.read(...).then(onSuccess, (error) => {
  if (error.reason === 'unknown') {
    // Handle the unknown error here.
  }
});

Причины ошибок могут включать, помимо прочего, коды ошибок REST API Firestore .

Соответствующие разрешения

access_firestore


JSON

Возвращает объект, содержащий функции для работы с JSON.

Функция parse() анализирует JSON-строку для создания значения или объекта, описываемого строкой. Если значение не может быть проанализировано (например, некорректный JSON), функция вернет undefined . Если входное значение не является строкой, оно будет преобразовано в строку.

Функция stringify() преобразует входные данные в строку JSON. Если значение не может быть разобрано (например, объект содержит цикл), метод вернет undefined .

Пример

const JSON = require('JSON');

// The JSON input string is converted to an object.
const object = JSON.parse('{"foo":"bar"}');

// The input object is converted to a JSON string.
const str = JSON.stringify({foo: 'bar'});

Синтаксис

JSON.parse(stringInput);
JSON.stringify(value);

Соответствующие разрешения

Никто.


Math

Объект, предоставляющий Math функции.

Синтаксис

const Math = require('Math');

// Retrieve the absolute value.
const absolute = Math.abs(-3);

// Round the input down to the nearest integer.
const roundedDown = Math.floor(3.6);

// Round the input up to the nearest integer.
const roundedUp = Math.ceil(2.2);

// Round the input to the nearest integer.
const rounded = Math.round(3.1);

// Return the largest argument.
const biggest = Math.max(1, 3);

// Return the smallest argument.
const smallest = Math.min(3, 5);

// Return the first argument raised to the power of the second argument.
const powerful = Math.pow(3, 1);

// Return the square root of the argument.
const unsquared = Math.sqrt(9);

Параметры

Параметры математических функций преобразуются в числа.

Соответствующие разрешения

Никто.


Messages

Следующие API-интерфейсы работают совместно, позволяя передавать сообщения между различными частями контейнера.


addMessageListener

Добавляет функцию, которая прослушивает сообщения определенного типа. Когда сообщение этого типа отправляется с помощью API sendMessage (обычно с помощью тега), функция обратного вызова выполняется синхронно. Функция обратного вызова запускается с двумя параметрами:

  1. messageType:string
  2. message:Object

Если функция обратного вызова добавлена ​​в клиент, она будет получать сообщения от всех событий, создаваемых этим клиентом. Если функция обратного вызова должна получать сообщения только от определенного события, то привяжите этот API к событию, используя bindToEvent в функции onStart API runContainer . См. пример.

Синтаксис

const addMessageListener = require('addMessageListener');

addMessageListener('send_pixel', (messageType, message) => {
  // This will be run whenever something sends a 'send_pixel' message.
});

Параметры

Параметр Тип Описание
messageType нить Тип сообщения, которое необходимо отслеживать. Если значение не является строкой, оно будет преобразовано в строку.
callback функция Функция обратного вызова, которая выполняется при отправке сообщения соответствующего типа. Если функция обратного вызова не является функцией, API ничего не будет делать.

Пример

const addMessageListener = require('addMessageListener');
const claimRequest = require('claimRequest');
const extractEventsFromMpv1 = require('extractEventsFromMpv1');
const returnResponse = require('returnResponse');
const runContainer = require('runContainer');

claimRequest();
addMessageListener('send_pixel', (messageType, message) => {
  // This will be run whenever a tag sends a 'send_pixel' message.
});

const events = extractEventsFromMpv1();
let eventsCompleted = 0;
events.forEach((event, i) => {
  runContainer(events[i], /* onComplete= */ () => {
    if (events.length === ++eventsCompleted) {
      returnResponse();
    }
  }, /* onStart= */ (bindToEvent) => {
    if (i === 0) {
      bindToEvent(addMessageListener)('send_pixel', (messageType, message) => {
        // This will be called whenever a tag for the first event sends a
        // 'send_pixel' message.
      });
    }
  });
});

Соответствующие разрешения

Требуется разрешение use_message . Разрешение должно быть настроено таким образом, чтобы разрешать как минимум:

  • Тип сообщения с Usage функций listen или listen_and_send .

hasMessageListener

Возвращает true, если для заданного типа сообщения добавлен обработчик сообщений. В противном случае возвращает false.

Синтаксис

const hasMessageListener = require('hasMessageListener');

hasMessageListener('send_pixel');

Соответствующие разрешения

Никто.


sendMessage

Отправляет сообщение указанного типа зарегистрированному слушателю. Это можно использовать для отправки сообщений из тега обратно клиенту, запустившему контейнер.

Синтаксис

const sendMessage = require('sendMessage');

sendMessage('send_pixel', {url: 'https://analytics.example.com/collect'});

Параметры

Параметр Тип Описание
messageType нить Тип отправляемого сообщения. Если значение не является строкой, оно будет преобразовано в строку.
message объект Сообщение для отправки. Если сообщение не является объектом, API ничего не сделает.

Соответствующие разрешения

Требуется разрешение use_message . Разрешение должно быть настроено таким образом, чтобы разрешать как минимум:

  • Тип сообщения с Usage функций listen_and_send или send .

Object

Возвращает объект, предоставляющий методы Object .

Метод keys() обеспечивает поведение метода Object.keys() из стандартной библиотеки. Он возвращает массив имен перечисляемых свойств заданного объекта в том же порядке, что и в цикле for...in... Если входное значение не является объектом, оно будет преобразовано в объект.

Метод values() обеспечивает поведение метода Object.values() из стандартной библиотеки. Он возвращает массив значений перечисляемых свойств заданного объекта в том же порядке, что и в цикле for...in... Если входное значение не является объектом, оно будет преобразовано в объект.

Метод entries() обеспечивает поведение стандартного библиотечного метода Object.entries() . Он возвращает массив пар перечислимых свойств [key, value] заданного объекта в том же порядке, что и в цикле for...in... Если входное значение не является объектом, оно будет преобразовано в объект.

Метод freeze() обеспечивает поведение, аналогичное методу Object.freeze() из стандартной библиотеки. Замороженный объект больше нельзя изменить; замораживание объекта предотвращает добавление к нему новых свойств, удаление существующих свойств и изменение значений существующих свойств. freeze() возвращает тот же объект, который был передан. Примитивный или нулевой аргумент будет рассматриваться как замороженный объект и будет возвращен.

Метод delete() обеспечивает поведение оператора delete из стандартной библиотеки. Он удаляет заданный ключ из объекта, если объект не заморожен. Как и оператор delete из стандартной библиотеки, он возвращает true если первое входное значение ( objectInput ) является объектом, который не заморожен, даже если второе входное значение ( keyToDelete ) указывает на несуществующий ключ. Во всех остальных случаях он возвращает false . Однако он отличается от оператора delete из стандартной библиотеки следующими способами:

  • keyToDelete не может быть строкой, разделённой точками, которая указывает на вложенный ключ.
  • delete() не может использоваться для удаления элементов из массива.
  • delete() нельзя использовать для удаления каких-либо свойств из глобальной области видимости.

Синтаксис

Object.keys(objectInput)
Object.values(objectInput)
Object.entries(objectInput)
Object.freeze(objectInput)
Object.delete(objectInput, keyToDelete)

Параметры

Объект.ключи

Параметр Тип Описание
объектВвод любой Объект, ключи которого необходимо перечислить. Если входные данные не являются объектом, они будут преобразованы в объект.

Объект.значения

Параметр Тип Описание
объектВвод любой Объект, значения которого необходимо перечислить. Если входные данные не являются объектом, они будут преобразованы в объект.

Объект.записи

Параметр Тип Описание
объектВвод любой Объект, пары ключ/значение которого необходимо перечислить. Если входные данные не являются объектом, они будут преобразованы в объект.

Object.freeze

Параметр Тип Описание
объектВвод любой Объект, который нужно заморозить. Если входные данные не являются объектом, они будут рассматриваться как замороженный объект.

Object.delete

Параметр Тип Описание
объектВвод любой Объект, ключ которого нужно удалить.
keyToDelete нить Ключ верхнего уровня для удаления.

Пример

const Object = require('Object');

// The keys of an object are enumerated in an array.
const keys = Object.keys({foo: 'bar'});

// The values of an object are enumerated in an array.
const values = Object.values({foo: 'bar'});

// The key/value pairs of an object are enumerated in an array.
const entries = Object.entries({foo: 'bar'});

// The input object is frozen.
const frozen = Object.freeze({foo: 'bar'});

// The key is removed from the input object.
const obj1 = {deleteme: 'value'};
Object.delete(obj1, 'deleteme');
// Only a top-level key can be specified as the key to delete.
const obj2 = {nested: {key: 'value'}};
Object.delete(obj2, 'nested.key'); // This has no effect.
Object.delete(obj2.nested, 'key'); // This deletes the nested key.

Promise

Возвращает объект, предоставляющий методы для взаимодействия с промисами.

Промисы функционально эквивалентны промисам JavaScript. Каждый экземпляр имеет три метода, которые возвращают объект Promise, позволяющий выполнить дальнейшие действия после завершения промиса:

  • .then() ` обрабатывает как успешно завершенные, так и отклоненные случаи. Он принимает в качестве параметров два коллбэка: один для успешного случая и один для случая неудачи.
  • .catch() ` обрабатывает только отклоненные случаи. Принимает один коллбэк в качестве параметра.
  • .finally() ` позволяет выполнить код независимо от того, был ли промис разрешен или отклонен. Принимает в качестве параметра один коллбэк, который вызывается без аргументов.

Переменная, возвращающая промис, принимает значение, равное разрешенному промису, или false если промис отклоняется.

Пример

promise.then((resolvedValue) => {
    // Handles when promise resolves.
  }, (rejectedValue) => {
    // Handles when promise rejects.
  });
promise.catch((rejectedValue) => {
    // Handles when promise rejects.
  });
promise.finally(() => {
    // Runs regardless of whether or not the previous promise resolves or
    // rejects.
  });

Promise.all

Возвращает промис, который либо:

  • разрешается, когда все входные данные обработаны, или
  • отклоняет, если какой-либо из входных сигналов отклоняется.

Синтаксис

Promise.all(inputs);

Параметры

Параметр Тип Описание
inputs Множество Массив значений или промисов. Если входные данные не являются промисом, они передаются как разрешенное значение промиса. Выбрасывает ошибку, если входные данные не являются массивом.

Пример

const Promise = require('Promise');
const sendHttpGet = require('sendHttpGet');

return Promise.all(['a', sendHttpGet('https://example.com')])
  .then((results) => {
    // results will equal: ['a', {statusCode: 200, headers: {}, body: ''}]
  });

Соответствующие разрешения

Никто.

Promise.create

Создает промис, функционально эквивалентный промису в JavaScript.

Синтаксис

Promise.create(resolver);

Параметры

Параметр Тип Описание
resolver функция Функция, вызываемая с двумя другими функциями — resolve и reject. Возвращаемый промис будет разрешен или отклонен при вызове соответствующего параметра. Выбрасывает ошибку, если resolver не является функцией.

Пример

const Promise = require('Promise');

return Promise.create((resolve, reject) => {
  // Do asynchronous work that eventually calls resolve() or reject()
});

Соответствующие разрешения

Никто.

Тестирование API

Эти API работают с изолированными JavaScript-тестами для создания тестов для пользовательских шаблонов в Google Tag Manager. Для работы с этими тестовыми API не требуется оператор require() . [Узнайте больше о тестах пользовательских шаблонов].


assertApi

Возвращает объект-сопоставитель, который можно использовать для удобного выполнения проверок относительно заданного API.

Синтаксис

assertApi(apiName)

Параметры

Параметр Тип Описание
apiName нить Название проверяемого API; та же строка, что и передана в require() .

Совпадающие

  • Subject.wasCalled()
  • Subject.wasNotCalled()
  • Subject.wasCalledWith(...expected)
  • Subject.wasNotCalledWith(...expected)

Примеры

assertApi('sendPixel').wasCalled();
assertApi('getUrl').wasNotCalled();
assertApi('makeNumber').wasCalledWith('8');
assertApi('setInWindow').wasNotCalledWith('myVar', 'theWrongValue');

assertThat

API assertThat создан по образцу библиотеки Google [Truth]. Он возвращает объект, который можно использовать для гибкой проверки значений объекта. Сбой проверки немедленно остановит тест и пометит его как неудачный. Однако сбой в одном тесте не повлияет на другие тестовые случаи.

Синтаксис

assertThat(actual, opt_message)

Параметры

Параметр Тип Описание
actual любой Значение, используемое в проверках беглости речи.
opt_message нить Дополнительное сообщение, которое следует вывести в случае неудачи проверки.

Совпадающие

Совместитель Описание
isUndefined() Утверждает, что субъект undefined .
isDefined() Утверждает, что субъект не является undefined .
isNull() Утверждает, что субъект является null .
isNotNull() Утверждает, что субъект не является null .
isFalse() Утверждает, что субъект является false .
isTrue() Утверждает, что утверждение true .
isFalsy() Утверждает, что субъект является ложным. Ложными значениями являются undefined , null , false , NaN , 0 и '' (пустая строка).
isTruthy() Утверждает, что субъект является истинным. Ложные значения: undefined , null , false , NaN , 0 и '' (пустая строка).
isNaN() Утверждается, что субъектом является значение NaN.
isNotNaN() Утверждает, что субъектом является любое значение, кроме NaN.
isInfinity() Утверждает, что субъект представляет собой положительную или отрицательную бесконечность.
isNotInfinity() Утверждает, что субъектом является любое значение, кроме положительной или отрицательной бесконечности.
isEqualTo(expected) Утверждает, что объект равен заданному значению. Это сравнение значений, а не сравнение ссылок. Содержимое объектов и массивов сравнивается рекурсивно.
isNotEqualTo(expected) Утверждает, что значение объекта не равно заданному значению. Это сравнение значений, а не сравнение ссылок. Содержимое объектов и массивов сравнивается рекурсивно.
isAnyOf(...expected) Утверждает, что значение объекта равно одному из заданных значений. Это сравнение значений, а не сравнение ссылок. Содержимое объектов и массивов сравнивается рекурсивно.
isNoneOf(...expected) Утверждает, что объект не равен ни одному из заданных значений. Это сравнение значений, а не сравнение ссылок. Содержимое объектов и массивов сравнивается рекурсивно.
isStrictlyEqualTo(expected) Утверждает, что субъект строго равен ( === ) заданному значению.
isNotStrictlyEqualTo(expected) Утверждает, что субъект не является строго равным ( !== ) заданному значению.
isGreaterThan(expected) Утверждает, что значение объекта больше ( > ) заданного значения в упорядоченном сравнении.
isGreaterThanOrEqualTo(expected) Утверждает, что значение в упорядоченном сравнении больше или равно ( >= ) заданному значению.
isLessThan(expected) Утверждает, что значение объекта меньше ( < ) заданного значения в упорядоченном сравнении.
isLessThanOrEqualTo(expected) Утверждает, что значение объекта меньше или равно ( <= ) заданному значению в упорядоченном сравнении.
contains(...expected) Утверждает, что объект представляет собой массив или строку, содержащую все заданные значения в любом порядке. Это сравнение значений, а не сравнение ссылок. Содержимое объектов и массивов сравнивается рекурсивно.
doesNotContain(...expected) Утверждает, что объект представляет собой массив или строку, не содержащую ни одного из заданных значений. Это сравнение значений, а не сравнение ссылок. Содержимое объектов и массивов сравнивается рекурсивно.
containsExactly(...expected) Утверждается, что объект представляет собой массив, содержащий все заданные значения в любом порядке и не содержащий других значений. Это сравнение значений, а не сравнение ссылок. Содержимое объектов и массивов сравнивается рекурсивно.
doesNotContainExactly(...expected) Утверждает, что объект представляет собой массив, содержащий набор значений, отличных от заданных значений, в любом порядке. Это сравнение значений, а не сравнение ссылок. Содержимое объектов и массивов сравнивается рекурсивно.
hasLength(expected) Проверяет, что объект является массивом или строкой заданной длины. Проверка всегда завершается неудачей, если значение не является массивом или строкой.
isEmpty() Проверяет, что объект представляет собой пустой массив или строку (длина = 0). Проверка всегда завершается неудачей, если значение не является массивом или строкой.
isNotEmpty() Проверяет, что объект является массивом или строкой, не пустой (длина > 0). Проверка всегда завершается неудачей, если значение не является массивом или строкой.
isArray() Утверждает, что тип объекта — массив.
isBoolean() Утверждает, что тип объекта является логическим (булевым).
isFunction() Утверждает, что тип объекта является функцией.
isNumber() Утверждает, что тип субъекта — число.
isObject() Утверждает, что тип субъекта — объект.
isString() Утверждает, что тип объекта — строка.

Примеры

assertThat(undefined).isUndefined();
assertThat(id, 'ID must be defined').isDefined();
assertThat(null).isNull();
assertThat(undefined).isNotNull();
assertThat(true).isTrue();
assertThat(false).isFalse();
assertThat(1).isTruthy();
assertThat('').isFalsy();
assertThat(1/0).isInfinity();
assertThat(0).isNotInfinity();
assertThat(-'foo').isNaN();
assertThat(100).isNotNaN();
assertThat(sentUrl).isEqualTo('https://endpoint.example.com/?account=12345');
assertThat(category).isNotEqualTo('premium');
assertThat(5).isAnyOf(1, 2, 3, 4, 5);
assertThat(42).isNoneOf('the question', undefined, 41.9);
assertThat('value').isStrictlyEqualTo('value');
assertThat('4').isNotStrictlyEqualTo(4);
assertThat(['a', 'b', 'c']).contains('a', 'c');
assertThat(['x', 'y', 'z']).doesNotContain('f');
assertThat(['1', '2', '3']).containsExactly('3', '2', '1');
assertThat(['4', '5']).doesNotContainExactly('4');
assertThat('a string').hasLength(8);
assertThat([]).isEmpty();
assertThat('another string').isNotEmpty();

fail

Немедленно завершает текущую проверку и выводит заданное сообщение, если оно предоставлено.

Синтаксис

fail(opt_message);

Параметры

Параметр Тип Описание
opt_message нить Необязательный текст сообщения об ошибке.

Пример

fail('This test has failed.');

mock

mock API позволяет переопределять поведение изолированных API. Имитационный API безопасен для использования в шаблонном коде, но работает только в тестовом режиме. Имитационные объекты сбрасываются перед каждым запуском теста.

Синтаксис

mock(apiName, returnValue);

Параметры

Параметр Тип Описание
apiName нить Название API, который нужно имитировать; та же строка, что и передана в require()
returnValue любой Возвращаемое значение для API или функции, вызываемой вместо API. Если returnValue — это функция, то вместо API в изолированной среде вызывается именно эта функция; если returnValue — это что-либо, кроме функции, то вместо API в изолированной среде возвращается значение, соответствующее этой функции.

Примеры

mock('encodeUri', "https://endpoint.example.com/?account=12345");
mock('sendPixel', function(url, onSuccess, onFailure) {
    onSuccess();
});

mockObject

API mockObject позволяет переопределять поведение изолированных API, возвращающих объект. API безопасен для использования в шаблонном коде, но работает только в тестовом режиме. Моки сбрасываются перед каждым запуском теста.

Синтаксис

mockObject(apiName, objectMock);

Параметры

Параметр Тип Описание
apiName нить Название API, который нужно имитировать; та же строка, что и передана в require()
objectMock объект Возвращаемое значение для API или функции, вызываемой вместо API. Должен быть объектом.

Примеры

const storage = {};
let firestoreId = 1;

function asTestPromise(result) {
  return {
    then: (callback) => callback(result)
  };
}

mockObject('Firestore', {
  write: (collection, input) => {
    storage[collection + '/' + (++firestoreId)] = input;
    return asTestPromise(firestoreId);
  },
  read: (document) => asTestPromise({data: storage[document]})
});

runCode

Выполняет код шаблона, то есть содержимое вкладки «Код» , в текущей тестовой среде с заданным входным объектом данных.

Синтаксис

runCode(data)

Параметры

Параметр Тип Описание
data объект Объект данных, который будет использоваться в тесте.

Возвращаемое значение

Возвращает значение переменной для шаблонов переменных; возвращает undefined для всех остальных типов шаблонов.

Пример

runCode({field1: 123, field2: 'value'});

,

В этом документе описаны API для серверной разметки.


addEventCallback

Регистрирует функцию обратного вызова, которая будет вызвана по завершении события. Функция обратного вызова будет вызвана после выполнения всех тегов события. В функцию обратного вызова передаются два значения: идентификатор контейнера, вызывающего функцию, и объект, содержащий информацию о событии.

При использовании этого API в теге он связывается с текущим событием. При использовании этого API в клиенте его необходимо привязать к конкретному событию с помощью функции bindToEvent API runContainer . Дополнительные сведения см. в примере .

Синтаксис

const addEventCallback = require('addEventCallback');

addEventCallback((containerId, eventData) => {
  // Take some action based on the event data.
});

Параметры

Параметр Тип Описание
callback функция Функция, которая будет вызвана в конце события.

Объект eventData содержит следующие данные:

Имя ключа Тип Описание
tags Множество Массив объектов данных тегов. Каждый тег, сработавший во время события, будет иметь запись в этом массиве. Объект данных тега содержит идентификатор тега ( id ), статус выполнения ( status ) и время выполнения ( executionTime ). Данные тега также будут включать дополнительные метаданные тега, настроенные для тега.

Пример

У клиента:

const addEventCallback = require('addEventCallback');
const claimRequest = require('claimRequest');
const extractEventsFromMpv1 = require('extractEventsFromMpv1');
const logToConsole = require('logToConsole');
const returnResponse = require('returnResponse');
const runContainer = require('runContainer');

claimRequest();

const events = extractEventsFromMpv1();
let eventsCompleted = 0;
events.forEach((evt, i) => {
  runContainer(evt, /* onComplete= */ (bindToEvent) => {
    bindToEvent(addEventCallback)((containerId, eventData) => {
      logToConsole('Event Number: ' + i);
      eventData.tags.forEach((tag) => {
        logToConsole('Tag ID: ' + tag.id);
        logToConsole('Tag Status: ' + tag.status);
        logToConsole('Tag Execution Time: ' + tag.executionTime);
      });
    });
    if (events.length === ++eventsCompleted) {
      returnResponse();
    }
  });
});

В теге:

const addEventCallback = require('addEventCallback');

addEventCallback((containerId, eventData) => {
  // This will be called at the end of the current event.
});

Соответствующие разрешения

read_event_metadata


callLater

Планирует асинхронный вызов функции. Функция будет вызвана после возврата из текущего кода. Это эквивалентно вызову setTimeout(<function>, 0) .

Пример

const callLater = require('callLater');
const logToConsole = require('logToConsole');

callLater(() => {
  logToConsole('Logged asynchronously');
});

Синтаксис

callLater(function)

Параметры

Параметр Тип Описание
function функция Функция, которую нужно вызвать.

Соответствующие разрешения

Никто.


claimRequest

Используйте этот API в клиенте для подтверждения запроса. После подтверждения запроса контейнер не сможет запускать дополнительные клиенты.

Этот API генерирует исключение, если вызывается внутри тега или переменной. Этот API генерирует исключение, если вызывается после возврата клиента (например, если вызывается в асинхронном коллбэке, таком как callLater или функция onComplete runContainer ).

Перед вызовом API runContainer клиент должен подтвердить запрос, используя этот API.

Пример

const claimRequest = require('claimRequest');

claimRequest();

Синтаксис

claimRequest();

Соответствующие разрешения

Никто.


computeEffectiveTldPlusOne

Возвращает эффективный домен верхнего уровня + 1 (eTLD+1) заданного домена или URL. eTLD+1 вычисляется путем сравнения домена с правилами публичного списка суффиксов . eTLD+1 обычно представляет собой домен самого высокого уровня, для которого можно установить cookie.

Если аргумент равен null или undefined, то значение аргумента возвращается без изменений. В противном случае аргумент преобразуется в строку. Если аргумент не является допустимым доменом или URL-адресом, то возвращается пустая строка. Если сервер не может получить список общедоступных суффиксов, то значение аргумента возвращается без изменений.

Пример

const computeEffectiveTldPlusOne = require('computeEffectiveTldPlusOne');

// Returns 'example.co.uk'
computeEffectiveTldPlusOne('analytics.example.co.uk');

// Returns 'example.co.uk'
computeEffectiveTldPlusOne('https://analytics.example.co.uk/path');

Синтаксис

computeEffectiveTldPlusOne(domainOrUrl);

Параметры

Параметр Тип Описание
domainOrUrl нить Домен или URL-адрес, для которого вычисляется eTLD+1.

Соответствующие разрешения

Никто.


createRegex

Создает новый экземпляр регулярного выражения и возвращает его, обернутый в объект. Вы не можете получить доступ к регулярному выражению напрямую. Однако вы можете передать его в API testRegex , а также в методы String.replace() , String.match() и String.search() .

Возвращает null если регулярное выражение недействительно или Re2 недоступен на сервере.

Этот API использует реализацию Re2 . Образ Docker сервера должен быть версии 2.0.0 или более поздней.

Пример

const createRegex = require('createRegex');

const domainRegex = createRegex('\\w+\\.com', 'i');

// Returns '/foobar'
'example.com/foobar'.replace(domainRegex, '');

Синтаксис

createRegex(pattern, flags);

Параметры

Параметр Тип Описание
pattern нить Текст регулярного выражения.
flags нить Необязательная строка, содержащая флаги для создаваемого регулярного выражения. Поддерживаются `g` (глобальный) и `i` (игнорировать регистр). Все остальные символы игнорируются без уведомления.

Соответствующие разрешения

Никто.

Минимальная версия изображения

2.0.0


decodeUri

Декодирует все закодированные символы в предоставленном URI. Возвращает строку , представляющую декодированный URI. Возвращает undefined если предоставлен недопустимый ввод.

Пример

const decodeUri = require('decodeUri');

const decodedUrl = decodeUri(data.encodedUrl);
if (decodedUrl) {
  // ...
}

Синтаксис

decodeUri(encoded_uri);

Параметры

Параметр Тип Описание
encoded_uri нить URI, закодированный с помощью encodeUri() или иным способом.

Соответствующие разрешения

Никто.


decodeUriComponent

Декодирует все закодированные символы в предоставленном компоненте URI. Возвращает строку , представляющую декодированный компонент URI. Возвращает undefined при получении недопустимых входных данных.

Пример

const decodeUriComponent = require('decodeUriComponent');

const decodedQuery = decodeUriComponent(data.query);
if (decodedQuery) {
  // ...
}

Синтаксис

decodeUriComponent(encoded_uri_component);

Параметры

Параметр Тип Описание
encoded_uri_component нить Компонент URI, закодированный с помощью encodeUriComponent() или иным способом.

Соответствующие разрешения

Никто.


encodeUri

Возвращает закодированный унифицированный идентификатор ресурса (URI) путем экранирования специальных символов. Возвращает строку , представляющую предоставленную строку, закодированную как URI.

Пример

const encodeUri = require('encodeUri');
const sendHttpGet = require('sendHttpGet');

sendHttpGet('https://www.example.com/' + encodeUri(pathInput));

Синтаксис

encodeUri(uri);

Параметры

Параметр Тип Описание
uri нить Полный URI.

Соответствующие разрешения

Никто.


encodeUriComponent

Возвращает закодированный унифицированный идентификатор ресурса (URI) путем экранирования специальных символов. Возвращает строку , представляющую предоставленную строку, закодированную как URI.

Пример

const encodeUriComponent = require('encodeUriComponent');
const sendHttpGet = require('sendHttpGet');

sendHttpGet('https://www.example.com/?' + encodeUriComponent(queryInput));

Синтаксис

encodeUriComponent(str);

Параметры

Параметр Тип Описание
str нить Компонент URI.

Соответствующие разрешения

Никто.


extractEventsFromMpv1

Преобразует входящий запрос протокола Measurement Protocol V1 в список событий в формате Unified Schema. Возвращает список извлеченных событий. Генерирует ошибку, если запрос имеет неправильный формат.

Пример

const extractEventsFromMpv1 = require('extractEventsFromMpv1');
const isRequestMpv1 = require('isRequestMpv1');

if (isRequestMpv1()) {
  const events = extractEventsFromMpv1();
  for (let i = 0; i < events.length; ++i) {
    const event = events[i];
    // Process event.
  }
}

Синтаксис

extractEventsFromMpv1();

Соответствующие разрешения

Требуется разрешение read_request ). Разрешение должно быть настроено таким образом, чтобы обеспечить доступ как минимум к:

  • body
  • query parameters

extractEventsFromMpv2

Преобразует входящий запрос протокола Measurement Protocol V2 в список событий в формате Unified Schema. Возвращает список извлеченных событий. Генерирует ошибку, если запрос имеет неправильный формат.

Пример

const extractEventsFromMpv2 = require('extractEventsFromMpv2');
const isRequestMpv2 = require('isRequestMpv2');

if (isRequestMpv2()) {
  const events = extractEventsFromMpv2();
  for (let i = 0; i < events.length; ++i) {
    const event = events[i];
    // Process event.
  }
}

Синтаксис

extractEventsFromMpv2();

Соответствующие разрешения

Требуется разрешение read_request ). Разрешение должно быть настроено таким образом, чтобы обеспечить доступ как минимум к:

  • body
  • query parameters

fromBase64

Декодирует строку, закодированную в формате Base64. Возвращает undefined если входные данные недействительны.

Синтаксис

fromBase64(base64EncodedString);

Параметры

Параметр Тип Описание
base64EncodedString нить Строка, закодированная в Base64.

Пример

const fromBase64 = require('fromBase64');

const greeting = fromBase64('aGVsbG8=');
if (greeting === 'hello') {
  // ...
}

Соответствующие разрешения

Никто.


generateRandom

Возвращает случайное число (целое число) в заданном диапазоне.

Пример

const generateRandom = require('generateRandom');

const randomValue = generateRandom(0, 10000000);

Синтаксис

generateRandom(min, max);

Параметры

Параметр Тип Описание
min число Минимальное потенциальное значение возвращаемого целого числа (включительно).
max число Максимально возможное значение возвращаемого целого числа (включительно).

Соответствующие разрешения

Никто.


getAllEventData

Возвращает копию данных события.

Синтаксис

getAllEventData();

Соответствующие разрешения

read_event_data


getClientName

Возвращает строку , содержащую имя текущего клиента.

Синтаксис

getClientName();

Соответствующие разрешения

read_container_data


getContainerVersion

Возвращает объект , содержащий данные о текущем контейнере. Возвращаемый объект будет иметь следующие поля:

{
  containerId: string,
  debugMode: boolean,
  environmentName: string,
  environmentMode: boolean,
  previewMode: boolean,
  version: string,
}

Пример

const getContainerVersion = require('getContainerVersion');

const containerVersion = getContainerVersion();
const containerId = containerVersion['containerId'];
const isDebug = containerVersion['debugMode'];

Синтаксис

getContainerVersion();

Соответствующие разрешения

read_container_data


getCookieValues

Возвращает массив, содержащий значения всех файлов cookie с заданным именем.

Пример

const getCookieValues = require('getCookieValues');

const lastVisit = getCookieValues('lastVisit')[0];
if (lastVisit) {
  // ...
}

Синтаксис

getCookieValues(name[, noDecode]);

Параметры

Параметр Тип Описание
name нить Название файла cookie.
noDecode логический Если true , значения cookie не будут декодированы перед возвратом. По умолчанию — false .

Соответствующие разрешения

get_cookies


getEventData

Возвращает копию значения по указанному пути в данных события. Возвращает undefined если данные события отсутствуют или если значение по указанному пути отсутствует.

Пример

const getEventData = require('getEventData');

const campaignId = getEventData('campaign.id');
const itemId = getEventData('items.0.id');
const referrer = getEventData('page_referrer');

Параметры

Параметр Тип Описание
keyPath любой Путь ключа, где компоненты пути разделены точками. Компонентами пути могут быть ключи в объекте или индексы в массиве. Если keyPath не является строкой, он преобразуется в строку.

Синтаксис

getEventData(keyPath);

Соответствующие разрешения

read_event_data


getGoogleAuth

Возвращает объект авторизации, который при использовании с sendHttpGet или sendHttpRequest будет включать заголовок авторизации для API Google Cloud. Этот API использует учетные данные приложения по умолчанию для автоматического поиска учетных данных в серверной среде.

Пример

const getGoogleAuth = require('getGoogleAuth');
const logToConsole = require('logToConsole');
const sendHttpGet = require('sendHttpGet');

const auth = getGoogleAuth({
  scopes: ['https://www.googleapis.com/auth/datastore']
});

sendHttpGet(
  'https://firestore.googleapis.com/v1/projects/my-project/databases/(default)/documents/collection/document',
  {authorization: auth}
).then((result) => {
  if (result.statusCode >= 200 && result.statusCode < 300) {
    logToConsole('Result: ' + result.body);
    data.gtmOnSuccess();
  } else {
    data.gtmOnFailure();
  }
});

Синтаксис

getGoogleAuth(scopes);

Параметры

Параметр Тип Описание
scopes Множество Набор областей действия Google API OAuth 2.0, для которых запрашивается доступ.

Соответствующие разрешения

Требуется разрешение use_google_credentials . Разрешение должно быть настроено с одним или несколькими разрешенными областями действия.


getGoogleScript

Получает ресурс из заранее определенного набора скриптов Google и возвращает промис , содержащий скрипт и связанные с ним метаданные для кэширования.

Промис разрешится в объект, содержащий два ключа: script и metadata . Если запрос не удастся, промис будет отклонен с указанием reason .

Объект metadata будет содержать следующие метаданные кэширования, основанные на заголовках ответа ресурса; каждое поле будет присутствовать только в том случае, если соответствующий заголовок присутствует в ответе ресурса.

{
  'cache-control': string,
  'expires': string,
  'last-modified': string,
}

Пример

const getGoogleScript = require('getGoogleScript');

getGoogleScript('ANALYTICS').then((result) => {
  // Operate on result.script and result.metadata here.
});

Синтаксис

getGoogleScript(script[, options]);

Параметры

Параметр Тип Описание
script нить Название скрипта. Поддерживаются скрипты 'ANALYTICS' , 'GTAG' и 'GTM' .

Опция 'ANALYTICS' загружает скрипт Google Analytics с https://www.google-analytics.com/analytics.js .

Опция 'GTAG' загружает глобальный скрипт тега сайта (gtag.js) с https://www.googletagmanager.com/gtag/js .

Опция 'GTM' загружает скрипт Google Tag Manager с https://www.googletagmanager.com/gtm.js .
options объект Дополнительные параметры запроса. Список поддерживаемых вариантов см. ниже.

Параметры

Вариант Тип Описание
id нить Применимо к 'GTAG' с идентификатором измерения gtag и 'GTM' с идентификатором веб-контейнера (например, GTM-XXXX).
debug любой Если значение истинно, запрашивает и возвращает отладочную версию скрипта измерений.
timeout число Время ожидания запроса в миллисекундах; неположительные значения игнорируются. Если запрос истекает по таймауту, будет вызвана функция обратного вызова с значением скрипта undefined и объектом метаданных {} .

Нераспознанные клавиши параметров игнорируются.

Соответствующие разрешения

Требуется разрешение send_http . Разрешение должно быть настроено таким образом, чтобы обеспечить доступ как минимум к:

  • Разрешить домены Google

getRemoteAddress

Возвращает строковое представление IP-адреса, с которого был отправлен запрос, например, 12.345.67.890 для IPv4 или 2001:0db8:85a3:0:0:8a2e:0370:7334 для IPv6, путем чтения заголовков запроса, таких как Forwarded и X-Forwarded-For. Примечание: этот API прилагает все усилия для определения исходного IP-адреса, но не может гарантировать точность результата.

Синтаксис

getRemoteAddress();

Соответствующие разрешения

Требуется разрешение read_request ). Разрешение должно быть настроено таким образом, чтобы обеспечить доступ как минимум к:

  • Заголовки Forwarded и X-Forwarded-For
  • Удаленный IP-адрес

getRequestBody

Возвращает тело запроса в виде строки , если оно присутствует, или undefined в противном случае.

Синтаксис

getRequestBody();

Соответствующие разрешения

read_request


getRequestHeader

Возвращает значение указанного заголовка запроса в виде строки , если он присутствует, или undefined в противном случае. Если заголовок повторяется, возвращаемые значения объединяются с помощью ', ' .

Пример

const getRequestHeader = require('getRequestHeader');

const host = getRequestHeader('host');

Синтаксис

getRequestHeader(headerName);

Параметры

Параметр Тип Описание
headerName нить Название заголовка. Регистр символов не имеет значения.

Соответствующие разрешения

read_request


getRequestMethod

Возвращает метод запроса, например 'GET' или 'POST' , в виде строки .

Пример

const getRequestMethod = require('getRequestMethod');

if (getRequestMethod() === 'POST') {
  // Handle the POST request here.
}

Синтаксис

getRequestMethod();

Соответствующие разрешения

Никто.


getRequestPath

Возвращает путь запроса без строки запроса. Например, если URL — '/foo?id=123' , возвращается '/foo' . Автоматически удаляет префикс URL-адреса контейнера сервера из пути. Например, если URL-адрес контейнера сервера — https://example.com/analytics , а путь запроса — '/analytics/foo' , возвращается '/foo' .

Пример

const getRequestPath = require('getRequestPath');

const requestPath = getRequestPath();
if (requestPath === '/') {
  // Handle a request for the root path.
}

Синтаксис

getRequestPath();

Соответствующие разрешения

read_request


getRequestQueryParameter

Возвращает декодированное значение именованного параметра строки запроса в виде строки или undefined , если параметр отсутствует. Если параметр повторяется в строке запроса, будет возвращено первое значение, которое встречается в строке запроса.

Пример

const getRequestQueryParameter = require('getRequestQueryParameter');

const query = getRequestQueryParameter('query');
if (query) {
  // Process query here.
}

Синтаксис

getRequestQueryParameter(name);

Параметры

Параметр Тип Описание
name нить Имя параметра запроса.

Соответствующие разрешения

read_request


getRequestQueryParameters

Возвращает параметры запроса входящего HTTP-запроса в виде объекта, сопоставляющего имена параметров запроса с соответствующими значениями. Имена и значения параметров декодируются.

Пример

const getRequestQueryParameters = require('getRequestQueryParameters');

const queryParameters = getRequestQueryParameters();
if (queryParameters['search']) {
  // Handle the search query here.
  const maxResults = queryParameters['max_results'];
}

Синтаксис

getRequestQueryParameters();

Соответствующие разрешения

read_request


getRequestQueryString

Возвращает текст запроса в виде строки без вопросительного знака в начале или пустую строку, если URL-адрес запроса не содержит строки запроса.

Пример

const getRequestQueryString = require('getRequestQueryString');

const queryString = getRequestQueryString();
if (queryString !== '') {
  // Handle the query string.
}

Синтаксис

getRequestQueryString();

Соответствующие разрешения

read_request


getTimestamp

Устарело. Предпочтительнее использовать getTimestampMillis .

Возвращает число , представляющее текущее время в миллисекундах с начала эпохи Unix, как это было возвращено функцией Date.now() .

Синтаксис

getTimestamp();

Соответствующие разрешения

Никто.


getTimestampMillis

Возвращает число , представляющее текущее время в миллисекундах с начала эпохи Unix, как это было возвращено функцией Date.now() .

Синтаксис

getTimestampMillis();

Соответствующие разрешения

Никто.


getType

Возвращает строку, описывающую тип заданного значения.

Тип ввода Возвращаемое значение
нить 'string'
число 'number'
логический 'boolean'
нулевой 'null'
неопределенный 'undefined'
Множество 'array'
Объект 'object'
Функция 'function'

Пример

const getType = require('getType');

const type = getType(value);
if (type === 'string') {
  // Handle string input.
} else if (type === 'number') {
  // Handle numeric input.
} else {
  logToConsole('Unsupported input type: ', type);
}

Синтаксис

getType(value);

Параметры

Параметр Тип Описание
value любой Входное значение.

Соответствующие разрешения

Никто.


hmacSha256

Вычисляет закодированную подпись с использованием хеш-кода аутентификации сообщений (HMAC) и алгоритма SHA-256. По умолчанию используется кодировка base64url .

Для использования этого API установите переменную среды SGTM_CREDENTIALS на сервере, указав путь к файлу ключа JSON в кодировке UTF-8 со следующим форматом:

{
  "keys": {
    "key1": "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5",
    "key2": "OTg3NjU0MzIxMHp5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2Jh",
    ...
  }
}

Значения представляют собой закодированные в base64 ключи HMAC. Текст JSON не должен начинаться с маркера порядка байтов.

Пример

const hmacSha256 = require('hmacSha256');
const toBase64 = require('toBase64');

const header = toBase64('{"alg":"HS256","typ":"JWT"}', {urlEncoding: true});
const claim = toBase64('{"sub":"1234567890","iat":1698164946}', {urlEncoding: true});
const signature = hmacSha256(header + '.' + claim, 'key1');

const jwt = header + "." + claim + '.' + signature;

Синтаксис

hmacSha256(data, keyId, options)

Параметры

Параметр Тип Описание
data нить Данные для вычисления значения HMAC.
keyId нить Идентификатор ключа из JSON-файла, указывающий на используемый ключ.
options объект Дополнительная настройка API. (См. раздел «Параметры» ниже.)

Параметры

Вариант Тип Описание
outputEncoding нить Указывает формат кодировки возвращаемого значения. Поддерживаемые форматы: hex , base64 или base64url . По умолчанию используется base64url , если не указан.

Соответствующие разрешения

use_custom_private_keys

Минимальная версия изображения

1.0.0


isRequestMpv1

Возвращает true если входящий запрос является запросом по протоколу Measurement Protocol V1, или false в противном случае.

Пример

const isRequestMpv1 = require('isRequestMpv1');

if (isRequestMpv1()) {
  // Handle Measurement Protocol V1 request.
  const events = extractEventsFromMpv1();
}

Синтаксис

isRequestMpv1();

Соответствующие разрешения

Никто.


isRequestMpv2

Возвращает true если входящий запрос является запросом по протоколу Measurement Protocol V2, или false в противном случае.

Пример

const isRequestMpv2 = require('isRequestMpv2');

if (isRequestMpv2()) {
  // Handle Measurement Protocol V2 request.
  const events = extractEventsFromMpv2();
}

Синтаксис

isRequestMpv2();

Соответствующие разрешения

Никто.


logToConsole

Выводит свои аргументы в консоль.

Эти журналы отображаются в Logs Explorer в консоли Google Cloud. В Logs Explorer выполните запрос logName =~ "stdout" чтобы увидеть записи журналов, созданные этим API.

Пример

const logToConsole = require('logToConsole');

const that = 123;
const those = { ... };
logToConsole('that is: ', that, ' and those is: ', those);

Синтаксис

logToConsole(argument1[, argument2, ...]);

Параметры

API принимает один или несколько аргументов, каждый из которых при необходимости преобразуется в строку и выводится в консоль.

Соответствующие разрешения

logging


makeInteger

Преобразует заданное значение в число (целое число).

Синтаксис

makeInteger(value);

Параметры

Параметр Тип Описание
value любой тип Значение для конвертации.

Соответствующие разрешения

Никто.


makeNumber

Преобразует заданное значение в число .

Синтаксис

makeNumber(value);

Параметры

Параметр Тип Описание
value любой тип Значение для конвертации.

Соответствующие разрешения

Никто.


makeString

Возвращает заданное значение в виде строки .

Синтаксис

makeString(value);

Параметры

Параметр Тип Описание
value любой тип Значение для конвертации.

Соответствующие разрешения

Никто.


makeTableMap

Преобразует простой табличный объект с двумя столбцами в Map . Это используется для преобразования поля шаблона SIMPLE_TABLE с двумя столбцами в более удобный для управления формат.

Например, эта функция может преобразовать объект таблицы:

[
  {'key': 'k1', 'value': 'v1'},
  {'key': 'k2', 'value': 'v2'}
]

на карту:

{
  'k1': 'v1',
  'k2': 'v2'
}

Возвращает объект : преобразованная Map пар ключ-значение добавлена ​​в него, в противном случае — null .

Синтаксис

makeTableMap(tableObj, keyColumnName, valueColumnName);

Параметры

Параметр Тип Описание
tableObj Список Объект таблицы, который необходимо преобразовать. Это список карт, где каждая Map представляет собой строку в таблице. Имя свойства в объекте строки — это имя столбца, а значение свойства — это значение столбца в строке.
keyColumnName нить Название столбца, значения которого станут ключами в преобразованной Map .
valueColumnName нить Название столбца, значения которого станут значениями в преобразованной Map .

Соответствующие разрешения

Никто.


parseUrl

Возвращает объект, содержащий все составляющие части заданного URL-адреса, аналогично объекту URL .

Для некорректно сформированных URL-адресов этот API вернет undefined . Для правильно отформатированных URL-адресов поля, отсутствующие в строке URL, будут иметь значение пустой строки, или, в случае searchParams , пустой объект.

Возвращаемый объект будет содержать следующие поля:

{
  href: string,
  origin: string,
  protocol: string,
  username: string,
  password: string,
  host: string,
  hostname: string,
  port: string,
  pathname: string,
  search: string,
  searchParams: Object<string, (string|Array)>,
  hash: string,
}

Пример

const parseUrl = require('parseUrl');

const urlObject = parseUrl('https://abc:xyz@example.com:8080/foo?param=val%2Cue#bar');

Синтаксис

parseUrl(url);

Параметры

Параметр Тип Описание
url нить Полный URL-адрес, который будет проанализирован.

Соответствующие разрешения

Никто.


returnResponse

Отправляет ответ, ранее заданный другими шаблонами, используя API, изменяющие ответ, включая setCookie , setPixelResponse , setResponseBody , setResponseHeader и setResponseStatus . По умолчанию используется HTTP-статус-код 200, пустое тело ответа и отсутствие заголовков.

Рекомендуется использовать этот API из клиентского шаблона.

Синтаксис

returnResponse();

Пример

См. пример runContainer .

Соответствующие разрешения

return_response


runContainer

Выполняет логику контейнера (переменные, триггеры, теги) в рамках события. Если этот API вызывается во время выполнения контейнера, контейнер запускается снова.

Коллбэки onComplete и onStart получают функцию с именем bindToEvent . Используйте bindToEvent для выполнения API в контексте события. Дополнительные сведения см. в примере addEventCallback .

Рекомендуется использовать этот API из клиентского шаблона.

Пример

const returnResponse = require('returnResponse');
const runContainer = require('runContainer');

// Runs the container with a simple pageview event and then returns a response.
runContainer({'event_name': 'pageview'}, () => returnResponse());

Синтаксис

runContainer(event, onComplete, onStart);

Параметры

Параметр Тип Описание
event объект Параметры события.
onComplete функция Функция обратного вызова, которая срабатывает после завершения обработки всех тегов.
onStart функция Функция обратного вызова, которая срабатывает немедленно, до начала обработки тегов.

Соответствующие разрешения

run_container


sendEventToGoogleAnalytics

Отправляет одно событие с использованием Common Event Data в Google Analytics и возвращает промис , который разрешается в объект с ключом location или отклоняется в объект с ключом reason . Место назначения, Google Analytics, определяется на основе идентификатора измерения в данных события.

Поле location устанавливается в значение заголовка location , если он присутствует.

Пример

const logToConsole = require('logToConsole');
const sendEventToGoogleAnalytics = require('sendEventToGoogleAnalytics');
const setResponseHeader = require('setResponseHeader');
const setResponseStatus = require('setResponseStatus');

// Sends an event to Google Analytics and returns failure if the request did not
// succeed. Additionally, if the request resulted in a redirect request, the
// code nominates a redirect response to be returned.
sendEventToGoogleAnalytics(event).then((response) => {
  if (response.location) {
    setResponseHeader('location', response.location);
    setResponseStatus(302);
  } else {
    setResponseStatus(200);
  }
  data.gtmOnSuccess();
}).catch((error) => {
  logToConsole(error.reason);
  setResponseStatus(500);
  data.gtmOnFailure();
});

Синтаксис

sendEventToGoogleAnalytics(event);

Параметры

Параметр Тип Описание
event объект Событие представлено в формате унифицированной схемы.

Соответствующие разрешения

Требуется разрешение send_http . Разрешение должно быть настроено таким образом, чтобы обеспечить доступ как минимум к:

  • Разрешить домены Google

sendHttpGet

Выполняет HTTP GET-запрос к указанному URL и возвращает промис , который разрешается с результатом после завершения запроса или истечения времени ожидания.

Результатом запроса является объект, содержащий три ключа: statusCode , headers и body . Если запрос не удался (например, неверный URL, отсутствие маршрута к хосту, ошибка согласования SSL и т. д.), промис будет отклонен с ошибкой: {reason: 'failed'} . Если был установлен параметр timeout и запрос истек по времени, промис будет отклонен с ошибкой: {reason: 'timed_out'}

Пример

const sendHttpGet = require('sendHttpGet');

// Returns the response body as the value for a variable.
return sendHttpGet('https://example.com/item/' + data.itemId, {
  headers: {key: 'value'},
  timeout: 500,
}).then((result) => result.body, () => undefined);

Синтаксис

sendHttpGet(url[, options]);

Параметры

Параметр Тип Описание
url нить Запрошенный URL.
options объект Дополнительные параметры запроса. (См. раздел «Параметры» ниже.)

Параметры

Вариант Тип Описание
headers нить Дополнительные заголовки запроса.
timeout число Время ожидания в миллисекундах, после которого запрос будет прерван. По умолчанию — 15000 .
authorization объект Необязательный объект авторизации из вызова функции getGoogleAuth для включения заголовков авторизации при отправке запросов к googleapis.com .

Соответствующие разрешения

send_http


sendHttpRequest

Выполняет HTTP-запрос к указанному URL и возвращает промис , который разрешается с ответом после завершения запроса или истечения времени ожидания.

Результатом запроса является объект, содержащий три ключа: statusCode , headers и body . Если запрос не удался (например, неверный URL, отсутствие маршрута к хосту, ошибка согласования SSL и т. д.), промис будет отклонен с ошибкой: {reason: 'failed'} . Если был установлен параметр timeout и запрос истек по времени, промис будет отклонен с ошибкой: {reason: 'timed_out'}

Пример

const sendHttpRequest = require('sendHttpRequest');
const setResponseBody = require('setResponseBody');
const setResponseHeader = require('setResponseHeader');
const setResponseStatus = require('setResponseStatus');

const postBody = 'interaction=click&campaign=promotion&medium=email';
// Sends a POST request and nominates response based on the response to the POST
// request.
sendHttpRequest('https://example.com/collect', {
  headers: {key: 'value'},
  method: 'POST',
  timeout: 500,
}, postBody).then((result) => {
  setResponseStatus(result.statusCode);
  setResponseBody(result.body);
  setResponseHeader('cache-control', result.headers['cache-control']);
});

Синтаксис

sendHttpRequest(url[, options[, body]]);

Параметры

Параметр Тип Описание
url нить Запрошенный URL.
options объект Дополнительные параметры запроса. (См. раздел «Параметры» ниже.)
body нить Необязательное тело запроса.

Параметры

Вариант Тип Описание
headers нить Дополнительные заголовки запроса.
method объект Метод запроса. По умолчанию используется GET .
timeout число Время ожидания в миллисекундах, после которого запрос будет прерван. По умолчанию — 15000 .
authorization объект Необязательный объект авторизации из вызова функции getGoogleAuth для включения заголовков авторизации при отправке запросов к googleapis.com .

Соответствующие разрешения

send_http


sendPixelFromBrowser

Отправляет команду браузеру для загрузки указанного URL-адреса в виде тега <img> . Этот протокол команд поддерживается в веб-тегах Google Tag for Google Analytics и Google Analytics: GA Event . Необходимо настроить URL-адрес контейнера сервера. Дополнительные сведения см. в инструкциях .

Этот API возвращает false если входящий запрос не поддерживает протокол команд или если ответ уже был отправлен. В противном случае этот API возвращает true .

Пример:

const sendPixelFromBrowser = require('sendPixelFromBrowser');

sendPixelFromBrowser('https://example.com/?id=123');

Синтаксис

sendPixelFromBrowser(url)

Параметры

Параметр Тип Описание
url нить URL-адрес, который нужно отправить в браузер.

Соответствующие разрешения

send_pixel_from_browser


setCookie

Устанавливает или удаляет cookie-файл с указанными параметрами.

Для удаления cookie-файла необходимо создать cookie-файл с тем же путем и доменом, что и при создании cookie-файла, и присвоить ему значение expires, указывающее на прошлое, например "Thu, 01 Jan 1970 00:00:00 GMT" .

Обратите внимание, что для отправки ответа клиенту необходимо вызвать метод returnResponse .

Пример

const setCookie = require('setCookie');

// Sets an httpOnly cookie with a max-age of 3600.
setCookie('cookieName', 'cookieValue', {'max-age': 3600, httpOnly: true});

Синтаксис

setCookie(name, value[, options[, noEncode]]);

Параметры

Параметр Тип Описание
name нить Название файла cookie. Регистр символов не имеет значения.
value нить Значение cookie-файла.
options объект Дополнительные атрибуты cookie: domain , expires , fallbackDomain , httpOnly , max-age , path , secure и sameSite . (См. раздел «Параметры » ниже.)
noEncode логический Если значение истинно, то значение cookie не будет закодировано. По умолчанию — false .

Параметры

  • domain: Хост, на который будет отправлен cookie-файл. Если установлено специальное значение 'auto', то хост будет вычислен автоматически с использованием следующей стратегии:

    • eTLD+1 заголовка Forwarded , если он присутствует.
    • eTLD+1 заголовка X-Forwarded-Host , если он присутствует.
    • eTLD+1 заголовка Host .
  • expires : Максимальный срок действия cookie-файла. Это должна быть строка даты в формате UTC, например, "Sat, 26 Oct 1985 08:21:00 GMT". Если заданы и expires , и max-age , приоритет имеет max-age .

  • httpOnly : Если true запрещает JavaScript доступ к cookie.

  • max-age : Количество секунд до истечения срока действия cookie-файла. Ноль или отрицательное число приведет к немедленному удалению cookie-файла. Если заданы оба параметра expires и max-age , приоритет имеет max-age .

  • path : Путь, который должен присутствовать в запрашиваемом URL-адресе, иначе браузер не отправит заголовок Cookie.

  • secure : Если установлено значение true , cookie отправляется на сервер только при запросе с конечной точки https: :.

  • sameSite : Утверждает, что cookie-файл не должен отправляться с запросами из других источников. Должен быть 'strict' , 'lax' или 'none' .

Соответствующие разрешения

set_cookie


setPixelResponse

Устанавливает тело ответа в виде GIF-изображения размером 1x1, заголовок Content-Type в значение 'image/gif', задает заголовки кэширования таким образом, чтобы пользовательские агенты не кэшировали ответ, и устанавливает статус ответа в значение 200.

Обратите внимание, что для отправки ответа клиенту необходимо вызвать метод returnResponse .

Синтаксис

setPixelResponse();

Соответствующие разрешения

Требуется разрешение access_response . Разрешение должно быть настроено таким образом, чтобы обеспечить доступ как минимум к:

  • headers - Должны разрешать следующие ключи
    • content-type
    • cache-control
    • expires
    • pragma
  • body
  • status

setResponseBody

Устанавливает тело ответа в соответствии с аргументом.

Обратите внимание, что для отправки ответа клиенту необходимо вызвать метод returnResponse .

Синтаксис

setResponseBody(body[, encoding]);

Параметры

Параметр Тип Описание
body нить Значение, которое следует установить в качестве тела ответа.
encoding нить Кодировка символов тела ответа (по умолчанию 'utf8' ). Поддерживаемые значения: 'ascii' , 'utf8' , 'utf16le' , 'ucs2' , 'base64' , 'latin1' , 'binary' и 'hex' .

Соответствующие разрешения

Требуется разрешение access_response . Разрешение должно быть настроено таким образом, чтобы обеспечить доступ как минимум к:

  • body

setResponseHeader

Устанавливает заголовок в возвращаемом ответе. Если заголовок с таким именем (регистр не имеет значения) был ранее установлен этим API, то последующий вызов перезапишет или очистит значение, установленное предыдущим вызовом.

Обратите внимание, что для отправки ответа клиенту необходимо вызвать метод returnResponse .

Синтаксис

setResponseHeader(name, value);

Параметры

Параметр Тип Описание
name нить Название заголовка. Названия HTTP-заголовков нечувствительны к регистру, поэтому название заголовка будет написано строчными буквами.
value строка неопределена Значение заголовка. Если оно равно null или не определено, то этот заголовок удаляется из возвращаемого ответа.

Соответствующие разрешения

Требуется разрешение access_response . Разрешение должно быть настроено таким образом, чтобы обеспечить доступ как минимум к:

  • headers

setResponseStatus

Устанавливает HTTP-код состояния ответа, который будет возвращен.

Обратите внимание, что для отправки ответа клиенту необходимо вызвать метод returnResponse .

Синтаксис

setResponseStatus(statusCode);

Параметры

Параметр Тип Описание
statusCode число Код состояния HTTP, который необходимо вернуть.

Соответствующие разрешения

Требуется разрешение access_response . Разрешение должно быть настроено таким образом, чтобы обеспечить доступ как минимум к:

  • status

sha256

Вычисляет дайджест SHA-256 входных данных и вызывает функцию обратного вызова с дайджестом, закодированным в base64, если только объект options не указывает другую кодировку выходных данных.

Данная сигнатура и поведение API соответствуют API sha256 для веб-контейнеров; однако для упрощения кода в пользовательских шаблонах в серверных контейнерах следует использовать API sha256Sync .

Пример

const encodeUriComponent = require('encodeUriComponent');
const sendHttpGet = require('sendHttpGet');
const sha256 = require('sha256');

sha256('inputString', (digest) => {
  sendHttpGet('https://example.com/collect?id=' + encodeUriComponent(digest));
});

sha256('inputString', (digest) => {
  sendHttpGet('https://example.com/collect?id=' + encodeUriComponent(digest));
}, {outputEncoding: 'hex'});

Синтаксис

sha256(input, onSuccess, options = undefined);

Параметры

Параметр Тип Описание
input нить Строка для хеширования.
onSuccess функция Вызов осуществляется с полученным дайджестом, закодированным в base64, если объект options не указывает другую кодировку вывода.
options объект Необязательный объект параметров для указания кодировки выходных данных. Если указан, объект должен содержать ключ outputEncoding со значением, равным одному из base64 или hex .

Соответствующие разрешения

Никто.


sha256Sync

Вычисляет и возвращает дайджест SHA-256 входных данных, закодированный в base64, если в объекте options не указана другая кодировка выходных данных.

Пример

const encodeUriComponent = require('encodeUriComponent');
const sendHttpGet = require('sendHttpGet');
const sha256Sync = require('sha256Sync');

const digestBase64 = sha256Sync('inputString');
const digestHex = sha256Sync('inputString', {outputEncoding: 'hex'});
sendHttpGet('https://example.com/collect?id=' + encodeUriComponent(digestBase64));
sendHttpGet('https://example.com/collect?id=' + encodeUriComponent(digestHex));

Синтаксис

sha256Sync(input, options = undefined);

Параметры

Параметр Тип Описание
input нить Строка для хеширования.
options объект Необязательный объект параметров для указания кодировки выходных данных. Если указан, объект должен содержать ключ outputEncoding со значением, равным одному из base64 или hex .

Соответствующие разрешения

Никто.


templateDataStorage

Возвращает объект с методами для доступа к хранилищу данных шаблона. Хранилище данных шаблона позволяет совместно использовать данные между выполнениями одного шаблона. Данные, хранящиеся в хранилище данных шаблона, сохраняются на сервере, на котором запущен контейнер. В большинстве случаев контейнер работает на нескольких серверах, поэтому хранение данных в хранилище данных шаблона не гарантирует, что каждый последующий запрос будет иметь доступ к этим данным.

Приставка «data» в названии «templateDataStorage» указывает на то, что с помощью этого API можно хранить только простые типы данных, не являющиеся функциями. Любые функции или ссылки на функции, переданные в API, будут храниться как null .

Синтаксис

const templateDataStorage = require('templateDataStorage');

// Returns a copy of the value stored for the given key, or null if nothing
// is stored with that key.
templateDataStorage.getItemCopy(key);

// Stores a copy of the value for the given key (or removes the data stored
// for the given key if the input value is null).
templateDataStorage.setItemCopy(key, value);

// Removes the value stored for the given key, if present.
templateDataStorage.removeItem(key);

// Deletes all values stored for the current template.
templateDataStorage.clear();

Пример

const sendHttpGet = require('sendHttpGet');
const setResponseBody = require('setResponseBody');
const setResponseStatus = require('setResponseStatus');
const templateDataStorage = require('templateDataStorage');

// Check to see if the item is in the cache.
const cachedBody = templateDataStorage.getItemCopy(data.key);
if (cachedBody) {
  setResponseBody(cachedBody);
  data.gtmOnSuccess();
  return;
}

sendHttpGet(data.url).then((result) => {
  if (result.statusCode >= 200 && result.statusCode < 300) {
    setResponseBody(result.body);
    templateDataStorage.setItemCopy(data.key, result.body);
    data.gtmOnSuccess();
  } else {
    data.gtmOnFailure();
  }
  setResponseStatus(result.statusCode);
});

Соответствующие разрешения

access_template_storage


testRegex

Проверяет строку на соответствие регулярному выражению, созданному с помощью API createRegex . Возвращает true если регулярное выражение совпадает. В противном случае возвращает false .

Регулярное выражение, созданное с использованием глобального флага, является состоянием. Подробности см. в документации по регулярным выражениям .

Пример

const createRegex = require('createRegex');
const testRegex = require('testRegex');

const domainRegex = createRegex('\\w+\\.com', 'i');

// createRegex returns null if the regex is invalid or Re2 is not available.
if (domainRegex === null) return;

// Returns true
testRegex(domainRegex, 'example.com/foobar');

Синтаксис

testRegex(regex, string);

Параметры

Параметр Тип Описание
regex Объект Регулярное выражение для проверки, возвращаемое API функции createRegex.
string нить Тестовая строка для проверки.

Соответствующие разрешения

Никто.


toBase64

Кодирует строку в формате base64 или base64url. По умолчанию используется кодировка base64.

Синтаксис

toBase64(input, options);

Параметры

Параметр Тип Описание
input нить Строка для кодирования.
options объект Дополнительная настройка API. (См. раздел «Параметры» ниже.)

Параметры

Вариант Тип Описание Минимальная версия
urlEncoding логический Если это так, результат будет закодирован с использованием формата base64url . 1.0.0

Пример

const toBase64 = require('toBase64');

const base64Hello = toBase64('hello');
const base64UrlHello = toBase64('hello', {urlEncoding: true});

Соответствующие разрешения

Никто.


BigQuery

Возвращает объект, предоставляющий функции BigQuery.

Функция BigQuery.insert позволяет записывать данные в таблицу BigQuery. Она возвращает промис , который разрешается при успешной вставке или отклоняется при ошибке.

Если вставка прошла успешно, обещание разрешается без аргументов.

Если вставка не удалась, промис отклоняется со списком объектов, содержащих причину ошибки и, возможно, объект строки, если произошла ошибка. Возможно, что часть запроса будет выполнена успешно, а другие части — нет. В этом случае промис отклоняется со списком ошибок для каждой строки, содержащим объект строки, помогающий определить, какие строки были вставлены (см. примеры ошибок ниже). Дополнительную информацию см. в документации BigQuery по сообщениям об ошибках .

Синтаксис

BigQuery.insert(connectionInfo, rows[, options]);

Параметры

Параметр Тип Описание
connectionInfo объект Определяет информацию, необходимую для подключения к таблице BigQuery. Имеется один необязательный и два обязательных параметра:
  • projectIdнеобязательный идентификатор проекта Google Cloud Platform. Если он опущен, projectId извлекается из переменной среды GOOGLE_CLOUD_PROJECT , если параметр разрешения access_bigquery для идентификатора проекта установлен на * или GOOGLE_CLOUD_PROJECT . Если контейнер сервера работает в Google Cloud, GOOGLE_CLOUD_PROJECT уже будет установлена ​​на идентификатор проекта Google Cloud.
  • datasetId - Идентификатор набора данных BigQuery.
  • tableId - Идентификатор таблицы BigQuery.
rows Множество Строки, которые нужно вставить в таблицу.
options объект Дополнительные параметры запроса. Поддерживаются следующие параметры: ignoreUnknownValues ​​и skipInvalidRows . Неизвестные ключи параметров игнорируются. (См. раздел «Параметры» ниже.)

Параметры

Параметр Тип Описание
ignoreUnknownValues логический Если установлено true , то принимаются строки, содержащие значения, не соответствующие схеме. Неизвестные значения игнорируются. По умолчанию — false .
skipInvalidRows логический Если установлено значение true , то будут вставлены все допустимые строки запроса, даже если существуют недопустимые строки. По умолчанию — false .

Примеры ошибок

Ошибка «модуль не найден» означает, что в вашем серверном контейнере, вероятно, используется более старая версия нашего образа, в которой модуль BigQuery еще не включен. Пожалуйста, повторно разверните ваш серверный контейнер с теми же настройками, используя наш скрипт развертывания . Модуль будет автоматически добавлен после завершения операции.

Ошибка, не связанная с вставкой, обычно имеет один объект ошибки с ключом reason :

[{reason: 'invalid'}]

Ошибка вставки может содержать несколько объектов error, включая массив errors и объект row . Ниже приведён пример ответа об ошибке при вставке двух строк, где ошибка обнаружена только в одной строке:

[
  {
    "errors": [
      {
        "reason":"invalid"
      }
    ],
    "row": {
      "string_col":"otherString",
      "number_col":-3,
      "bool_col":3
    }
  },
  {
    "errors": [
      {
        "reason":"stopped"
      }
    ],
    "row": {
      "string_col":"stringValue",
      "number_col":5,
      "bool_col:false
    }
  }
]

Пример

const BigQuery = require('BigQuery');

const connectionInfo = {
  'projectId': 'gcp-cloud-project-id',
  'datasetId': 'destination-dataset',
  'tableId': 'destination-table',
};

const rows = [{
  'column1': 'String1',
  'column2': 1234,
}];

const options = {
  'ignoreUnknownValues': true,
  'skipInvalidRows': false,
};

BigQuery.insert(connectionInfo, rows, options)
  .then(data.gtmOnSuccess, data.gtmOnFailure);

Соответствующие разрешения

access_bigquery


Firestore

Возвращает объект, предоставляющий функции Firestore.

Этот API поддерживает только Firestore в нативном режиме , а не Firestore в режиме хранилища данных . Кроме того, API поддерживает только использование базы данных по умолчанию .

Firestore.read

Функция Firestore.read считывает данные из документа Firestore и возвращает промис , который разрешается в объект, содержащий два ключа: id и data . Если документ не существует, промис отклоняется с объектом, содержащим ключ reason равный not_found .

Синтаксис

Firestore.read(path[, options]);

Параметры

Параметр Тип Описание
path нить Путь к документу или коллекции. Не должен начинаться или заканчиваться символом '/'.
options объект Дополнительные параметры запроса. Поддерживаются следующие параметры: projectId , disableCache и transaction . Неизвестные ключи параметров игнорируются. (См. раздел «Параметры » ниже.)

Параметры

Параметр Тип Описание
projectId нить Необязательный параметр . Идентификатор проекта Google Cloud Platform. Если он опущен, идентификатор projectId извлекается из переменной среды GOOGLE_CLOUD_PROJECT если параметр разрешения access_firestore для идентификатора проекта установлен на * или GOOGLE_CLOUD_PROJECT . Если контейнер сервера работает в Google Cloud, GOOGLE_CLOUD_PROJECT уже будет установлена ​​на идентификатор проекта Google Cloud.
disableCache логический Необязательный параметр . Определяет, следует ли отключать кэширование. Кэширование включено по умолчанию, в этом случае результаты будут кэшироваться на время выполнения запроса.
transaction нить Необязательный параметр . Значение, полученное из метода Firestore.runTransaction(). Указывает операцию, которая будет использоваться в рамках транзакции.

Пример

const Firestore = require('Firestore');

return Firestore.read('collection/document', {
  projectId: 'gcp-cloud-project-id',
}).then((result) => result.data.key, () => undefined);

Firestore.write

Функция Firestore.write записывает данные в документ или коллекцию Firestore. Если путь указывает на коллекцию, будет создан документ со случайно сгенерированным идентификатором. Если путь указывает на документ, который не существует, он будет создан. Этот API возвращает промис, который разрешается в идентификатор добавленного или измененного документа. Если используется опция транзакции, API также возвращает промис, но он не будет содержать идентификатор, поскольку запись выполняется пакетами.

Синтаксис

Firestore.write(path, input[, options]);

Параметры

Параметр Тип Описание
path нить Путь к документу или коллекции. Не должен начинаться или заканчиваться символом '/'.
input объект Значение, которое нужно записать в документ. Если задан параметр слияния, API объединит ключи из входных данных с документом.
options объект Дополнительные параметры запроса. Поддерживаются следующие параметры: projectId , merge и transaction . Неизвестные ключи параметров игнорируются. (См. раздел «Параметры » ниже.)

Параметры

Параметр Тип Описание
projectId нить Необязательный параметр . Идентификатор проекта Google Cloud Platform. Если он опущен, идентификатор projectId извлекается из переменной среды GOOGLE_CLOUD_PROJECT если параметр разрешения access_firestore для идентификатора проекта установлен на * или GOOGLE_CLOUD_PROJECT . Если контейнер сервера работает в Google Cloud, GOOGLE_CLOUD_PROJECT уже будет установлена ​​на идентификатор проекта Google Cloud.
merge логический Необязательный параметр . Если установлено значение true , то ключи из поля ввода объединяются с документом; в противном случае метод переопределит весь документ. По умолчанию — false .
transaction нить Необязательный параметр . Значение, полученное из метода Firestore.runTransaction(). Указывает операцию, которая будет использоваться в рамках транзакции.

Пример

const Firestore = require('Firestore');

const input = {key1: 'value1', key2: 12345};

Firestore.write('collection/document', input, {
  projectId: 'gcp-cloud-project-id',
  merge: true,
}).then((id) => {
  data.gtmOnSuccess();
}, data.gtmOnFailure);

Firestore.query

Функция Firestore.query запрашивает данные из заданной коллекции и возвращает промис, который разрешается в массив документов Firestore, соответствующих условиям запроса. Объект документа Firestore аналогичен объекту Firestore.read , описанному выше. Если документов, соответствующих условиям запроса, нет, возвращаемый промис разрешится в пустой массив.

Синтаксис

Firestore.query(collection, queryConditions[, options]);

Параметры

Параметр Тип Описание
collection нить Путь к коллекции. Не должен начинаться или заканчиваться символом '/'.
queryConditions Множество Массив условий запроса. Каждый запрос представлен в виде массива с тремя значениями: ключ , оператор и ожидаемое значение . Например: [['id', '<', '5'], ['state', '==', 'CA']].

Для формирования результата запроса условия объединяются с помощью операции И. Список совместимых операторов запросов см. в документации Firestore .
options объект Дополнительные параметры запроса. Поддерживаются следующие параметры: projectId , disableCache , limit и transaction . Неизвестные ключи параметров игнорируются. (См. раздел «Параметры » ниже.)

Параметры

Параметр Тип Описание
projectId нить Необязательный параметр . Идентификатор проекта Google Cloud Platform. Если он опущен, идентификатор projectId извлекается из переменной среды GOOGLE_CLOUD_PROJECT если параметр разрешения access_firestore для идентификатора проекта установлен на * или GOOGLE_CLOUD_PROJECT . Если контейнер сервера работает в Google Cloud, GOOGLE_CLOUD_PROJECT уже будет установлена ​​на идентификатор проекта Google Cloud.
disableCache логический Необязательный параметр . Определяет, следует ли отключать кэширование. Кэширование включено по умолчанию, в этом случае результаты будут кэшироваться на время выполнения запроса.
limit число Необязательный параметр . Изменяет максимальное количество результатов, возвращаемых запросом; по умолчанию — 5 .
transaction нить Необязательный параметр . Значение, полученное из метода Firestore.runTransaction(). Указывает операцию, которая будет использоваться в рамках транзакции.

Пример

const Firestore = require('Firestore');

const queries = const queries = [['id', '==', '5']];

return Firestore.query('collection', queries, {
  projectId: 'gcp-cloud-project-id',
  limit: 1,
}).then((documents) => documents[0].data.key, () => undefined);

Firestore.runTransaction

Функция Firestore.runTransaction позволяет пользователю атомарно читать и записывать данные в Firestore. Если возникает конфликт между параллельной записью или другой транзакцией, транзакция будет повторена до двух раз. Если она завершится неудачей после трех попыток, API отклонит запрос с ошибкой. Этот API возвращает промис, который разрешается в массив идентификаторов документов для каждой операции записи, если транзакция успешна, и отклоняет запрос с ошибкой, если она не удалась.

Синтаксис

Firestore.runTransaction(callback[, options]);

Параметры

Параметр Тип Описание
callback функция Функция обратного вызова, которая вызывается с идентификатором транзакции в виде строки. Идентификатор транзакции может передаваться в вызовы API для чтения/записи/запросов. Эта функция обратного вызова должна возвращать промис. Функция обратного вызова может выполняться до трех раз, прежде чем завершится с ошибкой.
options объект Дополнительные параметры запроса. Поддерживается только параметр projectId . Неизвестные ключи параметров игнорируются. (См. раздел «Параметры» ниже.)

Параметры

Параметр Тип Описание
projectId нить Необязательный параметр . Идентификатор проекта Google Cloud Platform. Если он опущен, идентификатор projectId извлекается из переменной среды GOOGLE_CLOUD_PROJECT если параметр разрешения access_firestore для идентификатора проекта установлен на * или GOOGLE_CLOUD_PROJECT . Если контейнер сервера работает в Google Cloud, GOOGLE_CLOUD_PROJECT уже будет установлена ​​на идентификатор проекта Google Cloud.

Пример

const Firestore = require('Firestore');

const path = 'collection/document';
const projectId = 'gcp-cloud-project-id';

Firestore.runTransaction((transaction) => {
  const transactionOptions = {
    projectId: projectId,
    transaction: transaction,
  };
  // Must return a promise.
  return Firestore.read(path, transactionOptions).then((result) => {
    const newInputCount = result.data.inputCount + 1;
    const input = {key1: 'value1', inputCount: newInputCount};
    return Firestore.write(path, input, transactionOptions);
  });
}, {
  projectId: projectId
}).then((ids) => {
  data.gtmOnSuccess();
}, data.gtmOnFailure);

Пример ошибки

В каждой функции Firestore будут обнаружены ошибки, которые будут отклонены с объектом, содержащим ключ reason :

Firestore.read(...).then(onSuccess, (error) => {
  if (error.reason === 'unknown') {
    // Handle the unknown error here.
  }
});

Причины ошибок могут включать, помимо прочего, коды ошибок REST API Firestore .

Соответствующие разрешения

access_firestore


JSON

Возвращает объект, содержащий функции для работы с JSON.

Функция parse() анализирует JSON-строку для создания значения или объекта, описываемого строкой. Если значение не может быть проанализировано (например, некорректный JSON), функция вернет undefined . Если входное значение не является строкой, оно будет преобразовано в строку.

Функция stringify() преобразует входные данные в строку JSON. Если значение не может быть разобрано (например, объект содержит цикл), метод вернет undefined .

Пример

const JSON = require('JSON');

// The JSON input string is converted to an object.
const object = JSON.parse('{"foo":"bar"}');

// The input object is converted to a JSON string.
const str = JSON.stringify({foo: 'bar'});

Синтаксис

JSON.parse(stringInput);
JSON.stringify(value);

Соответствующие разрешения

Никто.


Math

Объект, предоставляющий Math функции.

Синтаксис

const Math = require('Math');

// Retrieve the absolute value.
const absolute = Math.abs(-3);

// Round the input down to the nearest integer.
const roundedDown = Math.floor(3.6);

// Round the input up to the nearest integer.
const roundedUp = Math.ceil(2.2);

// Round the input to the nearest integer.
const rounded = Math.round(3.1);

// Return the largest argument.
const biggest = Math.max(1, 3);

// Return the smallest argument.
const smallest = Math.min(3, 5);

// Return the first argument raised to the power of the second argument.
const powerful = Math.pow(3, 1);

// Return the square root of the argument.
const unsquared = Math.sqrt(9);

Параметры

Параметры математических функций преобразуются в числа.

Соответствующие разрешения

Никто.


Messages

Следующие API-интерфейсы работают совместно, позволяя передавать сообщения между различными частями контейнера.


addMessageListener

Добавляет функцию, которая прослушивает сообщения определенного типа. Когда сообщение этого типа отправляется с помощью API sendMessage (обычно с помощью тега), функция обратного вызова выполняется синхронно. Функция обратного вызова запускается с двумя параметрами:

  1. messageType:string
  2. message:Object

Если функция обратного вызова добавлена ​​в клиент, она будет получать сообщения от всех событий, создаваемых этим клиентом. Если функция обратного вызова должна получать сообщения только от определенного события, то привяжите этот API к событию, используя bindToEvent в функции onStart API runContainer . См. пример.

Синтаксис

const addMessageListener = require('addMessageListener');

addMessageListener('send_pixel', (messageType, message) => {
  // This will be run whenever something sends a 'send_pixel' message.
});

Параметры

Параметр Тип Описание
messageType нить Тип сообщения, которое необходимо отслеживать. Если значение не является строкой, оно будет преобразовано в строку.
callback функция Функция обратного вызова, которая выполняется при отправке сообщения соответствующего типа. Если функция обратного вызова не является функцией, API ничего не будет делать.

Пример

const addMessageListener = require('addMessageListener');
const claimRequest = require('claimRequest');
const extractEventsFromMpv1 = require('extractEventsFromMpv1');
const returnResponse = require('returnResponse');
const runContainer = require('runContainer');

claimRequest();
addMessageListener('send_pixel', (messageType, message) => {
  // This will be run whenever a tag sends a 'send_pixel' message.
});

const events = extractEventsFromMpv1();
let eventsCompleted = 0;
events.forEach((event, i) => {
  runContainer(events[i], /* onComplete= */ () => {
    if (events.length === ++eventsCompleted) {
      returnResponse();
    }
  }, /* onStart= */ (bindToEvent) => {
    if (i === 0) {
      bindToEvent(addMessageListener)('send_pixel', (messageType, message) => {
        // This will be called whenever a tag for the first event sends a
        // 'send_pixel' message.
      });
    }
  });
});

Соответствующие разрешения

Требуется разрешение use_message . Разрешение должно быть настроено таким образом, чтобы разрешать как минимум:

  • Тип сообщения с Usage функций listen или listen_and_send .

hasMessageListener

Возвращает true, если для заданного типа сообщения добавлен обработчик сообщений. В противном случае возвращает false.

Синтаксис

const hasMessageListener = require('hasMessageListener');

hasMessageListener('send_pixel');

Соответствующие разрешения

Никто.


sendMessage

Отправляет сообщение указанного типа зарегистрированному слушателю. Это можно использовать для отправки сообщений из тега обратно клиенту, запустившему контейнер.

Синтаксис

const sendMessage = require('sendMessage');

sendMessage('send_pixel', {url: 'https://analytics.example.com/collect'});

Параметры

Параметр Тип Описание
messageType нить Тип отправляемого сообщения. Если значение не является строкой, оно будет преобразовано в строку.
message объект Сообщение для отправки. Если сообщение не является объектом, API ничего не сделает.

Соответствующие разрешения

Требуется разрешение use_message . Разрешение должно быть настроено таким образом, чтобы разрешать как минимум:

  • Тип сообщения с Usage функций listen_and_send или send .

Object

Возвращает объект, предоставляющий методы Object .

Метод keys() обеспечивает поведение метода Object.keys() из стандартной библиотеки. Он возвращает массив имен перечисляемых свойств заданного объекта в том же порядке, что и в цикле for...in... Если входное значение не является объектом, оно будет преобразовано в объект.

Метод values() обеспечивает поведение метода Object.values() из стандартной библиотеки. Он возвращает массив значений перечисляемых свойств заданного объекта в том же порядке, что и в цикле for...in... Если входное значение не является объектом, оно будет преобразовано в объект.

Метод entries() обеспечивает поведение стандартного библиотечного метода Object.entries() . Он возвращает массив пар перечислимых свойств [key, value] заданного объекта в том же порядке, что и в цикле for...in... Если входное значение не является объектом, оно будет преобразовано в объект.

Метод freeze() обеспечивает поведение, аналогичное методу Object.freeze() из стандартной библиотеки. Замороженный объект больше нельзя изменить; замораживание объекта предотвращает добавление к нему новых свойств, удаление существующих свойств и изменение значений существующих свойств. freeze() возвращает тот же объект, который был передан. Примитивный или нулевой аргумент будет рассматриваться как замороженный объект и будет возвращен.

Метод delete() обеспечивает поведение оператора delete из стандартной библиотеки. Он удаляет заданный ключ из объекта, если объект не заморожен. Как и оператор delete из стандартной библиотеки, он возвращает true если первое входное значение ( objectInput ) является объектом, который не заморожен, даже если второе входное значение ( keyToDelete ) указывает на несуществующий ключ. Во всех остальных случаях он возвращает false . Однако он отличается от оператора delete из стандартной библиотеки следующими способами:

  • keyToDelete не может быть строкой, разделённой точками, которая указывает на вложенный ключ.
  • delete() не может использоваться для удаления элементов из массива.
  • delete() нельзя использовать для удаления каких-либо свойств из глобальной области видимости.

Синтаксис

Object.keys(objectInput)
Object.values(objectInput)
Object.entries(objectInput)
Object.freeze(objectInput)
Object.delete(objectInput, keyToDelete)

Параметры

Объект.ключи

Параметр Тип Описание
объектВвод любой Объект, ключи которого необходимо перечислить. Если входные данные не являются объектом, они будут преобразованы в объект.

Объект.значения

Параметр Тип Описание
объектВвод любой Объект, значения которого необходимо перечислить. Если входные данные не являются объектом, они будут преобразованы в объект.

Объект.записи

Параметр Тип Описание
объектВвод любой Объект, пары ключ/значение которого необходимо перечислить. Если входные данные не являются объектом, они будут преобразованы в объект.

Object.freeze

Параметр Тип Описание
объектВвод любой Объект, который нужно заморозить. Если входные данные не являются объектом, они будут рассматриваться как замороженный объект.

Object.delete

Параметр Тип Описание
объектВвод любой Объект, ключ которого нужно удалить.
keyToDelete нить Ключ верхнего уровня для удаления.

Пример

const Object = require('Object');

// The keys of an object are enumerated in an array.
const keys = Object.keys({foo: 'bar'});

// The values of an object are enumerated in an array.
const values = Object.values({foo: 'bar'});

// The key/value pairs of an object are enumerated in an array.
const entries = Object.entries({foo: 'bar'});

// The input object is frozen.
const frozen = Object.freeze({foo: 'bar'});

// The key is removed from the input object.
const obj1 = {deleteme: 'value'};
Object.delete(obj1, 'deleteme');
// Only a top-level key can be specified as the key to delete.
const obj2 = {nested: {key: 'value'}};
Object.delete(obj2, 'nested.key'); // This has no effect.
Object.delete(obj2.nested, 'key'); // This deletes the nested key.

Promise

Возвращает объект, предоставляющий методы для взаимодействия с промисами.

Промисы функционально эквивалентны промисам JavaScript. Каждый экземпляр имеет три метода, которые возвращают объект Promise, позволяющий выполнить дальнейшие действия после завершения промиса:

  • .then() ` обрабатывает как успешно завершенные, так и отклоненные случаи. Он принимает в качестве параметров два коллбэка: один для успешного случая и один для случая неудачи.
  • .catch() ` обрабатывает только отклоненные случаи. Принимает один коллбэк в качестве параметра.
  • .finally() ` позволяет выполнить код независимо от того, был ли промис разрешен или отклонен. Принимает в качестве параметра один коллбэк, который вызывается без аргументов.

Переменная, возвращающая промис, принимает значение, равное разрешенному промису, или false если промис отклоняется.

Пример

promise.then((resolvedValue) => {
    // Handles when promise resolves.
  }, (rejectedValue) => {
    // Handles when promise rejects.
  });
promise.catch((rejectedValue) => {
    // Handles when promise rejects.
  });
promise.finally(() => {
    // Runs regardless of whether or not the previous promise resolves or
    // rejects.
  });

Promise.all

Возвращает промис, который либо:

  • разрешается, когда все входные данные обработаны, или
  • отклоняет, если какой-либо из входных сигналов отклоняется.

Синтаксис

Promise.all(inputs);

Параметры

Параметр Тип Описание
inputs Множество Массив значений или промисов. Если входные данные не являются промисом, они передаются как разрешенное значение промиса. Выбрасывает ошибку, если входные данные не являются массивом.

Пример

const Promise = require('Promise');
const sendHttpGet = require('sendHttpGet');

return Promise.all(['a', sendHttpGet('https://example.com')])
  .then((results) => {
    // results will equal: ['a', {statusCode: 200, headers: {}, body: ''}]
  });

Соответствующие разрешения

Никто.

Promise.create

Создает промис, функционально эквивалентный промису в JavaScript.

Синтаксис

Promise.create(resolver);

Параметры

Параметр Тип Описание
resolver функция Функция, вызываемая с двумя другими функциями — resolve и reject. Возвращаемый промис будет разрешен или отклонен при вызове соответствующего параметра. Выбрасывает ошибку, если resolver не является функцией.

Пример

const Promise = require('Promise');

return Promise.create((resolve, reject) => {
  // Do asynchronous work that eventually calls resolve() or reject()
});

Соответствующие разрешения

Никто.

Тестирование API

Эти API работают с изолированными JavaScript-тестами для создания тестов для пользовательских шаблонов в Google Tag Manager. Для работы с этими тестовыми API не требуется оператор require() . [Узнайте больше о тестах пользовательских шаблонов].


assertApi

Возвращает объект-сопоставитель, который можно использовать для удобного выполнения проверок относительно заданного API.

Синтаксис

assertApi(apiName)

Параметры

Параметр Тип Описание
apiName нить Название проверяемого API; та же строка, что и передана в require() .

Совпадающие

  • Subject.wasCalled()
  • Subject.wasNotCalled()
  • Subject.wasCalledWith(...expected)
  • Subject.wasNotCalledWith(...expected)

Примеры

assertApi('sendPixel').wasCalled();
assertApi('getUrl').wasNotCalled();
assertApi('makeNumber').wasCalledWith('8');
assertApi('setInWindow').wasNotCalledWith('myVar', 'theWrongValue');

assertThat

API assertThat создан по образцу библиотеки Google [Truth]. Он возвращает объект, который можно использовать для гибкой проверки значений объекта. Сбой проверки немедленно остановит тест и пометит его как неудачный. Однако сбой в одном тесте не повлияет на другие тестовые случаи.

Синтаксис

assertThat(actual, opt_message)

Параметры

Параметр Тип Описание
actual любой Значение, используемое в проверках беглости речи.
opt_message нить Дополнительное сообщение, которое следует вывести в случае неудачи проверки.

Совпадающие

Совместитель Описание
isUndefined() Утверждает, что субъект undefined .
isDefined() Утверждает, что субъект не является undefined .
isNull() Утверждает, что субъект является null .
isNotNull() Утверждает, что субъект не является null .
isFalse() Утверждает, что субъект является false .
isTrue() Утверждает, что утверждение true .
isFalsy() Утверждает, что субъект является ложным. Ложными значениями являются undefined , null , false , NaN , 0 и '' (пустая строка).
isTruthy() Утверждает, что субъект является истинным. Ложные значения: undefined , null , false , NaN , 0 и '' (пустая строка).
isNaN() Утверждается, что субъектом является значение NaN.
isNotNaN() Утверждает, что субъектом является любое значение, кроме NaN.
isInfinity() Утверждает, что субъект представляет собой положительную или отрицательную бесконечность.
isNotInfinity() Утверждает, что субъектом является любое значение, кроме положительной или отрицательной бесконечности.
isEqualTo(expected) Утверждает, что объект равен заданному значению. Это сравнение значений, а не сравнение ссылок. Содержимое объектов и массивов сравнивается рекурсивно.
isNotEqualTo(expected) Утверждает, что значение объекта не равно заданному значению. Это сравнение значений, а не сравнение ссылок. Содержимое объектов и массивов сравнивается рекурсивно.
isAnyOf(...expected) Утверждает, что значение объекта равно одному из заданных значений. Это сравнение значений, а не сравнение ссылок. Содержимое объектов и массивов сравнивается рекурсивно.
isNoneOf(...expected) Утверждает, что объект не равен ни одному из заданных значений. Это сравнение значений, а не сравнение ссылок. Содержимое объектов и массивов сравнивается рекурсивно.
isStrictlyEqualTo(expected) Утверждает, что субъект строго равен ( === ) заданному значению.
isNotStrictlyEqualTo(expected) Утверждает, что субъект не является строго равным ( !== ) заданному значению.
isGreaterThan(expected) Утверждает, что значение объекта больше ( > ) заданного значения в упорядоченном сравнении.
isGreaterThanOrEqualTo(expected) Утверждает, что значение в упорядоченном сравнении больше или равно ( >= ) заданному значению.
isLessThan(expected) Утверждает, что значение объекта меньше ( < ) заданного значения в упорядоченном сравнении.
isLessThanOrEqualTo(expected) Утверждает, что значение объекта меньше или равно ( <= ) заданному значению в упорядоченном сравнении.
contains(...expected) Утверждает, что объект представляет собой массив или строку, содержащую все заданные значения в любом порядке. Это сравнение значений, а не сравнение ссылок. Содержимое объектов и массивов сравнивается рекурсивно.
doesNotContain(...expected) Утверждает, что объект представляет собой массив или строку, не содержащую ни одного из заданных значений. Это сравнение значений, а не сравнение ссылок. Содержимое объектов и массивов сравнивается рекурсивно.
containsExactly(...expected) Утверждается, что объект представляет собой массив, содержащий все заданные значения в любом порядке и не содержащий других значений. Это сравнение значений, а не сравнение ссылок. Содержимое объектов и массивов сравнивается рекурсивно.
doesNotContainExactly(...expected) Утверждает, что объект представляет собой массив, содержащий набор значений, отличных от заданных значений, в любом порядке. Это сравнение значений, а не сравнение ссылок. Содержимое объектов и массивов сравнивается рекурсивно.
hasLength(expected) Проверяет, что объект является массивом или строкой заданной длины. Проверка всегда завершается неудачей, если значение не является массивом или строкой.
isEmpty() Проверяет, что объект представляет собой пустой массив или строку (длина = 0). Проверка всегда завершается неудачей, если значение не является массивом или строкой.
isNotEmpty() Проверяет, что объект является массивом или строкой, не пустой (длина > 0). Проверка всегда завершается неудачей, если значение не является массивом или строкой.
isArray() Утверждает, что тип объекта — массив.
isBoolean() Утверждает, что тип объекта является логическим (булевым).
isFunction() Утверждает, что тип объекта является функцией.
isNumber() Утверждает, что тип субъекта — число.
isObject() Утверждает, что тип субъекта — объект.
isString() Утверждает, что тип объекта — строка.

Примеры

assertThat(undefined).isUndefined();
assertThat(id, 'ID must be defined').isDefined();
assertThat(null).isNull();
assertThat(undefined).isNotNull();
assertThat(true).isTrue();
assertThat(false).isFalse();
assertThat(1).isTruthy();
assertThat('').isFalsy();
assertThat(1/0).isInfinity();
assertThat(0).isNotInfinity();
assertThat(-'foo').isNaN();
assertThat(100).isNotNaN();
assertThat(sentUrl).isEqualTo('https://endpoint.example.com/?account=12345');
assertThat(category).isNotEqualTo('premium');
assertThat(5).isAnyOf(1, 2, 3, 4, 5);
assertThat(42).isNoneOf('the question', undefined, 41.9);
assertThat('value').isStrictlyEqualTo('value');
assertThat('4').isNotStrictlyEqualTo(4);
assertThat(['a', 'b', 'c']).contains('a', 'c');
assertThat(['x', 'y', 'z']).doesNotContain('f');
assertThat(['1', '2', '3']).containsExactly('3', '2', '1');
assertThat(['4', '5']).doesNotContainExactly('4');
assertThat('a string').hasLength(8);
assertThat([]).isEmpty();
assertThat('another string').isNotEmpty();

fail

Немедленно завершает текущую проверку и выводит заданное сообщение, если оно предоставлено.

Синтаксис

fail(opt_message);

Параметры

Параметр Тип Описание
opt_message нить Необязательный текст сообщения об ошибке.

Пример

fail('This test has failed.');

mock

mock API позволяет переопределять поведение изолированных API. Имитационный API безопасен для использования в шаблонном коде, но работает только в тестовом режиме. Имитационные объекты сбрасываются перед каждым запуском теста.

Синтаксис

mock(apiName, returnValue);

Параметры

Параметр Тип Описание
apiName нить Название API, который нужно имитировать; та же строка, что и передана в require()
returnValue любой Возвращаемое значение для API или функции, вызываемой вместо API. Если returnValue — это функция, то вместо API в изолированной среде вызывается именно эта функция; если returnValue — это что-либо, кроме функции, то вместо API в изолированной среде возвращается значение, соответствующее этой функции.

Примеры

mock('encodeUri', "https://endpoint.example.com/?account=12345");
mock('sendPixel', function(url, onSuccess, onFailure) {
    onSuccess();
});

mockObject

API mockObject позволяет переопределять поведение изолированных API, возвращающих объект. API безопасен для использования в шаблонном коде, но работает только в тестовом режиме. Моки сбрасываются перед каждым запуском теста.

Синтаксис

mockObject(apiName, objectMock);

Параметры

Параметр Тип Описание
apiName нить Название API, который нужно имитировать; та же строка, что и передана в require()
objectMock объект Возвращаемое значение для API или функции, вызываемой вместо API. Должен быть объектом.

Примеры

const storage = {};
let firestoreId = 1;

function asTestPromise(result) {
  return {
    then: (callback) => callback(result)
  };
}

mockObject('Firestore', {
  write: (collection, input) => {
    storage[collection + '/' + (++firestoreId)] = input;
    return asTestPromise(firestoreId);
  },
  read: (document) => asTestPromise({data: storage[document]})
});

runCode

Выполняет код шаблона, то есть содержимое вкладки «Код» , в текущей тестовой среде с заданным входным объектом данных.

Синтаксис

runCode(data)

Параметры

Параметр Тип Описание
data объект Объект данных, который будет использоваться в тесте.

Возвращаемое значение

Возвращает значение переменной для шаблонов переменных; возвращает undefined для всех остальных типов шаблонов.

Пример

runCode({field1: 123, field2: 'value'});