zuburi-game-platform 0.1.3 → 0.2.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 (50) hide show
  1. package/README.md +74 -103
  2. package/dist/achievements/listAchievements.d.ts.map +1 -1
  3. package/dist/achievements/listAchievements.js +1 -1
  4. package/dist/achievements/listAchievements.js.map +1 -1
  5. package/dist/client/createGamePlatformClient.d.ts +1 -2
  6. package/dist/client/createGamePlatformClient.d.ts.map +1 -1
  7. package/dist/client/createGamePlatformClient.js.map +1 -1
  8. package/dist/client/types.d.ts +3 -3
  9. package/dist/client/types.d.ts.map +1 -1
  10. package/dist/errors/GamePlatformError.d.ts +1 -1
  11. package/dist/errors/GamePlatformError.d.ts.map +1 -1
  12. package/dist/errors/GamePlatformError.js.map +1 -1
  13. package/dist/errors/normalizeError.d.ts.map +1 -1
  14. package/dist/errors/normalizeError.js +0 -1
  15. package/dist/errors/normalizeError.js.map +1 -1
  16. package/dist/events/emitEvent.d.ts +2 -2
  17. package/dist/events/emitEvent.d.ts.map +1 -1
  18. package/dist/events/emitEvent.js +4 -4
  19. package/dist/events/emitEvent.js.map +1 -1
  20. package/dist/index.d.ts +2 -1
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +1 -0
  23. package/dist/index.js.map +1 -1
  24. package/dist/internal/callRpc.js +1 -1
  25. package/dist/internal/mappers.d.ts +1 -1
  26. package/dist/internal/mappers.d.ts.map +1 -1
  27. package/dist/internal/mappers.js +2 -3
  28. package/dist/internal/mappers.js.map +1 -1
  29. package/dist/login-bonus/getStatus.d.ts.map +1 -1
  30. package/dist/login-bonus/getStatus.js +1 -1
  31. package/dist/login-bonus/getStatus.js.map +1 -1
  32. package/dist/points/getAccount.d.ts.map +1 -1
  33. package/dist/points/getAccount.js +1 -1
  34. package/dist/points/getAccount.js.map +1 -1
  35. package/dist/state/getState.d.ts.map +1 -1
  36. package/dist/state/getState.js +1 -1
  37. package/dist/state/getState.js.map +1 -1
  38. package/dist/types/event.d.ts +38 -14
  39. package/dist/types/event.d.ts.map +1 -1
  40. package/dist/types/event.js +9 -1
  41. package/dist/types/event.js.map +1 -1
  42. package/package.json +2 -2
  43. package/dist/events/idempotency.d.ts +0 -2
  44. package/dist/events/idempotency.d.ts.map +0 -1
  45. package/dist/events/idempotency.js +0 -14
  46. package/dist/events/idempotency.js.map +0 -1
  47. package/dist/points/listTransactions.d.ts +0 -5
  48. package/dist/points/listTransactions.d.ts.map +0 -1
  49. package/dist/points/listTransactions.js +0 -17
  50. package/dist/points/listTransactions.js.map +0 -1
package/README.md CHANGED
@@ -1,120 +1,118 @@
1
1
  # zuburi-game-platform
2
2
 
3
- ZUBURI のゲームから ZUBURI Game Platform を利用するための、React 非依存 TypeScript SDK です。
4
-
5
- このパッケージは **npmjs.org の public package** として配布します。リポジトリ全体ではなく、`packages/game-platform` の内容だけが publish 対象です。
6
-
7
- ## Package
8
-
9
- ```text
10
- Package: zuburi-game-platform
11
- Registry: https://registry.npmjs.org/
12
- ```
3
+ ZUBURI のゲームから ZUBURI Game Platform を利用するための React 非依存 TypeScript SDK です。
13
4
 
14
5
  ## Install
15
6
 
16
- GitHub Packages 用の `.npmrc` や GitHub 認証は不要です。
17
-
18
7
  ```bash
19
8
  pnpm add zuburi-game-platform @supabase/supabase-js
20
9
  ```
21
10
 
22
- npm / yarn など、npm registry を利用できる別の package manager からも通常どおり install できます。
23
-
24
11
  ## Basic usage
25
12
 
26
- SDK は Supabase Client を生成しません。ゲームが既に利用している、ログイン Session 付きの Client を注入します。
27
-
28
13
  ```ts
29
- import { createGamePlatformClient } from 'zuburi-game-platform';
30
- import { supabase } from '../lib/supabase';
14
+ import { createGamePlatformClient } from 'zuburi-game-platform'
15
+ import { supabase } from '../lib/supabase'
31
16
 
32
17
  export const platform = createGamePlatformClient({
33
18
  supabase,
34
19
  gameId: 'coffee_roaster',
35
- });
36
-
37
- const state = await platform.getState();
38
- const account = await platform.points.getAccount();
39
- const achievements = await platform.achievements.list();
20
+ })
40
21
  ```
41
22
 
42
- `service_role` / Supabase Secret key / `userId` は SDK に渡しません。ユーザーは Backend が `auth.uid()` から判定します。
23
+ SDK は Supabase Client を生成しません。`service_role` / Secret key / `userId` は渡しません。
43
24
 
44
- ## Client events
25
+ ## Storage policy
45
26
 
46
- Admin `client` または `both` に設定された Event のみ送信できます。
27
+ Game Platform は履歴を蓄積せず、現在状態を保持する state-first 構成です。
47
28
 
48
- ```ts
49
- await platform.events.emit({
50
- type: 'tutorial_completed',
51
- sourceId: 'tutorial:v1',
52
- });
53
- ```
29
+ 保持する主な値:
54
30
 
55
- `sourceId` がある場合、標準の idempotency key は次です。
31
+ - ポイント現在残高・累積獲得・累積消費
32
+ - 実績進捗・解除状態
33
+ - ログインボーナス現在状態
34
+ - 各ゲームの必要な集計値
35
+
36
+ イベント履歴、ポイント増減履歴、開封履歴などは原則保存しません。
37
+
38
+ 詳細: [`../../docs/STATE_FIRST_STORAGE_POLICY.md`](../../docs/STATE_FIRST_STORAGE_POLICY.md)
39
+
40
+ ## Client events
41
+
42
+ ゲームから送信できるイベントは Platform 標準の4種類だけです。
56
43
 
57
44
  ```text
58
- {gameId}:{eventType}:{sourceId}
59
- ```
45
+ game_started
46
+ ゲーム開始
60
47
 
61
- 明示的な `idempotencyKey` がある場合はそちらを優先します。
48
+ game_finished
49
+ ゲーム終了。value に最終スコアを付けてもよい
62
50
 
63
- ## Typed game-local events
51
+ personal_best_updated
52
+ 自己ベスト更新。value 必須
53
+
54
+ item_obtained
55
+ アイテム獲得。metadata.itemId 必須、quantity は任意
56
+ ```
64
57
 
65
58
  ```ts
66
- type CoffeeRoasterEvents = {
67
- tutorial_completed: {
68
- value?: never;
69
- metadata?: never;
70
- };
71
-
72
- roast_completed: {
73
- value: number;
74
- metadata?: {
75
- difficulty?: 'normal' | 'hard';
76
- };
77
- };
78
- };
79
-
80
- const platform = createGamePlatformClient<CoffeeRoasterEvents>({
81
- supabase,
82
- gameId: 'coffee_roaster',
83
- });
59
+ import { PLATFORM_EVENTS } from 'zuburi-game-platform'
60
+
61
+ await platform.events.emit({
62
+ type: PLATFORM_EVENTS.GAME_FINISHED,
63
+ sourceId: 'run:123',
64
+ value: 85,
65
+ })
66
+
67
+ await platform.events.emit({
68
+ type: PLATFORM_EVENTS.PERSONAL_BEST_UPDATED,
69
+ value: 120,
70
+ })
71
+
72
+ await platform.events.emit({
73
+ type: PLATFORM_EVENTS.ITEM_OBTAINED,
74
+ metadata: {
75
+ itemId: 'golden-bean',
76
+ quantity: 1,
77
+ },
78
+ })
84
79
  ```
85
80
 
86
- Event Definition はゲーム側で型を持ち、共通 SDK 自体へゲーム固有 Event をハードコードしません。
81
+ 独自 EventMap をゲーム側から追加する API はありません。TypeScript の型を回避して任意文字列を渡しても SDK が送信前に拒否します。
82
+
83
+ `sourceId` は Event Definition で必要な場合の識別情報です。イベントはDBへ永続保存されません。
84
+
85
+ 永続イベント行による idempotency 管理を行わないため、SDKは**書き込みRPCを自動リトライしません**。読み取りRPCのみ一時エラー時に最大1回リトライします。
87
86
 
88
87
  ## Points
89
88
 
90
89
  ```ts
91
- const account = await platform.points.getAccount();
90
+ const account = await platform.points.getAccount()
91
+
92
+ account.balance
93
+ account.lifetimeEarned
94
+ account.lifetimeSpent
92
95
  ```
93
96
 
94
- ポイント額は Backend / Admin ルールで決定します。SDK にポイント履歴取得、`points.add()`、`points.set()` はありません。
97
+ ポイント履歴取得、`points.add()`、`points.set()` はありません。
95
98
 
96
99
  ## Achievements
97
100
 
98
101
  ```ts
99
- const achievements = await platform.achievements.list();
102
+ const achievements = await platform.achievements.list()
100
103
  ```
101
104
 
102
- 現在のゲーム固有実績と Global 実績を取得します。進捗・解除判定・報酬付与は Backend が行います。
105
+ 進捗・解除判定・報酬付与は Backend が行います。
103
106
 
104
107
  ## Login bonus
105
108
 
106
109
  ```ts
107
- const status = await platform.loginBonus.getStatus();
108
- const result = await platform.loginBonus.claimAvailable();
110
+ const status = await platform.loginBonus.getStatus()
111
+ const result = await platform.loginBonus.claimAvailable()
112
+ await platform.loginBonus.claimProgram('summer_campaign_2026')
109
113
  ```
110
114
 
111
- 特定 Campaign だけ受け取る場合:
112
-
113
- ```ts
114
- await platform.loginBonus.claimProgram('summer_campaign_2026');
115
- ```
116
-
117
- `claimAvailable()` は Backend が現在有効な Standard と Campaign を選択します。ゲーム固有 Standard がある場合は Global Standard より優先されます。
115
+ 受取履歴を毎回追加せず、ユーザー・プログラムごとの現在状態を更新します。
118
116
 
119
117
  ## Development write guard
120
118
 
@@ -123,10 +121,10 @@ const platform = createGamePlatformClient({
123
121
  supabase,
124
122
  gameId: 'coffee_roaster',
125
123
  writesEnabled: import.meta.env.VITE_DEVELOPMENT_MODE !== 'true',
126
- });
124
+ })
127
125
  ```
128
126
 
129
- `writesEnabled=false` の場合、Event送信とLogin Bonus claimは `WRITE_DISABLED` になります。これは開発事故防止であり、セキュリティ境界ではありません。
127
+ `writesEnabled=false` の場合、Event送信とLogin Bonus claimは `WRITE_DISABLED` になります。
130
128
 
131
129
  ## Security boundary
132
130
 
@@ -135,52 +133,25 @@ SDKは意図的に以下を提供しません。
135
133
  ```text
136
134
  points.add()
137
135
  points.set()
136
+ points.listTransactions()
138
137
  achievements.unlock()
139
138
  achievements.setProgress()
140
139
  events.emitTrusted()
141
140
  ```
142
141
 
143
- スコア、勝敗、ゲーム終了など改ざん耐性が必要な処理は、ゲーム固有 RPC で検証して Trusted Event を発火してください。
142
+ スコア・勝敗など改変耐性が必要な処理はゲーム固有RPCで検証してください。
144
143
 
145
144
  ## Repository development
146
145
 
147
- この monorepo は pnpm workspace を使用します。repository root で実行してください。
148
-
149
146
  ```bash
150
147
  pnpm install
151
148
  pnpm check
152
149
  ```
153
150
 
154
- workspace 定義は `pnpm-workspace.yaml`、使用する pnpm version root `package.json` の `packageManager` で固定しています。
151
+ SDK build は `dist` を削除してから生成します。
155
152
 
156
153
  ## Publishing
157
154
 
158
- 通常、release 用のローカル build version 更新は不要です。
159
-
160
- `main` へ commit / push すると `Release Game Platform SDK` GitHub Action が自動で起動し、必要なら patch version を +1 したうえで、GitHub Actions 上で次を実行します。
161
-
162
- ```text
163
- pnpm install
164
- pnpm run release
165
- npm pack --dry-run
166
- version / dist / release-build.json の自動 commit
167
- tag 作成
168
- npmjs.org publish
169
- GitHub Release 作成
170
- ```
171
-
172
- release 用 bot commit は次の形式です。
173
-
174
- ```text
175
- chore(release): zuburi-game-platform v0.1.1 [skip ci]
176
- ```
177
-
178
- 失敗途中の release を手動再実行した場合、現在の release tag が main HEAD を指していれば同じ version を再利用します。
179
-
180
- 手動再実行は GitHub の Actions → `Release Game Platform SDK` → `Run workflow` から行えます。
181
-
182
- 詳細は [`../../docs/PUBLISHING.md`](../../docs/PUBLISHING.md) を参照してください。
183
-
184
- ## Supported backend
155
+ `main` への変更は既存の Release workflow の対象です。
185
156
 
186
- ZUBURI Game Platform Backend API v1 を対象とします。
157
+ 詳細: [`../../docs/PUBLISHING.md`](../../docs/PUBLISHING.md)
@@ -1 +1 @@
1
- {"version":3,"file":"listAchievements.d.ts","sourceRoot":"","sources":["../../src/achievements/listAchievements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAGxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAE/D,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAG7B"}
1
+ {"version":3,"file":"listAchievements.d.ts","sourceRoot":"","sources":["../../src/achievements/listAchievements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAGxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAE/D,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAQ7B"}
@@ -2,7 +2,7 @@ import { callRpc } from "../internal/callRpc.js";
2
2
  import { mapAchievementState } from "../internal/mappers.js";
3
3
  import { array, record } from "../internal/validators.js";
4
4
  export async function listAchievements(supabase, gameId, logger) {
5
- const raw = await callRpc(supabase, "game_platform_v1_list_achievements", { p_game_id: gameId }, { logger });
5
+ const raw = await callRpc(supabase, "game_platform_v1_list_achievements", { p_game_id: gameId }, { logger, retries: 1 });
6
6
  return array(record(raw, "achievement response").items, "achievement response.items").map(mapAchievementState);
7
7
  }
8
8
  //# sourceMappingURL=listAchievements.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"listAchievements.js","sourceRoot":"","sources":["../../src/achievements/listAchievements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA0B,MAAM,wBAAwB,CAAA;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAIzD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAA2B,EAC3B,MAAc,EACd,MAA2B;IAE3B,MAAM,GAAG,GAAG,MAAM,OAAO,CAAU,QAAQ,EAAE,oCAAoC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;IACrH,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC,KAAK,EAAE,4BAA4B,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;AAChH,CAAC"}
1
+ {"version":3,"file":"listAchievements.js","sourceRoot":"","sources":["../../src/achievements/listAchievements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA0B,MAAM,wBAAwB,CAAA;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAIzD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAA2B,EAC3B,MAAc,EACd,MAA2B;IAE3B,MAAM,GAAG,GAAG,MAAM,OAAO,CACvB,QAAQ,EACR,oCAAoC,EACpC,EAAE,SAAS,EAAE,MAAM,EAAE,EACrB,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CACvB,CAAA;IACD,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC,KAAK,EAAE,4BAA4B,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;AAChH,CAAC"}
@@ -1,4 +1,3 @@
1
- import type { EventMap, DefaultEventMap } from "../types/event.js";
2
1
  import type { CreateGamePlatformClientOptions, GamePlatformClient } from "./types.js";
3
- export declare function createGamePlatformClient<TEvents extends EventMap = DefaultEventMap>(options: CreateGamePlatformClientOptions): GamePlatformClient<TEvents>;
2
+ export declare function createGamePlatformClient(options: CreateGamePlatformClientOptions): GamePlatformClient;
4
3
  //# sourceMappingURL=createGamePlatformClient.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createGamePlatformClient.d.ts","sourceRoot":"","sources":["../../src/client/createGamePlatformClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAqB,MAAM,mBAAmB,CAAA;AAUrF,OAAO,KAAK,EAAE,+BAA+B,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAErF,wBAAgB,wBAAwB,CACtC,OAAO,SAAS,QAAQ,GAAG,eAAe,EAC1C,OAAO,EAAE,+BAA+B,GAAG,kBAAkB,CAAC,OAAO,CAAC,CA2BvE"}
1
+ {"version":3,"file":"createGamePlatformClient.d.ts","sourceRoot":"","sources":["../../src/client/createGamePlatformClient.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,+BAA+B,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAErF,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,+BAA+B,GAAG,kBAAkB,CA2BrG"}
@@ -1 +1 @@
1
- {"version":3,"file":"createGamePlatformClient.js","sourceRoot":"","sources":["../../src/client/createGamePlatformClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAA;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAA;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAA;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAI/C,MAAM,UAAU,wBAAwB,CAEtC,OAAwC;IACxC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;IACpC,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,iBAAiB,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAA;IAEhF,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAwC,CAAA;IACjE,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,IAAI,CAAA;IACnD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;IAE7B,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,MAAM;QACN,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;QAClD,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,CAAuC,KAAwC,EAAE,EAAE,CACvF,SAAS,CAAiB,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC;SAC5E,CAAC;QACF,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;YACpB,UAAU,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC;SACpD,CAAC;QACF,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC;YAC1B,IAAI,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;SACvD,CAAC;QACF,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC;YACxB,SAAS,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;YAC9D,cAAc,EAAE,GAAG,EAAE,CAAC,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC;YACzF,YAAY,EAAE,CAAC,SAAiB,EAAE,EAAE,CAAC,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,CAAC;SAChH,CAAC;KACH,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"createGamePlatformClient.js","sourceRoot":"","sources":["../../src/client/createGamePlatformClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAA;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAA;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAA;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAI/C,MAAM,UAAU,wBAAwB,CAAC,OAAwC;IAC/E,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;IACpC,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,iBAAiB,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAA;IAEhF,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAwC,CAAA;IACjE,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,IAAI,CAAA;IACnD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;IAE7B,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,MAAM;QACN,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;QAClD,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,CAAkC,KAA+B,EAAE,EAAE,CACzE,SAAS,CAAQ,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC;SACnE,CAAC;QACF,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;YACpB,UAAU,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC;SACpD,CAAC;QACF,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC;YAC1B,IAAI,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;SACvD,CAAC;QACF,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC;YACxB,SAAS,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;YAC9D,cAAc,EAAE,GAAG,EAAE,CAAC,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC;YACzF,YAAY,EAAE,CAAC,SAAiB,EAAE,EAAE,CAAC,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,CAAC;SAChH,CAAC;KACH,CAAC,CAAA;AACJ,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import type { GamePlatformLogger } from "../types/api.js";
2
2
  import type { AchievementState } from "../types/achievement.js";
3
- import type { DefaultEventMap, EmitEventInputFor, EventMap, EventResult } from "../types/event.js";
3
+ import type { EmitEventInputFor, EventResult, PlatformEventType } from "../types/event.js";
4
4
  import type { LoginBonusClaimResult, LoginBonusSingleClaimResult, LoginBonusStatus } from "../types/loginBonus.js";
5
5
  import type { PointAccount } from "../types/point.js";
6
6
  import type { GamePlatformState } from "../types/state.js";
@@ -13,11 +13,11 @@ export type CreateGamePlatformClientOptions = {
13
13
  writesEnabled?: boolean;
14
14
  logger?: GamePlatformLogger;
15
15
  };
16
- export type GamePlatformClient<TEvents extends EventMap = DefaultEventMap> = {
16
+ export type GamePlatformClient = {
17
17
  readonly gameId: string;
18
18
  getState: () => Promise<GamePlatformState>;
19
19
  events: {
20
- emit: <TType extends keyof TEvents & string>(input: EmitEventInputFor<TEvents, TType>) => Promise<EventResult>;
20
+ emit: <TType extends PlatformEventType>(input: EmitEventInputFor<TType>) => Promise<EventResult>;
21
21
  };
22
22
  points: {
23
23
  getAccount: () => Promise<PointAccount>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAClG,OAAO,KAAK,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAClH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAE1D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,+BAA+B,GAAG;IAC5C,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,MAAM,CAAC,EAAE,kBAAkB,CAAA;CAC5B,CAAA;AAED,MAAM,MAAM,kBAAkB,CAAC,OAAO,SAAS,QAAQ,GAAG,eAAe,IAAI;IAC3E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,EAAE,MAAM,OAAO,CAAC,iBAAiB,CAAC,CAAA;IAC1C,MAAM,EAAE;QACN,IAAI,EAAE,CAAC,KAAK,SAAS,MAAM,OAAO,GAAG,MAAM,EACzC,KAAK,EAAE,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,KACrC,OAAO,CAAC,WAAW,CAAC,CAAA;KAC1B,CAAA;IACD,MAAM,EAAE;QACN,UAAU,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAA;KACxC,CAAA;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,MAAM,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAA;KACxC,CAAA;IACD,UAAU,EAAE;QACV,SAAS,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,CAAA;QAC1C,cAAc,EAAE,MAAM,OAAO,CAAC,qBAAqB,CAAC,CAAA;QACpD,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,2BAA2B,CAAC,CAAA;KAC1E,CAAA;CACF,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAC1F,OAAO,KAAK,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAClH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAE1D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,+BAA+B,GAAG;IAC5C,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,MAAM,CAAC,EAAE,kBAAkB,CAAA;CAC5B,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,EAAE,MAAM,OAAO,CAAC,iBAAiB,CAAC,CAAA;IAC1C,MAAM,EAAE;QACN,IAAI,EAAE,CAAC,KAAK,SAAS,iBAAiB,EACpC,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC,KAC5B,OAAO,CAAC,WAAW,CAAC,CAAA;KAC1B,CAAA;IACD,MAAM,EAAE;QACN,UAAU,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAA;KACxC,CAAA;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,MAAM,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAA;KACxC,CAAA;IACD,UAAU,EAAE;QACV,SAAS,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,CAAA;QAC1C,cAAc,EAAE,MAAM,OAAO,CAAC,qBAAqB,CAAC,CAAA;QACpD,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,2BAA2B,CAAC,CAAA;KAC1E,CAAA;CACF,CAAA"}
@@ -1,4 +1,4 @@
1
- export type GamePlatformErrorCode = "AUTH_REQUIRED" | "PROFILE_REQUIRED" | "GAME_NOT_FOUND" | "GAME_INACTIVE" | "EVENT_NOT_FOUND" | "EVENT_NOT_ALLOWED" | "SOURCE_ID_REQUIRED" | "INVALID_EVENT_VALUE" | "INVALID_METADATA" | "IDEMPOTENCY_CONFLICT" | "LOGIN_PROGRAM_NOT_FOUND" | "LOGIN_PROGRAM_NOT_ELIGIBLE" | "NETWORK_ERROR" | "RPC_ERROR" | "INVALID_RESPONSE" | "INVALID_ARGUMENT" | "API_VERSION_MISMATCH" | "WRITE_DISABLED";
1
+ export type GamePlatformErrorCode = "AUTH_REQUIRED" | "PROFILE_REQUIRED" | "GAME_NOT_FOUND" | "GAME_INACTIVE" | "EVENT_NOT_FOUND" | "EVENT_NOT_ALLOWED" | "SOURCE_ID_REQUIRED" | "INVALID_EVENT_VALUE" | "INVALID_METADATA" | "LOGIN_PROGRAM_NOT_FOUND" | "LOGIN_PROGRAM_NOT_ELIGIBLE" | "NETWORK_ERROR" | "RPC_ERROR" | "INVALID_RESPONSE" | "INVALID_ARGUMENT" | "API_VERSION_MISMATCH" | "WRITE_DISABLED";
2
2
  export declare class GamePlatformError extends Error {
3
3
  readonly code: GamePlatformErrorCode;
4
4
  readonly retryable: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"GamePlatformError.d.ts","sourceRoot":"","sources":["../../src/errors/GamePlatformError.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAC7B,eAAe,GACf,kBAAkB,GAClB,gBAAgB,GAChB,eAAe,GACf,iBAAiB,GACjB,mBAAmB,GACnB,oBAAoB,GACpB,qBAAqB,GACrB,kBAAkB,GAClB,sBAAsB,GACtB,yBAAyB,GACzB,4BAA4B,GAC5B,eAAe,GACf,WAAW,GACX,kBAAkB,GAClB,kBAAkB,GAClB,sBAAsB,GACtB,gBAAgB,CAAA;AAEpB,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAA;IACpC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,SAAkB,KAAK,EAAE,OAAO,CAAA;gBAG9B,IAAI,EAAE,qBAAqB,EAC3B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO;CAQzD"}
1
+ {"version":3,"file":"GamePlatformError.d.ts","sourceRoot":"","sources":["../../src/errors/GamePlatformError.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAC7B,eAAe,GACf,kBAAkB,GAClB,gBAAgB,GAChB,eAAe,GACf,iBAAiB,GACjB,mBAAmB,GACnB,oBAAoB,GACpB,qBAAqB,GACrB,kBAAkB,GAClB,yBAAyB,GACzB,4BAA4B,GAC5B,eAAe,GACf,WAAW,GACX,kBAAkB,GAClB,kBAAkB,GAClB,sBAAsB,GACtB,gBAAgB,CAAA;AAEpB,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAA;IACpC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,SAAkB,KAAK,EAAE,OAAO,CAAA;gBAG9B,IAAI,EAAE,qBAAqB,EAC3B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO;CAQzD"}
@@ -1 +1 @@
1
- {"version":3,"file":"GamePlatformError.js","sourceRoot":"","sources":["../../src/errors/GamePlatformError.ts"],"names":[],"mappings":"AAoBA,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IACjC,IAAI,CAAuB;IAC3B,SAAS,CAAS;IACT,KAAK,CAAS;IAEhC,YACE,IAA2B,EAC3B,OAAe,EACf,UAAoD,EAAE;QAEtD,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAA;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAA;QAC3C,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;IAC5B,CAAC;CACF"}
1
+ {"version":3,"file":"GamePlatformError.js","sourceRoot":"","sources":["../../src/errors/GamePlatformError.ts"],"names":[],"mappings":"AAmBA,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IACjC,IAAI,CAAuB;IAC3B,SAAS,CAAS;IACT,KAAK,CAAS;IAEhC,YACE,IAA2B,EAC3B,OAAe,EACf,UAAoD,EAAE;QAEtD,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAA;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAA;QAC3C,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;IAC5B,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"normalizeError.d.ts","sourceRoot":"","sources":["../../src/errors/normalizeError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAA8B,MAAM,wBAAwB,CAAA;AAsDtF,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,CAwBhE"}
1
+ {"version":3,"file":"normalizeError.d.ts","sourceRoot":"","sources":["../../src/errors/normalizeError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAA8B,MAAM,wBAAwB,CAAA;AAqDtF,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,CAwBhE"}
@@ -9,7 +9,6 @@ const BUSINESS_CODES = new Set([
9
9
  "SOURCE_ID_REQUIRED",
10
10
  "INVALID_EVENT_VALUE",
11
11
  "INVALID_METADATA",
12
- "IDEMPOTENCY_CONFLICT",
13
12
  "LOGIN_PROGRAM_NOT_FOUND",
14
13
  "LOGIN_PROGRAM_NOT_ELIGIBLE",
15
14
  ]);
@@ -1 +1 @@
1
- {"version":3,"file":"normalizeError.js","sourceRoot":"","sources":["../../src/errors/normalizeError.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"normalizeError.js","sourceRoot":"","sources":["../../src/errors/normalizeError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAA8B,MAAM,wBAAwB,CAAA;AAEtF,MAAM,cAAc,GAAG,IAAI,GAAG,CAAwB;IACpD,eAAe;IACf,kBAAkB;IAClB,gBAAgB;IAChB,eAAe;IACf,iBAAiB;IACjB,mBAAmB;IACnB,oBAAoB;IACpB,qBAAqB;IACrB,kBAAkB;IAClB,yBAAyB;IACzB,4BAA4B;CAC7B,CAAC,CAAA;AASF,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,KAAK,YAAY,KAAK;QAAE,OAAO,KAAK,CAAC,OAAO,CAAA;IAChD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC3C,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;QAC7D,MAAM,OAAO,GAAI,KAAsB,CAAC,OAAO,CAAA;QAC/C,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,OAAO,CAAA;IACjD,CAAC;IACD,OAAO,mBAAmB,CAAA;AAC5B,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAe;IAC1C,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;QAClC,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;YACvF,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc,EAAE,OAAe;IAC1D,IAAI,KAAK,YAAY,SAAS,IAAI,kCAAkC,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAA;IAC/F,OAAO,wFAAwF,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAC/G,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IACrD,MAAM,IAAI,GAAI,KAAsB,CAAC,IAAI,CAAA;IACzC,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;AACjG,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,IAAI,KAAK,YAAY,iBAAiB;QAAE,OAAO,KAAK,CAAA;IAEpD,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;IAChC,MAAM,YAAY,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAA;IACjD,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,IAAI,iBAAiB,CAAC,YAAY,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;IACvE,CAAC;IAED,IAAI,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;QACxC,OAAO,IAAI,iBAAiB,CAAC,eAAe,EAAE,OAAO,EAAE;YACrD,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,KAAK;SACb,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,iBAAiB,CAAC,WAAW,EAAE,OAAO,EAAE;YACjD,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,KAAK;SACb,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,IAAI,iBAAiB,CAAC,WAAW,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;AACtE,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { type SupabaseRpcClient } from "../internal/callRpc.js";
2
2
  import type { GamePlatformLogger } from "../types/api.js";
3
- import type { EmitEventInputFor, EventMap, EventResult } from "../types/event.js";
4
- export declare function emitEvent<TEvents extends EventMap, TType extends keyof TEvents & string>(supabase: SupabaseRpcClient, gameId: string, writesEnabled: boolean, input: EmitEventInputFor<TEvents, TType>, logger?: GamePlatformLogger): Promise<EventResult>;
3
+ import { type EmitEventInputFor, type EventResult, type PlatformEventType } from "../types/event.js";
4
+ export declare function emitEvent<TType extends PlatformEventType>(supabase: SupabaseRpcClient, gameId: string, writesEnabled: boolean, input: EmitEventInputFor<TType>, logger?: GamePlatformLogger): Promise<EventResult>;
5
5
  //# sourceMappingURL=emitEvent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"emitEvent.d.ts","sourceRoot":"","sources":["../../src/events/emitEvent.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAExE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAGjF,wBAAsB,SAAS,CAC7B,OAAO,SAAS,QAAQ,EACxB,KAAK,SAAS,MAAM,OAAO,GAAG,MAAM,EAEpC,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,OAAO,EACtB,KAAK,EAAE,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,EACxC,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,WAAW,CAAC,CAgCtB"}
1
+ {"version":3,"file":"emitEvent.d.ts","sourceRoot":"","sources":["../../src/events/emitEvent.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAExE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,EAAuB,KAAK,iBAAiB,EAAE,KAAK,WAAW,EAAE,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAEzH,wBAAsB,SAAS,CAAC,KAAK,SAAS,iBAAiB,EAC7D,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,OAAO,EACtB,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC,EAC/B,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,WAAW,CAAC,CA2BtB"}
@@ -1,24 +1,24 @@
1
1
  import { GamePlatformError } from "../errors/GamePlatformError.js";
2
2
  import { callRpc } from "../internal/callRpc.js";
3
3
  import { mapEventResult } from "../internal/mappers.js";
4
- import { createIdempotencyKey } from "./idempotency.js";
4
+ import { isPlatformEventType } from "../types/event.js";
5
5
  export async function emitEvent(supabase, gameId, writesEnabled, input, logger) {
6
6
  if (!writesEnabled) {
7
7
  throw new GamePlatformError("WRITE_DISABLED", "Game Platform writes are disabled");
8
8
  }
9
- const idempotencyKey = createIdempotencyKey(gameId, input.type, "sourceId" in input ? input.sourceId : undefined, "idempotencyKey" in input ? input.idempotencyKey : undefined);
9
+ if (!isPlatformEventType(input.type)) {
10
+ throw new GamePlatformError("INVALID_ARGUMENT", `Unsupported platform event type: ${String(input.type)}`);
11
+ }
10
12
  const raw = await callRpc(supabase, "game_platform_v1_emit_event", {
11
13
  p_game_id: gameId,
12
14
  p_event_type: input.type,
13
15
  p_value: "value" in input ? input.value ?? null : null,
14
16
  p_source_id: "sourceId" in input ? input.sourceId ?? null : null,
15
- p_idempotency_key: idempotencyKey,
16
17
  p_metadata: "metadata" in input ? input.metadata ?? {} : {},
17
18
  }, { logger });
18
19
  const result = mapEventResult(raw);
19
20
  logger?.debug?.("Game Platform event processed", {
20
21
  eventType: input.type,
21
- duplicate: result.duplicate,
22
22
  });
23
23
  return result;
24
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"emitEvent.js","sourceRoot":"","sources":["../../src/events/emitEvent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAClE,OAAO,EAAE,OAAO,EAA0B,MAAM,wBAAwB,CAAA;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAGvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAEvD,MAAM,CAAC,KAAK,UAAU,SAAS,CAI7B,QAA2B,EAC3B,MAAc,EACd,aAAsB,EACtB,KAAwC,EACxC,MAA2B;IAE3B,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,iBAAiB,CAAC,gBAAgB,EAAE,mCAAmC,CAAC,CAAA;IACpF,CAAC;IAED,MAAM,cAAc,GAAG,oBAAoB,CACzC,MAAM,EACN,KAAK,CAAC,IAAI,EACV,UAAU,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EAChD,gBAAgB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAC7D,CAAA;IAED,MAAM,GAAG,GAAG,MAAM,OAAO,CACvB,QAAQ,EACR,6BAA6B,EAC7B;QACE,SAAS,EAAE,MAAM;QACjB,YAAY,EAAE,KAAK,CAAC,IAAI;QACxB,OAAO,EAAE,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI;QACtD,WAAW,EAAE,UAAU,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI;QAChE,iBAAiB,EAAE,cAAc;QACjC,UAAU,EAAE,UAAU,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;KAC5D,EACD,EAAE,MAAM,EAAE,CACX,CAAA;IAED,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAA;IAClC,MAAM,EAAE,KAAK,EAAE,CAAC,+BAA+B,EAAE;QAC/C,SAAS,EAAE,KAAK,CAAC,IAAI;QACrB,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CAAC,CAAA;IACF,OAAO,MAAM,CAAA;AACf,CAAC"}
1
+ {"version":3,"file":"emitEvent.js","sourceRoot":"","sources":["../../src/events/emitEvent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAClE,OAAO,EAAE,OAAO,EAA0B,MAAM,wBAAwB,CAAA;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAEvD,OAAO,EAAE,mBAAmB,EAAoE,MAAM,mBAAmB,CAAA;AAEzH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,QAA2B,EAC3B,MAAc,EACd,aAAsB,EACtB,KAA+B,EAC/B,MAA2B;IAE3B,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,iBAAiB,CAAC,gBAAgB,EAAE,mCAAmC,CAAC,CAAA;IACpF,CAAC;IAED,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,iBAAiB,CAAC,kBAAkB,EAAE,oCAAoC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC3G,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,OAAO,CACvB,QAAQ,EACR,6BAA6B,EAC7B;QACE,SAAS,EAAE,MAAM;QACjB,YAAY,EAAE,KAAK,CAAC,IAAI;QACxB,OAAO,EAAE,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI;QACtD,WAAW,EAAE,UAAU,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI;QAChE,UAAU,EAAE,UAAU,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;KAC5D,EACD,EAAE,MAAM,EAAE,CACX,CAAA;IAED,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAA;IAClC,MAAM,EAAE,KAAK,EAAE,CAAC,+BAA+B,EAAE;QAC/C,SAAS,EAAE,KAAK,CAAC,IAAI;KACtB,CAAC,CAAA;IACF,OAAO,MAAM,CAAA;AACf,CAAC"}
package/dist/index.d.ts CHANGED
@@ -4,7 +4,8 @@ export { GamePlatformError } from "./errors/GamePlatformError.js";
4
4
  export type { GamePlatformErrorCode } from "./errors/GamePlatformError.js";
5
5
  export type { GamePlatformLogger, Json, JsonObject } from "./types/api.js";
6
6
  export type { AchievementProgress, AchievementState, AchievementUnlocked } from "./types/achievement.js";
7
- export type { DefaultEventMap, EmitEventInputFor, EventMap, EventResult, EventSpec } from "./types/event.js";
7
+ export { PLATFORM_EVENTS, isPlatformEventType } from "./types/event.js";
8
+ export type { EmitEventInputFor, EmitPlatformEventInput, EventResult, PlatformEventMap, PlatformEventType } from "./types/event.js";
8
9
  export type { LoginBonusClaim, LoginBonusClaimResult, LoginBonusProgramState, LoginBonusSingleClaimResult, LoginBonusStatus } from "./types/loginBonus.js";
9
10
  export type { PointAccount } from "./types/point.js";
10
11
  export type { GamePlatformState } from "./types/state.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAA;AAC/E,YAAY,EAAE,+BAA+B,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAEhH,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACjE,YAAY,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AAE1E,YAAY,EAAE,kBAAkB,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC1E,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AACxG,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5G,YAAY,EAAE,eAAe,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAC1J,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACpD,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAA;AAC/E,YAAY,EAAE,+BAA+B,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAEhH,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACjE,YAAY,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AAE1E,YAAY,EAAE,kBAAkB,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC1E,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AACxG,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AACvE,YAAY,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,WAAW,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACnI,YAAY,EAAE,eAAe,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAC1J,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACpD,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA"}
package/dist/index.js CHANGED
@@ -1,3 +1,4 @@
1
1
  export { createGamePlatformClient } from "./client/createGamePlatformClient.js";
2
2
  export { GamePlatformError } from "./errors/GamePlatformError.js";
3
+ export { PLATFORM_EVENTS, isPlatformEventType } from "./types/event.js";
3
4
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAA;AAG/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAA;AAG/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AAKjE,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA"}
@@ -3,7 +3,7 @@ import { GamePlatformError } from "../errors/GamePlatformError.js";
3
3
  import { validateApiVersion } from "./validateApiVersion.js";
4
4
  const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
5
5
  export async function callRpc(client, name, params, options = {}) {
6
- const maxRetries = options.retries ?? 1;
6
+ const maxRetries = options.retries ?? 0;
7
7
  let attempt = 0;
8
8
  while (true) {
9
9
  const startedAt = Date.now();
@@ -1,5 +1,5 @@
1
1
  import type { AchievementProgress, AchievementState } from "../types/achievement.js";
2
- import type { EventResult } from "../types/event.js";
2
+ import { type EventResult } from "../types/event.js";
3
3
  import type { LoginBonusClaim, LoginBonusClaimResult, LoginBonusProgramState, LoginBonusSingleClaimResult, LoginBonusStatus } from "../types/loginBonus.js";
4
4
  import type { PointAccount } from "../types/point.js";
5
5
  import type { GamePlatformState } from "../types/state.js";
@@ -1 +1 @@
1
- {"version":3,"file":"mappers.d.ts","sourceRoot":"","sources":["../../src/internal/mappers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AACpF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAC3J,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAG1D,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,CAO1D;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,CAelE;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,mBAAmB,CAWxE;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,sBAAsB,CAiBpE;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,CAM7D;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe,CAa3D;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW,CAyBxD;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,iBAAiB,CAUxD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,qBAAqB,CAarE;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,2BAA2B,CAIxE"}
1
+ {"version":3,"file":"mappers.d.ts","sourceRoot":"","sources":["../../src/internal/mappers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AACpF,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAC3J,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAG1D,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,CAO1D;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,CAelE;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,mBAAmB,CAWxE;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,sBAAsB,CAiBpE;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,CAM7D;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe,CAa3D;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW,CAuBxD;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,iBAAiB,CAUxD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,qBAAqB,CAarE;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,2BAA2B,CAIxE"}
@@ -1,4 +1,5 @@
1
1
  import { GamePlatformError } from "../errors/GamePlatformError.js";
2
+ import { PLATFORM_EVENTS } from "../types/event.js";
2
3
  import { array, boolean, literal, nullableSafeInteger, nullableString, record, safeInteger, string } from "./validators.js";
3
4
  export function mapPointAccount(raw) {
4
5
  const value = record(raw, "account");
@@ -85,11 +86,9 @@ export function mapEventResult(raw) {
85
86
  return {
86
87
  apiVersion: 1,
87
88
  ok: true,
88
- duplicate: boolean(value.duplicate, "event result.duplicate"),
89
89
  event: {
90
- id: string(event.id, "event.id"),
91
90
  gameId: string(event.game_id, "event.game_id"),
92
- type: string(event.event_type, "event.event_type"),
91
+ type: literal(event.event_type, Object.values(PLATFORM_EVENTS), "event.event_type"),
93
92
  origin: literal(event.origin, ["client", "trusted"], "event.origin"),
94
93
  },
95
94
  points: {
@@ -1 +1 @@
1
- {"version":3,"file":"mappers.js","sourceRoot":"","sources":["../../src/internal/mappers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mappers.js","sourceRoot":"","sources":["../../src/internal/mappers.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"getStatus.d.ts","sourceRoot":"","sources":["../../src/login-bonus/getStatus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAGxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAE9D,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,gBAAgB,CAAC,CAG3B"}
1
+ {"version":3,"file":"getStatus.d.ts","sourceRoot":"","sources":["../../src/login-bonus/getStatus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAGxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAE9D,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,gBAAgB,CAAC,CAQ3B"}
@@ -2,7 +2,7 @@ import { callRpc } from "../internal/callRpc.js";
2
2
  import { mapLoginStatus } from "../internal/mappers.js";
3
3
  import { record } from "../internal/validators.js";
4
4
  export async function getLoginBonusStatus(supabase, gameId, logger) {
5
- const raw = await callRpc(supabase, "game_platform_v1_get_login_bonus_status", { p_game_id: gameId }, { logger });
5
+ const raw = await callRpc(supabase, "game_platform_v1_get_login_bonus_status", { p_game_id: gameId }, { logger, retries: 1 });
6
6
  return mapLoginStatus(record(raw, "login bonus response").login_bonus);
7
7
  }
8
8
  //# sourceMappingURL=getStatus.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getStatus.js","sourceRoot":"","sources":["../../src/login-bonus/getStatus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA0B,MAAM,wBAAwB,CAAA;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAIlD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,QAA2B,EAC3B,MAAc,EACd,MAA2B;IAE3B,MAAM,GAAG,GAAG,MAAM,OAAO,CAAU,QAAQ,EAAE,yCAAyC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;IAC1H,OAAO,cAAc,CAAC,MAAM,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC,WAAW,CAAC,CAAA;AACxE,CAAC"}
1
+ {"version":3,"file":"getStatus.js","sourceRoot":"","sources":["../../src/login-bonus/getStatus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA0B,MAAM,wBAAwB,CAAA;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAIlD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,QAA2B,EAC3B,MAAc,EACd,MAA2B;IAE3B,MAAM,GAAG,GAAG,MAAM,OAAO,CACvB,QAAQ,EACR,yCAAyC,EACzC,EAAE,SAAS,EAAE,MAAM,EAAE,EACrB,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CACvB,CAAA;IACD,OAAO,cAAc,CAAC,MAAM,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC,WAAW,CAAC,CAAA;AACxE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"getAccount.d.ts","sourceRoot":"","sources":["../../src/points/getAccount.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAGxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErD,wBAAsB,eAAe,CACnC,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CAGvB"}
1
+ {"version":3,"file":"getAccount.d.ts","sourceRoot":"","sources":["../../src/points/getAccount.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAGxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErD,wBAAsB,eAAe,CACnC,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CAQvB"}
@@ -2,7 +2,7 @@ import { callRpc } from "../internal/callRpc.js";
2
2
  import { mapPointAccount } from "../internal/mappers.js";
3
3
  import { record } from "../internal/validators.js";
4
4
  export async function getPointAccount(supabase, logger) {
5
- const raw = await callRpc(supabase, "game_platform_v1_get_point_account", undefined, { logger });
5
+ const raw = await callRpc(supabase, "game_platform_v1_get_point_account", undefined, { logger, retries: 1 });
6
6
  return mapPointAccount(record(raw, "point account response").account);
7
7
  }
8
8
  //# sourceMappingURL=getAccount.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getAccount.js","sourceRoot":"","sources":["../../src/points/getAccount.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA0B,MAAM,wBAAwB,CAAA;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAIlD,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,QAA2B,EAC3B,MAA2B;IAE3B,MAAM,GAAG,GAAG,MAAM,OAAO,CAAU,QAAQ,EAAE,oCAAoC,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;IACzG,OAAO,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAC,OAAO,CAAC,CAAA;AACvE,CAAC"}
1
+ {"version":3,"file":"getAccount.js","sourceRoot":"","sources":["../../src/points/getAccount.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA0B,MAAM,wBAAwB,CAAA;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAIlD,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,QAA2B,EAC3B,MAA2B;IAE3B,MAAM,GAAG,GAAG,MAAM,OAAO,CACvB,QAAQ,EACR,oCAAoC,EACpC,SAAS,EACT,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CACvB,CAAA;IACD,OAAO,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAC,OAAO,CAAC,CAAA;AACvE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"getState.d.ts","sourceRoot":"","sources":["../../src/state/getState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAG/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAE1D,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC,CAG5B"}
1
+ {"version":3,"file":"getState.d.ts","sourceRoot":"","sources":["../../src/state/getState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAG/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAE1D,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC,CAQ5B"}
@@ -1,7 +1,7 @@
1
1
  import { callRpc } from "../internal/callRpc.js";
2
2
  import { mapState } from "../internal/mappers.js";
3
3
  export async function getState(supabase, gameId, logger) {
4
- const raw = await callRpc(supabase, "game_platform_v1_get_state", { p_game_id: gameId }, { logger });
4
+ const raw = await callRpc(supabase, "game_platform_v1_get_state", { p_game_id: gameId }, { logger, retries: 1 });
5
5
  return mapState(raw);
6
6
  }
7
7
  //# sourceMappingURL=getState.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getState.js","sourceRoot":"","sources":["../../src/state/getState.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAIjD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,QAA2B,EAC3B,MAAc,EACd,MAA2B;IAE3B,MAAM,GAAG,GAAG,MAAM,OAAO,CAAU,QAAQ,EAAE,4BAA4B,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;IAC7G,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAA;AACtB,CAAC"}
1
+ {"version":3,"file":"getState.js","sourceRoot":"","sources":["../../src/state/getState.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAIjD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,QAA2B,EAC3B,MAAc,EACd,MAA2B;IAE3B,MAAM,GAAG,GAAG,MAAM,OAAO,CACvB,QAAQ,EACR,4BAA4B,EAC5B,EAAE,SAAS,EAAE,MAAM,EAAE,EACrB,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CACvB,CAAA;IACD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAA;AACtB,CAAC"}
@@ -1,36 +1,60 @@
1
1
  import type { AchievementProgress, AchievementUnlocked } from "./achievement.js";
2
2
  import type { JsonObject } from "./api.js";
3
- export type EventSpec = {
3
+ export declare const PLATFORM_EVENTS: {
4
+ readonly GAME_STARTED: "game_started";
5
+ readonly GAME_FINISHED: "game_finished";
6
+ readonly PERSONAL_BEST_UPDATED: "personal_best_updated";
7
+ readonly ITEM_OBTAINED: "item_obtained";
8
+ };
9
+ export type PlatformEventType = (typeof PLATFORM_EVENTS)[keyof typeof PLATFORM_EVENTS];
10
+ type EventSpec = {
4
11
  value?: number | never;
5
12
  metadata?: JsonObject | never;
6
13
  };
7
- export type EventMap = Record<string, EventSpec>;
8
- type PropertyInput<T extends EventSpec, K extends "value" | "metadata", Fallback> = K extends keyof T ? {} extends Pick<T, K> ? {
14
+ export type PlatformEventMap = {
15
+ game_started: {
16
+ value?: never;
17
+ metadata?: never;
18
+ };
19
+ game_finished: {
20
+ value?: number;
21
+ metadata?: never;
22
+ };
23
+ personal_best_updated: {
24
+ value: number;
25
+ metadata?: never;
26
+ };
27
+ item_obtained: {
28
+ value?: never;
29
+ metadata: {
30
+ itemId: string;
31
+ quantity?: number;
32
+ };
33
+ };
34
+ };
35
+ type PropertyInput<T extends EventSpec, K extends "value" | "metadata"> = K extends keyof T ? {} extends Pick<T, K> ? {
9
36
  [P in K]?: Exclude<T[P], undefined>;
10
37
  } : [T[K]] extends [never] ? {
11
38
  [P in K]?: never;
12
39
  } : {
13
40
  [P in K]: T[K];
14
41
  } : {
15
- [P in K]?: Fallback;
42
+ [P in K]?: never;
16
43
  };
17
- export type EmitEventInputFor<TEvents extends EventMap, TType extends keyof TEvents & string> = {
44
+ export type EmitEventInputFor<TType extends PlatformEventType> = {
18
45
  type: TType;
19
46
  sourceId?: string;
20
- idempotencyKey?: string;
21
- } & PropertyInput<TEvents[TType], "value", number> & PropertyInput<TEvents[TType], "metadata", JsonObject>;
22
- export type DefaultEventMap = Record<string, {
23
- value?: number;
24
- metadata?: JsonObject;
25
- }>;
47
+ } & PropertyInput<PlatformEventMap[TType], "value"> & PropertyInput<PlatformEventMap[TType], "metadata">;
48
+ export type EmitPlatformEventInput = {
49
+ [TType in PlatformEventType]: EmitEventInputFor<TType>;
50
+ }[PlatformEventType];
51
+ export declare function isPlatformEventType(value: string): value is PlatformEventType;
26
52
  export type EventResult = {
27
53
  apiVersion: 1;
28
54
  ok: true;
29
- duplicate: boolean;
30
55
  event: {
31
- id: string;
32
56
  gameId: string;
33
- type: string;
57
+ type: PlatformEventType;
34
58
  origin: "client" | "trusted";
35
59
  };
36
60
  points: {
@@ -1 +1 @@
1
- {"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../src/types/event.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAChF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAE1C,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;IACtB,QAAQ,CAAC,EAAE,UAAU,GAAG,KAAK,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;AAEhD,KAAK,aAAa,CAChB,CAAC,SAAS,SAAS,EACnB,CAAC,SAAS,OAAO,GAAG,UAAU,EAC9B,QAAQ,IACN,CAAC,SAAS,MAAM,CAAC,GACjB,EAAE,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GACnB;KAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC;CAAE,GACvC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GACpB;KAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK;CAAE,GACpB;KAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GACtB;KAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ;CAAE,CAAA;AAE3B,MAAM,MAAM,iBAAiB,CAC3B,OAAO,SAAS,QAAQ,EACxB,KAAK,SAAS,MAAM,OAAO,GAAG,MAAM,IAClC;IACF,IAAI,EAAE,KAAK,CAAA;IACX,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,GAC9C,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,CAAA;AAEzD,MAAM,MAAM,eAAe,GAAG,MAAM,CAClC,MAAM,EACN;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,UAAU,CAAA;CAAE,CAC1C,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,UAAU,EAAE,CAAC,CAAA;IACb,EAAE,EAAE,IAAI,CAAA;IACR,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE;QACL,EAAE,EAAE,MAAM,CAAA;QACV,MAAM,EAAE,MAAM,CAAA;QACd,IAAI,EAAE,MAAM,CAAA;QACZ,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAA;KAC7B,CAAA;IACD,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,YAAY,EAAE;QACZ,OAAO,EAAE,mBAAmB,EAAE,CAAA;QAC9B,QAAQ,EAAE,mBAAmB,EAAE,CAAA;KAChC,CAAA;CACF,CAAA"}
1
+ {"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../src/types/event.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAChF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAE1C,eAAO,MAAM,eAAe;;;;;CAKlB,CAAA;AAEV,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAA;AAEtF,KAAK,SAAS,GAAG;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;IACtB,QAAQ,CAAC,EAAE,UAAU,GAAG,KAAK,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,YAAY,EAAE;QACZ,KAAK,CAAC,EAAE,KAAK,CAAA;QACb,QAAQ,CAAC,EAAE,KAAK,CAAA;KACjB,CAAA;IACD,aAAa,EAAE;QACb,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,QAAQ,CAAC,EAAE,KAAK,CAAA;KACjB,CAAA;IACD,qBAAqB,EAAE;QACrB,KAAK,EAAE,MAAM,CAAA;QACb,QAAQ,CAAC,EAAE,KAAK,CAAA;KACjB,CAAA;IACD,aAAa,EAAE;QACb,KAAK,CAAC,EAAE,KAAK,CAAA;QACb,QAAQ,EAAE;YACR,MAAM,EAAE,MAAM,CAAA;YACd,QAAQ,CAAC,EAAE,MAAM,CAAA;SAClB,CAAA;KACF,CAAA;CACF,CAAA;AAED,KAAK,aAAa,CAChB,CAAC,SAAS,SAAS,EACnB,CAAC,SAAS,OAAO,GAAG,UAAU,IAC5B,CAAC,SAAS,MAAM,CAAC,GACjB,EAAE,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GACnB;KAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC;CAAE,GACvC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GACpB;KAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK;CAAE,GACpB;KAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GACtB;KAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK;CAAE,CAAA;AAExB,MAAM,MAAM,iBAAiB,CAAC,KAAK,SAAS,iBAAiB,IAAI;IAC/D,IAAI,EAAE,KAAK,CAAA;IACX,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,GAAG,aAAa,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,GAC/C,aAAa,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,CAAA;AAEtD,MAAM,MAAM,sBAAsB,GAAG;KAClC,KAAK,IAAI,iBAAiB,GAAG,iBAAiB,CAAC,KAAK,CAAC;CACvD,CAAC,iBAAiB,CAAC,CAAA;AAEpB,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,iBAAiB,CAE7E;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,UAAU,EAAE,CAAC,CAAA;IACb,EAAE,EAAE,IAAI,CAAA;IACR,KAAK,EAAE;QACL,MAAM,EAAE,MAAM,CAAA;QACd,IAAI,EAAE,iBAAiB,CAAA;QACvB,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAA;KAC7B,CAAA;IACD,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,YAAY,EAAE;QACZ,OAAO,EAAE,mBAAmB,EAAE,CAAA;QAC9B,QAAQ,EAAE,mBAAmB,EAAE,CAAA;KAChC,CAAA;CACF,CAAA"}
@@ -1,2 +1,10 @@
1
- export {};
1
+ export const PLATFORM_EVENTS = {
2
+ GAME_STARTED: "game_started",
3
+ GAME_FINISHED: "game_finished",
4
+ PERSONAL_BEST_UPDATED: "personal_best_updated",
5
+ ITEM_OBTAINED: "item_obtained",
6
+ };
7
+ export function isPlatformEventType(value) {
8
+ return Object.values(PLATFORM_EVENTS).includes(value);
9
+ }
2
10
  //# sourceMappingURL=event.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"event.js","sourceRoot":"","sources":["../../src/types/event.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"event.js","sourceRoot":"","sources":["../../src/types/event.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,YAAY,EAAE,cAAc;IAC5B,aAAa,EAAE,eAAe;IAC9B,qBAAqB,EAAE,uBAAuB;IAC9C,aAAa,EAAE,eAAe;CACtB,CAAA;AAoDV,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,OAAQ,MAAM,CAAC,MAAM,CAAC,eAAe,CAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AACrE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zuburi-game-platform",
3
- "version": "0.1.3",
3
+ "version": "0.2.0",
4
4
  "description": "Framework-independent TypeScript SDK for KZTK Game Platform",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -26,7 +26,7 @@
26
26
  "access": "public"
27
27
  },
28
28
  "scripts": {
29
- "build": "tsc -p tsconfig.build.json",
29
+ "build": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.build.json",
30
30
  "typecheck": "tsc -p tsconfig.json --noEmit",
31
31
  "test": "pnpm run build && node --test tests/*.test.mjs"
32
32
  },
@@ -1,2 +0,0 @@
1
- export declare function createIdempotencyKey(gameId: string, eventType: string, sourceId?: string, explicitKey?: string): string;
2
- //# sourceMappingURL=idempotency.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"idempotency.d.ts","sourceRoot":"","sources":["../../src/events/idempotency.ts"],"names":[],"mappings":"AAAA,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,CAaR"}
@@ -1,14 +0,0 @@
1
- export function createIdempotencyKey(gameId, eventType, sourceId, explicitKey) {
2
- const explicit = explicitKey?.trim();
3
- if (explicit)
4
- return explicit;
5
- const source = sourceId?.trim();
6
- if (source)
7
- return `${gameId}:${eventType}:${source}`;
8
- const cryptoObject = globalThis.crypto;
9
- if (cryptoObject && typeof cryptoObject.randomUUID === "function") {
10
- return cryptoObject.randomUUID();
11
- }
12
- return `gp:${Date.now()}:${Math.random().toString(36).slice(2)}:${Math.random().toString(36).slice(2)}`;
13
- }
14
- //# sourceMappingURL=idempotency.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"idempotency.js","sourceRoot":"","sources":["../../src/events/idempotency.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,oBAAoB,CAClC,MAAc,EACd,SAAiB,EACjB,QAAiB,EACjB,WAAoB;IAEpB,MAAM,QAAQ,GAAG,WAAW,EAAE,IAAI,EAAE,CAAA;IACpC,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAA;IAE7B,MAAM,MAAM,GAAG,QAAQ,EAAE,IAAI,EAAE,CAAA;IAC/B,IAAI,MAAM;QAAE,OAAO,GAAG,MAAM,IAAI,SAAS,IAAI,MAAM,EAAE,CAAA;IAErD,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAA;IACtC,IAAI,YAAY,IAAI,OAAO,YAAY,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QAClE,OAAO,YAAY,CAAC,UAAU,EAAE,CAAA;IAClC,CAAC;IAED,OAAO,MAAM,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;AACzG,CAAC"}
@@ -1,5 +0,0 @@
1
- import { type SupabaseRpcClient } from "../internal/callRpc.js";
2
- import type { GamePlatformLogger } from "../types/api.js";
3
- import type { ListTransactionsOptions, PointTransactionPage } from "../types/point.js";
4
- export declare function listTransactions(supabase: SupabaseRpcClient, options?: ListTransactionsOptions, logger?: GamePlatformLogger): Promise<PointTransactionPage>;
5
- //# sourceMappingURL=listTransactions.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"listTransactions.d.ts","sourceRoot":"","sources":["../../src/points/listTransactions.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAExE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,KAAK,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAEtF,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,GAAE,uBAA4B,EACrC,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,oBAAoB,CAAC,CAkB/B"}
@@ -1,17 +0,0 @@
1
- import { GamePlatformError } from "../errors/GamePlatformError.js";
2
- import { callRpc } from "../internal/callRpc.js";
3
- import { decodeCursor, mapTransactionPage } from "../internal/mappers.js";
4
- export async function listTransactions(supabase, options = {}, logger) {
5
- const limit = options.limit ?? 30;
6
- if (!Number.isInteger(limit) || limit < 1 || limit > 100) {
7
- throw new GamePlatformError("INVALID_ARGUMENT", "Transaction limit must be an integer between 1 and 100");
8
- }
9
- const cursor = decodeCursor(options.cursor);
10
- const raw = await callRpc(supabase, "game_platform_v1_list_transactions", {
11
- p_limit: limit,
12
- p_before_created_at: cursor?.created_at ?? null,
13
- p_before_id: cursor?.id ?? null,
14
- }, { logger });
15
- return mapTransactionPage(raw);
16
- }
17
- //# sourceMappingURL=listTransactions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"listTransactions.js","sourceRoot":"","sources":["../../src/points/listTransactions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAClE,OAAO,EAAE,OAAO,EAA0B,MAAM,wBAAwB,CAAA;AACxE,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAIzE,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAA2B,EAC3B,UAAmC,EAAE,EACrC,MAA2B;IAE3B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAA;IACjC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;QACzD,MAAM,IAAI,iBAAiB,CAAC,kBAAkB,EAAE,wDAAwD,CAAC,CAAA;IAC3G,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAC3C,MAAM,GAAG,GAAG,MAAM,OAAO,CACvB,QAAQ,EACR,oCAAoC,EACpC;QACE,OAAO,EAAE,KAAK;QACd,mBAAmB,EAAE,MAAM,EAAE,UAAU,IAAI,IAAI;QAC/C,WAAW,EAAE,MAAM,EAAE,EAAE,IAAI,IAAI;KAChC,EACD,EAAE,MAAM,EAAE,CACX,CAAA;IACD,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAA;AAChC,CAAC"}