gamesteel 0.5.2 → 0.5.4

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.
@@ -5331,7 +5331,7 @@ function said(error) {
5331
5331
  const found = FULL.exec(message);
5332
5332
  if (found === null) return error;
5333
5333
  const gb = Math.max(1, Math.round(Number(found[1]) * 1048576 / 1e9));
5334
- return new Error(`this game's database is full: its size holds ${String(gb)} GB. Delete some of its data, or make the database bigger in its Online tab`);
5334
+ return new Error(`this game's database is full: its size holds ${String(gb)} GB. Delete some of its data, or make the database bigger on its Server page`);
5335
5335
  }
5336
5336
  function bindingDb(binding) {
5337
5337
  return {
@@ -5713,7 +5713,7 @@ function guessServiceRegion(url, headers) {
5713
5713
  }
5714
5714
 
5715
5715
  // worker/files.ts
5716
- var NO_FILES_WORDS = "this game has no files: turn them on in its Online tab (they need its database)";
5716
+ var NO_FILES_WORDS = "this game has no files: turn them on, on its Server page (they need its database)";
5717
5717
  var NO_FILES = {
5718
5718
  uploadUrl: () => Promise.reject(new Error(NO_FILES_WORDS)),
5719
5719
  downloadUrl: () => Promise.reject(new Error(NO_FILES_WORDS)),
@@ -5741,7 +5741,7 @@ function uploadOf(key, options, cap) {
5741
5741
  keyed(key);
5742
5742
  const { size } = options;
5743
5743
  if (!Number.isInteger(size) || size < 1) throw new Error("an upload's size is a whole number of bytes, at least 1");
5744
- if (size > cap) throw new Error(`a file is at most ${grouped(cap)} bytes on this server's size, and this is ${grouped(size)}: make the server bigger in the game's Online tab`);
5744
+ if (size > cap) throw new Error(`a file is at most ${grouped(cap)} bytes on this server's size, and this is ${grouped(size)}: make the server bigger in the game's Server page`);
5745
5745
  const seconds = secondsOf(options.seconds, UPLOAD_SECONDS, `an upload's address lasts at most ${String(UPLOAD_SECONDS)} seconds`);
5746
5746
  return { size, contentType: options.contentType ?? "application/octet-stream", seconds };
5747
5747
  }
@@ -5834,7 +5834,7 @@ function filesOf(config, cap, fetcher = fetch) {
5834
5834
  // src/firebase.ts
5835
5835
  var TOKEN_URL = "https://oauth2.googleapis.com/token";
5836
5836
  var FCM_SCOPE = "https://www.googleapis.com/auth/firebase.messaging";
5837
- var FOR_PUSH = { scope: FCM_SCOPE, unusable: "the game's Firebase service account has no usable private key: add its JSON again in the Online tab" };
5837
+ var FOR_PUSH = { scope: FCM_SCOPE, unusable: "the game's Firebase service account has no usable private key: add its JSON again on the Server page" };
5838
5838
  var base64url = (bytes) => {
5839
5839
  let text = "";
5840
5840
  for (const byte of bytes) text += String.fromCharCode(byte);
@@ -5874,7 +5874,7 @@ async function accessToken(account, fetcher, now, purpose = FOR_PUSH) {
5874
5874
 
5875
5875
  // worker/push.ts
5876
5876
  var PLATFORMS = ["ios", "android"];
5877
- var NO_PUSH_WORDS = "this game has no push: turn it on in its Online tab, with its Firebase project (it needs its database)";
5877
+ var NO_PUSH_WORDS = "this game has no push: turn it on, on its Server page, with its Firebase project (it needs its database)";
5878
5878
  var NO_PUSH = {
5879
5879
  send: () => Promise.reject(new Error(NO_PUSH_WORDS)),
5880
5880
  register: () => Promise.reject(new Error(NO_PUSH_WORDS))
@@ -6443,7 +6443,7 @@ async function factsOf(deps, body, app) {
6443
6443
  async function purchase(deps, body, effects) {
6444
6444
  const refused = (reason) => ({ result: "refused", reason, effects: effects() });
6445
6445
  if (deps.onPurchase === void 0) return refused("this game's server code has no onPurchase");
6446
- if (deps.app === null || Object.keys(deps.app.products).length === 0) return refused("this game sells nothing: its products are in its Upload menu");
6446
+ if (deps.app === null || Object.keys(deps.app.products).length === 0) return refused("this game sells nothing: its products are in its Upload page");
6447
6447
  let facts;
6448
6448
  try {
6449
6449
  const found = await factsOf(deps, body, deps.app);
@@ -6472,9 +6472,9 @@ async function purchase(deps, body, effects) {
6472
6472
  }
6473
6473
  async function notice(deps, body) {
6474
6474
  const app = deps.app;
6475
- if (app === null) return deps.log("a store's notice reached this game, which sells nothing: its products are in its Upload menu");
6475
+ if (app === null) return deps.log("a store's notice reached this game, which sells nothing: its products are in its Upload page");
6476
6476
  if (body.store === "apple") {
6477
- if (app.bundleId === null) return deps.log("an App Store notice reached this game, which has no iOS app: its id is in the App tab");
6477
+ if (app.bundleId === null) return deps.log("an App Store notice reached this game, which has no iOS app: its id is in Upload \u203A App");
6478
6478
  const heard2 = await appleNotice(body.payload, { ...deps.apple, bundleId: app.bundleId, stage: body.stage });
6479
6479
  if (heard2.type === "TEST") return deps.log("Apple's test notification reached the game");
6480
6480
  const facts2 = heard2.transaction;
@@ -6524,7 +6524,7 @@ async function reward(deps, body) {
6524
6524
  if (given.transaction === "") throw new Error("AdMob's reward has no transaction");
6525
6525
  const unit = given.adUnit ?? "";
6526
6526
  const ours = body.stage === "test" && unit === "test" ? true : unit !== "" && unit !== "test" && (deps.app?.rewardUnits ?? []).some((id) => id === unit || id.slice(id.lastIndexOf("/") + 1) === unit);
6527
- if (!ours) return deps.log(`a reward from an ad unit that is not this game's (${unit === "" ? "none named" : unit}) was refused: its reward ad units are in its Upload menu`);
6527
+ if (!ours) return deps.log(`a reward from an ad unit that is not this game's (${unit === "" ? "none named" : unit}) was refused: its reward ad units are in its Upload page`);
6528
6528
  if (!await once(deps, "admob", given.transaction)) return;
6529
6529
  const kept = { placement: given.placement ?? "", amount: given.amount, item: given.item, transaction: given.transaction };
6530
6530
  try {
@@ -6549,7 +6549,7 @@ function bound(text) {
6549
6549
  return null;
6550
6550
  }
6551
6551
  }
6552
- var NO_DATABASE = "this game has no database: turn it on in its Online tab";
6552
+ var NO_DATABASE = "this game has no database: turn it on, on its Server page";
6553
6553
  var noDb = { query: () => Promise.reject(new Error(NO_DATABASE)) };
6554
6554
  var words2 = (error) => error instanceof Error ? error.message : String(error);
6555
6555
  var answer = (body) => new Response(JSON.stringify(body), { headers: { "content-type": "application/json" } });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gamesteel",
3
- "version": "0.5.2",
3
+ "version": "0.5.4",
4
4
  "description": "The Gamesteel program your AI agent starts, and the command that sets it up in Claude Code, Codex, Gemini CLI, Cursor, VS Code and 25 more. The work runs on your machine; the website keeps your games.",
5
5
  "keywords": [
6
6
  "gamesteel",
@@ -39,23 +39,23 @@
39
39
  "@modelcontextprotocol/sdk": "^1.0.0",
40
40
  "esbuild": "0.28.2",
41
41
  "miniflare": "4.20260730.0",
42
- "@gamesteel/builder": "0.1.0",
43
- "@gamesteel/connect": "0.1.0",
44
42
  "@gamesteel/agent": "0.1.0",
43
+ "@gamesteel/accounts": "0.1.0",
44
+ "@gamesteel/builder": "0.1.0",
45
45
  "@gamesteel/edit": "0.1.0",
46
- "@gamesteel/core": "0.1.0",
46
+ "@gamesteel/i18n": "0.1.0",
47
47
  "@gamesteel/billing": "0.1.0",
48
+ "@gamesteel/core": "0.1.0",
48
49
  "@gamesteel/cloud": "0.1.0",
49
- "@gamesteel/github": "0.1.0",
50
- "@gamesteel/accounts": "0.1.0",
51
- "@gamesteel/online": "0.1.0",
52
- "@gamesteel/model": "0.1.0",
53
- "@gamesteel/store": "0.1.0",
50
+ "@gamesteel/connect": "0.1.0",
54
51
  "@gamesteel/design": "0.1.0",
55
- "@gamesteel/studio": "0.1.0",
52
+ "@gamesteel/model": "0.1.0",
53
+ "@gamesteel/github": "0.1.0",
56
54
  "@gamesteel/service": "0.1.0",
55
+ "@gamesteel/store": "0.1.0",
56
+ "@gamesteel/online": "0.1.0",
57
57
  "@gamesteel/stores": "0.1.0",
58
- "@gamesteel/i18n": "0.1.0"
58
+ "@gamesteel/studio": "0.1.0"
59
59
  },
60
60
  "scripts": {
61
61
  "pretest": "pnpm --filter \"gamesteel^...\" --filter \"!@gamesteel/studio\" build && pnpm --filter @gamesteel/studio exec tsc -p tsconfig.json && pnpm build",