@yyyu-star/arcade-kit 0.0.0-stage → 0.10.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.
Files changed (69) hide show
  1. package/CHANGELOG.md +256 -0
  2. package/LICENSE +21 -0
  3. package/README.md +441 -2
  4. package/dist/auth.d.ts +66 -0
  5. package/dist/auth.d.ts.map +1 -0
  6. package/dist/auth.js +86 -0
  7. package/dist/auth.js.map +1 -0
  8. package/dist/client.d.ts +194 -0
  9. package/dist/client.d.ts.map +1 -0
  10. package/dist/client.js +379 -0
  11. package/dist/client.js.map +1 -0
  12. package/dist/fun-art.d.ts +41 -0
  13. package/dist/fun-art.d.ts.map +1 -0
  14. package/dist/fun-art.js +141 -0
  15. package/dist/fun-art.js.map +1 -0
  16. package/dist/fun.d.ts +87 -0
  17. package/dist/fun.d.ts.map +1 -0
  18. package/dist/fun.js +512 -0
  19. package/dist/fun.js.map +1 -0
  20. package/dist/game.d.ts +160 -0
  21. package/dist/game.d.ts.map +1 -0
  22. package/dist/game.js +41 -0
  23. package/dist/game.js.map +1 -0
  24. package/dist/guest.d.ts +60 -0
  25. package/dist/guest.d.ts.map +1 -0
  26. package/dist/guest.js +87 -0
  27. package/dist/guest.js.map +1 -0
  28. package/dist/internal.d.ts +33 -0
  29. package/dist/internal.d.ts.map +1 -0
  30. package/dist/internal.js +53 -0
  31. package/dist/internal.js.map +1 -0
  32. package/dist/meter.d.ts +102 -0
  33. package/dist/meter.d.ts.map +1 -0
  34. package/dist/meter.js +207 -0
  35. package/dist/meter.js.map +1 -0
  36. package/dist/protocol.d.ts +227 -0
  37. package/dist/protocol.d.ts.map +1 -0
  38. package/dist/protocol.js +65 -0
  39. package/dist/protocol.js.map +1 -0
  40. package/dist/rng.d.ts +40 -0
  41. package/dist/rng.d.ts.map +1 -0
  42. package/dist/rng.js +119 -0
  43. package/dist/rng.js.map +1 -0
  44. package/dist/room.d.ts +352 -0
  45. package/dist/room.d.ts.map +1 -0
  46. package/dist/room.js +1563 -0
  47. package/dist/room.js.map +1 -0
  48. package/dist/testing.d.ts +125 -0
  49. package/dist/testing.d.ts.map +1 -0
  50. package/dist/testing.js +272 -0
  51. package/dist/testing.js.map +1 -0
  52. package/dist/worker.d.ts +92 -0
  53. package/dist/worker.d.ts.map +1 -0
  54. package/dist/worker.js +184 -0
  55. package/dist/worker.js.map +1 -0
  56. package/package.json +107 -4
  57. package/src/auth.ts +100 -0
  58. package/src/client.ts +438 -0
  59. package/src/fun-art.ts +184 -0
  60. package/src/fun.ts +626 -0
  61. package/src/game.ts +200 -0
  62. package/src/guest.ts +122 -0
  63. package/src/internal.ts +64 -0
  64. package/src/meter.ts +255 -0
  65. package/src/protocol.ts +243 -0
  66. package/src/rng.ts +131 -0
  67. package/src/room.ts +1677 -0
  68. package/src/testing.ts +300 -0
  69. package/src/worker.ts +234 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fun.js","sourceRoot":"","sources":["../src/fun.ts"],"names":[],"mappings":"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"}
package/dist/game.d.ts ADDED
@@ -0,0 +1,160 @@
1
+ /**
2
+ * 游戏要提供的规则接口,和给游戏自己测"快照多大"的小工具。
3
+ * 这个文件不依赖 Workers 运行时,游戏的规则测试(普通 Node 里的 vitest)也能直接引用。
4
+ */
5
+ import { type SeatKind } from './protocol.js';
6
+ import type { Entropy } from './rng.js';
7
+ export type { Entropy } from './rng.js';
8
+ /** 开局时房间告诉游戏的(0.3.0):房主选的选项、每个座位坐的是谁(电脑补满以后;seatCount 以外的座位是 empty)。 */
9
+ export interface RoomSetup<O> {
10
+ /** options() 校验过的选项;游戏没写 options 时是 undefined */
11
+ opts: O | undefined;
12
+ seats: SeatKind[];
13
+ }
14
+ /**
15
+ * 一笔要房间去外面办的事(0.3.0,比如从玩家的钱包扣买入、把筹码结回去),游戏在状态里记着,办完前一直在 effects() 里。
16
+ * id 在这一局里唯一、不重用:房间可能因为断线、被驱逐把同一笔办两次,办事的一方要按 id 去重(幂等)。
17
+ * seat 是为谁办:房间把这个座位绑定的 userId 交给 perform(没绑人的电脑座位是 null)。
18
+ */
19
+ export interface RoomEffect {
20
+ id: string;
21
+ seat: number;
22
+ }
23
+ /**
24
+ * 一个游戏的规则,纯函数(浏览器和房间共用,4.3)。S 状态、A 操作、V 某个座位看到的视图。
25
+ * 房间只通过这些函数碰游戏状态,自己不懂规则。
26
+ */
27
+ export interface RoomGame<S, A, V, O = unknown, E extends RoomEffect = RoomEffect> {
28
+ /** 座位数(掼蛋 4) */
29
+ seats: number;
30
+ /** 规则版本:开局时记进状态,进行中的牌局按开局时的版本打完(4.3) */
31
+ rulesVersion: number;
32
+ /**
33
+ * 开局(0.2.0 起推荐):entropy 是房间用 crypto.getRandomValues 现生成的 256 位熵(8 个 u32),只给这一次、房间不存。
34
+ * 用它当 arcade-kit/rng 的 ChaCha20 密钥发牌;后面每一副也从这把密钥分出的流里取(stream(key, 'deal', 第几副)),
35
+ * 所以密钥要放进自己的状态——状态只在服务端,view 绝不能带上它。谁拿到密钥谁就知道全桌的牌(9.1)。
36
+ * 写了 begin,房间就不再调 start
37
+ */
38
+ begin?(entropy: Entropy, rulesVersion: number, setup?: RoomSetup<O>): S;
39
+ /**
40
+ * @deprecated 0.2.0:32 位种子只有约 43 亿种,玩家拿自己的手牌逐个试,几分钟就能反推出全桌的牌。新游戏写 begin;
41
+ * 这里只为 0.1.x 的游戏升级 kit 时照常能开局(房间会记一条警告日志),游戏都换成 begin 以后去掉。
42
+ * 已经开打的房间不会再调开局,按开局时记下的规则版本打完
43
+ */
44
+ start(seed: number, rulesVersion: number): S;
45
+ /** 校验客户端发来的操作的形状,不合格返回 null(不进 apply) */
46
+ parse(raw: unknown): A | null;
47
+ /**
48
+ * 做一步;不合法返回 { error },状态不变。
49
+ * error 会原样发给出手的人,所以只能是固定的错误码(小写字母、数字、下划线,最长 32),不能带牌面之类的隐藏信息;
50
+ * 不合这个格式的一律换成 illegal_move 再发。
51
+ */
52
+ apply(state: S, seat: number, action: A): S | {
53
+ error: string;
54
+ };
55
+ /** 现在该谁出手;null 表示不在等任何人(比如一局打完)。写了 actors 时房间只看 actors,不再用它 */
56
+ turn(state: S): number | null;
57
+ /**
58
+ * 这一刻可以出手的座位(0.1.1;不写就是 [turn(state)],和 0.1.0 一样)。多于一个时是"一组",比如结算页大家点继续:
59
+ * - 电脑、托管座位由房间立刻用 ai() 代出;真人谁先发都收,不用排队;
60
+ * - 组里有人出手不重新计时:时限从进入这组时起算,到点对还没出的真人逐个用 timeout() 代出;
61
+ * - 组里先出手的人改了局面,后出的人照样能出(不判 stale),只有在这组开始之前做的决定才是 stale。
62
+ * 怎么算"还是同一组":
63
+ * - 推荐返回 { seats, group },group 是这一组的标识(比如 'settle-3',第几副的结算):出手前后 group 一样、而且出手的人离开了名单、
64
+ * 没有新座位加入,才是同一组,否则是新的一手(所以一个人一手的阶段给同一个 group 也没关系,每一手照样重新计时);
65
+ * - 只返回座位数组时由房间推断:出手的那个座位离开名单、其他座位原样留着(不多不少)才算同一组。所以组里每个人出手后都要从名单里拿掉。
66
+ * 这有歧义:[2, 3] 里 2 出完剩 [3],和"新的一手只有 3 能出"分不清(会被当成同一组),有这种情况的游戏要给 group。
67
+ * 名单里不合法的座位号、重复的会被忽略。牌局没打完(over 为 false)时名单不能是空的,空了房间按游戏出错处理:记日志、当作打完。
68
+ */
69
+ actors?(state: S): number[] | {
70
+ seats: number[];
71
+ group: string;
72
+ };
73
+ /**
74
+ * 这一手(或这一组)的时限毫秒(0.1.1;不写、或给的不是正数,就用 RoomLimits.turnMs)。
75
+ * 按当前局面现算,同一组里要一直给同一个数
76
+ */
77
+ turnMs?(state: S): number;
78
+ /** 这个座位能看到的东西。seat 为 null 是没入座的人,只能给公开信息 */
79
+ view(state: S, seat: number | null): V;
80
+ /** 电脑出手(电脑座位、掉线托管),必须合法 */
81
+ ai(state: S, seat: number): A;
82
+ /** 超时代出(真人 30 秒没出、掉线时轮到他),只看该座位能看到的;不给就用 ai。被 apply 拒了房间会再用 ai 试一次 */
83
+ timeout?(state: S, seat: number): A;
84
+ /** 整场打完了 */
85
+ over(state: S): boolean;
86
+ /**
87
+ * 这一刻是不是一段的结尾,适合收场(0.2.0,可选):比如掼蛋一副打完、停在结算页。
88
+ * 当天全站写入到了 stopWrites(meter.ts)时,在打的房间走到这里就停下电脑、把这一步发给大家,然后以 4000 加原因 quota 关房。
89
+ * 不写的游戏没有"这一段"可等,房间知道要收场时马上关
90
+ */
91
+ breakPoint?(state: S): boolean;
92
+ /**
93
+ * 开局选项:房主发 start 时带的 opts(任意 JSON),在这里校验形状,不合格返回 null(房间回 bad_options、不开局)。
94
+ * 0.4.0 起也可以开房时就定(acceptCreate 的 options):开房时校验、存进房间、经 RoomInfo.opts 发给所有人,之后 start 带的不看。
95
+ * 校验过的选项经 begin 的 setup.opts 交给游戏;游戏要用就放进自己的状态
96
+ */
97
+ options?(raw: unknown): O | null;
98
+ /**
99
+ * 这一局用几个座位(1 到 seats):比如德州 2–6 人一桌、座位数按选项定。只用前面这么多个座位,
100
+ * 开局时只给它们补电脑,后面的座位一直空着、谁也坐不进去;有真人坐在后面的座位上时房间回 seat_closed、不开局。不写就是 seats
101
+ */
102
+ seatCount?(opts: O | undefined): number;
103
+ /**
104
+ * 开打以后座位换了人(纯函数):有人坐下或接管电脑的座位(human)、离座交给电脑(ai)。
105
+ * 和那一步(入座、离座)一起写 1 行。游戏可以借它记"这个座位现在是真人买入的"之类;不需要就不写。
106
+ * 托管(掉线超过宽限由电脑代打)不算换人,不调它:座位还是那个人的。
107
+ * 开打后座位绑人,离座的主人回到自己的座位也会以 human 调一次:房间不把 userId 交给规则,游戏按自己的状态判断
108
+ * (比如这个座位原来就是真人的,就什么都不做)
109
+ */
110
+ seated?(state: S, seat: number, kind: 'human' | 'ai'): S;
111
+ /**
112
+ * 现在还没办完的对外的事(见 RoomEffect)。房间每一步之后看一眼,把没在办的交给房间子类的 perform 去办,
113
+ * 办完用 settled 把结果写回状态(1 行);办失败了按退避重试(用那唯一的闹钟)。结果写回以后这笔就不该再出现在这里
114
+ */
115
+ effects?(state: S): E[];
116
+ /** 一笔对外的事办完了(纯函数):result 是 perform 的返回值,游戏自己校验。id 已经不在 effects() 里的,房间不会调 */
117
+ settled?(state: S, id: string, result: unknown): S;
118
+ /**
119
+ * 房间要关了(寿命到、没人、额度满、入站用完):给游戏最后一次机会把要办的事记下来(比如把所有人桌上的筹码结回钱包)。
120
+ * 写了 effects 才会调。返回的状态里还有 effects 的话,房间先断开所有人、留着存储把它们办完再删;办不完(一直失败)最多等 closingMs
121
+ */
122
+ closing?(state: S): S;
123
+ /**
124
+ * 不轮流的操作(比如离桌、暂离回来;只是冒个气泡的用 0.6.0 的 emotes,不写存储):入座的人什么时候都能发,不看轮没轮到他、不判 stale,
125
+ * 不改这一手的期限和 turnSeq(除非它让该谁出手变了)。照样过 parse、apply,照样占令牌桶和入站额度
126
+ */
127
+ free?(action: A): boolean;
128
+ /**
129
+ * 牌局没打完、这一刻谁也不用出手,在等外面的事(0.3.2,可选):比如德州的牌桌上能打的人不够两个,等有人坐下、补码、从暂离回来,
130
+ * 或者买入到账。返回 true 时 actors(turn)可以是空的:房间不当作出错,不计时、不驱动电脑、不设这一手的闹钟,一行也不写;
131
+ * 等到有人发不轮流的操作、座位换人、对外的事办完,牌局变了再看该谁出手。只在没人能出手时才问它;不写就和以前一样,空了按出错处理
132
+ */
133
+ waiting?(state: S): boolean;
134
+ /**
135
+ * 这一刻是不是"停一会儿再接着来"(比如一手打完停几秒让大家看清结果,再自动发下一手):返回要停的毫秒数(正的有限数),不是就返回 null。
136
+ * 不能等所有人点(有人走开就卡住),也不能指给某个座位计时(电脑、托管的座位会被房间立刻代出,停不住),所以由房间来停。
137
+ * 只在没人能出手(actors / turn 为空)时才问它,优先于 waiting。停顿从进入这个状态那一刻算(电脑连着出完进来的,从播放完算),
138
+ * 停顿期间不轮流的操作、座位换人、对外的事办完都不重新计时;按当前局面现算,同一个停顿里要一直给同一个数。
139
+ * 页面看 RoomInfo.pause.until 画倒计时(这时 RoomInfo.turn 是 null)
140
+ */
141
+ pause?(state: S): number | null;
142
+ /**
143
+ * 停够了(纯函数):房间到点用那唯一的闹钟调它做一步(和这一步一起最多写 2 行),比如发下一手;之后电脑照常接着出。
144
+ * 返回的状态不能还在停(要连着停两段,就在一次 pause 里给总时长):还在停、或者抛错,房间记日志、不用它的结果,过 60 秒再试。
145
+ * 写了 pause 就必须写 resume,只写 pause 的当作没有停顿(记一次日志)
146
+ */
147
+ resume?(state: S): S;
148
+ /**
149
+ * 快捷短语表有几句(0.6.0,可选):入座的人可以发 0 到 emotes - 1 的编号,房间只转发给所有人(EmotedMsg),不进状态、不写存储。
150
+ * 短语的文字、图标由游戏自己在页面里定,房间不知道内容。不写(或不是正整数)就是没有短语,发了回 no_emotes
151
+ */
152
+ emotes?: number;
153
+ }
154
+ /**
155
+ * 进房、重连时发的全量快照有多大(字节,取所有座位和"没入座"里最大的那个)。
156
+ * 重连一律发全量快照(4.5),快照太大会拖慢手机重连、多占出站流量;游戏在自己的测试里挑几个最大的局面断言一个上限。
157
+ * 座位信息按最坏情况算:全是真人、昵称都是 16 个汉字。
158
+ */
159
+ export declare function snapshotBytes<S, A, V, O, E extends RoomEffect>(game: RoomGame<S, A, V, O, E>, state: S): number;
160
+ //# sourceMappingURL=game.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"game.d.ts","sourceRoot":"","sources":["../src/game.ts"],"names":[],"mappings":"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"}
package/dist/game.js ADDED
@@ -0,0 +1,41 @@
1
+ /**
2
+ * 游戏要提供的规则接口,和给游戏自己测"快照多大"的小工具。
3
+ * 这个文件不依赖 Workers 运行时,游戏的规则测试(普通 Node 里的 vitest)也能直接引用。
4
+ */
5
+ import { PROTOCOL_VERSION } from './protocol.js';
6
+ /**
7
+ * 进房、重连时发的全量快照有多大(字节,取所有座位和"没入座"里最大的那个)。
8
+ * 重连一律发全量快照(4.5),快照太大会拖慢手机重连、多占出站流量;游戏在自己的测试里挑几个最大的局面断言一个上限。
9
+ * 座位信息按最坏情况算:全是真人、昵称都是 16 个汉字。
10
+ */
11
+ export function snapshotBytes(game, state) {
12
+ const room = {
13
+ code: '000000',
14
+ status: 'playing',
15
+ seats: Array.from({ length: game.seats }, () => ({ kind: 'human', name: '牌'.repeat(16), away: true, auto: true, reserved: true })),
16
+ turn: {
17
+ seat: 0,
18
+ deadline: 9_999_999_999_999,
19
+ ...(game.actors ? { seats: Array.from({ length: game.seats }, (_, i) => i) } : {}),
20
+ },
21
+ // 停顿和 turn 不会同时有,这里两样都算上,偏大一点(0.5.0)
22
+ ...(game.pause ? { pause: { until: 9_999_999_999_999 } } : {}),
23
+ };
24
+ let max = 0;
25
+ for (const seat of [null, ...Array.from({ length: game.seats }, (_, i) => i)]) {
26
+ const msg = {
27
+ t: 'welcome',
28
+ v: PROTOCOL_VERSION,
29
+ minClientVersion: 0,
30
+ seq: 999_999,
31
+ you: { seat, bound: seat ?? 0 },
32
+ room,
33
+ view: game.view(state, seat),
34
+ // 有短语的游戏多带一个节奏(0.7.0)
35
+ ...(game.emotes ? { emote: { ms: 999_999, burst: 99 } } : {}),
36
+ };
37
+ max = Math.max(max, new TextEncoder().encode(JSON.stringify(msg)).byteLength);
38
+ }
39
+ return max;
40
+ }
41
+ //# sourceMappingURL=game.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"game.js","sourceRoot":"","sources":["../src/game.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,gBAAgB,EAAiD,MAAM,eAAe,CAAC;AAiKhG;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAmC,IAA6B,EAAE,KAAQ;IACrG,MAAM,IAAI,GAAa;QACrB,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,SAAS;QACjB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAClI,IAAI,EAAE;YACJ,IAAI,EAAE,CAAC;YACP,QAAQ,EAAE,iBAAiB;YAC3B,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACnF;QACD,qCAAqC;QACrC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC/D,CAAC;IACF,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,MAAM,GAAG,GAAkB;YACzB,CAAC,EAAE,SAAS;YACZ,CAAC,EAAE,gBAAgB;YACnB,gBAAgB,EAAE,CAAC;YACnB,GAAG,EAAE,OAAO;YACZ,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,EAAE;YAC/B,IAAI;YACJ,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;YAC5B,sBAAsB;YACtB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9D,CAAC;QACF,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * 独立模式(0.10.0):游戏不带平台单独部署(Deploy to Cloudflare、fork)时,没有平台的 /api/me 可问,改认"游客"。
3
+ *
4
+ * 什么时候算独立模式(isStandalone):env 里**没有** ARCADE 绑定,而且 GATE 不是 "login"。
5
+ * - 有 ARCADE 绑定 = 本站正式环境,行为和 0.9 完全一样,游客 cookie 一律不认(防止有人带一个游客 cookie 绕过登录);
6
+ * - 没有 ARCADE 却写了 GATE=login:说明这次部署本该接平台、只是绑定丢了(部署工具出错),按"平台不可用"拒绝(fail-closed),
7
+ * 不悄悄退成人人可进的游客模式。
8
+ *
9
+ * 游客身份:游戏 Worker 自己发一个长期 cookie(HttpOnly、SameSite=Lax、Path=/;https 下是 `__Host-` 前缀加 Secure),
10
+ * 值是 32 字节 crypto 随机数(base64url)。userId 是值的 SHA-256 取前 128 位(`g:` 开头),不用原值:
11
+ * userId 会进房间存储、日志,泄露了也拿不到 cookie 本身。昵称默认"游客"加 4 位数字,浏览器可以带一个昵称(cleanNickname 严格清洗)。
12
+ *
13
+ * 这个文件不依赖 cloudflare:workers,浏览器也能用(页面可以先用 cleanNickname 检查一遍再提交)。
14
+ */
15
+ import type { Identity } from './internal.js';
16
+ /** 游客 cookie 名字的默认主体;https 下实际名字是 `__Host-kit-guest`。同域的几个游戏共用一个游客身份,想分开就各传 cookie */
17
+ export declare const GUEST_COOKIE = "kit-guest";
18
+ /** 昵称最长几个字(按码点算) */
19
+ export declare const NICKNAME_MAX = 12;
20
+ /**
21
+ * 默认不许用的昵称词:冒充电脑、系统、管理员,以及"游客"本身(免得冒充别人的默认名"游客1234")。
22
+ * 游戏另传自己电脑人物的名字(GuestOptions.reserved),两份合起来查
23
+ */
24
+ export declare const RESERVED_NICKNAMES: readonly string[];
25
+ export interface GuestOptions {
26
+ /** cookie 名字的主体(字母、数字、`_`、`-`,最长 32),默认 GUEST_COOKIE;https 下会加 `__Host-` 前缀 */
27
+ cookie?: string;
28
+ /** 游戏自己不许用的昵称(电脑人物的名字等),和 RESERVED_NICKNAMES 合起来查 */
29
+ reserved?: readonly string[];
30
+ }
31
+ /** 判断用的 env 字段:ARCADE 绑定在不在、GATE 写的是什么 */
32
+ export interface ModeEnv {
33
+ ARCADE?: unknown;
34
+ GATE?: string;
35
+ }
36
+ /** 独立模式:没有 ARCADE 绑定、GATE 也不是 "login" */
37
+ export declare function isStandalone(env: ModeEnv): boolean;
38
+ /**
39
+ * 这个请求用的游客 cookie 名字。https 用 `__Host-` 前缀(浏览器保证只能由本站、Path=/、Secure 设置,子域设不进来);
40
+ * http 只会是本地开发(wrangler dev 经局域网 IP 打开时浏览器不收 Secure cookie),用不带前缀的名字,两边互不相认
41
+ */
42
+ export declare function guestCookieName(request: Request, opts?: GuestOptions): string;
43
+ /** 请求里游客 cookie 的值;没有、格式不对都是 null */
44
+ export declare function readGuestCookie(request: Request, opts?: GuestOptions): string | null;
45
+ /** 新发一个游客 cookie:返回值和整条 Set-Cookie */
46
+ export declare function mintGuestCookie(request: Request, opts?: GuestOptions): {
47
+ value: string;
48
+ setCookie: string;
49
+ };
50
+ /** cookie 值 → 游客身份:userId = 'g:' + SHA-256 前 128 位(hex),默认昵称"游客"+ 4 位数字;nickname 是清洗过的昵称 */
51
+ export declare function guestIdentity(value: string, nickname?: string | null): Promise<Identity>;
52
+ /**
53
+ * 清洗浏览器带来的昵称:不合格回 null(调用方用默认的"游客1234"),不报错。
54
+ * - NFKC 归一(全角、兼容字先折成普通字,免得用全角字母绕过保留词),连续空白并成一个、去掉首尾空白;
55
+ * - 只许字母(含汉字)、数字和少数几个符号,控制符、零宽字、方向控制符、emoji 一律不行;1 到 NICKNAME_MAX 个字;
56
+ * - 不能含保留词(RESERVED_NICKNAMES 加游戏传的):中文等非 ASCII 的词按"包含"查;ASCII 的词按"整个词"查(去掉数字后),
57
+ * 免得 "Kai" 因为含 "ai" 被拒,但 "AI"、"bot 007" 都会被拒。
58
+ */
59
+ export declare function cleanNickname(raw: unknown, reserved?: readonly string[]): string | null;
60
+ //# sourceMappingURL=guest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guest.d.ts","sourceRoot":"","sources":["../src/guest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,sFAAsF;AACtF,eAAO,MAAM,YAAY,cAAc,CAAC;AAKxC,oBAAoB;AACpB,eAAO,MAAM,YAAY,KAAK,CAAC;AAE/B;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAA6G,CAAC;AAE9J,MAAM,WAAW,YAAY;IAC3B,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9B;AAED,0CAA0C;AAC1C,MAAM,WAAW,OAAO;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,yCAAyC;AACzC,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAElD;AAMD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,GAAE,YAAiB,GAAG,MAAM,CAIjF;AAMD,qCAAqC;AACrC,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,GAAE,YAAiB,GAAG,MAAM,GAAG,IAAI,CAUxF;AAED,sCAAsC;AACtC,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,GAAE,YAAiB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAK/G;AAED,4FAA4F;AAC5F,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CAK9F;AAKD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,GAAE,SAAS,MAAM,EAAO,GAAG,MAAM,GAAG,IAAI,CAe3F"}
package/dist/guest.js ADDED
@@ -0,0 +1,87 @@
1
+ /** 游客 cookie 名字的默认主体;https 下实际名字是 `__Host-kit-guest`。同域的几个游戏共用一个游客身份,想分开就各传 cookie */
2
+ export const GUEST_COOKIE = 'kit-guest';
3
+ /** 一年多一点(和平台会话一样长),过期前每次进首页都会被认出来,不续期也够用 */
4
+ const GUEST_MAX_AGE = 34_560_000;
5
+ /** 昵称最长几个字(按码点算) */
6
+ export const NICKNAME_MAX = 12;
7
+ /**
8
+ * 默认不许用的昵称词:冒充电脑、系统、管理员,以及"游客"本身(免得冒充别人的默认名"游客1234")。
9
+ * 游戏另传自己电脑人物的名字(GuestOptions.reserved),两份合起来查
10
+ */
11
+ export const RESERVED_NICKNAMES = ['电脑', '机器人', '人机', '托管', '系统', '管理员', '官方', '客服', '游客', 'ai', 'bot', 'robot', 'cpu', 'admin', 'system'];
12
+ /** 独立模式:没有 ARCADE 绑定、GATE 也不是 "login" */
13
+ export function isStandalone(env) {
14
+ return !env.ARCADE && env.GATE !== 'login';
15
+ }
16
+ const COOKIE_BASE_RE = /^[A-Za-z0-9_-]{1,32}$/;
17
+ /** 值:我们发的是 32 字节 base64url(43 位);读的时候只认 22–64 位 base64url,别的一律当没有 */
18
+ const COOKIE_VALUE_RE = /^[A-Za-z0-9_-]{22,64}$/;
19
+ /**
20
+ * 这个请求用的游客 cookie 名字。https 用 `__Host-` 前缀(浏览器保证只能由本站、Path=/、Secure 设置,子域设不进来);
21
+ * http 只会是本地开发(wrangler dev 经局域网 IP 打开时浏览器不收 Secure cookie),用不带前缀的名字,两边互不相认
22
+ */
23
+ export function guestCookieName(request, opts = {}) {
24
+ const base = opts.cookie ?? GUEST_COOKIE;
25
+ if (!COOKIE_BASE_RE.test(base))
26
+ throw new Error(`arcade-kit: bad guest cookie name ${JSON.stringify(base)}`);
27
+ return isHttps(request) ? `__Host-${base}` : base;
28
+ }
29
+ function isHttps(request) {
30
+ return new URL(request.url).protocol === 'https:';
31
+ }
32
+ /** 请求里游客 cookie 的值;没有、格式不对都是 null */
33
+ export function readGuestCookie(request, opts = {}) {
34
+ const name = guestCookieName(request, opts);
35
+ for (const part of (request.headers.get('cookie') ?? '').split(';')) {
36
+ const i = part.indexOf('=');
37
+ if (i > 0 && part.slice(0, i).trim() === name) {
38
+ const v = part.slice(i + 1).trim();
39
+ return COOKIE_VALUE_RE.test(v) ? v : null;
40
+ }
41
+ }
42
+ return null;
43
+ }
44
+ /** 新发一个游客 cookie:返回值和整条 Set-Cookie */
45
+ export function mintGuestCookie(request, opts = {}) {
46
+ const bytes = crypto.getRandomValues(new Uint8Array(32));
47
+ const value = btoa(String.fromCharCode(...bytes)).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
48
+ const secure = isHttps(request) ? '; Secure' : '';
49
+ return { value, setCookie: `${guestCookieName(request, opts)}=${value}; Max-Age=${GUEST_MAX_AGE}; Path=/; HttpOnly; SameSite=Lax${secure}` };
50
+ }
51
+ /** cookie 值 → 游客身份:userId = 'g:' + SHA-256 前 128 位(hex),默认昵称"游客"+ 4 位数字;nickname 是清洗过的昵称 */
52
+ export async function guestIdentity(value, nickname) {
53
+ const hash = new Uint8Array(await crypto.subtle.digest('SHA-256', new TextEncoder().encode(value)));
54
+ const hex = Array.from(hash.subarray(0, 16), (b) => b.toString(16).padStart(2, '0')).join('');
55
+ const short = String(((hash[16] << 8) | hash[17]) % 10_000).padStart(4, '0');
56
+ return { userId: `g:${hex}`, name: nickname || `游客${short}` };
57
+ }
58
+ /** 允许的字:字母(含汉字)、数字,和空格、`_`、`-`、`.`、`·` */
59
+ const NICKNAME_RE = /^[\p{L}\p{N} _\-.·]+$/u;
60
+ /**
61
+ * 清洗浏览器带来的昵称:不合格回 null(调用方用默认的"游客1234"),不报错。
62
+ * - NFKC 归一(全角、兼容字先折成普通字,免得用全角字母绕过保留词),连续空白并成一个、去掉首尾空白;
63
+ * - 只许字母(含汉字)、数字和少数几个符号,控制符、零宽字、方向控制符、emoji 一律不行;1 到 NICKNAME_MAX 个字;
64
+ * - 不能含保留词(RESERVED_NICKNAMES 加游戏传的):中文等非 ASCII 的词按"包含"查;ASCII 的词按"整个词"查(去掉数字后),
65
+ * 免得 "Kai" 因为含 "ai" 被拒,但 "AI"、"bot 007" 都会被拒。
66
+ */
67
+ export function cleanNickname(raw, reserved = []) {
68
+ if (typeof raw !== 'string' || raw.length > 64)
69
+ return null;
70
+ const s = raw.normalize('NFKC').replace(/\s+/gu, ' ').trim();
71
+ const n = [...s].length;
72
+ if (n < 1 || n > NICKNAME_MAX || !NICKNAME_RE.test(s))
73
+ return null;
74
+ const lower = s.toLowerCase();
75
+ const compact = lower.replace(/ /g, '');
76
+ const tokens = lower.split(/[ _\-.·]+/).map((t) => t.replace(/\d+/g, ''));
77
+ for (const w0 of [...RESERVED_NICKNAMES, ...reserved]) {
78
+ const w = w0.normalize('NFKC').toLowerCase().replace(/\s+/g, '');
79
+ if (!w)
80
+ continue;
81
+ const ascii = /^[\x00-\x7f]+$/.test(w);
82
+ if (ascii ? tokens.includes(w) || compact.replace(/\d+/g, '') === w : compact.includes(w))
83
+ return null;
84
+ }
85
+ return s;
86
+ }
87
+ //# sourceMappingURL=guest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guest.js","sourceRoot":"","sources":["../src/guest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * kit 内部用的东西:房间的内部地址、身份头、按房间码取 stub。不在 package.json 的 exports 里,游戏引用不到,
3
+ * 只能经 worker.ts 的 acceptCreate / acceptJoin 开房进房,没法自己拼内部请求。
4
+ */
5
+ /**
6
+ * 平台会话 cookie 的名字(docs/platform-backend.md 15.8:"平台只读 __Host-sid")。kit 里只在这里写一次:
7
+ * 认人时请求里没有它就直接算没登录,不去问平台。
8
+ */
9
+ export declare const SESSION_COOKIE = "__Host-sid";
10
+ /** 请求的 Cookie 头里有没有非空的平台会话 cookie。 */
11
+ export declare function hasSessionCookie(cookie: string | null): boolean;
12
+ /** 游戏 Worker 认出来的人(auth.ts 经平台 /api/me 拿到)。 */
13
+ export interface Identity {
14
+ userId: string;
15
+ name: string;
16
+ }
17
+ /**
18
+ * 房间 fetch 只认这个主机名:kit 自己拼的内部地址(acceptJoin)。游戏 Worker 要是把浏览器的原始请求直接转进来,
19
+ * 地址是站点自己的域名,一律拒绝,浏览器自己带的 x-kit-user 头就不可能被当成身份。
20
+ */
21
+ export declare const KIT_HOST = "arcade-kit.internal";
22
+ /** 身份头:JSON 再 URL 编码(昵称是中文,请求头里只放 ASCII)。只有 acceptJoin 拼的内部请求会带它。 */
23
+ export declare function identityHeader(me: Identity): string;
24
+ export declare function parseIdentity(raw: string | null): Identity | null;
25
+ /** 6 位房间码(crypto 随机)。 */
26
+ export declare function newRoomCode(): string;
27
+ /** 房间的 stub:按房间码取,尽量放在亚太(4.1)。 */
28
+ export declare function roomStub(ns: DurableObjectNamespace, code: string): DurableObjectStub;
29
+ /** 计量的名字:每个游戏 Worker 只有这一个实例(meter.ts)。 */
30
+ export declare const METER_NAME = "kit-meter";
31
+ /** 计量的 stub:和房间一样放在亚太,开房、报数少绕路。 */
32
+ export declare function meterStub(ns: DurableObjectNamespace): DurableObjectStub;
33
+ //# sourceMappingURL=internal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,eAAO,MAAM,cAAc,eAAe,CAAC;AAE3C,sCAAsC;AACtC,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAM/D;AAED,+CAA+C;AAC/C,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,eAAO,MAAM,QAAQ,wBAAwB,CAAC;AAE9C,qEAAqE;AACrE,wBAAgB,cAAc,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,CAEnD;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,QAAQ,GAAG,IAAI,CAQjE;AAED,yBAAyB;AACzB,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,kCAAkC;AAClC,wBAAgB,QAAQ,CAAC,EAAE,EAAE,sBAAsB,EAAE,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAEpF;AAED,2CAA2C;AAC3C,eAAO,MAAM,UAAU,cAAc,CAAC;AAEtC,mCAAmC;AACnC,wBAAgB,SAAS,CAAC,EAAE,EAAE,sBAAsB,GAAG,iBAAiB,CAEvE"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * kit 内部用的东西:房间的内部地址、身份头、按房间码取 stub。不在 package.json 的 exports 里,游戏引用不到,
3
+ * 只能经 worker.ts 的 acceptCreate / acceptJoin 开房进房,没法自己拼内部请求。
4
+ */
5
+ /**
6
+ * 平台会话 cookie 的名字(docs/platform-backend.md 15.8:"平台只读 __Host-sid")。kit 里只在这里写一次:
7
+ * 认人时请求里没有它就直接算没登录,不去问平台。
8
+ */
9
+ export const SESSION_COOKIE = '__Host-sid';
10
+ /** 请求的 Cookie 头里有没有非空的平台会话 cookie。 */
11
+ export function hasSessionCookie(cookie) {
12
+ if (!cookie)
13
+ return false;
14
+ return cookie.split(';').some((part) => {
15
+ const i = part.indexOf('=');
16
+ return i > 0 && part.slice(0, i).trim() === SESSION_COOKIE && part.slice(i + 1).trim() !== '';
17
+ });
18
+ }
19
+ /**
20
+ * 房间 fetch 只认这个主机名:kit 自己拼的内部地址(acceptJoin)。游戏 Worker 要是把浏览器的原始请求直接转进来,
21
+ * 地址是站点自己的域名,一律拒绝,浏览器自己带的 x-kit-user 头就不可能被当成身份。
22
+ */
23
+ export const KIT_HOST = 'arcade-kit.internal';
24
+ /** 身份头:JSON 再 URL 编码(昵称是中文,请求头里只放 ASCII)。只有 acceptJoin 拼的内部请求会带它。 */
25
+ export function identityHeader(me) {
26
+ return encodeURIComponent(JSON.stringify({ userId: me.userId, name: me.name }));
27
+ }
28
+ export function parseIdentity(raw) {
29
+ if (!raw)
30
+ return null;
31
+ try {
32
+ const v = JSON.parse(decodeURIComponent(raw));
33
+ return typeof v.userId === 'string' && v.userId && typeof v.name === 'string' ? { userId: v.userId, name: v.name } : null;
34
+ }
35
+ catch {
36
+ return null;
37
+ }
38
+ }
39
+ /** 6 位房间码(crypto 随机)。 */
40
+ export function newRoomCode() {
41
+ return String(crypto.getRandomValues(new Uint32Array(1))[0] % 1_000_000).padStart(6, '0');
42
+ }
43
+ /** 房间的 stub:按房间码取,尽量放在亚太(4.1)。 */
44
+ export function roomStub(ns, code) {
45
+ return ns.get(ns.idFromName(code), { locationHint: 'apac' });
46
+ }
47
+ /** 计量的名字:每个游戏 Worker 只有这一个实例(meter.ts)。 */
48
+ export const METER_NAME = 'kit-meter';
49
+ /** 计量的 stub:和房间一样放在亚太,开房、报数少绕路。 */
50
+ export function meterStub(ns) {
51
+ return ns.get(ns.idFromName(METER_NAME), { locationHint: 'apac' });
52
+ }
53
+ //# sourceMappingURL=internal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.js","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,YAAY,CAAC;AAE3C,sCAAsC;AACtC,MAAM,UAAU,gBAAgB,CAAC,MAAqB;IACpD,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1B,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;IAChG,CAAC,CAAC,CAAC;AACL,CAAC;AAQD;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,qBAAqB,CAAC;AAE9C,qEAAqE;AACrE,MAAM,UAAU,cAAc,CAAC,EAAY;IACzC,OAAO,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAkB;IAC9C,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAsB,CAAC;QACnE,OAAO,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5H,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,yBAAyB;AACzB,MAAM,UAAU,WAAW;IACzB,OAAO,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,GAAG,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC7F,CAAC;AAED,kCAAkC;AAClC,MAAM,UAAU,QAAQ,CAAC,EAA0B,EAAE,IAAY;IAC/D,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED,2CAA2C;AAC3C,MAAM,CAAC,MAAM,UAAU,GAAG,WAAW,CAAC;AAEtC,mCAAmC;AACnC,MAAM,UAAU,SAAS,CAAC,EAA0B;IAClD,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;AACrE,CAAC"}