npm install --save-exact @tinkerlandai/indiana-sdk@0.6.2一个包同时支持 Node.js 22+ 后端和浏览器,并内置 TypeScript 类型。所有客户端默认请求 https://api.tinker.cash;测试服务需显式设置 baseUrl。各入口见安装页。
相关:安装 SDK 与 CLI
服务端与浏览器客户端、全部方法、Funnel/Paywall/实验入口与错误处理。
npm install --save-exact @tinkerlandai/indiana-sdk@0.6.2一个包同时支持 Node.js 22+ 后端和浏览器,并内置 TypeScript 类型。所有客户端默认请求 https://api.tinker.cash;测试服务需显式设置 baseUrl。各入口见安装页。
相关:安装 SDK 与 CLI
createIndianaServer 使用 Server Key,只能在可信后端创建;在浏览器中调用会抛出 SERVER_ONLY。每个方法对应一个 HTTP 操作,请求与响应都按公开契约校验。
import { createIndianaServer, IndianaError } from "@tinkerlandai/indiana-sdk/server"; const indiana = createIndianaServer({ baseUrl: process.env.INDIANA_API_URL!, apiKey: process.env.INDIANA_API_KEY!, scope: { projectId: process.env.INDIANA_PROJECT_ID!, environment: "sandbox" },}); export async function generateImage(verifiedUserId: string, eventId: string) { const { customer } = await indiana.getOrCreateCustomer({ externalUserId: verifiedUserId, }); const { check } = await indiana.checkEntitlement({ customerId: customer.id, requirement: { internal_feature_id: process.env.INDIANA_FEATURE_ID!, quantity: "1", properties: {}, }, }); if (!check.allowed) return { allowed: false as const }; try { const { receipts } = await indiana.trackUsage({ customerId: customer.id, // eventId is persisted before the call and reused on every retry. command: { eventName: "image_generated", quantity: "1", idempotencyKey: eventId }, }); for (const receipt of receipts) if (!receipt.accepted) console.warn("usage refused", receipt.reason); return { allowed: true as const, receipts }; } catch (error) { if (error instanceof IndianaError) console.error(error.code, error.recovery, error.requestId); throw error; }}| 领域 | 方法 |
|---|---|
| Customer、访客与会话 | getOrCreateCustomer, getCustomer, listCustomers, updateCustomer, createCustomerSession, renewCustomerSession, revokeCustomerSessions, createGuestCustomer, resumeGuestSession, claimGuestCustomer |
| 权益与商品展示 | checkEntitlement, resolveOffering, resolvePaywall, readHoldings |
| 余额、用量与账本 | readBalanceSource, adjustBalance, readUsage, setUsage, manageBalanceGrant, listBalanceGrants, manageUsageEntity, readUsageAnalytics, readCreditAnalytics, submitUsageBatch, readUsageBatch, readLedger, readCreditStatement, quoteBalance, trackUsage, mutateBalance |
| 席位 | readSeats, manageSeat |
| 订阅与支付 | setupPayment, readPaymentSetup, verifySubscriptions, previewAttach, attach, readSubscriptionOperation, previewUpdate, update, readSubscriptionUpdate, listSubscriptions, listPurchases, listSubscriptionConflicts, retrySubscriptionConflict, manageSubscriptionTrial, readSubscriptionTrial |
| 发票、退款与计费 | listInvoiceTemplates, previewInvoice, createInvoice, manageInvoice, readInvoiceOperation, listInvoices, getInvoice, previewRefund, refund, readRefund, manageBillingLimits, readBillingInvoice |
| 优惠券、奖励与推荐 | grantOffer, recordCouponRedemption |
| Feature、求值与事件 | getFeatures, evaluateFeatures, trackEvents |
| 原生购买 | restoreNativePurchase |
| AI 定价 | readAiPricing |
按领域划分的服务端方法
Customer、访客与会话
getOrCreateCustomer, getCustomer, listCustomers, updateCustomer, createCustomerSession, renewCustomerSession, revokeCustomerSessions, createGuestCustomer, resumeGuestSession, claimGuestCustomer权益与商品展示
checkEntitlement, resolveOffering, resolvePaywall, readHoldings余额、用量与账本
readBalanceSource, adjustBalance, readUsage, setUsage, manageBalanceGrant, listBalanceGrants, manageUsageEntity, readUsageAnalytics, readCreditAnalytics, submitUsageBatch, readUsageBatch, readLedger, readCreditStatement, quoteBalance, trackUsage, mutateBalance席位
readSeats, manageSeat订阅与支付
setupPayment, readPaymentSetup, verifySubscriptions, previewAttach, attach, readSubscriptionOperation, previewUpdate, update, readSubscriptionUpdate, listSubscriptions, listPurchases, listSubscriptionConflicts, retrySubscriptionConflict, manageSubscriptionTrial, readSubscriptionTrial发票、退款与计费
listInvoiceTemplates, previewInvoice, createInvoice, manageInvoice, readInvoiceOperation, listInvoices, getInvoice, previewRefund, refund, readRefund, manageBillingLimits, readBillingInvoice优惠券、奖励与推荐
grantOffer, recordCouponRedemptionFeature、求值与事件
getFeatures, evaluateFeatures, trackEvents原生购买
restoreNativePurchaseAI 定价
readAiPricing| 选项 | 说明 |
|---|---|
apiKey | Server Key(gg_sk_),保存在后端密钥系统。 |
scope | { projectId, environment }:App UUID 与 sandbox 或 live,必须与 Key 一致。 |
baseUrl | API origin,默认 https://api.tinker.cash;不带 /api/v1。 |
timeoutMs | 单次请求超时,默认 10000,最大 120000。 |
fetch | 注入自定义 fetch,用于代理或离线测试。 |
客户端选项
apiKey
gg_sk_),保存在后端密钥系统。scope
{ projectId, environment }:App UUID 与 sandbox 或 live,必须与 Key 一致。baseUrl
timeoutMs
fetch
浏览器不持有 Server Key。后端验证用户登录后签发 Customer Token,浏览器用 identify(token) 建立身份;Customer 身份由 Token 决定,浏览器不能指定其他 customerId。退出或切换账号时调用 reset()。
import { createIndianaServer } from "@tinkerlandai/indiana-sdk/server"; const indiana = createIndianaServer({ baseUrl: process.env.INDIANA_API_URL!, apiKey: process.env.INDIANA_API_KEY!, scope: { projectId: process.env.INDIANA_PROJECT_ID!, environment: "sandbox" },}); // Call only after your own login check succeeds.export async function issueCustomerToken(verifiedUserId: string) { const { customer } = await indiana.getOrCreateCustomer({ externalUserId: verifiedUserId, }); const { customerToken, expiresAt } = await indiana.createCustomerSession(customer.id); return { customerToken, expiresAt };}| 领域 | 方法 |
|---|---|
| 权益与商品展示 | checkEntitlement, resolveOffering, resolvePaywall, readHoldings |
| 余额、用量与账本 | readLedger, readCreditStatement, quoteBalance |
| 订阅与支付 | setupPayment, readPaymentSetup, previewAttach, attach, readSubscriptionOperation, previewUpdate, update, readSubscriptionUpdate |
| 发票、退款与计费 | readBillingControls, prepareBillingAuthorization, confirmBillingAuthorization, setBillingCoupons, revokeBillingAuthorization, listBillingInvoices, readBillingInvoice |
| 优惠券、奖励与推荐 | redeemCoupon, listOffers, claimCoupon, redeemReward, createReferralCode |
| Feature、求值与事件 | features, track, flush |
| 原生购买 | restoreNativePurchase |
按领域划分的浏览器方法
权益与商品展示
checkEntitlement, resolveOffering, resolvePaywall, readHoldings余额、用量与账本
readLedger, readCreditStatement, quoteBalance订阅与支付
setupPayment, readPaymentSetup, previewAttach, attach, readSubscriptionOperation, previewUpdate, update, readSubscriptionUpdate发票、退款与计费
readBillingControls, prepareBillingAuthorization, confirmBillingAuthorization, setBillingCoupons, revokeBillingAuthorization, listBillingInvoices, readBillingInvoice优惠券、奖励与推荐
redeemCoupon, listOffers, claimCoupon, redeemReward, createReferralCodeFeature、求值与事件
features, track, flush原生购买
restoreNativePurchasesessions:create,以及浏览器要调用的权限(如 entitlements:read、billing:write、offers:resolve)。indiana.forFunnel({ funnelId, versionId }) 返回绑定该 Funnel 的资源客户端,用于领券、Offering/Paywall 解析和购买报价。| 函数 | 入口 | 用途 |
|---|---|---|
createFunnelStartClient | /server | 后端启动 Funnel Run,返回 Run Token |
createFunnelRunController, showFunnelRun | 主入口 | 在浏览器中展示并推进 Run |
createFunnelClient | 主入口 | 持有 Customer Token 的客户端自行启动 Run |
createLocalFunnelClient, createConfigurationSync | 主入口 / /server | Local 模式 Funnel 与共享公开配置 |
createFunnelDecisionClient, createFunnelCampaignClient | /server | 服务端决策、Campaign 启动与采纳回执 |
createFunnelOrchestrationClient, renewFunnelRun | /server | 向 Run 发送信号、读取结果、轮换 Run Token |
createPaywallStartClient, createPaywallSession, showPaywall | /server / 主入口 | 独立 Paywall 会话与展示 |
createFeatureClient, indiana.features() | 主入口 | Feature 求值与订阅 |
createPageExperiments | /page | URL 跳转实验 |
createVisualExperiments | /visual | 可视化实验 |
createNativeReceiptClient | /server | 后端提交原生商店凭证 |
createAiUsageMiddleware, createAiPricing | /server | AI SDK 用量计费中间件与定价 |
createOpenRouterUsageClient, trackOpenRouterUsage | /openrouter | OpenRouter 用量计费 |
其他导出
createFunnelStartClient
/servercreateFunnelRunController, showFunnelRun
createFunnelClient
createLocalFunnelClient, createConfigurationSync
/servercreateFunnelDecisionClient, createFunnelCampaignClient
/servercreateFunnelOrchestrationClient, renewFunnelRun
/servercreatePaywallStartClient, createPaywallSession, showPaywall
/server / 主入口createFeatureClient, indiana.features()
createPageExperiments
/pagecreateVisualExperiments
/visualcreateNativeReceiptClient
/servercreateAiUsageMiddleware, createAiPricing
/servercreateOpenRouterUsageClient, trackOpenRouterUsage
/openrouter失败抛出 IndianaError,包含 code、status、requestId、retryable、recovery,以及可选的 reason 和 retryAfterSeconds。SDK 不会自动重试写操作:在发送前持久保存 requestId、eventId 或 idempotencyKey,结果未知时用原值和原输入重放,或读取原操作。
相关:错误码与恢复