@foruai/shared 0.1.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.
@@ -0,0 +1,13 @@
1
+ export declare const BADGE_STATUS: {
2
+ readonly VERIFIED: "verified";
3
+ readonly NOT_VERIFIED: "not_verified";
4
+ readonly NOT_FOUND: "not_found";
5
+ };
6
+ export declare const API_PATHS: {
7
+ readonly VERIFY: "/v1/verify";
8
+ readonly BADGES: "/v1/badges";
9
+ readonly HEALTH: "/v1/health";
10
+ readonly CHAT: "/v1/chat";
11
+ };
12
+ export declare const HMAC_MAX_AGE_MS: number;
13
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,3 @@
1
+ export * from './types';
2
+ export * from './constants';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,aAAa,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,19 @@
1
+ // @bun
2
+ // src/constants.ts
3
+ var BADGE_STATUS = {
4
+ VERIFIED: "verified",
5
+ NOT_VERIFIED: "not_verified",
6
+ NOT_FOUND: "not_found"
7
+ };
8
+ var API_PATHS = {
9
+ VERIFY: "/v1/verify",
10
+ BADGES: "/v1/badges",
11
+ HEALTH: "/v1/health",
12
+ CHAT: "/v1/chat"
13
+ };
14
+ var HMAC_MAX_AGE_MS = 5 * 60 * 1000;
15
+ export {
16
+ HMAC_MAX_AGE_MS,
17
+ BADGE_STATUS,
18
+ API_PATHS
19
+ };
@@ -0,0 +1,115 @@
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
+ export interface VerificationResponse {
10
+ identity: {
11
+ resolved_user_id: number | null;
12
+ wallet_address?: string;
13
+ x_username?: string;
14
+ };
15
+ badges: BadgeResult[];
16
+ discord?: DiscordResult;
17
+ verified_at: string;
18
+ }
19
+ export interface BadgeResult {
20
+ badge_id: number;
21
+ name?: string;
22
+ description?: string;
23
+ status: BadgeStatus;
24
+ image?: string;
25
+ rarity?: string;
26
+ unlocked_at?: string;
27
+ reason?: BadgeReason;
28
+ onchain_proof?: OnchainProof;
29
+ }
30
+ export interface OnchainProof {
31
+ contract_address: string;
32
+ chain_id: number;
33
+ rpc_url: string;
34
+ nft_erc_type: string;
35
+ wallet_address: string;
36
+ balance: string;
37
+ proof_method: string;
38
+ verified_onchain: boolean;
39
+ }
40
+ export interface BadgeReason {
41
+ rules: BadgeRuleInfo[];
42
+ awarded_via?: AwardSource;
43
+ minting?: MintingInfo;
44
+ exp_earned?: string;
45
+ identifi_reward?: string;
46
+ metadata?: Record<string, unknown>;
47
+ }
48
+ export interface BadgeRuleInfo {
49
+ validator_key: string;
50
+ validator_label: string;
51
+ operator: string;
52
+ value: unknown;
53
+ value_type: string;
54
+ params_schema?: {
55
+ rpc_url?: string;
56
+ chain_id?: number;
57
+ contract_address?: string;
58
+ nft_erc_type?: string;
59
+ [key: string]: unknown;
60
+ };
61
+ }
62
+ export interface AwardSource {
63
+ source_type: 'campaign' | 'quest_campaign';
64
+ campaign_id?: number;
65
+ campaign_name?: string;
66
+ quest_campaign_id?: number;
67
+ quest_name?: string;
68
+ community_name?: string;
69
+ user_rank?: number;
70
+ user_rep_score?: string;
71
+ claimed_at?: string;
72
+ }
73
+ export interface MintingInfo {
74
+ is_minted: boolean;
75
+ mint_hash?: string;
76
+ chain_name?: string;
77
+ chain_id?: number;
78
+ contract_address?: string;
79
+ token_id?: string;
80
+ minting_cost?: string;
81
+ minting_cost_asset?: string;
82
+ }
83
+ export interface DiscordResult {
84
+ server_id: string;
85
+ is_member: boolean;
86
+ discord_username?: string;
87
+ }
88
+ export type BadgeStatus = 'verified' | 'not_verified' | 'not_found';
89
+ export interface BadgeInfo {
90
+ id: number;
91
+ name: string;
92
+ description: string | null;
93
+ image: string | null;
94
+ shape: string | null;
95
+ source: string | null;
96
+ }
97
+ export interface HealthResponse {
98
+ status: 'ok' | 'error';
99
+ db: 'connected' | 'disconnected';
100
+ timestamp: string;
101
+ }
102
+ export interface HmacToken {
103
+ nonce: string;
104
+ timestamp: number;
105
+ signature: string;
106
+ }
107
+ export interface ChatRequest {
108
+ message: string;
109
+ sessionId?: string;
110
+ }
111
+ export interface ChatResponse {
112
+ reply: string;
113
+ sessionId: string;
114
+ }
115
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "@foruai/shared",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "scripts": {
8
+ "build": "bun build src/index.ts --outdir dist --target bun && tsc --emitDeclarationOnly"
9
+ },
10
+ "devDependencies": {
11
+ "bun-types": "latest",
12
+ "typescript": "^5.7.0"
13
+ }
14
+ }
@@ -0,0 +1,14 @@
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 ADDED
@@ -0,0 +1,2 @@
1
+ export * from './types'
2
+ export * from './constants'
package/src/types.ts ADDED
@@ -0,0 +1,130 @@
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 ADDED
@@ -0,0 +1,8 @@
1
+ {
2
+ "extends": "../../tsconfig.json",
3
+ "compilerOptions": {
4
+ "outDir": "dist",
5
+ "rootDir": "src"
6
+ },
7
+ "include": ["src"]
8
+ }