@rewloy/node 0.2.1 → 0.2.2

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 CHANGED
@@ -5,6 +5,37 @@ https://rewloy.com/gelistiriciler/degisiklikler
5
5
 
6
6
  This library's releases. The API's own changes are listed at the link above.
7
7
 
8
+ ## 0.2.2 (2026-10-05)
9
+
10
+ Rewloy 1.1.0'a (API sürümü) göre yeniden üretildi: 256 işlem (0.2.1'de 255). Kasa
11
+ için `reverseAction`, `recordSale`'de `occurredAt`, `passAction`'da `reference`;
12
+ yanıtlarda `RateLimit-*` başlıkları.
13
+
14
+ Regenerated from Rewloy 1.1.0 (the product version in `info.version`): 256
15
+ operations (255 in 0.2.1).
16
+
17
+ - **New operation: `reverseAction`** (`POST /v1/passes/{serial}/actions/reverse`).
18
+ Voids a till action made with `passAction` (`spend`, `spend-points`,
19
+ `redeem-stamps`, `redeem-reward`, `use`), found by its `actionKey` (the
20
+ `Idempotency-Key` it was sent with) or its `reference`. It needs no
21
+ `Idempotency-Key`: an action is voided once and a repeat answers
22
+ `duplicate: true`. New error codes `ACTION_NOT_FOUND`, `ACTION_AMBIGUOUS`,
23
+ `ACTION_NOT_REVERSIBLE`.
24
+ - **`recordSale` takes an optional `occurredAt`**: when the sale really happened
25
+ (ISO 8601 with offset), for a till that queues sales while offline.
26
+ - **`passAction` takes an optional `reference`**, and its answer is now a union
27
+ type: the balance-card answer (`balance`, `detail`, `promotion`) or the coupon /
28
+ discount-card answer (`status`, `uses`, `usesLeft`). Narrow with `'uses' in r`.
29
+ - **Rate limit headers.** `ApiResponse.rateLimit` (`{ limit, remaining, reset }`,
30
+ from `RateLimit-Limit`, `RateLimit-Remaining`, `RateLimit-Reset`; `null` when the
31
+ answer has none) and `RewloyError.rateLimit` (including `RateLimitError`).
32
+ `parseRateLimit(headers)` is exported. Additive.
33
+ - Webhook-creation responses may carry `warnings` (a non-live installation whose
34
+ URL production would refuse); the `Idempotency-Key` parameter documents its
35
+ 8–64 printable ASCII rule; the API's descriptions no longer contain internal
36
+ `ADR n` references. README: the till example has a void step and a note on
37
+ `occurredAt` for offline queues.
38
+
8
39
  ## 0.2.1 (2026-10-05)
9
40
 
10
41
  Dışarıdan geliştiricilerin bulduğu üç sorun düzeltildi.
package/README.md CHANGED
@@ -120,6 +120,15 @@ const sonuc = await rewloy.passAction({
120
120
  idempotencyKey: `kasa3-z0187-fis${fisNo}`, // aşağıya bakın
121
121
  });
122
122
  if (sonuc.duplicate) console.log('Bu işlem zaten yazılmış');
123
+
124
+ // Yanlışlıkla bir harcama mı yapıldı? Yaparken gönderdiğiniz anahtarla geri alın:
125
+ await rewloy.passAction({
126
+ params: { serial },
127
+ body: { action: 'spend', locationId, amountMinor: 2500 },
128
+ idempotencyKey: `kasa3-z0187-iptal${fisNo}`,
129
+ });
130
+ const iptal = await rewloy.reverseAction({ params: { serial }, body: { actionKey: `kasa3-z0187-iptal${fisNo}` } });
131
+ console.log(iptal.undone, iptal.restored, iptal.balance); // 'spend', 2500, kartın bakiyesi
123
132
  ```
124
133
 
125
134
  ### Satış: `recordSale`
@@ -173,6 +182,47 @@ Bir satış bir kez geri alınır (tekrar `duplicate: true` döner). Kazanılan
173
182
  kullanılmışsa (ödüle ya da harcamaya gitmişse) `409 SALE_ALREADY_SPENT` gelir ve
174
183
  hiçbir şey yazılmaz.
175
184
 
185
+ **Çevrimdışı kasa kuyruğu: `occurredAt`.** Bağlantı koptuğunda satışı sonra
186
+ yazıyorsanız `occurredAt` ile satışın gerçekten olduğu anı (ISO 8601, saat
187
+ dilimiyle) gönderin; geçmişte, kartın geçmişinde o anla görünür. Gelecekte
188
+ olamaz (2 dakikalık saat farkı kabul edilir). `idempotencyKey` kuyruktaki
189
+ kayıtla birlikte saklanır, tekrar gönderilince satış ikinci kez yazılmaz.
190
+
191
+ ```ts
192
+ await rewloy.recordSale({
193
+ params: { serial },
194
+ body: { locationId, amountMinor: 4550, reference: `fis-${fisNo}`, occurredAt: '2026-10-05T14:32:10+03:00' },
195
+ idempotencyKey: anahtar,
196
+ });
197
+ ```
198
+
199
+ **Kasa işlemini iptal etmek: `reverseAction`.** `passAction` ile yapılan bir
200
+ harcama, ödül ya da kullanım yanlışlıkla yapıldıysa (`spend`, `spend-points`,
201
+ `redeem-stamps`, `redeem-reward`, `use`) `reverseAction` tamamını geri verir.
202
+ İşlemi, yaparken gönderdiğiniz `Idempotency-Key` (`actionKey`) ya da işlemin
203
+ `reference` değeriyle bulur (`passAction` artık isteğe bağlı bir `reference`
204
+ alır). `reverseAction` bir `Idempotency-Key` **istemez**: bir işlem bir kez geri
205
+ alınır, tekrar `duplicate: true` döner.
206
+
207
+ ```ts
208
+ const geri = await rewloy.reverseAction({
209
+ params: { serial },
210
+ body: { actionKey: `kasa3-z0187-fis${fisNo}`, locationId }, // ya da { reference: `fis-${fisNo}` }
211
+ });
212
+ console.log(geri.undone, geri.restored, geri.balance, geri.reopened, geri.duplicate);
213
+ ```
214
+
215
+ `passAction`ın yanıtı kart türüne göre iki biçimdedir ve TypeScript'te bir
216
+ birleşim türüdür: bakiyeli kartlarda `balance` (damga, puan, VIP, cashback,
217
+ hediye kartı), kupon ve indirim kartında `status`, `uses` ve `usesLeft`
218
+ (`'uses' in sonuc` ile ayırın). Kazanımlar (`earn-stamps`, `earn-points`,
219
+ `visit`) `reverseAction`la değil `reverseSale`la geri alınır.
220
+
221
+ **İstek sınırı.** Kimlikli her yanıt `RateLimit-Limit`, `RateLimit-Remaining` ve
222
+ `RateLimit-Reset` başlıklarını taşır: `rewloy.request(...)` bunları
223
+ `res.rateLimit` (`{ limit, remaining, reset }`) olarak verir, `429` hatası da
224
+ (`RateLimitError`) `err.rateLimit` ve `err.retryAfter` taşır.
225
+
176
226
  ### `Idempotency-Key`
177
227
 
178
228
  `recordSale`, `passAction`, `sendCampaign` ve `refundShopRedemption` bir
@@ -523,6 +573,15 @@ const sale = await rewloy.recordSale({
523
573
  body: { locationId, amountMinor: 4550, reference: `receipt-${receiptNo}` }, // amount in the card's currency, minor units
524
574
  idempotencyKey: `till3-z0187-r${receiptNo}`,
525
575
  });
576
+
577
+ // A gift-card spend rung up by mistake? Void it by the key it was sent with:
578
+ await rewloy.passAction({
579
+ params: { serial },
580
+ body: { action: 'spend', locationId, amountMinor: 2500 },
581
+ idempotencyKey: `till3-z0187-s${receiptNo}`,
582
+ });
583
+ const voided = await rewloy.reverseAction({ params: { serial }, body: { actionKey: `till3-z0187-s${receiptNo}` } });
584
+ console.log(voided.undone, voided.restored, voided.balance); // 'spend', 2500, the balance again
526
585
  ```
527
586
 
528
587
  - **Till.** `recordSale` writes a completed sale to a card (the card type and
@@ -530,6 +589,17 @@ const sale = await rewloy.recordSale({
530
589
  card's structured fields (`programName`, `currency`, `stamps`, `points`,
531
590
  `money`, `customer`); `reverseSale` takes a refunded sale back:
532
591
  `rewloy.reverseSale({ params: { serial }, body: { saleKey: key } })`.
592
+ A void is `reverseAction`: it takes back a `passAction` that was a mistake
593
+ (`spend`, `spend-points`, `redeem-stamps`, `redeem-reward`, `use`), found by
594
+ the `Idempotency-Key` you sent with it (`actionKey`) or its `reference`; it
595
+ needs no `Idempotency-Key` of its own, and a repeat answers `duplicate: true`:
596
+ `rewloy.reverseAction({ params: { serial }, body: { actionKey: key } })`.
597
+ A till that queues sales while offline sends `occurredAt` (ISO 8601 with the
598
+ UTC offset, not in the future) with `recordSale`, so the card's history shows
599
+ when the sale really happened; the queued `idempotencyKey` makes the resend
600
+ safe. `passAction` takes an optional `reference` too, and its answer is a union:
601
+ the balance-card answer (`balance`) or the coupon / discount-card answer
602
+ (`status`, `uses`, `usesLeft`).
533
603
  - **Idempotency keys.** `recordSale`, `passAction`, `sendCampaign` and
534
604
  `refundShopRedemption` need an `Idempotency-Key`: the API's OpenAPI document
535
605
  marks the header required for them, so `idempotencyKey` is a required
@@ -557,7 +627,9 @@ const sale = await rewloy.recordSale({
557
627
  - **Results.** It resolves to the answer's `data`: `{ data, meta }` for paged
558
628
  lists, `undefined` for 204, a `Blob` for files.
559
629
  - **The whole answer.** `rewloy.request(id, args)` returns `status`,
560
- `headers`, `requestId`, `mode` (the `Rewloy-Mode` header: `live` or `test`) and `replayed` (`Idempotent-Replayed`).
630
+ `headers`, `requestId`, `rateLimit` (`{ limit, remaining, reset }` from the
631
+ `RateLimit-*` headers, `null` when absent), `mode` (the `Rewloy-Mode` header: `live` or `test`) and `replayed` (`Idempotent-Replayed`).
632
+ A `RewloyError` carries `rateLimit` too; a `RateLimitError` also has `retryAfter`.
561
633
  - **Pagination.** `rewloy.paginate('listCustomers', args)` iterates the items
562
634
  of every page.
563
635
  - **Streams.** `rewloy.liveFeed({ signal })` (or `rewloy.stream('liveFeed',
package/dist/client.d.ts CHANGED
@@ -6,7 +6,7 @@
6
6
  import { RewloyMethods } from './generated/methods.js';
7
7
  import type { OperationId, Operations, PagedOperationId, StreamOperationId } from './generated/types.js';
8
8
  import { EventStream } from './sse.js';
9
- import type { ApiResponse, AuthKind } from './types.js';
9
+ import type { ApiResponse, AuthKind, RateLimitInfo } from './types.js';
10
10
  export declare const DEFAULT_BASE_URL = "https://app.rewloy.com";
11
11
  type Credential = Exclude<AuthKind, 'public'>;
12
12
  type Sleep = (ms: number, signal?: AbortSignal) => Promise<void>;
@@ -58,6 +58,8 @@ type ArgsParam<A> = object extends A ? [args?: A] : [args: A];
58
58
  type ItemOf<K extends PagedOperationId> = Operations[K]['data'] extends (infer T)[] ? T : never;
59
59
  /** `Retry-After` in milliseconds: delta-seconds or an HTTP date. */
60
60
  export declare function parseRetryAfter(value: string | null, now?: number): number | null;
61
+ /** The `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` headers; `null` unless all three are numbers. */
62
+ export declare function parseRateLimit(headers: Headers | null | undefined): RateLimitInfo | null;
61
63
  /** Exponential backoff with jitter for the retry after attempt `attempt` (0-based). */
62
64
  export declare function backoff(attempt: number, random?: () => number): number;
63
65
  /**
package/dist/client.js CHANGED
@@ -51,6 +51,19 @@ export function parseRetryAfter(value, now = Date.now()) {
51
51
  const at = Date.parse(v);
52
52
  return Number.isNaN(at) ? null : Math.max(0, at - now);
53
53
  }
54
+ /** The `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` headers; `null` unless all three are numbers. */
55
+ export function parseRateLimit(headers) {
56
+ if (!headers)
57
+ return null;
58
+ const read = (name) => {
59
+ const v = headers.get(name)?.trim();
60
+ return v && /^\d+$/.test(v) ? Number(v) : null;
61
+ };
62
+ const limit = read('ratelimit-limit');
63
+ const remaining = read('ratelimit-remaining');
64
+ const reset = read('ratelimit-reset');
65
+ return limit === null || remaining === null || reset === null ? null : { limit, remaining, reset };
66
+ }
54
67
  /** Exponential backoff with jitter for the retry after attempt `attempt` (0-based). */
55
68
  export function backoff(attempt, random = Math.random) {
56
69
  const cap = Math.min(BACKOFF_MAX_MS, BACKOFF_BASE_MS * 2 ** attempt);
@@ -179,7 +192,7 @@ export class Rewloy extends RewloyMethods {
179
192
  const { res, data, meta } = await this.#exchange(id, op, args[0]);
180
193
  return {
181
194
  data: data, meta, status: res.status, headers: res.headers,
182
- requestId: res.headers.get('x-request-id'), mode: res.headers.get('rewloy-mode'),
195
+ requestId: res.headers.get('x-request-id'), rateLimit: parseRateLimit(res.headers), mode: res.headers.get('rewloy-mode'),
183
196
  replayed: res.headers.get('idempotent-replayed') === 'true',
184
197
  };
185
198
  }
@@ -393,7 +406,7 @@ export class Rewloy extends RewloyMethods {
393
406
  #invalid(id, res, body) {
394
407
  return new RewloyError({
395
408
  status: res.status, code: 'INVALID_RESPONSE', detail: `the answer is not the JSON the API documents (${res.headers.get('content-type') ?? 'no content type'})`,
396
- requestId: res.headers.get('x-request-id'), body, headers: res.headers, operation: id,
409
+ requestId: res.headers.get('x-request-id'), body, headers: res.headers, rateLimit: parseRateLimit(res.headers), operation: id,
397
410
  });
398
411
  }
399
412
  #failure(id, res, text) {
@@ -410,7 +423,7 @@ export class Rewloy extends RewloyMethods {
410
423
  detail: e && typeof e.message === 'string' ? e.message : res.statusText || `HTTP ${String(res.status)}`,
411
424
  details: e?.details, docs: e && typeof e.docs === 'string' ? e.docs : null,
412
425
  requestId: res.headers.get('x-request-id') ?? (e && typeof e.requestId === 'string' ? e.requestId : null),
413
- body: parsed, headers: res.headers, operation: id,
426
+ body: parsed, headers: res.headers, rateLimit: parseRateLimit(res.headers), operation: id,
414
427
  };
415
428
  if (res.status === 429) {
416
429
  const header = parseRetryAfter(res.headers.get('retry-after'));
package/dist/errors.d.ts CHANGED
@@ -4,6 +4,7 @@
4
4
  * answer that is not what the API documents, or no answer at all.
5
5
  */
6
6
  import type { ErrorCode } from './generated/types.js';
7
+ import type { RateLimitInfo } from './types.js';
7
8
  export interface RewloyErrorInit {
8
9
  status: number;
9
10
  code: string;
@@ -14,6 +15,7 @@ export interface RewloyErrorInit {
14
15
  requestId?: string | null | undefined;
15
16
  body?: unknown;
16
17
  headers?: Headers | null | undefined;
18
+ rateLimit?: RateLimitInfo | null | undefined;
17
19
  operation?: string | null | undefined;
18
20
  cause?: unknown;
19
21
  }
@@ -49,6 +51,8 @@ export declare class RewloyError extends Error {
49
51
  /** The parsed answer body (or its text, when it is not JSON). */
50
52
  readonly body: unknown;
51
53
  readonly headers: Headers | null;
54
+ /** The `RateLimit-*` headers of the answer; `null` when it carried none. */
55
+ readonly rateLimit: RateLimitInfo | null;
52
56
  /** The operationId of the call. */
53
57
  readonly operation: string | null;
54
58
  constructor(init: RewloyErrorInit);
package/dist/errors.js CHANGED
@@ -35,6 +35,8 @@ export class RewloyError extends Error {
35
35
  /** The parsed answer body (or its text, when it is not JSON). */
36
36
  body;
37
37
  headers;
38
+ /** The `RateLimit-*` headers of the answer; `null` when it carried none. */
39
+ rateLimit;
38
40
  /** The operationId of the call. */
39
41
  operation;
40
42
  constructor(init) {
@@ -49,6 +51,7 @@ export class RewloyError extends Error {
49
51
  this.requestId = init.requestId ?? null;
50
52
  this.body = init.body;
51
53
  this.headers = init.headers ?? null;
54
+ this.rateLimit = init.rateLimit ?? null;
52
55
  this.operation = init.operation ?? null;
53
56
  }
54
57
  }
@@ -10,7 +10,7 @@ export declare abstract class RewloyMethods {
10
10
  *
11
11
  * Bir programdan kart verir. E-posta gönderilirse kart o müşteriye bağlanır (yoksa oluşturulur) ve `kvkkConsent: true` gönderilmelidir: bu, işletmenin müşteriye kendi aydınlatma metnini sunduğunu beyan etmesidir; beyanın doğruluğundan işletme sorumludur. Bir rıza kutusu olarak sormayın. Dönen `cardUrl` müşterinin özel kart bağlantısıdır: müşteriye iletin, kayıtlara yazmayın. Hediye kartında `faceMinor` (kuruş) zorunludur. Yanıtta `created` her zaman vardır.
12
12
  * - **Idempotency-Key** (isteğe bağlı, önerilir): her çağrı yeni bir kart açar; başlıkla aynı anahtar ve aynı gövdeyle tekrar yeni kart açmaz, ilk yanıtı (aynı kart, aynı bağlantı) `Idempotent-Replayed: true` ile döndürür. Aynı anahtar başka bir gövdeyle `422 IDEMPOTENCY_KEY_REUSED`. Bir siparişe kart açan mağaza için sipariş başına sabit bir anahtar iyi bir seçimdir. Saklanan yanıt şifrelidir ve 7 gün tutulur; tekrar yalnız kimlik o programda hâlâ kart verebiliyorsa döner (yoksa `403 FORBIDDEN`).
13
- * - **`ifExists`** (isteğe bağlı, `email` ile): `"create"` (varsayılan) her çağrıda yeni kart açar, bugüne dek olduğu gibi. `"return"`: kişinin bu programda açık bir kartı varsa yeni kart açılmaz; `200`, `created: false` ve o kartın `serial`'i döner — mağazanın kendi e-posta → kart tablosu tutması gerekmez. Var olan kartın `cardUrl`'i **görüntüleme anahtarı taşımaz** (`/p/{serial}`, kişiye bir şey göstermez ve bağlantıyı e-postasına istemeyi önerir): adresi yazan kişi kartın sahibi olmayabilir, özel bağlantı yalnız kişinin kendi e-postasına gider (`sendEmail`). Kart yoksa yeni kart açılır (`201`, `created: true`). Yanıt bu adresin bu programda kartı olup olmadığını ve kartın numarasını (kasada kartla işlem yapılan anahtar) söylediği için **kimliğin kartın programında `customers.read` yetkisi olmalı** ve müşteri kimliğin şube kapsamında olmalıdır; yoksa `403 FORBIDDEN` (ADR 182'nin incelemesi). Hediye kartında kullanılamaz (her hediye kartı bir satın almadır; `400 VALIDATION`). Koddan verilen kartlar (kupon, indirim) "açık kart" sayılmaz.
13
+ * - **`ifExists`** (isteğe bağlı, `email` ile): `"create"` (varsayılan) her çağrıda yeni kart açar, bugüne dek olduğu gibi. `"return"`: kişinin bu programda açık bir kartı varsa yeni kart açılmaz; `200`, `created: false` ve o kartın `serial`'i döner — mağazanın kendi e-posta → kart tablosu tutması gerekmez. Var olan kartın `cardUrl`'i **görüntüleme anahtarı taşımaz** (`/p/{serial}`, kişiye bir şey göstermez ve bağlantıyı e-postasına istemeyi önerir): adresi yazan kişi kartın sahibi olmayabilir, özel bağlantı yalnız kişinin kendi e-postasına gider (`sendEmail`). Kart yoksa yeni kart açılır (`201`, `created: true`). Yanıt bu adresin bu programda kartı olup olmadığını ve kartın numarasını (kasada kartla işlem yapılan anahtar) söylediği için **kimliğin kartın programında `customers.read` yetkisi olmalı** ve müşteri kimliğin şube kapsamında olmalıdır; yoksa `403 FORBIDDEN`. Hediye kartında kullanılamaz (her hediye kartı bir satın almadır; `400 VALIDATION`). Koddan verilen kartlar (kupon, indirim) "açık kart" sayılmaz.
14
14
  * - **`sendEmail: true`** (isteğe bağlı, `email` ile): katılım formunun gönderdiği "kartınız" e-postası kişinin adresine gider; yeni kartta yeni kartın bağlantısıyla, var olan kartta (`created: false`) o kart için yeni bir bağlantıyla (eski bağlantılar çalışmaya devam eder). Sınırlar: kişi başına saatte 3 (yeni kart da sayılır; katılım formuyla ortak), işletme başına saatte 50 (deneme süresinde) ya da 500; fazlası gönderilmez, `rate_limited` (kart yine açılır). İşletmenin etkin bir sahibinin e-posta adresi doğrulanmamışsa çağrı `403 OWNER_EMAIL_UNVERIFIED` ile reddedilir, kart açılmaz. Gönderim `kvkkConsent: true` ile kaydedilen beyana dayanır. Test ortamında e-posta gönderilmez, "Gönderilmeyenler"e yazılır. Yanıttaki `emailStatus`: `queued` (gönderim sırasına girdi; test ortamında Gönderilmeyenler'e yazıldı), `suppressed` (adres daha önce geri döndüğü ya da şikâyet ettiği için gönderilmedi), `rate_limited`, `not_sent`.
15
15
  * - **Bir sipariş için kart** (`orderId` ve `shopId` birlikte, `email` ile): kartı kazandıran sipariş de bu karta sayılır, mağazanın sipariş bildirimi karttan önce ya da sonra gelsin. Bildirim henüz gelmediyse (`order.result: waiting`) geldiğinde bu kartı bulur. Önce gelip "Kartı yok" diye kaydedildiyse (`resend`) sipariş yeniden açılır: mağaza siparişi 7 gün içinde yeniden gönderdiğinde (aynı imzalı bildirim; WooCommerce eklentisi webhook'unun o siparişi yeniden teslimiyle) siparişin kendi e-postası ve tutarıyla bu karta işlenir. Tutar hiçbir zaman bu çağrıdan alınmaz, siparişten hiçbir şey saklanmaz ve sipariş yine bir kez sayılır. Bağlantı bu işletmenin ve bu programın olmalıdır (`404 SHOP_NOT_FOUND`, `409 SHOP_PROGRAM_MISMATCH`). `ifExists: "return"` ile var olan kart döndüğünde de sipariş, e-postasıyla o kartı bulur.
16
16
  *
@@ -40,7 +40,7 @@ export declare abstract class RewloyMethods {
40
40
  /**
41
41
  * Kartın bir şubedeki kasa kuralları
42
42
  *
43
- * Kasada işlem yapmadan önce: kart bu şubede kullanılabilir mi, hangi şubelerde geçerli, şu an burada hangi kasa kampanyası çalışıyor ve kasiyerin göreceği uyarılar (tarayıcıdaki şeritlerin aynısı). `allowed: false` iken işlem `WRONG_LOCATION` ile reddedilir (ADR 139). Şube kartın işletmesinin silinmemiş bir şubesi olmalıdır, değilse `404 LOCATION_NOT_FOUND` (kasa işlemleri gibi).
43
+ * Kasada işlem yapmadan önce: kart bu şubede kullanılabilir mi, hangi şubelerde geçerli, şu an burada hangi kasa kampanyası çalışıyor ve kasiyerin göreceği uyarılar (tarayıcıdaki şeritlerin aynısı). `allowed: false` iken işlem `WRONG_LOCATION` ile reddedilir. Şube kartın işletmesinin silinmemiş bir şubesi olmalıdır, değilse `404 LOCATION_NOT_FOUND` (kasa işlemleri gibi).
44
44
  *
45
45
  * **Kimlik:** API anahtarı, ekip oturumu.
46
46
  *
@@ -54,7 +54,7 @@ export declare abstract class RewloyMethods {
54
54
  /**
55
55
  * Kasada işlem
56
56
  *
57
- * Karta, bir şubede kasa işlemi uygular. **Idempotency-Key zorunludur** (8–64 karakter, bu kimlik için kalıcı olarak tekil): aynı anahtarla aynı isteğin tekrarı bakiyeyi ikinci kez değiştirmez ve ilk sonucu döndürür (`duplicate: true`); bu kartta başka bir işlem için ya da başka bir gövdeyle (başka tutar, şube, sayı) kullanılmış bir anahtar `422 IDEMPOTENCY_KEY_REUSED` alır ve hiçbir şey yazılmaz. `currency` (isteğe bağlı) verilirse kartın para birimiyle karşılaştırılır (`422 CURRENCY_MISMATCH`). Şube işletmenizin silinmemiş bir şubesi olmalıdır (`404 LOCATION_NOT_FOUND`). Salt-okunur hesapta da çalışır: mevcut kartlar çalışmaya devam eder.
57
+ * Karta, bir şubede kasa işlemi uygular. **Idempotency-Key zorunludur** (8–64 karakter, yalnız ASCII, bu kimlik için kalıcı olarak tekil): aynı anahtarla aynı isteğin tekrarı bakiyeyi ikinci kez değiştirmez ve ilk sonucu döndürür (`duplicate: true`); bu kartta başka bir işlem için ya da başka bir gövdeyle (başka tutar, şube, sayı, not) ya da **başka bir kartta** kullanılmış bir anahtar `422 IDEMPOTENCY_KEY_REUSED` alır ve hiçbir şey yazılmaz (anahtar kimliğindir, kartın değil). Yanıt kartın türüne göre iki biçimdedir: bakiyeli kartlarda `{ balance, duplicate, detail?, promotion? }`, kupon ve indirim kartında (`use`) `{ status, duplicate, uses, usesLeft }`. `reference` (isteğe bağlı, en fazla 80 karakter) fiş numarasıdır: kaydın notuna yazılır ve bir harcamayı, ödülü ya da kullanımı `POST /v1/passes/{serial}/actions/reverse` ile geri alırken işlemi bulur. `currency` (isteğe bağlı) verilirse kartın para birimiyle karşılaştırılır (`422 CURRENCY_MISMATCH`). Şube işletmenizin silinmemiş bir şubesi olmalıdır (`404 LOCATION_NOT_FOUND`). Salt-okunur hesapta da çalışır: mevcut kartlar çalışmaya devam eder.
58
58
  * | action | kart | gerekli alan |
59
59
  * |---|---|---|
60
60
  * | `earn-stamps` | damga | `count` (varsayılan 1) |
@@ -82,7 +82,7 @@ export declare abstract class RewloyMethods {
82
82
  /**
83
83
  * Satışı karta yaz
84
84
  *
85
- * Kasada ya da kendi yazılımınızda tamamlanan bir satışı karta yazar: ne yazılacağına kartın türü ve programın kendi kuralı karar verir, entegrasyonun türü bilmesi gerekmez (ADR 177). `amountMinor` ödenen toplamdır, **kartın para biriminde** (programın para birimi: cashback ve hediye kartında programın kendi para birimi, öteki türlerde işletmeninki; `GET /v1/passes/{serial}` → `currency`) ve kuruş cinsinden; başka para birimi kabul edilmez ve çevrilmez. `currency` gönderirseniz Rewloy onu kartın para birimiyle karşılaştırır ve farklıysa `422 CURRENCY_MISMATCH` ile hiçbir şey yazmaz.
85
+ * Kasada ya da kendi yazılımınızda tamamlanan bir satışı karta yazar: ne yazılacağına kartın türü ve programın kendi kuralı karar verir, entegrasyonun türü bilmesi gerekmez. `amountMinor` ödenen toplamdır, **kartın para biriminde** (programın para birimi: cashback ve hediye kartında programın kendi para birimi, öteki türlerde işletmeninki; `GET /v1/passes/{serial}` → `currency`) ve kuruş cinsinden; başka para birimi kabul edilmez ve çevrilmez. `currency` gönderirseniz Rewloy onu kartın para birimiyle karşılaştırır ve farklıysa `422 CURRENCY_MISMATCH` ile hiçbir şey yazmaz.
86
86
  * | kart | satış ne yazar | `applied` |
87
87
  * |---|---|---|
88
88
  * | damga | 1 damga (kasa kampanyası katlar) | `stamps` |
@@ -92,10 +92,11 @@ export declare abstract class RewloyMethods {
92
92
  * | hediye kartı, kupon, indirim | hiçbir şey (harcamak ve kullanmak `POST /v1/passes/{serial}/actions` ile) | `none` |
93
93
  *
94
94
  * Hiçbir şey yazılmadıysa yanıt yine 200'dür, `applied: "none"` ve nedeni `reason`: `below_minimum` (tutar bir puan ya da bir kuruş birikim üretmiyor; `amountMinor: 0` dahil), `visit_already_counted` (VIP: bu ziyaret penceresinde ziyaret zaten sayıldı), `card_full` (damga: kart dolu ve program ödülden sonra damga biriktirmiyor; önce ödülü kullanın), `type_does_not_earn`. Damga ve VIP, `amountMinor: 0` olsa da ziyareti sayar.
95
- * - **Idempotency-Key zorunludur**: 8–64 karakter ve bu kimlik için **kalıcı olarak tekil**; defter anahtarları hiç silinmez. Fiş numarası tek başına anahtar olamaz: ÖKC fiş numaraları Z raporundan sonra yeniden başlar. Kasa + Z no + fiş no birleşimi (ör. `kasa3-z0187-fis0042`) ya da satışla birlikte saklanıp tekrarda yeniden gönderilen bir UUID kullanın. Aynı anahtarla **aynı isteğin** tekrarı ikinci kez yazmaz: `duplicate: true`, `credited` ilk isteğin yazdığı, `balance` kartın şimdiki bakiyesi. Aynı anahtar başka bir gövdeyle (başka `amountMinor`, `locationId`, `reference` ya da `currency`) `422 IDEMPOTENCY_KEY_REUSED` alır ve hiçbir şey yazılmaz: satış sessizce kaybolmaz. Anahtar `POST /v1/passes/{serial}/actions` ile aynı alandadır: orada bu kartta kullanılmış bir anahtar da `422 IDEMPOTENCY_KEY_REUSED` alır. Hiçbir şey yazmayan bir satış anahtarı bağlamaz.
95
+ * - **Idempotency-Key zorunludur**: 8–64 karakter ve bu kimlik için **kalıcı olarak tekil**; defter anahtarları hiç silinmez. Fiş numarası tek başına anahtar olamaz: ÖKC fiş numaraları Z raporundan sonra yeniden başlar. Kasa + Z no + fiş no birleşimi (ör. `kasa3-z0187-fis0042`) ya da satışla birlikte saklanıp tekrarda yeniden gönderilen bir UUID kullanın. Aynı anahtarla **aynı isteğin** tekrarı ikinci kez yazmaz: `duplicate: true`, `credited` ilk isteğin yazdığı, `balance` kartın şimdiki bakiyesi. Aynı anahtar başka bir gövdeyle (başka `amountMinor`, `locationId`, `reference` ya da `currency`) `422 IDEMPOTENCY_KEY_REUSED` alır ve hiçbir şey yazılmaz: satış sessizce kaybolmaz. Anahtar `POST /v1/passes/{serial}/actions` ile aynı alandadır: orada bu kartta kullanılmış bir anahtar da `422 IDEMPOTENCY_KEY_REUSED` alır. Anahtar **kimliğindir, kartın değil**: başka bir kartta bir şey yazmış bir anahtar bu kartta da `422 IDEMPOTENCY_KEY_REUSED` alır (yanıt öteki kartı söylemez): yanlış karta okutulan fiş, doğru karta aynı anahtarla yazılamaz; önce yanlış karttaki satışı geri alın (`sale/reverse`), sonra doğru karta yeni bir anahtarla yazın. Hiçbir şey yazmayan bir satış anahtarı bağlamaz. Anahtar yalnız yazdırılabilir ASCII karakterler taşır (`400 VALIDATION`).
96
+ * - **Çevrimdışı kasa (`occurredAt`):** bağlantısı kopan kasa satışları kendi kuyruğunda tutar ve bağlantı gelince sırayla gönderir. Her satışı kuyruğa **anahtarıyla birlikte** yazın (kasa + Z no + fiş no) ve gönderirken aynı anahtarı kullanın: kayıp bir yanıttan sonra tekrar ikinci kez yazmaz. `occurredAt` satışın olduğu andır: VIP ziyareti o ana göre sayılır (o anın ziyaret penceresinde zaten sayılmış bir ziyaret varsa `applied: "none"`, `visit_already_counted`), kasa kampanyası o anda çalışan kampanyadır. Gelecekte olamaz (2 dakika saat farkı kabul edilir), en fazla 72 saat geriye gider ve kartın verildiği andan önce olamaz (`400 VALIDATION`): daha eski bir kuyruğu elle düzeltin. Kasa kampanyası, o anda çalışan ve o anda zaten açılmış olandır: sonradan geçmiş bir başlangıçla açılan kampanya kuyruktaki satışı katlamaz. Kartın son kullanım tarihi ve şube kuralı gönderildiği ana göre denetlenir. Kaydın kendi zamanı (`at`, işlem kaydı ve döküm) yazıldığı andır; olduğu an kayıtta ayrıca durur (işlem kaydında `occurredAt`, webhook'ta `occurredAt`).
96
97
  * - **`reference`** (isteğe bağlı, en fazla 80 karakter): fiş numarası buraya yazılır. Defter kaydının notuna yazılır: müşterinin geçmişinde (VIP ziyaretleri hariç; onlar ziyaret olarak görünür) ve işlem dökümünün `Not` sütununda görünür. Müşterinin kişisel bilgisini yazmayın.
97
98
  * - Şube kuralları ve kasa kampanyaları `actions` ile aynıdır: kart bu şubede geçerli değilse `409 WRONG_LOCATION`, kampanya `promotion` ile döner. Salt-okunur hesapta da çalışır.
98
- * - **`locationId` isteğe bağlıdır** (ADR 182): verilmezse satış bir şubeye yazılmaz (online mağaza gibi). O zaman şube kuralı ve kasa kampanyası uygulanmaz (e-ticaret siparişleri gibi), kayıtta şube boş kalır ve kimliğin **her şubede** `scan.use` yetkisi olmalıdır (yoksa `403 FORBIDDEN`); bir şubenin kasası şubesini gönderir. Yeni bir şube açmak gerekmez, hiçbir şey ücretlendirilmez.
99
+ * - **`locationId` isteğe bağlıdır**: verilmezse satış bir şubeye yazılmaz (online mağaza gibi). O zaman şube kuralı ve kasa kampanyası uygulanmaz (e-ticaret siparişleri gibi), kayıtta şube boş kalır ve kimliğin **her şubede** `scan.use` yetkisi olmalıdır (yoksa `403 FORBIDDEN`); bir şubenin kasası şubesini gönderir. Yeni bir şube açmak gerekmez, hiçbir şey ücretlendirilmez.
99
100
  * - **Geri almak:** `POST /v1/passes/{serial}/sale/reverse` satışın yazdığını bir kez geri alır.
100
101
  *
101
102
  * **Kimlik:** API anahtarı, ekip oturumu.
@@ -112,12 +113,13 @@ export declare abstract class RewloyMethods {
112
113
  /**
113
114
  * Satışı geri al
114
115
  *
115
- * İade ya da iptal edilen bir satışın karta yazdığını geri alır (ADR 182): o satışın yazdığı damga, puan, ziyaret ya da cashback'in tamamı, kasa kampanyasının katladığı dahil. Defter düzeltilmez; karta yeni bir düzeltme kaydı (`adjust`) yazılır ve müşterinin cüzdanı güncellenir.
116
- * - **Hangi satış:** `saleKey`, satışı yazarken gönderdiğiniz `Idempotency-Key`'dir (aynı kimlikle; anahtarlar kimlik başına tutulur), ya da `reference`, satışın `reference`'ı (bu kartta yalnız bir satışta varsa; birden çoksa `409 SALE_AMBIGUOUS`, `saleKey` gönderin). İkisinden yalnız biri. `recordSale` ile ya da kazandıran bir kasa işlemiyle (`earn-stamps`, `earn-points`, `visit`, `accrue`) yazılan kayıtlar geri alınır; harcama, ödül ve kullanım geri alınmaz.
116
+ * İade ya da iptal edilen bir satışın karta yazdığını geri alır: o satışın yazdığı damga, puan, ziyaret ya da cashback'in tamamı, kasa kampanyasının katladığı dahil. Defter düzeltilmez; karta yeni bir düzeltme kaydı (`adjust`) yazılır ve müşterinin cüzdanı güncellenir.
117
+ * - **Hangi satış:** `saleKey`, satışı yazarken gönderdiğiniz `Idempotency-Key`'dir (aynı kimlikle; anahtarlar kimlik başına tutulur), ya da `reference`, satışın `reference`'ı (**aynı kimliğin** bu karttaki satışları arasında yalnız birinde varsa; birden çoksa `409 SALE_AMBIGUOUS`, `saleKey` gönderin). İkisinden yalnız biri. `recordSale` ile ya da kazandıran bir kasa işlemiyle (`earn-stamps`, `earn-points`, `visit`, `accrue`) yazılan kayıtlar geri alınır; harcama, ödül ve kullanım burada değil, `POST /v1/passes/{serial}/actions/reverse` ile geri alınır.
117
118
  * - **Bir kez:** bir satış bir kez geri alınır, kim isterse istesin; tekrar `200` ve `duplicate: true` döner, hiçbir şey yazılmaz. Bu yüzden `Idempotency-Key` gerekmez.
118
119
  * - **Ne geri alınabilir:** kartın bakiyesi satışın yazdığını hâlâ tutuyorsa. Kazanılan kullanıldıysa (damgalar ödüle, puanlar ödüle ya da harcamaya, cashback harcamaya ya da online bir siparişe gittiyse) bakiye yetmez: `409 SALE_ALREADY_SPENT`, `details: { credited, balance }`, hiçbir şey yazılmaz. Kısmi geri alma yoktur; bakiye eksiye düşmez. Hiçbir şey yazmamış bir satış (`applied: "none"`), hediye kartı, kupon ve indirim kartı `404 SALE_NOT_FOUND`.
119
120
  * - **Kim geri alabilir:** satışın yapıldığı yerde kart işleyebilen: kimliğin **satışın şubesinde** `scan.use` yetkisi olmalıdır; şubesiz (online) bir satış için, onu yazarken olduğu gibi, her şubede (`403 FORBIDDEN`). `locationId` isteğe bağlıdır: geri almanın yapıldığı şube, düzeltme kaydına yazılır; verilirse işletmenin silinmemiş bir şubesi olmalı ve kimliğin orada da `scan.use` yetkisi olmalıdır. Geri alma bir ziyaret ya da okutma sayılmaz. Kapanmış ya da süresi dolmuş kartta da çalışır. Salt-okunur hesapta da çalışır.
120
121
  * - **`reference` ile** yalnız satışı yazan çağrının gönderdiği `reference` eşleşir (kasa kampanyasının nota eklediği ad değil); 1.0.5'ten önce yazılmış satışlar yalnız `saleKey` ile bulunur.
122
+ * - **VIP ziyareti** geri alınınca ziyaret penceresi yeniden açılır: iptal edilip yeniden kesilen fişin satışı ziyareti yeniden sayar.
121
123
  *
122
124
  * **Kimlik:** API anahtarı, ekip oturumu.
123
125
  *
@@ -130,6 +132,28 @@ export declare abstract class RewloyMethods {
130
132
  * @see {@link https://rewloy.com/gelistiriciler/api#op-reverseSale | API referansı}
131
133
  */
132
134
  reverseSale(args: T.ReverseSaleArgs): Promise<T.ReverseSaleData>;
135
+ /**
136
+ * Kasa işlemini geri al
137
+ *
138
+ * Yanlışlıkla yapılan ya da iptal edilen bir harcamayı, ödülü veya kullanımı geri alır: `spend` (hediye kartı, cashback), `spend-points`, `redeem-stamps`, `redeem-reward` ya da `use` (kupon, indirim kartı) ile alınanın tamamı geri verilir — bakiye, puan ya da damgalar karta döner, ödül yeniden hazır olur, kuponun ya da indirim kartının kullanım hakkı geri gelir, harcamayla kapanan hediye kartı ya da kullanımla kapanan kupon yeniden açılır. Defter düzeltilmez: karta yeni bir düzeltme kaydı (`adjust`) yazılır (kuponda kullanım kaydı geri alındı olarak işaretlenir) ve müşterinin cüzdanı güncellenir.
139
+ * - **Hangi işlem:** `actionKey`, işlemi yaparken (`POST /v1/passes/{serial}/actions`) gönderdiğiniz `Idempotency-Key`'dir, ya da `reference`, işlemin `reference`'ı (bu kartta bu kimliğin yalnız bir işleminde varsa; birden çoksa `409 ACTION_AMBIGUOUS`). İkisinden yalnız biri. **Yalnız aynı kimliğin** işlemleri bulunur: başka bir anahtarın, panelin tarayıcısının ya da bir e-ticaret siparişinin işlemi `404 ACTION_NOT_FOUND`. Kazanımlar (`earn-stamps`, `earn-points`, `visit`, `accrue`) burada değil, `POST /v1/passes/{serial}/sale/reverse` ile geri alınır.
140
+ * - **Online ödeme:** ödeme adımında çekilen bir tutar burada geri alınmaz; onun kendi iadesi vardır (`POST /v1/shops/{id}/orders/{orderId}/refund`).
141
+ * - **Bir kez:** bir işlem bir kez geri alınır, kim, kaç kez isterse istesin; tekrar `200` ve `duplicate: true` döner, hiçbir şey yazılmaz. Bu yüzden `Idempotency-Key` gerekmez. Geri alınan işlemin anahtarı yanmıştır: aynı anahtarla gelen istek ilk sonucu döndürür (`duplicate: true`), yeni bir işlem için yeni anahtar gönderin.
142
+ * - **Geri alınamayanlar:** kart iptal edilmiş ya da başka bir nedenle kapanmışsa, ya da kartın müşterisi silinmiş, programı arşivde ya da müşterisi engellenmişse (`details.reason: "card_closed"`), süresi dolmuşsa (`"card_expired"`), ya da damga ödülü geri verildiğinde kart programın en çok damgasını aşacaksa ve program ödülden sonra damga biriktirmiyorsa (`"stamps_do_not_fit"`): `409 ACTION_NOT_REVERSIBLE`, hiçbir şey yazılmaz. Harcamayla ya da kullanımla kapanan kart bu kurala girmez: geri alma onu yeniden açar.
143
+ * - **Kim geri alabilir:** satışın geri alınmasındaki kural: kimliğin **işlemin yapıldığı şubede** `scan.use` yetkisi olmalıdır (`403 FORBIDDEN`). `locationId` isteğe bağlıdır: geri almanın yapıldığı şube; verilirse işletmenin silinmemiş bir şubesi olmalı ve kimliğin orada da `scan.use` yetkisi olmalıdır. Geri alma bir ziyaret ya da okutma sayılmaz. Salt-okunur hesapta da çalışır.
144
+ * - **Webhook:** `pass.activity`, `kind: "adjust"`, `reason: "action_reversed"`, `undone` (`spend`, `redeem` ya da `use`), geri verilen `delta` (pozitif) ve `unit`; işlem `reference` taşıyorsa o da.
145
+ *
146
+ * **Kimlik:** API anahtarı, ekip oturumu.
147
+ *
148
+ * **Yetki:** `scan.use` — Tarayıcıyı kullanma.
149
+ *
150
+ * Salt-okunur hesapta da çalışır.
151
+ *
152
+ * `POST /v1/passes/{serial}/actions/reverse`
153
+ *
154
+ * @see {@link https://rewloy.com/gelistiriciler/api#op-reverseAction | API referansı}
155
+ */
156
+ reverseAction(args: T.ReverseActionArgs): Promise<T.ReverseActionData>;
133
157
  /**
134
158
  * Katılım formu
135
159
  *
@@ -275,7 +299,7 @@ export declare abstract class RewloyMethods {
275
299
  * - `previousToken`: bu kurulumun daha önceki `rwh_` oturumu (süresi dolmuş olsa da). Adres ya da numara o hesabınsa adres ve numara başına sınırlar uygulanmaz, böylece başkaları sizin kodlarınızı tüketemez. Çıkış yapılmış ya da kaldırılmış bir oturum bir şey kanıtlamaz.
276
300
  * - `deviceName`: açılacak oturumun Cihazlarım'daki adı.
277
301
  * - **Idempotency-Key** (isteğe bağlı, önerilir; 8–64 karakter, her yeni istek için yeni bir UUID): aynı anahtar ve aynı gövdeyle tekrar yeni kod GÖNDERMEZ, ilk yanıtı (aynı `request`) `Idempotent-Replayed: true` ile döndürür ve sınırlardan düşmez — bağlantısı kopan uygulama güvenle yineler. Aynı anahtar başka bir gövdeyle `422 IDEMPOTENCY_KEY_REUSED`; ilk istek sürerken `409 IDEMPOTENCY_IN_PROGRESS` (bir şey gönderilmez). Yanıt şifreli saklanır, 7 gün tekrar edilir; kodun kendisi 15 dakika geçerlidir, yeni kod için yeni anahtar gönderin. Oturumsuz çağrıda anahtar istemcinin IP adresine bağlıdır. Başlık yoksa her çağrı yeni bir kod ve yeni bir `request` demektir.
278
- * - **Sözleşme değişikliği (ADR 150):** `request` yeni. E-postadaki bağlantı artık oturumu tek başına açmaz; bağlantıyı uygulamanız yakalarsa `linkToken` olarak yine aynı `request` ile gönderin.
302
+ * - **Sözleşme değişikliği:** `request` yeni. E-postadaki bağlantı artık oturumu tek başına açmaz; bağlantıyı uygulamanız yakalarsa `linkToken` olarak yine aynı `request` ile gönderin.
279
303
  *
280
304
  * **Kimlik:** kimlik gerekmez.
281
305
  *
@@ -451,7 +475,7 @@ export declare abstract class RewloyMethods {
451
475
  /**
452
476
  * Davet
453
477
  *
454
- * Davet e-postasındaki bağlantının son parçası (`/davet/<code>`): hangi işletme, hangi adres. Adresin Rewloy hesabı olup olmadığını söylemez (bağlantı daveti yapanda da vardır, ADR 181): hesabı olan kişi o hesapla giriş yapıp oturumuyla kabul eder, olmayan şifre belirleyerek.
478
+ * Davet e-postasındaki bağlantının son parçası (`/davet/<code>`): hangi işletme, hangi adres. Adresin Rewloy hesabı olup olmadığını söylemez (bağlantı daveti yapanda da vardır): hesabı olan kişi o hesapla giriş yapıp oturumuyla kabul eder, olmayan şifre belirleyerek.
455
479
  *
456
480
  * **Kimlik:** kimlik gerekmez.
457
481
  *
@@ -463,7 +487,7 @@ export declare abstract class RewloyMethods {
463
487
  /**
464
488
  * Daveti kabul et
465
489
  *
466
- * Koltuk ve roller verilir — daveti yapanın o anki yetkileriyle yeniden denetlenerek — ve oturum döner. Daveti yapan işletme sahiplerine bildirilir. **Davet hiçbir zaman mevcut bir hesabın şifresini sormaz** (bağlantı daveti yapanda da vardır; ADR 181):
490
+ * Koltuk ve roller verilir — daveti yapanın o anki yetkileriyle yeniden denetlenerek — ve oturum döner. Daveti yapan işletme sahiplerine bildirilir. **Davet hiçbir zaman mevcut bir hesabın şifresini sormaz** (bağlantı daveti yapanda da vardır):
467
491
  * - **Adresin hesabı varsa:** kişi o hesapla girer (`POST /v1/auth/login`) ve bu çağrıyı kendi `rws_` oturumuyla, gövdesiz yapar; yanıt aynı oturumu güncel işletmeleriyle döndürür. Başka bir adresin oturumu `403 INVITE_OTHER_ACCOUNT`. Oturumsuz çağrı, şifreyle de olsa, `409 INVITE_SIGN_IN`.
468
492
  * - **Hesabı yoksa:** oturumsuz, `password` (en az 10 karakter) ile hesap açılır ve yeni oturum döner. Adres davetle doğrulanmış sayılmaz: doğrulama bağlantısı e-postayla gider (kayıttaki gibi).
469
493
  * - IP başına 15 dakikada 20 deneme.
@@ -852,7 +876,7 @@ export declare abstract class RewloyMethods {
852
876
  /**
853
877
  * Müşteriler
854
878
  *
855
- * Kimliğin şube kapsamındaki müşteriler, kartlarıyla. Paneldeki bütün süzgeçler burada da vardır. Bir müşteri, kapsamınızdaki bir şubede kartı ya da ziyareti varsa görünür. Her müşterinin adresleri ve numaraları `identifiers` içinde, durumlarıyla: doğrulanmış olanı yalnız müşteri değiştirir; API bir adresi ya da numarayı değiştirmez (ADR 168).
879
+ * Kimliğin şube kapsamındaki müşteriler, kartlarıyla. Paneldeki bütün süzgeçler burada da vardır. Bir müşteri, kapsamınızdaki bir şubede kartı ya da ziyareti varsa görünür. Her müşterinin adresleri ve numaraları `identifiers` içinde, durumlarıyla: doğrulanmış olanı yalnız müşteri değiştirir; API bir adresi ya da numarayı değiştirmez.
856
880
  *
857
881
  * **Kimlik:** API anahtarı, ekip oturumu.
858
882
  *
@@ -866,7 +890,7 @@ export declare abstract class RewloyMethods {
866
890
  /**
867
891
  * Müşteriler, kart kart
868
892
  *
869
- * Aynı süzgeçlerle, her satırda bir kart (panelde "kart kart" görünüm). `q` bir kişiyi bulur ve kişinin bütün kartları gelir; `q` bir kart numarası (ya da başı, en az 4 karakter, tire ve büyük-küçük harf önemsiz) olarak da okunur: numarası onunla başlayan kart `matched: true` taşır ve listenin başına gelir, tam eşleşen en başa (ADR 182). Bir kartı numarasıyla okumak için `GET /v1/passes/{serial}` daha doğrudur.
893
+ * Aynı süzgeçlerle, her satırda bir kart (panelde "kart kart" görünüm). `q` bir kişiyi bulur ve kişinin bütün kartları gelir; `q` bir kart numarası (ya da başı, en az 4 karakter, tire ve büyük-küçük harf önemsiz) olarak da okunur: numarası onunla başlayan kart `matched: true` taşır ve listenin başına gelir, tam eşleşen en başa. Bir kartı numarasıyla okumak için `GET /v1/passes/{serial}` daha doğrudur.
870
894
  *
871
895
  * **Kimlik:** API anahtarı, ekip oturumu.
872
896
  *
@@ -922,7 +946,7 @@ export declare abstract class RewloyMethods {
922
946
  /**
923
947
  * Müşteriyi engelle
924
948
  *
925
- * Müşterinin e-postasını ve doğrulanmış numaralarını engelli listesine ekler (ADR 168): bunlardan biriyle yeni kart alınamaz; Rewloy Cüzdan'da aynı hesap, bunlardan birini tuttuğu sürece, başka bir adresi ya da numarasıyla da alamaz. Yazılan (doğrulanmamış) telefon engellenmez: kimse kanıtlamadı, başkasının olabilir. `endCards: true` ile açık kartları da kapatılır (her cüzdana bir kez haber gider). Neden kayda geçer; adres ya da numara değil, özeti saklanır. Ne engellendiyse `entries` içinde; kaldırmak: `DELETE /v1/blocked-emails/{hash}` ya da `DELETE /v1/blocked-phones/{hash}`.
949
+ * Müşterinin e-postasını ve doğrulanmış numaralarını engelli listesine ekler: bunlardan biriyle yeni kart alınamaz; Rewloy Cüzdan'da aynı hesap, bunlardan birini tuttuğu sürece, başka bir adresi ya da numarasıyla da alamaz. Yazılan (doğrulanmamış) telefon engellenmez: kimse kanıtlamadı, başkasının olabilir. `endCards: true` ile açık kartları da kapatılır (her cüzdana bir kez haber gider). Neden kayda geçer; adres ya da numara değil, özeti saklanır. Ne engellendiyse `entries` içinde; kaldırmak: `DELETE /v1/blocked-emails/{hash}` ya da `DELETE /v1/blocked-phones/{hash}`.
926
950
  *
927
951
  * **Kimlik:** API anahtarı, ekip oturumu.
928
952
  *
@@ -1006,7 +1030,7 @@ export declare abstract class RewloyMethods {
1006
1030
  /**
1007
1031
  * Engellenen numaralar
1008
1032
  *
1009
- * Yeniden eskiye (ADR 168). Numaralar anahtarlı özet ve maskeli ipucuyla görünür; bir numaranın listede olup olmadığını `GET /v1/blocked-phones/check` ile sorun.
1033
+ * Yeniden eskiye. Numaralar anahtarlı özet ve maskeli ipucuyla görünür; bir numaranın listede olup olmadığını `GET /v1/blocked-phones/check` ile sorun.
1010
1034
  *
1011
1035
  * **Kimlik:** API anahtarı, ekip oturumu.
1012
1036
  *
@@ -1080,7 +1104,7 @@ export declare abstract class RewloyMethods {
1080
1104
  * | tür | alanlar |
1081
1105
  * |---|---|
1082
1106
  * | hediye kartı | `valueMinor` zorunlu (100 – 100.000.000 kuruş); kullanım her zaman sınırsız, bakiye bitene kadar |
1083
- * | kupon | ya `offerText` (ör. "1 tatlı") ya `valueMinor` (100 – 10.000.000 kuruş indirim); `usage`; isteğe bağlı `onlineValue` (online mağazadaki değeri: `{ kind: amount, value: kuruş }` ya da `{ kind: percent, value: 1–100 }`, ADR 179) |
1107
+ * | kupon | ya `offerText` (ör. "1 tatlı") ya `valueMinor` (100 – 10.000.000 kuruş indirim); `usage`; isteğe bağlı `onlineValue` (online mağazadaki değeri: `{ kind: amount, value: kuruş }` ya da `{ kind: percent, value: 1–100 }`) |
1084
1108
  * | indirim kartı | `percent` (yoksa programın oranı); `usage` |
1085
1109
  *
1086
1110
  * `usage`: `once` tek kullanım, `limited` + `usageLimit` (2–1000), `unlimited`. `validUntil` bir gün (YYYY-AA-GG) ise o günün sonuna kadar (Türkiye saati) geçerlidir. Başka türün alanı reddedilir. Planda `instruments` özelliği gerekir.
@@ -1111,7 +1135,7 @@ export declare abstract class RewloyMethods {
1111
1135
  /**
1112
1136
  * Koddan verilen kartlar
1113
1137
  *
1114
- * Yeniden eskiye; `status` ile süzülür. Hediye kartında `balance` kalan tutardır (kuruş). Kimliğin `customers.read` yetkisi de varsa kartı alanın bu işletmedeki adresleri ve numaraları `identifiers` içinde gelir, durumlarıyla: numarayla alınan kartın kişisi numarasıyla tanınır (ADR 168). Bu yetki yoksa ya da kişi kimliğin şube kapsamı dışındaysa `identifiers` gelmez: müşterinin iletişim bilgisi müşteri okuma yetkisiyle görülür.
1138
+ * Yeniden eskiye; `status` ile süzülür. Hediye kartında `balance` kalan tutardır (kuruş). Kimliğin `customers.read` yetkisi de varsa kartı alanın bu işletmedeki adresleri ve numaraları `identifiers` içinde gelir, durumlarıyla: numarayla alınan kartın kişisi numarasıyla tanınır. Bu yetki yoksa ya da kişi kimliğin şube kapsamı dışındaysa `identifiers` gelmez: müşterinin iletişim bilgisi müşteri okuma yetkisiyle görülür.
1115
1139
  *
1116
1140
  * **Kimlik:** API anahtarı, ekip oturumu.
1117
1141
  *
@@ -1626,7 +1650,7 @@ export declare abstract class RewloyMethods {
1626
1650
  /**
1627
1651
  * Analitik
1628
1652
  *
1629
- * Son 7, 30 ya da 90 günün göstergeleri: açık kartlar, yeni kartlar, ziyaretler, ziyaret eden kişiler ve bunlardan dönen (2+ ziyaret), ödüller; günlük ziyaretler; haftalık yeni ve dönen ziyaretçiler; program başına kart → kullanım → ödül hunisi; şubeler; en sık gelen müşteriler (yalnız `customers.read` ile). Apple Cüzdan'daki kartlar ve konum hatırlatması taşıyanlar. `programId` ile tek bir programın sayıları (ADR 178); kapsamı programlarla sınırlı bir kimlik yalnız kendi programlarını görür. Bir mağaza eklentisinin anahtarına müşteri adı gelmez.
1653
+ * Son 7, 30 ya da 90 günün göstergeleri: açık kartlar, yeni kartlar, ziyaretler, ziyaret eden kişiler ve bunlardan dönen (2+ ziyaret), ödüller; günlük ziyaretler; haftalık yeni ve dönen ziyaretçiler; program başına kart → kullanım → ödül hunisi; şubeler; en sık gelen müşteriler (yalnız `customers.read` ile). Apple Cüzdan'daki kartlar ve konum hatırlatması taşıyanlar. `programId` ile tek bir programın sayıları; kapsamı programlarla sınırlı bir kimlik yalnız kendi programlarını görür. Bir mağaza eklentisinin anahtarına müşteri adı gelmez.
1630
1654
  *
1631
1655
  * **Kimlik:** API anahtarı, ekip oturumu.
1632
1656
  *
@@ -1640,7 +1664,7 @@ export declare abstract class RewloyMethods {
1640
1664
  /**
1641
1665
  * İşlem kaydı: kasa
1642
1666
  *
1643
- * Kartlarda yapılan her işlem, yeniden eskiye: damga, puan, ödül, harcama, yükleme, ziyaret, kupon kullanımı… kim (ekip üyesi, API anahtarı ya da sistem), nerede, hangi kart. `day` işletmenin takvim günüdür. Planda `auditlog` özelliği gerekir. `limit` en fazla 100. Kapsamı programlarla sınırlı bir kimlik (ör. mağaza eklentisinin anahtarı) yalnız kendi programlarının kartlarını görür (ADR 178). Bir mağaza eklentisinin anahtarına kişisel veri gelmez: ekip üyesi `actor` yerine "ekip üyesi" yazar, `personId` null'dır.
1667
+ * Kartlarda yapılan her işlem, yeniden eskiye: damga, puan, ödül, harcama, yükleme, ziyaret, kupon kullanımı… kim (ekip üyesi, API anahtarı ya da sistem), nerede, hangi kart. `day` işletmenin takvim günüdür. Planda `auditlog` özelliği gerekir. `limit` en fazla 200. `at` Rewloy'nun kaydı yazdığı andır (sıra da ona göredir); sonradan yazılan bir satışın olduğu an `occurredAt`'tadır. Bir geri alma `kind: "adjust"` olarak görünür (kuponun ya da indirim kartının geri verilen kullanımı: `delta: 1`, `unit: null`). Kapsamı programlarla sınırlı bir kimlik (ör. mağaza eklentisinin anahtarı) yalnız kendi programlarının kartlarını görür. Bir mağaza eklentisinin anahtarına kişisel veri gelmez: ekip üyesi `actor` yerine "ekip üyesi" yazar, `personId` null'dır.
1644
1668
  *
1645
1669
  * **Kimlik:** API anahtarı, ekip oturumu.
1646
1670
  *
@@ -1698,7 +1722,7 @@ export declare abstract class RewloyMethods {
1698
1722
  *
1699
1723
  * Kişisel verinin sistemden çıktığı an; bu yüzden **yalnız ekip oturumuyla** ve oturumu açan kişinin şifresiyle (`password`) yapılır — API anahtarıyla yapılamaz. Saatte en fazla 20; her biri kayda geçer (satır sayısı, kapsam, dönem).
1700
1724
  * - `kind: customers` müşteri listesi (`customers.export`), `kind: ledger` son `days` günün işlemleri (`analytics.export`, 1–366).
1701
- * - Müşteri listesinde e-posta ve telefon durumlarıyla ayrı sütunlardadır (ADR 168): `E-posta doğrulandı` (evet/hayır: müşteri adresi kendi koduyla doğruladı mı), `Doğrulanmış telefon` (yalnız müşterinin kendi koduyla doğruladığı numaralar), `Yazılan telefon (doğrulanmamış)` (formda, kasada ya da API ile yazılan; doğrulanmış bir numarayla aynıysa boş). Numaralar 0532 123 45 67 biçiminde.
1725
+ * - Müşteri listesinde e-posta ve telefon durumlarıyla ayrı sütunlardadır: `E-posta doğrulandı` (evet/hayır: müşteri adresi kendi koduyla doğruladı mı), `Doğrulanmış telefon` (yalnız müşterinin kendi koduyla doğruladığı numaralar), `Yazılan telefon (doğrulanmamış)` (formda, kasada ya da API ile yazılan; doğrulanmış bir numarayla aynıysa boş). Numaralar 0532 123 45 67 biçiminde.
1702
1726
  * - Türkçe Excel için: UTF-8 BOM, `;` ayraç, CRLF. `=`, `+`, `-`, `@` ile başlayan hücreler formül olarak çalışmasın diye `'` ile başlar.
1703
1727
  *
1704
1728
  * **Kimlik:** ekip oturumu.
@@ -2065,7 +2089,7 @@ export declare abstract class RewloyMethods {
2065
2089
  * - Kod **yalnız bu yanıtta** görünür; Rewloy yalnız özetini saklar. 15 dakika geçerlidir.
2066
2090
  * - Kodu bir kişi alır (ekip oturumu; bir anahtar anahtar üretemez), `apikeys.manage`, kartın programında mağaza bağlantısı yetkisi ve — elle anahtar oluştururken olduğu gibi — `team.manage` ile (anahtarın yetkisi o kişiden verilen bir roldür; kişi E-ticaret rolünün yetkilerini tüm şubelerde taşımalıdır), `api` ve `ecommerce` özellikli bir planda. Kod bir API anahtarı ürettiği için kişinin şifresi yeniden istenir (`password`), anahtar oluştururken olduğu gibi. Bağlantı ve anahtar, kod kullanıldığı anda bu kişinin yetkileriyle kurulur: kişi o arada yetkisini kaybettiyse hiçbir şey kurulmaz.
2067
2091
  * - Kural alanları `POST /v1/shops` ile aynıdır. En fazla 5 bağlantı ve aynı anda en fazla 5 bekleyen kod.
2068
- * - **Eklentinin yetkileri** (ADR 178), kodu alan kişi seçer; sonra bağlantının sayfasından ya da `PUT /v1/shops/{id}/plugin-abilities` ile değişir:
2092
+ * - **Eklentinin yetkileri**, kodu alan kişi seçer; sonra bağlantının sayfasından ya da `PUT /v1/shops/{id}/plugin-abilities` ile değişir:
2069
2093
  * - `view` (Görüntüleme; bu çağrıda gönderilmezse kapalı, panelin formunda işaretli gelir): bağlantının programında `passes.read` ve `analytics.read` — kartın durumu (`GET /v1/passes/{serial}`), programın sayıları (`GET /v1/analytics?programId=`) ve kartlardaki son işlemler (`GET /v1/activity`). Müşterinin adı, e-postası ya da telefonu gelmez; ekip üyesinin e-postası da.
2070
2094
  * - `tillLocationId` (Kasa, varsayılan kapalı): bu tek şubede ve bağlantının programında `scan.use` — `GET /v1/passes/{serial}/till`, `POST …/sale`, `POST …/actions`. Hediye kartı yüklemek (`load`) yine `instruments.issue` ister ve verilmez. Kapalı başlar: açıkken WooCommerce'i yönetebilen herkes o şubede müşterilerin bakiyesini harcatabilir.
2071
2095
  * - Kişi bu yetkileri verebilmelidir (`team.manage` ve alt küme kuralı: Görüntüleme yetkilerini tüm şubelerde, `scan.use`'u o şubede taşımalı).
@@ -2098,7 +2122,7 @@ export declare abstract class RewloyMethods {
2098
2122
  *
2099
2123
  * Mağaza eklentisinin tek adımı: paneldeki bağlantı kodunu (`rwc_…`) verir, karşılığında **bir kez** şunları alır: bağlantı (`shop`), bağlantının sırrı (`secret`, WooCommerce webhook'una yazılır) ve yalnız bu bağlantıya bağlı API anahtarı (`apiKey.token`). Kimlik istemez; kod kimliktir.
2100
2124
  * - Kod **tek kullanımlıktır**: ikinci kez, süresi dolmuşken ya da iptal edilmişken aynı yanıtı alır: `404 CONNECT_TOKEN_INVALID` (hangisi olduğu söylenmez). Kurulum yarıda reddedilirse (ör. 5 bağlantı sınırı) kod harcanmaz.
2101
- * - Anahtar "E-ticaret" rolündedir ve bağlantının programıyla sınırlıdır: kartları ve ayarları görür, yalnız kendi bağlantısını görür ve yönetir, o programdan kart verir. Kodu alan kişi Görüntüleme ve Kasa'yı seçtiyse anahtar onları da alır (`apiKey.abilities`, ADR 178); `GET /v1/me` her an yeniden söyler. Bağlantı silinince anahtar da iptal edilir. Test ortamının kodu `rwk_test_` anahtarı verir (`mode`).
2125
+ * - Anahtar "E-ticaret" rolündedir ve bağlantının programıyla sınırlıdır: kartları ve ayarları görür, yalnız kendi bağlantısını görür ve yönetir, o programdan kart verir. Kodu alan kişi Görüntüleme ve Kasa'yı seçtiyse anahtar onları da alır (`apiKey.abilities`); `GET /v1/me` her an yeniden söyler. Bağlantı silinince anahtar da iptal edilir. Test ortamının kodu `rwk_test_` anahtarı verir (`mode`).
2102
2126
  * - `shopName` anahtarın panelde görünen adına eklenir ("WooCommerce · …"). IP başına 10 dakikada 20 istek.
2103
2127
  *
2104
2128
  * **Kimlik:** kimlik gerekmez.
@@ -2111,10 +2135,10 @@ export declare abstract class RewloyMethods {
2111
2135
  /**
2112
2136
  * Eklentinin yetkilerini değiştir
2113
2137
  *
2114
- * Bağlantı koduyla kurulmuş bir bağlantının eklenti anahtarının bağlantı dışında yapabildikleri (ADR 178): Görüntüleme (`view`) ve tek bir şubenin Kasası (`tillLocationId`; null = kapalı). Değişiklik mevcut anahtara **hemen** uygulanır; eklentinin yeniden bağlanması gerekmez, eklenti `GET /v1/me` ile okur.
2138
+ * Bağlantı koduyla kurulmuş bir bağlantının eklenti anahtarının bağlantı dışında yapabildikleri: Görüntüleme (`view`) ve tek bir şubenin Kasası (`tillLocationId`; null = kapalı). Değişiklik mevcut anahtara **hemen** uygulanır; eklentinin yeniden bağlanması gerekmez, eklenti `GET /v1/me` ile okur.
2115
2139
  * - Yalnız ekip oturumuyla: bir anahtarın yetkisini değiştirmek, anahtar oluşturmak gibidir. Bağlantının programında `shops.manage` (ya da `apikeys.manage`), ayrıca `apikeys.manage`, `team.manage` ve alt küme kuralı (verilen yetkileri kişi o şubelerde taşımalı) ister; kişinin şifresi (`password`) ve değişikliğin nedeni (`reason`, en fazla 200 karakter, yalnız ekibin gördüğü işlem kaydına yazılır) istenir.
2116
2140
  * - Bağlantıyı eklenti kurmadıysa ya da eklentinin anahtarı iptal edildiyse `409 NO_PLUGIN_KEY`.
2117
- * - **Eklentinin yetkileri** (ADR 178), kodu alan kişi seçer; sonra bağlantının sayfasından ya da `PUT /v1/shops/{id}/plugin-abilities` ile değişir:
2141
+ * - **Eklentinin yetkileri**, kodu alan kişi seçer; sonra bağlantının sayfasından ya da `PUT /v1/shops/{id}/plugin-abilities` ile değişir:
2118
2142
  * - `view` (Görüntüleme; bu çağrıda gönderilmezse kapalı, panelin formunda işaretli gelir): bağlantının programında `passes.read` ve `analytics.read` — kartın durumu (`GET /v1/passes/{serial}`), programın sayıları (`GET /v1/analytics?programId=`) ve kartlardaki son işlemler (`GET /v1/activity`). Müşterinin adı, e-postası ya da telefonu gelmez; ekip üyesinin e-postası da.
2119
2143
  * - `tillLocationId` (Kasa, varsayılan kapalı): bu tek şubede ve bağlantının programında `scan.use` — `GET /v1/passes/{serial}/till`, `POST …/sale`, `POST …/actions`. Hediye kartı yüklemek (`load`) yine `instruments.issue` ister ve verilmez. Kapalı başlar: açıkken WooCommerce'i yönetebilen herkes o şubede müşterilerin bakiyesini harcatabilir.
2120
2144
  * - Kişi bu yetkileri verebilmelidir (`team.manage` ve alt küme kuralı: Görüntüleme yetkilerini tüm şubelerde, `scan.use`'u o şubede taşımalı).
@@ -2605,8 +2629,8 @@ export declare abstract class RewloyMethods {
2605
2629
  * Webhook ekle
2606
2630
  *
2607
2631
  * Seçilen olaylar bu adrese imzalı olarak gönderilir; `secret` **yalnız bu yanıtta** döner (imzayı doğrulamak için saklayın). En fazla 10 etkin webhook. Yeni webhook bundan sonraki olayları alır, geçmişi değil.
2608
- * - **Adres:** herkese açık bir **https** adresi; iç ağ adresleri (localhost, 127.0.0.1, 10.x, 172.16–31.x, 192.168.x…) ve http kabul edilmez (`422 BAD_WEBHOOK_URL`). Kural **test ortamında da aynıdır**: teslimleri Rewloy'un sunucuları yapar ve sizin bilgisayarınıza ulaşamaz. Yerel geliştirmede sunucunuzu bir tünelle açın (ör. `cloudflared tunnel --url http://localhost:3000` ya da `ngrok http 3000`) ve tünelin https adresini verin. Teslim anında adres yeniden çözülür ve denetlenir.
2609
- * - **API anahtarıyla** (ADR 182): `webhooks.manage` yetkisi taşıyan anahtar webhook ekler, açar, kapatır, deneme olayı gönderir ve teslimleri okur. Anahtar yalnız kendisinin okuyabildiği olayları bir adrese gönderebilir: webhook işletmenin her şubesinin ve her programının olaylarını taşıdığı için anahtarın **her şubede ve her programda** `passes.read` yetkisi olmalıdır (yoksa `403 FORBIDDEN`). Her değişiklik, ekip üyesininki gibi, anahtar adına kaydedilir (`GET /v1/activity/access`). Anahtarın eklediği webhook anahtardan uzun yaşamaz: anahtar kaldırılınca, süresi dolunca ya da yetkisi daralınca kendiliğinden kapanır (`createdByKey`, `disabledReason`).
2632
+ * - **Adres:** herkese açık bir **https** adresi; iç ağ adresleri (localhost, 127.0.0.1, 10.x, 172.16–31.x, 192.168.x…) ve http kabul edilmez (`422 BAD_WEBHOOK_URL`). Kural **test ortamında da aynıdır**: teslimleri Rewloy'un sunucuları yapar ve sizin bilgisayarınıza ulaşamaz. Yerel geliştirmede sunucunuzu bir tünelle açın (ör. `cloudflared tunnel --url http://localhost:3000` ya da `ngrok http 3000`) ve tünelin https adresini verin. Teslim anında adres yeniden çözülür ve denetlenir. Canlı olmayan bir Rewloy kurulumu (geliştirme, staging) http ve iç ağ adreslerini kabul eder; o zaman yanıttaki `warnings` canlı ortamın bu adresi neden reddedeceğini söyler.
2633
+ * - **API anahtarıyla**: `webhooks.manage` yetkisi taşıyan anahtar webhook ekler, açar, kapatır, deneme olayı gönderir ve teslimleri okur. Anahtar yalnız kendisinin okuyabildiği olayları bir adrese gönderebilir: webhook işletmenin her şubesinin ve her programının olaylarını taşıdığı için anahtarın **her şubede ve her programda** `passes.read` yetkisi olmalıdır (yoksa `403 FORBIDDEN`). Her değişiklik, ekip üyesininki gibi, anahtar adına kaydedilir (`GET /v1/activity/access`). Anahtarın eklediği webhook anahtardan uzun yaşamaz: anahtar kaldırılınca, süresi dolunca ya da yetkisi daralınca kendiliğinden kapanır (`createdByKey`, `disabledReason`).
2610
2634
  * - **10 etkin webhook** sınırı işletme başınadır: kişilerin ve bütün anahtarların eklediği etkin webhook'lar birlikte sayılır (`409 LIMIT`).
2611
2635
  *
2612
2636
  * **Kimlik:** ekip oturumu, API anahtarı.
@@ -2633,7 +2657,7 @@ export declare abstract class RewloyMethods {
2633
2657
  /**
2634
2658
  * Aç ya da kapat
2635
2659
  *
2636
- * Kapalıyken olaylar gönderilmez; yeniden açılınca açıldığı andan sonraki olaylar gelir ve başarısızlık sayacı sıfırlanır. Bir API anahtarı yalnız olaylarını okuyabildiği bir webhook'u açabilir; yalnız kendi eklediği webhook'ları kapatabilir, başkasınınkini kapatmak için her yerde `passes.read` gerekir (`403 FORBIDDEN`, ADR 182). Bir anahtarın eklediği kapalı bir webhook'u bir kişi açarsa webhook o kişinin olur.
2660
+ * Kapalıyken olaylar gönderilmez; yeniden açılınca açıldığı andan sonraki olaylar gelir ve başarısızlık sayacı sıfırlanır. Bir API anahtarı yalnız olaylarını okuyabildiği bir webhook'u açabilir; yalnız kendi eklediği webhook'ları kapatabilir, başkasınınkini kapatmak için her yerde `passes.read` gerekir (`403 FORBIDDEN`). Bir anahtarın eklediği kapalı bir webhook'u bir kişi açarsa webhook o kişinin olur.
2637
2661
  *
2638
2662
  * **Kimlik:** ekip oturumu, API anahtarı.
2639
2663
  *
@@ -2884,7 +2908,7 @@ export declare abstract class RewloyMethods {
2884
2908
  * 3. son zamanlarda sık gidilenler: son 90 günün ziyaretleri, yenisi daha ağır (her ziyaret bugün 1, 30 gün önce ½, 60 gün önce ¼ sayılır);
2885
2909
  * 4. en yeni kart;
2886
2910
  * bütün kartları bitmiş işletmeler en sonda. Bir işletmenin içinde önce etkin kartlar, en eskisi önce. Konuma göre sıralamak uygulamanın işidir: her kart işletmesinin şubelerini (`places`) taşır, konum sunucuya gönderilmez; yıldızlılar yine en başta kalsın.
2887
- * **Listeden kaldırılan kartlar** (`hidden: true`, ADR 159) bu sıranın ardından, en sonda gelir ve sırayı etkilemez: Kartlarım'ı ve işletme görünümünü onları atlayarak çizin; bütün kartları kaldırılmış işletme Kartlarım'da görünmez. Eski kartlar biten kartlardır (`ended: true`), kaldırılmış olsun olmasın: en son biten önce (`endedAt`, kaydı olmayan en sonda).
2911
+ * **Listeden kaldırılan kartlar** (`hidden: true`) bu sıranın ardından, en sonda gelir ve sırayı etkilemez: Kartlarım'ı ve işletme görünümünü onları atlayarak çizin; bütün kartları kaldırılmış işletme Kartlarım'da görünmez. Eski kartlar biten kartlardır (`ended: true`), kaldırılmış olsun olmasın: en son biten önce (`endedAt`, kaydı olmayan en sonda).
2888
2912
  * `merchant` (kartlardaki `merchantSlug`) yalnız o işletmenin kartlarını işletme görünümünün sırasıyla verir, listeden kaldırılanlar sonda.
2889
2913
  *
2890
2914
  * **Kimlik:** kart sahibi oturumu.
@@ -3106,7 +3130,7 @@ export declare abstract class RewloyMethods {
3106
3130
  *
3107
3131
  * Hesap, kasadaki QR'ın programına katılır. Kart, hesabın seçilen doğrulanmış adresi ya da numarasıyla verilir ve hesaba bağlanır. Adresle katılımda kartın bağlantısı o adrese de gider: telefon kaybolsa da kart kaybolmaz; numaraya hiçbir şey gitmez. Katılım, aydınlatma metninin sunulduğu andır; bu kayıt (`kvkkConsent: true`) kaynağıyla tutulur (kaynak: Rewloy Cüzdan uygulaması, `cuzdan-app`).
3108
3132
  * - `email` ya da `verifiedPhone` (yalnız biri): `GET /v1/holder/programs/{id}` yanıtındaki `emails` ya da `phones` içinden biri. Hesapta doğrulanmamış bir adres ya da numara `400 VALIDATION` döner, çünkü bir forma yazılan adres bir şey kanıtlamaz. Numarayla katılımda programın telefon sorusu sorulmaz: numara telefondur.
3109
- * - İşletmede hesabın başka bir adresi ya da numarasıyla açılmış bir kaydı varsa yeni kayıt açılmaz: seçilen adres ya da numara o kayda eklenir (ADR 165).
3133
+ * - İşletmede hesabın başka bir adresi ya da numarasıyla açılmış bir kaydı varsa yeni kayıt açılmaz: seçilen adres ya da numara o kayda eklenir.
3110
3134
  * - Programın sorduğu öteki alanlar (`fields`) gövdede gelir; zorunlu biri eksikse `FIELD_REQUIRED`.
3111
3135
  * - Hesabın bu programda zaten kartı varsa yeni kart verilmez, o kart döner (`created: false`, `200`); katılım kapalıyken de. Aynı anda gelen iki istek de tek kart yapar. Yeni kart `201` ile döner.
3112
3136
  * - Kartı olmayan hesap için katılım kimliksiz katılımdaki gibi kapanır (`JOIN_CLOSED`). IP başına 10 dakikada 30 katılım sınırı da kimliksiz katılımla ortaktır.
@@ -3121,7 +3145,7 @@ export declare abstract class RewloyMethods {
3121
3145
  /**
3122
3146
  * Kodu tek dokunuşla kullan
3123
3147
  *
3124
- * Hediye kartı, kupon ya da indirim kodu (`/c/{code}`) bu hesapla kullanılır: kart, hesabın seçilen doğrulanmış adresi ya da numarasıyla verilir ve hesaba bağlanır. Web'deki `/c/{code}` sayfasının oturum açıkken yaptığıdır (ADR 165). Kodun ne verdiği ve sorduğu alanlar `GET /v1/public/codes/{code}` ile öğrenilir.
3148
+ * Hediye kartı, kupon ya da indirim kodu (`/c/{code}`) bu hesapla kullanılır: kart, hesabın seçilen doğrulanmış adresi ya da numarasıyla verilir ve hesaba bağlanır. Web'deki `/c/{code}` sayfasının oturum açıkken yaptığıdır. Kodun ne verdiği ve sorduğu alanlar `GET /v1/public/codes/{code}` ile öğrenilir.
3125
3149
  * - `email` ya da `verifiedPhone` (yalnız biri): hesabın doğrulanmış adreslerinden ya da numaralarından biri; hesapta doğrulanmamışsa `400 VALIDATION`. Numarayla alımda programın telefon sorusu sorulmaz: numara telefondur.
3126
3150
  * - Kişi başına sınır kişide sayılır, hangi adres ya da numarayla tanınırsa tanınsın. Sınır dolduysa yeni kart verilmez, kişinin bu koddan aldığı son kart döner (`created: false`, `200`).
3127
3151
  * - İşletmede hesabın başka bir adresi ya da numarasıyla açılmış bir kaydı varsa yeni kayıt açılmaz: seçilen adres ya da numara o kayda eklenir.
@@ -3283,7 +3307,7 @@ export declare abstract class RewloyMethods {
3283
3307
  /**
3284
3308
  * E-postayı ya da numarayı değiştir: kod gönder
3285
3309
  *
3286
- * Hesabın bir e-postasının ya da numarasının (`GET /v1/holder/account` listesindeki kimliği) yerine yenisi (ADR 170): adrese `email`, numaraya `phone` (aynı türden). Yeniye 6 haneli bir kod gider; kodu bu yanıttaki `request` ile `POST /v1/holder/identities/{id}/replace/verify` gönderin.
3310
+ * Hesabın bir e-postasının ya da numarasının (`GET /v1/holder/account` listesindeki kimliği) yerine yenisi: adrese `email`, numaraya `phone` (aynı türden). Yeniye 6 haneli bir kod gider; kodu bu yanıttaki `request` ile `POST /v1/holder/identities/{id}/replace/verify` gönderin.
3287
3311
  * - Uygulamanın oturumu cihazın kanıtıdır (web'deki cihaz anahtarının yerine).
3288
3312
  * - Yeni adres ya da numara eskisiyle aynıysa ya da zaten bu hesabınsa `409 IDENT_SAME`. Numara için telefonla giriş açık değilse `501 NOT_ENABLED`; `channel` ve sınırlar `POST /v1/holder/identities/phone` gibidir. Hesap başına saatte 10 (ekleme ve değiştirme birlikte).
3289
3313
  * - **Idempotency-Key** (isteğe bağlı, önerilir; 8–64 karakter, her yeni istek için yeni bir UUID): aynı anahtar ve aynı gövdeyle tekrar yeni kod GÖNDERMEZ, ilk yanıtı (aynı `request`) `Idempotent-Replayed: true` ile döndürür ve sınırlardan düşmez — bağlantısı kopan uygulama güvenle yineler. Aynı anahtar başka bir gövdeyle `422 IDEMPOTENCY_KEY_REUSED`; ilk istek sürerken `409 IDEMPOTENCY_IN_PROGRESS` (bir şey gönderilmez). Yanıt şifreli saklanır, 7 gün tekrar edilir; kodun kendisi 15 dakika geçerlidir, yeni kod için yeni anahtar gönderin. Oturumsuz çağrıda anahtar istemcinin IP adresine bağlıdır. Başlık yoksa her çağrı yeni bir kod ve yeni bir `request` demektir.
@@ -3298,8 +3322,8 @@ export declare abstract class RewloyMethods {
3298
3322
  /**
3299
3323
  * E-postayı ya da numarayı değiştir: kodu doğrula
3300
3324
  *
3301
- * Değiştirme adımının `request` değeri ve yeniye gelen kod (ADR 170, PHONE.md §12.1).
3302
- * - Hesaba girmenin en az 72 saattir (`recovery.wait_hours`) hesapta olan başka bir yolu varsa (bir e-posta, bir numara, passkey, Google ya da Apple; yeni eklenen ya da bir birleştirmeyle gelen sayılmaz, ADR 172) yenisi eskisinin yerini hemen alır (`applied`): işletmelerdeki kayıtlar yeniye geçer, hesabın öteki adreslerine e-posta, öteki cihazlarına bildirim gider.
3325
+ * Değiştirme adımının `request` değeri ve yeniye gelen kod.
3326
+ * - Hesaba girmenin en az 72 saattir (`recovery.wait_hours`) hesapta olan başka bir yolu varsa (bir e-posta, bir numara, passkey, Google ya da Apple; yeni eklenen ya da bir birleştirmeyle gelen sayılmaz) yenisi eskisinin yerini hemen alır (`applied`): işletmelerdeki kayıtlar yeniye geçer, hesabın öteki adreslerine e-posta, öteki cihazlarına bildirim gider.
3303
3327
  * - Yoksa değişiklik bekler (`pending`, `change.dueAt`; ayar `recovery.wait_hours`, 72 saat): o zamana kadar eskisiyle girilir, yenisiyle girilmez. Eski adrese iptal bağlantılı bir e-posta, öteki cihazlara bildirim gider; SMS ya da WhatsApp gitmez.
3304
3328
  * - Yeni adres ya da numara başka bir Rewloy Cüzdan hesabındaysa `409 MERGE_REQUIRED` (`details.request`): kişiye sorun, yanıtı `POST /v1/holder/merge` ile gönderin; birleşince değişiklik yapılır. Eski giriş yolu, birleşmeden önce bu hesaba girmenin tek yoluysa değişiklik yine bekler (öteki hesabın giriş yolları sayılmaz).
3305
3329
  * - Yanlış kodda `CODE_INVALID`. Eski giriş yolu artık hesapta değilse `404 NOT_FOUND`.
@@ -3314,7 +3338,7 @@ export declare abstract class RewloyMethods {
3314
3338
  /**
3315
3339
  * Bekleyen değişikliği iptal et ("Bu değişikliği ben yapmadım")
3316
3340
  *
3317
- * Hesabın bekleyen giriş yolu değişikliğini (`GET /v1/holder/account` `pendingChange.id`) ya da onaylanmış ve bekleyen bir kurtarma talebini (`pendingRecovery.id`) iptal eder (ADR 170).
3341
+ * Hesabın bekleyen giriş yolu değişikliğini (`GET /v1/holder/account` `pendingChange.id`) ya da onaylanmış ve bekleyen bir kurtarma talebini (`pendingRecovery.id`) iptal eder.
3318
3342
  * - Değişikliği bu cihaz istediyse kişinin vazgeçmesidir. Başka bir cihaz iptal ederse "Bu değişikliği ben yapmadım" demektir: değişikliği isteyen cihazın oturumu kapanır ve hesap işaretlenir (kurtarma talepleri artık kendiliğinden onaylanmaz).
3319
3343
  * - Kurtarma talebi iptal edilirse hesap olduğu gibi kalır ve işaretlenir.
3320
3344
  * - Bekleyen bir şey yoksa (uygulandı, iptal edildi) `404 NOT_FOUND`.