@foruai/shared 0.1.0 → 0.2.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/README.md ADDED
@@ -0,0 +1,126 @@
1
+ # @foruai/shared
2
+
3
+ Shared types, constants, and API path definitions for the ForU Gatekeeper AI ecosystem.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @foruai/shared
9
+ # or
10
+ pnpm add @foruai/shared
11
+ # or
12
+ bun add @foruai/shared
13
+ ```
14
+
15
+ ## Usage
16
+
17
+ ### Types
18
+
19
+ ```typescript
20
+ import type {
21
+ // Badge verification
22
+ VerifyBadgeRequest,
23
+ VerifyBadgeResponse,
24
+ VerifiedBadge,
25
+ BadgeInfo,
26
+ BadgeRuleInfo,
27
+ OnchainProof,
28
+ AwardSource,
29
+ MintingInfo,
30
+ ChainConfig,
31
+
32
+ // Discord
33
+ DiscordCheckRequest,
34
+ DiscordCheckResponse,
35
+ DiscordServerStatus,
36
+
37
+ // Profile
38
+ ProfileRequest,
39
+ ProfileResponse,
40
+
41
+ // Chat
42
+ ChatRequest,
43
+ ChatResponse,
44
+
45
+ // Auth
46
+ HmacToken,
47
+
48
+ // Discovery
49
+ HealthResponse,
50
+ ServicesCatalog,
51
+ ServiceEntry,
52
+ } from '@foruai/shared'
53
+ ```
54
+
55
+ ### Constants
56
+
57
+ ```typescript
58
+ import {
59
+ API_PATHS,
60
+ BADGE_STATUS,
61
+ HMAC_MAX_AGE_MS,
62
+ VALIDATOR_CATEGORIES,
63
+ VALIDATOR_LABELS,
64
+ } from '@foruai/shared'
65
+
66
+ // API endpoint paths
67
+ console.log(API_PATHS.VERIFY_BADGE) // '/v1/verify-badge'
68
+ console.log(API_PATHS.CHAT) // '/v1/chat'
69
+ console.log(API_PATHS.DISCORD) // '/v1/discord'
70
+ console.log(API_PATHS.PROFILE) // '/v1/profile'
71
+ console.log(API_PATHS.BADGES) // '/v1/badges'
72
+ console.log(API_PATHS.HEALTH) // '/v1/health'
73
+ console.log(API_PATHS.SERVICES) // '/v1/services'
74
+
75
+ // Badge statuses
76
+ console.log(BADGE_STATUS.VERIFIED) // 'verified'
77
+ console.log(BADGE_STATUS.NOT_VERIFIED) // 'not_verified'
78
+ console.log(BADGE_STATUS.NOT_FOUND) // 'not_found'
79
+ ```
80
+
81
+ ### Type Reference
82
+
83
+ #### Badge Verification
84
+
85
+ | Type | Description |
86
+ |------|-------------|
87
+ | `VerifyBadgeRequest` | Request body for badge verification. Identify user by `user_address`, `username`, or `discord_username`. Optionally filter by `badge_id`. |
88
+ | `VerifyBadgeResponse` | Response containing `badges[]` with confidence scores, rules breakdown, on-chain proofs, and attribution. |
89
+ | `VerifiedBadge` | Individual badge with `status`, `confidence` (0-1), `badge_type`, `rules_breakdown`, `rules[]`, `awarded_via`, `minting`, `onchain_proof`, `chains[]`, `exp_earned`. |
90
+ | `BadgeRuleInfo` | Single rule: `validator_key`, `validator_label`, `operator`, `value`, `params_schema` (may include chain/contract info). |
91
+ | `OnchainProof` | On-chain verification: `contract_address`, `chain_id`, `wallet_address`, `balance`, `verified_onchain`. |
92
+ | `AwardSource` | Attribution: `source_type` (campaign/quest), campaign/quest names, community, rank, rep score. |
93
+ | `MintingInfo` | NFT minting status: `is_minted`, `mint_hash`, `chain_name`, `token_id`, `minting_cost`. |
94
+ | `BadgeInfo` | Badge catalog entry: `id`, `name`, `description`, `image`, `shape`, `source`. |
95
+
96
+ #### Discord
97
+
98
+ | Type | Description |
99
+ |------|-------------|
100
+ | `DiscordCheckRequest` | Identify user + optional `server_id` filter. |
101
+ | `DiscordCheckResponse` | `linked` status, `discord_username`, `servers[]` with membership details. |
102
+ | `DiscordServerStatus` | Per-server: `is_member`, `joined_at`, `nickname`, `roles[]`. |
103
+
104
+ #### Profile
105
+
106
+ | Type | Description |
107
+ |------|-------------|
108
+ | `ProfileRequest` | Identify user by any linked account. |
109
+ | `ProfileResponse` | `wallets[]`, `twitter`, `discord`, `badges` (total + minted counts). |
110
+
111
+ #### Chat & Auth
112
+
113
+ | Type | Description |
114
+ |------|-------------|
115
+ | `ChatRequest` | `message` + optional `sessionId` for conversation continuity. |
116
+ | `ChatResponse` | `reply`, `sessionId`, optional `routed` (which intent was matched). |
117
+ | `HmacToken` | `nonce`, `timestamp`, `signature` for HMAC-SHA256 authentication. |
118
+
119
+ ## Companion Packages
120
+
121
+ - [`@foruai/gatekeeper-server`](https://www.npmjs.com/package/@foruai/gatekeeper-server) — Server-side HMAC token signing
122
+ - [`@foruai/gatekeeper-client`](https://www.npmjs.com/package/@foruai/gatekeeper-client) — Full API client for browser & Node.js
123
+
124
+ ## License
125
+
126
+ MIT
@@ -4,10 +4,21 @@ export declare const BADGE_STATUS: {
4
4
  readonly NOT_FOUND: "not_found";
5
5
  };
6
6
  export declare const API_PATHS: {
7
- readonly VERIFY: "/v1/verify";
8
- readonly BADGES: "/v1/badges";
9
7
  readonly HEALTH: "/v1/health";
8
+ readonly BADGES: "/v1/badges";
9
+ readonly VERIFY: "/v1/verify";
10
+ readonly VERIFY_BADGE: "/v1/verify-badge";
10
11
  readonly CHAT: "/v1/chat";
12
+ readonly DISCORD: "/v1/discord";
13
+ readonly PROFILE: "/v1/profile";
14
+ readonly SERVICES: "/v1/services";
11
15
  };
12
16
  export declare const HMAC_MAX_AGE_MS: number;
17
+ export declare const NONCE_PRUNE_INTERVAL_MS: number;
18
+ export declare const SESSION_TTL_MS: number;
19
+ export declare const MAX_CHAT_HISTORY = 20;
20
+ export declare const AGENT_TIMEOUT_MS = 120000;
21
+ export declare const VALIDATOR_CATEGORIES: Record<string, string[]>;
22
+ export declare const VALIDATOR_LABELS: Record<string, string>;
23
+ export declare const RPC_URLS: Record<number, string>;
13
24
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY;;;;CAIf,CAAA;AAEV,eAAO,MAAM,SAAS;;;;;CAKZ,CAAA;AAEV,eAAO,MAAM,eAAe,QAAgB,CAAA"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY;;;;CAIf,CAAA;AAEV,eAAO,MAAM,SAAS;;;;;;;;;CASZ,CAAA;AAEV,eAAO,MAAM,eAAe,QAAgB,CAAA;AAC5C,eAAO,MAAM,uBAAuB,QAAiB,CAAA;AACrD,eAAO,MAAM,cAAc,QAAiB,CAAA;AAC5C,eAAO,MAAM,gBAAgB,KAAK,CAAA;AAClC,eAAO,MAAM,gBAAgB,SAAU,CAAA;AAEvC,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAoBzD,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA+BnD,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAG3C,CAAA"}
package/dist/index.js CHANGED
@@ -6,14 +6,102 @@ var BADGE_STATUS = {
6
6
  NOT_FOUND: "not_found"
7
7
  };
8
8
  var API_PATHS = {
9
- VERIFY: "/v1/verify",
10
- BADGES: "/v1/badges",
11
9
  HEALTH: "/v1/health",
12
- CHAT: "/v1/chat"
10
+ BADGES: "/v1/badges",
11
+ VERIFY: "/v1/verify",
12
+ VERIFY_BADGE: "/v1/verify-badge",
13
+ CHAT: "/v1/chat",
14
+ DISCORD: "/v1/discord",
15
+ PROFILE: "/v1/profile",
16
+ SERVICES: "/v1/services"
13
17
  };
14
18
  var HMAC_MAX_AGE_MS = 5 * 60 * 1000;
19
+ var NONCE_PRUNE_INTERVAL_MS = 10 * 60 * 1000;
20
+ var SESSION_TTL_MS = 30 * 60 * 1000;
21
+ var MAX_CHAT_HISTORY = 20;
22
+ var AGENT_TIMEOUT_MS = 120000;
23
+ var VALIDATOR_CATEGORIES = {
24
+ onchain: [
25
+ "nft_holder_validator",
26
+ "evm_balance_validator",
27
+ "evm_transaction_count",
28
+ "evm_wallet_age",
29
+ "evm_token_holder_count",
30
+ "multi_nft_holder",
31
+ "nft_holder_count_validator",
32
+ "onchain_community_membership",
33
+ "badge_minted_count",
34
+ "lilstar_nft_testnet_snapshot_holder_validator"
35
+ ],
36
+ social: [
37
+ "follower_count_twitter",
38
+ "reply_count_twitter",
39
+ "twitter_age",
40
+ "twitter_relationship",
41
+ "connected_twitter",
42
+ "discord_role",
43
+ "discord_age"
44
+ ],
45
+ ai: ["required_persona", "fused_ai_did"],
46
+ platform: [
47
+ "user",
48
+ "required_badge",
49
+ "daily_checkin_streak",
50
+ "foru_miniapp_explorer",
51
+ "foru_ai_agent_early_bird"
52
+ ],
53
+ campaign: [
54
+ "somnia_7d_leaderboard_kaito_yapper",
55
+ "somnia_yapstorm_core",
56
+ "somnia_yapstorm_yapper",
57
+ "airdrop_og"
58
+ ]
59
+ };
60
+ var VALIDATOR_LABELS = {
61
+ user: "Registered user account",
62
+ empty_rule: "Auto-awarded (no specific requirement)",
63
+ nft_holder_validator: "Must hold NFT on-chain",
64
+ discord_role: "Must have a specific Discord role",
65
+ fused_ai_did: "Must have a Fused AI DID",
66
+ minimum_achieved_loyalty_daily_checkin_leaderboard: "Daily check-in leaderboard rank",
67
+ required_persona: "Must have a specific persona",
68
+ daily_checkin_streak: "Daily check-in streak count",
69
+ follower_count_twitter: "Minimum Twitter/X follower count",
70
+ discord_age: "Discord account age requirement",
71
+ evm_balance_validator: "Minimum EVM wallet balance",
72
+ twitter_age: "Twitter/X account age requirement",
73
+ twitter_relationship: "Twitter/X relationship (following/followed)",
74
+ evm_transaction_count: "Minimum EVM transaction count",
75
+ evm_wallet_age: "EVM wallet age requirement",
76
+ foru_miniapp_explorer: "ForU mini-app explorer activity",
77
+ lilstar_nft_testnet_snapshot_holder_validator: "LilStar NFT testnet snapshot holder",
78
+ onchain_community_membership: "On-chain community membership",
79
+ required_badge: "Must hold a prerequisite badge",
80
+ airdrop_og: "Original airdrop participant",
81
+ badge_minted_count: "Number of badges minted",
82
+ connected_twitter: "Must have connected Twitter/X account",
83
+ evm_token_holder_count: "EVM token holder count",
84
+ foru_ai_agent_early_bird: "ForU AI Agent early bird",
85
+ multi_nft_holder: "Must hold multiple NFTs",
86
+ nft_holder_count_validator: "NFT holder count threshold",
87
+ reply_count_twitter: "Twitter/X reply count",
88
+ somnia_7d_leaderboard_kaito_yapper: "Somnia 7-day Kaito Yapper leaderboard",
89
+ somnia_yapstorm_core: "Somnia YapStorm core participant",
90
+ somnia_yapstorm_yapper: "Somnia YapStorm yapper"
91
+ };
92
+ var RPC_URLS = {
93
+ 56: process.env.BSC_RPC_URL || "https://bsc-dataseed.bnbchain.org",
94
+ 5031: "https://dream-rpc.somnia.network"
95
+ };
15
96
  export {
97
+ VALIDATOR_LABELS,
98
+ VALIDATOR_CATEGORIES,
99
+ SESSION_TTL_MS,
100
+ RPC_URLS,
101
+ NONCE_PRUNE_INTERVAL_MS,
102
+ MAX_CHAT_HISTORY,
16
103
  HMAC_MAX_AGE_MS,
17
104
  BADGE_STATUS,
18
- API_PATHS
105
+ API_PATHS,
106
+ AGENT_TIMEOUT_MS
19
107
  };
package/dist/types.d.ts CHANGED
@@ -111,5 +111,120 @@ export interface ChatRequest {
111
111
  export interface ChatResponse {
112
112
  reply: string;
113
113
  sessionId: string;
114
+ routed?: string;
115
+ }
116
+ export interface VerifyBadgeRequest {
117
+ user_address?: string;
118
+ username?: string;
119
+ discord_username?: string;
120
+ badge_id?: number;
121
+ }
122
+ export interface VerifyBadgeResponse {
123
+ user_address: string;
124
+ total_badges: number;
125
+ badges: VerifiedBadge[];
126
+ verified_at: string;
127
+ }
128
+ export interface VerifiedBadge {
129
+ badge_id: number;
130
+ name: string | null;
131
+ description: string | null;
132
+ image: string | null;
133
+ status: string;
134
+ badge_type: 'rule_based' | 'campaign_reward' | 'admin_grant' | 'auto_awarded';
135
+ confidence: number;
136
+ unlocked_at?: string;
137
+ rules_breakdown: {
138
+ total: number;
139
+ by_category: Record<string, number>;
140
+ };
141
+ rules: BadgeRuleInfo[];
142
+ awarded_via?: AwardSource;
143
+ minting?: MintingInfo;
144
+ onchain_proof?: OnchainProof;
145
+ chains?: ChainConfig[];
146
+ exp_earned?: string;
147
+ identifi_reward?: string;
148
+ }
149
+ export interface ChainConfig {
150
+ chain_id: number;
151
+ chain_name: string | null;
152
+ contract_address: string;
153
+ }
154
+ export interface DiscordCheckRequest {
155
+ user_address?: string;
156
+ username?: string;
157
+ discord_username?: string;
158
+ server_id?: string;
159
+ }
160
+ export interface DiscordCheckResponse {
161
+ linked: boolean;
162
+ discord_username: string | null;
163
+ discord_id?: string;
164
+ servers: DiscordServerStatus[];
165
+ checked_at: string;
166
+ }
167
+ export interface DiscordServerStatus {
168
+ server_id: string;
169
+ server_name: string | null;
170
+ is_member: boolean;
171
+ joined_at?: string | null;
172
+ nickname?: string | null;
173
+ roles?: string[];
174
+ }
175
+ export interface ProfileRequest {
176
+ user_address?: string;
177
+ username?: string;
178
+ discord_username?: string;
179
+ }
180
+ export interface ProfileResponse {
181
+ wallets: {
182
+ address: string;
183
+ is_primary: boolean;
184
+ }[];
185
+ twitter: {
186
+ username: string | null;
187
+ linked: boolean;
188
+ };
189
+ discord: {
190
+ username: string | null;
191
+ discord_id?: string;
192
+ linked: boolean;
193
+ };
194
+ badges: {
195
+ total: number;
196
+ minted: number;
197
+ };
198
+ resolved_at: string;
199
+ }
200
+ export interface ServicesCatalog {
201
+ name: string;
202
+ version: string;
203
+ description: string;
204
+ services: ServiceEntry[];
205
+ authentication: {
206
+ schemes: string[];
207
+ hmac_format: string;
208
+ bearer_format: string;
209
+ };
210
+ erc8004: {
211
+ status: string;
212
+ registry: string;
213
+ };
214
+ }
215
+ export interface ServiceEntry {
216
+ id: string;
217
+ name: string;
218
+ description: string;
219
+ endpoint: string;
220
+ input?: Record<string, string>;
221
+ output?: string;
222
+ pricing?: {
223
+ amount: string;
224
+ asset?: string;
225
+ network?: string;
226
+ note?: string;
227
+ };
228
+ status?: string;
114
229
  }
115
230
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,12 +1,24 @@
1
1
  {
2
2
  "name": "@foruai/shared",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
+ "description": "Shared types, constants, and API path definitions for the ForU Gatekeeper AI ecosystem",
4
5
  "type": "module",
5
6
  "main": "dist/index.js",
6
7
  "types": "dist/index.d.ts",
8
+ "files": ["dist", "README.md"],
7
9
  "scripts": {
8
10
  "build": "bun build src/index.ts --outdir dist --target bun && tsc --emitDeclarationOnly"
9
11
  },
12
+ "keywords": ["foruai", "gatekeeper", "badges", "web3", "erc-8004", "types"],
13
+ "license": "MIT",
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "https://github.com/untukmuai/foru-gatekeeper-ai",
17
+ "directory": "packages/shared"
18
+ },
19
+ "publishConfig": {
20
+ "access": "public"
21
+ },
10
22
  "devDependencies": {
11
23
  "bun-types": "latest",
12
24
  "typescript": "^5.7.0"
package/src/constants.ts DELETED
@@ -1,14 +0,0 @@
1
- export const BADGE_STATUS = {
2
- VERIFIED: 'verified',
3
- NOT_VERIFIED: 'not_verified',
4
- NOT_FOUND: 'not_found',
5
- } as const
6
-
7
- export const API_PATHS = {
8
- VERIFY: '/v1/verify',
9
- BADGES: '/v1/badges',
10
- HEALTH: '/v1/health',
11
- CHAT: '/v1/chat',
12
- } as const
13
-
14
- export const HMAC_MAX_AGE_MS = 5 * 60 * 1000 // 5 minutes
package/src/index.ts DELETED
@@ -1,2 +0,0 @@
1
- export * from './types'
2
- export * from './constants'
package/src/types.ts DELETED
@@ -1,130 +0,0 @@
1
- export interface VerificationRequest {
2
- identity: {
3
- wallet_address?: string
4
- x_username?: string
5
- }
6
- badge_ids?: number[]
7
- discord_server_id?: string
8
- }
9
-
10
- export interface VerificationResponse {
11
- identity: {
12
- resolved_user_id: number | null
13
- wallet_address?: string
14
- x_username?: string
15
- }
16
- badges: BadgeResult[]
17
- discord?: DiscordResult
18
- verified_at: string
19
- }
20
-
21
- export interface BadgeResult {
22
- badge_id: number
23
- name?: string
24
- description?: string
25
- status: BadgeStatus
26
- image?: string
27
- rarity?: string
28
- unlocked_at?: string
29
- reason?: BadgeReason
30
- onchain_proof?: OnchainProof
31
- }
32
-
33
- export interface OnchainProof {
34
- contract_address: string
35
- chain_id: number
36
- rpc_url: string
37
- nft_erc_type: string
38
- wallet_address: string
39
- balance: string
40
- proof_method: string
41
- verified_onchain: boolean
42
- }
43
-
44
- export interface BadgeReason {
45
- rules: BadgeRuleInfo[]
46
- awarded_via?: AwardSource
47
- minting?: MintingInfo
48
- exp_earned?: string
49
- identifi_reward?: string
50
- metadata?: Record<string, unknown>
51
- }
52
-
53
- export interface BadgeRuleInfo {
54
- validator_key: string
55
- validator_label: string
56
- operator: string
57
- value: unknown
58
- value_type: string
59
- params_schema?: {
60
- rpc_url?: string
61
- chain_id?: number
62
- contract_address?: string
63
- nft_erc_type?: string
64
- [key: string]: unknown
65
- }
66
- }
67
-
68
- export interface AwardSource {
69
- source_type: 'campaign' | 'quest_campaign'
70
- campaign_id?: number
71
- campaign_name?: string
72
- quest_campaign_id?: number
73
- quest_name?: string
74
- community_name?: string
75
- user_rank?: number
76
- user_rep_score?: string
77
- claimed_at?: string
78
- }
79
-
80
- export interface MintingInfo {
81
- is_minted: boolean
82
- mint_hash?: string
83
- chain_name?: string
84
- chain_id?: number
85
- contract_address?: string
86
- token_id?: string
87
- minting_cost?: string
88
- minting_cost_asset?: string
89
- }
90
-
91
- export interface DiscordResult {
92
- server_id: string
93
- is_member: boolean
94
- discord_username?: string
95
- }
96
-
97
- export type BadgeStatus = 'verified' | 'not_verified' | 'not_found'
98
-
99
- export interface BadgeInfo {
100
- id: number
101
- name: string
102
- description: string | null
103
- image: string | null
104
- shape: string | null
105
- source: string | null
106
- }
107
-
108
- export interface HealthResponse {
109
- status: 'ok' | 'error'
110
- db: 'connected' | 'disconnected'
111
- timestamp: string
112
- }
113
-
114
- // HMAC auth types
115
-
116
- export interface HmacToken {
117
- nonce: string
118
- timestamp: number
119
- signature: string
120
- }
121
-
122
- export interface ChatRequest {
123
- message: string
124
- sessionId?: string
125
- }
126
-
127
- export interface ChatResponse {
128
- reply: string
129
- sessionId: string
130
- }
package/tsconfig.json DELETED
@@ -1,8 +0,0 @@
1
- {
2
- "extends": "../../tsconfig.json",
3
- "compilerOptions": {
4
- "outDir": "dist",
5
- "rootDir": "src"
6
- },
7
- "include": ["src"]
8
- }