You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs(id): realign Indonesian docs to v0.15 context namespace API
- Consolidate response helpers into download and empty
- Document ctx.get, ctx.set, and ctx.send namespaces
- Drop ctx.state in favor of signed session and validated
- Move worker pool guide to recipes
- Remove wildcard wording from route patterns description
- Rename lifecycle events and add security event group
- Rename routesDir to routes.directory across config
- Rename WrapMware to Wrap.apply and ctx accessors to namespaced form
Copy file name to clipboardExpand all lines: docs/id/by-design/bearer-auth.md
+19-22Lines changed: 19 additions & 22 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,10 +1,10 @@
1
1
---
2
-
description: "Kenapa Deserve membawa Basic Auth tapi tidak Bearer, dan cara menyusun auth token untuk skema apa pun."
2
+
description: "Kenapa Deserve membawa Basic Auth tapi tidak ada middleware Bearer, dan cara menyusun auth token untuk skema apa pun."
3
3
---
4
4
5
5
# Bearer Auth
6
6
7
-
Deserve membawa [Basic Auth](/id/middleware/basic-auth) tapi tidak ada middleware Bearer, dan pemisahan antara keduanya adalah intinya.
7
+
Deserve membawa [Basic Auth](/id/middleware/basic-auth) tapi tidak ada middleware Bearer, dan pemisahan antara keduanya adalah seluruh intinya.
8
8
9
9
## Kenapa Tidak Dibawa
10
10
@@ -22,24 +22,23 @@ Bearer sebaliknya. Format token, tanda tangan, dan sumber kepercayaan semuanya b
22
22
23
23
Penjaga token adalah komposisi kecil di atas bagian yang sudah ada:
24
24
25
-
-**Baca header** - [`ctx.header('authorization')`](/id/core-concepts/context-object#akses-data-request) mengembalikan nilai `Authorization` mentah.
25
+
-**Baca header** - [`ctx.get.header('authorization')`](/id/core-concepts/context-object#ctx-get-header-key) mengembalikan nilai `Authorization` mentah.
26
26
-**Berjalan lebih awal** - [middleware global](/id/middleware/global) berjalan sebelum route handler dan bisa menghentikan request dengan mengembalikan `Response`.
27
27
-**Tolak bersih** - [`ctx.handleError(401, ...)`](/id/core-concepts/context-object#penanganan-error) mengarah lewat [`router.catch()`](/id/error-handling/object-details) saat satu diatur.
28
-
-**Bawa hasilnya** - [`ctx.state`](/id/core-concepts/context-object#berbagi-state) menyerahkan identitas terdekode ke handlerdi hilir.
28
+
-**Bawa hasilnya** - [`ctx.set.session(...)`](/id/core-concepts/context-object#ctx-set-session-data) menandatangani identitas terdekode ke sebuah cookie yang dibaca balik handler, dibahas di [middleware session](/id/middleware/session).
29
29
30
30
## Sebuah Penjaga Bearer
31
31
32
-
Middleware ini menarik token dari header, memverifikasinya, dan menyimpan hasilnya untuk handler berikutnya. Placeholder `verifyToken` mewakili skema pilihan, sebuah pengecekan JWT, lookup JWKS, atau panggilan introspeksi.
32
+
Middleware ini menarik token dari header, memverifikasinya, dan menyimpan hasilnya untuk handler berikutnya. Placeholder `verifyToken` mewakili skema pilihan, sebuah pengecekan JWT, lookup JWKS, atau panggilan introspeksi. Menyimpan identitas butuh [middleware session](/id/middleware/session) terdaftar lebih dulu.
Handler lalu membaca identitas langsung dari state, tanpa parsing token sendiri.
65
+
Handler lalu membaca identitas langsung dari session, tanpa parsing token sendiri.
67
66
68
67
```typescript twoslash
69
68
importtype { Context } from'@neabyte/deserve'
70
69
// ---cut---
71
70
exportfunction GET(ctx:Context):Response {
72
71
// Baca apa yang disimpan penjaga
73
-
constuserId=ctx.state.userId
74
-
returnctx.send.json({ userId })
72
+
constsession=ctx.get.session()
73
+
returnctx.send.json({ userId: session?.userId })
75
74
}
76
75
```
77
76
78
77
## Mengarahkan Kegagalan Lewat Satu Handler
79
78
80
-
Penjaga di atas mengembalikan `401` dari dalam middleware. Untuk mengirim setiap kegagalan auth lewat satu tempat, bungkus middleware dengan [`WrapMware`](/id/middleware/global#membungkus-middleware-dengan-penanganan-error) dan lempar saat ditolak, lalu bentuk balasannya dengan [`router.catch()`](/id/error-handling/object-details).
79
+
Penjaga di atas mengembalikan `401` dari dalam middleware. Untuk mengirim setiap kegagalan auth lewat satu tempat, bungkus middleware dengan [`Wrap.apply`](/id/middleware/global#membungkus-middleware-dengan-penanganan-error) dan lempar saat ditolak, lalu bentuk balasannya dengan [`router.catch()`](/id/error-handling/object-details).
@@ -121,22 +119,21 @@ Ini pola pembungkusan yang sama dipakai [Basic Auth](/id/middleware/basic-auth)
121
119
Penjaga token sering cocok di prefix API sementara halaman publik tetap terbuka. Middleware per-path membatasi pengecekan ke satu prefix, bentuk yang sama ditunjukkan di [middleware global](/id/middleware/global#middleware-per-path).
Copy file name to clipboardExpand all lines: docs/id/by-design/compress.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -57,14 +57,14 @@ import type { Context } from '@neabyte/deserve'
57
57
// ---cut---
58
58
exportfunction GET(ctx:Context):Response {
59
59
// Larang lapisan apa pun menulis ulang body
60
-
ctx.setHeader('Cache-Control', 'no-transform')
60
+
ctx.set.header('Cache-Control', 'no-transform')
61
61
returnctx.send.json({
62
62
message: 'sent verbatim'
63
63
})
64
64
}
65
65
```
66
66
67
-
Mengatur header lewat [`ctx.setHeader`](/id/core-concepts/context-object#header-response) adalah jalur yang sama dipakai di tempat lain, jadi opt-out ini terbaca seperti header lain.
67
+
Mengatur header lewat [`ctx.set.header`](/id/core-concepts/context-object#ctx-set-header-key-value) adalah jalur yang sama dipakai di tempat lain, jadi opt-out ini terbaca seperti header lain.
Copy file name to clipboardExpand all lines: docs/id/by-design/https-redirect.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -38,21 +38,21 @@ await router.serve(8000)
38
38
39
39
## Membaca Skema Asli
40
40
41
-
Ketika aplikasi memang perlu tahu apakah klien memakai HTTPS, jawabannya ada di header forwarded yang diatur proxy, bukan di koneksi lokal. Proxy tepercaya menambahkan [`X-Forwarded-Proto`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Proto), dibaca lewat [`ctx.header`](/id/core-concepts/context-object#akses-data-request).
41
+
Ketika aplikasi memang perlu tahu apakah klien memakai HTTPS, jawabannya ada di header forwarded yang diatur proxy, bukan di koneksi lokal. Proxy tepercaya menambahkan [`X-Forwarded-Proto`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Proto), dibaca lewat [`ctx.get.header`](/id/core-concepts/context-object#ctx-get-header-key).
42
42
43
43
```typescript twoslash
44
44
importtype { Context } from'@neabyte/deserve'
45
45
// ---cut---
46
46
exportfunction GET(ctx:Context):Response {
47
47
// Skema yang benar-benar dipakai klien
48
-
const proto =ctx.header('x-forwarded-proto') ??'http'
48
+
const proto =ctx.get.header('x-forwarded-proto') ??'http'
49
49
returnctx.send.json({
50
50
secure: proto==='https'
51
51
})
52
52
}
53
53
```
54
54
55
-
Percayai header ini hanya di belakang proxy yang dikonfigurasi lewat [`trustProxy`](/id/getting-started/server-configuration#resolusi-ip-klien), batas kepercayaan yang sama diandalkan [`ctx.ip`](/id/by-design/request-id#ip-adalah-sumber-kebenaran). Klien yang tak tepercaya bisa mengatur header apa pun, jadi nilainya tak berarti tanpa batas itu.
55
+
Percayai header ini hanya di belakang proxy yang dikonfigurasi lewat [`trustProxy`](/id/getting-started/server-configuration#resolusi-ip-klien), batas kepercayaan yang sama diandalkan [`ctx.get.ip()`](/id/core-concepts/context-object#ctx-get-ip-options). Klien yang tak tepercaya bisa mengatur header apa pun, jadi nilainya tak berarti tanpa batas itu.
Copy file name to clipboardExpand all lines: docs/id/by-design/locale-redirect.md
+7-6Lines changed: 7 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -14,14 +14,14 @@ Pilihan bahasa adalah keputusan produk, bukan aturan transport. Locale mana yang
14
14
15
15
## Membaca Preferensi
16
16
17
-
Browser mengirim daftar bahasanya di header [`Accept-Language`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language), dibaca lewat [`ctx.header`](/id/core-concepts/context-object#akses-data-request). Sebuah pencocokan kecil terhadap locale yang didukung aplikasi memberi targetnya, lalu [`ctx.send.redirect`](/id/response/redirect) mengirim pengunjung ke sana.
17
+
Browser mengirim daftar bahasanya di header [`Accept-Language`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language), dibaca lewat [`ctx.get.header`](/id/core-concepts/context-object#ctx-get-header-key). Sebuah pencocokan kecil terhadap locale yang didukung aplikasi memberi targetnya, lalu [`ctx.send.redirect`](/id/response/redirect) mengirim pengunjung ke sana.
@@ -37,7 +37,7 @@ Sebuah 302 menjaga redirect tetap sementara, jadi kunjungan berikutnya tetap bis
37
37
38
38
## Berbagi Pilihan dengan Rute Berikutnya
39
39
40
-
Ketika beberapa rute butuh locale yang diresolusi, middleware bisa meresolusinya sekali dan menyimpannya di [`ctx.state`](/id/core-concepts/context-object#berbagi-state)alih-alih redirect, jadi tiap handler membaca nilai yang sama.
40
+
Ketika beberapa rute butuh locale yang diresolusi, middleware bisa meresolusinya sekali dan menyimpannya di [session](/id/middleware/session) bertanda tangan alih-alih redirect, jadi tiap handler membaca nilai yang sama lewat `ctx.get.session()`.
Bentuk redirect mengirim pengunjung ke URL terlokalisasi, sementara bentuk state menjaga satu URL dan mengoper locale ke dalam. Keduanya tinggal di file rute polos, jadi aturannya ada di mana bahasa penting dan tak di tempat lain.
61
+
Bentuk redirect mengirim pengunjung ke URL terlokalisasi, sementara bentuk session menjaga satu URL dan mengoper locale ke dalam. Keduanya tinggal di file rute polos, jadi aturannya ada di mana bahasa penting dan tak di tempat lain.
Copy file name to clipboardExpand all lines: docs/id/by-design/method-override.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -22,15 +22,15 @@ Deserve juga merutekan pada `req.method` asli, yang tak bisa ditulis ulang handl
22
22
23
23
## Setiap Metode Adalah Rute
24
24
25
-
Sebuah file rute mengekspor satu fungsi per metode, dan namanya adalah metodenya. Tak ada tabel untuk didaftarkan dan tak ada verb untuk diterjemahkan. Sebuah file seperti `items/[id].ts` membaca `id`-nya dari path lewat [`ctx.param`](/id/core-concepts/context-object#akses-data-request).
25
+
Sebuah file rute mengekspor satu fungsi per metode, dan namanya adalah metodenya. Tak ada tabel untuk didaftarkan dan tak ada verb untuk diterjemahkan. Sebuah file seperti `items/[id].ts` membaca `id`-nya dari path lewat [`ctx.get.param`](/id/core-concepts/context-object#ctx-get-param-key).
26
26
27
27
```typescript twoslash
28
28
importtype { Context } from'@neabyte/deserve'
29
29
// ---cut---
30
30
// Baca satu item lewat id
31
31
exportfunction GET(ctx:Context):Response {
32
32
returnctx.send.json({
33
-
id: ctx.param('id')
33
+
id: ctx.get.param('id')
34
34
})
35
35
}
36
36
@@ -67,7 +67,7 @@ await fetch(
67
67
)
68
68
```
69
69
70
-
Membangun stateless atau stateful adalah gerakan yang sama, tinggal tambahkan filenya. Sebuah endpoint REST stateless adalah handler yang membaca request dan membalas, sementara alur stateful menambah [middleware session](/id/middleware/session) dan membaca data per-pengguna dari [`ctx.state`](/id/core-concepts/context-object#berbagi-state). Metodenya tetap asli di kedua jalur, tanpa apa pun untuk disamarkan saat masuk.
70
+
Membangun stateless atau stateful adalah gerakan yang sama, tinggal tambahkan filenya. Sebuah endpoint REST stateless adalah handler yang membaca request dan membalas, sementara alur stateful menambah [middleware session](/id/middleware/session) dan membaca data per-pengguna lewat `ctx.get.session()`. Metodenya tetap asli di kedua jalur, tanpa apa pun untuk disamarkan saat masuk.
71
71
72
72
Sebuah API REST atau RESTful penuh muncul dari sini tanpa konfigurasi tambahan. Verb-nya sudah sejajar dengan aksinya, `GET` untuk membaca, `POST` untuk membuat, `PUT` dan `PATCH` untuk memperbarui, `DELETE` untuk menghapus, jadi sebuah resource hanyalah file rute dengan handler itu. Perilakunya terbaca sama di setiap endpoint, yang membuat seluruh API terasa mulus.
0 commit comments