@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.
Files changed (139) hide show
  1. package/CHANGELOG.md +268 -0
  2. package/README.md +894 -2
  3. package/bin/accessRequest.d.mts +96 -0
  4. package/bin/accessRequest.mjs +340 -0
  5. package/bin/appOps.d.mts +97 -0
  6. package/bin/appOps.mjs +336 -0
  7. package/bin/dataCommand.mjs +131 -0
  8. package/bin/devConfig.mjs +132 -0
  9. package/bin/one.mjs +341 -0
  10. package/bin/session.mjs +239 -0
  11. package/dist/agentInput.d.ts +9 -0
  12. package/dist/agentInput.d.ts.map +1 -0
  13. package/dist/agentInput.js +102 -0
  14. package/dist/agentInput.js.map +1 -0
  15. package/dist/agentTools.d.ts +83 -0
  16. package/dist/agentTools.d.ts.map +1 -0
  17. package/dist/agentTools.js +164 -0
  18. package/dist/agentTools.js.map +1 -0
  19. package/dist/ai.d.ts +67 -0
  20. package/dist/ai.d.ts.map +1 -0
  21. package/dist/ai.js +129 -0
  22. package/dist/ai.js.map +1 -0
  23. package/dist/audit.d.ts +21 -0
  24. package/dist/audit.d.ts.map +1 -0
  25. package/dist/audit.js +58 -0
  26. package/dist/audit.js.map +1 -0
  27. package/dist/backend.d.ts +27 -0
  28. package/dist/backend.d.ts.map +1 -0
  29. package/dist/backend.js +63 -0
  30. package/dist/backend.js.map +1 -0
  31. package/dist/cache.d.ts +20 -0
  32. package/dist/cache.d.ts.map +1 -0
  33. package/dist/cache.js +84 -0
  34. package/dist/cache.js.map +1 -0
  35. package/dist/client.d.ts +147 -0
  36. package/dist/client.d.ts.map +1 -0
  37. package/dist/client.js +469 -0
  38. package/dist/client.js.map +1 -0
  39. package/dist/components.d.ts +235 -0
  40. package/dist/components.d.ts.map +1 -0
  41. package/dist/components.js +1491 -0
  42. package/dist/components.js.map +1 -0
  43. package/dist/context.d.ts +110 -0
  44. package/dist/context.d.ts.map +1 -0
  45. package/dist/context.js +126 -0
  46. package/dist/context.js.map +1 -0
  47. package/dist/data/crud.d.ts +74 -0
  48. package/dist/data/crud.d.ts.map +1 -0
  49. package/dist/data/crud.js +614 -0
  50. package/dist/data/crud.js.map +1 -0
  51. package/dist/data/ddl.d.ts +76 -0
  52. package/dist/data/ddl.d.ts.map +1 -0
  53. package/dist/data/ddl.js +362 -0
  54. package/dist/data/ddl.js.map +1 -0
  55. package/dist/data/fold.d.ts +14 -0
  56. package/dist/data/fold.d.ts.map +1 -0
  57. package/dist/data/fold.js +76 -0
  58. package/dist/data/fold.js.map +1 -0
  59. package/dist/data/model.d.ts +113 -0
  60. package/dist/data/model.d.ts.map +1 -0
  61. package/dist/data/model.js +408 -0
  62. package/dist/data/model.js.map +1 -0
  63. package/dist/data/values.d.ts +29 -0
  64. package/dist/data/values.d.ts.map +1 -0
  65. package/dist/data/values.js +152 -0
  66. package/dist/data/values.js.map +1 -0
  67. package/dist/dexa.d.ts +44 -0
  68. package/dist/dexa.d.ts.map +1 -0
  69. package/dist/dexa.js +74 -0
  70. package/dist/dexa.js.map +1 -0
  71. package/dist/dexaCommand.d.ts +116 -0
  72. package/dist/dexaCommand.d.ts.map +1 -0
  73. package/dist/dexaCommand.js +226 -0
  74. package/dist/dexaCommand.js.map +1 -0
  75. package/dist/export/columns.d.ts +62 -0
  76. package/dist/export/columns.d.ts.map +1 -0
  77. package/dist/export/columns.js +127 -0
  78. package/dist/export/columns.js.map +1 -0
  79. package/dist/export/csv.d.ts +10 -0
  80. package/dist/export/csv.d.ts.map +1 -0
  81. package/dist/export/csv.js +30 -0
  82. package/dist/export/csv.js.map +1 -0
  83. package/dist/export/report.d.ts +19 -0
  84. package/dist/export/report.d.ts.map +1 -0
  85. package/dist/export/report.js +91 -0
  86. package/dist/export/report.js.map +1 -0
  87. package/dist/export/response.d.ts +14 -0
  88. package/dist/export/response.d.ts.map +1 -0
  89. package/dist/export/response.js +70 -0
  90. package/dist/export/response.js.map +1 -0
  91. package/dist/export/xlsx.d.ts +15 -0
  92. package/dist/export/xlsx.d.ts.map +1 -0
  93. package/dist/export/xlsx.js +167 -0
  94. package/dist/export/xlsx.js.map +1 -0
  95. package/dist/export/zip.d.ts +7 -0
  96. package/dist/export/zip.d.ts.map +1 -0
  97. package/dist/export/zip.js +83 -0
  98. package/dist/export/zip.js.map +1 -0
  99. package/dist/files.d.ts +52 -0
  100. package/dist/files.d.ts.map +1 -0
  101. package/dist/files.js +137 -0
  102. package/dist/files.js.map +1 -0
  103. package/dist/index.d.ts +31 -0
  104. package/dist/index.d.ts.map +1 -0
  105. package/dist/index.js +35 -0
  106. package/dist/index.js.map +1 -0
  107. package/dist/jobs.d.ts +57 -0
  108. package/dist/jobs.d.ts.map +1 -0
  109. package/dist/jobs.js +157 -0
  110. package/dist/jobs.js.map +1 -0
  111. package/dist/log.d.ts +22 -0
  112. package/dist/log.d.ts.map +1 -0
  113. package/dist/log.js +107 -0
  114. package/dist/log.js.map +1 -0
  115. package/dist/notify.d.ts +41 -0
  116. package/dist/notify.d.ts.map +1 -0
  117. package/dist/notify.js +11 -0
  118. package/dist/notify.js.map +1 -0
  119. package/dist/org.d.ts +184 -0
  120. package/dist/org.d.ts.map +1 -0
  121. package/dist/org.js +114 -0
  122. package/dist/org.js.map +1 -0
  123. package/dist/people.d.ts +39 -0
  124. package/dist/people.d.ts.map +1 -0
  125. package/dist/people.js +88 -0
  126. package/dist/people.js.map +1 -0
  127. package/dist/problem.d.ts +12 -0
  128. package/dist/problem.d.ts.map +1 -0
  129. package/dist/problem.js +33 -0
  130. package/dist/problem.js.map +1 -0
  131. package/dist/runtime.d.ts +92 -0
  132. package/dist/runtime.d.ts.map +1 -0
  133. package/dist/runtime.js +8 -0
  134. package/dist/runtime.js.map +1 -0
  135. package/dist/scenarios.d.ts +125 -0
  136. package/dist/scenarios.d.ts.map +1 -0
  137. package/dist/scenarios.js +251 -0
  138. package/dist/scenarios.js.map +1 -0
  139. package/package.json +55 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components.js","sourceRoot":"","sources":["../src/components.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ export interface OneUser {
2
+ /** devoplus-auth `sub` — UserAccount kimlik uzayı (org şeması User._id DEĞİL). */
3
+ sub: string;
4
+ /** Uygulamaya verilmiş scope'lar (manifest'in alt kümesi). */
5
+ scope: readonly string[];
6
+ globalAdmin: boolean;
7
+ /**
8
+ * Kullanıcının BU uygulamanın ad alanındaki izinleri (`One.<Uygulama>.*`, D-49) — portal yöneticisi Yetki
9
+ * Yönetimi'nde kullanıcı gruplarına (org düğümlerine) atar. Başka uygulamaların ve portalın izinleri iletilmez.
10
+ */
11
+ permissions: readonly string[];
12
+ /** Portal yöneticisi (şirket ya da küresel yönetici rolü): platformda her izne sahiptir, `hasPermission` de öyle sayar. */
13
+ admin: boolean;
14
+ }
15
+ /** Oturum bir başkası adına mı kullanılıyor (D-76 U3)? `delegation` = Vekalet, `impersonation` = Yerine Görüntüle. */
16
+ export type OneActingKind = 'delegation' | 'impersonation';
17
+ /**
18
+ * Vekalet / Yerine Görüntüle oturumunda işlemi GERÇEKTE yapan kişi. `user.sub` adına çalışılan kişidir (veri onundur);
19
+ * `actor.sub` oturumu kullanan kişidir — denetim kaydına ve "kim yaptı" bilgisine bu yazılır. Varsayılan olarak bu
20
+ * oturumlar salt-okunurdur: platform GET/HEAD dışındaki isteği uygulamaya ulaşmadan reddeder (manifest
21
+ * `actingSessions: "write"` beyan edilmedikçe).
22
+ */
23
+ export interface OneActor {
24
+ sub: string;
25
+ kind: OneActingKind;
26
+ }
27
+ export interface OneContext {
28
+ app: string;
29
+ portalKey: string;
30
+ /** Kiracı: 24-hex PortalId. Veri her zaman buna bağlıdır (D-10). */
31
+ portalId: string;
32
+ /** Oturum yoksa null — yalnız okuma metotları buraya anonim ulaşabilir. */
33
+ user: OneUser | null;
34
+ /**
35
+ * Vekalet / Yerine Görüntüle oturumunda işlemi yapan kişi (D-76 U3); kendi oturumunda ve anonimde null. `readContext`
36
+ * her zaman yazar; isteğe bağlı olması yalnız elle kurulan bağlamlar (testler) kırılmasın diyedir.
37
+ */
38
+ actor?: OneActor | null;
39
+ /**
40
+ * İsteğin geldiği yol (C6). `user`: tarayıcıdan, kullanıcının oturumuyla. `job`: platformun kuyruk ya da zamanlama
41
+ * çağrısı — Devoplus servisleri UYGULAMANIN kimliğiyle çağrılır (yalnız `jobs.services` beyanı + kurulumdaki yönetici
42
+ * onayı). `agent`: Devoplus ajanının araç çağrısı — servisler kişi adına çağrılır, süreli onay gerektirenler hariç.
43
+ * `readContext` her zaman yazar; isteğe bağlı olması yalnız elle kurulan bağlamlar kırılmasın diyedir (yoksa `user`).
44
+ */
45
+ mode?: OneRequestMode;
46
+ /**
47
+ * Portal yöneticisi mi (`user.admin` ile aynı; oturumsuz ve iş çağrısında `false`). Ajan aracında yalnız çağıran kişi
48
+ * kurulumun portalının şirket yöneticisiyse `true` olur. `readContext` her zaman yazar.
49
+ */
50
+ admin?: boolean;
51
+ /** İş çağrısında (`mode: 'job'`) manifest `jobs.services` beyanı; diğer yollarda boş. `readContext` her zaman yazar. */
52
+ jobServices?: readonly string[];
53
+ }
54
+ /** İsteğin geldiği yol — bkz. `OneContext.mode`. */
55
+ export type OneRequestMode = 'user' | 'job' | 'agent';
56
+ export declare class OneError extends Error {
57
+ readonly status: number;
58
+ readonly code: string;
59
+ /**
60
+ * Sunucunun "bu kadar saniye sonra yeniden deneyin" ipucu (`Retry-After` başlığı ya da ProblemDetails
61
+ * `retryAfterSeconds` alanı); yoksa `undefined`. Örnek: DEXA komutu 409 `ERPCMD-APP-E-016` (aynı işlem sürüyor).
62
+ */
63
+ readonly retryAfterSeconds: number | undefined;
64
+ constructor(status: number, code: string, detail: string, options?: {
65
+ retryAfterSeconds?: number | undefined;
66
+ });
67
+ }
68
+ export declare function readContext(headers: Headers): OneContext;
69
+ /** Oturum bir başkası adına mı (Vekalet ya da Yerine Görüntüle)? */
70
+ export declare function isActingSession(ctx: OneContext): boolean;
71
+ /** Oturum zorunlu uçlar için: anonimse 401 fırlatır. */
72
+ export declare function requireUser(ctx: OneContext): OneUser;
73
+ /**
74
+ * Kullanıcının AYRICA ve SÜRELİ onay vermesi gereken scope'lar (karar defteri D-59): ERP'ye veri yazma ve kullanıcı
75
+ * adına e-posta/SMS/mobil bildirim. Manifest'te beyan edilmiş ve kullanıcının yetkisi olsa bile, kullanıcı bu uygulamaya
76
+ * bu portalda onay vermeden (30 gün geçerli) belirtece GİRMEZ; portal uygulamanın üstünde bir uyarı ve "İzinleri incele"
77
+ * düğmesi gösterir. Liste devoplus-auth `ONE_APP_CONSENT.scopes` ile aynıdır. `dexa.read` bu listede DEĞİLDİR.
78
+ */
79
+ export declare const CONSENT_SCOPES: readonly string[];
80
+ /**
81
+ * Bu scope kullanıcının ayrı onayına bağlı ve belirteçte YOK mu? Uygulama ilgili düğmeyi kapatıp "portaldaki İzinleri
82
+ * incele düğmesiyle izin verin" diyebilsin diye. ⚠️ Belirteç yalnız scope'un OLMADIĞINI söyler: manifest'te hiç
83
+ * beyan edilmemiş bir scope için de `true` döner — beyan uygulamanın kendi bilgisidir. Oturumsuzsa `false`.
84
+ */
85
+ export declare function awaitsUserConsent(ctx: OneContext, scope: string): boolean;
86
+ /**
87
+ * Scope kapısı: uygulama manifest'te beyan etmediği bir işi yapamaz. Onaya bağlı scope'ta (`CONSENT_SCOPES`) hata metni
88
+ * kullanıcıya izni nereden vereceğini de söyler; kod aynı kalır (`ONE-SDK-E-003`).
89
+ */
90
+ export declare function requireScope(ctx: OneContext, scope: string): OneUser;
91
+ /**
92
+ * Devoplus servis çağrısının yerel scope kapısı (C6) — servis istemcileri bunu kullanır; asıl karar backend'dedir.
93
+ * - `user`: `requireScope` ile aynı (kullanıcının belirtecindeki scope).
94
+ * - `agent`: kişi adına; süreli onay gerektiren scope'lar (`CONSENT_SCOPES` — e-posta, SMS, bildirim, DEXA'ya yazma)
95
+ * ajan aracında HİÇ kullanılamaz (kişi bu çağrıda onay ekranını göremez).
96
+ * - `job`: kullanıcı GEREKMEZ; scope manifest `jobs.services` beyanında olmalı. Beyan yetmez: servis ancak kurulumda
97
+ * portal yöneticisi onaylarsa açılır (onay backend'de denetlenir, uygulama göremez → onaysızsa backend 403 döner).
98
+ */
99
+ export declare function requireServiceScope(ctx: OneContext, scope: string): void;
100
+ /**
101
+ * Uygulama izni (D-49): kullanıcıda kod varsa ya da portal yöneticisiyse `true` (backend'in yönetici baypasıyla aynı
102
+ * kural — yönetici için HER kodda `true`). Anonim bağlamda `false`. Kod uygulamanın kendi ad alanında olmalıdır
103
+ * (`One.<Uygulama>.<Eylem>`); başka ad alanındaki kod dispatch'ten hiç gelmediği için yönetici olmayan kullanıcıda
104
+ * `false` döner. ⚠️ Ad alanı süzgeci bir kolaylıktır, gizlilik sınırı DEĞİL: belirteç kullanıcının bütün izinlerini
105
+ * taşır (inceleme bulgusu P2-1).
106
+ */
107
+ export declare function hasPermission(ctx: OneContext, code: string): boolean;
108
+ /** İzin kapısı: oturum yoksa 401, izin yoksa 403 (`ONE-SDK-E-004`). */
109
+ export declare function requirePermission(ctx: OneContext, code: string): OneUser;
110
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,OAAO;IACtB,kFAAkF;IAClF,GAAG,EAAE,MAAM,CAAA;IACX,8DAA8D;IAC9D,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;IACxB,WAAW,EAAE,OAAO,CAAA;IACpB;;;OAGG;IACH,WAAW,EAAE,SAAS,MAAM,EAAE,CAAA;IAC9B,2HAA2H;IAC3H,KAAK,EAAE,OAAO,CAAA;CACf;AAED,sHAAsH;AACtH,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,eAAe,CAAA;AAE1D;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,aAAa,CAAA;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,MAAM,CAAA;IACjB,oEAAoE;IACpE,QAAQ,EAAE,MAAM,CAAA;IAChB,2EAA2E;IAC3E,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;IACpB;;;OAGG;IACH,KAAK,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAA;IACvB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,cAAc,CAAA;IACrB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,wHAAwH;IACxH,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAChC;AAED,oDAAoD;AACpD,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,CAAA;AAErD,qBAAa,QAAS,SAAQ,KAAK;IAQ/B,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM;IARvB;;;OAGG;IACH,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAA;IAE9C,YACW,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;QAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAO,EAIzD;CACF;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,CAmCxD;AAED,oEAAoE;AACpE,wBAAgB,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAExD;AAED,wDAAwD;AACxD,wBAAgB,WAAW,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAGpD;AAED;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,SAAS,MAAM,EAAkE,CAAA;AAE9G;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAEzE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAWpE;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAexE;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAIpE;AAED,uEAAuE;AACvE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAIxE"}
@@ -0,0 +1,126 @@
1
+ export class OneError extends Error {
2
+ status;
3
+ code;
4
+ /**
5
+ * Sunucunun "bu kadar saniye sonra yeniden deneyin" ipucu (`Retry-After` başlığı ya da ProblemDetails
6
+ * `retryAfterSeconds` alanı); yoksa `undefined`. Örnek: DEXA komutu 409 `ERPCMD-APP-E-016` (aynı işlem sürüyor).
7
+ */
8
+ retryAfterSeconds;
9
+ constructor(status, code, detail, options = {}) {
10
+ super(detail);
11
+ this.status = status;
12
+ this.code = code;
13
+ this.retryAfterSeconds = options.retryAfterSeconds;
14
+ }
15
+ }
16
+ export function readContext(headers) {
17
+ const app = headers.get('x-one-app');
18
+ const portalKey = headers.get('x-one-portal-key');
19
+ const portalId = headers.get('x-one-portal');
20
+ if (!app || !portalKey || !portalId)
21
+ // Dispatch dışından çağrı (ör. yanlış route) — bağlamsız çalışmak kiracı sınırını kaybettirir.
22
+ throw new OneError(500, 'ONE-SDK-E-001', 'Platform bağlamı eksik: istek dispatch üzerinden gelmedi.');
23
+ const auth = headers.get('x-one-auth');
24
+ const sub = headers.get('x-one-sub');
25
+ // `job`: platformun kuyruk işi çağrısı (D-80) — iletiyi bırakan kullanıcının `sub` ve yetki alanlarıyla; izin ve
26
+ // yönetici bilgisi taşınmaz (boş gelir). Zamanlanmış iş `sub` taşımaz → `user` null.
27
+ const user = (auth === 'user' || auth === 'job') && sub
28
+ ? {
29
+ sub,
30
+ scope: (headers.get('x-one-scope') ?? '').split(' ').filter(Boolean),
31
+ globalAdmin: headers.get('x-one-global-admin') === 'true',
32
+ permissions: (headers.get('x-one-permissions') ?? '').split(' ').filter(Boolean),
33
+ admin: headers.get('x-one-admin') === 'true',
34
+ }
35
+ : null;
36
+ const actorSub = headers.get('x-one-actor-sub');
37
+ const sessionKind = headers.get('x-one-session-kind');
38
+ // Platform iki başlığı birlikte yazar; yalnız biri gelirse (beklenmeyen durum) yine başkası adına sayılır — "kendi
39
+ // oturumu" varsayımı yazma kararlarını gevşetirdi.
40
+ const actor = user && (actorSub || sessionKind)
41
+ ? { sub: actorSub ?? '', kind: sessionKind === 'delegation' ? 'delegation' : 'impersonation' }
42
+ : null;
43
+ // Yol: platformun iş çağrısı `X-One-Auth: job`, Devoplus ajanının imzalı çağrısı `X-One-Invoked-By: devoplus-agent`
44
+ // yazar; istemcinin yazdığı aynı adlı başlıklar platform kapısında silinir.
45
+ const mode = auth === 'job' ? 'job' : headers.get('x-one-invoked-by') === 'devoplus-agent' ? 'agent' : 'user';
46
+ const jobServices = mode === 'job' ? (headers.get('x-one-job-services') ?? '').split(' ').filter(Boolean) : [];
47
+ return { app, portalKey, portalId, user, actor, mode, admin: user?.admin ?? false, jobServices };
48
+ }
49
+ /** Oturum bir başkası adına mı (Vekalet ya da Yerine Görüntüle)? */
50
+ export function isActingSession(ctx) {
51
+ return ctx.actor != null;
52
+ }
53
+ /** Oturum zorunlu uçlar için: anonimse 401 fırlatır. */
54
+ export function requireUser(ctx) {
55
+ if (!ctx.user)
56
+ throw new OneError(401, 'ONE-SDK-E-002', 'Bu işlem için oturum gerekir.');
57
+ return ctx.user;
58
+ }
59
+ /**
60
+ * Kullanıcının AYRICA ve SÜRELİ onay vermesi gereken scope'lar (karar defteri D-59): ERP'ye veri yazma ve kullanıcı
61
+ * adına e-posta/SMS/mobil bildirim. Manifest'te beyan edilmiş ve kullanıcının yetkisi olsa bile, kullanıcı bu uygulamaya
62
+ * bu portalda onay vermeden (30 gün geçerli) belirtece GİRMEZ; portal uygulamanın üstünde bir uyarı ve "İzinleri incele"
63
+ * düğmesi gösterir. Liste devoplus-auth `ONE_APP_CONSENT.scopes` ile aynıdır. `dexa.read` bu listede DEĞİLDİR.
64
+ */
65
+ export const CONSENT_SCOPES = ['dexa.write', 'mail.execute', 'sms.execute', 'push.execute'];
66
+ /**
67
+ * Bu scope kullanıcının ayrı onayına bağlı ve belirteçte YOK mu? Uygulama ilgili düğmeyi kapatıp "portaldaki İzinleri
68
+ * incele düğmesiyle izin verin" diyebilsin diye. ⚠️ Belirteç yalnız scope'un OLMADIĞINI söyler: manifest'te hiç
69
+ * beyan edilmemiş bir scope için de `true` döner — beyan uygulamanın kendi bilgisidir. Oturumsuzsa `false`.
70
+ */
71
+ export function awaitsUserConsent(ctx, scope) {
72
+ return ctx.user !== null && CONSENT_SCOPES.includes(scope) && !ctx.user.scope.includes(scope);
73
+ }
74
+ /**
75
+ * Scope kapısı: uygulama manifest'te beyan etmediği bir işi yapamaz. Onaya bağlı scope'ta (`CONSENT_SCOPES`) hata metni
76
+ * kullanıcıya izni nereden vereceğini de söyler; kod aynı kalır (`ONE-SDK-E-003`).
77
+ */
78
+ export function requireScope(ctx, scope) {
79
+ const user = requireUser(ctx);
80
+ if (!user.scope.includes(scope))
81
+ throw new OneError(403, 'ONE-SDK-E-003', CONSENT_SCOPES.includes(scope)
82
+ ? `Bu işlem için "${scope}" yetkisi gerekir. Bu işlem için ayrıca izninizi vermeniz gerekiyor: portalda uygulamanın üstündeki "İzinleri incele" düğmesini kullanın.`
83
+ : `Bu işlem için "${scope}" yetkisi gerekir.`);
84
+ return user;
85
+ }
86
+ /**
87
+ * Devoplus servis çağrısının yerel scope kapısı (C6) — servis istemcileri bunu kullanır; asıl karar backend'dedir.
88
+ * - `user`: `requireScope` ile aynı (kullanıcının belirtecindeki scope).
89
+ * - `agent`: kişi adına; süreli onay gerektiren scope'lar (`CONSENT_SCOPES` — e-posta, SMS, bildirim, DEXA'ya yazma)
90
+ * ajan aracında HİÇ kullanılamaz (kişi bu çağrıda onay ekranını göremez).
91
+ * - `job`: kullanıcı GEREKMEZ; scope manifest `jobs.services` beyanında olmalı. Beyan yetmez: servis ancak kurulumda
92
+ * portal yöneticisi onaylarsa açılır (onay backend'de denetlenir, uygulama göremez → onaysızsa backend 403 döner).
93
+ */
94
+ export function requireServiceScope(ctx, scope) {
95
+ if (ctx.mode === 'job') {
96
+ if (!(ctx.jobServices ?? []).includes(scope))
97
+ throw new OneError(403, 'ONE-SDK-E-003', `Arka plan işinde "${scope}" servisi kullanılamaz: manifest jobs.services içinde beyan edilmeli ve kurulumda portal yöneticisi onaylamalıdır.`);
98
+ return;
99
+ }
100
+ if (ctx.mode === 'agent' && CONSENT_SCOPES.includes(scope)) {
101
+ requireUser(ctx);
102
+ throw new OneError(403, 'ONE-SDK-E-003', `"${scope}" yetkisi Devoplus ajanının araç çağrısında kullanılamaz; bu işlemi uygulamanın ekranından yapın.`);
103
+ }
104
+ requireScope(ctx, scope);
105
+ }
106
+ /**
107
+ * Uygulama izni (D-49): kullanıcıda kod varsa ya da portal yöneticisiyse `true` (backend'in yönetici baypasıyla aynı
108
+ * kural — yönetici için HER kodda `true`). Anonim bağlamda `false`. Kod uygulamanın kendi ad alanında olmalıdır
109
+ * (`One.<Uygulama>.<Eylem>`); başka ad alanındaki kod dispatch'ten hiç gelmediği için yönetici olmayan kullanıcıda
110
+ * `false` döner. ⚠️ Ad alanı süzgeci bir kolaylıktır, gizlilik sınırı DEĞİL: belirteç kullanıcının bütün izinlerini
111
+ * taşır (inceleme bulgusu P2-1).
112
+ */
113
+ export function hasPermission(ctx, code) {
114
+ const user = ctx.user;
115
+ if (!user)
116
+ return false;
117
+ return user.admin || user.permissions.includes(code);
118
+ }
119
+ /** İzin kapısı: oturum yoksa 401, izin yoksa 403 (`ONE-SDK-E-004`). */
120
+ export function requirePermission(ctx, code) {
121
+ const user = requireUser(ctx);
122
+ if (!hasPermission(ctx, code))
123
+ throw new OneError(403, 'ONE-SDK-E-004', `Bu işlem için "${code}" izni gerekir.`);
124
+ return user;
125
+ }
126
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import { OneError, type OneContext } from '../context.ts';
2
+ import type { OneDatabase } from '../runtime.ts';
3
+ import { type ExportLang } from '../export/columns.ts';
4
+ import { type DataEntity, type DataField, type OneDataModel } from './model.ts';
5
+ import { type DbValue, type FieldIssue } from './values.ts';
6
+ export type CrudPermission = string | ((ctx: OneContext) => boolean);
7
+ export interface CrudOptions {
8
+ /** `one data generate`'in ürettiği `dataModel` (ya da `one.data.json` içeriği). */
9
+ model: OneDataModel;
10
+ entity: string;
11
+ /** `shared`: uygulamayı kullanan herkes bütün kayıtları görür · `own`: herkes yalnız kendi oluşturduğu kayıtları. */
12
+ records: 'shared' | 'own';
13
+ /** Uçların öneki (varsayılan `/api`). */
14
+ basePath?: string;
15
+ /** Okuma için uygulama izni (ör. `One.Talep.Read`) ya da `(ctx) => boolean`; verilmezse oturum yeter. */
16
+ canRead?: CrudPermission;
17
+ /** Yazma (oluşturma, güncelleme, silme) için izin; verilmezse oturum yeter. */
18
+ canWrite?: CrudPermission;
19
+ /** Vekalet / Yerine Görüntüle oturumunda yazma (varsayılan `read` = kapalı). */
20
+ actingSessions?: 'read' | 'write';
21
+ /** Varsayılan sayfa boyu (1-200, varsayılan 50). */
22
+ pageSize?: number;
23
+ /** Dışa aktarmada en çok satır (varsayılan 10.000, en çok 50.000). */
24
+ exportLimit?: number;
25
+ /** Dışa aktarma ve raporda tarih-saatlerin gösterildiği saat dilimi (varsayılan Europe/Istanbul). */
26
+ timeZone?: string;
27
+ }
28
+ export interface CrudHandler {
29
+ /** Varlığın uç yolu (ör. `/api/requests`). */
30
+ readonly path: string;
31
+ /** İstek bu varlığın uçlarından birine değilse `null`; değilse yanıt (hatalar dahil — RFC 9457). */
32
+ handle(request: Request, db: OneDatabase, ctx?: OneContext): Promise<Response | null>;
33
+ }
34
+ export declare const CRUD_MAX_PAGE_SIZE = 200;
35
+ export declare const CRUD_MAX_FILTERS = 20;
36
+ export declare const CRUD_MAX_BODY_BYTES: number;
37
+ export declare const CRUD_REPORT_MAX_ROWS = 2000;
38
+ /** Alan hatalarını taşıyan hata — yanıtta RFC 9457 gövdesine `errors: [{ field, message }]` olarak eklenir. */
39
+ export declare class DataValidationError extends OneError {
40
+ readonly errors: readonly FieldIssue[];
41
+ constructor(status: number, code: string, detail: string, errors: readonly FieldIssue[]);
42
+ }
43
+ /** Sorgu dizesi → WHERE parçaları + parametreler + sıralama + sayfa. Adlar yalnız modelden gelir. */
44
+ export interface ListQuery {
45
+ where: string[];
46
+ params: DbValue[];
47
+ orderBy: string;
48
+ page: number;
49
+ size: number;
50
+ lang: ExportLang;
51
+ }
52
+ /**
53
+ * Hazır liste bileşeninin (`<one-table src>`, D-83) sorgu lehçesi → bu uçların lehçesi. Bileşen `limit` · `page` ·
54
+ * `cursor` · `sort` + `order` · `q` · `<alan>From` / `<alan>To` · `lang` gönderir; uçlar `_size` · `_page` · `_sort` ·
55
+ * `<alan>.contains` · `<alan>.from` / `<alan>.to` · `_lang` bekler. İki lehçe aynı uçta çalışır: bileşen `src` olarak
56
+ * doğrudan `/api/<varlık>` alabilir (D-82 şablonları bunu kullanır; önce 400 "Bilinmeyen sorgu parametresi" dönüyordu).
57
+ *
58
+ * ⚠️ Lehçe adı modeldeki bir ALAN adıysa (ör. alanın adı `page`) o parametre alan süzgecidir — model önceliklidir
59
+ * (geriye uyum). `q` metin alanlarının (text · longText) HERHANGİ birinde içerir araması yapar (Türkçe katlanmış,
60
+ * `.contains` ile aynı kural). `cursor` bu uçlarda sayfa numarasıdır (yanıttaki `nextCursor`).
61
+ */
62
+ export declare function translateTableDialect(entity: DataEntity, params: URLSearchParams): {
63
+ params: URLSearchParams;
64
+ search: string | null;
65
+ issues: FieldIssue[];
66
+ };
67
+ export declare function parseListQuery(entity: DataEntity, raw: URLSearchParams, defaults: {
68
+ pageSize: number;
69
+ }): ListQuery;
70
+ /** Benzersizlik ihlali iletisinden (`UNIQUE constraint failed: <tablo>.<kolon>`) alanı bulur. */
71
+ export declare function uniqueViolationField(entity: DataEntity, error: unknown): DataField | null | undefined;
72
+ /** Model + varlık için uç işleyicisi. Model ilk kullanımda doğrulanır (geçersizse her istek 500 `ONE-SDK-E-100`). */
73
+ export declare function createCrudHandler(options: CrudOptions): CrudHandler;
74
+ //# sourceMappingURL=crud.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crud.d.ts","sourceRoot":"","sources":["../../src/data/crud.ts"],"names":[],"mappings":"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"}