@moneypot/hub 1.3.0-dev.10 → 1.3.0-dev.12

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.
@@ -2,6 +2,7 @@ import * as pg from "pg";
2
2
  import stream from "node:stream";
3
3
  import { DbCasino, DbExperience, DbSession, DbTransferStatusKind, DbUser, DbWithdrawal } from "./types.js";
4
4
  import { TransferStatusKind } from "../__generated__/graphql.js";
5
+ export * from "../hash-chain/db-hash-chain.js";
5
6
  export * from "./types.js";
6
7
  export * from "./public.js";
7
8
  export * from "./util.js";
@@ -5,6 +5,7 @@ import { exactlyOneRow, maybeOneRow } from "./util.js";
5
5
  import { logger } from "../logger.js";
6
6
  import { setTimeout } from "node:timers/promises";
7
7
  import { assert } from "tsafe";
8
+ export * from "../hash-chain/db-hash-chain.js";
8
9
  export * from "./types.js";
9
10
  export * from "./public.js";
10
11
  export * from "./util.js";
@@ -1,12 +1,12 @@
1
1
  import { DbCasino, DbExperience, DbHash, DbHashChain, DbUser } from "../db/types.js";
2
2
  import { PgClientInTransaction } from "../db/index.js";
3
- export declare function dbLockHashChain(pgClient: PgClientInTransaction, { userId, experienceId, casinoId, hashChainId, }: {
3
+ export declare function dbLockHubHashChain(pgClient: PgClientInTransaction, { userId, experienceId, casinoId, hashChainId, }: {
4
4
  userId: DbUser["id"];
5
5
  experienceId: DbExperience["id"];
6
6
  casinoId: DbCasino["id"];
7
7
  hashChainId: DbHashChain["id"];
8
8
  }): Promise<DbHashChain | null>;
9
- export declare function dbInsertHash(pgClient: PgClientInTransaction, { hashChainId, kind, digest, iteration, metadata, }: {
9
+ export declare function dbInsertHubHash(pgClient: PgClientInTransaction, { hashChainId, kind, digest, iteration, metadata, }: {
10
10
  hashChainId: DbHashChain["id"];
11
11
  kind: DbHash["kind"];
12
12
  digest: DbHash["digest"];
@@ -1,7 +1,7 @@
1
1
  import { exactlyOneRow, maybeOneRow, } from "../db/index.js";
2
2
  import { assert } from "tsafe";
3
- export async function dbLockHashChain(pgClient, { userId, experienceId, casinoId, hashChainId, }) {
4
- assert(pgClient._inTransaction, "dbLockHashChain must be called in a transaction");
3
+ export async function dbLockHubHashChain(pgClient, { userId, experienceId, casinoId, hashChainId, }) {
4
+ assert(pgClient._inTransaction, "dbLockHubHashChain must be called in a transaction");
5
5
  return pgClient
6
6
  .query(`
7
7
  SELECT *
@@ -17,7 +17,7 @@ export async function dbLockHashChain(pgClient, { userId, experienceId, casinoId
17
17
  .then(maybeOneRow)
18
18
  .then((row) => row ?? null);
19
19
  }
20
- export async function dbInsertHash(pgClient, { hashChainId, kind, digest, iteration, metadata = {}, }) {
20
+ export async function dbInsertHubHash(pgClient, { hashChainId, kind, digest, iteration, metadata = {}, }) {
21
21
  assert(pgClient._inTransaction, "dbInsertHash must be called in a transaction");
22
22
  return pgClient
23
23
  .query(`
@@ -4,11 +4,11 @@ declare const OutcomeSchema: z.ZodObject<{
4
4
  weight: z.ZodNumber;
5
5
  profit: z.ZodNumber;
6
6
  }, "strict", z.ZodTypeAny, {
7
- weight: number;
8
7
  profit: number;
9
- }, {
10
8
  weight: number;
9
+ }, {
11
10
  profit: number;
11
+ weight: number;
12
12
  }>;
13
13
  declare const InputSchema: z.ZodObject<{
14
14
  kind: z.ZodString;
@@ -18,44 +18,44 @@ declare const InputSchema: z.ZodObject<{
18
18
  weight: z.ZodNumber;
19
19
  profit: z.ZodNumber;
20
20
  }, "strict", z.ZodTypeAny, {
21
- weight: number;
22
21
  profit: number;
23
- }, {
24
22
  weight: number;
23
+ }, {
25
24
  profit: number;
26
- }>, "many">, {
27
25
  weight: number;
26
+ }>, "many">, {
28
27
  profit: number;
29
- }[], {
30
28
  weight: number;
29
+ }[], {
31
30
  profit: number;
32
- }[]>, {
33
31
  weight: number;
32
+ }[]>, {
34
33
  profit: number;
35
- }[], {
36
34
  weight: number;
35
+ }[], {
37
36
  profit: number;
37
+ weight: number;
38
38
  }[]>;
39
39
  hashChainId: z.ZodString;
40
40
  metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
41
41
  }, "strict", z.ZodTypeAny, {
42
42
  currency: string;
43
- kind: string;
44
43
  hashChainId: string;
44
+ kind: string;
45
45
  wager: number;
46
46
  outcomes: {
47
- weight: number;
48
47
  profit: number;
48
+ weight: number;
49
49
  }[];
50
50
  metadata?: Record<string, any> | undefined;
51
51
  }, {
52
52
  currency: string;
53
- kind: string;
54
53
  hashChainId: string;
54
+ kind: string;
55
55
  wager: number;
56
56
  outcomes: {
57
- weight: number;
58
57
  profit: number;
58
+ weight: number;
59
59
  }[];
60
60
  metadata?: Record<string, any> | undefined;
61
61
  }>;
@@ -4,7 +4,7 @@ import { z } from "zod";
4
4
  import { GraphQLError } from "graphql";
5
5
  import { DbHashKind, exactlyOneRow, maybeOneRow, superuserPool, withPgPoolTransaction, } from "../db/index.js";
6
6
  import { assert } from "tsafe";
7
- import { dbInsertHash, dbLockHashChain } from "../hash-chain/db-hash-chain.js";
7
+ import { dbInsertHubHash, dbLockHubHashChain, } from "../hash-chain/db-hash-chain.js";
8
8
  import { getIntermediateHash, getPreimageHash, } from "../hash-chain/get-hash.js";
9
9
  const FLOAT_EPSILON = 1e-10;
10
10
  function sum(ns) {
@@ -128,7 +128,7 @@ export function MakeOutcomeBetPlugin({ betConfigs }) {
128
128
  initializedMetadata = result.value;
129
129
  }
130
130
  else {
131
- throw new GraphQLError(`Invalid metadata: ${result.error}`);
131
+ throw new GraphQLError(`Invalid input: ${result.error}`);
132
132
  }
133
133
  }
134
134
  const houseEV = calculateHouseEV(input.outcomes);
@@ -181,7 +181,7 @@ export function MakeOutcomeBetPlugin({ betConfigs }) {
181
181
  if (maxPotentialPayout > maxAllowablePayout) {
182
182
  throw new GraphQLError(`House risk limit exceeded. Max payout: ${maxPotentialPayout.toFixed(4)}`);
183
183
  }
184
- const dbHashChain = await dbLockHashChain(pgClient, {
184
+ const dbHashChain = await dbLockHubHashChain(pgClient, {
185
185
  userId: session.user_id,
186
186
  experienceId: session.experience_id,
187
187
  casinoId: session.casino_id,
@@ -225,7 +225,7 @@ export function MakeOutcomeBetPlugin({ betConfigs }) {
225
225
  throw new Error(`Unknown bet hash result: ${_exhaustiveCheck}`);
226
226
  }
227
227
  }
228
- await dbInsertHash(pgClient, {
228
+ await dbInsertHubHash(pgClient, {
229
229
  hashChainId: dbHashChain.id,
230
230
  kind: DbHashKind.INTERMEDIATE,
231
231
  digest: betHashResult.hash,
@@ -451,7 +451,7 @@ async function finishHashChainInBackground({ hashChainId, }) {
451
451
  iteration: 0,
452
452
  });
453
453
  await withPgPoolTransaction(superuserPool, async (pgClient) => {
454
- await dbInsertHash(pgClient, {
454
+ await dbInsertHubHash(pgClient, {
455
455
  hashChainId,
456
456
  kind: DbHashKind.PREIMAGE,
457
457
  digest: preimageHashResult.hash,
@@ -0,0 +1,18 @@
1
+ import { GraphQLInputFieldConfig } from "graphql";
2
+ export declare const HubOutcomeInputNonNullFieldsPlugin: {
3
+ name: string;
4
+ version: string;
5
+ description: string;
6
+ schema: {
7
+ hooks: {
8
+ GraphQLInputObjectType_fields_field: (field: GraphQLInputFieldConfig, build: any, context: any) => {
9
+ type: any;
10
+ description?: import("graphql/jsutils/Maybe.js").Maybe<string>;
11
+ defaultValue?: unknown;
12
+ deprecationReason?: import("graphql/jsutils/Maybe.js").Maybe<string>;
13
+ extensions?: import("graphql/jsutils/Maybe.js").Maybe<Readonly<import("graphql").GraphQLInputFieldExtensions>>;
14
+ astNode?: import("graphql/jsutils/Maybe.js").Maybe<import("graphql").InputValueDefinitionNode>;
15
+ };
16
+ };
17
+ };
18
+ };
@@ -0,0 +1,20 @@
1
+ export const HubOutcomeInputNonNullFieldsPlugin = {
2
+ name: "HubOutcomeInputNonNullFieldsPlugin",
3
+ version: "0.0.0",
4
+ description: "Specifies that HubOutcomeInput fields are non-null",
5
+ schema: {
6
+ hooks: {
7
+ GraphQLInputObjectType_fields_field: (field, build, context) => {
8
+ const { scope: { fieldName }, } = context;
9
+ if (context.scope.pgCodec?.name === "hubOutcome" &&
10
+ ["profit", "weight"].includes(fieldName)) {
11
+ return {
12
+ ...field,
13
+ type: new build.graphql.GraphQLNonNull(field.type),
14
+ };
15
+ }
16
+ return field;
17
+ },
18
+ },
19
+ },
20
+ };
@@ -23,6 +23,7 @@ import { HubCurrentXPlugin } from "../plugins/hub-current-x.js";
23
23
  import { HubCreateHashChainPlugin } from "../hash-chain/plugins/hub-create-hash-chain.js";
24
24
  import { HubBadHashChainErrorPlugin } from "../hash-chain/plugins/hub-bad-hash-chain-error.js";
25
25
  import { HubUserActiveHashChainPlugin } from "../hash-chain/plugins/hub-user-active-hash-chain.js";
26
+ import { HubOutcomeInputNonNullFieldsPlugin } from "../plugins/hub-outcome-input-non-null-fields.js";
26
27
  export const requiredPlugins = [
27
28
  SmartTagsPlugin,
28
29
  IdToNodeIdPlugin,
@@ -38,6 +39,7 @@ export const requiredPlugins = [
38
39
  export const defaultPlugins = [
39
40
  ...(config.NODE_ENV === "development" ? [DebugPlugin] : []),
40
41
  ...requiredPlugins,
42
+ HubOutcomeInputNonNullFieldsPlugin,
41
43
  HubBadHashChainErrorPlugin,
42
44
  HubCreateHashChainPlugin,
43
45
  HubUserActiveHashChainPlugin,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moneypot/hub",
3
- "version": "1.3.0-dev.10",
3
+ "version": "1.3.0-dev.12",
4
4
  "author": "moneypot.com",
5
5
  "homepage": "https://moneypot.com/hub",
6
6
  "keywords": [