🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

@offcoin/sdk

Package Overview
Dependencies
Maintainers
1
Versions
10
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@offcoin/sdk - npm Package Compare versions

Comparing version
0.0.5
to
0.0.6
+3
-1
dist/resources/leaderboard.d.ts

@@ -12,7 +12,9 @@ /**

* Get the leaderboard
* @param options - Optional sorting and limit options
* @param options - Optional sorting, period, limit, and metadata filter options
* @param options.sort - Sort by 'tokens', 'xp', or 'level' (default: 'xp')
* @param options.period - Period to show: 'current-week', 'current-month', 'current-year', or 'all-time' (default: 'all-time')
* @param options.limit - Max number of entries to return (1-100, default: 50)
* @param options.metadata - Filter members by metadata key-value pairs
*/
get(options?: LeaderboardOptions): Promise<LeaderboardResponse>;
}

@@ -12,5 +12,7 @@ /**

* Get the leaderboard
* @param options - Optional sorting and limit options
* @param options - Optional sorting, period, limit, and metadata filter options
* @param options.sort - Sort by 'tokens', 'xp', or 'level' (default: 'xp')
* @param options.period - Period to show: 'current-week', 'current-month', 'current-year', or 'all-time' (default: 'all-time')
* @param options.limit - Max number of entries to return (1-100, default: 50)
* @param options.metadata - Filter members by metadata key-value pairs
*/

@@ -21,4 +23,11 @@ get(options) {

params.set('sort', options.sort);
if (options?.period)
params.set('period', options.period);
if (options?.limit !== undefined)
params.set('limit', String(options.limit));
if (options?.metadata && Object.keys(options.metadata).length > 0) {
// Build query string with metadata filter
const metadataParam = encodeURIComponent(JSON.stringify(options.metadata));
params.set('metadata', metadataParam);
}
const query = params.toString();

@@ -25,0 +34,0 @@ return this.client.get(`/api/v1/leaderboard${query ? `?${query}` : ''}`);

@@ -6,3 +6,3 @@ /**

import type { HttpClient } from '../client.js';
import type { Member, MemberBalance, MemberXp, TokenOperationResult, XpOperationResult, CreateMemberInput, UpdateMemberInput, MemberAliasesResponse, AddAliasResult, RemoveAliasResult } from '../types.js';
import type { Member, MemberBalance, MemberXp, TokenOperationResult, XpOperationResult, CreateMemberInput, UpdateMemberInput, MemberAliasesResponse, AddAliasResult, RemoveAliasResult, ListMembersOptions } from '../types.js';
export declare class MembersResource {

@@ -13,4 +13,5 @@ private readonly client;

* List all members for the tenant
* @param options - Optional filters including metadata
*/
list(): Promise<Member[]>;
list(options?: ListMembersOptions): Promise<Member[]>;
/**

@@ -28,3 +29,3 @@ * Create a new member

* @param alias - Member alias or ID
* @param data - Fields to update (name, avatarUrl)
* @param data - Fields to update (name, avatarUrl, metadata)
*/

@@ -31,0 +32,0 @@ update(alias: string, data: UpdateMemberInput): Promise<Member>;

@@ -12,5 +12,12 @@ /**

* List all members for the tenant
* @param options - Optional filters including metadata
*/
list() {
return this.client.get('/api/v1/members');
list(options) {
let path = '/api/v1/members';
if (options?.metadata && Object.keys(options.metadata).length > 0) {
// Build query string with metadata filter
const metadataParam = encodeURIComponent(JSON.stringify(options.metadata));
path += `?metadata=${metadataParam}`;
}
return this.client.get(path);
}

@@ -33,3 +40,3 @@ /**

* @param alias - Member alias or ID
* @param data - Fields to update (name, avatarUrl)
* @param data - Fields to update (name, avatarUrl, metadata)
*/

@@ -36,0 +43,0 @@ update(alias, data) {

@@ -22,2 +22,3 @@ /**

level: number;
metadata?: Record<string, string>;
createdAt: string;

@@ -109,2 +110,3 @@ updatedAt: string;

sort: 'tokens' | 'xp' | 'level';
period: 'current-week' | 'current-month' | 'current-year' | 'all-time';
limit: number;

@@ -134,2 +136,3 @@ members: LeaderboardEntry[];

aliases?: string[];
metadata?: Record<string, string>;
}

@@ -139,3 +142,7 @@ export interface UpdateMemberInput {

avatarUrl?: string | null;
metadata?: Record<string, string>;
}
export interface ListMembersOptions {
metadata?: Record<string, string>;
}
export interface MemberAlias {

@@ -165,3 +172,5 @@ id: string;

sort?: 'tokens' | 'xp' | 'level';
period?: 'current-week' | 'current-month' | 'current-year' | 'all-time';
limit?: number;
metadata?: Record<string, string>;
}
{
"name": "@offcoin/sdk",
"version": "0.0.5",
"version": "0.0.6",
"description": "TypeScript/JavaScript SDK for the Offcoin API",

@@ -5,0 +5,0 @@ "scripts": {

@@ -28,6 +28,12 @@ # @offcoin/sdk

// List members with metadata filter
const filteredMembers = await offcoin.members.list({
metadata: { department: 'engineering', role: 'senior' }
});
// Create a member
const newMember = await offcoin.members.create({
name: 'John Doe',
aliases: ['discord:123456', 'github:johndoe']
aliases: ['discord:123456', 'github:johndoe'],
metadata: { department: 'engineering', role: 'developer' } // optional
});

@@ -48,2 +54,7 @@

// List members filtered by metadata
const filteredMembers = await offcoin.members.list({
metadata: { department: 'engineering', role: 'senior' }
});
// Create a member

@@ -53,3 +64,4 @@ const member = await offcoin.members.create({

avatarUrl: 'https://example.com/avatar.png', // optional
aliases: ['discord:123456', 'github:johndoe'] // optional
aliases: ['discord:123456', 'github:johndoe'], // optional
metadata: { department: 'engineering', role: 'developer' } // optional
});

@@ -59,2 +71,3 @@

const member = await offcoin.members.get('discord:123456');
// member.metadata contains the member's metadata

@@ -64,3 +77,4 @@ // Update a member

name: 'Jane Doe',
avatarUrl: null // remove avatar
avatarUrl: null, // remove avatar
metadata: { department: 'engineering', role: 'senior' } // merge with existing metadata
});

@@ -101,6 +115,6 @@

```typescript
// Get leaderboard (default: sorted by XP, limit 50)
// Get leaderboard (default: sorted by XP, limit 50, all-time)
const leaderboard = await offcoin.leaderboard.get();
// Get top 10 by tokens
// Get top 10 by tokens (all-time)
const tokenLeaderboard = await offcoin.leaderboard.get({

@@ -111,3 +125,3 @@ sort: 'tokens',

// Get top 25 by level
// Get top 25 by level (all-time)
const levelLeaderboard = await offcoin.leaderboard.get({

@@ -117,4 +131,41 @@ sort: 'level',

});
// Get current week leaderboard (gains this week)
const weeklyLeaderboard = await offcoin.leaderboard.get({
sort: 'xp',
period: 'current-week',
limit: 20
});
// Get current month leaderboard (gains this month)
const monthlyLeaderboard = await offcoin.leaderboard.get({
sort: 'tokens',
period: 'current-month',
limit: 50
});
// Get current year leaderboard (gains this year)
const yearlyLeaderboard = await offcoin.leaderboard.get({
sort: 'level',
period: 'current-year',
limit: 100
});
// Get leaderboard filtered by metadata
const engineeringLeaderboard = await offcoin.leaderboard.get({
sort: 'xp',
period: 'current-month',
limit: 20,
metadata: { department: 'engineering', role: 'senior' }
});
```
**Period Options:**
- `'all-time'` (default): Shows current balances/XP (all-time leaderboard)
- `'current-week'`: Shows gains from the start of the current week (Monday 00:00 UTC)
- `'current-month'`: Shows gains from the start of the current month
- `'current-year'`: Shows gains from the start of the current year
**Note:** Time-based periods (`current-week`, `current-month`, `current-year`) show only members who have activity (gains) in that period. Members with zero activity are excluded.
### Permissions

@@ -350,2 +401,3 @@

PurchasePermissionResult,
ListMembersOptions,
// Webhook types

@@ -352,0 +404,0 @@ WebhookPayload,