@stamprally/react 0.13.0 → 0.14.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.
package/dist/index.cjs CHANGED
@@ -1,8 +1,8 @@
1
+ "use client";
1
2
  'use strict';
2
3
 
3
4
  var react = require('react');
4
5
 
5
- // src/useStampRally.ts
6
6
  function serverSnapshot() {
7
7
  return null;
8
8
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/useStampRally.ts"],"names":["useCallback","useSyncExternalStore","useState","useEffect"],"mappings":"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","file":"index.cjs","sourcesContent":["import type {\n CheckInOptions,\n CheckInResult,\n ClaimOptions,\n ClaimResult,\n StampRallyClient,\n SyncState,\n UserRallyState,\n} from \"@stamprally/core\";\nimport { useCallback, useEffect, useState, useSyncExternalStore } from \"react\";\n\nexport interface UseStampRallyOptions {\n readonly initialize?: boolean;\n}\nexport interface UseStampRallyReturn {\n readonly state: UserRallyState | null;\n readonly config: ReturnType<StampRallyClient[\"getConfig\"]>;\n readonly isLoading: boolean;\n readonly error: Error | null;\n readonly onCheckIn: (\n spotId: string,\n proof: unknown,\n options?: CheckInOptions,\n ) => Promise<CheckInResult>;\n readonly onClaimReward: (rewardId: string, options?: ClaimOptions) => Promise<ClaimResult>;\n readonly onSync: () => Promise<void>;\n readonly retrySync: () => Promise<void>;\n readonly syncState: SyncState;\n readonly pendingCount: number;\n readonly switchUser: (userId: string | null) => Promise<UserRallyState>;\n readonly clearUserState: (userId?: string) => Promise<void>;\n}\nfunction serverSnapshot(): null {\n return null;\n}\nfunction errorFrom(value: unknown): Error {\n return value instanceof Error ? value : new Error(String(value));\n}\nexport function useStampRally(\n client: StampRallyClient,\n options: UseStampRallyOptions = {},\n): UseStampRallyReturn {\n const subscribe = useCallback((listener: () => void) => client.subscribe(listener), [client]);\n const getSnapshot = useCallback(() => client.getState(), [client]);\n const state = useSyncExternalStore(subscribe, getSnapshot, serverSnapshot);\n const [error, setError] = useState<Error | null>(null);\n useEffect(() => {\n if (options.initialize === false || client.getState() !== null) return;\n let active = true;\n void client.init().catch((reason: unknown) => {\n if (active) setError(errorFrom(reason));\n });\n return () => {\n active = false;\n };\n }, [client, options.initialize]);\n useEffect(() => {\n return client.subscribeEvents((event) => {\n if (event.type === \"error\") setError(errorFrom(event.error));\n });\n }, [client]);\n const onCheckIn = useCallback(\n (spotId: string, proof: unknown, checkInOptions: CheckInOptions = {}) => {\n setError(null);\n return client.checkIn(spotId, proof, checkInOptions).then((result) => {\n if (!result.ok) setError(errorFrom(result.error));\n return result;\n });\n },\n [client],\n );\n const onClaimReward = useCallback(\n (rewardId: string, claimOptions: ClaimOptions = {}) => {\n setError(null);\n return client.claimReward(rewardId, claimOptions).then((result) => {\n if (!result.ok) setError(errorFrom(result.error));\n return result;\n });\n },\n [client],\n );\n const onSync = useCallback(() => {\n setError(null);\n return client.sync().catch((reason: unknown) => {\n const next = errorFrom(reason);\n setError(next);\n throw next;\n });\n }, [client]);\n return {\n state,\n config: client.getConfig(),\n isLoading: state === null,\n error,\n onCheckIn,\n onClaimReward,\n onSync,\n retrySync: onSync,\n syncState: client.syncState,\n pendingCount: client.pendingCount,\n switchUser: client.switchUser.bind(client),\n clearUserState: client.clearUserState.bind(client),\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/useStampRally.ts"],"names":["useCallback","useSyncExternalStore","useState","useEffect"],"mappings":"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","file":"index.cjs","sourcesContent":["import type {\n CheckInOptions,\n CheckInResult,\n ClaimOptions,\n ClaimResult,\n StampRallyClient,\n SyncState,\n UserRallyState,\n} from \"@stamprally/core\";\nimport { useCallback, useEffect, useState, useSyncExternalStore } from \"react\";\n\nexport interface UseStampRallyOptions {\n readonly initialize?: boolean;\n}\nexport interface UseStampRallyReturn {\n readonly state: UserRallyState | null;\n readonly config: ReturnType<StampRallyClient[\"getConfig\"]>;\n readonly isLoading: boolean;\n readonly error: Error | null;\n readonly onCheckIn: (\n spotId: string,\n proof: unknown,\n options?: CheckInOptions,\n ) => Promise<CheckInResult>;\n readonly onClaimReward: (rewardId: string, options?: ClaimOptions) => Promise<ClaimResult>;\n readonly onSync: () => Promise<void>;\n readonly retrySync: () => Promise<void>;\n readonly syncState: SyncState;\n readonly pendingCount: number;\n readonly switchUser: (userId: string | null) => Promise<UserRallyState>;\n readonly clearUserState: (userId?: string) => Promise<void>;\n}\nfunction serverSnapshot(): null {\n return null;\n}\nfunction errorFrom(value: unknown): Error {\n return value instanceof Error ? value : new Error(String(value));\n}\nexport function useStampRally(\n client: StampRallyClient,\n options: UseStampRallyOptions = {},\n): UseStampRallyReturn {\n const subscribe = useCallback((listener: () => void) => client.subscribe(listener), [client]);\n const getSnapshot = useCallback(() => client.getState(), [client]);\n const state = useSyncExternalStore(subscribe, getSnapshot, serverSnapshot);\n const [error, setError] = useState<Error | null>(null);\n useEffect(() => {\n if (options.initialize === false || client.getState() !== null) return;\n let active = true;\n void client.init().catch((reason: unknown) => {\n if (active) setError(errorFrom(reason));\n });\n return () => {\n active = false;\n };\n }, [client, options.initialize]);\n useEffect(() => {\n return client.subscribeEvents((event) => {\n if (event.type === \"error\") setError(errorFrom(event.error));\n });\n }, [client]);\n const onCheckIn = useCallback(\n (spotId: string, proof: unknown, checkInOptions: CheckInOptions = {}) => {\n setError(null);\n return client.checkIn(spotId, proof, checkInOptions).then((result) => {\n if (!result.ok) setError(errorFrom(result.error));\n return result;\n });\n },\n [client],\n );\n const onClaimReward = useCallback(\n (rewardId: string, claimOptions: ClaimOptions = {}) => {\n setError(null);\n return client.claimReward(rewardId, claimOptions).then((result) => {\n if (!result.ok) setError(errorFrom(result.error));\n return result;\n });\n },\n [client],\n );\n const onSync = useCallback(() => {\n setError(null);\n return client.sync().catch((reason: unknown) => {\n const next = errorFrom(reason);\n setError(next);\n throw next;\n });\n }, [client]);\n return {\n state,\n config: client.getConfig(),\n isLoading: state === null,\n error,\n onCheckIn,\n onClaimReward,\n onSync,\n retrySync: onSync,\n syncState: client.syncState,\n pendingCount: client.pendingCount,\n switchUser: client.switchUser.bind(client),\n clearUserState: client.clearUserState.bind(client),\n };\n}\n"]}
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
+ "use client";
1
2
  import { useCallback, useSyncExternalStore, useState, useEffect } from 'react';
2
3
 
3
- // src/useStampRally.ts
4
4
  function serverSnapshot() {
5
5
  return null;
6
6
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/useStampRally.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type {\n CheckInOptions,\n CheckInResult,\n ClaimOptions,\n ClaimResult,\n StampRallyClient,\n SyncState,\n UserRallyState,\n} from \"@stamprally/core\";\nimport { useCallback, useEffect, useState, useSyncExternalStore } from \"react\";\n\nexport interface UseStampRallyOptions {\n readonly initialize?: boolean;\n}\nexport interface UseStampRallyReturn {\n readonly state: UserRallyState | null;\n readonly config: ReturnType<StampRallyClient[\"getConfig\"]>;\n readonly isLoading: boolean;\n readonly error: Error | null;\n readonly onCheckIn: (\n spotId: string,\n proof: unknown,\n options?: CheckInOptions,\n ) => Promise<CheckInResult>;\n readonly onClaimReward: (rewardId: string, options?: ClaimOptions) => Promise<ClaimResult>;\n readonly onSync: () => Promise<void>;\n readonly retrySync: () => Promise<void>;\n readonly syncState: SyncState;\n readonly pendingCount: number;\n readonly switchUser: (userId: string | null) => Promise<UserRallyState>;\n readonly clearUserState: (userId?: string) => Promise<void>;\n}\nfunction serverSnapshot(): null {\n return null;\n}\nfunction errorFrom(value: unknown): Error {\n return value instanceof Error ? value : new Error(String(value));\n}\nexport function useStampRally(\n client: StampRallyClient,\n options: UseStampRallyOptions = {},\n): UseStampRallyReturn {\n const subscribe = useCallback((listener: () => void) => client.subscribe(listener), [client]);\n const getSnapshot = useCallback(() => client.getState(), [client]);\n const state = useSyncExternalStore(subscribe, getSnapshot, serverSnapshot);\n const [error, setError] = useState<Error | null>(null);\n useEffect(() => {\n if (options.initialize === false || client.getState() !== null) return;\n let active = true;\n void client.init().catch((reason: unknown) => {\n if (active) setError(errorFrom(reason));\n });\n return () => {\n active = false;\n };\n }, [client, options.initialize]);\n useEffect(() => {\n return client.subscribeEvents((event) => {\n if (event.type === \"error\") setError(errorFrom(event.error));\n });\n }, [client]);\n const onCheckIn = useCallback(\n (spotId: string, proof: unknown, checkInOptions: CheckInOptions = {}) => {\n setError(null);\n return client.checkIn(spotId, proof, checkInOptions).then((result) => {\n if (!result.ok) setError(errorFrom(result.error));\n return result;\n });\n },\n [client],\n );\n const onClaimReward = useCallback(\n (rewardId: string, claimOptions: ClaimOptions = {}) => {\n setError(null);\n return client.claimReward(rewardId, claimOptions).then((result) => {\n if (!result.ok) setError(errorFrom(result.error));\n return result;\n });\n },\n [client],\n );\n const onSync = useCallback(() => {\n setError(null);\n return client.sync().catch((reason: unknown) => {\n const next = errorFrom(reason);\n setError(next);\n throw next;\n });\n }, [client]);\n return {\n state,\n config: client.getConfig(),\n isLoading: state === null,\n error,\n onCheckIn,\n onClaimReward,\n onSync,\n retrySync: onSync,\n syncState: client.syncState,\n pendingCount: client.pendingCount,\n switchUser: client.switchUser.bind(client),\n clearUserState: client.clearUserState.bind(client),\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/useStampRally.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type {\n CheckInOptions,\n CheckInResult,\n ClaimOptions,\n ClaimResult,\n StampRallyClient,\n SyncState,\n UserRallyState,\n} from \"@stamprally/core\";\nimport { useCallback, useEffect, useState, useSyncExternalStore } from \"react\";\n\nexport interface UseStampRallyOptions {\n readonly initialize?: boolean;\n}\nexport interface UseStampRallyReturn {\n readonly state: UserRallyState | null;\n readonly config: ReturnType<StampRallyClient[\"getConfig\"]>;\n readonly isLoading: boolean;\n readonly error: Error | null;\n readonly onCheckIn: (\n spotId: string,\n proof: unknown,\n options?: CheckInOptions,\n ) => Promise<CheckInResult>;\n readonly onClaimReward: (rewardId: string, options?: ClaimOptions) => Promise<ClaimResult>;\n readonly onSync: () => Promise<void>;\n readonly retrySync: () => Promise<void>;\n readonly syncState: SyncState;\n readonly pendingCount: number;\n readonly switchUser: (userId: string | null) => Promise<UserRallyState>;\n readonly clearUserState: (userId?: string) => Promise<void>;\n}\nfunction serverSnapshot(): null {\n return null;\n}\nfunction errorFrom(value: unknown): Error {\n return value instanceof Error ? value : new Error(String(value));\n}\nexport function useStampRally(\n client: StampRallyClient,\n options: UseStampRallyOptions = {},\n): UseStampRallyReturn {\n const subscribe = useCallback((listener: () => void) => client.subscribe(listener), [client]);\n const getSnapshot = useCallback(() => client.getState(), [client]);\n const state = useSyncExternalStore(subscribe, getSnapshot, serverSnapshot);\n const [error, setError] = useState<Error | null>(null);\n useEffect(() => {\n if (options.initialize === false || client.getState() !== null) return;\n let active = true;\n void client.init().catch((reason: unknown) => {\n if (active) setError(errorFrom(reason));\n });\n return () => {\n active = false;\n };\n }, [client, options.initialize]);\n useEffect(() => {\n return client.subscribeEvents((event) => {\n if (event.type === \"error\") setError(errorFrom(event.error));\n });\n }, [client]);\n const onCheckIn = useCallback(\n (spotId: string, proof: unknown, checkInOptions: CheckInOptions = {}) => {\n setError(null);\n return client.checkIn(spotId, proof, checkInOptions).then((result) => {\n if (!result.ok) setError(errorFrom(result.error));\n return result;\n });\n },\n [client],\n );\n const onClaimReward = useCallback(\n (rewardId: string, claimOptions: ClaimOptions = {}) => {\n setError(null);\n return client.claimReward(rewardId, claimOptions).then((result) => {\n if (!result.ok) setError(errorFrom(result.error));\n return result;\n });\n },\n [client],\n );\n const onSync = useCallback(() => {\n setError(null);\n return client.sync().catch((reason: unknown) => {\n const next = errorFrom(reason);\n setError(next);\n throw next;\n });\n }, [client]);\n return {\n state,\n config: client.getConfig(),\n isLoading: state === null,\n error,\n onCheckIn,\n onClaimReward,\n onSync,\n retrySync: onSync,\n syncState: client.syncState,\n pendingCount: client.pendingCount,\n switchUser: client.switchUser.bind(client),\n clearUserState: client.clearUserState.bind(client),\n };\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stamprally/react",
3
- "version": "0.13.0",
3
+ "version": "0.14.0",
4
4
  "description": "React hooks for @stamprally/core.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -13,6 +13,9 @@
13
13
  },
14
14
  "homepage": "https://github.com/nitta-a/stamprally-core-app#readme",
15
15
  "type": "module",
16
+ "engines": {
17
+ "node": ">=22.0.0"
18
+ },
16
19
  "sideEffects": false,
17
20
  "publishConfig": {
18
21
  "access": "public"
@@ -31,7 +34,7 @@
31
34
  }
32
35
  },
33
36
  "dependencies": {
34
- "@stamprally/core": "0.13.0"
37
+ "@stamprally/core": "0.14.0"
35
38
  },
36
39
  "peerDependencies": {
37
40
  "react": "^18.0.0 || ^19.0.0",
@@ -48,7 +51,7 @@
48
51
  "vitest": "^4.1.11"
49
52
  },
50
53
  "scripts": {
51
- "build": "tsup",
54
+ "build": "tsup && node ../../scripts/ensure-client-directive.mjs .",
52
55
  "dev": "tsup --watch",
53
56
  "test": "vitest run",
54
57
  "typecheck": "tsc -p tsconfig.json"