@stamn/sdk 0.1.0-alpha.0 → 0.1.0-alpha.2

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.d.ts CHANGED
@@ -22,6 +22,8 @@ interface DeviceFlowStatus {
22
22
  apiKey?: string;
23
23
  }
24
24
  interface ParticipantSettings {
25
+ allowSpending: boolean;
26
+ allowWorldActions: boolean;
25
27
  requireApprovalAbove: number;
26
28
  allowedVendors: string[];
27
29
  dailySpendLimit?: number;
@@ -41,7 +43,7 @@ interface Participant {
41
43
  chainId: number;
42
44
  walletType: string;
43
45
  settings: ParticipantSettings;
44
- status: 'active' | 'paused' | 'frozen';
46
+ status: 'active' | 'deleted';
45
47
  pluginVersion?: string;
46
48
  lastX?: number;
47
49
  lastY?: number;
@@ -120,6 +122,29 @@ interface LeaderboardEntry {
120
122
  interface HealthCheckResult {
121
123
  ok: boolean;
122
124
  }
125
+ interface ServiceListing {
126
+ id: string;
127
+ participantId: string;
128
+ serviceTag: string;
129
+ name: string;
130
+ description: string;
131
+ priceCents: number;
132
+ isActive: boolean;
133
+ createdAt: string;
134
+ updatedAt: string;
135
+ }
136
+ interface CreateServiceListingOptions {
137
+ serviceTag: string;
138
+ name: string;
139
+ description: string;
140
+ priceCents: number;
141
+ }
142
+ interface UpdateServiceListingOptions {
143
+ name?: string;
144
+ description?: string;
145
+ priceCents?: number;
146
+ isActive?: boolean;
147
+ }
123
148
 
124
149
  declare abstract class Resource {
125
150
  protected readonly client: Requestable;
@@ -151,7 +176,7 @@ declare class ParticipantsResource extends Resource {
151
176
  get(participantId: string): Promise<Participant>;
152
177
  update(participantId: string, data: {
153
178
  settings?: Partial<ParticipantSettings>;
154
- status?: 'active' | 'paused' | 'frozen';
179
+ status?: 'active' | 'deleted';
155
180
  }): Promise<Participant>;
156
181
  getBalance(participantId: string): Promise<BalanceResponse>;
157
182
  getOnchainBalance(participantId: string): Promise<OnchainBalanceResponse>;
@@ -182,6 +207,13 @@ declare class HealthResource extends Resource {
182
207
  check(): Promise<HealthCheckResult>;
183
208
  }
184
209
 
210
+ declare class ServicesResource extends Resource {
211
+ list(participantId: string): Promise<ServiceListing[]>;
212
+ create(participantId: string, options: CreateServiceListingOptions): Promise<ServiceListing>;
213
+ update(participantId: string, serviceId: string, options: UpdateServiceListingOptions): Promise<ServiceListing>;
214
+ delete(participantId: string, serviceId: string): Promise<void>;
215
+ }
216
+
185
217
  declare class StamnApiError extends Error {
186
218
  readonly status: number;
187
219
  constructor(message: string, status: number);
@@ -197,6 +229,7 @@ declare class StamnClient implements Requestable {
197
229
  readonly directory: DirectoryResource;
198
230
  readonly leaderboard: LeaderboardResource;
199
231
  readonly health: HealthResource;
232
+ readonly services: ServicesResource;
200
233
  constructor(options?: StamnClientOptions);
201
234
  setApiKey(apiKey: string): void;
202
235
  request<T>(method: string, path: string, body?: unknown): Promise<T>;
@@ -207,4 +240,4 @@ declare class StamnClient implements Requestable {
207
240
  private parseErrorResponse;
208
241
  }
209
242
 
210
- export { type ApiKeyCreateResponse, type ApiKeySummary, ApiKeysResource, AuthResource, type BalanceResponse, type DeviceFlowData, type DeviceFlowStatus, type DirectoryEntry, DirectoryResource, type DirectoryResponse, type DirectoryServiceEntry, type HealthCheckResult, HealthResource, type LeaderboardEntry, LeaderboardResource, type LedgerEntry, type OnchainBalanceResponse, type Participant, type ParticipantSettings, ParticipantsResource, type Requestable, Resource, type RetryOptions, StamnApiError, StamnClient, type StamnClientOptions };
243
+ export { type ApiKeyCreateResponse, type ApiKeySummary, ApiKeysResource, AuthResource, type BalanceResponse, type CreateServiceListingOptions, type DeviceFlowData, type DeviceFlowStatus, type DirectoryEntry, DirectoryResource, type DirectoryResponse, type DirectoryServiceEntry, type HealthCheckResult, HealthResource, type LeaderboardEntry, LeaderboardResource, type LedgerEntry, type OnchainBalanceResponse, type Participant, type ParticipantSettings, ParticipantsResource, type Requestable, Resource, type RetryOptions, type ServiceListing, ServicesResource, StamnApiError, StamnClient, type StamnClientOptions, type UpdateServiceListingOptions };
package/dist/index.js CHANGED
@@ -186,6 +186,39 @@ var HealthResource = class extends Resource {
186
186
  }
187
187
  };
188
188
 
189
+ // src/resources/services.ts
190
+ var ServicesResource = class extends Resource {
191
+ async list(participantId) {
192
+ const res = await this.client.request(
193
+ "GET",
194
+ `/v1/participants/${participantId}/services`
195
+ );
196
+ return res.data;
197
+ }
198
+ async create(participantId, options) {
199
+ const res = await this.client.request(
200
+ "POST",
201
+ `/v1/participants/${participantId}/services`,
202
+ options
203
+ );
204
+ return res.data;
205
+ }
206
+ async update(participantId, serviceId, options) {
207
+ const res = await this.client.request(
208
+ "PATCH",
209
+ `/v1/participants/${participantId}/services/${serviceId}`,
210
+ options
211
+ );
212
+ return res.data;
213
+ }
214
+ async delete(participantId, serviceId) {
215
+ await this.client.request(
216
+ "DELETE",
217
+ `/v1/participants/${participantId}/services/${serviceId}`
218
+ );
219
+ }
220
+ };
221
+
189
222
  // src/client.ts
190
223
  var StamnApiError = class extends Error {
191
224
  constructor(message, status) {
@@ -212,6 +245,7 @@ var StamnClient = class {
212
245
  directory;
213
246
  leaderboard;
214
247
  health;
248
+ services;
215
249
  constructor(options = {}) {
216
250
  this.apiKey = options.apiKey;
217
251
  this.retryOptions = { ...DEFAULT_RETRY, ...options.retry };
@@ -222,6 +256,7 @@ var StamnClient = class {
222
256
  this.directory = new DirectoryResource(this);
223
257
  this.leaderboard = new LeaderboardResource(this);
224
258
  this.health = new HealthResource(this);
259
+ this.services = new ServicesResource(this);
225
260
  }
226
261
  setApiKey(apiKey) {
227
262
  this.apiKey = apiKey;
@@ -297,6 +332,7 @@ export {
297
332
  LeaderboardResource,
298
333
  ParticipantsResource,
299
334
  Resource,
335
+ ServicesResource,
300
336
  StamnApiError,
301
337
  StamnClient
302
338
  };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/resources/base.ts","../src/resources/auth.ts","../src/resources/agents.ts","../src/resources/participants.ts","../src/resources/api-keys.ts","../src/resources/directory.ts","../src/resources/leaderboard.ts","../src/resources/health.ts","../src/client.ts"],"sourcesContent":["import type { Requestable } from '@/types';\n\nexport abstract class Resource {\n constructor(protected readonly client: Requestable) {}\n}\n","import { Resource } from '@/resources/base';\nimport type { DeviceFlowData, DeviceFlowStatus } from '@/types';\n\nconst DEFAULT_POLL_INTERVAL_MS = 5_000;\nconst DEFAULT_TIMEOUT_MS = 300_000; // 5 minutes\n\nexport class AuthResource extends Resource {\n\n async initiateDeviceFlow(): Promise<DeviceFlowData> {\n const res = await this.client.request<{ data: DeviceFlowData }>(\n 'POST',\n '/v1/auth/device-codes',\n );\n return res.data;\n }\n\n async getDeviceFlowStatus(deviceCode: string): Promise<DeviceFlowStatus> {\n const res = await this.client.request<{ data: DeviceFlowStatus }>(\n 'GET',\n `/v1/auth/device-codes/${deviceCode}`,\n );\n return res.data;\n }\n\n async pollForApproval(\n deviceCode: string,\n options?: { pollIntervalMs?: number; timeoutMs?: number },\n ): Promise<string> {\n const pollInterval = options?.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;\n const timeout = options?.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n const deadline = Date.now() + timeout;\n\n while (Date.now() < deadline) {\n await new Promise((r) => setTimeout(r, pollInterval));\n\n try {\n const status = await this.getDeviceFlowStatus(deviceCode);\n\n if (status.status === 'approved' && status.apiKey) {\n return status.apiKey;\n }\n\n if (status.status === 'expired') {\n throw new Error('Login code expired. Try again.');\n }\n } catch (err) {\n if ((err as Error).message.includes('expired')) throw err;\n }\n }\n\n throw new Error('Login timed out. Try again.');\n }\n}\n","import { Resource } from '@/resources/base';\nimport type { Participant } from '@/types';\n\nexport class AgentsResource extends Resource {\n\n async create(options?: { name?: string; description?: string }): Promise<Participant> {\n const res = await this.client.request<{ data: Participant }>(\n 'POST',\n '/v1/participants',\n {\n name: options?.name,\n description: options?.description,\n },\n );\n return res.data;\n }\n}\n","import { Resource } from '@/resources/base';\nimport type {\n Participant,\n ParticipantSettings,\n BalanceResponse,\n OnchainBalanceResponse,\n LedgerEntry,\n} from '@/types';\n\nexport class ParticipantsResource extends Resource {\n\n async create(options?: { name?: string; description?: string }): Promise<Participant> {\n const res = await this.client.request<{ data: Participant }>(\n 'POST',\n '/v1/participants',\n {\n name: options?.name || undefined,\n description: options?.description || undefined,\n },\n );\n return res.data;\n }\n\n async list(): Promise<Participant[]> {\n const res = await this.client.request<{ data: Participant[] }>(\n 'GET',\n '/v1/participants',\n );\n return res.data;\n }\n\n async get(participantId: string): Promise<Participant> {\n const res = await this.client.request<{ data: Participant }>(\n 'GET',\n `/v1/participants/${participantId}`,\n );\n return res.data;\n }\n\n async update(\n participantId: string,\n data: {\n settings?: Partial<ParticipantSettings>;\n status?: 'active' | 'paused' | 'frozen';\n },\n ): Promise<Participant> {\n const res = await this.client.request<{ data: Participant }>(\n 'PATCH',\n `/v1/participants/${participantId}`,\n data,\n );\n return res.data;\n }\n\n async getBalance(participantId: string): Promise<BalanceResponse> {\n const res = await this.client.request<{ data: BalanceResponse }>(\n 'GET',\n `/v1/participants/${participantId}/balance`,\n );\n return res.data;\n }\n\n async getOnchainBalance(participantId: string): Promise<OnchainBalanceResponse> {\n const res = await this.client.request<{ data: OnchainBalanceResponse }>(\n 'GET',\n `/v1/participants/${participantId}/onchain-balance`,\n );\n return res.data;\n }\n\n async getLedgerEntries(participantId: string): Promise<LedgerEntry[]> {\n const res = await this.client.request<{ data: LedgerEntry[] }>(\n 'GET',\n `/v1/participants/${participantId}/ledger-entries`,\n );\n return res.data;\n }\n\n async deposit(\n participantId: string,\n data: { amountCents: number },\n ): Promise<LedgerEntry> {\n const res = await this.client.request<{ data: LedgerEntry }>(\n 'POST',\n `/v1/participants/${participantId}/deposits`,\n data,\n );\n return res.data;\n }\n}\n","import { Resource } from '@/resources/base';\nimport type { ApiKeyCreateResponse, ApiKeySummary } from '@/types';\n\nexport class ApiKeysResource extends Resource {\n\n async create(): Promise<ApiKeyCreateResponse> {\n const res = await this.client.request<{ data: ApiKeyCreateResponse }>(\n 'POST',\n '/v1/api-keys',\n );\n return res.data;\n }\n\n async list(): Promise<ApiKeySummary[]> {\n const res = await this.client.request<{ data: ApiKeySummary[] }>(\n 'GET',\n '/v1/api-keys',\n );\n return res.data;\n }\n\n async revoke(id: string): Promise<void> {\n await this.client.request('DELETE', `/v1/api-keys/${id}`);\n }\n}\n","import { Resource } from '@/resources/base';\nimport type { DirectoryResponse } from '@/types';\n\nexport class DirectoryResource extends Resource {\n\n async list(options?: { serviceTag?: string; name?: string }): Promise<DirectoryResponse> {\n const params = new URLSearchParams();\n if (options?.serviceTag) params.set('serviceTag', options.serviceTag);\n if (options?.name) params.set('name', options.name);\n const query = params.toString();\n const path = query ? `/v1/directory?${query}` : '/v1/directory';\n\n const res = await this.client.request<{ data: DirectoryResponse }>(\n 'GET',\n path,\n );\n return res.data;\n }\n}\n","import { Resource } from '@/resources/base';\nimport type { LeaderboardEntry } from '@/types';\n\nexport class LeaderboardResource extends Resource {\n\n async get(): Promise<LeaderboardEntry[]> {\n const res = await this.client.request<{ data: LeaderboardEntry[] }>(\n 'GET',\n '/v1/leaderboard',\n );\n return res.data;\n }\n}\n","import { Resource } from '@/resources/base';\nimport type { HealthCheckResult } from '@/types';\n\nexport class HealthResource extends Resource {\n\n async check(): Promise<HealthCheckResult> {\n try {\n await this.client.request('GET', '/v1/health');\n return { ok: true };\n } catch {\n return { ok: false };\n }\n }\n}\n","import type { StamnClientOptions, Requestable } from '@/types';\nimport { AuthResource } from '@/resources/auth';\nimport { AgentsResource } from '@/resources/agents';\nimport { ParticipantsResource } from '@/resources/participants';\nimport { ApiKeysResource } from '@/resources/api-keys';\nimport { DirectoryResource } from '@/resources/directory';\nimport { LeaderboardResource } from '@/resources/leaderboard';\nimport { HealthResource } from '@/resources/health';\n\nexport class StamnApiError extends Error {\n constructor(\n message: string,\n public readonly status: number,\n ) {\n super(message);\n this.name = \"StamnApiError\";\n }\n}\n\ninterface ResolvedRetryOptions {\n maxRetries: number;\n initialDelayMs: number;\n backoffMultiplier: number;\n maxDelayMs: number;\n}\n\nconst DEFAULT_RETRY: ResolvedRetryOptions = {\n maxRetries: 0,\n initialDelayMs: 500,\n backoffMultiplier: 2,\n maxDelayMs: 10_000,\n};\n\nconst SERVER_URL = \"https://api.stamn.com\";\n\nexport class StamnClient implements Requestable {\n private readonly serverUrl = SERVER_URL;\n private apiKey?: string;\n private retryOptions: ResolvedRetryOptions;\n\n public readonly auth: AuthResource;\n public readonly agents: AgentsResource;\n public readonly participants: ParticipantsResource;\n public readonly apiKeys: ApiKeysResource;\n public readonly directory: DirectoryResource;\n public readonly leaderboard: LeaderboardResource;\n public readonly health: HealthResource;\n\n constructor(options: StamnClientOptions = {}) {\n this.apiKey = options.apiKey;\n this.retryOptions = { ...DEFAULT_RETRY, ...options.retry };\n\n this.auth = new AuthResource(this);\n this.agents = new AgentsResource(this);\n this.participants = new ParticipantsResource(this);\n this.apiKeys = new ApiKeysResource(this);\n this.directory = new DirectoryResource(this);\n this.leaderboard = new LeaderboardResource(this);\n this.health = new HealthResource(this);\n }\n\n setApiKey(apiKey: string): void {\n this.apiKey = apiKey;\n }\n\n async request<T>(method: string, path: string, body?: unknown): Promise<T> {\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= this.retryOptions.maxRetries; attempt++) {\n if (attempt > 0) {\n await this.sleep(this.calculateDelay(attempt - 1));\n }\n\n try {\n return await this.executeRequest<T>(method, path, body);\n } catch (error) {\n lastError = error;\n if (\n !this.isRetryable(error) ||\n attempt === this.retryOptions.maxRetries\n ) {\n throw error;\n }\n }\n }\n\n throw lastError;\n }\n\n private async executeRequest<T>(\n method: string,\n path: string,\n body?: unknown,\n ): Promise<T> {\n const headers: Record<string, string> = {};\n\n if (body !== undefined) {\n headers[\"Content-Type\"] = \"application/json\";\n }\n\n if (this.apiKey) {\n headers[\"Authorization\"] = `Bearer ${this.apiKey}`;\n }\n\n const res = await fetch(`${this.serverUrl}${path}`, {\n method,\n headers,\n body: body !== undefined ? JSON.stringify(body) : undefined,\n });\n\n if (!res.ok) {\n const message = await this.parseErrorResponse(res);\n throw new StamnApiError(message, res.status);\n }\n\n const text = await res.text();\n if (!text) return undefined as T;\n\n return JSON.parse(text) as T;\n }\n\n private isRetryable(error: unknown): boolean {\n if (error instanceof TypeError) return true;\n if (error instanceof StamnApiError && error.status >= 500) return true;\n if (error instanceof StamnApiError && error.status === 429) return true;\n return false;\n }\n\n private calculateDelay(attempt: number): number {\n const baseDelay =\n this.retryOptions.initialDelayMs *\n Math.pow(this.retryOptions.backoffMultiplier, attempt);\n const capped = Math.min(baseDelay, this.retryOptions.maxDelayMs);\n return Math.random() * capped;\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n private async parseErrorResponse(res: Response): Promise<string> {\n const body = await res.text();\n try {\n const parsed = JSON.parse(body);\n const msg =\n parsed.error?.message ??\n (Array.isArray(parsed.message)\n ? parsed.message.join(\". \")\n : parsed.message);\n if (msg) return msg;\n } catch {}\n return body || `HTTP ${res.status}`;\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/resources/base.ts","../src/resources/auth.ts","../src/resources/agents.ts","../src/resources/participants.ts","../src/resources/api-keys.ts","../src/resources/directory.ts","../src/resources/leaderboard.ts","../src/resources/health.ts","../src/resources/services.ts","../src/client.ts"],"sourcesContent":["import type { Requestable } from '@/types';\n\nexport abstract class Resource {\n constructor(protected readonly client: Requestable) {}\n}\n","import { Resource } from '@/resources/base';\nimport type { DeviceFlowData, DeviceFlowStatus } from '@/types';\n\nconst DEFAULT_POLL_INTERVAL_MS = 5_000;\nconst DEFAULT_TIMEOUT_MS = 300_000; // 5 minutes\n\nexport class AuthResource extends Resource {\n\n async initiateDeviceFlow(): Promise<DeviceFlowData> {\n const res = await this.client.request<{ data: DeviceFlowData }>(\n 'POST',\n '/v1/auth/device-codes',\n );\n return res.data;\n }\n\n async getDeviceFlowStatus(deviceCode: string): Promise<DeviceFlowStatus> {\n const res = await this.client.request<{ data: DeviceFlowStatus }>(\n 'GET',\n `/v1/auth/device-codes/${deviceCode}`,\n );\n return res.data;\n }\n\n async pollForApproval(\n deviceCode: string,\n options?: { pollIntervalMs?: number; timeoutMs?: number },\n ): Promise<string> {\n const pollInterval = options?.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;\n const timeout = options?.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n const deadline = Date.now() + timeout;\n\n while (Date.now() < deadline) {\n await new Promise((r) => setTimeout(r, pollInterval));\n\n try {\n const status = await this.getDeviceFlowStatus(deviceCode);\n\n if (status.status === 'approved' && status.apiKey) {\n return status.apiKey;\n }\n\n if (status.status === 'expired') {\n throw new Error('Login code expired. Try again.');\n }\n } catch (err) {\n if ((err as Error).message.includes('expired')) throw err;\n }\n }\n\n throw new Error('Login timed out. Try again.');\n }\n}\n","import { Resource } from '@/resources/base';\nimport type { Participant } from '@/types';\n\nexport class AgentsResource extends Resource {\n\n async create(options?: { name?: string; description?: string }): Promise<Participant> {\n const res = await this.client.request<{ data: Participant }>(\n 'POST',\n '/v1/participants',\n {\n name: options?.name,\n description: options?.description,\n },\n );\n return res.data;\n }\n}\n","import { Resource } from '@/resources/base';\nimport type {\n Participant,\n ParticipantSettings,\n BalanceResponse,\n OnchainBalanceResponse,\n LedgerEntry,\n} from '@/types';\n\nexport class ParticipantsResource extends Resource {\n\n async create(options?: { name?: string; description?: string }): Promise<Participant> {\n const res = await this.client.request<{ data: Participant }>(\n 'POST',\n '/v1/participants',\n {\n name: options?.name || undefined,\n description: options?.description || undefined,\n },\n );\n return res.data;\n }\n\n async list(): Promise<Participant[]> {\n const res = await this.client.request<{ data: Participant[] }>(\n 'GET',\n '/v1/participants',\n );\n return res.data;\n }\n\n async get(participantId: string): Promise<Participant> {\n const res = await this.client.request<{ data: Participant }>(\n 'GET',\n `/v1/participants/${participantId}`,\n );\n return res.data;\n }\n\n async update(\n participantId: string,\n data: {\n settings?: Partial<ParticipantSettings>;\n status?: 'active' | 'deleted';\n },\n ): Promise<Participant> {\n const res = await this.client.request<{ data: Participant }>(\n 'PATCH',\n `/v1/participants/${participantId}`,\n data,\n );\n return res.data;\n }\n\n async getBalance(participantId: string): Promise<BalanceResponse> {\n const res = await this.client.request<{ data: BalanceResponse }>(\n 'GET',\n `/v1/participants/${participantId}/balance`,\n );\n return res.data;\n }\n\n async getOnchainBalance(participantId: string): Promise<OnchainBalanceResponse> {\n const res = await this.client.request<{ data: OnchainBalanceResponse }>(\n 'GET',\n `/v1/participants/${participantId}/onchain-balance`,\n );\n return res.data;\n }\n\n async getLedgerEntries(participantId: string): Promise<LedgerEntry[]> {\n const res = await this.client.request<{ data: LedgerEntry[] }>(\n 'GET',\n `/v1/participants/${participantId}/ledger-entries`,\n );\n return res.data;\n }\n\n async deposit(\n participantId: string,\n data: { amountCents: number },\n ): Promise<LedgerEntry> {\n const res = await this.client.request<{ data: LedgerEntry }>(\n 'POST',\n `/v1/participants/${participantId}/deposits`,\n data,\n );\n return res.data;\n }\n}\n","import { Resource } from '@/resources/base';\nimport type { ApiKeyCreateResponse, ApiKeySummary } from '@/types';\n\nexport class ApiKeysResource extends Resource {\n\n async create(): Promise<ApiKeyCreateResponse> {\n const res = await this.client.request<{ data: ApiKeyCreateResponse }>(\n 'POST',\n '/v1/api-keys',\n );\n return res.data;\n }\n\n async list(): Promise<ApiKeySummary[]> {\n const res = await this.client.request<{ data: ApiKeySummary[] }>(\n 'GET',\n '/v1/api-keys',\n );\n return res.data;\n }\n\n async revoke(id: string): Promise<void> {\n await this.client.request('DELETE', `/v1/api-keys/${id}`);\n }\n}\n","import { Resource } from '@/resources/base';\nimport type { DirectoryResponse } from '@/types';\n\nexport class DirectoryResource extends Resource {\n\n async list(options?: { serviceTag?: string; name?: string }): Promise<DirectoryResponse> {\n const params = new URLSearchParams();\n if (options?.serviceTag) params.set('serviceTag', options.serviceTag);\n if (options?.name) params.set('name', options.name);\n const query = params.toString();\n const path = query ? `/v1/directory?${query}` : '/v1/directory';\n\n const res = await this.client.request<{ data: DirectoryResponse }>(\n 'GET',\n path,\n );\n return res.data;\n }\n}\n","import { Resource } from '@/resources/base';\nimport type { LeaderboardEntry } from '@/types';\n\nexport class LeaderboardResource extends Resource {\n\n async get(): Promise<LeaderboardEntry[]> {\n const res = await this.client.request<{ data: LeaderboardEntry[] }>(\n 'GET',\n '/v1/leaderboard',\n );\n return res.data;\n }\n}\n","import { Resource } from '@/resources/base';\nimport type { HealthCheckResult } from '@/types';\n\nexport class HealthResource extends Resource {\n\n async check(): Promise<HealthCheckResult> {\n try {\n await this.client.request('GET', '/v1/health');\n return { ok: true };\n } catch {\n return { ok: false };\n }\n }\n}\n","import { Resource } from '@/resources/base';\nimport type {\n ServiceListing,\n CreateServiceListingOptions,\n UpdateServiceListingOptions,\n} from '@/types';\n\nexport class ServicesResource extends Resource {\n async list(participantId: string): Promise<ServiceListing[]> {\n const res = await this.client.request<{ data: ServiceListing[] }>(\n 'GET',\n `/v1/participants/${participantId}/services`,\n );\n return res.data;\n }\n\n async create(\n participantId: string,\n options: CreateServiceListingOptions,\n ): Promise<ServiceListing> {\n const res = await this.client.request<{ data: ServiceListing }>(\n 'POST',\n `/v1/participants/${participantId}/services`,\n options,\n );\n return res.data;\n }\n\n async update(\n participantId: string,\n serviceId: string,\n options: UpdateServiceListingOptions,\n ): Promise<ServiceListing> {\n const res = await this.client.request<{ data: ServiceListing }>(\n 'PATCH',\n `/v1/participants/${participantId}/services/${serviceId}`,\n options,\n );\n return res.data;\n }\n\n async delete(\n participantId: string,\n serviceId: string,\n ): Promise<void> {\n await this.client.request<{ data: { deleted: boolean } }>(\n 'DELETE',\n `/v1/participants/${participantId}/services/${serviceId}`,\n );\n }\n}\n","import type { StamnClientOptions, Requestable } from '@/types';\nimport { AuthResource } from '@/resources/auth';\nimport { AgentsResource } from '@/resources/agents';\nimport { ParticipantsResource } from '@/resources/participants';\nimport { ApiKeysResource } from '@/resources/api-keys';\nimport { DirectoryResource } from '@/resources/directory';\nimport { LeaderboardResource } from '@/resources/leaderboard';\nimport { HealthResource } from '@/resources/health';\nimport { ServicesResource } from '@/resources/services';\n\nexport class StamnApiError extends Error {\n constructor(\n message: string,\n public readonly status: number,\n ) {\n super(message);\n this.name = \"StamnApiError\";\n }\n}\n\ninterface ResolvedRetryOptions {\n maxRetries: number;\n initialDelayMs: number;\n backoffMultiplier: number;\n maxDelayMs: number;\n}\n\nconst DEFAULT_RETRY: ResolvedRetryOptions = {\n maxRetries: 0,\n initialDelayMs: 500,\n backoffMultiplier: 2,\n maxDelayMs: 10_000,\n};\n\nconst SERVER_URL = \"https://api.stamn.com\";\n\nexport class StamnClient implements Requestable {\n private readonly serverUrl = SERVER_URL;\n private apiKey?: string;\n private retryOptions: ResolvedRetryOptions;\n\n public readonly auth: AuthResource;\n public readonly agents: AgentsResource;\n public readonly participants: ParticipantsResource;\n public readonly apiKeys: ApiKeysResource;\n public readonly directory: DirectoryResource;\n public readonly leaderboard: LeaderboardResource;\n public readonly health: HealthResource;\n public readonly services: ServicesResource;\n\n constructor(options: StamnClientOptions = {}) {\n this.apiKey = options.apiKey;\n this.retryOptions = { ...DEFAULT_RETRY, ...options.retry };\n\n this.auth = new AuthResource(this);\n this.agents = new AgentsResource(this);\n this.participants = new ParticipantsResource(this);\n this.apiKeys = new ApiKeysResource(this);\n this.directory = new DirectoryResource(this);\n this.leaderboard = new LeaderboardResource(this);\n this.health = new HealthResource(this);\n this.services = new ServicesResource(this);\n }\n\n setApiKey(apiKey: string): void {\n this.apiKey = apiKey;\n }\n\n async request<T>(method: string, path: string, body?: unknown): Promise<T> {\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= this.retryOptions.maxRetries; attempt++) {\n if (attempt > 0) {\n await this.sleep(this.calculateDelay(attempt - 1));\n }\n\n try {\n return await this.executeRequest<T>(method, path, body);\n } catch (error) {\n lastError = error;\n if (\n !this.isRetryable(error) ||\n attempt === this.retryOptions.maxRetries\n ) {\n throw error;\n }\n }\n }\n\n throw lastError;\n }\n\n private async executeRequest<T>(\n method: string,\n path: string,\n body?: unknown,\n ): Promise<T> {\n const headers: Record<string, string> = {};\n\n if (body !== undefined) {\n headers[\"Content-Type\"] = \"application/json\";\n }\n\n if (this.apiKey) {\n headers[\"Authorization\"] = `Bearer ${this.apiKey}`;\n }\n\n const res = await fetch(`${this.serverUrl}${path}`, {\n method,\n headers,\n body: body !== undefined ? JSON.stringify(body) : undefined,\n });\n\n if (!res.ok) {\n const message = await this.parseErrorResponse(res);\n throw new StamnApiError(message, res.status);\n }\n\n const text = await res.text();\n if (!text) return undefined as T;\n\n return JSON.parse(text) as T;\n }\n\n private isRetryable(error: unknown): boolean {\n if (error instanceof TypeError) return true;\n if (error instanceof StamnApiError && error.status >= 500) return true;\n if (error instanceof StamnApiError && error.status === 429) return true;\n return false;\n }\n\n private calculateDelay(attempt: number): number {\n const baseDelay =\n this.retryOptions.initialDelayMs *\n Math.pow(this.retryOptions.backoffMultiplier, attempt);\n const capped = Math.min(baseDelay, this.retryOptions.maxDelayMs);\n return Math.random() * capped;\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n private async parseErrorResponse(res: Response): Promise<string> {\n const body = await res.text();\n try {\n const parsed = JSON.parse(body);\n const msg =\n parsed.error?.message ??\n (Array.isArray(parsed.message)\n ? parsed.message.join(\". \")\n : parsed.message);\n if (msg) return msg;\n } catch {}\n return body || `HTTP ${res.status}`;\n }\n}\n"],"mappings":";AAEO,IAAe,WAAf,MAAwB;AAAA,EAC7B,YAA+B,QAAqB;AAArB;AAAA,EAAsB;AACvD;;;ACDA,IAAM,2BAA2B;AACjC,IAAM,qBAAqB;AAEpB,IAAM,eAAN,cAA2B,SAAS;AAAA,EAEzC,MAAM,qBAA8C;AAClD,UAAM,MAAM,MAAM,KAAK,OAAO;AAAA,MAC5B;AAAA,MACA;AAAA,IACF;AACA,WAAO,IAAI;AAAA,EACb;AAAA,EAEA,MAAM,oBAAoB,YAA+C;AACvE,UAAM,MAAM,MAAM,KAAK,OAAO;AAAA,MAC5B;AAAA,MACA,yBAAyB,UAAU;AAAA,IACrC;AACA,WAAO,IAAI;AAAA,EACb;AAAA,EAEA,MAAM,gBACJ,YACA,SACiB;AACjB,UAAM,eAAe,SAAS,kBAAkB;AAChD,UAAM,UAAU,SAAS,aAAa;AACtC,UAAM,WAAW,KAAK,IAAI,IAAI;AAE9B,WAAO,KAAK,IAAI,IAAI,UAAU;AAC5B,YAAM,IAAI,QAAQ,CAAC,MAAM,WAAW,GAAG,YAAY,CAAC;AAEpD,UAAI;AACF,cAAM,SAAS,MAAM,KAAK,oBAAoB,UAAU;AAExD,YAAI,OAAO,WAAW,cAAc,OAAO,QAAQ;AACjD,iBAAO,OAAO;AAAA,QAChB;AAEA,YAAI,OAAO,WAAW,WAAW;AAC/B,gBAAM,IAAI,MAAM,gCAAgC;AAAA,QAClD;AAAA,MACF,SAAS,KAAK;AACZ,YAAK,IAAc,QAAQ,SAAS,SAAS,EAAG,OAAM;AAAA,MACxD;AAAA,IACF;AAEA,UAAM,IAAI,MAAM,6BAA6B;AAAA,EAC/C;AACF;;;ACjDO,IAAM,iBAAN,cAA6B,SAAS;AAAA,EAE3C,MAAM,OAAO,SAAyE;AACpF,UAAM,MAAM,MAAM,KAAK,OAAO;AAAA,MAC5B;AAAA,MACA;AAAA,MACA;AAAA,QACE,MAAM,SAAS;AAAA,QACf,aAAa,SAAS;AAAA,MACxB;AAAA,IACF;AACA,WAAO,IAAI;AAAA,EACb;AACF;;;ACPO,IAAM,uBAAN,cAAmC,SAAS;AAAA,EAEjD,MAAM,OAAO,SAAyE;AACpF,UAAM,MAAM,MAAM,KAAK,OAAO;AAAA,MAC5B;AAAA,MACA;AAAA,MACA;AAAA,QACE,MAAM,SAAS,QAAQ;AAAA,QACvB,aAAa,SAAS,eAAe;AAAA,MACvC;AAAA,IACF;AACA,WAAO,IAAI;AAAA,EACb;AAAA,EAEA,MAAM,OAA+B;AACnC,UAAM,MAAM,MAAM,KAAK,OAAO;AAAA,MAC5B;AAAA,MACA;AAAA,IACF;AACA,WAAO,IAAI;AAAA,EACb;AAAA,EAEA,MAAM,IAAI,eAA6C;AACrD,UAAM,MAAM,MAAM,KAAK,OAAO;AAAA,MAC5B;AAAA,MACA,oBAAoB,aAAa;AAAA,IACnC;AACA,WAAO,IAAI;AAAA,EACb;AAAA,EAEA,MAAM,OACJ,eACA,MAIsB;AACtB,UAAM,MAAM,MAAM,KAAK,OAAO;AAAA,MAC5B;AAAA,MACA,oBAAoB,aAAa;AAAA,MACjC;AAAA,IACF;AACA,WAAO,IAAI;AAAA,EACb;AAAA,EAEA,MAAM,WAAW,eAAiD;AAChE,UAAM,MAAM,MAAM,KAAK,OAAO;AAAA,MAC5B;AAAA,MACA,oBAAoB,aAAa;AAAA,IACnC;AACA,WAAO,IAAI;AAAA,EACb;AAAA,EAEA,MAAM,kBAAkB,eAAwD;AAC9E,UAAM,MAAM,MAAM,KAAK,OAAO;AAAA,MAC5B;AAAA,MACA,oBAAoB,aAAa;AAAA,IACnC;AACA,WAAO,IAAI;AAAA,EACb;AAAA,EAEA,MAAM,iBAAiB,eAA+C;AACpE,UAAM,MAAM,MAAM,KAAK,OAAO;AAAA,MAC5B;AAAA,MACA,oBAAoB,aAAa;AAAA,IACnC;AACA,WAAO,IAAI;AAAA,EACb;AAAA,EAEA,MAAM,QACJ,eACA,MACsB;AACtB,UAAM,MAAM,MAAM,KAAK,OAAO;AAAA,MAC5B;AAAA,MACA,oBAAoB,aAAa;AAAA,MACjC;AAAA,IACF;AACA,WAAO,IAAI;AAAA,EACb;AACF;;;ACtFO,IAAM,kBAAN,cAA8B,SAAS;AAAA,EAE5C,MAAM,SAAwC;AAC5C,UAAM,MAAM,MAAM,KAAK,OAAO;AAAA,MAC5B;AAAA,MACA;AAAA,IACF;AACA,WAAO,IAAI;AAAA,EACb;AAAA,EAEA,MAAM,OAAiC;AACrC,UAAM,MAAM,MAAM,KAAK,OAAO;AAAA,MAC5B;AAAA,MACA;AAAA,IACF;AACA,WAAO,IAAI;AAAA,EACb;AAAA,EAEA,MAAM,OAAO,IAA2B;AACtC,UAAM,KAAK,OAAO,QAAQ,UAAU,gBAAgB,EAAE,EAAE;AAAA,EAC1D;AACF;;;ACrBO,IAAM,oBAAN,cAAgC,SAAS;AAAA,EAE9C,MAAM,KAAK,SAA8E;AACvF,UAAM,SAAS,IAAI,gBAAgB;AACnC,QAAI,SAAS,WAAY,QAAO,IAAI,cAAc,QAAQ,UAAU;AACpE,QAAI,SAAS,KAAM,QAAO,IAAI,QAAQ,QAAQ,IAAI;AAClD,UAAM,QAAQ,OAAO,SAAS;AAC9B,UAAM,OAAO,QAAQ,iBAAiB,KAAK,KAAK;AAEhD,UAAM,MAAM,MAAM,KAAK,OAAO;AAAA,MAC5B;AAAA,MACA;AAAA,IACF;AACA,WAAO,IAAI;AAAA,EACb;AACF;;;ACfO,IAAM,sBAAN,cAAkC,SAAS;AAAA,EAEhD,MAAM,MAAmC;AACvC,UAAM,MAAM,MAAM,KAAK,OAAO;AAAA,MAC5B;AAAA,MACA;AAAA,IACF;AACA,WAAO,IAAI;AAAA,EACb;AACF;;;ACTO,IAAM,iBAAN,cAA6B,SAAS;AAAA,EAE3C,MAAM,QAAoC;AACxC,QAAI;AACF,YAAM,KAAK,OAAO,QAAQ,OAAO,YAAY;AAC7C,aAAO,EAAE,IAAI,KAAK;AAAA,IACpB,QAAQ;AACN,aAAO,EAAE,IAAI,MAAM;AAAA,IACrB;AAAA,EACF;AACF;;;ACNO,IAAM,mBAAN,cAA+B,SAAS;AAAA,EAC7C,MAAM,KAAK,eAAkD;AAC3D,UAAM,MAAM,MAAM,KAAK,OAAO;AAAA,MAC5B;AAAA,MACA,oBAAoB,aAAa;AAAA,IACnC;AACA,WAAO,IAAI;AAAA,EACb;AAAA,EAEA,MAAM,OACJ,eACA,SACyB;AACzB,UAAM,MAAM,MAAM,KAAK,OAAO;AAAA,MAC5B;AAAA,MACA,oBAAoB,aAAa;AAAA,MACjC;AAAA,IACF;AACA,WAAO,IAAI;AAAA,EACb;AAAA,EAEA,MAAM,OACJ,eACA,WACA,SACyB;AACzB,UAAM,MAAM,MAAM,KAAK,OAAO;AAAA,MAC5B;AAAA,MACA,oBAAoB,aAAa,aAAa,SAAS;AAAA,MACvD;AAAA,IACF;AACA,WAAO,IAAI;AAAA,EACb;AAAA,EAEA,MAAM,OACJ,eACA,WACe;AACf,UAAM,KAAK,OAAO;AAAA,MAChB;AAAA,MACA,oBAAoB,aAAa,aAAa,SAAS;AAAA,IACzD;AAAA,EACF;AACF;;;ACxCO,IAAM,gBAAN,cAA4B,MAAM;AAAA,EACvC,YACE,SACgB,QAChB;AACA,UAAM,OAAO;AAFG;AAGhB,SAAK,OAAO;AAAA,EACd;AACF;AASA,IAAM,gBAAsC;AAAA,EAC1C,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB,mBAAmB;AAAA,EACnB,YAAY;AACd;AAEA,IAAM,aAAa;AAEZ,IAAM,cAAN,MAAyC;AAAA,EAC7B,YAAY;AAAA,EACrB;AAAA,EACA;AAAA,EAEQ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEhB,YAAY,UAA8B,CAAC,GAAG;AAC5C,SAAK,SAAS,QAAQ;AACtB,SAAK,eAAe,EAAE,GAAG,eAAe,GAAG,QAAQ,MAAM;AAEzD,SAAK,OAAO,IAAI,aAAa,IAAI;AACjC,SAAK,SAAS,IAAI,eAAe,IAAI;AACrC,SAAK,eAAe,IAAI,qBAAqB,IAAI;AACjD,SAAK,UAAU,IAAI,gBAAgB,IAAI;AACvC,SAAK,YAAY,IAAI,kBAAkB,IAAI;AAC3C,SAAK,cAAc,IAAI,oBAAoB,IAAI;AAC/C,SAAK,SAAS,IAAI,eAAe,IAAI;AACrC,SAAK,WAAW,IAAI,iBAAiB,IAAI;AAAA,EAC3C;AAAA,EAEA,UAAU,QAAsB;AAC9B,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,MAAM,QAAW,QAAgB,MAAc,MAA4B;AACzE,QAAI;AAEJ,aAAS,UAAU,GAAG,WAAW,KAAK,aAAa,YAAY,WAAW;AACxE,UAAI,UAAU,GAAG;AACf,cAAM,KAAK,MAAM,KAAK,eAAe,UAAU,CAAC,CAAC;AAAA,MACnD;AAEA,UAAI;AACF,eAAO,MAAM,KAAK,eAAkB,QAAQ,MAAM,IAAI;AAAA,MACxD,SAAS,OAAO;AACd,oBAAY;AACZ,YACE,CAAC,KAAK,YAAY,KAAK,KACvB,YAAY,KAAK,aAAa,YAC9B;AACA,gBAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,UAAM;AAAA,EACR;AAAA,EAEA,MAAc,eACZ,QACA,MACA,MACY;AACZ,UAAM,UAAkC,CAAC;AAEzC,QAAI,SAAS,QAAW;AACtB,cAAQ,cAAc,IAAI;AAAA,IAC5B;AAEA,QAAI,KAAK,QAAQ;AACf,cAAQ,eAAe,IAAI,UAAU,KAAK,MAAM;AAAA,IAClD;AAEA,UAAM,MAAM,MAAM,MAAM,GAAG,KAAK,SAAS,GAAG,IAAI,IAAI;AAAA,MAClD;AAAA,MACA;AAAA,MACA,MAAM,SAAS,SAAY,KAAK,UAAU,IAAI,IAAI;AAAA,IACpD,CAAC;AAED,QAAI,CAAC,IAAI,IAAI;AACX,YAAM,UAAU,MAAM,KAAK,mBAAmB,GAAG;AACjD,YAAM,IAAI,cAAc,SAAS,IAAI,MAAM;AAAA,IAC7C;AAEA,UAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,QAAI,CAAC,KAAM,QAAO;AAElB,WAAO,KAAK,MAAM,IAAI;AAAA,EACxB;AAAA,EAEQ,YAAY,OAAyB;AAC3C,QAAI,iBAAiB,UAAW,QAAO;AACvC,QAAI,iBAAiB,iBAAiB,MAAM,UAAU,IAAK,QAAO;AAClE,QAAI,iBAAiB,iBAAiB,MAAM,WAAW,IAAK,QAAO;AACnE,WAAO;AAAA,EACT;AAAA,EAEQ,eAAe,SAAyB;AAC9C,UAAM,YACJ,KAAK,aAAa,iBAClB,KAAK,IAAI,KAAK,aAAa,mBAAmB,OAAO;AACvD,UAAM,SAAS,KAAK,IAAI,WAAW,KAAK,aAAa,UAAU;AAC/D,WAAO,KAAK,OAAO,IAAI;AAAA,EACzB;AAAA,EAEQ,MAAM,IAA2B;AACvC,WAAO,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AAAA,EACzD;AAAA,EAEA,MAAc,mBAAmB,KAAgC;AAC/D,UAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,QAAI;AACF,YAAM,SAAS,KAAK,MAAM,IAAI;AAC9B,YAAM,MACJ,OAAO,OAAO,YACb,MAAM,QAAQ,OAAO,OAAO,IACzB,OAAO,QAAQ,KAAK,IAAI,IACxB,OAAO;AACb,UAAI,IAAK,QAAO;AAAA,IAClB,QAAQ;AAAA,IAAC;AACT,WAAO,QAAQ,QAAQ,IAAI,MAAM;AAAA,EACnC;AACF;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stamn/sdk",
3
- "version": "0.1.0-alpha.0",
3
+ "version": "0.1.0-alpha.2",
4
4
  "description": "Stamn SDK",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",