@devoplus/one-sdk 0.0.0-stage → 0.2.0-next.117
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 +893 -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
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type DataField } from './model.ts';
|
|
2
|
+
export type DbValue = string | number | null;
|
|
3
|
+
/** Bir alanın değer hatası (iletisi kullanıcıya gösterilebilir). */
|
|
4
|
+
export interface FieldIssue {
|
|
5
|
+
field: string;
|
|
6
|
+
message: string;
|
|
7
|
+
}
|
|
8
|
+
export type Coerced = {
|
|
9
|
+
ok: true;
|
|
10
|
+
value: DbValue;
|
|
11
|
+
} | {
|
|
12
|
+
ok: false;
|
|
13
|
+
message: string;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Yazılacak değer (gövdeden) → veritabanı değeri. `null`/`undefined`/boş metin "değer yok" sayılır; zorunluluk denetimi
|
|
17
|
+
* çağırandadır (oluştururken eksik alan, güncellemede gönderilmeyen alan farklı anlam taşır).
|
|
18
|
+
*/
|
|
19
|
+
export declare function coerceInput(f: DataField, raw: unknown): Coerced;
|
|
20
|
+
/** Alan varsayılanının veritabanı değeri (yoksa `undefined`). */
|
|
21
|
+
export declare function defaultDbValue(f: DataField): DbValue | undefined;
|
|
22
|
+
/** Veritabanı değeri → API değeri (para: ondalıklı metin; evet/hayır: boolean). */
|
|
23
|
+
export declare function outputValue(f: DataField, value: unknown): unknown;
|
|
24
|
+
/**
|
|
25
|
+
* Süzgeç değeri (sorgu dizesinden) → veritabanı değeri. Eşitlik ve aralık için aynı kurallar; uzunluk sınırı yok
|
|
26
|
+
* sayılır (aranan değer kayıttan kısa olabilir), boş değer "değer yok" (IS NULL) anlamına gelmez — reddedilir.
|
|
27
|
+
*/
|
|
28
|
+
export declare function coerceFilter(f: DataField, raw: string): Coerced;
|
|
29
|
+
//# sourceMappingURL=values.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"values.d.ts","sourceRoot":"","sources":["../../src/data/values.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAiE,MAAM,YAAY,CAAA;AAG1G,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;AAE5C,oEAAoE;AACpE,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,MAAM,OAAO,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAmBnF;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CA+D/D;AAED,iEAAiE;AACjE,wBAAgB,cAAc,CAAC,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAIhE;AAED,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAKjE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAa/D"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
// Alan değerlerinin API ↔ veritabanı dönüşümü ve sunucu tarafı doğrulaması (D-84). Kurallar alan türüne göredir;
|
|
2
|
+
// iletiler Türkçedir ve alanın görünen adını (title.tr) taşır — kullanıcıya doğrudan gösterilebilir.
|
|
3
|
+
import { isCalendarDate, minorToMoney, moneyToMinor, normalizeDateTime } from './model.js';
|
|
4
|
+
import { FILE_KEY_MAX_BYTES, FILE_KEY_MAX_LENGTH } from '../files.js';
|
|
5
|
+
const PERSON_RE = /^[^\s\u0000-\u001f\u007f]{1,64}$/;
|
|
6
|
+
// eslint-disable-next-line no-control-regex
|
|
7
|
+
const SINGLE_LINE_BAD = /[\u0000-\u0008\u000a-\u001f\u007f]/;
|
|
8
|
+
// eslint-disable-next-line no-control-regex
|
|
9
|
+
const MULTI_LINE_BAD = /[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]/;
|
|
10
|
+
const codePoints = (s) => [...s].length;
|
|
11
|
+
function fileKeyIssue(key) {
|
|
12
|
+
if (key.length === 0 || key.length > FILE_KEY_MAX_LENGTH || new TextEncoder().encode(key).byteLength > FILE_KEY_MAX_BYTES)
|
|
13
|
+
return `dosya anahtarı 1-${FILE_KEY_MAX_LENGTH} karakter olmalı`;
|
|
14
|
+
// eslint-disable-next-line no-control-regex
|
|
15
|
+
if (key.startsWith('/') || key.split('/').some((p) => p === '' || p === '.' || p === '..') || /[\u0000-\u001f\u007f]/.test(key))
|
|
16
|
+
return 'dosya anahtarı geçersiz';
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Yazılacak değer (gövdeden) → veritabanı değeri. `null`/`undefined`/boş metin "değer yok" sayılır; zorunluluk denetimi
|
|
21
|
+
* çağırandadır (oluştururken eksik alan, güncellemede gönderilmeyen alan farklı anlam taşır).
|
|
22
|
+
*/
|
|
23
|
+
export function coerceInput(f, raw) {
|
|
24
|
+
const label = `"${f.title.tr}"`;
|
|
25
|
+
const fail = (m) => ({ ok: false, message: `${label} ${m}.` });
|
|
26
|
+
if (raw === null || raw === undefined)
|
|
27
|
+
return { ok: true, value: null };
|
|
28
|
+
switch (f.type) {
|
|
29
|
+
case 'text':
|
|
30
|
+
case 'longText': {
|
|
31
|
+
if (typeof raw !== 'string')
|
|
32
|
+
return fail('metin olmalı');
|
|
33
|
+
if (raw.trim() === '')
|
|
34
|
+
return { ok: true, value: null };
|
|
35
|
+
if ((f.type === 'text' ? SINGLE_LINE_BAD : MULTI_LINE_BAD).test(raw))
|
|
36
|
+
return fail(f.type === 'text' ? 'tek satır olmalı ve denetim karakteri içermemeli' : 'denetim karakteri içermemeli');
|
|
37
|
+
if (codePoints(raw) > f.maxLength)
|
|
38
|
+
return fail(`en çok ${f.maxLength} karakter olabilir`);
|
|
39
|
+
return { ok: true, value: raw };
|
|
40
|
+
}
|
|
41
|
+
case 'number': {
|
|
42
|
+
let n;
|
|
43
|
+
if (typeof raw === 'number')
|
|
44
|
+
n = raw;
|
|
45
|
+
else if (typeof raw === 'string' && /^\s*-?\d+(?:[.,]\d+)?\s*$/.test(raw))
|
|
46
|
+
n = Number(raw.trim().replace(',', '.'));
|
|
47
|
+
else if (typeof raw === 'string' && raw.trim() === '')
|
|
48
|
+
return { ok: true, value: null };
|
|
49
|
+
else
|
|
50
|
+
return fail('sayı olmalı');
|
|
51
|
+
if (!Number.isFinite(n))
|
|
52
|
+
return fail('sonlu bir sayı olmalı');
|
|
53
|
+
if (f.min !== undefined && n < f.min)
|
|
54
|
+
return fail(`en az ${f.min} olabilir`);
|
|
55
|
+
if (f.max !== undefined && n > f.max)
|
|
56
|
+
return fail(`en çok ${f.max} olabilir`);
|
|
57
|
+
return { ok: true, value: n };
|
|
58
|
+
}
|
|
59
|
+
case 'money': {
|
|
60
|
+
if (typeof raw === 'string' && raw.trim() === '')
|
|
61
|
+
return { ok: true, value: null };
|
|
62
|
+
if (typeof raw !== 'string' && typeof raw !== 'number')
|
|
63
|
+
return fail('tutar olmalı');
|
|
64
|
+
const minor = moneyToMinor(raw);
|
|
65
|
+
// Yuvarlama YAPILMAZ: iki basamaktan fazla ondalık, sessizce kesilmek yerine reddedilir.
|
|
66
|
+
if (minor === null)
|
|
67
|
+
return fail('en çok iki ondalık basamaklı bir tutar olmalı (ör. 1250.50; binlik ayırıcı kullanmayın)');
|
|
68
|
+
if (f.min !== undefined && minor < Math.round(f.min * 100))
|
|
69
|
+
return fail(`en az ${f.min} olabilir`);
|
|
70
|
+
if (f.max !== undefined && minor > Math.round(f.max * 100))
|
|
71
|
+
return fail(`en çok ${f.max} olabilir`);
|
|
72
|
+
return { ok: true, value: minor };
|
|
73
|
+
}
|
|
74
|
+
case 'boolean':
|
|
75
|
+
if (typeof raw !== 'boolean')
|
|
76
|
+
return fail('evet ya da hayır (true/false) olmalı');
|
|
77
|
+
return { ok: true, value: raw ? 1 : 0 };
|
|
78
|
+
case 'date':
|
|
79
|
+
if (typeof raw !== 'string')
|
|
80
|
+
return fail('tarih olmalı');
|
|
81
|
+
if (raw.trim() === '')
|
|
82
|
+
return { ok: true, value: null };
|
|
83
|
+
return isCalendarDate(raw) ? { ok: true, value: raw } : fail('YYYY-AA-GG biçiminde geçerli bir tarih olmalı');
|
|
84
|
+
case 'datetime': {
|
|
85
|
+
if (typeof raw !== 'string')
|
|
86
|
+
return fail('tarih-saat olmalı');
|
|
87
|
+
if (raw.trim() === '')
|
|
88
|
+
return { ok: true, value: null };
|
|
89
|
+
const iso = normalizeDateTime(raw);
|
|
90
|
+
return iso ? { ok: true, value: iso } : fail('saat dilimi belirtilmiş ISO biçiminde geçerli bir tarih-saat olmalı (ör. 2026-01-31T09:00:00Z)');
|
|
91
|
+
}
|
|
92
|
+
case 'choice':
|
|
93
|
+
if (typeof raw !== 'string')
|
|
94
|
+
return fail('seçeneklerden biri olmalı');
|
|
95
|
+
if (raw === '')
|
|
96
|
+
return { ok: true, value: null };
|
|
97
|
+
return f.choices.some((c) => c.value === raw) ? { ok: true, value: raw } : fail(`şunlardan biri olmalı: ${f.choices.map((c) => c.value).join(', ')}`);
|
|
98
|
+
case 'person':
|
|
99
|
+
if (typeof raw !== 'string')
|
|
100
|
+
return fail('kişi kimliği olmalı');
|
|
101
|
+
if (raw === '')
|
|
102
|
+
return { ok: true, value: null };
|
|
103
|
+
return PERSON_RE.test(raw) ? { ok: true, value: raw } : fail('geçerli bir kişi kimliği olmalı');
|
|
104
|
+
case 'file': {
|
|
105
|
+
if (typeof raw !== 'string')
|
|
106
|
+
return fail('dosya anahtarı olmalı');
|
|
107
|
+
if (raw === '')
|
|
108
|
+
return { ok: true, value: null };
|
|
109
|
+
const issue = fileKeyIssue(raw);
|
|
110
|
+
return issue ? fail(issue) : { ok: true, value: raw };
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/** Alan varsayılanının veritabanı değeri (yoksa `undefined`). */
|
|
115
|
+
export function defaultDbValue(f) {
|
|
116
|
+
if (f.default === undefined)
|
|
117
|
+
return undefined;
|
|
118
|
+
const c = coerceInput(f, f.default);
|
|
119
|
+
return c.ok ? c.value : undefined;
|
|
120
|
+
}
|
|
121
|
+
/** Veritabanı değeri → API değeri (para: ondalıklı metin; evet/hayır: boolean). */
|
|
122
|
+
export function outputValue(f, value) {
|
|
123
|
+
if (value === null || value === undefined)
|
|
124
|
+
return null;
|
|
125
|
+
if (f.type === 'money')
|
|
126
|
+
return typeof value === 'number' ? minorToMoney(value) : null;
|
|
127
|
+
if (f.type === 'boolean')
|
|
128
|
+
return value === 1 || value === true;
|
|
129
|
+
return value;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Süzgeç değeri (sorgu dizesinden) → veritabanı değeri. Eşitlik ve aralık için aynı kurallar; uzunluk sınırı yok
|
|
133
|
+
* sayılır (aranan değer kayıttan kısa olabilir), boş değer "değer yok" (IS NULL) anlamına gelmez — reddedilir.
|
|
134
|
+
*/
|
|
135
|
+
export function coerceFilter(f, raw) {
|
|
136
|
+
if (raw === '')
|
|
137
|
+
return { ok: false, message: `"${f.title.tr}" süzgeci boş olamaz.` };
|
|
138
|
+
if (f.type === 'boolean') {
|
|
139
|
+
const v = raw.toLowerCase();
|
|
140
|
+
if (v === 'true' || v === '1')
|
|
141
|
+
return { ok: true, value: 1 };
|
|
142
|
+
if (v === 'false' || v === '0')
|
|
143
|
+
return { ok: true, value: 0 };
|
|
144
|
+
return { ok: false, message: `"${f.title.tr}" süzgeci true ya da false olmalı.` };
|
|
145
|
+
}
|
|
146
|
+
if (f.type === 'number' || f.type === 'money') {
|
|
147
|
+
// Süzgeçte min/max uygulanmaz (aralığın dışını aramak hata değildir).
|
|
148
|
+
return coerceInput({ ...f, min: undefined, max: undefined }, f.type === 'money' ? raw : raw);
|
|
149
|
+
}
|
|
150
|
+
return coerceInput({ ...f, maxLength: Number.MAX_SAFE_INTEGER }, raw);
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=values.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"values.js","sourceRoot":"","sources":["../../src/data/values.ts"],"names":[],"mappings":"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"}
|
package/dist/dexa.d.ts
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { BackendClient } from './backend.ts';
|
|
2
|
+
/** QueryStore anahtarı biçimi; harf duyarlıdır (`IMS.X` ile `ims.x` ayrı anahtardır). Manifest şemasıyla birebir. */
|
|
3
|
+
export declare const DEXA_KEY_RE: RegExp;
|
|
4
|
+
/** Parametre adı biçimi (en çok 64 karakter). */
|
|
5
|
+
export declare const DEXA_PARAMETER_NAME_RE: RegExp;
|
|
6
|
+
export declare const DEXA_MAX_PARAMETERS = 32;
|
|
7
|
+
export declare const DEXA_PARAMETER_VALUE_MAX_LENGTH = 2000;
|
|
8
|
+
/** Platformun doldurduğu bağlam parametresi; uygulama GÖNDEREMEZ (harf duyarsız denetlenir, `ONE-SDK-E-043`). */
|
|
9
|
+
export declare const DEXA_RESERVED_PARAMETERS: readonly ['LangCode'];
|
|
10
|
+
/**
|
|
11
|
+
* Uygulamanın gönderebileceği bağlam parametreleri (C7). Sunucu yalnız kurulumda yönetici onayı varsa kabul eder; değer
|
|
12
|
+
* boş olamaz (harf duyarsız denetlenir, `ONE-SDK-E-140`).
|
|
13
|
+
*/
|
|
14
|
+
export declare const DEXA_APP_CONTEXT_PARAMETERS: readonly ['UserCode', 'CompanyCode', 'CostCenterCode'];
|
|
15
|
+
export interface DexaQueryResult {
|
|
16
|
+
/** Sorgunun döndürdüğü kolon adları (sıra korunur). */
|
|
17
|
+
columns: string[];
|
|
18
|
+
/** Satırlar: kolon adı → değer. `unavailable` iken her zaman boştur ve "kayıt yok" anlamına GELMEZ. */
|
|
19
|
+
rows: Array<Record<string, unknown>>;
|
|
20
|
+
/** Sorgu çalışamadı (tünel yok / ERP'ye ulaşılamıyor / sorgu düştü) — "şu anda getirilemiyor". */
|
|
21
|
+
unavailable: boolean;
|
|
22
|
+
/** Sunucu sonucu 5.000 satırda kesti; liste eksiktir. */
|
|
23
|
+
truncated: boolean;
|
|
24
|
+
}
|
|
25
|
+
interface DexaQueryRequest {
|
|
26
|
+
key: string;
|
|
27
|
+
parameters?: Record<string, string>;
|
|
28
|
+
}
|
|
29
|
+
/** Sunucuya giden gövdeyi doğrular ve kurar; hatalı girdi fırlatır (istek hiç gitmez). */
|
|
30
|
+
export declare function buildDexaQueryRequest(key: string, parameters?: Readonly<Record<string, string>>): DexaQueryRequest;
|
|
31
|
+
/**
|
|
32
|
+
* Yanıtı savunmacı biçimde sözleşmeye indirger: eksik dizi → `[]`, eksik bayrak → `false` (sunucu varsayılan değerli
|
|
33
|
+
* alanı yazmayabilir). Gövde hiç nesne değilse (boş/bozuk yanıt) sonuç `unavailable: true` sayılır — bilinmeyen bir
|
|
34
|
+
* yanıtı "kayıt yok" diye göstermek tam olarak kaçınılan yanılgıdır.
|
|
35
|
+
*/
|
|
36
|
+
export declare function normalizeDexaQueryResult(raw: unknown): DexaQueryResult;
|
|
37
|
+
/**
|
|
38
|
+
* Kayıt defterinde izinli, önceden tanımlı bir DEXA okuma sorgusunu çalıştırır. Kullanıcı, portal ve uygulama
|
|
39
|
+
* istekle GÖNDERİLMEZ — backend bunları doğrulanmış platform bağlamından alır. Sunucu hatası (`ONE-APP-E-0xx`)
|
|
40
|
+
* `OneError.code` ile olduğu gibi taşınır; `unavailable` bir hata DEĞİLDİR, sonuçta döner.
|
|
41
|
+
*/
|
|
42
|
+
export declare function queryDexa(api: Pick<BackendClient, 'request'>, key: string, parameters?: Readonly<Record<string, string>>): Promise<DexaQueryResult>;
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=dexa.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dexa.d.ts","sourceRoot":"","sources":["../src/dexa.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAGjD,qHAAqH;AACrH,eAAO,MAAM,WAAW,QAAuC,CAAA;AAC/D,iDAAiD;AACjD,eAAO,MAAM,sBAAsB,QAAkC,CAAA;AACrE,eAAO,MAAM,mBAAmB,KAAK,CAAA;AACrC,eAAO,MAAM,+BAA+B,OAAO,CAAA;AACnD,iHAAiH;AACjH,eAAO,MAAM,wBAAwB,YAAI,UAAU,CAAU,CAAA;AAC7D;;;GAGG;AACH,eAAO,MAAM,2BAA2B,YAAI,UAAU,EAAE,aAAa,EAAE,gBAAgB,CAAU,CAAA;AAKjG,MAAM,WAAW,eAAe;IAC9B,uDAAuD;IACvD,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,uGAAuG;IACvG,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IACpC,kGAAkG;IAClG,WAAW,EAAE,OAAO,CAAA;IACpB,yDAAyD;IACzD,SAAS,EAAE,OAAO,CAAA;CACnB;AAED,UAAU,gBAAgB;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACpC;AAED,0FAA0F;AAC1F,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,gBAAgB,CA4ClH;AAMD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe,CAQtE;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAC7B,GAAG,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,EACnC,GAAG,EAAE,MAAM,EACX,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAC5C,OAAO,CAAC,eAAe,CAAC,CAI1B"}
|
package/dist/dexa.js
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { OneError } from './context.js';
|
|
2
|
+
/** QueryStore anahtarı biçimi; harf duyarlıdır (`IMS.X` ile `ims.x` ayrı anahtardır). Manifest şemasıyla birebir. */
|
|
3
|
+
export const DEXA_KEY_RE = /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/;
|
|
4
|
+
/** Parametre adı biçimi (en çok 64 karakter). */
|
|
5
|
+
export const DEXA_PARAMETER_NAME_RE = /^[A-Za-z_][A-Za-z0-9_]{0,63}$/;
|
|
6
|
+
export const DEXA_MAX_PARAMETERS = 32;
|
|
7
|
+
export const DEXA_PARAMETER_VALUE_MAX_LENGTH = 2000;
|
|
8
|
+
/** Platformun doldurduğu bağlam parametresi; uygulama GÖNDEREMEZ (harf duyarsız denetlenir, `ONE-SDK-E-043`). */
|
|
9
|
+
export const DEXA_RESERVED_PARAMETERS = ['LangCode'];
|
|
10
|
+
/**
|
|
11
|
+
* Uygulamanın gönderebileceği bağlam parametreleri (C7). Sunucu yalnız kurulumda yönetici onayı varsa kabul eder; değer
|
|
12
|
+
* boş olamaz (harf duyarsız denetlenir, `ONE-SDK-E-140`).
|
|
13
|
+
*/
|
|
14
|
+
export const DEXA_APP_CONTEXT_PARAMETERS = ['UserCode', 'CompanyCode', 'CostCenterCode'];
|
|
15
|
+
const RESERVED_LOWER = new Set(DEXA_RESERVED_PARAMETERS.map((name) => name.toLowerCase()));
|
|
16
|
+
const APP_CONTEXT_LOWER = new Set(DEXA_APP_CONTEXT_PARAMETERS.map((name) => name.toLowerCase()));
|
|
17
|
+
/** Sunucuya giden gövdeyi doğrular ve kurar; hatalı girdi fırlatır (istek hiç gitmez). */
|
|
18
|
+
export function buildDexaQueryRequest(key, parameters) {
|
|
19
|
+
if (typeof key !== 'string' || !DEXA_KEY_RE.test(key))
|
|
20
|
+
throw new OneError(400, 'ONE-SDK-E-040', 'DEXA sorgu anahtarı 1-128 karakter olmalı; harf ya da rakamla başlamalı ve yalnız harf, rakam, ".", "_", "-" içermelidir.');
|
|
21
|
+
const body = { key };
|
|
22
|
+
if (parameters === undefined)
|
|
23
|
+
return body;
|
|
24
|
+
if (parameters === null || typeof parameters !== 'object' || Array.isArray(parameters))
|
|
25
|
+
throw new OneError(400, 'ONE-SDK-E-041', 'DEXA sorgu parametreleri ad → metin değer eşlemesi (nesne) olmalıdır.');
|
|
26
|
+
const entries = Object.entries(parameters);
|
|
27
|
+
if (entries.length > DEXA_MAX_PARAMETERS)
|
|
28
|
+
throw new OneError(400, 'ONE-SDK-E-041', `DEXA sorgusuna en çok ${DEXA_MAX_PARAMETERS} parametre gönderilebilir (${entries.length}).`);
|
|
29
|
+
const out = {};
|
|
30
|
+
for (const [name, value] of entries) {
|
|
31
|
+
if (!DEXA_PARAMETER_NAME_RE.test(name))
|
|
32
|
+
throw new OneError(400, 'ONE-SDK-E-042', `DEXA parametre adı geçersiz: "${name}" — harf ya da "_" ile başlamalı, yalnız harf/rakam/"_" içermeli ve en çok 64 karakter olmalıdır.`);
|
|
33
|
+
if (RESERVED_LOWER.has(name.toLowerCase()))
|
|
34
|
+
throw new OneError(400, 'ONE-SDK-E-043', `"${name}" platformun doldurduğu bir bağlam parametresidir; uygulama gönderemez (${DEXA_RESERVED_PARAMETERS.join(', ')}).`);
|
|
35
|
+
if (typeof value !== 'string')
|
|
36
|
+
throw new OneError(400, 'ONE-SDK-E-044', `DEXA parametresi "${name}" metin olmalıdır (sayı ya da tarih String(...) ile çevrilir).`);
|
|
37
|
+
if (value.length > DEXA_PARAMETER_VALUE_MAX_LENGTH)
|
|
38
|
+
throw new OneError(400, 'ONE-SDK-E-044', `DEXA parametresi "${name}" en çok ${DEXA_PARAMETER_VALUE_MAX_LENGTH} karakter olabilir (${value.length}).`);
|
|
39
|
+
if (APP_CONTEXT_LOWER.has(name.toLowerCase()) && value.trim() === '')
|
|
40
|
+
throw new OneError(400, 'ONE-SDK-E-140', `DEXA bağlam parametresi "${name}" boş gönderilemez; boş değer ERP'ye gitmez. Değeri bilmiyorsanız parametreyi hiç göndermeyin.`);
|
|
41
|
+
out[name] = value;
|
|
42
|
+
}
|
|
43
|
+
body.parameters = out;
|
|
44
|
+
return body;
|
|
45
|
+
}
|
|
46
|
+
function isRecord(value) {
|
|
47
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Yanıtı savunmacı biçimde sözleşmeye indirger: eksik dizi → `[]`, eksik bayrak → `false` (sunucu varsayılan değerli
|
|
51
|
+
* alanı yazmayabilir). Gövde hiç nesne değilse (boş/bozuk yanıt) sonuç `unavailable: true` sayılır — bilinmeyen bir
|
|
52
|
+
* yanıtı "kayıt yok" diye göstermek tam olarak kaçınılan yanılgıdır.
|
|
53
|
+
*/
|
|
54
|
+
export function normalizeDexaQueryResult(raw) {
|
|
55
|
+
if (!isRecord(raw))
|
|
56
|
+
return { columns: [], rows: [], unavailable: true, truncated: false };
|
|
57
|
+
return {
|
|
58
|
+
columns: Array.isArray(raw.columns) ? raw.columns.filter((c) => typeof c === 'string') : [],
|
|
59
|
+
rows: Array.isArray(raw.rows) ? raw.rows.filter(isRecord) : [],
|
|
60
|
+
unavailable: raw.unavailable === true,
|
|
61
|
+
truncated: raw.truncated === true,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Kayıt defterinde izinli, önceden tanımlı bir DEXA okuma sorgusunu çalıştırır. Kullanıcı, portal ve uygulama
|
|
66
|
+
* istekle GÖNDERİLMEZ — backend bunları doğrulanmış platform bağlamından alır. Sunucu hatası (`ONE-APP-E-0xx`)
|
|
67
|
+
* `OneError.code` ile olduğu gibi taşınır; `unavailable` bir hata DEĞİLDİR, sonuçta döner.
|
|
68
|
+
*/
|
|
69
|
+
export async function queryDexa(api, key, parameters) {
|
|
70
|
+
const body = buildDexaQueryRequest(key, parameters);
|
|
71
|
+
const raw = await api.request('One/services/dexa/query', { method: 'POST', body: JSON.stringify(body) });
|
|
72
|
+
return normalizeDexaQueryResult(raw);
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=dexa.js.map
|
package/dist/dexa.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dexa.js","sourceRoot":"","sources":["../src/dexa.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import type { BackendClient } from './backend.ts';
|
|
2
|
+
/** Komut parametre değerinin en çok uzunluğu (UTF-16 birimi). Sorgulardaki 2.000'den büyüktür: `Body` model JSON'u taşır. */
|
|
3
|
+
export declare const DEXA_COMMAND_PARAMETER_VALUE_MAX_LENGTH = 65536;
|
|
4
|
+
/** Kanonik UUID biçimi (harf duyarsız). Sunucu (`Guid.TryParse`) daha çok biçim kabul eder; SDK bilinçli olarak dardır. */
|
|
5
|
+
export declare const IDEMPOTENCY_KEY_RE: RegExp;
|
|
6
|
+
/** 200 yanıtının sonucu: `succeeded` · `rejected` (ERP reddetti; aynı içerikle tekrar denemek yine reddedilir) · `inDoubt`. */
|
|
7
|
+
export type DexaCommandOutcome = 'succeeded' | 'rejected' | 'inDoubt';
|
|
8
|
+
/** Durum ucunun genel komut sonuçları: yukarıdakiler + `pending` (sürüyor) + `notSent` (ERP'ye gönderilmedi). */
|
|
9
|
+
export type DexaCommandStatusOutcome = DexaCommandOutcome | 'pending' | 'notSent';
|
|
10
|
+
/** ERP yanıtının görünümü (backend `ErpCommandErpView`, alan adları birebir). */
|
|
11
|
+
export interface DexaCommandErpView {
|
|
12
|
+
/** Tanınan yanıt şekli (backend `ErpResultShapes`: `envelope` · `nebimBody` · `rows` · `empty` · `unrecognized` · `agentError`). */
|
|
13
|
+
shape: string;
|
|
14
|
+
/** Sarmalın başarı bayrağı (yalnız `envelope` şeklinde dolu). */
|
|
15
|
+
isSuccessful: boolean | null;
|
|
16
|
+
/** ERP belge kimliği, tanındıysa. */
|
|
17
|
+
headerId: string | null;
|
|
18
|
+
/** ERP belge numarası, tanındıysa. */
|
|
19
|
+
documentNumber: string | null;
|
|
20
|
+
/** ERP/ajan hata mesajı (yığın izi yok). */
|
|
21
|
+
exceptionMessage: string | null;
|
|
22
|
+
/** Belge satırları, varsa. */
|
|
23
|
+
lines: unknown | null;
|
|
24
|
+
/** ERP'nin ham yanıtı (ayrıştırılmış ama değiştirilmemiş JSON); ajan hatasında ve sonuç gelmediğinde `null`. */
|
|
25
|
+
raw: unknown | null;
|
|
26
|
+
}
|
|
27
|
+
/** `runDexaCommand` sonucu (backend `ErpCommandResponse`, alan adları birebir). */
|
|
28
|
+
export interface DexaCommandResult {
|
|
29
|
+
queryStoreKey: string;
|
|
30
|
+
/** Sunucunun kanonik (küçük harf) biçimiyle anahtar. */
|
|
31
|
+
idempotencyKey: string;
|
|
32
|
+
/** `true` = bu istekte ERP'ye GİDİLMEDİ; aynı anahtarın saklanan sonucu döndü. */
|
|
33
|
+
replayed: boolean;
|
|
34
|
+
outcome: DexaCommandOutcome;
|
|
35
|
+
/** DEXA ileti kimliği (destek/teşhis için); yoksa `null`. */
|
|
36
|
+
correlationId: string | null;
|
|
37
|
+
erp: DexaCommandErpView;
|
|
38
|
+
}
|
|
39
|
+
/** Bileşik komut adımı (backend `ErpCommandStepView`). One durum ucunda genel komut görünür; dizi boş gelir. */
|
|
40
|
+
export interface DexaCommandStepView {
|
|
41
|
+
step: string;
|
|
42
|
+
key: string;
|
|
43
|
+
queryStoreKey: string;
|
|
44
|
+
role: string;
|
|
45
|
+
outcome: string;
|
|
46
|
+
correlationId: string | null;
|
|
47
|
+
erpMessage: string | null;
|
|
48
|
+
headerId: string | null;
|
|
49
|
+
documentNumber: string | null;
|
|
50
|
+
}
|
|
51
|
+
/** Bileşik komut uyarısı (backend `CompositeWarningView`). One durum ucunda dizi boş gelir. */
|
|
52
|
+
export interface DexaCommandWarningView {
|
|
53
|
+
code: string;
|
|
54
|
+
message: string;
|
|
55
|
+
step: string | null;
|
|
56
|
+
}
|
|
57
|
+
/** `getDexaCommandStatus` sonucu (backend `ErpCommandStatusResponse`, alan adları birebir). */
|
|
58
|
+
export interface DexaCommandStatus {
|
|
59
|
+
queryStoreKey: string;
|
|
60
|
+
idempotencyKey: string;
|
|
61
|
+
outcome: DexaCommandStatusOutcome;
|
|
62
|
+
correlationId: string | null;
|
|
63
|
+
/** Deneme sayısı (`notSent` sonrası yeniden denemeler dâhil). */
|
|
64
|
+
attemptCount: number;
|
|
65
|
+
/** İlk kayıt anı (ISO 8601, UTC). */
|
|
66
|
+
createdAtUtc: string;
|
|
67
|
+
/** Sonuçlanma anı (ISO 8601, UTC); sürüyorsa `null`. */
|
|
68
|
+
completedAtUtc: string | null;
|
|
69
|
+
/** ERP sonucu; sürüyorsa ya da gönderilmediyse `null`. */
|
|
70
|
+
erp: DexaCommandErpView | null;
|
|
71
|
+
steps: DexaCommandStepView[];
|
|
72
|
+
/** `command` (genel komut) · `composite` (bileşik komut). */
|
|
73
|
+
kind: string;
|
|
74
|
+
warnings: DexaCommandWarningView[];
|
|
75
|
+
}
|
|
76
|
+
interface DexaCommandRequest {
|
|
77
|
+
key: string;
|
|
78
|
+
parameters?: Record<string, string>;
|
|
79
|
+
}
|
|
80
|
+
/** Yeni bir kullanıcı eylemi için anahtar (`crypto.randomUUID`). Göndermeden ÖNCE kalıcı yere yazın. */
|
|
81
|
+
export declare function newIdempotencyKey(): string;
|
|
82
|
+
/** Anahtarı doğrular ve kanonik küçük harf biçimini döner; geçersizse fırlatır (istek hiç gitmez). */
|
|
83
|
+
export declare function normalizeIdempotencyKey(idempotencyKey: string): string;
|
|
84
|
+
/** Sunucuya giden gövdeyi doğrular ve kurar; hatalı girdi fırlatır (istek hiç gitmez). */
|
|
85
|
+
export declare function buildDexaCommandRequest(key: string, parameters?: Readonly<Record<string, string>>): DexaCommandRequest;
|
|
86
|
+
/**
|
|
87
|
+
* 200 yanıtını sözleşmeye indirger. ⛔ Sözleşmeye uymayan her yanıt — nesne olmayan gövde, bilinmeyen `outcome`, eksik
|
|
88
|
+
* ya da yanlış tipli alan, gönderilenden farklı `idempotencyKey` ya da `queryStoreKey` — `inDoubt` sayılır: ERP'ye
|
|
89
|
+
* gittiği kesin olan bir isteğin sonucu anlaşılamıyorsa onu başarı ya da ret saymak yanlış eylemi (yeni anahtarla
|
|
90
|
+
* tekrar → çift kayıt) tetikler. O durumda gövdenin HİÇBİR alanı sonuca taşınmaz (başka bir komuta ait olabilir):
|
|
91
|
+
* anahtarlar gönderilenlerdir, `replayed: false`, `correlationId: null`, `erp.shape: 'unrecognized'` — doğru sonuç AYNI
|
|
92
|
+
* anahtarla `getDexaCommandStatus` üzerinden okunur.
|
|
93
|
+
*/
|
|
94
|
+
export declare function normalizeDexaCommandResult(raw: unknown, sentIdempotencyKey: string, sentKey: string): DexaCommandResult;
|
|
95
|
+
/**
|
|
96
|
+
* Durum yanıtını sözleşmeye indirger; doğrulama kuralı ve geri düşüş komut sonucuyla AYNIDIR (sözleşmeye uymayan
|
|
97
|
+
* yanıt `inDoubt`, gövdeden hiçbir alan taşınmaz; `queryStoreKey` bilinmediği için boş metindir).
|
|
98
|
+
*/
|
|
99
|
+
export declare function normalizeDexaCommandStatus(raw: unknown, sentIdempotencyKey: string): DexaCommandStatus;
|
|
100
|
+
/**
|
|
101
|
+
* Kayıt defterinde izinli, önceden tanımlı bir DEXA komutunu çalıştırır — ERP'ye VERİ YAZAR (scope `dexa.write`).
|
|
102
|
+
* Kullanıcı, portal ve uygulama istekle GÖNDERİLMEZ; backend doğrulanmış platform bağlamından alır.
|
|
103
|
+
* 4xx hatası `OneError` olarak fırlar ve ERP'ye hiçbir şey gönderilmediği anlamına gelir; 409 `ERPCMD-APP-E-016`
|
|
104
|
+
* (`pending`) `OneError.retryAfterSeconds` taşır — o süre sonra AYNI anahtarla tekrar deneyin ya da durumu okuyun.
|
|
105
|
+
*/
|
|
106
|
+
export declare function runDexaCommand(api: Pick<BackendClient, 'request'>, key: string, parameters: Readonly<Record<string, string>> | undefined, options: {
|
|
107
|
+
idempotencyKey: string;
|
|
108
|
+
}): Promise<DexaCommandResult>;
|
|
109
|
+
/**
|
|
110
|
+
* Bu kullanıcının, bu uygulamanın izinli anahtarlarıyla çalıştırdığı bir komutun durumu (scope `dexa.write`).
|
|
111
|
+
* `null` = bu anahtarla görebileceğiniz bir kayıt yok (`404 ERPCMD-APP-E-017`): komut hiç kaydedilmemiştir, AYNI
|
|
112
|
+
* anahtarla yeniden gönderilebilir. Diğer her hata `OneError` olarak fırlar (eski backend'de uç yoksa da).
|
|
113
|
+
*/
|
|
114
|
+
export declare function getDexaCommandStatus(api: Pick<BackendClient, 'request'>, idempotencyKey: string): Promise<DexaCommandStatus | null>;
|
|
115
|
+
export {};
|
|
116
|
+
//# sourceMappingURL=dexaCommand.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dexaCommand.d.ts","sourceRoot":"","sources":["../src/dexaCommand.ts"],"names":[],"mappings":"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"}
|