@tinyburg/pocket-planes-sdk 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,3 +1,9 @@
1
- # Temporary Holding Version
1
+ # @tinyburg/pocket-planes-sdk
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ The Pocket Planes api, for the authproxy.
4
+
5
+ Pocket Planes speaks Nimblebit's NBSync protocol under the game code `pp`. Requests
6
+ are signed with `NimblebitAuth` from `@tinyburg/nimblebit-sdk`, using the
7
+ game's own secret salt, and the endpoints carry the `pocketplanes` scope tree
8
+ built by `defineGame`. Game-specific save and meta payloads are still
9
+ `Schema.Unknown`.
@@ -0,0 +1,239 @@
1
+ /**
2
+ * Pocket Planes (game code `pp`) NBSync api endpoints.
3
+ *
4
+ * Signing: a random `salt` (signed int32 - the game emits negatives too) goes
5
+ * in the path, and `hash` is `md5(<preimage> + <game secret salt>)` where the
6
+ * preimage is `pp/<playerId>/<salt><playerAuthKey>` (variants noted per
7
+ * endpoint). The secret salt is the value extracted from `NBSync._ss`.
8
+ *
9
+ * Verification (against the live server + Frida inspection of the game,
10
+ * 2026-08-26):
11
+ * - Signing is MD5, VERIFIED server-side: `player_details` accepts the MD5 hash
12
+ * and rejects a garbage hash, no hash, and a SHA-256 hash. (The game itself
13
+ * computes SHA-256 in `NBSync.genHash` for the unauthenticated `register`
14
+ * call, which the server also accepts via MD5 - so it does not affect the
15
+ * authenticated endpoints this SDK signs.)
16
+ * - Response envelopes VERIFIED by reading the game's DTO classes at runtime
17
+ * (immune to the metadata obfuscation): register (NBSyncRegisterResponse),
18
+ * player_details (NBSyncPlayerDetailsResponse), sync/pull
19
+ * (NBSyncGameSaveResponse: success/h/id/data), current_version
20
+ * (NBSyncCurrentCheckResponse), verify_device (NBSyncVerifyCodeResponse:
21
+ * success/player_id/player_ss/player_email - no photo/nickname on pp),
22
+ * get_visits/get_gifts (NBSyncItemsGetResponse), send_item
23
+ * (NBSyncItemsSendResponse), receive_item (NBSyncItemsReceiveResponse: also
24
+ * carries an `id`), friend/pull_game (NBSyncFriendGameSaveResponse),
25
+ * friend/pull_meta (NBSyncFriendGameMetaResponse). register/player_details/
26
+ * get_visits/get_gifts/request_items were also exercised live with a burnbot.
27
+ * - Still open: pp appears to have NO snapshots (`sync/current_snapshots`
28
+ * returns Invalid Request), so `pull_snapshot` here is unconfirmed and may
29
+ * not exist. register_email is DERIVED from Tiny Tower.
30
+ *
31
+ * Game-specific payload/item schemas (the `gifts` element - real shape is
32
+ * NBSyncItemsGift {gift_id, gift_to, gift_from, gift_type, item_type, gift_str,
33
+ * h, c} - friend meta, save push meta) are `Schema.Unknown` placeholders for
34
+ * the data-schema work.
35
+ *
36
+ * @since 1.0.0
37
+ * @category Endpoints
38
+ */
39
+ import { HttpApi, HttpApiEndpoint, HttpApiError, HttpApiGroup } from "effect/http-api";
40
+ import * as Schema from "effect/Schema";
41
+ /**
42
+ * One gift/visit item. Shape is game-specific; left open for the data-schema
43
+ * work. Verified only that `get_visits`/`get_gifts` return `{ gifts: [...] }`.
44
+ *
45
+ * @since 1.0.0
46
+ * @category Schemas
47
+ */
48
+ export declare const Gift: Schema.Unknown;
49
+ /**
50
+ * The Pocket Planes NBSync api.
51
+ *
52
+ * @since 1.0.0
53
+ * @category Api
54
+ */
55
+ export declare const Api: HttpApi.HttpApi<"PocketPlanesApi", HttpApiGroup.HttpApiGroup<"DeviceManagementGroup", HttpApiEndpoint.HttpApiEndpoint<"DeviceNewPlayer", "GET", "/register/pp/:salt1/:salt2/:hash", Schema.toCodecStringTree<Schema.Struct<{
56
+ salt1: Schema.Int;
57
+ salt2: Schema.Int;
58
+ hash: Schema.String;
59
+ }>>, never, never, never, Schema.toCodecJson<Schema.Struct<{
60
+ readonly error: Schema.String;
61
+ }> | Schema.encodeKeys<Schema.Struct<{
62
+ readonly playerId: Schema.brand<Schema.String, "PlayerId">;
63
+ readonly playerSs: Schema.brand<Schema.RedactedFromValue<Schema.String>, "PlayerAuthKey">;
64
+ }>, {
65
+ readonly playerId: "player_id";
66
+ readonly playerSs: "player_ss";
67
+ }>>, Schema.toCodecJson<typeof HttpApiError.BadRequest | typeof HttpApiError.Unauthorized | typeof HttpApiError.Forbidden | typeof HttpApiError.InternalServerError>, never, never> | HttpApiEndpoint.HttpApiEndpoint<"DevicePlayerDetails", "GET", "/player_details/pp/:playerId/:salt/:hash", Schema.toCodecStringTree<Schema.Struct<{
68
+ playerId: Schema.brand<Schema.String, "PlayerId">;
69
+ salt: Schema.Int;
70
+ hash: Schema.String;
71
+ }>>, never, never, never, Schema.toCodecJson<Schema.Struct<{
72
+ readonly error: Schema.String;
73
+ }> | Schema.Struct<{
74
+ readonly success: Schema.Literal<"Found">;
75
+ readonly player: Schema.encodeKeys<Schema.Struct<{
76
+ readonly playerId: Schema.brand<Schema.String, "PlayerId">;
77
+ readonly playerEmail: Schema.brand<Schema.RedactedFromValue<Schema.String>, "PlayerEmail">;
78
+ readonly registered: Schema.compose<Schema.BooleanFromBit, Schema.NumberFromString>;
79
+ readonly blacklisted: Schema.compose<Schema.BooleanFromBit, Schema.NumberFromString>;
80
+ readonly saveVersion: Schema.compose<Schema.Int, Schema.NumberFromString>;
81
+ readonly checksum: Schema.String;
82
+ }>, {
83
+ readonly playerId: "player_id";
84
+ readonly playerEmail: "email";
85
+ readonly checksum: "h";
86
+ }>;
87
+ }>>, Schema.toCodecJson<typeof HttpApiError.BadRequest | typeof HttpApiError.Unauthorized | typeof HttpApiError.Forbidden | typeof HttpApiError.InternalServerError>, never, never> | HttpApiEndpoint.HttpApiEndpoint<"DeviceRegisterEmail", "POST", "/register_email/pp/:playerId/:salt/:hash", Schema.toCodecStringTree<Schema.Struct<{
88
+ playerId: Schema.brand<Schema.String, "PlayerId">;
89
+ salt: Schema.Int;
90
+ hash: Schema.String;
91
+ }>>, never, Schema.toCodecJson<Schema.Struct<{
92
+ readonly promote: Schema.Literal<1>;
93
+ readonly email: Schema.Redacted<Schema.String>;
94
+ }>>, never, Schema.toCodecJson<Schema.Struct<{
95
+ readonly error: Schema.String;
96
+ }> | Schema.Struct<{
97
+ readonly success: Schema.Literal<"NewEmail">;
98
+ }> | Schema.Struct<{
99
+ readonly success: Schema.Literal<"NewDevice">;
100
+ }>>, Schema.toCodecJson<typeof HttpApiError.BadRequest | typeof HttpApiError.Unauthorized | typeof HttpApiError.Forbidden | typeof HttpApiError.InternalServerError>, never, never> | HttpApiEndpoint.HttpApiEndpoint<"DeviceVerifyDevice", "GET", "/verify_device/pp/:playerId/:verificationCode", Schema.toCodecStringTree<Schema.Struct<{
101
+ playerId: Schema.brand<Schema.String, "PlayerId">;
102
+ verificationCode: Schema.String;
103
+ }>>, never, never, never, Schema.toCodecJson<Schema.Struct<{
104
+ readonly error: Schema.String;
105
+ }> | Schema.encodeKeys<Schema.Struct<{
106
+ readonly success: Schema.Literal<"NewDevice">;
107
+ readonly playerId: Schema.brand<Schema.String, "PlayerId">;
108
+ readonly playerAuthKey: Schema.brand<Schema.RedactedFromValue<Schema.String>, "PlayerAuthKey">;
109
+ readonly playerEmail: Schema.brand<Schema.RedactedFromValue<Schema.String>, "PlayerEmail">;
110
+ }>, {
111
+ readonly playerId: "player_id";
112
+ readonly playerAuthKey: "player_ss";
113
+ readonly playerEmail: "player_email";
114
+ }>>, Schema.toCodecJson<typeof HttpApiError.BadRequest | typeof HttpApiError.Unauthorized | typeof HttpApiError.Forbidden | typeof HttpApiError.InternalServerError>, never, never>, false> | HttpApiGroup.HttpApiGroup<"SocialGroup", HttpApiEndpoint.HttpApiEndpoint<"SocialGetGifts", "GET", "/get_gifts/pp/:playerId/:salt/:hash", Schema.toCodecStringTree<Schema.Struct<{
115
+ playerId: Schema.brand<Schema.String, "PlayerId">;
116
+ salt: Schema.Int;
117
+ hash: Schema.String;
118
+ }>>, never, never, never, Schema.toCodecJson<Schema.Struct<{
119
+ readonly error: Schema.String;
120
+ }> | Schema.Struct<{
121
+ readonly success: Schema.Literal<"NotFound">;
122
+ }> | Schema.Struct<{
123
+ readonly success: Schema.Literal<"Found">;
124
+ readonly gifts: Schema.$Array<Schema.Unknown>;
125
+ readonly total: Schema.Int;
126
+ }>>, Schema.toCodecJson<typeof HttpApiError.BadRequest | typeof HttpApiError.Unauthorized | typeof HttpApiError.Forbidden | typeof HttpApiError.InternalServerError>, never, never> | HttpApiEndpoint.HttpApiEndpoint<"SocialGetVisits", "GET", "/get_visits/pp/:playerId/:salt/:hash", Schema.toCodecStringTree<Schema.Struct<{
127
+ playerId: Schema.brand<Schema.String, "PlayerId">;
128
+ salt: Schema.Int;
129
+ hash: Schema.String;
130
+ }>>, never, never, never, Schema.toCodecJson<Schema.Struct<{
131
+ readonly error: Schema.String;
132
+ }> | Schema.Struct<{
133
+ readonly success: Schema.Literal<"NotFound">;
134
+ }> | Schema.Struct<{
135
+ readonly success: Schema.Literal<"Found">;
136
+ readonly gifts: Schema.$Array<Schema.Unknown>;
137
+ readonly total: Schema.Int;
138
+ }>>, Schema.toCodecJson<typeof HttpApiError.BadRequest | typeof HttpApiError.Unauthorized | typeof HttpApiError.Forbidden | typeof HttpApiError.InternalServerError>, never, never> | HttpApiEndpoint.HttpApiEndpoint<"SocialPullFriendGame", "GET", "/friend/pull_game/pp/:playerId/:friendId/:salt/:hash", Schema.toCodecStringTree<Schema.Struct<{
139
+ playerId: Schema.brand<Schema.String, "PlayerId">;
140
+ friendId: Schema.brand<Schema.String, "PlayerId">;
141
+ salt: Schema.Int;
142
+ hash: Schema.String;
143
+ }>>, never, never, never, Schema.toCodecJson<Schema.Struct<{
144
+ readonly error: Schema.String;
145
+ }> | Schema.Struct<{
146
+ readonly success: Schema.Literal<"NotFound">;
147
+ }> | Schema.encodeKeys<Schema.Struct<{
148
+ readonly success: Schema.Literal<"Found">;
149
+ readonly data: Schema.Uint8ArrayFromBase64;
150
+ readonly checksum: Schema.String;
151
+ readonly saveId: Schema.NumberFromString;
152
+ readonly playerId: Schema.brand<Schema.String, "PlayerId">;
153
+ }>, {
154
+ readonly checksum: "h";
155
+ readonly saveId: "id";
156
+ readonly playerId: "player_id";
157
+ }>>, Schema.toCodecJson<typeof HttpApiError.BadRequest | typeof HttpApiError.Unauthorized | typeof HttpApiError.Forbidden | typeof HttpApiError.InternalServerError>, never, never> | HttpApiEndpoint.HttpApiEndpoint<"SocialPullFriendMeta", "POST", "/friend/pull_meta/pp/:playerId/:salt/:hash", Schema.toCodecStringTree<Schema.Struct<{
158
+ playerId: Schema.brand<Schema.String, "PlayerId">;
159
+ salt: Schema.Int;
160
+ hash: Schema.String;
161
+ }>>, never, Schema.toCodecJson<Schema.Struct<{
162
+ readonly friends: Schema.brand<Schema.String, "PlayerId">;
163
+ }>>, never, Schema.toCodecJson<Schema.Struct<{
164
+ readonly error: Schema.String;
165
+ }> | Schema.Struct<{
166
+ readonly success: Schema.Literal<"NotFound">;
167
+ }> | Schema.Struct<{
168
+ readonly success: Schema.Literal<"Found">;
169
+ readonly meta: Schema.$Record<Schema.brand<Schema.String, "PlayerId">, Schema.Unknown>;
170
+ }>>, Schema.toCodecJson<typeof HttpApiError.BadRequest | typeof HttpApiError.Unauthorized | typeof HttpApiError.Forbidden | typeof HttpApiError.InternalServerError>, never, never> | HttpApiEndpoint.HttpApiEndpoint<"SocialReceiveItem", "GET", "/receive_item/pp/:playerId/:giftId/:salt/:hash", Schema.toCodecStringTree<Schema.Struct<{
171
+ playerId: Schema.brand<Schema.String, "PlayerId">;
172
+ giftId: Schema.Int;
173
+ salt: Schema.Int;
174
+ hash: Schema.String;
175
+ }>>, never, never, never, Schema.toCodecJson<Schema.Struct<{
176
+ readonly error: Schema.String;
177
+ }> | Schema.Struct<{
178
+ readonly success: Schema.Literal<"NotReceived">;
179
+ }> | Schema.Struct<{
180
+ readonly success: Schema.Literal<"Received">;
181
+ readonly id: Schema.optionalKey<Schema.String>;
182
+ }>>, Schema.toCodecJson<typeof HttpApiError.BadRequest | typeof HttpApiError.Unauthorized | typeof HttpApiError.Forbidden | typeof HttpApiError.InternalServerError>, never, never> | HttpApiEndpoint.HttpApiEndpoint<"SocialRequestItems", "GET", "/request_items/pp/:playerId/:salt/:hash", Schema.toCodecStringTree<Schema.Struct<{
183
+ playerId: Schema.brand<Schema.String, "PlayerId">;
184
+ salt: Schema.Int;
185
+ hash: Schema.String;
186
+ }>>, never, never, never, Schema.toCodecJson<Schema.Struct<{
187
+ readonly error: Schema.String;
188
+ }> | Schema.Struct<{
189
+ readonly success: Schema.Literal<"NotFound">;
190
+ }> | Schema.Struct<{
191
+ readonly success: Schema.Literal<"Found">;
192
+ readonly gifts: Schema.$Array<Schema.Unknown>;
193
+ }>>, Schema.toCodecJson<typeof HttpApiError.BadRequest | typeof HttpApiError.Unauthorized | typeof HttpApiError.Forbidden | typeof HttpApiError.InternalServerError>, never, never> | HttpApiEndpoint.HttpApiEndpoint<"SocialSendItem", "POST", "/send_item/pp/:itemType/:playerId/:friendId/:salt/:hash", Schema.toCodecStringTree<Schema.Struct<{
194
+ itemType: Schema.String;
195
+ playerId: Schema.brand<Schema.String, "PlayerId">;
196
+ friendId: Schema.brand<Schema.String, "PlayerId">;
197
+ salt: Schema.Int;
198
+ hash: Schema.String;
199
+ }>>, never, Schema.toCodecJson<Schema.Struct<{
200
+ readonly itemStr: Schema.String;
201
+ }>>, never, Schema.toCodecJson<Schema.Struct<{
202
+ readonly error: Schema.String;
203
+ }> | Schema.Struct<{
204
+ readonly success: Schema.Literal<"Sent">;
205
+ }> | Schema.Struct<{
206
+ readonly success: Schema.Literal<"NotSent">;
207
+ }>>, Schema.toCodecJson<typeof HttpApiError.BadRequest | typeof HttpApiError.Unauthorized | typeof HttpApiError.Forbidden | typeof HttpApiError.InternalServerError>, never, never>, false> | HttpApiGroup.HttpApiGroup<"SyncManagementGroup", HttpApiEndpoint.HttpApiEndpoint<"SyncCheckForNewerSave", "GET", "/sync/current_version/pp/:playerId/:salt/:hash", Schema.toCodecStringTree<Schema.Struct<{
208
+ playerId: Schema.brand<Schema.String, "PlayerId">;
209
+ salt: Schema.Int;
210
+ hash: Schema.String;
211
+ }>>, never, never, never, Schema.toCodecJson<Schema.Struct<{
212
+ readonly error: Schema.String;
213
+ }> | Schema.Struct<{
214
+ readonly success: Schema.Literal<"NotFound">;
215
+ }> | Schema.encodeKeys<Schema.Struct<{
216
+ readonly success: Schema.Literal<"Found">;
217
+ readonly checksum: Schema.String;
218
+ readonly saveId: Schema.NumberFromString;
219
+ }>, {
220
+ readonly checksum: "h";
221
+ readonly saveId: "id";
222
+ }>>, Schema.toCodecJson<typeof HttpApiError.BadRequest | typeof HttpApiError.Unauthorized | typeof HttpApiError.Forbidden | typeof HttpApiError.InternalServerError>, never, never> | HttpApiEndpoint.HttpApiEndpoint<"SyncPullSave", "GET", "/sync/pull/pp/:playerId/:salt/:hash", Schema.toCodecStringTree<Schema.Struct<{
223
+ playerId: Schema.brand<Schema.String, "PlayerId">;
224
+ salt: Schema.Int;
225
+ hash: Schema.String;
226
+ }>>, never, never, never, Schema.toCodecJson<Schema.Struct<{
227
+ readonly error: Schema.String;
228
+ }> | Schema.Struct<{
229
+ readonly success: Schema.Literal<"NotFound">;
230
+ }> | Schema.encodeKeys<Schema.Struct<{
231
+ readonly success: Schema.Literal<"Found">;
232
+ readonly data: Schema.Uint8ArrayFromBase64;
233
+ readonly checksum: Schema.String;
234
+ readonly saveId: Schema.NumberFromString;
235
+ }>, {
236
+ readonly checksum: "h";
237
+ readonly saveId: "id";
238
+ }>>, Schema.toCodecJson<typeof HttpApiError.BadRequest | typeof HttpApiError.Unauthorized | typeof HttpApiError.Forbidden | typeof HttpApiError.InternalServerError>, never, never>, false>>;
239
+ //# sourceMappingURL=Endpoints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Endpoints.d.ts","sourceRoot":"","sources":["../src/Endpoints.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACvF,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAkDxC;;;;;;GAMG;AACH,eAAO,MAAM,IAAI,gBAAiB,CAAC;AA+SnC;;;;;GAKG;AACH,eAAO,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4LAAuG,CAAC"}
@@ -0,0 +1,383 @@
1
+ /**
2
+ * Pocket Planes (game code `pp`) NBSync api endpoints.
3
+ *
4
+ * Signing: a random `salt` (signed int32 - the game emits negatives too) goes
5
+ * in the path, and `hash` is `md5(<preimage> + <game secret salt>)` where the
6
+ * preimage is `pp/<playerId>/<salt><playerAuthKey>` (variants noted per
7
+ * endpoint). The secret salt is the value extracted from `NBSync._ss`.
8
+ *
9
+ * Verification (against the live server + Frida inspection of the game,
10
+ * 2026-08-26):
11
+ * - Signing is MD5, VERIFIED server-side: `player_details` accepts the MD5 hash
12
+ * and rejects a garbage hash, no hash, and a SHA-256 hash. (The game itself
13
+ * computes SHA-256 in `NBSync.genHash` for the unauthenticated `register`
14
+ * call, which the server also accepts via MD5 - so it does not affect the
15
+ * authenticated endpoints this SDK signs.)
16
+ * - Response envelopes VERIFIED by reading the game's DTO classes at runtime
17
+ * (immune to the metadata obfuscation): register (NBSyncRegisterResponse),
18
+ * player_details (NBSyncPlayerDetailsResponse), sync/pull
19
+ * (NBSyncGameSaveResponse: success/h/id/data), current_version
20
+ * (NBSyncCurrentCheckResponse), verify_device (NBSyncVerifyCodeResponse:
21
+ * success/player_id/player_ss/player_email - no photo/nickname on pp),
22
+ * get_visits/get_gifts (NBSyncItemsGetResponse), send_item
23
+ * (NBSyncItemsSendResponse), receive_item (NBSyncItemsReceiveResponse: also
24
+ * carries an `id`), friend/pull_game (NBSyncFriendGameSaveResponse),
25
+ * friend/pull_meta (NBSyncFriendGameMetaResponse). register/player_details/
26
+ * get_visits/get_gifts/request_items were also exercised live with a burnbot.
27
+ * - Still open: pp appears to have NO snapshots (`sync/current_snapshots`
28
+ * returns Invalid Request), so `pull_snapshot` here is unconfirmed and may
29
+ * not exist. register_email is DERIVED from Tiny Tower.
30
+ *
31
+ * Game-specific payload/item schemas (the `gifts` element - real shape is
32
+ * NBSyncItemsGift {gift_id, gift_to, gift_from, gift_type, item_type, gift_str,
33
+ * h, c} - friend meta, save push meta) are `Schema.Unknown` placeholders for
34
+ * the data-schema work.
35
+ *
36
+ * @since 1.0.0
37
+ * @category Endpoints
38
+ */
39
+ import { HttpApi, HttpApiEndpoint, HttpApiError, HttpApiGroup } from "effect/http-api";
40
+ import * as Schema from "effect/Schema";
41
+ import * as NimblebitConfig from "@tinyburg/nimblebit-sdk/NimblebitConfig";
42
+ import * as OAuthScope from "@yielded/auth/OAuthScope";
43
+ import * as Scopes from "./Scopes.js";
44
+ /** @internal */
45
+ export const U32 = /*#__PURE__*/Schema.Int.check(/*#__PURE__*/Schema.isUint32());
46
+ /** @internal */
47
+ export const ApiErrors = [HttpApiError.Forbidden, HttpApiError.BadRequest, HttpApiError.Unauthorized, HttpApiError.InternalServerError];
48
+ /**
49
+ * NBSync returns errors as `{ error: <string> }`. Observed values include
50
+ * `"Invalid Request"`, `"NoSave"`, and `"SaveNotFound"`.
51
+ *
52
+ * @internal
53
+ */
54
+ export const ErrorResponse = /*#__PURE__*/Schema.Struct({
55
+ error: Schema.String
56
+ });
57
+ /** @internal */
58
+ export const FoundResponse = /*#__PURE__*/Schema.Struct({
59
+ success: /*#__PURE__*/Schema.Literal("Found")
60
+ });
61
+ /** @internal */
62
+ export const NotFoundResponse = /*#__PURE__*/Schema.Struct({
63
+ success: /*#__PURE__*/Schema.Literal("NotFound")
64
+ });
65
+ /** @internal */
66
+ export const SavedResponse = /*#__PURE__*/Schema.Struct({
67
+ success: /*#__PURE__*/Schema.Literal("Saved")
68
+ });
69
+ /** @internal */
70
+ export const NotSavedResponse = /*#__PURE__*/Schema.Struct({
71
+ success: /*#__PURE__*/Schema.Literal("NotSaved")
72
+ });
73
+ /** @internal */
74
+ export const SentResponse = /*#__PURE__*/Schema.Struct({
75
+ success: /*#__PURE__*/Schema.Literal("Sent")
76
+ });
77
+ /** @internal */
78
+ export const NotSentResponse = /*#__PURE__*/Schema.Struct({
79
+ success: /*#__PURE__*/Schema.Literal("NotSent")
80
+ });
81
+ /** @internal */
82
+ export const ReceivedResponse = /*#__PURE__*/Schema.Struct({
83
+ success: /*#__PURE__*/Schema.Literal("Received")
84
+ });
85
+ /** @internal */
86
+ export const NotReceivedResponse = /*#__PURE__*/Schema.Struct({
87
+ success: /*#__PURE__*/Schema.Literal("NotReceived")
88
+ });
89
+ /**
90
+ * One gift/visit item. Shape is game-specific; left open for the data-schema
91
+ * work. Verified only that `get_visits`/`get_gifts` return `{ gifts: [...] }`.
92
+ *
93
+ * @since 1.0.0
94
+ * @category Schemas
95
+ */
96
+ export const Gift = Schema.Unknown;
97
+ /**
98
+ * Player summary. VERIFIED shape:
99
+ * `{"success":"Found","player":{"player_id","registered","email","blacklisted","saveVersion","h"}}`.
100
+ *
101
+ * @internal
102
+ */
103
+ export const DeviceNewPlayerEndpoint = /*#__PURE__*/HttpApiEndpoint.get("DeviceNewPlayer", "/register/pp/:salt1/:salt2/:hash", {
104
+ params: {
105
+ salt1: U32,
106
+ salt2: U32,
107
+ hash: Schema.String
108
+ },
109
+ error: ApiErrors,
110
+ success: [ErrorResponse, /*#__PURE__*/Schema.Struct({
111
+ playerId: NimblebitConfig.PlayerIdSchema,
112
+ playerSs: NimblebitConfig.PlayerAuthKeySchema
113
+ }).pipe(/*#__PURE__*/Schema.encodeKeys({
114
+ playerId: "player_id",
115
+ playerSs: "player_ss"
116
+ }))]
117
+ });
118
+ /** @internal */
119
+ export const DevicePlayerDetailsEndpoint = /*#__PURE__*/HttpApiEndpoint.get("DevicePlayerDetails", "/player_details/pp/:playerId/:salt/:hash", {
120
+ params: {
121
+ playerId: NimblebitConfig.PlayerIdSchema,
122
+ salt: U32,
123
+ hash: Schema.String
124
+ },
125
+ error: ApiErrors,
126
+ success: [ErrorResponse, Schema.Struct({
127
+ success: Schema.Literal("Found"),
128
+ player: Schema.Struct({
129
+ playerId: NimblebitConfig.PlayerIdSchema,
130
+ playerEmail: NimblebitConfig.PlayerEmailSchema,
131
+ registered: Schema.NumberFromString.pipe(Schema.decodeTo(Schema.BooleanFromBit)),
132
+ blacklisted: Schema.NumberFromString.pipe(Schema.decodeTo(Schema.BooleanFromBit)),
133
+ saveVersion: Schema.NumberFromString.pipe(Schema.decodeTo(Schema.Int)),
134
+ checksum: Schema.String
135
+ }).pipe(Schema.encodeKeys({
136
+ playerId: "player_id",
137
+ playerEmail: "email",
138
+ checksum: "h"
139
+ }))
140
+ })]
141
+ }).annotate(OAuthScope.Required, Scopes.Device.read.player_details.required);
142
+ /**
143
+ * DERIVED from Tiny Tower; not yet confirmed for pp.
144
+ *
145
+ * @internal
146
+ */
147
+ export const DeviceVerifyDeviceEndpoint = /*#__PURE__*/HttpApiEndpoint.get("DeviceVerifyDevice", "/verify_device/pp/:playerId/:verificationCode", {
148
+ params: {
149
+ playerId: NimblebitConfig.PlayerIdSchema,
150
+ verificationCode: Schema.String
151
+ },
152
+ error: ApiErrors,
153
+ success: [ErrorResponse, Schema.Struct({
154
+ success: Schema.Literal("NewDevice"),
155
+ playerId: NimblebitConfig.PlayerIdSchema,
156
+ playerAuthKey: NimblebitConfig.PlayerAuthKeySchema,
157
+ playerEmail: NimblebitConfig.PlayerEmailSchema
158
+ }).pipe(Schema.encodeKeys({
159
+ playerId: "player_id",
160
+ playerAuthKey: "player_ss",
161
+ playerEmail: "player_email"
162
+ }))]
163
+ }).annotate(OAuthScope.Required, Scopes.Device.write.verify_device.required);
164
+ /**
165
+ * DERIVED from Tiny Tower; not yet confirmed for pp.
166
+ *
167
+ * @internal
168
+ */
169
+ export const DeviceRegisterEmailEndpoint = /*#__PURE__*/HttpApiEndpoint.post("DeviceRegisterEmail", "/register_email/pp/:playerId/:salt/:hash", {
170
+ params: {
171
+ playerId: NimblebitConfig.PlayerIdSchema,
172
+ salt: U32,
173
+ hash: Schema.String
174
+ },
175
+ payload: Schema.Struct({
176
+ promote: Schema.Literal(1),
177
+ email: Schema.Redacted(Schema.String)
178
+ }),
179
+ error: ApiErrors,
180
+ success: [ErrorResponse, Schema.Struct({
181
+ success: Schema.Literal("NewEmail")
182
+ }), Schema.Struct({
183
+ success: Schema.Literal("NewDevice")
184
+ })]
185
+ }).annotate(OAuthScope.Required, Scopes.Device.write.register_email.required);
186
+ /**
187
+ * Pull the player's cloud save. `data` is base64 pako-deflated bytes (parse into
188
+ * the game save schema separately). VERIFIED the no-save case returns
189
+ * `{ error: "SaveNotFound" }`; the Found envelope is DERIVED from Tiny Tower.
190
+ *
191
+ * @internal
192
+ */
193
+ export const SyncPullSaveEndpoint = /*#__PURE__*/HttpApiEndpoint.get("SyncPullSave", "/sync/pull/pp/:playerId/:salt/:hash", {
194
+ params: {
195
+ playerId: NimblebitConfig.PlayerIdSchema,
196
+ salt: U32,
197
+ hash: Schema.String
198
+ },
199
+ error: ApiErrors,
200
+ success: [ErrorResponse, NotFoundResponse, /*#__PURE__*/Schema.Struct({
201
+ success: Schema.Literal("Found"),
202
+ data: Schema.Uint8ArrayFromBase64,
203
+ checksum: Schema.String,
204
+ saveId: Schema.NumberFromString
205
+ }).pipe(/*#__PURE__*/Schema.encodeKeys({
206
+ checksum: "h",
207
+ saveId: "id"
208
+ }))]
209
+ });
210
+ /**
211
+ * VERIFIED the no-save case returns `{ error: "NoSave" }`; Found envelope
212
+ * DERIVED from Tiny Tower.
213
+ *
214
+ * @internal
215
+ */
216
+ export const SyncCheckForNewerSaveEndpoint = /*#__PURE__*/HttpApiEndpoint.get("SyncCheckForNewerSave", "/sync/current_version/pp/:playerId/:salt/:hash", {
217
+ params: {
218
+ playerId: NimblebitConfig.PlayerIdSchema,
219
+ salt: U32,
220
+ hash: Schema.String
221
+ },
222
+ error: ApiErrors,
223
+ success: [ErrorResponse, NotFoundResponse, /*#__PURE__*/Schema.Struct({
224
+ success: Schema.Literal("Found"),
225
+ checksum: Schema.String,
226
+ saveId: Schema.NumberFromString
227
+ }).pipe(/*#__PURE__*/Schema.encodeKeys({
228
+ checksum: "h",
229
+ saveId: "id"
230
+ }))]
231
+ });
232
+ /**
233
+ * VERIFIED: `/get_visits/pp/:playerId/:salt/:hash` -> `{ success:"Found", gifts:[...], total }`.
234
+ *
235
+ * @internal
236
+ */
237
+ export const SocialGetVisitsEndpoint = /*#__PURE__*/HttpApiEndpoint.get("SocialGetVisits", "/get_visits/pp/:playerId/:salt/:hash", {
238
+ params: {
239
+ playerId: NimblebitConfig.PlayerIdSchema,
240
+ salt: U32,
241
+ hash: Schema.String
242
+ },
243
+ error: ApiErrors,
244
+ success: [ErrorResponse, NotFoundResponse, Schema.Struct({
245
+ success: Schema.Literal("Found"),
246
+ gifts: Schema.Array(Gift),
247
+ total: Schema.Int
248
+ })]
249
+ }).annotate(OAuthScope.Required, Scopes.Social.read.get_visits.required);
250
+ /**
251
+ * VERIFIED: `/get_gifts/pp/:playerId/:salt/:hash` -> `{ success:"Found", gifts:[...], total }`.
252
+ *
253
+ * @internal
254
+ */
255
+ export const SocialGetGiftsEndpoint = /*#__PURE__*/HttpApiEndpoint.get("SocialGetGifts", "/get_gifts/pp/:playerId/:salt/:hash", {
256
+ params: {
257
+ playerId: NimblebitConfig.PlayerIdSchema,
258
+ salt: U32,
259
+ hash: Schema.String
260
+ },
261
+ error: ApiErrors,
262
+ success: [ErrorResponse, NotFoundResponse, Schema.Struct({
263
+ success: Schema.Literal("Found"),
264
+ gifts: Schema.Array(Gift),
265
+ total: Schema.Int
266
+ })]
267
+ }).annotate(OAuthScope.Required, Scopes.Social.read.get_gifts.required);
268
+ /**
269
+ * VERIFIED: `/request_items/pp/:playerId/:salt/:hash` -> `{ success:"Found", gifts:[...] }`
270
+ * (note: no `total`, unlike get_visits/get_gifts). Pocket Planes specific.
271
+ *
272
+ * @internal
273
+ */
274
+ export const SocialRequestItemsEndpoint = /*#__PURE__*/HttpApiEndpoint.get("SocialRequestItems", "/request_items/pp/:playerId/:salt/:hash", {
275
+ params: {
276
+ playerId: NimblebitConfig.PlayerIdSchema,
277
+ salt: U32,
278
+ hash: Schema.String
279
+ },
280
+ error: ApiErrors,
281
+ success: [ErrorResponse, NotFoundResponse, Schema.Struct({
282
+ success: Schema.Literal("Found"),
283
+ gifts: Schema.Array(Gift)
284
+ })]
285
+ }).annotate(OAuthScope.Required, Scopes.Social.read.request_items.required);
286
+ /**
287
+ * DERIVED from Tiny Tower. Sends an item to a friend (write path, not exercised).
288
+ *
289
+ * @internal
290
+ */
291
+ export const SocialSendItemEndpoint = /*#__PURE__*/HttpApiEndpoint.post("SocialSendItem", "/send_item/pp/:itemType/:playerId/:friendId/:salt/:hash", {
292
+ params: {
293
+ itemType: Schema.String,
294
+ playerId: NimblebitConfig.PlayerIdSchema,
295
+ friendId: NimblebitConfig.PlayerIdSchema,
296
+ salt: U32,
297
+ hash: Schema.String
298
+ },
299
+ payload: Schema.Struct({
300
+ itemStr: Schema.String
301
+ }),
302
+ error: ApiErrors,
303
+ success: [ErrorResponse, SentResponse, NotSentResponse]
304
+ }).annotate(OAuthScope.Required, Scopes.Social.write.send_item.required);
305
+ /**
306
+ * Preimage `pp/<playerId>/<giftId>/<salt><playerAuthKey>` (path derived from Tiny
307
+ * Tower). Response DTO NBSyncItemsReceiveResponse also carries an `id`.
308
+ *
309
+ * @internal
310
+ */
311
+ export const SocialReceiveItemEndpoint = /*#__PURE__*/HttpApiEndpoint.get("SocialReceiveItem", "/receive_item/pp/:playerId/:giftId/:salt/:hash", {
312
+ params: {
313
+ playerId: NimblebitConfig.PlayerIdSchema,
314
+ giftId: Schema.Int,
315
+ salt: U32,
316
+ hash: Schema.String
317
+ },
318
+ error: ApiErrors,
319
+ success: [ErrorResponse, Schema.Struct({
320
+ success: Schema.Literal("Received"),
321
+ id: Schema.optionalKey(Schema.String)
322
+ }), NotReceivedResponse]
323
+ }).annotate(OAuthScope.Required, Scopes.Social.write.receive_item.required);
324
+ /**
325
+ * DERIVED from Tiny Tower; preimage `pp/<playerId>/<salt><friendId><playerAuthKey>`.
326
+ * `meta` element shape is game-specific (placeholder).
327
+ *
328
+ * @internal
329
+ */
330
+ export const SocialPullFriendMetaEndpoint = /*#__PURE__*/HttpApiEndpoint.post("SocialPullFriendMeta", "/friend/pull_meta/pp/:playerId/:salt/:hash", {
331
+ params: {
332
+ playerId: NimblebitConfig.PlayerIdSchema,
333
+ salt: U32,
334
+ hash: Schema.String
335
+ },
336
+ payload: Schema.Struct({
337
+ friends: NimblebitConfig.PlayerIdSchema
338
+ }),
339
+ error: ApiErrors,
340
+ success: [ErrorResponse, NotFoundResponse, Schema.Struct({
341
+ success: Schema.Literal("Found"),
342
+ meta: Schema.Record(NimblebitConfig.PlayerIdSchema, Schema.Unknown)
343
+ })]
344
+ }).annotate(OAuthScope.Required, Scopes.Social.read.pull_friend_meta.required);
345
+ /**
346
+ * DERIVED from Tiny Tower; preimage `pp/<playerId>/<friendId>/<salt><playerAuthKey>`.
347
+ *
348
+ * @internal
349
+ */
350
+ export const SocialPullFriendGameEndpoint = /*#__PURE__*/HttpApiEndpoint.get("SocialPullFriendGame", "/friend/pull_game/pp/:playerId/:friendId/:salt/:hash", {
351
+ params: {
352
+ playerId: NimblebitConfig.PlayerIdSchema,
353
+ friendId: NimblebitConfig.PlayerIdSchema,
354
+ salt: U32,
355
+ hash: Schema.String
356
+ },
357
+ error: ApiErrors,
358
+ success: [ErrorResponse, NotFoundResponse, Schema.Struct({
359
+ success: Schema.Literal("Found"),
360
+ data: Schema.Uint8ArrayFromBase64,
361
+ checksum: Schema.String,
362
+ saveId: Schema.NumberFromString,
363
+ playerId: NimblebitConfig.PlayerIdSchema
364
+ }).pipe(Schema.encodeKeys({
365
+ checksum: "h",
366
+ saveId: "id",
367
+ playerId: "player_id"
368
+ }))]
369
+ }).annotate(OAuthScope.Required, Scopes.Social.read.pull_friend_game.required);
370
+ /** @internal */
371
+ export const DeviceManagementGroup = /*#__PURE__*/HttpApiGroup.make("DeviceManagementGroup").add(DeviceNewPlayerEndpoint).add(DevicePlayerDetailsEndpoint).add(DeviceVerifyDeviceEndpoint).add(DeviceRegisterEmailEndpoint);
372
+ /** @internal */
373
+ export const SyncManagementGroup = /*#__PURE__*/HttpApiGroup.make("SyncManagementGroup").add(SyncPullSaveEndpoint).add(SyncCheckForNewerSaveEndpoint);
374
+ /** @internal */
375
+ export const SocialGroup = /*#__PURE__*/HttpApiGroup.make("SocialGroup").add(SocialGetVisitsEndpoint).add(SocialGetGiftsEndpoint).add(SocialRequestItemsEndpoint).add(SocialSendItemEndpoint).add(SocialReceiveItemEndpoint).add(SocialPullFriendMetaEndpoint).add(SocialPullFriendGameEndpoint);
376
+ /**
377
+ * The Pocket Planes NBSync api.
378
+ *
379
+ * @since 1.0.0
380
+ * @category Api
381
+ */
382
+ export const Api = /*#__PURE__*/HttpApi.make("PocketPlanesApi").add(DeviceManagementGroup).add(SyncManagementGroup).add(SocialGroup);
383
+ //# sourceMappingURL=Endpoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Endpoints.js","names":[],"sources":["../src/Endpoints.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}