@devoplus/one-sdk 0.0.0-stage → 0.2.0-next.112
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +268 -0
- package/README.md +894 -2
- package/bin/accessRequest.d.mts +96 -0
- package/bin/accessRequest.mjs +340 -0
- package/bin/appOps.d.mts +97 -0
- package/bin/appOps.mjs +336 -0
- package/bin/dataCommand.mjs +131 -0
- package/bin/devConfig.mjs +132 -0
- package/bin/one.mjs +341 -0
- package/bin/session.mjs +239 -0
- package/dist/agentInput.d.ts +9 -0
- package/dist/agentInput.d.ts.map +1 -0
- package/dist/agentInput.js +102 -0
- package/dist/agentInput.js.map +1 -0
- package/dist/agentTools.d.ts +83 -0
- package/dist/agentTools.d.ts.map +1 -0
- package/dist/agentTools.js +164 -0
- package/dist/agentTools.js.map +1 -0
- package/dist/ai.d.ts +67 -0
- package/dist/ai.d.ts.map +1 -0
- package/dist/ai.js +129 -0
- package/dist/ai.js.map +1 -0
- package/dist/audit.d.ts +21 -0
- package/dist/audit.d.ts.map +1 -0
- package/dist/audit.js +58 -0
- package/dist/audit.js.map +1 -0
- package/dist/backend.d.ts +27 -0
- package/dist/backend.d.ts.map +1 -0
- package/dist/backend.js +63 -0
- package/dist/backend.js.map +1 -0
- package/dist/cache.d.ts +20 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +84 -0
- package/dist/cache.js.map +1 -0
- package/dist/client.d.ts +147 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +469 -0
- package/dist/client.js.map +1 -0
- package/dist/components.d.ts +235 -0
- package/dist/components.d.ts.map +1 -0
- package/dist/components.js +1491 -0
- package/dist/components.js.map +1 -0
- package/dist/context.d.ts +110 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +126 -0
- package/dist/context.js.map +1 -0
- package/dist/data/crud.d.ts +74 -0
- package/dist/data/crud.d.ts.map +1 -0
- package/dist/data/crud.js +614 -0
- package/dist/data/crud.js.map +1 -0
- package/dist/data/ddl.d.ts +76 -0
- package/dist/data/ddl.d.ts.map +1 -0
- package/dist/data/ddl.js +362 -0
- package/dist/data/ddl.js.map +1 -0
- package/dist/data/fold.d.ts +14 -0
- package/dist/data/fold.d.ts.map +1 -0
- package/dist/data/fold.js +76 -0
- package/dist/data/fold.js.map +1 -0
- package/dist/data/model.d.ts +113 -0
- package/dist/data/model.d.ts.map +1 -0
- package/dist/data/model.js +408 -0
- package/dist/data/model.js.map +1 -0
- package/dist/data/values.d.ts +29 -0
- package/dist/data/values.d.ts.map +1 -0
- package/dist/data/values.js +152 -0
- package/dist/data/values.js.map +1 -0
- package/dist/dexa.d.ts +44 -0
- package/dist/dexa.d.ts.map +1 -0
- package/dist/dexa.js +74 -0
- package/dist/dexa.js.map +1 -0
- package/dist/dexaCommand.d.ts +116 -0
- package/dist/dexaCommand.d.ts.map +1 -0
- package/dist/dexaCommand.js +226 -0
- package/dist/dexaCommand.js.map +1 -0
- package/dist/export/columns.d.ts +62 -0
- package/dist/export/columns.d.ts.map +1 -0
- package/dist/export/columns.js +127 -0
- package/dist/export/columns.js.map +1 -0
- package/dist/export/csv.d.ts +10 -0
- package/dist/export/csv.d.ts.map +1 -0
- package/dist/export/csv.js +30 -0
- package/dist/export/csv.js.map +1 -0
- package/dist/export/report.d.ts +19 -0
- package/dist/export/report.d.ts.map +1 -0
- package/dist/export/report.js +91 -0
- package/dist/export/report.js.map +1 -0
- package/dist/export/response.d.ts +14 -0
- package/dist/export/response.d.ts.map +1 -0
- package/dist/export/response.js +70 -0
- package/dist/export/response.js.map +1 -0
- package/dist/export/xlsx.d.ts +15 -0
- package/dist/export/xlsx.d.ts.map +1 -0
- package/dist/export/xlsx.js +167 -0
- package/dist/export/xlsx.js.map +1 -0
- package/dist/export/zip.d.ts +7 -0
- package/dist/export/zip.d.ts.map +1 -0
- package/dist/export/zip.js +83 -0
- package/dist/export/zip.js.map +1 -0
- package/dist/files.d.ts +52 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/files.js +137 -0
- package/dist/files.js.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/jobs.d.ts +57 -0
- package/dist/jobs.d.ts.map +1 -0
- package/dist/jobs.js +157 -0
- package/dist/jobs.js.map +1 -0
- package/dist/log.d.ts +22 -0
- package/dist/log.d.ts.map +1 -0
- package/dist/log.js +107 -0
- package/dist/log.js.map +1 -0
- package/dist/notify.d.ts +41 -0
- package/dist/notify.d.ts.map +1 -0
- package/dist/notify.js +11 -0
- package/dist/notify.js.map +1 -0
- package/dist/org.d.ts +184 -0
- package/dist/org.d.ts.map +1 -0
- package/dist/org.js +114 -0
- package/dist/org.js.map +1 -0
- package/dist/people.d.ts +39 -0
- package/dist/people.d.ts.map +1 -0
- package/dist/people.js +88 -0
- package/dist/people.js.map +1 -0
- package/dist/problem.d.ts +12 -0
- package/dist/problem.d.ts.map +1 -0
- package/dist/problem.js +33 -0
- package/dist/problem.js.map +1 -0
- package/dist/runtime.d.ts +92 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +8 -0
- package/dist/runtime.js.map +1 -0
- package/dist/scenarios.d.ts +125 -0
- package/dist/scenarios.d.ts.map +1 -0
- package/dist/scenarios.js +251 -0
- package/dist/scenarios.js.map +1 -0
- package/package.json +55 -3
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
# @devoplus/one-sdk — sürüm geçmişi
|
|
2
|
+
|
|
3
|
+
Biçim: [Keep a Changelog](https://keepachangelog.com/tr/1.1.0/); sürümleme [SemVer](https://semver.org/lang/tr/).
|
|
4
|
+
`0.x` sürümlerinde küçük sürüm (minor) artışı kırıcı değişiklik taşıyabilir; kırıcı her değişiklik burada
|
|
5
|
+
**Kırıcı** başlığıyla yazılır.
|
|
6
|
+
|
|
7
|
+
## [0.2.0] — npm'e çıkan ilk sürüm (kararlı yayın bekliyor)
|
|
8
|
+
|
|
9
|
+
> 0.1.0 npm'e hiç yayımlanmadı: npm'de görünen ilk sürüm 0.2.0'dır (karar defteri D-94, 20.10.2026). `test` dalından
|
|
10
|
+
> `0.2.0-next.<n>` ön sürümleri `next` etiketiyle çıkar; kararlı 0.2.0 `main`'den `latest` etiketiyle çıkar ve tarihi o
|
|
11
|
+
> zaman yazılır. Aşağıdaki maddeler 0.1.0'dan bu yana birikenlerdir; kararlı yayına kadar yeni maddeler bu başlığa eklenir.
|
|
12
|
+
|
|
13
|
+
### Değişti (C7 — DEXA sorgusunda uygulamanın bağlam kodu göndermesi, 18.10.2026)
|
|
14
|
+
|
|
15
|
+
- `queryDexa` / `buildDexaQueryRequest` artık `UserCode` · `CompanyCode` · `CostCenterCode`'u kabul eder (ad harf
|
|
16
|
+
duyarsız tanınır, olduğu gibi gönderilir). Sunucu bu kodları yalnız kurulumda yönetici **"kodları uygulama belirler"**
|
|
17
|
+
onayını verdiyse kabul eder (yoksa bugünkü gibi 400 `ONE-APP-E-026`); onaylıysa her kipte (kişi · ajan · arka plan
|
|
18
|
+
işi) gönderilebilir ve kişi ile şirket kodu kurulumun portalına karşı doğrulanır. Kod gönderilmezse kişi/ajan kipinde
|
|
19
|
+
oturumdan çözülür, arka plan işinde sorgu reddedilir. `CostCenterCode` bildiren sorgular artık çalışır.
|
|
20
|
+
- **Yeni hata `ONE-SDK-E-140`:** bu üç koddan birinin değeri boş dize ya da yalnız boşluksa istek gönderilmeden
|
|
21
|
+
reddedilir — boş değer ERP'ye gitmez (sunucu da reddeder). Sıradan parametrelerde boş değer serbest kalır.
|
|
22
|
+
- Yeni sabit `DEXA_APP_CONTEXT_PARAMETERS` (`UserCode` · `CompanyCode` · `CostCenterCode`).
|
|
23
|
+
- **Kırıcı:** `DEXA_RESERVED_PARAMETERS` artık yalnız `['LangCode']`'dur (platformun doldurduğu, uygulamanın
|
|
24
|
+
gönderemediği parametre; `ONE-SDK-E-043`). Bu sabitten "gönderilmeyecek kodlar" listesi kuran kod üç kodu artık
|
|
25
|
+
içermez. DEXA işlemleri (`runDexaCommand`) değişmedi.
|
|
26
|
+
|
|
27
|
+
### Eklendi (C6 — arka plan işinde ve ajan aracında Devoplus servisleri, 18.10.2026)
|
|
28
|
+
|
|
29
|
+
- **Arka plan işi servisleri:** manifest `jobs.services` (`mail.execute` · `sms.execute` · `push.execute` · `dexa.read`
|
|
30
|
+
· `ai.use`; her biri `scopes`'ta da beyanlı) ile kuyruk ve zamanlanmış iş Devoplus servislerini **uygulamanın
|
|
31
|
+
kimliğiyle** çağırabilir. Beyan istektir: servis kurulumda portal yöneticisi onaylamadıkça açılmaz. DEXA'ya yazma bu
|
|
32
|
+
yolla açılmaz.
|
|
33
|
+
- **Ajan aracında servisler:** araç işleyicisi servisleri aracı çağıran kişi adına çağırabilir; süreli onay gerektiren
|
|
34
|
+
scope'lar (e-posta · SMS · mobil bildirim · DEXA'ya yazma) bu yolda kullanılamaz. Araç bağlamında `ctx.admin` (kişi
|
|
35
|
+
kurulumun portalının şirket yöneticisi) ve `ctx.actor` (Vekalet / Yerine Görüntüle) dolu gelir.
|
|
36
|
+
- `OneContext.mode` (`'user' | 'job' | 'agent'`), `OneContext.admin`, `OneContext.jobServices`; tip `OneRequestMode`;
|
|
37
|
+
`requireServiceScope(ctx, scope)`. `completeAi` artık `requireServiceScope` kullanır: zamanlanmış işte oturum ve
|
|
38
|
+
belirteç olmadan çalışır.
|
|
39
|
+
|
|
40
|
+
### Eklendi (S10 — sekme başına izin, 18.10.2026)
|
|
41
|
+
|
|
42
|
+
- Manifest `navigation[].permission` (uygulamanın beyan edilmiş izin kodu): sekme yalnız izni taşıyana ve yöneticiye
|
|
43
|
+
görünür. Köprüye `one.setNavigationAccess({ permissions, admin })` eklendi; izinli sekmeler erişim bildirilene kadar
|
|
44
|
+
menüye konmaz, izin kodu Portal'a gitmez (Portal sözleşmesi `{ path, label }` değişmedi; `one:navigation` yeniden
|
|
45
|
+
gönderilebilir). Sunucu yardımcıları: `visibleNavigation`, `NAVIGATION_PERMISSION_RE`, tip `OneNavigationAccess`.
|
|
46
|
+
|
|
47
|
+
### Değişti (S14 · S15 — veri modeli, 18.10.2026)
|
|
48
|
+
|
|
49
|
+
- **Seçim alanında veritabanı kısıtı yok:** `one data generate` seçim (`choice`) kolonuna CHECK yazmaz; seçenek denetimi
|
|
50
|
+
`createCrudHandler`'dadır (değişmedi). Seçim alanına yeni değer eklemek artık migration gerektirmez — tipler ve anlık
|
|
51
|
+
görüntü yenilenir. Değer kaldırmak reddedilir. Önceki sürümün kurduğu tablolarda kısıt durur: anlık görüntü (`v: 2`)
|
|
52
|
+
o alanları `choiceChecks` ile taşır ve onlara değer eklemek yine reddedilir.
|
|
53
|
+
- **Türkçe katlanmış arama:** her metin alanı (`text` · `longText`) için `<alan>_fold` arama kolonu üretilir;
|
|
54
|
+
`createCrudHandler` onu yazar, `alan.contains` ve `q` onda arar (büyük/küçük harf ve ç ğ ı İ ö ş ü duyarsız). Kolonu
|
|
55
|
+
boş kayıt da bulunur. Yeni dışa aktarımlar: `foldSearchText`, `FOLD_COLUMN_SUFFIX`, `DATA_MAX_COLUMNS`,
|
|
56
|
+
`DATA_SNAPSHOT_VERSION`, `DataLegacy`.
|
|
57
|
+
- **Kırıcı:** alan adı `_fold` ile bitemez; tabloda en çok 100 kolon (arama kolonları dahil) — çok sayıda metin alanı
|
|
58
|
+
olan varlık (47'den fazla) reddedilir. Eski anlık görüntüyle (`v: 1`) ilk `one data generate` arama kolonlarını ekleyen
|
|
59
|
+
yeni bir migration yazar; o üretim yapılmadan `one data generate --check` "güncel değil" der.
|
|
60
|
+
|
|
61
|
+
### Eklendi (D-86 · D-87 — yayın, önizleme, geri alma ve kullanım panosu; ⚠️ öneri, geliştirici onayı bekliyor)
|
|
62
|
+
|
|
63
|
+
- `one publish` (test ortamına yayın; adres paylaşılabilir önizleme), `one promote` (bir sonraki ortama), `one rollback
|
|
64
|
+
[--to <x.y.z>] --yes` (önceki sürüme; `--yes` olmadan istek gönderilmez), `one deployments` (yayın istekleri) ve
|
|
65
|
+
`one status [--days 7]` (kullanım ve hata özeti). Hepsi `[--portal <anahtar>]` · `--app` · `--json` alır.
|
|
66
|
+
- Ortak istemci `@devoplus/one-sdk/app-ops`: `requestDeployment`, `listDeployments`, `getInsights`,
|
|
67
|
+
`describeDeployment`, `describeDeploymentResult`, `describeInsights`, `previewAddress`, `parseOpsArgs` ve
|
|
68
|
+
`AppOpsError`. Kısa ad, portal anahtarı, sürüm ve gün sayısı istek gönderilmeden denetlenir.
|
|
69
|
+
- ⚠️ Sunucu uçları henüz yayında değildir; o ortamda yanıt "yapılandırılmamış" ya da bir hata olur.
|
|
70
|
+
|
|
71
|
+
### Düzeltildi (D-82 — hazır liste bileşeni ile kayıt uçları aynı dili konuşur)
|
|
72
|
+
|
|
73
|
+
- `createCrudHandler` uçları hazır liste bileşeninin (`<one-table src>`) sorgu lehçesini de kabul eder: `limit` ·
|
|
74
|
+
`page` · `cursor` (sayfa numarası) · `sort` + `order` · `q` (metin alanlarının herhangi birinde içerir) ·
|
|
75
|
+
`<alan>From` / `<alan>To` · `lang` · `format=xlsx|csv` (listeyle aynı adreste dışa aktarma). Önce bileşen
|
|
76
|
+
`src="/api/<varlık>"` ile bağlanınca her istek 400 "Bilinmeyen sorgu parametresi" alıyordu. Liste yanıtı ayrıca
|
|
77
|
+
`nextCursor` taşır (son sayfada `null`). Eski lehçe (`_page` · `_size` · `_sort` · `.from` / `.to` · `export.xlsx`)
|
|
78
|
+
aynen çalışır; lehçe adı modeldeki bir alanın adıysa alan süzgeci önceliklidir. Kırıcı değil.
|
|
79
|
+
|
|
80
|
+
### Eklendi (D-88 — yapay zekâ çift yönlü; ⚠️ öneri, geliştirici onayı bekliyor)
|
|
81
|
+
|
|
82
|
+
- **Yapay zekâ servisi:** `completeAi(api, ctx, istek)` / `ai.complete` → `One/services/ai` (scope `ai.use`): özet,
|
|
83
|
+
sınıflandırma, alan çıkarma, metin üretme, sohbet. İstemci sınırları (`ONE-SDK-E-080…086`) ve `OneAiRequest` /
|
|
84
|
+
`OneAiResult` tipleri.
|
|
85
|
+
- **Devoplus yapay zekâsına açılan araçlar:** `defineAgentTools`, `handleAgentRequest` (`POST /__one/agent/<ad>`; imzalı
|
|
86
|
+
çağrı işareti, manifest beyanı, oturum, Vekalet kapısı, izin ve girdi şeması denetimi), `agentManifestResponse`
|
|
87
|
+
(`/.well-known/one-agent.json` + `/.well-known/one-agent.md`), `validateAgentInput` ve `ONE-SDK-E-090…096`.
|
|
88
|
+
|
|
89
|
+
### Eklendi (D-80 — zamanlanmış görev ve kuyruk)
|
|
90
|
+
|
|
91
|
+
- `defineJobs({ schedules, queues })` + `handleJobRequest(request, env, execution, definition?)`: manifest `jobs` ile
|
|
92
|
+
beyan edilen işlerin işleyicileri. Platform işi `POST /__one/jobs/<schedule|queue>/<ad>` ile çağırır; işleyici
|
|
93
|
+
dönerse iş tamam, 4xx `OneError` kalıcı hata, başka hata yeniden denenir. `job.id` her denemede aynıdır.
|
|
94
|
+
- `enqueue(name, body, { delaySeconds })`: kuyruğa ileti bırakır (gövde ≤ 64 KiB, gecikme ≤ 24 saat) → `{ id }`.
|
|
95
|
+
- Tipler `OneJob`, `OneJobHandler`, `OneJobKind`, `OneJobsDefinition`, `EnqueueOptions`, `EnqueueResult`; sabitler
|
|
96
|
+
`JOB_NAME_RE`, `JOB_BODY_MAX_BYTES`, `JOB_DELAY_MAX_SECONDS`, `JOB_PATH_PREFIX`; hata kodları `ONE-SDK-E-070…076`.
|
|
97
|
+
- `readContext` kuyruk işinde (`X-One-Auth: job`) iletiyi bırakan kullanıcının `sub` ve yetki alanlarını `user` olarak
|
|
98
|
+
okur; izin ve yönetici bilgisi taşınmaz. Kırıcı değil.
|
|
99
|
+
|
|
100
|
+
### Eklendi (D-83 — hazır arayüz bileşenleri)
|
|
101
|
+
|
|
102
|
+
- **`/one-components.js`** (`ONE_COMPONENTS_SCRIPT`; `clientAssetResponse` sunar): bağımlılıksız bileşenler
|
|
103
|
+
`<one-table>` (sıralama, metin süzme, imleçli ya da sayfa numaralı uzak liste, yerel veri, satır seçimi, satır
|
|
104
|
+
tıklama, Excel/CSV dışa aktarma — dosya `one.download` ile), `<one-form>` (alan şeması, Türkçe/İngilizce doğrulama
|
|
105
|
+
iletileri, sunucunun RFC 9457 `errors` alanının alanlara bağlanması, kaydedilmemiş değişiklik bildirimi, başkası adına
|
|
106
|
+
açılmış oturumda salt-okunur), `<one-filter>` (metin, seçim, tarih, tarih aralığı, evet/hayır → tabloya bağlanır),
|
|
107
|
+
`<one-person-picker>` (kişi arama, klavyeyle seçim, çoklu seçim), `<one-file-upload>` (tür/boyut sınırı, ilerleme),
|
|
108
|
+
`<one-chart>` (çubuk/çizgi/pasta SVG, erişilebilir veri tablosu). Metinler Türkçe + İngilizce, tema/dil Portal'dan.
|
|
109
|
+
- **Kişi arama ucu** `peopleSearchHandler(request, env, ctx)` (`/api/one/people`, scope `orgschema.read`): yalnız
|
|
110
|
+
aktif kişiler, ad + unvan + departman (e-posta/telefon dönmez), en çok 20 sonuç; saf `searchPeople`. Hata kodları
|
|
111
|
+
`ONE-SDK-E-090` (arama 2–100 karakter) · `ONE-SDK-E-091` (yalnız GET).
|
|
112
|
+
- Görsel dile bileşen stilleri ve grafik renkleri (`--one-chart-1` … `--one-chart-6`, açık/koyu) eklendi.
|
|
113
|
+
- Bileşen özellik tipleri: `OneTableColumn`, `OneFormField`, `OneFilterField`, `OnePerson`, `OneUploadedFile`,
|
|
114
|
+
`OneChartData`, `OneComponentEventMap` …
|
|
115
|
+
### Eklendi (D-84 — tanımlayıcı veri modeli; ⚠️ geliştirici onayı bekliyor)
|
|
116
|
+
|
|
117
|
+
- `one.data.json` veri modeli (varlık + alan: metin, uzun metin, sayı, para, tarih, tarih-saat, evet/hayır, seçim, kişi,
|
|
118
|
+
dosya; zorunlu, tekil, dizin, varsayılan) ve doğrulayıcısı `parseDataModel`.
|
|
119
|
+
- `one data generate [--check]`: yalnız ekleyen migration (`migrations/NNNN_one_data.sql`), `src/data/types.ts` ve
|
|
120
|
+
`migrations/.one-data-snapshot.json`. Silme, ad/tür değişikliği, zorunlu yapma ve seçim değeri değişikliği üretilmez,
|
|
121
|
+
komut nedenini söyleyip durur.
|
|
122
|
+
- `createCrudHandler({ model, entity, records, canRead?, canWrite?, actingSessions? })`: sayfalı liste, süzme, sıralama,
|
|
123
|
+
kayıt, güncelleme, yumuşak silme; sunucu tarafı doğrulama ve Türkçe alan hataları (`errors`); `ONE-SDK-E-100…110`.
|
|
124
|
+
|
|
125
|
+
### Eklendi (D-85 — rapor ve dışa aktarma; ⚠️ geliştirici onayı bekliyor)
|
|
126
|
+
|
|
127
|
+
- `toCsv` (UTF-8 BOM, Türkçede `;` ayırıcı, formül enjeksiyonu koruması), `toXlsx` (bağımlılıksız), `exportResponse`
|
|
128
|
+
(RFC 6266 Türkçe dosya adı), `downloadFileName`, `renderPrintableReport` (betiksiz yazdırma sayfası; PDF tarayıcının
|
|
129
|
+
"PDF olarak kaydet"iyle). `ONE-SDK-E-120…121`.
|
|
130
|
+
|
|
131
|
+
### Değişti (D-78 d — komut satırı kimliği)
|
|
132
|
+
|
|
133
|
+
- `one login` artık sabit bir istemci kimliği istemez: `--client-id` / `ONE_CLIENT_ID` verilmezse komut kimlik
|
|
134
|
+
sağlayıcıya bir kez kendini kaydeder (dinamik istemci kaydı, yalnız cihaz kodu + yenileme izni, sırsız) ve kimliği
|
|
135
|
+
bu bilgisayarda ortam başına saklar (`~/.config/devoplus-one/clients.json`, yalnız sizin okuyabildiğiniz dosya).
|
|
136
|
+
Saklanan kayıt kimlik sağlayıcıda geçersizleşmişse komut bir kez yeniden kaydolur.
|
|
137
|
+
- İstenen kapsam daraldı: `openid profile email offline_access onedev.write`. Bu oturum yalnız erişim talebi
|
|
138
|
+
komutlarına (`one request`, `one requests`) yeter; portal verisine erişmez. (D-86 · D-87 ile yayın ve kullanım
|
|
139
|
+
panosu komutları da bu oturumla çalışır.)
|
|
140
|
+
|
|
141
|
+
### Eklendi (D-75 — erişim talebi)
|
|
142
|
+
|
|
143
|
+
- `one login` (tarayıcıda kod onayıyla giriş), `one logout`, `one request <tür>`, `one requests [kimlik]`.
|
|
144
|
+
- `@devoplus/one-sdk/access-request` alt yolu: talep gövdesi kurucusu + istemci (`buildAccessRequest`,
|
|
145
|
+
`submitAccessRequest`, `listMyAccessRequests`, `getAccessRequest`, `describeAccessRequest`) ve tipleri.
|
|
146
|
+
|
|
147
|
+
### Eklendi (D-76 — uygulama arayüz standartları)
|
|
148
|
+
|
|
149
|
+
- **Portal köprüsü** `window.one` (`ONE_BRIDGE_SCRIPT`, `/one-bridge.js`): menü (`one.start({ navigation })`), gezinme
|
|
150
|
+
(`one.onNavigate`, `one.setRoute`), alt başlık (`one.setTitle`), Portal'da çizilen bildirim ve onay penceresi
|
|
151
|
+
(`one.toast`, `one.confirm`), indirme (`one.download`, ≤ 25 MB), dış bağlantı (`one.openExternal`, yalnız https),
|
|
152
|
+
kaydedilmemiş değişiklik (`one.setDirty`), görünen alan (`one.viewport`), belirteçli `one.fetch`. Yükseklik bildirimi
|
|
153
|
+
köprüye taşındı.
|
|
154
|
+
- **Görsel dil** `ONE_UI_CSS` (`/one-ui.css`): açık/koyu değişkenler + düğme, alan, tablo, kart, mesaj, içerik sekmesi;
|
|
155
|
+
Portal'ın tasarım değerleri (`one:context.design`) değişkenlere yazılır.
|
|
156
|
+
- Sunucu yardımcıları: `clientAssetResponse`, `scriptResponse`, `navigationFromManifest`, `isRoutePath`, `ROUTE_PATH_RE`,
|
|
157
|
+
`NAVIGATION_MAX_ITEMS`, `TITLE_MAX_LENGTH`, `DOWNLOAD_MAX_BYTES`.
|
|
158
|
+
- **Vekalet / Yerine Görüntüle bağlamı:** `ctx.actor` (`{ sub, kind }`) ve `isActingSession(ctx)`. Kırıcı değil: alan
|
|
159
|
+
isteğe bağlıdır; `readContext` her zaman yazar. Bu oturumlar varsayılan salt-okunurdur (platform yazma isteğini 403
|
|
160
|
+
`ONE-DSP-E-009` ile reddeder; manifest `actingSessions: "write"` açar).
|
|
161
|
+
|
|
162
|
+
### Kırıcı (D-72 — white label)
|
|
163
|
+
|
|
164
|
+
- SDK artık çalışma ortamı tiplerini **kendisi** taşır: `OneDatabase` · `OneStatement` · `OneQueryResult` ·
|
|
165
|
+
`OneFilesBinding` · `OneStoredFile(Body)` · `OneCacheBinding` · `OneExecutionContext` · `OneApp<Env>`. Ek tip paketi
|
|
166
|
+
eş bağımlılığı kaldırıldı; uygulamanın `tsconfig`'i `"lib": ["ES2022", "WebWorker"]` ve `"types": []` ile yetinir.
|
|
167
|
+
Uygulamada `Env` tipleri bu adlarla yazılır, giriş noktası `satisfies OneApp<Env>` ile sınanır.
|
|
168
|
+
- `OneFiles` ve `OneCache` kurucuları `OneFilesBinding` / `OneCacheBinding` alır (çalışma ortamının verdiği nesne
|
|
169
|
+
bunlara uyar; uyum paket içinde ayrıca denetlenir).
|
|
170
|
+
- Manifest servis adları: `services.d1 / r2 / kv` → `services.database / files / cache`. Eski adlar açık bir hatayla
|
|
171
|
+
reddedilir (sessizce yok sayılsalar uygulama veritabanını ya da dosya deposunu kaybederdi).
|
|
172
|
+
|
|
173
|
+
### Eklendi (D-72)
|
|
174
|
+
|
|
175
|
+
- `one` komutu (paketle gelir): `one dev` uygulamayı yerelde çalıştırır, `one migrate` `migrations/`'ı yerel
|
|
176
|
+
veritabanına uygular, `one build` yükleme provası yapar. Yapılandırma ve yerel veri `.one/` altındadır ve her komutta
|
|
177
|
+
`one.manifest.json`'dan üretilir; uygulama deposunda çalışma ortamına ait yapılandırma dosyası yoktur.
|
|
178
|
+
|
|
179
|
+
### Eklendi (D-59 — kullanıcı onayı)
|
|
180
|
+
|
|
181
|
+
- `CONSENT_SCOPES` ve `awaitsUserConsent(ctx, scope)`: ERP'ye veri yazma ve kullanıcı adına e-posta/SMS/mobil bildirim
|
|
182
|
+
scope'ları artık kullanıcının ayrıca ve süreli (30 gün, portal başına) onayıyla belirtece girer. Uygulama onay
|
|
183
|
+
beklenen işin düğmesini kapatıp kullanıcıyı portaldaki "İzinleri incele" düğmesine yönlendirebilir.
|
|
184
|
+
- `requireScope` onaya bağlı scope eksikse aynı kodla (`ONE-SDK-E-003`) ama izni nereden vereceğini söyleyen bir metinle
|
|
185
|
+
hata verir. Kırıcı değil: kod ve durum aynı.
|
|
186
|
+
|
|
187
|
+
### Düzeltildi (bağımsız inceleme, D-47/D-49)
|
|
188
|
+
|
|
189
|
+
- `approvalChain` pasif yöneticiyi fiilen atlayamıyordu: `getOrgUsersWithManagers` ucu varsayılan olarak yalnız aktifleri döner ve zincir pasif yöneticide "bilinmeyen kişi" diye kesiliyordu. `getOrgUsersWithManagers(api, { includeInactive: true })` eklendi; `approvalChainReport` durma nedenini (`top` · `depth` · `unknown` · `cycle`) döner.
|
|
190
|
+
- Bildirim senaryolarında uzun uygulama/kişi adları SMS'te `SMS_NAME_MAX_LENGTH` (40) ile kısaltılır — bağlantı yokken de 300 aşılıp "bağlantıyı kısaltın" hatası veriliyordu. Kısaltma artık bir emojiyi (vekil çift) ortasından bölmez.
|
|
191
|
+
- `hasPermission` açıklaması: yönetici için her kodda `true`; ad alanı süzgeci gizlilik sınırı değildir.
|
|
192
|
+
|
|
193
|
+
### Düzeltildi (Codex incelemesi, PR #15)
|
|
194
|
+
|
|
195
|
+
- `problemResponse` `OneError.retryAfterSeconds`'ı düşürüyordu: DEXA işleminin 409 `ERPCMD-APP-E-016` hatası standart
|
|
196
|
+
rota kalıbıyla (`catch → problemResponse`) tarayıcıya bekleme süresi olmadan ulaşıyordu. Değer pozitif tam sayıysa
|
|
197
|
+
yanıt artık `Retry-After` başlığını ve gövdede `retryAfterSeconds` alanını taşır; değer yoksa gövde şekli aynıdır.
|
|
198
|
+
- `runDexaCommand` / `getDexaCommandStatus` eksik ya da tutarsız bir 200 yanıtını başarı sayabiliyordu (ör.
|
|
199
|
+
`{ "outcome": "succeeded" }` ya da başka bir `idempotencyKey`): eksik alanlar boş varsayılanlarla doldurulup
|
|
200
|
+
`succeeded` dönüyordu. Yanıt artık backend kaydının tiplerine (`ErpCommandResponse` · `ErpCommandStatusResponse`) ve
|
|
201
|
+
gönderilen anahtarlara göre doğrulanır; uymayan her yanıt `inDoubt` olur ve gövdesinden hiçbir alan taşınmaz.
|
|
202
|
+
**Kırıcı (yayımlanmamış API):** `normalizeDexaCommandResult(raw, sentIdempotencyKey, sentKey)` üçüncü parametre aldı.
|
|
203
|
+
|
|
204
|
+
### Eklendi
|
|
205
|
+
|
|
206
|
+
- **DEXA işlemleri — ERP'ye veri yazma (D-56 — geliştirici onayı bekliyor):** `runDexaCommand(api, key, parameters,
|
|
207
|
+
{ idempotencyKey })` → backend `One/services/dexa/command` (scope `dexa.write`, zorunlu `Idempotency-Key` başlığı) ve
|
|
208
|
+
`getDexaCommandStatus(api, idempotencyKey)` (kayıt yoksa `null`). Yanıt tipleri backend `ErpCommandResponse` /
|
|
209
|
+
`ErpCommandStatusResponse` ile alan adı alan adına aynıdır (`DexaCommandResult` · `DexaCommandStatus` ·
|
|
210
|
+
`DexaCommandErpView`); tanınmayan 200 yanıtı ya da bilinmeyen `outcome` **`inDoubt`** sayılır (yeni anahtarla tekrar
|
|
211
|
+
denemeye yol açmasın). `newIdempotencyKey()` · `normalizeIdempotencyKey()` (kanonik UUID, boş UUID değil, küçük harf).
|
|
212
|
+
İstemci kuralları istek gönderilmeden fırlatır (`buildDexaCommandRequest`, `ONE-SDK-E-045…049`): anahtar biçimi,
|
|
213
|
+
en çok 32 parametre, ad biçimi, değer metin ≤ 65.536 karakter; sorgulardaki ayrılmış bağlam parametresi yasağı
|
|
214
|
+
işlemlerde yoktur.
|
|
215
|
+
- **Mobil bildirim (D-55 — geliştirici onayı bekliyor):** `sendPush(api, { toSubjects, toOrgUserIds?, title, text })` →
|
|
216
|
+
backend `One/services/push` (scope `push.execute`); yalnız başlık + metin, derin bağlantı yok. Atlama gerekçesi
|
|
217
|
+
`not-deliverable`. Senaryolarda `toPush` (başlık ≤ 100 = konu, metin ≤ 300 = SMS metni; `PUSH_TITLE_MAX_LENGTH` ·
|
|
218
|
+
`PUSH_TEXT_MAX_LENGTH`) ve `notify` `push` kanalı (kanallar bağımsız). ⚠️ Push bugün hiçbir ortamda açık değildir
|
|
219
|
+
(`ONE-APP-E-029`).
|
|
220
|
+
- **`OneError.retryAfterSeconds`:** `BackendClient` hata yanıtındaki `Retry-After` başlığını (saniye) ya da gövdedeki
|
|
221
|
+
`retryAfterSeconds`'ı taşır (ör. DEXA işlemi 409 `ERPCMD-APP-E-016`). `OneError` kurucusuna isteğe bağlı dördüncü
|
|
222
|
+
parametre eklendi; mevcut çağrılar değişmez. Nesne olmayan bir JSON hata gövdesi artık `TypeError` üretmez.
|
|
223
|
+
- **Uygulama izinleri (D-49 — geliştirici onayı bekliyor):** `OneUser.permissions` (yalnız uygulamanın ad alanındaki izinler, dispatch `X-One-Permissions`) + `OneUser.admin` (şirket/küresel yönetici rolü, `X-One-Admin`); `hasPermission` · `requirePermission` (`ONE-SDK-E-004`). Portal yöneticisi her izne sahip sayılır (backend baypası paritesi). ⚠️ Eski dispatch bu başlıkları yazmaz: `permissions` boş, `admin` `false` gelir (fail-closed).
|
|
224
|
+
- **Organizasyon şeması (D-47 — geliştirici onayı bekliyor):** `getOrgSchema` · `getOrgUsersWithManagers` · `getMyOrgContext` (oturumdaki kişinin org kimliği, `Users/me` → `orgContext.legacyUserId`) · `getUserGroupMembers` · `getUserGroupsOfUser` (scope `orgschema.read`) ve saf yardımcılar `managerOf` · `approvalChain` (döngü güvenli, pasif yöneticiyi atlar) · `orgUsersMatching` · `localizedText`. Hata kodları `ONE-SDK-E-050/051`.
|
|
225
|
+
- **Bildirim senaryoları (D-47):** `approvalRequest` · `approvalResult` · `reminder` · `systemNotice` · `operationResult` · `verificationCode` (TR/EN; e-posta + SMS metni tek girdiden, backend sınırlarına göre kırpılır), `toMail` · `toSms` · `notify` (kanallar bağımsız), doğrulama kodu yardımcıları `generateVerificationCode` · `generateSalt` · `hashVerificationCode` · `verificationCodeMatches`. Hata kodları `ONE-SDK-E-060…063`.
|
|
226
|
+
- **Org kimliğiyle alıcı:** `MailRequest` / `SmsRequest` `toOrgUserIds?` alanı (backend D-47); atlama gerekçesi `invalid-org-user`. ⚠️ Alanı tanımayan (D-47 öncesi) backend sürümüne karşı kullanmayın.
|
|
227
|
+
- **Olay kaydı (Event Logger) koruması ve hata kaydı (D-45):** `logError(ctx, message, error, data?)`; `logEvent` /
|
|
228
|
+
`logError` / `logAudit` `data`daki sır kokan alanları `"[gizli]"` yapar (`redact`) ve 8 KiB üstü `data` yerine boyutu
|
|
229
|
+
yazar (`safeData`); `problemResponse(error, ctx?)` bilinmeyen hatayı bağlamıyla kaydeder (yığın kırpılmış). Yeni
|
|
230
|
+
dışa açılanlar: `describeError` · `EVENT_DATA_MAX_BYTES` · `EVENT_MESSAGE_MAX_LENGTH` · `EVENT_STACK_MAX_LENGTH`.
|
|
231
|
+
Davranış değişikliği: `logEvent` ileti metni 1.000 karakterde kırpılır.
|
|
232
|
+
- **DEXA (ERP okuma) servisi:** `queryDexa(api, key, parameters?)` — backend `One/services/dexa/query` ince istemcisi
|
|
233
|
+
(scope `dexa.read`; D-09, uç D-42 — geliştirici onayı bekliyor). Yalnız kayıt defterinde izinli, önceden tanımlı
|
|
234
|
+
QueryStore anahtarları çalışır. Sonuç `DexaQueryResult { columns, rows, unavailable, truncated }`: `unavailable`
|
|
235
|
+
sorgunun ÇALIŞAMADIĞINI söyler (200 döner, SDK fırlatmaz — boş satır "kayıt yok" sayılmaz), `truncated` 5.000 satır
|
|
236
|
+
kesmesidir; eksik alan savunmacı okunur (`normalizeDexaQueryResult`). İstemci tarafı kurallar sunucuyla birebir
|
|
237
|
+
ve istek gönderilmeden fırlatır (`buildDexaQueryRequest`, `ONE-SDK-E-040…044`): anahtar biçimi, en çok 32 parametre,
|
|
238
|
+
ad biçimi, bağlam parametreleri (`LangCode` · `CompanyCode` · `CostCenterCode` · `UserCode`; harf duyarsız) ve
|
|
239
|
+
2.000 karakterlik değer. Sabitler: `DEXA_KEY_RE` · `DEXA_PARAMETER_NAME_RE` · `DEXA_MAX_PARAMETERS` ·
|
|
240
|
+
`DEXA_PARAMETER_VALUE_MAX_LENGTH` · `DEXA_RESERVED_PARAMETERS`.
|
|
241
|
+
- **Denetim günlüğü kalıcılığı:** `recordAudit(api, ctx, action, target?, data?)` — `logAudit` izine ek olarak
|
|
242
|
+
backend `One/services/audit` ucuna yazar (scope `audit.write`; D-36). Girdi kuralları sunucuyla birebir
|
|
243
|
+
(`buildAuditRequest`, `ONE-SDK-E-030…032`); uzak yazma best-effort (`recorded:false` + uyarı).
|
|
244
|
+
- **Önbellek servisi:** `OneCache` (kurulum başına KV namespace, binding `CACHE`; D-35): `get` / `put` / `delete`;
|
|
245
|
+
TTL zorunlu (60 sn … 30 gün, sınır dışı değer hata), değer JSON ≤ 1 MiB, anahtar kuralı fail-closed
|
|
246
|
+
(`normalizeCacheKey`, 512 bayt). KV nihai tutarlıdır — önbellek olarak kullanılır, kayıt deposu olarak değil.
|
|
247
|
+
|
|
248
|
+
## [0.1.0] — 2026-10-15
|
|
249
|
+
|
|
250
|
+
npm'e yayımlanmadı (bkz. 0.2.0). İlk paketlenebilir sürüm (platform deposu `devoplus/devoplus-one`, karar defteri D-11 · D-16 · D-17 · D-32 · D-33).
|
|
251
|
+
|
|
252
|
+
### Eklendi
|
|
253
|
+
|
|
254
|
+
- **Kimlik bağlamı:** `readContext(headers)` dispatch Worker'ın yazdığı `X-One-*` başlıklarından `OneContext`
|
|
255
|
+
üretir; `requireUser` (401) ve `requireScope` (403) kapıları; `OneError(status, code, detail)`.
|
|
256
|
+
- **Backend istemcisi:** `BackendClient` — `api/v1/...` yolları, zarfsız DTO, `204 → undefined`, RFC 9457
|
|
257
|
+
`ProblemDetails` → `OneError`. Sır taşımaz; platform kimliğini outbound Worker ekler.
|
|
258
|
+
- **Hata yanıtı:** `problemResponse(error)` — `OneError`'ı `application/problem+json` yanıtına çevirir; bilinmeyen
|
|
259
|
+
hata 500 + sabit metin (iç mesaj sızmaz).
|
|
260
|
+
- **Günlük:** `logEvent` (sistem olayı) ve `logAudit` (kritik kullanıcı işlemi; aktör zorunlu) — yapısal console
|
|
261
|
+
çıktısı (Workers Logs).
|
|
262
|
+
- **Dosya servisi:** `OneFiles` (kurulum başına R2 kovası, binding `FILES`): `put` / `get` / `head` / `delete` /
|
|
263
|
+
`list`; anahtar kuralı fail-closed (`normalizeFileKey`: 512 karakter **ve** 1.024 bayt — R2 sınırı UTF-8 ile
|
|
264
|
+
ölçülür), `sanitizeFileName`, 25 MiB tavan (`FILE_MAX_BYTES`), `put` akış gövde kabul etmez;
|
|
265
|
+
`readBoundedBody(request, maxBytes)` istek gövdesini sınırı belleğe almadan ÖNCE (Content-Length) ve parçalı
|
|
266
|
+
akışta okuma SIRASINDA uygulayarak alır.
|
|
267
|
+
- **İletişim servisi:** `sendMail` / `sendSms` — CA backend `One/services/mail|sms` ince istemcisi; alıcılar
|
|
268
|
+
`sub` listesidir, adres/telefon sunucuda çözülür; yanıt `NotifyResult { queued, skipped[{sub, reason}] }`.
|