|
<< İçindekileri Görüntülemek İçin Tıklayın >> Yer: Teknik Kılavuzlar > IVEDI SQL Kullanıcı Kılavuzu > 9. Yerleşik kütüphane > 9.1 Paketler |
Bu paket yalnızca sabit içerir, fonksiyonu yoktur; sabitler parantezsiz okunur
(math.INT32_MAX).
| Sabitler | Tip |
|---|---|
INT8_MIN, INT8_MAX, UINT8_MAX | integer |
INT16_MIN, INT16_MAX, UINT16_MAX | integer |
INT32_MIN, INT32_MAX | integer |
UINT32_MAX, INT64_MIN, INT64_MAX | bigint |
UINT64_MAX, INT128_MIN, INT128_MAX | int128 |
UINT128_MAX, NUMBER_MIN, NUMBER_MAX | number |
NUMBER38_MIN, NUMBER38_MAX | number(38) |
DECIMAL_MIN, DECIMAL_MAX | decimal(18,2) |
FLOAT_MIN, FLOAT_MAX | float |
DOUBLE_MIN, DOUBLE_MAX | double |
| Üye | Notlar |
|---|---|
procedure Print(params args) | |
procedure PrintF(format string, params args) | {0}, {1} … yer tutucuları |
function GetLine() returns string | uygulanmamış |
Get/SetOutStream, Get/SetInStream, Get/SetErrorStream | Stream |
| Üye |
|---|
function FileExists(Dir Directory, FileName string) returns boolean |
function DeleteFile(Dir Directory, FileName string) returns boolean |
function RenameFile(oldDir, oldFileName, newDir, newFileName) returns boolean |
function MoveFile(oldDir, oldFileName, newDir, newFileName, overrd boolean = false) returns boolean |
İç tip FileSystem.FileStream (Stream'den türer): alanlar
Dir, FileName, mode, share; üyeler
openFile(), openFile(Dir, FileName, mode, share),
openTemp(). Sıralamalar: OpenMode (omRead, omWrite, omReadWrite),
ShareMode (smExclusive, smRead, smWrite, smReadWrite, smDelete); öndeğerler
omRead ve smExclusive.
| Üye | Durum |
|---|---|
base64_encode / base64_decode | çalışır (string/varbinary ve clob/blob aşırı yüklemeleri) |
hex_encode / hex_decode | çalışır (aynı aşırı yüklemeler) |
hash_crc32(data) returns bigint | çalışır; imzasız 32-bit değer, bu yüzden bigint |
hash_crc64(data) returns bigint | çalışır; bugünkü gerçekleme CRC-32 değerini döndürür |
hash_md5, hash_sha1, hash_sha2_224/256/384/512 |
çalışır; dönüş binary(16/20/28/32/48/64). Girdi: varbinary / binary ham bayt, blob, ya da dizge —
dizge kendi karakter kümesinin baytlarıyla özetlenir (ISO-8859-9 için convert(s using 'ISO88599')) |
hash(algo, len, data) returns varbinary |
çalışır; algo = MD5, SHA1, SHA224, SHA256, SHA384,
SHA512, RIPEMD160; len > 0 özeti o kadar bayta kırpar |
hmac_md5 / hmac_sha256 / hmac_sha512(hmacKey, data) |
çalışır (RFC 2104); anahtar ve veri yukarıdaki girdi kuralına uyar. hmacKey 'credential:<ad>' olabilir: o credential'ın PASSWORD'ü (her TYPE, USAGE denetimi) anahtar olur, sır PSQL'e gelmez |
constant_time_equals(a, b) returns boolean |
bayt eşitliği, süresi farkın yerine bağlı değil — alınan imza / MAC ile hesaplananı böyle karşılaştırın |
-- özet metni büyük harf onaltılık; banka imzası ISO-8859-9 baytlarıyla
hex = Crypto.hex_encode(Crypto.hash_sha2_256('abc')); -- BA7816BF…15AD
imza = Crypto.base64_encode(Crypto.hmac_sha512(convert(metin using 'ISO88599'), gizliAnahtar));
if (not Crypto.constant_time_equals(Crypto.base64_decode(gelenImza), beklenen)) then ...Meta Graph API üzerinden mesaj gönderir. Asıl kullanım WhatsApp.Client tipidir:
execute block
as
c WhatsApp.Client;
id string;
begin
--// anahtar CREDENTIAL'da: create credential wa type HTTP identity '<numara kimliği>' password '<anahtar>'
c = WhatsApp.Client.FromCredential('wa');
id = c.SendText('905551112233', 'Merhaba');
id = c.SendTemplate('905551112233', 'hello_world', 'en_US');
id = c.SendDocument('905551112233', 'https://.../fatura.pdf', 'fatura.pdf');
c.MarkAsRead(id);
end;| Üye | Açıklama |
|---|---|
Client.FromCredential(ad) |
istemciyi bir TYPE HTTP credential'dan kurar: numara kimliği IDENTITY'den,
apiVersion/baseUrl/timeoutSec etiketlerden gelir. Anahtar alana yalnızca
credential:<ad> başvurusu olarak yazılır; gerçek anahtar istek anında çözülür, çağıranın
credential üzerinde USAGE hakkı olmalıdır. |
credential_info(ad) | credential'ın gizli olmayan alanları (JSON); parola içermez
(NET.credential_info + TYPE HTTP denetimi) |
Client alanları | accessToken, phoneNumberId, businessAccountId,
apiVersion (öndeğer v23.0), baseUrl, timeoutSec (30),
maxDownloadBytes (100 MB); son isteğin lastStatus, lastResponse,
lastRetryAfter ve lastMimeType değerleri |
SendText, SendTemplate, SendImage,
SendDocument, SendMedia | mesaj kimliğini (wamid...) döndürür |
SendButtons(alıcı, metin, butonlar), SendList(alıcı, metin, buton, bölümler),
SendLocation(alıcı, enlem, boylam, ad, adres), SendContacts(alıcı, kişiler),
SendReaction(alıcı, wamid, emoji) |
etkileşimli butonlar ([{"id","title"}], 1–3), liste, konum, kişi kartı, tepki (boş emoji kaldırır) |
son parametre replyTo |
Send* metotlarında isteğe bağlı: yanıtlanan mesajın wamid'i (context.message_id) |
ListTemplates(maxCount), CreateTemplate(ad, dil, kategori, bileşenler), DeleteTemplate(ad) |
şablon yönetimi; businessAccountId (credential etiketi WABAID) gerekir. Ad
[a-z0-9_], kategori MARKETING/UTILITY/AUTHENTICATION. |
MarkAsRead(messageId), Post(govde json, replyTo) | okundu bildirimi; herhangi bir gövdeyi gönderme |
UploadMedia(fileName, mimeType, content Stream) |
medyayı yükler, medya kimliğini döndürür; akışın başından sonuna gönderilir, dosya belleğe alınmaz |
DownloadMedia(mediaId) → blob, MediaInfo(mediaId), DeleteMedia(mediaId) |
indirme iki adımlıdır (bilgi + bağlantı); Meta'nın sha256 özeti doğrulanır,
maxDownloadBytes aşılırsa indirmeden reddedilir; içerik türü lastMimeType'ta |
BuildText, BuildTemplate, BuildMedia, BuildButtons,
BuildList, BuildLocation, BuildContacts, BuildReaction,
BuildRead, WithReply(gövde, replyTo) |
ağa çıkmaz, yalnızca istek gövdesini (json) üretir |
MessageId(yanit), ErrorMessage(yanit), ErrorCode(yanit) | yanıt okuyucuları |
http_request(method, url, bearerToken, body, timeoutSec, out status, out retryAfter) |
alt düzey istek; GET, POST ya da DELETE; retryAfter yanıtın
Retry-After başlığıdır (saniye; yoksa NULL). NET.http_send sarmalayıcısıdır:
credential:<ad> anahtarı istek anında taşıma çözer. Üç alt düzey fonksiyon da NET.Http
gibi yalnız SYSADMIN kodunda derlenir; Client ve Enqueue* herkese açıktır. |
http_upload(url, bearerToken, fileName, mimeType, content Stream, timeoutSec, out status),
http_download(url, bearerToken, expectedSha256, timeoutSec, out status, out mimeType, out errorBody) |
alt düzey multipart yükleme (NET.http_upload) ve ikili indirme (NET.http_send_binary;
blob, sha256 özeti Crypto.hash_sha2_256 ile doğrulanır, uyuşmazlık hatadır) |
EnqueueText(credential, alıcı, metin), EnqueueTemplate(...), Enqueue(credential, gövde) |
giden kutusuna (ivd$whatsapp_outbox) yazar, kayıt kimliğini döndürür; credential o anda denetlenir |
ProcessOutbox(batchSize = 50, maxAttempts = 5, baseDelaySec = 30, maxDelaySec = 3600, pairDelaySec = 2) |
zamanı gelmiş bekleyen kayıtları gönderir ve işlenen kayıt sayısını döndürür: başarı SENT (wamid),
geçici hata (ağ, 429, 5xx, Meta hız kodları; IsTransient) yeniden deneme (RetryDelay:
Retry-After ya da 30 sn × 2n, en çok 1 saat), aksi FAILED.
Her sonuç özerk işlemde yazılır; SQL depolu motorlarda özerk işlem bir kayıt noktasıdır. Aynı anda tek işleyici
çalışır: NET.Cache'teki WhatsApp.ProcessOutbox kirası (120 sn) doluyken ikinci çağrı 0 döner;
kira çağrı sonunda bırakılır, çağıran oturum COMMIT ile bitmelidir (ölü süreçten kalan kira kendiliğinden
dolar). pairDelaySec: az önce başarıyla mesaj gönderilen alıcıya bu kadar saniye yeniden gönderilmez,
kayıt sonraki tura kalır (Meta'nın alıcı başına hız sınırı; 0 kapatır). CancelOutbox(id)
bekleyeni iptal eder: yalnız kaydın sahibi (ivd$created_by) ya da ayrıcalıklı kullanıcı (sahip, SYSDBA,
SYSADMIN; is_privileged_user() = Metadata.is_privileged_user()). |
OutboxJob |
Scheduler.Job alt tipi (alanlar batchSize, maxAttempts, baseDelaySec,
maxDelaySec, pairDelaySec; OnExecute → ProcessOutbox). Scheduler.attachJob ile
kaydedilir; veritabanının görev zamanlayıcısı açıkken (ALTER DATABASE … SET TASK SCHEDULER ON) iş
zamanlayıcı sürecinde koşar. attachJob alanları saklamaz; yeniden kurulan tipte öndeğerler geçerlidir. |
RecordEvent(eventKind, accountId, phoneNumberId, wamid, …, rawJson) |
webhook olayını (MESSAGE | STATUS) ivd$whatsapp_event tablosuna yazar; aynı
(tür, wamid, durum) satırı varsa yazmaz ve NULL döndürür |
WebhookVerify(request NET.HttpServerRequest), WebhookReceive(request) |
Meta webhook'unun ENDPOINT yordamları (aşağıdaki "Webhook" notu): doğrulama (hub.*) ve
olay alma (imza denetimi, messages[] / statuses[] → RecordEvent, bildirim).
WebhookTime(unix) / WebhookTimeText(unix) Meta'nın zaman damgasını tz'li zamana / ISO 8601 UTC metne çevirir. |
Meta'nın geri çağırması, olayların yazılacağı veritabanının iki ENDPOINT nesnesi ve bir credential ile kurulur;
hizmetin conf'unda REST işlemcili bir uygulama (path /whatsapp, database = bu veritabanı)
onları sunar, Meta'ya verilen adres https://<sunucu>/whatsapp/'tır:
create credential wa_webhook type CUSTOM identity '<doğrulama belirteci>' password '<App Secret>'
tags (MQTOPIC = '/whatsapp/event');
create endpoint whatsapp_verify method GET path '/' as call WhatsApp.WebhookVerify;
create endpoint whatsapp_receive method POST path '/' as call WhatsApp.WebhookReceive;
commit;
Doğrulama belirteci credential'ın IDENTITY'si, App Secret PASSWORD'üdür; imza
Crypto.hmac_sha256('credential:wa_webhook', gövde) ile sır PSQL'e gelmeden doğrulanır (tutmayan ya da credential'sız
istek 403). Her yazılan olay MQTOPIC etiketindeki MessageQueue konusuna yayınlanır (etiket yoksa
/whatsapp/event, '-' kapatır; MessageQueue.Publish). Yanıt
{"result": true, "events": N, "duplicates": M}; bozuk JSON 400, WhatsApp dışı nesne 200 ile 0 olay, depo hatası 500
(Meta yeniden gönderir).
ivd$whatsapp_event ve ivd$whatsapp_outbox kişisel veri taşıyan özel sistem tablolarıdır:
öteki sistem tablolarının "herkese okunur" kuralının dışındadır. Sıradan bir kullanıcı ancak hak verilince okur ve kuyruğa
yazar: grant select on sys.ivd$whatsapp_event to <rol>, grant select, insert, update on
sys.ivd$whatsapp_outbox to <rol>; paket yordamları credential'da grant usage on credential wa to
<rol> ister. Sahip, SYSDBA ve SYSADMIN için hak gerekmez. Depoda bu iki tabloya PUBLIC SELECT verilmez;
UPGRADE eski bir sürümün verdiği hakkı geri alır.
--// dosyadan ya da tablodaki bir blob'dan medya yükleme
s Stream = Stream();
s.WriteRaw(icerik); --// icerik: blob / varbinary
mid = c.UploadMedia('fatura.pdf', 'application/pdf', s);
id = c.SendDocument('905551112233', mid, 'fatura.pdf');
b = c.DownloadMedia(mid);Bir blob, yukarıdaki gibi Stream() + WriteRaw ile kopyalanarak ya da
BlobStream(blob, omRead) ile kopyasız akışa alınır; dosya için
FileSystem.FileStream doğrudan verilir.
Medya için mediaRef http:// ya da https:// ile başlıyorsa bağlantı,
başlamıyorsa yüklenmiş medyanın kimliği sayılır. mediaType tam olarak
image, document, audio, video ya da
sticker yazılmalıdır.
Hatalar: WHATSAPP_NOT_CONFIGURED (anahtar ya da numara kimliği boş),
WHATSAPP_INVALID_ARGUMENT (zorunlu argüman boş ya da tür geçersiz),
WHATSAPP_API_ERROR (2xx dışı yanıt; ileti HTTP kodunu ve Meta'nın iletisini taşır).
TLS sertifikası her zaman doğrulanır ve yönlendirme izlenmez. Düz http yalnızca
localhost için kabul edilir. Erişim anahtarı hiçbir günlük satırına ya da hata iletisine
yazılmaz; anahtar kaynak koduna gömülmez, CREATE CREDENTIAL ile saklanır.
| Üye |
|---|
GetDomainName(), GetComputerName(), GetUserName() → string |
GetUserID(), GetGroupID() → integer; IsAdmin() → boolean |
GetSystemGUID() → guid |
GetOSType(), GetOSVersion() → string |
GetLastErrorCode() → integer; GetStatusText(status) → string;
RaiseLastOSError() |
ErrorLevel() → integer: son #SHELL komutunun çıkış kodu (bkz. bölüm 10) |
GetEnvironmentString(ad) → string; SetEnvironmentString(ad, değer) → boolean |
İç tip OS.Command: alanlar Dir, Executable,
Parameters, InStream, OutStream,
ErrorStream; üyeler Run(), Wait(TimeoutMS),
Terminate(ExitCode), GetExitCode(). Dir boş bırakılırsa
Executable işletim sisteminin arama yolundan (PATH) bulunur. Firebird
yedeği için OS.gbak (Command'dan türer) vardır: alanları (DatabaseFile,
BackupFile, Restore, UserName, Password …) Run()
sırasında gbak komut satırına çevrilir; gbak arama yolundan bulunur, Firebird'ün
bin dizini PATH'te olmalıdır.
OS.Command her iki platformda da çalışır. Kabuk
çağrılmaz: Windows'ta CreateProcess, POSIX'te fork +
execvp. Parameters POSIX'te motor tarafından bölünür: boşluk ve sekme
ayırır, yalnız çift tırnak özeldir (açar/kapar, argümana girmez; a"b c"d tek argüman
ab cd, "" boş argüman), tek tırnak ve ters bölü özel değildir. Windows'ta
motor bölmez: "<Executable>" <Parameters> satırı olduğu gibi
CreateProcess'e gider ve programın kendi çalışma zamanı Windows kuralıyla ayrıştırır.
Joker genişletme, yönlendirme ve boru gibi kabuk özellikleri yoktur; gerekiyorsa kabuk açıkça
çalıştırılır.
GetExitCode() sürecin çıkış kodunu verir. POSIX'te süreç bir
sinyalle sonlandıysa çıkış kodu yoktur; o durumda kabukların kuralı uygulanır ve
128 + sinyal numarası döner, örneğin Terminate() sonrası
143 (128 + SIGTERM). POSIX'te execvp'nin her hatası (bulunamayan
program dahil) 127 verir; Windows'ta bulunamayan program Run()'da hata
fırlatır. Terminate(ExitCode)'un ExitCode parametresi Windows'ta
TerminateProcess'e gider, POSIX'te karşılığı yoktur ve yok sayılır.
GetUserID() ve GetGroupID() POSIX kimlikleridir ve
Windows'ta -1 döner: Windows kimlikleri SID'dir, sayısal bir
kullanıcı/grup kimliği kavramı yoktur. IsAdmin() her iki platformda çalışır
(Windows'ta Administrators/Power Users üyeliği, POSIX'te etkin kullanıcının root
olması).
SetEnvironmentString ile yazılan bir değer GetEnvironmentString ile
sağlıklı geri okunamaz.
| Üye | Notlar |
|---|---|
GetTitle(), GetVersion(), GetVersionDate() | string; GetVersionDate bir derleme damgasıdır |
GetStartTime() | timestamp: sürecin başlangıç anı |
GetLogFileName(), GetConfigFileName() | string |
GetConfigValue(ad) | string |
GetLogLevel() | integer; salt okunur, SQL'den değiştirilemez |
isDebugMode() | boolean |
GetCPUType() | string |
Get/SetOutStream, Get/SetInStream, Get/SetErrorStream | Stream |
| Üye | Durum |
|---|---|
procedure Assert(cond boolean, msg string = null) | false ise ASSERT istisnası (yakalanabilir) |
WriteDebugOut(msg), WriteDebugOutF(fmt, params) | çalışır |
WriteMemoryDump(fileName, flags), WriteProcessDump(fileName) | çalışır |
DumpObject(objectName, fileName, options) | çalışır |
GetCallStack(skipFirstN, depth, withParamValues) | uygulanmamış |
EventLog.write(source, source_object_id, source_key, severity, event_type,
result, message, extra = null, data = null)Gövdesi kaydı in autonomous transaction do içinde yazar, yani çağıran geri
alsa bile kayıt kalır. severity sıralaması (ivd$EventLogSeverity):
Critical, Error, Warning, Information, Verbose. Kayıtlar
ivd$event_log tablosundadır; zaman ve kullanıcı kimliği otomatik yazılır.
Scheduler.Job tipinden türetip OnExecute() yordamını
geçersiz kılarak bir iş tanımlanır; sonra:
| Üye |
|---|
attachJob(j Job) / detachJob(job_name) |
enableJob(job_name) / disableJob(job_name) |
startJob(job_name) / stopJob(job_name) / resetJob(job_name) |
verifySchedule(schedule, out errorMsg) returns boolean |
calcNextRuntime(in out runtime, firstRun, schedule, out errorMsg) returns boolean |
jobCompleted(j Job, e Exception): koşucu her çalışmanın sonunda çağırır; sonucu ve bir sonraki zamanı ivd$scheduler_jobs'a yazar |
Job alanları: job_name, job_type (varsayılan
'PSQL'), start_date, repeat_interval,
schedule_limit, end_date, enabled,
auto_disable ('N', 'A' her zaman, 'S' başarıda,
'F' hatada), auto_disable_after, comments,
logging_level, execution_log_limit. Geçersiz zamanlama dizgisi
invalid_job_schedule, bulunamayan iş job_not_found istisnası verir.
Her işlem EventLog'a yazılır. Örnek zamanlama dizgisi:
'secondly; seconds=5,15,25,35,45,55'.
Paketin fonksiyonları HTTP taşıması ve JWT için (http_send, http_send_binary,
http_upload, jwt_sign, jwt_verify); asıl kullanım iç tiplerdir.
| Tip | İçerik |
|---|---|
NET.MailAddress | mailAddr, friendlyName; kurucu MailAddress(mailAddr, friendlyName = null) |
NET.MailAttachment | fileName, title, contentType, contentTransfer, charSet, contentDisposition, contentID, extraHeaders, content Stream |
NET.MailMessage | to/cc/bccRecipients, attachments, body (satır dizisi), fromAddr, subject, charSet ('UTF-8'), replyTo, receiptRecipient, priority (3), encoding (meDefault, meMIME, mePlainText) |
NET.SMTPClient | host, port = 25, useSSL, timeout = 60, authType (auDefault, auLogin, auPlain, auPlainC, auCramMD5, auDigestMD5, auXOAUTH, auXOAUTH2; öndeğer auLogin); connect(), authenticate(user, pass), send(), send(msg), AddMessage(msg), disconnect() |
NET.TCPClient | host, port, useSSL, zaman aşımları saniye cinsinden
(sendtimeout ve recvtimeout öndeğer 60; bağlanma için connecttimeout
öndeğer 10, 0 ise hizmetin yapılandırmasındaki değer kullanılır); connect(), connect(host, port, useSSL), Send(stream, len), Recv(stream, len), GetStream(), disconnect() |
NET.HttpRequest nesnesi doldurulur, NET.Http.Send(r) gönderir, NET.HttpResponse döner.
Kısayollar: Get(url, headers), PostJson(url, body json, headers), PostForm(url, form json, headers),
PostXml(url, body, headers), Download(url, headers) returns blob (2xx dışında NET_HTTP_ERROR).
| Tip | İçerik |
|---|---|
NET.HttpRequest | method = 'GET' (GET, POST, PUT, PATCH, DELETE, HEAD), url,
headers json ({"Ad": "değer"}), contentType, body string (metin: JSON, XML),
bodyBlob blob (ikili), form json (application/x-www-form-urlencoded gövde),
allowInsecure = false, timeoutSec = 30, maxResponseBytes = 16 MB, binaryResponse = false.
contentType boşsa: body JSON ise application/json, değilse text/plain; form için
x-www-form-urlencoded; blob için application/octet-stream. GET ve HEAD gövde taşıyamaz. |
NET.HttpResponse | status, headers json (yanıt başlıkları), contentType,
body (metin) ya da bodyBlob (binaryResponse), retryAfter (saniye, yoksa NULL),
elapsedMs |
NET.Http | statik Send, Get, PostJson, PostForm, PostXml,
Download, Upload(url, headers, fields json, fileField, fileName, mimeType, content Stream, allowInsecure = false,
timeoutSec = 30) (multipart/form-data: fields metin parçaları, ardından dosya parçası; içerik akıştan belleğe
alınmadan gider; yanıtta status, body, retryAfter),
JwtSign(claims json, secretKey, ttlSec = 300), JwtVerify(token, secretKey) returns json
(HS256; geçersiz ya da süresi dolmuş belirteç NULL) |
execute block
as
r NET.HttpRequest = NET.HttpRequest();
resp NET.HttpResponse;
begin
r.method = 'POST';
r.url = 'https://api.ornek.gov.tr/token';
r.headers = json_object('X-ClientId', 'credential:turmob.identity', 'X-SecretKey', 'credential:turmob');
r.form = json_object('grant_type', 'client_credentials', 'token', :mmAnahtari);
resp = NET.Http.Send(r);
if (resp.status <> 200) then
exception net_http_error using (resp.status, left(resp.body, 200));
resp = NET.Http.Get('https://api.ornek.gov.tr/MukellefBilgisi/' || :vkn,
json_object('Authorization', 'Bearer ' || json_value(resp.body, '$.access_token')));
end;credential:<ad> istek anında
o credential'ın PASSWORD'üne çözülür (CREATE CREDENTIAL … TYPE HTTP, çağıranın USAGE hakkı aranır);
credential:<ad>.identity IDENTITY'ye, credential:<ad>.tag:<AD> bir etikete; değerin içinde
{credential:<ad>} yazımı da geçerlidir ('Bearer {credential:wa}'). Sır PSQL'e, günlüğe ve hata iletisine
girmez.http yalnız localhost'a,
allowInsecure = true ile yalnız özel ağ IPv4 adresine (10/8, 172.16/12, 192.168/16) gider. NET.Http üyeleri,
http_send* / http_upload ve WhatsApp.http_* yalnız SYSADMIN kodunda derlenir (yukarıdaki Yetki notu); paketlerinizi
SQL SECURITY DEFINER ile yazın.JwtSign iat yoksa yazar, ttlSec > 0 ise exp ekler; anahtar
'credential:<ad>' olabilir (her TYPE). JwtVerify imzayı sabit süreli karşılaştırır ve exp'i denetler.NET_HTTP_INVALID_ARGUMENT (boş istek), NET_HTTP_ERROR (Download 2xx dışı);
taşıma hataları (adres, zaman aşımı, boyut sınırı) APPLICATION_ERROR olarak gelir.FTP istemci tipi yoktur; HTTP istemcisi sunucu sertifikası ister ama kendi istemci sertifikasını (mTLS) sunmaz.
MessageQueue bir zarf tipi (MessageQueue.Message: destination, messageText,
MessageBody JSONType) ve tek bir fonksiyon bildirir: MessageQueue.Publish(konu, mesaj) returns integer mesajı
sürecin bütün oturum yöneticilerindeki abonelere (/message uygulamasına SUBSCRIBE ile bağlananlar, başka
bir işçi süreçte de olabilir) yayınlar ve abone sayısını döndürür; kalıcı değildir, abonesi yoksa düşer. Metadata paketi katalog
okuyucusudur: Attribute, Attributes, AllAttributes,
EffectiveAttribute, Description, Caption, ObjectInfo,
Columns, Relations, Search, UpgradeReportText
(bkz. 6.11) ve is_privileged_user() (çağıran bu veritabanında ayrıcalıklı mı: kimliksiz bağlantı, SYSDBA, SYSADMIN üyesi ya da
sahip). Utils paketi boştur; üyesi yoktur.