gamecore-sdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/README.md +56 -0
  2. package/bin/cli.js +78 -0
  3. package/dist/client/client.gen.d.ts +3 -0
  4. package/dist/client/client.gen.d.ts.map +1 -0
  5. package/dist/client/client.gen.js +236 -0
  6. package/dist/client/client.gen.js.map +1 -0
  7. package/dist/client/index.d.ts +9 -0
  8. package/dist/client/index.d.ts.map +1 -0
  9. package/dist/client/index.js +7 -0
  10. package/dist/client/index.js.map +1 -0
  11. package/dist/client/types.gen.d.ts +118 -0
  12. package/dist/client/types.gen.d.ts.map +1 -0
  13. package/dist/client/types.gen.js +3 -0
  14. package/dist/client/types.gen.js.map +1 -0
  15. package/dist/client/utils.gen.d.ts +34 -0
  16. package/dist/client/utils.gen.d.ts.map +1 -0
  17. package/dist/client/utils.gen.js +229 -0
  18. package/dist/client/utils.gen.js.map +1 -0
  19. package/dist/client.gen.d.ts +13 -0
  20. package/dist/client.gen.d.ts.map +1 -0
  21. package/dist/client.gen.js +4 -0
  22. package/dist/client.gen.js.map +1 -0
  23. package/dist/core/auth.gen.d.ts +19 -0
  24. package/dist/core/auth.gen.d.ts.map +1 -0
  25. package/dist/core/auth.gen.js +15 -0
  26. package/dist/core/auth.gen.js.map +1 -0
  27. package/dist/core/bodySerializer.gen.d.ts +26 -0
  28. package/dist/core/bodySerializer.gen.d.ts.map +1 -0
  29. package/dist/core/bodySerializer.gen.js +58 -0
  30. package/dist/core/bodySerializer.gen.js.map +1 -0
  31. package/dist/core/params.gen.d.ts +44 -0
  32. package/dist/core/params.gen.d.ts.map +1 -0
  33. package/dist/core/params.gen.js +101 -0
  34. package/dist/core/params.gen.js.map +1 -0
  35. package/dist/core/pathSerializer.gen.d.ts +34 -0
  36. package/dist/core/pathSerializer.gen.d.ts.map +1 -0
  37. package/dist/core/pathSerializer.gen.js +107 -0
  38. package/dist/core/pathSerializer.gen.js.map +1 -0
  39. package/dist/core/queryKeySerializer.gen.d.ts +19 -0
  40. package/dist/core/queryKeySerializer.gen.d.ts.map +1 -0
  41. package/dist/core/queryKeySerializer.gen.js +93 -0
  42. package/dist/core/queryKeySerializer.gen.js.map +1 -0
  43. package/dist/core/serverSentEvents.gen.d.ts +72 -0
  44. package/dist/core/serverSentEvents.gen.d.ts.map +1 -0
  45. package/dist/core/serverSentEvents.gen.js +134 -0
  46. package/dist/core/serverSentEvents.gen.js.map +1 -0
  47. package/dist/core/types.gen.d.ts +79 -0
  48. package/dist/core/types.gen.d.ts.map +1 -0
  49. package/dist/core/types.gen.js +3 -0
  50. package/dist/core/types.gen.js.map +1 -0
  51. package/dist/core/utils.gen.d.ts +20 -0
  52. package/dist/core/utils.gen.d.ts.map +1 -0
  53. package/dist/core/utils.gen.js +88 -0
  54. package/dist/core/utils.gen.js.map +1 -0
  55. package/dist/index.d.ts +3 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +3 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/sdk.gen.d.ts +431 -0
  60. package/dist/sdk.gen.d.ts.map +1 -0
  61. package/dist/sdk.gen.js +991 -0
  62. package/dist/sdk.gen.js.map +1 -0
  63. package/dist/types.gen.d.ts +1565 -0
  64. package/dist/types.gen.d.ts.map +1 -0
  65. package/dist/types.gen.js +3 -0
  66. package/dist/types.gen.js.map +1 -0
  67. package/package.json +37 -0
  68. package/skill/gamecore-integration/SKILL.md +402 -0
  69. package/skill/gamecore-integration/references/api-reference.md +271 -0
@@ -0,0 +1,271 @@
1
+ # GameCore API Reference
2
+
3
+ Complete endpoint catalog. All paths prefixed with `/v1` unless noted as `/admin/v1`.
4
+
5
+ ## Authentication
6
+
7
+ All requests require `X-API-KEY` header (format: `prefix.body`). Tenant creation and health check are the only unauthenticated endpoints.
8
+
9
+ ---
10
+
11
+ ## Tenant & API Keys
12
+
13
+ | Method | Path | Description |
14
+ |--------|------|-------------|
15
+ | `POST` | `/tenants` | Create tenant. Body: `{ name }`. Returns: `{ id, name, apiKey }`. |
16
+ | `GET` | `/tenants/me` | Get current tenant info. |
17
+ | `GET` | `/tenants/me/api-keys` | List active API keys (prefixes only, bodies not returned). |
18
+ | `POST` | `/tenants/me/api-keys` | Generate new API key. Returns full key once. |
19
+ | `DELETE` | `/tenants/me/api-keys/:prefix` | Revoke an API key by prefix. |
20
+
21
+ **Example — Create tenant:**
22
+ ```bash
23
+ curl -X POST http://localhost:3000/v1/tenants \
24
+ -H "Content-Type: application/json" \
25
+ -d '{"name": "My App"}'
26
+ # Response: { "id": "...", "name": "My App", "apiKey": "prefix.bodyhash..." }
27
+ ```
28
+
29
+ ---
30
+
31
+ ## Users
32
+
33
+ User IDs (`externalId`) are provided by you — GameCore does not generate them.
34
+
35
+ | Method | Path | Description |
36
+ |--------|------|-------------|
37
+ | `POST` | `/users` | Create user. Body: `{ externalId, name?, attributes?, deviceTokens? }`. |
38
+ | `PUT` | `/users/:id` | Upsert user (creates if not exists, updates if exists). |
39
+ | `GET` | `/users/:id` | Get user by externalId. |
40
+ | `GET` | `/users` | List users (paginated). |
41
+ | `PATCH` | `/users/:id` | Update user fields (name, attributes, deviceTokens, preferences). |
42
+ | `DELETE` | `/users/:id` | Full deletion (LGPD compliant). |
43
+ | `DELETE` | `/users/:id/data` | Anonymize user data — keeps user record but clears PII. |
44
+ | `POST` | `/users/:id/consent` | Record user consent. Body: `{ type, granted }`. |
45
+ | `PATCH` | `/users/:id/preferences` | Set notification preferences by type and channel. |
46
+
47
+ **Example — Upsert user:**
48
+ ```bash
49
+ curl -X PUT http://localhost:3000/v1/users/user-123 \
50
+ -H "Content-Type: application/json" \
51
+ -H "X-API-KEY: prefix.body" \
52
+ -d '{"name": "João Silva", "attributes": {"region": "sul", "plan": "premium"}}'
53
+ ```
54
+
55
+ User attributes are arbitrary key-value pairs used for achievement filtering and leaderboard breakdowns.
56
+
57
+ ---
58
+
59
+ ## Metrics
60
+
61
+ | Method | Path | Description |
62
+ |--------|------|-------------|
63
+ | `POST` | `/metrics` | Create metric definition. Body: `{ key, displayName, unit? }`. |
64
+ | `GET` | `/metrics` | List all metrics for the tenant. |
65
+ | `GET` | `/metrics/:key` | Get metric definition. |
66
+ | `GET` | `/metrics/:key/users/:userId` | Get user's total for a metric. |
67
+ | **`POST`** | **`/metrics/:key/event`** | **Send metric event — the central orchestrator.** |
68
+
69
+ ### Metric Event (POST /metrics/:key/event)
70
+
71
+ **Request body:**
72
+ ```json
73
+ {
74
+ "userId": "string (required)",
75
+ "value": 1.0 (optional, default 1),
76
+ "idempotencyKey": "string (optional)",
77
+ "attributes": { "key": "value" } (optional, for achievement filtering)
78
+ }
79
+ ```
80
+
81
+ **Response — all side effects in one call:**
82
+ ```json
83
+ {
84
+ "metricId": "uuid",
85
+ "eventId": "uuid",
86
+ "total": 42,
87
+ "achievements": [
88
+ { "key": "10-lessons", "name": "10 Lições", "badgeUrl": "https://..." }
89
+ ],
90
+ "currentStreak": {
91
+ "streakId": "uuid",
92
+ "length": 5,
93
+ "frequency": "daily",
94
+ "extended": true
95
+ },
96
+ "points": {
97
+ "xp": {
98
+ "systemId": "uuid",
99
+ "total": 150,
100
+ "added": 10,
101
+ "level": { "name": "Bronze", "icon": "🥉", "minPoints": 0 }
102
+ }
103
+ },
104
+ "leaderboards": {
105
+ "weekly-xp": { "rank": 3, "previousRank": 7, "score": 150 }
106
+ },
107
+ "idempotentReplayed": false
108
+ }
109
+ ```
110
+
111
+ **Idempotency:** Send `Idempotency-Key` header. Duplicate keys return `202` with cached response — no side effects replayed.
112
+
113
+ ---
114
+
115
+ ## Achievements
116
+
117
+ | Method | Path | Description |
118
+ |--------|------|-------------|
119
+ | `GET` | `/achievements` | List all achievements for the tenant. |
120
+ | `GET` | `/achievements/:key` | Get achievement definition. |
121
+ | `GET` | `/achievements/:key/users/:userId` | Check if user has completed an achievement. |
122
+ | `GET` | `/users/:id/achievements` | List all achievements for a user. |
123
+ | `POST` | `/achievements/:key/complete` | Manually complete an API-type achievement. Body: `{ userId }`. |
124
+
125
+ **Achievement types (configured via Admin API):**
126
+
127
+ | Type | Auto-triggered by | Example config |
128
+ |------|-------------------|----------------|
129
+ | `metric` | Metric event reaching threshold | `{ type: "metric", metricKey: "lessons_completed", threshold: 100 }` |
130
+ | `api` | Manual `POST /achievements/:key/complete` | `{ type: "api" }` |
131
+ | `streak` | Streak reaching length threshold | `{ type: "streak", streakKey: "daily", threshold: 7 }` |
132
+ | `composite` | All prerequisites completed | `{ type: "composite", prerequisiteKeys: ["a", "b", "c"] }` |
133
+
134
+ **Status workflow:** `inactive` → `active` → `locked` → `archived`
135
+
136
+ ---
137
+
138
+ ## Streaks
139
+
140
+ | Method | Path | Description |
141
+ |--------|------|-------------|
142
+ | `GET` | `/streaks` | List all streak definitions for the tenant. |
143
+ | `GET` | `/streaks/:key` | Get streak definition. |
144
+ | `GET` | `/streaks/rankings` | Get global streak rankings. |
145
+ | `GET` | `/users/:id/streak` | Get user's current streak state. |
146
+
147
+ ---
148
+
149
+ ## Points
150
+
151
+ | Method | Path | Description |
152
+ |--------|------|-------------|
153
+ | `GET` | `/points/:key` | Get points system definition. |
154
+ | `GET` | `/points/summary` | Get summary of all points systems. |
155
+ | `GET` | `/points/:key/boosts` | List active boosts for a points system. |
156
+ | `GET` | `/points/:key/levels` | List level tiers for a points system. |
157
+ | `GET` | `/users/:id/points` | Get all points balances for a user. |
158
+ | `GET` | `/users/:id/points/:key` | Get specific points balance for a user. |
159
+
160
+ ---
161
+
162
+ ## Leaderboards
163
+
164
+ | Method | Path | Description |
165
+ |--------|------|-------------|
166
+ | `GET` | `/leaderboards` | List all leaderboards for the tenant. |
167
+ | `GET` | `/leaderboards/:key` | Get leaderboard with current rankings. |
168
+ | `GET` | `/users/:id/leaderboards` | Get user's positions across all leaderboards. |
169
+
170
+ ---
171
+
172
+ ## Webhooks
173
+
174
+ | Method | Path | Description |
175
+ |--------|------|-------------|
176
+ | `GET` | `/webhooks` | List webhook configurations. |
177
+ | `POST` | `/webhooks` | Create webhook. Body: `{ url, secret, eventTypes[] }`. |
178
+ | `GET` | `/webhooks/:id` | Get webhook config. |
179
+ | `PATCH` | `/webhooks/:id` | Update webhook config. |
180
+ | `DELETE` | `/webhooks/:id` | Delete webhook. |
181
+ | `GET` | `/webhooks/:id/logs` | Get delivery logs for a webhook. |
182
+
183
+ **Event types:**
184
+ `achievement.completed`, `streak.extended`, `streak.lost`, `points.changed`, `points.level_changed`, `points.boost_started`, `notification.email_sent`, `notification.email_failed`, `notification.push_sent`, `notification.push_failed`, `user.deleted`, `user.anonymized`
185
+
186
+ **Security:** HMAC-SHA256 signature in `X-Webhook-Signature` header. Verify using your webhook secret.
187
+
188
+ ---
189
+
190
+ ## Attributes
191
+
192
+ | Method | Path | Description |
193
+ |--------|------|-------------|
194
+ | `GET` | `/attributes` | List attribute definitions. |
195
+ | `POST` | `/attributes` | Create attribute definition. Body: `{ key, name, scope: "user"\|"event", type: "string"\|"number"\|"boolean"\|"date" }`. |
196
+ | `DELETE` | `/attributes/:key` | Delete attribute definition. |
197
+
198
+ ---
199
+
200
+ ## Notifications Config
201
+
202
+ | Method | Path | Description |
203
+ |--------|------|-------------|
204
+ | `POST` | `/tenants/me/email-config` | Set email provider. Body: `{ provider: "resend", apiKey, fromAddress }`. |
205
+ | `GET` | `/tenants/me/email-config` | Get email config. |
206
+ | `POST` | `/tenants/me/email-config/verify` | Verify email configuration. |
207
+ | `DELETE` | `/tenants/me/email-config` | Remove email config. |
208
+ | `POST` | `/tenants/me/push-config` | Set push provider. Body: `{ provider: "expo", credentials }`. |
209
+ | `GET` | `/tenants/me/push-config` | Get push config. |
210
+ | `DELETE` | `/tenants/me/push-config` | Remove push config. |
211
+
212
+ ---
213
+
214
+ ## Health
215
+
216
+ | Method | Path | Description |
217
+ |--------|------|-------------|
218
+ | `GET` | `/health` | Basic health check. No auth required. |
219
+ | `GET` | `/health/detailed` | Detailed health (DB, Redis status). No auth required. |
220
+
221
+ ---
222
+
223
+ ## Admin API (/admin/v1)
224
+
225
+ The Admin API uses magic-link authentication (cookie `gc_session`) instead of API keys. These endpoints are for the dashboard, not for production app integration.
226
+
227
+ ### Auth
228
+ | Method | Path | Description |
229
+ |--------|------|-------------|
230
+ | `POST` | `/admin/v1/auth/magic-link` | Send magic link. Body: `{ tenantId, email }`. |
231
+ | `POST` | `/admin/v1/auth/verify` | Verify magic link token. Body: `{ token }`. Sets cookie. |
232
+ | `POST` | `/admin/v1/auth/logout` | Clear session. |
233
+
234
+ ### Management Endpoints (admin only)
235
+
236
+ Full CRUD available for all domains:
237
+ - **Metrics:** `GET/POST /admin/v1/metrics`, `GET/PATCH/DELETE /admin/v1/metrics/:key`
238
+ - **Achievements:** `GET/POST /admin/v1/achievements`, `GET/PATCH/DELETE /admin/v1/achievements/:key`
239
+ - **Streaks:** `GET/POST /admin/v1/streaks`, `GET/PATCH/DELETE /admin/v1/streaks/:key`. Also: `POST /admin/v1/streaks/:key/restore` (restore lost streak), `POST /admin/v1/streaks/:key/freezes` (grant freezes)
240
+ - **Points:** `GET/POST /admin/v1/points`, `GET/PATCH/DELETE /admin/v1/points/:key`. Also: `POST /admin/v1/points/:key/boosts` (create boost)
241
+ - **Leaderboards:** `GET/POST /admin/v1/leaderboards`, `GET/PATCH/DELETE /admin/v1/leaderboards/:key`
242
+ - **Users:** `GET /admin/v1/users` (list, search, filter), `GET /admin/v1/users/:id`
243
+ - **Audit Logs:** `GET /admin/v1/audit-logs`
244
+ - **Notification Templates:** `GET/POST /admin/v1/notifications/templates`, `GET/PATCH/DELETE /admin/v1/notifications/templates/:id`
245
+
246
+ ---
247
+
248
+ ## Rate Limiting
249
+
250
+ | Tier | Limit | Applies to |
251
+ |------|-------|-----------|
252
+ | TIER_1 | 10 req/s | Metric events (`POST /metrics/:key/event`), achievement completions, all writes |
253
+ | TIER_2 | 100 req/s | Reads and lighter endpoints |
254
+
255
+ Rate limit headers are included in responses. Exceeding returns `429 Too Many Requests`.
256
+
257
+ ---
258
+
259
+ ## Common Response Codes
260
+
261
+ | Code | Meaning |
262
+ |------|---------|
263
+ | `200` | Success |
264
+ | `201` | Created |
265
+ | `202` | Idempotent replay — duplicate event accepted, cached response returned |
266
+ | `400` | Validation error — check request body |
267
+ | `401` | Missing or invalid API key |
268
+ | `404` | Resource not found |
269
+ | `409` | Conflict (e.g., duplicate metric key) |
270
+ | `429` | Rate limited — slow down |
271
+ | `500` | Server error — check GameCore logs |