এই ডকুমেন্টে সার্ভার-সাইড কাস্টম টেমপ্লেটের জন্য অনুমতির রূপরেখা দেওয়া হয়েছে।
প্রতিটি অনুমতি হল:
- যেসব API-এর জন্য এগুলি প্রয়োজন, সেগুলি চেক করে।
- কোন API ব্যবহার করা হয়েছে তার উপর ভিত্তি করে স্যান্ডবক্স করা জাভাস্ক্রিপ্টে অটোমেটিক শনাক্ত করা হয়েছে। কাস্টম টেমপ্লেট এডিটরে (দ্রুত ফিডব্যাক লুপের জন্য) এডিট করা হলে এবং কোড কম্পাইল করা হলে (সঠিক অনুমতি এনফোর্স করা হয়েছে কিনা তা যাচাই করার জন্য) এটি ঘটে।
- অনুমতি আরও নির্দিষ্ট করতে, কাস্টম টেমপ্লেট এডিটরে এডিট করা যাবে।
queryPermissionAPI-এর মাধ্যমে স্যান্ডবক্স করা জাভাস্ক্রিপ্টে কোয়েরি করা যায়।
access_bigquery
যে নাম দেখানো হবে: BigQuery অ্যাক্সেস করে
বিবরণ: Google Cloud Platform-এ BigQuery-তে অ্যাক্সেস দেয়।
কনফিগারেশন: BigQuery-এর সাথে ব্যবহার করার জন্য নির্দিষ্ট প্রোজেক্ট, ডেটাসেট ও টেবিল
কম্বিনেশনকে অনুমতি দেওয়ার বিকল্প। GOOGLE_CLOUD_PROJECT-এর প্রোজেক্ট আইডি কনফিগারেশন সেট করলে, projectId-কে BigQuery API
parameter থেকে বাদ দেওয়া হলে, প্রোজেক্ট আইডি হিসেবে GOOGLE_CLOUD_PROJECT এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করা যাবে।
প্রয়োজন: BigQuery
কোয়েরি সিগনেচার:
queryPermission('access_bigquery', <operation>, <options>)
মনে রাখবেন: <operation> হল একটি স্ট্রিং এবং এতে নিম্নলিখিত ভ্যালু থাকতে পারে:
- কিছু লিখতে
<options> হল একটি অবজেক্ট যাতে নিম্নলিখিত আইটেমগুলি থাকে:
{
'projectId': <project_id>,
'datasetId': <dataset_id>,
'tableId': <table_id>
}
কোডের উদাহরণ
const BigQuery = require('BigQuery');
const queryPermission = require('queryPermission');
const connectionInfo = {
'projectId': 'gcp-cloud-project-id',
'datasetId': 'destination-dataset',
'tableId': 'destination-table',
};
if (queryPermission('access_bigquery', 'write', connectionInfo)) {
const rows = [{
'column1': 'String1',
'column2': 1234,
}];
const options = {
'ignoreUnknownValues': true,
'skipInvalidRows': false,
};
BigQuery.insert(connectionInfo, rows, options)
.then(data.gtmOnSuccess, data.gtmOnFailure);
}
access_firestore
যে নাম দেখানো হবে: Google Firestore অ্যাক্সেস করে
বিবরণ: Google Firestore-এ অ্যাক্সেস করার অনুমতি দেয়।
কনফিগারেশন: Firestore-এর সাথে ব্যবহার করার জন্য নির্দিষ্ট প্রোজেক্ট এবং পাথ (ওয়াইল্ডকার্ড সিনট্যাক্স
সমর্থিত) কম্বিনেশনের অনুমতি দেওয়ার বিকল্প। প্রোজেক্ট আইডি সেট করা
GOOGLE_CLOUD_PROJECT-এর কনফিগারেশন প্রোজেক্ট আইডি হিসেবে
GOOGLE_CLOUD_PROJECT এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করার অনুমতি দেবে যখন projectId
Firestore API parameter থেকে বাদ দেওয়া হবে।
প্রয়োজন: Firestore
কোয়েরি সিগনেচার:
queryPermission('access_firestore', <operation>, <options>)
মনে রাখবেন: <operation> হল একটি স্ট্রিং এবং এতে নিম্নলিখিত ভ্যালু থাকতে পারে:
- পড়া - API-তে পড়া ও কোয়েরি করার অ্যাক্সেস দেয়
- write - API-তে লেখার অ্যাক্সেস দেয়
- read_write - API-তে পড়া, লেখা ও কোয়েরি করার অ্যাক্সেস দেয়
<options> হল একটি অবজেক্ট যাতে নিম্নলিখিত আইটেমগুলি থাকে:
{
'projectId': <project_id>,
'path': <path>
}
কোডের উদাহরণ
const Firestore = require('Firestore');
const queryPermission = require('queryPermission');
const options = {
'projectId': 'gcp-cloud-project-id',
'path': 'collection/document',
};
if (queryPermission('access_firestore', 'read', options)) {
Firestore.read('collection/document', {
projectId: 'gcp-cloud-project-id',
}).then(data.gtmOnSuccess, data.gtmOnFailure);
}
access_response
যে নাম দেখানো হবে: অ্যাক্সেস সংক্রান্ত উত্তর
বিবরণ: রেসপন্স বডি, হেডার বা স্ট্যাটাস অ্যাক্সেস করে।
কনফিগারেশন: যেকোনও বা নির্দিষ্ট অ্যাক্সেসের অনুমতি দেওয়ার বিকল্প, যার সাথে বিভিন্ন সাবকম্পোনেন্টের অ্যাক্সেস নিয়ন্ত্রণ করার জন্য সাব-অপশন থাকে।
প্রয়োজন: setPixelResponse, setResponseBody,
setResponseHeader, setResponseStatus
কোয়েরি সিগনেচার:
queryPermission('access_response', 'write', <component>[, <optional component name>])
Notes: আউটগোয়িং HTTP রেসপন্স কম্পোনেন্ট অ্যাক্সেস করা যাবে কিনা তা নিয়ন্ত্রণ করে।
কোডের উদাহরণ
const queryPermission = require('queryPermission');
const setResponseBody = require('setResponseBody');
const setResponseHeader = require('setResponseHeader');
const setResponseStatus = require('setResponseStatus');
if (queryPermission('access_response', 'write', 'header', 'Content-Type')) {
setResponseHeader('Content-Type', 'text/plain');
}
if (queryPermission('access_response', 'write', 'body')) {
setResponseBody('Not Found');
}
if (queryPermission('access_response', 'write', 'status')) {
setResponseStatus(404);
}
access_template_storage
যে নাম দেখানো হবে: টেমপ্লেট স্টোরেজ অ্যাক্সেস করে
বিবরণ: টেমপ্লেটের জন্য অস্থায়ী স্টোরেজে অ্যাক্সেস দেয় যা সার্ভার-সাইড প্রসেসের লাইফটাইম পর্যন্ত স্থায়ী হতে পারে।
কনফিগারেশন: কিছু নেই
প্রয়োজন: templateDataStorage
কোয়েরি স্বাক্ষর: queryPermission('access_template_storage')
কোডের উদাহরণ
const queryPermission = require('queryPermission');
const templateDataStorage = require('templateDataStorage');
const key = 'my_key';
if (queryPermission('access_template_storage')) {
const value = templateDataStorage.getItemCopy(key);
}
get_cookies
যে নাম দেখানো হবে: কুকি ভ্যালু পড়ে
বিবরণ: নির্দিষ্ট নামের কুকির ভ্যালু পড়ে।
কনফিগারেশন: রিডিংয়ের জন্য অনুমোদিত কুকির নামের তালিকা।
প্রয়োজন: getCookieValues
কোয়েরি স্বাক্ষর: queryPermission('get_cookies', <name>)
মনে রাখবেন: কুকির নামের উপর নির্ভর করে সেটি পড়া যাবে কিনা তা নিয়ন্ত্রণ করে।
কোডের উদাহরণ
const queryPermission = require('queryPermission');
const getCookieValues = require('getCookieValues');
const cookieName = 'info';
let cookieValues;
if (queryPermission('get_cookies', cookieName)) {
cookieValues = getCookieValues(cookieName);
}
লগ করা হচ্ছে
যে নাম দেখানো হবে: কনসোলে লগ করে
বিবরণ: ডেভেলপার কনসোল ও ট্যাগ ম্যানেজারের প্রিভিউ মোডে লগ করে।
কনফিগারেশন: প্রোডাকশনে লগ-ইন করার সুবিধা চালু করার বিকল্প। ডিফল্ট হিসেবে শুধুমাত্র
ডিবাগ/প্রিভিউতে লগ-ইন করার সুবিধা চালু করে। অনুমতি না দেওয়া হলে, logToConsole
কোনও সমস্যা দেখাবে না, তবে লগ মেসেজটি চেপে যাবে।
প্রয়োজন: logToConsole
কোয়েরি স্বাক্ষর: queryPermission('logging')
Notes: কোনও কাস্টম টেমপ্লেট ডেভেলপার কনসোলে লগ করতে পারবে কিনা তা নিয়ন্ত্রণ করে।
কোডের উদাহরণ
const queryPermission = require('queryPermission');
const logToConsole = require('logToConsole');
// Note that it's fine to call log, since the log call will be ignored if
// logging isn't permitted in the current environment.
logToConsole('diagnostic info');
use_message
যে নাম দেখানো হবে: মেসেজ ব্যবহার করে
বিবরণ: addMessageListener বা
sendMessage API ব্যবহার করে মেসেজ পাঠায় বা রিসিভ করে।
কনফিগারেশন: মেসেজের ধরন এবং টেমপ্লেট শুনতে, পাঠাতে বা দুটিই করতে পারে কিনা তা নির্দিষ্ট করার বিকল্প।
প্রয়োজনীয়: addMessageListener, sendMessage
কোয়েরি স্বাক্ষর: queryPermission('use_message', <usage>, <message type>)
মনে রাখবেন: ব্যবহার listen, send বা listen_and_send-এর মধ্যে যেকোনও একটি হতে পারে।
কোডের উদাহরণ
const queryPermission = require('queryPermission');
const sendMessage = require('sendMessage');
if (queryPermission('use_message', 'send', 'set_cookie')) {
sendMessage('set_cookie', {name: 'foo', value: 'bar'});
}
read_container_data
যে নাম দেখানো হবে: কন্টেনার ডেটা পড়ে
বিবরণ: কন্টেনার সম্পর্কে ডেটা পড়ে।
কনফিগারেশন: কিছু নেই।
প্রয়োজনীয়: getClientName, getContainerVersion
কোয়েরি স্বাক্ষর: queryPermission('read_container_data')
মনে রাখবেন: কাস্টম টেমপ্লেট কন্টেনার ডেটা পড়তে পারবে কিনা তা নিয়ন্ত্রণ করে।
কোডের উদাহরণ
const getContainerVersion = require('getContainerVersion');
const queryPermission = require('queryPermission');
if (queryPermission('read_container_data')) {
return getContainerVersion();
}
read_event_data
যে নাম দেখানো হবে: ইভেন্ট ডেটা পড়ে
বিবরণ: ইভেন্ট থেকে ডেটা পড়ে।
কনফিগারেশন: যেকোনও অ্যাক্সেস বা অনুমোদিত কী পাথের তালিকা (ওয়াইল্ডকার্ড সিনট্যাক্স কাজ করে) দ্বারা নিয়ন্ত্রিত নির্দিষ্ট অ্যাক্সেসের অনুমতি দেওয়ার বিকল্প।
প্রয়োজনীয়: getAllEventData, getEventData
কোয়েরি স্বাক্ষর: queryPermission('read_event_data'[, <optional key>])
নোট: কোনও কাস্টম টেমপ্লেট প্রদত্ত কী পাথে (বা কোনও কী পাথ না দেওয়া থাকলে সমস্ত ইভেন্ট ডেটা) ইভেন্ট ডেটা পড়তে পারে কিনা তা নিয়ন্ত্রণ করে।
কোডের উদাহরণ
const getAllEventData = require('getAllEventData');
const queryPermission = require('queryPermission');
if (queryPermission('read_event_data')) {
return getAllEventData();
}
const getEventData = require('getEventData');
const queryPermission = require('queryPermission');
const keyPath = 'parentField.childField';
if (queryPermission('read_event_data', keyPath)) {
return getEventData(keyPath);
}
read_event_metadata
যে নাম দেখানো হবে: ইভেন্ট মেটাডেটা পড়ে
বিবরণ: ইভেন্ট কলব্যাকে ইভেন্ট মেটাডেটা পড়ে
কনফিগারেশন: কিছু নেই
প্রয়োজন: addEventCallback
কোয়েরি স্বাক্ষর: queryPermission('read_event_metadata')
Notes: কলব্যাকে কাস্টম টেমপ্লেট ইভেন্ট মেটাডেটা পড়তে পারবে কিনা তা নিয়ন্ত্রণ করে।
কোডের উদাহরণ
const queryPermission = require('queryPermission');
const addEventCallback = require('addEventCallback');
if (queryPermission('read_event_metadata')) {
addEventCallback((containerId, eventMetadata) => {
// Read event metadata.
});
}
read_request
যে নাম দেখানো হবে: HTTP অনুরোধ পড়ে
বিবরণ: অনুরোধের হেডার, কোয়েরি প্যারামিটার, বডি, পাথ বা রিমোট IP অ্যাড্রেস পড়ে।
কনফিগারেশন: যেকোনও বা নির্দিষ্ট অ্যাক্সেসের অনুমতি দেওয়ার বিকল্প, যার সাথে বিভিন্ন সাবকম্পোনেন্টের অ্যাক্সেস নিয়ন্ত্রণ করার জন্য সাব-অপশন থাকে।
এদের জন্য প্রয়োজন: extractEventsFromMpv1, extractEventsFromMpv2,
getRemoteAddress, getRequestBody, getRequestHeader,
getRequestPath, getRequestQueryParameter, getRequestQueryParameters,
getRequestQueryString
কোয়েরি সিগনেচার:
queryPermission('read_request', <component>[, <optional component name>])
মনে রাখবেন: ইনকামিং HTTP রেসপন্স কম্পোনেন্ট অ্যাক্সেস করা যাবে কিনা তা নিয়ন্ত্রণ করে।
কোডের উদাহরণ
const queryPermission = require('queryPermission');
const getRequestBody = require('getRequestBody');
const getRequestHeader = require('getRequestHeader');
let body, contentType;
if (queryPermission('read_request', 'body')) {
body = getRequestBody();
}
if (queryPermission('read_request', 'header', 'content-type')) {
contentType = getRequestHeader('content-type');
}
if (body && contentType == 'application/json') { ... }
return_response
যে নাম দেখানো হবে: উত্তর ফেরত দেয়
বিবরণ: কলারকে উত্তর দেয়।
কনফিগারেশন: কিছু নেই
প্রয়োজন: returnResponse
কোয়েরি স্বাক্ষর: queryPermission('return_response')
মনে রাখবেন: এই অনুমতির ক্ষেত্রে কোনও ফিল্ড নেই এবং সাধারণত এর জন্য কোয়েরি করা হয় না।
run_container
যে নাম দেখানো হবে: কন্টেনার রান করে
বিবরণ: ইভেন্টের সাথে কন্টেনার রান করে
কনফিগারেশন: কিছু নেই
প্রয়োজন: runContainer
কোয়েরি স্বাক্ষর: queryPermission('run_container')
মনে রাখবেন: এই অনুমতির ক্ষেত্রে কোনও ফিল্ড নেই এবং সাধারণত এর জন্য কোয়েরি করা হয় না।
send_http
যে নাম দেখানো হবে: HTTP অনুরোধ পাঠায়
বিবরণ: নির্দিষ্ট URL-এ HTTP অনুরোধ পাঠায়।
প্রয়োজন: getGoogleScript, sendEventToGoogleAnalytics,
sendHttpGet, sendHttpRequest
কোয়েরি স্বাক্ষর: queryPermission('send_http', <url>)
মনে রাখবেন: URL-এর উপর নির্ভর করে HTTP অনুরোধ করা যাবে কিনা তা নিয়ন্ত্রণ করে। সুরক্ষিত কানেকশন নিশ্চিত করতে, শুধুমাত্র সুরক্ষিত (HTTPS) URL-এর অনুমতি দেওয়া হয়।
কোডের উদাহরণ
const queryPermission = require('queryPermission');
const sendHttpGet = require('sendHttpGet');
const url = 'https://example.com/search?query=foo&results=10';
if (queryPermission('send_http', url)) {
sendHttpGet(url);
}
send_pixel_from_browser
ডিসপ্লে নাম: ব্রাউজার থেকে পিক্সেল পাঠায়
বিবরণ: ব্রাউজার থেকে নির্দিষ্ট URL-এ GET অনুরোধ পাঠায়।
প্রয়োজন: sendPixelFromBrowser
কোয়েরি স্বাক্ষর: queryPermission('send_pixel_from_browser', <url>)
মনে রাখবেন: URL-এর উপর নির্ভর করে ব্রাউজার থেকে কোনও অনুরোধ পাঠানো যাবে কিনা তা নিয়ন্ত্রণ করে।
কোডের উদাহরণ
const queryPermission = require('queryPermission');
const sendPixelFromBrowser = require('sendPixelFromBrowser');
const url = 'https://example.com/search?query=foo&results=10';
if (queryPermission('send_pixel_from_browser', url)) {
sendPixelFromBrowser(url);
}
set_cookies
যে নাম দেখানো হবে: কুকি সেট করে
বিবরণ: নির্দিষ্ট নাম ও প্যারামিটার সহ কুকি সেট করে।
কনফিগারেশন: অনুমোদিত কুকির নামের একটি টেবিল, যার প্রতিটিতে নাম, ডোমেন, পাথ, secure অ্যাট্রিবিউট এবং মেয়াদ শেষ হওয়ার তারিখের উপর ঐচ্ছিক বিধিনিষেধ রয়েছে।
প্রয়োজন: setCookie
কোয়েরি স্বাক্ষর: queryPermission('set_cookies', <name>, <options>)
মনে রাখবেন: কুকির নাম, ডোমেন, পাথ, secure অ্যাট্রিবিউট এবং
মেয়াদ শেষ হওয়ার তারিখের উপর নির্ভর করে, উত্তরে প্রদত্ত 'Set-Cookie' হেডার যোগ করা যাবে কিনা তা নিয়ন্ত্রণ করে।
কোডের উদাহরণ
const queryPermission = require('queryPermission');
const setCookie = require('setCookie');
const options = {
'domain': 'www.example.com',
'path': '/',
'max-age': 60*60*24*365,
'secure': true
};
if (queryPermission('set_cookies', 'info', options)) {
setCookie('info', 'xyz', options);
}
use_custom_private_keys
যে নাম দেখানো হবে: কাস্টম ব্যক্তিগত কী ব্যবহার করে
বিবরণ: ক্রিপ্টোগ্রাফিক অপারেশনের জন্য JSON কী ফাইল থেকে ব্যক্তিগত কী ব্যবহার করে।
কনফিগারেশন: অনুমোদিত কী আইডির তালিকা। সার্ভারে SGTM_CREDENTIALS এনভায়রনমেন্ট ভেরিয়েবল দ্বারা রেফারেন্স করা
JSON কী ফাইলের কীগুলির সাথে
আইডিগুলি অবশ্যই মিলতে হবে।
প্রয়োজন: hmacSha256
কোয়েরি স্বাক্ষর: queryPermission('use_custom_private_keys', <key id>)
মনে রাখবেন: অনুমোদিত ব্যক্তিগত কী-এর তালিকা পরিচালনা করে।
কোডের উদাহরণ
const hmacSha256= require('hmacSha256');
const queryPermission = require('queryPermission');
const keyId = 'key1';
let result;
if (queryPermission('use_custom_private_keys', keyId)) {
result = hmacSha256('my_data', keyId);
}
use_google_credentials
যে নাম দেখানো হবে: Google অ্যাপ্লিকেশনের ডিফল্ট ক্রেডেনশিয়াল ব্যবহার করে
বিবরণ: Google API-তে কল করার জন্য Google-এর ডিফল্ট ক্রেডেনশিয়াল ব্যবহার করে।
কনফিগারেশন: অনুমোদিত Google OAuth 2.0 স্কোপের তালিকা।
প্রয়োজন: getGoogleAuth
কোয়েরি স্বাক্ষর: queryPermission('use_google_credentials', <scopes>)
Notes: Google API-এর সাথে ব্যবহারের জন্য অনুমোদিত Google OAuth 2.0 স্কোপ সীমাবদ্ধ করে।
কোডের উদাহরণ
const getGoogleAuth = require('getGoogleAuth');
const queryPermission = require('queryPermission');
const scopes = [
'https://www.googleapis.com/auth/datastore'
];
let auth;
if (queryPermission('use_google_credentials', scopes)) {
auth = getGoogleAuth(scopes);
}
user_ip
যে নাম দেখানো হবে: ব্যবহারকারীর IP অ্যাড্রেস পড়ে
বিবরণ: ব্যবহারকারীর IP অ্যাড্রেস পড়ে।
কনফিগারেশন: কিছু নেই
প্রয়োজন: getAnonymizedIpAddress
কোয়েরি স্বাক্ষর: queryPermission('user_ip')
মনে রাখবেন: কাস্টম টেমপ্লেট ব্যবহারকারীর IP অ্যাড্রেস পড়তে পারবে কিনা তা নিয়ন্ত্রণ করে।
কোডের উদাহরণ
const getAnonymizedIpAddress = require('getAnonymizedIpAddress');
const queryPermission = require('queryPermission');
if (queryPermission('user_ip')) {
return getAnonymizedIpAddress();
}