@voltro/plugin-economy 0.0.0-stage → 0.87.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/CHANGELOG.md +24329 -0
- package/LICENSE +61 -0
- package/README.md +2719 -2
- package/SECURITY.md +56 -0
- package/THIRD-PARTY-NOTICES.md +9189 -0
- package/dist/amount.js +21 -0
- package/dist/appleIap.server.js +263 -0
- package/dist/appleIapNotifications.server.js +163 -0
- package/dist/appleIapTrust.server.js +31 -0
- package/dist/bundleValue.server.js +113 -0
- package/dist/canonicalDataJson.js +11 -0
- package/dist/capture.js +54 -0
- package/dist/codePort.fixture.js +124 -0
- package/dist/codeStore.server.js +440 -0
- package/dist/codeTables.entity.js +44 -0
- package/dist/codes.d.ts +150 -0
- package/dist/codes.js +83 -0
- package/dist/components.d.ts +397 -0
- package/dist/components.js +284 -0
- package/dist/consistency.server.js +116 -0
- package/dist/containerStore.server.js +688 -0
- package/dist/containerStore.testFixtures.js +76 -0
- package/dist/containerTables.entity.js +46 -0
- package/dist/containers.d.ts +311 -0
- package/dist/containers.fixture.js +129 -0
- package/dist/containers.js +215 -0
- package/dist/containers.server.js +40 -0
- package/dist/containersPort.fixture.js +75 -0
- package/dist/currency.js +33 -0
- package/dist/declarationFixtures.js +62 -0
- package/dist/economy-app/events/economy.refundReversed.event.ts +1 -0
- package/dist/economy-app/events/economy.refunded.event.ts +1 -0
- package/dist/economyPort.fixture.js +125 -0
- package/dist/errors.d.ts +14 -0
- package/dist/errors.js +22 -0
- package/dist/events.d.ts +46 -0
- package/dist/events.js +1 -0
- package/dist/googleIap.server.js +392 -0
- package/dist/googleIapNotifications.server.js +131 -0
- package/dist/googleIapSubscription.server.js +184 -0
- package/dist/iap.d.ts +309 -0
- package/dist/iap.js +304 -0
- package/dist/iap.testFixtures.js +145 -0
- package/dist/iapAccountTables.entity.js +40 -0
- package/dist/iapAccounts.server.js +201 -0
- package/dist/iapBinding.server.js +524 -0
- package/dist/iapCheckout.server.js +98 -0
- package/dist/iapCompletion.server.js +56 -0
- package/dist/iapCurrentState.server.js +108 -0
- package/dist/iapCurrentState.testFixtures.js +23 -0
- package/dist/iapCurrentStatePort.fixture.js +64 -0
- package/dist/iapEntitlements.d.ts +79 -0
- package/dist/iapEntitlements.js +58 -0
- package/dist/iapEntitlements.server.js +49 -0
- package/dist/iapEntitlementsBinding.server.js +106 -0
- package/dist/iapEntitlementsPort.fixture.js +81 -0
- package/dist/iapInstalledEntitlements.testFixtures.js +76 -0
- package/dist/iapInstalledNotifications.testFixtures.js +94 -0
- package/dist/iapInventoryRefunds.server.js +262 -0
- package/dist/iapNotificationCustodyPort.fixture.js +68 -0
- package/dist/iapNotificationPort.fixture.js +74 -0
- package/dist/iapNotificationProcessor.server.js +135 -0
- package/dist/iapNotificationProcessor.testFixtures.js +64 -0
- package/dist/iapNotificationProcessorPort.fixture.js +56 -0
- package/dist/iapNotificationSchedule.server.js +70 -0
- package/dist/iapNotificationStore.server.js +353 -0
- package/dist/iapNotificationStore.testFixtures.js +32 -0
- package/dist/iapNotificationTables.entity.js +49 -0
- package/dist/iapNotificationTarget.server.js +37 -0
- package/dist/iapNotificationTarget.testFixtures.js +30 -0
- package/dist/iapNotifications.d.ts +644 -0
- package/dist/iapNotifications.js +6 -0
- package/dist/iapNotifications.server.js +96 -0
- package/dist/iapNotificationsBinding.server.js +233 -0
- package/dist/iapNotificationsSystemPort.fixture.js +51 -0
- package/dist/iapPlugin.testFixtures.js +60 -0
- package/dist/iapPort.fixture.js +75 -0
- package/dist/iapProviderCapture.server.js +18 -0
- package/dist/iapRecovery.d.ts +146 -0
- package/dist/iapRecovery.js +90 -0
- package/dist/iapRefundEventDelivery.server.js +83 -0
- package/dist/iapRefundEvents.js +45 -0
- package/dist/iapRefundEventsPort.fixture.js +60 -0
- package/dist/iapRefundPort.fixture.js +55 -0
- package/dist/iapRefundTables.entity.js +56 -0
- package/dist/iapRefunds.d.ts +755 -0
- package/dist/iapRefunds.js +6 -0
- package/dist/iapRefunds.server.js +554 -0
- package/dist/iapRefunds.testFixtures.js +65 -0
- package/dist/iapSpendAdmission.server.js +99 -0
- package/dist/iapStore.server.js +741 -0
- package/dist/iapStore.testFixtures.js +128 -0
- package/dist/iapTables.entity.js +81 -0
- package/dist/iapVerification.server.js +121 -0
- package/dist/index.d.ts +2984 -0
- package/dist/index.js +15 -0
- package/dist/intentionRecovery.js +134 -0
- package/dist/ledger.js +78 -0
- package/dist/loyalty.d.ts +274 -0
- package/dist/loyalty.fixture.js +93 -0
- package/dist/loyalty.js +312 -0
- package/dist/loyaltyBinding.server.js +204 -0
- package/dist/loyaltyPort.fixture.js +87 -0
- package/dist/loyaltyShopSource.server.js +91 -0
- package/dist/loyaltyStore.server.js +553 -0
- package/dist/loyaltyStore.testFixtures.js +83 -0
- package/dist/loyaltyTables.entity.js +50 -0
- package/dist/offerMerchandising.fixture.js +115 -0
- package/dist/offerMerchandising.js +283 -0
- package/dist/offerPolicies.d.ts +441 -0
- package/dist/offerPolicies.fixture.js +54 -0
- package/dist/offerPolicies.js +268 -0
- package/dist/piggyBanks.d.ts +272 -0
- package/dist/piggyBanks.fixture.js +71 -0
- package/dist/piggyBanks.js +201 -0
- package/dist/piggyBinding.server.js +205 -0
- package/dist/piggyPort.fixture.js +73 -0
- package/dist/piggyStore.server.js +611 -0
- package/dist/piggyStore.testFixtures.js +98 -0
- package/dist/piggyTables.entity.js +41 -0
- package/dist/plugin.js +1048 -0
- package/dist/port.js +13 -0
- package/dist/price.d.ts +99 -0
- package/dist/price.js +144 -0
- package/dist/purchaseRecovery.js +56 -0
- package/dist/reports.server.js +115 -0
- package/dist/rpc.d.ts +3201 -0
- package/dist/rpc.js +1201 -0
- package/dist/sanctionsTradeAuthority.server.js +80 -0
- package/dist/server.d.ts +3856 -0
- package/dist/server.js +43 -0
- package/dist/shop.d.ts +279 -0
- package/dist/shop.js +196 -0
- package/dist/shop.testFixtures.js +114 -0
- package/dist/shopPort.fixture.js +72 -0
- package/dist/shopPresentation.js +68 -0
- package/dist/shopStore.server.js +624 -0
- package/dist/shopTables.entity.js +63 -0
- package/dist/shopUiCopy.js +57 -0
- package/dist/spendLimits.d.ts +140 -0
- package/dist/spendLimits.fixture.js +53 -0
- package/dist/spendLimits.js +155 -0
- package/dist/spendLimitsPort.fixture.js +120 -0
- package/dist/subscriptionBinding.server.js +211 -0
- package/dist/subscriptionStore.server.js +643 -0
- package/dist/subscriptionStore.testFixtures.js +72 -0
- package/dist/subscriptionTables.entity.js +37 -0
- package/dist/subscriptions.d.ts +394 -0
- package/dist/subscriptions.fixture.js +97 -0
- package/dist/subscriptions.js +213 -0
- package/dist/subscriptionsPort.fixture.js +76 -0
- package/dist/systemFixtures.js +89 -0
- package/dist/tables.entity.js +83 -0
- package/dist/testing.d.ts +4615 -0
- package/dist/testing.js +29 -0
- package/dist/tradeAuthority.server.js +172 -0
- package/dist/tradeBinding.server.js +201 -0
- package/dist/tradeComponents.js +342 -0
- package/dist/tradeEscrow.server.js +232 -0
- package/dist/tradeEscrow.testFixtures.js +133 -0
- package/dist/tradeExpiry.server.js +43 -0
- package/dist/tradeRecovery.js +48 -0
- package/dist/tradeStore.server.js +750 -0
- package/dist/tradeStore.testFixtures.js +73 -0
- package/dist/tradeTables.entity.js +66 -0
- package/dist/tradeUiCopy.js +79 -0
- package/dist/trades.d.ts +246 -0
- package/dist/trades.fixture.js +103 -0
- package/dist/trades.js +289 -0
- package/dist/tradesPort.fixture.js +94 -0
- package/dist/walletEscrow.js +106 -0
- package/dist/walletEscrow.server.js +376 -0
- package/dist/walletKeys.server.js +5 -0
- package/dist/walletStore.js +571 -0
- package/dist/web.d.ts +2257 -0
- package/dist/web.js +9 -0
- package/package.json +161 -4
package/dist/rpc.js
ADDED
|
@@ -0,0 +1,1201 @@
|
|
|
1
|
+
import { EconomyError as e } from "./errors.js";
|
|
2
|
+
import { captureIapObservation as ee } from "./iap.js";
|
|
3
|
+
import { captureIapEntitlementObservation as te } from "./iapEntitlements.js";
|
|
4
|
+
import { captureTradeView as ne } from "./trades.js";
|
|
5
|
+
import { Schema as t } from "effect";
|
|
6
|
+
import { defineAction as n, defineQuery as r } from "@voltro/protocol";
|
|
7
|
+
//#region src/rpc.ts
|
|
8
|
+
var re = "@voltro/plugin-economy", i = t.Literals([
|
|
9
|
+
"ios",
|
|
10
|
+
"android",
|
|
11
|
+
"steam",
|
|
12
|
+
"web"
|
|
13
|
+
]), a = {
|
|
14
|
+
channel: i,
|
|
15
|
+
offerId: t.String,
|
|
16
|
+
offerVersion: t.String,
|
|
17
|
+
requestId: t.String
|
|
18
|
+
}, o = t.Struct({
|
|
19
|
+
...a,
|
|
20
|
+
receiptDigest: t.String.pipe(t.check(t.makeFilter((e) => /^[a-f0-9]{64}$/.test(e))))
|
|
21
|
+
}), s = t.Struct({
|
|
22
|
+
...a,
|
|
23
|
+
receipt: t.String.pipe(t.check(t.makeFilter((e) => e.length > 0 && e.length <= 65536 && !/[\u0000-\u0020\u007f]/.test(e))))
|
|
24
|
+
}), c = t.Struct({
|
|
25
|
+
orderId: t.String,
|
|
26
|
+
offerId: t.String,
|
|
27
|
+
offerVersion: t.String,
|
|
28
|
+
quantity: t.Number,
|
|
29
|
+
at: t.Number,
|
|
30
|
+
pricePaid: t.NullOr(t.Struct({
|
|
31
|
+
currency: t.String,
|
|
32
|
+
units: t.String,
|
|
33
|
+
scale: t.Number
|
|
34
|
+
})),
|
|
35
|
+
transfers: t.Array(t.Struct({
|
|
36
|
+
txId: t.String,
|
|
37
|
+
currency: t.String,
|
|
38
|
+
amount: t.String,
|
|
39
|
+
at: t.Number
|
|
40
|
+
})),
|
|
41
|
+
grants: t.Array(t.Struct({
|
|
42
|
+
operationId: t.String,
|
|
43
|
+
kind: t.Literal("grant"),
|
|
44
|
+
changes: t.Array(t.Struct({
|
|
45
|
+
instanceId: t.String,
|
|
46
|
+
delta: t.Number
|
|
47
|
+
})),
|
|
48
|
+
at: t.Number
|
|
49
|
+
}))
|
|
50
|
+
}), l = t.Struct({
|
|
51
|
+
sequence: t.Number,
|
|
52
|
+
state: t.Literals([
|
|
53
|
+
"active",
|
|
54
|
+
"partially-refunded",
|
|
55
|
+
"revoked"
|
|
56
|
+
]),
|
|
57
|
+
refundNumerator: t.Number,
|
|
58
|
+
refundDenominator: t.Number,
|
|
59
|
+
observedAt: t.Number
|
|
60
|
+
}), u = t.Union([
|
|
61
|
+
t.Struct({
|
|
62
|
+
requestId: t.String,
|
|
63
|
+
state: t.Literals(["not-observed", "pending"])
|
|
64
|
+
}),
|
|
65
|
+
t.Struct({
|
|
66
|
+
requestId: t.String,
|
|
67
|
+
state: t.Literal("fulfilled"),
|
|
68
|
+
receipt: c,
|
|
69
|
+
refund: t.optional(l)
|
|
70
|
+
}),
|
|
71
|
+
t.Struct({
|
|
72
|
+
requestId: t.String,
|
|
73
|
+
state: t.Literals(["partially-refunded", "refunded"]),
|
|
74
|
+
receipt: c,
|
|
75
|
+
refund: l
|
|
76
|
+
})
|
|
77
|
+
]).pipe(t.check(t.makeFilter((e) => {
|
|
78
|
+
try {
|
|
79
|
+
return ee(e), !0;
|
|
80
|
+
} catch {
|
|
81
|
+
return !1;
|
|
82
|
+
}
|
|
83
|
+
}))), ie = [
|
|
84
|
+
"_voltro_eco_iap_refund_namespaces",
|
|
85
|
+
"_voltro_eco_iap_refund_subjects",
|
|
86
|
+
"_voltro_eco_iap_refund_orders",
|
|
87
|
+
"_voltro_eco_iap_refund_adjustments"
|
|
88
|
+
], d = t.Struct({
|
|
89
|
+
offerId: t.String,
|
|
90
|
+
entitled: t.Boolean,
|
|
91
|
+
expiresAt: t.NullOr(t.Number),
|
|
92
|
+
observedAt: t.Number
|
|
93
|
+
}).pipe(t.check(t.makeFilter((e) => {
|
|
94
|
+
try {
|
|
95
|
+
return te(e), !0;
|
|
96
|
+
} catch {
|
|
97
|
+
return !1;
|
|
98
|
+
}
|
|
99
|
+
}))), f = t.Struct({ offerId: t.String }), p = "Verified own user selects an installed subscription offer only. Complete accepted SQL originals and refund history plus the current server clock determine the observation. No player ownership, dates or state. Database changes invalidate the subscription; mere time passage requires a fresh check. This snapshot is not value-write authority.", ae = r({
|
|
100
|
+
name: "economy.iap.entitled",
|
|
101
|
+
input: f,
|
|
102
|
+
output: d,
|
|
103
|
+
error: e,
|
|
104
|
+
source: [
|
|
105
|
+
"_voltro_eco_iap_subjects",
|
|
106
|
+
"_voltro_eco_iap_orders",
|
|
107
|
+
"_voltro_eco_iap_receipts"
|
|
108
|
+
],
|
|
109
|
+
openAccess: p
|
|
110
|
+
}), oe = n({
|
|
111
|
+
name: "economy.iap.checkEntitlement",
|
|
112
|
+
input: f,
|
|
113
|
+
output: d,
|
|
114
|
+
error: e,
|
|
115
|
+
openAccess: p
|
|
116
|
+
}), se = [{
|
|
117
|
+
tag: "economy.iap.entitled",
|
|
118
|
+
kind: "query",
|
|
119
|
+
import: {
|
|
120
|
+
module: "@voltro/plugin-economy/rpc",
|
|
121
|
+
name: "iapEntitledDescriptor"
|
|
122
|
+
}
|
|
123
|
+
}, {
|
|
124
|
+
tag: "economy.iap.checkEntitlement",
|
|
125
|
+
kind: "action",
|
|
126
|
+
import: {
|
|
127
|
+
module: "@voltro/plugin-economy/rpc",
|
|
128
|
+
name: "iapCheckEntitlementDescriptor"
|
|
129
|
+
}
|
|
130
|
+
}], ce = r({
|
|
131
|
+
name: "economy.iap.receipt",
|
|
132
|
+
input: o,
|
|
133
|
+
output: u,
|
|
134
|
+
error: e,
|
|
135
|
+
source: [
|
|
136
|
+
"_voltro_eco_iap_subjects",
|
|
137
|
+
"_voltro_eco_iap_orders",
|
|
138
|
+
"_voltro_eco_iap_receipts",
|
|
139
|
+
"_voltro_eco_wallets",
|
|
140
|
+
"_voltro_eco_tx",
|
|
141
|
+
"_voltro_eco_ledger",
|
|
142
|
+
"_voltro_inv_items",
|
|
143
|
+
"_voltro_inv_operations"
|
|
144
|
+
],
|
|
145
|
+
openAccess: "Verified own Subject supplies tenant and owner. Hash-only original reference; never raw store evidence in query parameters. Reads accepted SQL original and configured accepted refund disposition in one borrowed transaction without seeding, verification, clock or another grant. Pending and missing are nonterminal; changed reference conflicts. Refunded is financial history, not provider completion."
|
|
146
|
+
}), le = n({
|
|
147
|
+
name: "economy.iap.account",
|
|
148
|
+
input: t.Struct({ channel: i }),
|
|
149
|
+
output: t.String,
|
|
150
|
+
error: e,
|
|
151
|
+
openAccess: "Verified user or guest chooses channel only. Server selects configured app/environment and persists a public random account UUID. No supplied token, tenant, owner or purchase authority. Owning account adapter controls its transaction; no outer transaction."
|
|
152
|
+
}), ue = n({
|
|
153
|
+
name: "economy.iap.redeem",
|
|
154
|
+
input: s,
|
|
155
|
+
output: c,
|
|
156
|
+
error: e,
|
|
157
|
+
openAccess: "Verified own Subject supplies tenant and owner. Player selects configured offer/version, original request and opaque store receipt only. Actual server verifier plus prepared account/age/consent/spend gates authorize one atomic Wallet/Inventory/order/custody commit. No client amounts or states. No outer transaction; keep audit input redacted."
|
|
158
|
+
}), m = t.Struct({
|
|
159
|
+
orderId: t.String,
|
|
160
|
+
channel: i,
|
|
161
|
+
operation: t.Literals([
|
|
162
|
+
"acknowledge",
|
|
163
|
+
"consume",
|
|
164
|
+
"finalize",
|
|
165
|
+
"finish"
|
|
166
|
+
]),
|
|
167
|
+
observedAt: t.Number
|
|
168
|
+
}), de = n({
|
|
169
|
+
name: "economy.iap.complete",
|
|
170
|
+
input: s,
|
|
171
|
+
output: m,
|
|
172
|
+
error: e,
|
|
173
|
+
openAccess: "Verified own Subject and the exact original intention must resolve an accepted SQL order before provider completion. No grant, redemption, supplied completion state or SQL outer transaction. Explicit retry only; a fresh matching terminal provider observation authorizes the result. Raw receipt is mutation input; keep audit input redacted."
|
|
174
|
+
}), fe = t.Struct({
|
|
175
|
+
...a,
|
|
176
|
+
returnUrl: t.String.pipe(t.check(t.isMaxLength(2048)))
|
|
177
|
+
}), pe = t.Struct({
|
|
178
|
+
checkoutId: t.String,
|
|
179
|
+
redirectUrl: t.String,
|
|
180
|
+
expiresAt: t.Number
|
|
181
|
+
}), me = n({
|
|
182
|
+
name: "economy.iap.checkout",
|
|
183
|
+
input: fe,
|
|
184
|
+
output: pe,
|
|
185
|
+
error: e,
|
|
186
|
+
openAccess: "Verified own user or guest selects a configured web offer, an original request and a return URL on the provider's allowed origins. The server binds the owner's account token into the provider checkout; the paid checkout is redeemed through economy.iap.redeem with the checkout ID as receipt. No grant, price or state is accepted from the client."
|
|
187
|
+
}), he = [{
|
|
188
|
+
tag: "economy.iap.checkout",
|
|
189
|
+
kind: "action",
|
|
190
|
+
import: {
|
|
191
|
+
module: "@voltro/plugin-economy/rpc",
|
|
192
|
+
name: "iapCheckoutDescriptor"
|
|
193
|
+
}
|
|
194
|
+
}], ge = t.Struct({
|
|
195
|
+
channel: i,
|
|
196
|
+
returnUrl: t.String.pipe(t.check(t.isMaxLength(2048)))
|
|
197
|
+
}), _e = t.Struct({ url: t.String }), ve = n({
|
|
198
|
+
name: "economy.iap.manage",
|
|
199
|
+
input: ge,
|
|
200
|
+
output: _e,
|
|
201
|
+
error: e,
|
|
202
|
+
openAccess: "Verified own user or guest opens the payment provider's management page (cancel a subscription, change the card) for the account token already bound to them; the return URL stays on the provider's allowed origins. No token is minted, no purchase or entitlement changes here."
|
|
203
|
+
}), ye = [{
|
|
204
|
+
tag: "economy.iap.manage",
|
|
205
|
+
kind: "action",
|
|
206
|
+
import: {
|
|
207
|
+
module: "@voltro/plugin-economy/rpc",
|
|
208
|
+
name: "iapManageDescriptor"
|
|
209
|
+
}
|
|
210
|
+
}], be = [{
|
|
211
|
+
tag: "economy.iap.complete",
|
|
212
|
+
kind: "action",
|
|
213
|
+
import: {
|
|
214
|
+
module: "@voltro/plugin-economy/rpc",
|
|
215
|
+
name: "iapCompleteDescriptor"
|
|
216
|
+
}
|
|
217
|
+
}], xe = [
|
|
218
|
+
{
|
|
219
|
+
tag: "economy.iap.receipt",
|
|
220
|
+
kind: "query",
|
|
221
|
+
import: {
|
|
222
|
+
module: "@voltro/plugin-economy/rpc",
|
|
223
|
+
name: "iapReceiptDescriptor"
|
|
224
|
+
}
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
tag: "economy.iap.account",
|
|
228
|
+
kind: "action",
|
|
229
|
+
import: {
|
|
230
|
+
module: "@voltro/plugin-economy/rpc",
|
|
231
|
+
name: "iapAccountDescriptor"
|
|
232
|
+
}
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
tag: "economy.iap.redeem",
|
|
236
|
+
kind: "action",
|
|
237
|
+
import: {
|
|
238
|
+
module: "@voltro/plugin-economy/rpc",
|
|
239
|
+
name: "iapRedeemDescriptor"
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
], h = t.Struct({
|
|
243
|
+
currency: t.String,
|
|
244
|
+
balance: t.String,
|
|
245
|
+
updatedAt: t.NullOr(t.Number)
|
|
246
|
+
}), Se = r({
|
|
247
|
+
name: "economy.mine",
|
|
248
|
+
input: t.Struct({}),
|
|
249
|
+
output: t.Array(h),
|
|
250
|
+
error: e,
|
|
251
|
+
source: [
|
|
252
|
+
"_voltro_eco_wallets",
|
|
253
|
+
"_voltro_eco_subjects",
|
|
254
|
+
"_voltro_eco_currencies"
|
|
255
|
+
],
|
|
256
|
+
openAccess: "The installed service requires a verified user or guest; tenant and owner come only from its authenticated Subject. No value-write route is mounted."
|
|
257
|
+
}), Ce = [{
|
|
258
|
+
tag: "economy.mine",
|
|
259
|
+
kind: "query",
|
|
260
|
+
import: {
|
|
261
|
+
module: "@voltro/plugin-economy/rpc",
|
|
262
|
+
name: "economyMineDescriptor"
|
|
263
|
+
}
|
|
264
|
+
}], g = t.Struct({
|
|
265
|
+
currency: t.String,
|
|
266
|
+
amount: t.String
|
|
267
|
+
}), _ = {
|
|
268
|
+
prices: t.Record(t.String, t.Number),
|
|
269
|
+
storeProductIds: t.Record(t.String, t.String)
|
|
270
|
+
}, v = t.Union([
|
|
271
|
+
t.Struct({ kind: t.Literal("free") }),
|
|
272
|
+
t.Struct({
|
|
273
|
+
kind: t.Literal("virtual"),
|
|
274
|
+
options: t.Array(g)
|
|
275
|
+
}),
|
|
276
|
+
t.Struct({
|
|
277
|
+
kind: t.Literal("real"),
|
|
278
|
+
..._
|
|
279
|
+
}),
|
|
280
|
+
t.Struct({
|
|
281
|
+
kind: t.Literal("mixed"),
|
|
282
|
+
real: t.Struct(_),
|
|
283
|
+
virtual: t.Array(g)
|
|
284
|
+
})
|
|
285
|
+
]), y = t.Struct({
|
|
286
|
+
id: t.String,
|
|
287
|
+
version: t.String,
|
|
288
|
+
titleKey: t.String,
|
|
289
|
+
price: v,
|
|
290
|
+
items: t.Array(t.Struct({
|
|
291
|
+
itemId: t.String,
|
|
292
|
+
qty: t.Number
|
|
293
|
+
})),
|
|
294
|
+
currencies: t.Array(g),
|
|
295
|
+
from: t.NullOr(t.Number),
|
|
296
|
+
until: t.NullOr(t.Number),
|
|
297
|
+
segment: t.NullOr(t.String),
|
|
298
|
+
flag: t.NullOr(t.String),
|
|
299
|
+
countries: t.Array(t.String),
|
|
300
|
+
limits: t.Struct({
|
|
301
|
+
perPlayer: t.NullOr(t.Number),
|
|
302
|
+
perDay: t.NullOr(t.Number),
|
|
303
|
+
global: t.NullOr(t.Number)
|
|
304
|
+
}),
|
|
305
|
+
oneTime: t.Boolean,
|
|
306
|
+
maxQuantity: t.Number
|
|
307
|
+
}), b = t.Struct({
|
|
308
|
+
offerDigest: t.String.pipe(t.check(t.makeFilter((e) => /^[a-f0-9]{64}$/.test(e)))),
|
|
309
|
+
offer: y,
|
|
310
|
+
price: v
|
|
311
|
+
}), x = t.Struct({
|
|
312
|
+
orderId: t.String,
|
|
313
|
+
offerId: t.String,
|
|
314
|
+
offerVersion: t.String,
|
|
315
|
+
offerDigest: t.String.pipe(t.check(t.makeFilter((e) => /^[a-f0-9]{64}$/.test(e)))),
|
|
316
|
+
quantity: t.Number,
|
|
317
|
+
at: t.Number,
|
|
318
|
+
pricePaid: t.Union([t.Struct({ kind: t.Literal("free") }), t.Struct({
|
|
319
|
+
kind: t.Literal("virtual"),
|
|
320
|
+
currency: t.String,
|
|
321
|
+
amount: t.String
|
|
322
|
+
})]),
|
|
323
|
+
transfers: t.Array(t.Struct({
|
|
324
|
+
txId: t.String,
|
|
325
|
+
currency: t.String,
|
|
326
|
+
amount: t.String,
|
|
327
|
+
at: t.Number
|
|
328
|
+
})),
|
|
329
|
+
grants: t.Array(t.Struct({
|
|
330
|
+
operationId: t.String,
|
|
331
|
+
kind: t.Literal("grant"),
|
|
332
|
+
changes: t.Array(t.Struct({
|
|
333
|
+
instanceId: t.String,
|
|
334
|
+
delta: t.Number
|
|
335
|
+
})),
|
|
336
|
+
at: t.Number
|
|
337
|
+
}))
|
|
338
|
+
}), we = r({
|
|
339
|
+
name: "shop.offers",
|
|
340
|
+
input: t.Struct({}),
|
|
341
|
+
output: t.Array(b),
|
|
342
|
+
error: e,
|
|
343
|
+
source: [
|
|
344
|
+
"_voltro_eco_shop_subjects",
|
|
345
|
+
"_voltro_eco_offers",
|
|
346
|
+
"_voltro_eco_orders",
|
|
347
|
+
"_voltro_eco_shop_counters",
|
|
348
|
+
"_voltro_eco_wallets",
|
|
349
|
+
"_voltro_inv_items"
|
|
350
|
+
],
|
|
351
|
+
openAccess: "The optional installed ShopPort derives verified user/guest owner and tenant, captures trusted eligibility and price. No player state is accepted. Time-only availability requires an explicit client refresh; source integration is app-owned."
|
|
352
|
+
}), S = t.Struct({
|
|
353
|
+
offerId: t.String,
|
|
354
|
+
offerVersion: t.String,
|
|
355
|
+
offerDigest: t.String.pipe(t.check(t.makeFilter((e) => /^[a-f0-9]{64}$/.test(e)))),
|
|
356
|
+
requestId: t.String,
|
|
357
|
+
currency: t.optional(t.String),
|
|
358
|
+
qty: t.optional(t.Number.pipe(t.check(t.isInt()), t.check(t.isBetween({
|
|
359
|
+
minimum: 1,
|
|
360
|
+
maximum: 1e3
|
|
361
|
+
}))))
|
|
362
|
+
}), C = t.Union([t.Struct({
|
|
363
|
+
requestId: t.String,
|
|
364
|
+
state: t.Literals(["not-observed", "pending"])
|
|
365
|
+
}), t.Struct({
|
|
366
|
+
requestId: t.String,
|
|
367
|
+
state: t.Literal("fulfilled"),
|
|
368
|
+
receipt: x
|
|
369
|
+
})]), Te = r({
|
|
370
|
+
name: "shop.receipt",
|
|
371
|
+
input: S,
|
|
372
|
+
output: C,
|
|
373
|
+
error: e,
|
|
374
|
+
source: [
|
|
375
|
+
"_voltro_eco_shop_subjects",
|
|
376
|
+
"_voltro_eco_orders",
|
|
377
|
+
"_voltro_eco_offers"
|
|
378
|
+
],
|
|
379
|
+
openAccess: "Verified user/guest owner and tenant come only from Subject. Reads original request/intent SQL evidence without creating rows, callbacks or another buy. Missing and pending observations are nonterminal; changed accepted intent conflicts. Source erasure refuses the read."
|
|
380
|
+
}), Ee = n({
|
|
381
|
+
name: "shop.buy",
|
|
382
|
+
input: S,
|
|
383
|
+
output: x,
|
|
384
|
+
error: e,
|
|
385
|
+
openAccess: "The client chooses offer ID/version/server declaration digest/request/optional quantity/virtual currency only. The server checks its declaration/rule digest before preparation; the client supplies no price or financial state. Installed ShopPort derives owner/tenant, prices, grants and limits. The borrowed SQL adapter owns one complete transaction; action dispatch adds no outer transaction. Real payment is not accepted here."
|
|
386
|
+
}), De = [
|
|
387
|
+
{
|
|
388
|
+
tag: "shop.offers",
|
|
389
|
+
kind: "query",
|
|
390
|
+
import: {
|
|
391
|
+
module: "@voltro/plugin-economy/rpc",
|
|
392
|
+
name: "shopOffersDescriptor"
|
|
393
|
+
}
|
|
394
|
+
},
|
|
395
|
+
{
|
|
396
|
+
tag: "shop.receipt",
|
|
397
|
+
kind: "query",
|
|
398
|
+
import: {
|
|
399
|
+
module: "@voltro/plugin-economy/rpc",
|
|
400
|
+
name: "shopReceiptDescriptor"
|
|
401
|
+
}
|
|
402
|
+
},
|
|
403
|
+
{
|
|
404
|
+
tag: "shop.buy",
|
|
405
|
+
kind: "action",
|
|
406
|
+
import: {
|
|
407
|
+
module: "@voltro/plugin-economy/rpc",
|
|
408
|
+
name: "shopBuyDescriptor"
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
], w = t.Struct({
|
|
412
|
+
code: t.String.pipe(t.check(t.makeFilter((e) => /^[A-Za-z0-9_-]{8,120}$/.test(e)))),
|
|
413
|
+
requestId: t.String
|
|
414
|
+
}), T = t.Struct({
|
|
415
|
+
operationId: t.String,
|
|
416
|
+
codeId: t.String,
|
|
417
|
+
version: t.String,
|
|
418
|
+
campaign: t.String,
|
|
419
|
+
at: t.Number,
|
|
420
|
+
transfers: t.Array(t.Struct({
|
|
421
|
+
txId: t.String,
|
|
422
|
+
currency: t.String,
|
|
423
|
+
amount: t.String,
|
|
424
|
+
at: t.Number
|
|
425
|
+
})),
|
|
426
|
+
grants: t.Array(t.Struct({
|
|
427
|
+
operationId: t.String,
|
|
428
|
+
kind: t.Literal("grant"),
|
|
429
|
+
changes: t.Array(t.Struct({
|
|
430
|
+
instanceId: t.String,
|
|
431
|
+
delta: t.Number
|
|
432
|
+
})),
|
|
433
|
+
at: t.Number
|
|
434
|
+
}))
|
|
435
|
+
}), E = t.Union([t.Struct({
|
|
436
|
+
requestId: t.String,
|
|
437
|
+
state: t.Literals(["not-observed", "pending"])
|
|
438
|
+
}), t.Struct({
|
|
439
|
+
requestId: t.String,
|
|
440
|
+
state: t.Literal("fulfilled"),
|
|
441
|
+
receipt: T
|
|
442
|
+
})]), Oe = r({
|
|
443
|
+
name: "economy.codes.receipt",
|
|
444
|
+
input: w,
|
|
445
|
+
output: E,
|
|
446
|
+
error: e,
|
|
447
|
+
source: ["_voltro_eco_code_subjects", "_voltro_eco_code_claims"],
|
|
448
|
+
openAccess: "Installed CodePort derives verified user/guest owner and tenant from Subject. Reads only the original intention; missing and pending remain nonterminal. No code creation, grants, clock or fresh redeem is invoked. Erased owners refuse."
|
|
449
|
+
}), ke = n({
|
|
450
|
+
name: "economy.redeem",
|
|
451
|
+
input: w,
|
|
452
|
+
output: T,
|
|
453
|
+
error: e,
|
|
454
|
+
openAccess: "Players supply only case-sensitive code and independent request ID. The installed CodePort derives tenant, owner, gifts and limits. Default adapter owns one complete SQL transaction with actual prepared wallet/item writers; dispatch must not add an outer transaction. No plaintext code is stored in SQL or inspect."
|
|
455
|
+
}), Ae = [{
|
|
456
|
+
tag: "economy.codes.receipt",
|
|
457
|
+
kind: "query",
|
|
458
|
+
import: {
|
|
459
|
+
module: "@voltro/plugin-economy/rpc",
|
|
460
|
+
name: "codesReceiptDescriptor"
|
|
461
|
+
}
|
|
462
|
+
}, {
|
|
463
|
+
tag: "economy.redeem",
|
|
464
|
+
kind: "action",
|
|
465
|
+
import: {
|
|
466
|
+
module: "@voltro/plugin-economy/rpc",
|
|
467
|
+
name: "codesRedeemDescriptor"
|
|
468
|
+
}
|
|
469
|
+
}], D = t.String.pipe(t.check(t.makeFilter((e) => /^[a-f0-9]{64}$/.test(e)))), O = t.Struct({
|
|
470
|
+
id: t.String,
|
|
471
|
+
version: t.String,
|
|
472
|
+
group: t.String,
|
|
473
|
+
price: v,
|
|
474
|
+
countries: t.Array(t.String),
|
|
475
|
+
drops: t.Array(t.Struct({
|
|
476
|
+
id: t.String,
|
|
477
|
+
rarity: t.String,
|
|
478
|
+
weight: t.String,
|
|
479
|
+
items: t.Array(t.Struct({
|
|
480
|
+
itemId: t.String,
|
|
481
|
+
qty: t.Number
|
|
482
|
+
})),
|
|
483
|
+
currencies: t.Array(g)
|
|
484
|
+
})),
|
|
485
|
+
pity: t.NullOr(t.Struct({
|
|
486
|
+
guaranteed: t.String,
|
|
487
|
+
after: t.Number,
|
|
488
|
+
softFrom: t.NullOr(t.Number),
|
|
489
|
+
softRampBps: t.Number
|
|
490
|
+
}))
|
|
491
|
+
}), k = t.Struct({
|
|
492
|
+
entries: t.Array(t.Struct({
|
|
493
|
+
dropId: t.String,
|
|
494
|
+
weight: t.String
|
|
495
|
+
})),
|
|
496
|
+
total: t.String,
|
|
497
|
+
guaranteed: t.Boolean
|
|
498
|
+
}), A = t.Struct({
|
|
499
|
+
container: O,
|
|
500
|
+
containerDigest: D,
|
|
501
|
+
disclosureDigest: D,
|
|
502
|
+
misses: t.Number,
|
|
503
|
+
price: v,
|
|
504
|
+
disclosure: t.Struct({
|
|
505
|
+
guaranteed: t.Boolean,
|
|
506
|
+
probabilities: t.Array(t.Struct({
|
|
507
|
+
dropId: t.String,
|
|
508
|
+
numerator: t.String,
|
|
509
|
+
denominator: t.String
|
|
510
|
+
}))
|
|
511
|
+
})
|
|
512
|
+
}), j = t.Struct({
|
|
513
|
+
containerId: t.String,
|
|
514
|
+
containerVersion: t.String,
|
|
515
|
+
containerDigest: D,
|
|
516
|
+
disclosureDigest: D,
|
|
517
|
+
requestId: t.String,
|
|
518
|
+
currency: t.optional(t.String)
|
|
519
|
+
}), M = t.Struct({
|
|
520
|
+
operationId: t.String,
|
|
521
|
+
containerId: t.String,
|
|
522
|
+
containerVersion: t.String,
|
|
523
|
+
containerDigest: D,
|
|
524
|
+
dropId: t.String,
|
|
525
|
+
rarity: t.String,
|
|
526
|
+
previousMisses: t.Number,
|
|
527
|
+
misses: t.Number,
|
|
528
|
+
sequence: t.Number,
|
|
529
|
+
at: t.Number,
|
|
530
|
+
distribution: k,
|
|
531
|
+
pricePaid: t.Union([t.Struct({ kind: t.Literal("free") }), t.Struct({
|
|
532
|
+
kind: t.Literal("virtual"),
|
|
533
|
+
currency: t.String,
|
|
534
|
+
amount: t.String
|
|
535
|
+
})]),
|
|
536
|
+
transfers: t.Array(t.Struct({
|
|
537
|
+
txId: t.String,
|
|
538
|
+
currency: t.String,
|
|
539
|
+
amount: t.String,
|
|
540
|
+
at: t.Number
|
|
541
|
+
})),
|
|
542
|
+
grants: t.Array(t.Struct({
|
|
543
|
+
operationId: t.String,
|
|
544
|
+
kind: t.Literal("grant"),
|
|
545
|
+
changes: t.Array(t.Struct({
|
|
546
|
+
instanceId: t.String,
|
|
547
|
+
delta: t.Number
|
|
548
|
+
})),
|
|
549
|
+
at: t.Number
|
|
550
|
+
}))
|
|
551
|
+
}), N = t.Union([t.Struct({
|
|
552
|
+
requestId: t.String,
|
|
553
|
+
state: t.Literals(["not-observed", "pending"])
|
|
554
|
+
}), t.Struct({
|
|
555
|
+
requestId: t.String,
|
|
556
|
+
state: t.Literal("fulfilled"),
|
|
557
|
+
receipt: M
|
|
558
|
+
})]), je = r({
|
|
559
|
+
name: "economy.containers",
|
|
560
|
+
input: t.Struct({}),
|
|
561
|
+
output: t.Array(A),
|
|
562
|
+
error: e,
|
|
563
|
+
source: [
|
|
564
|
+
"_voltro_eco_container_subjects",
|
|
565
|
+
"_voltro_eco_container_openings",
|
|
566
|
+
"_voltro_eco_containers"
|
|
567
|
+
],
|
|
568
|
+
openAccess: "Optional installed ContainersPort derives verified user/guest owner and tenant. Required trusted age/country source and configured legal eligibility precede own probability/price observations. App supplies actual invalidation tables for external facts when needed. No player state is accepted."
|
|
569
|
+
}), Me = r({
|
|
570
|
+
name: "economy.containers.receipt",
|
|
571
|
+
input: j,
|
|
572
|
+
output: N,
|
|
573
|
+
error: e,
|
|
574
|
+
source: ["_voltro_eco_container_subjects", "_voltro_eco_container_openings"],
|
|
575
|
+
openAccess: "Verified user/guest tenant and owner come from Subject. Only original intention evidence is read, no rows seeded, clock/facts/RNG evaluated or opening invoked. Pending/missing remain nonterminal and hide the selected unaccepted outcome. Erased subjects refuse."
|
|
576
|
+
}), Ne = n({
|
|
577
|
+
name: "economy.openContainer",
|
|
578
|
+
input: j,
|
|
579
|
+
output: M,
|
|
580
|
+
error: e,
|
|
581
|
+
openAccess: "Players send only observed declaration/disclosure identity, request ID and optional game currency, never draw, seed, price or state. Installed port owns legal authority, selection, Pity and atomic prepared SQL debit/grants. Dispatch adds no outer transaction. Original pending selection cannot be bypassed with a new nonce. Real payments are not fulfilled here."
|
|
582
|
+
}), Pe = [
|
|
583
|
+
{
|
|
584
|
+
tag: "economy.containers",
|
|
585
|
+
kind: "query",
|
|
586
|
+
import: {
|
|
587
|
+
module: "@voltro/plugin-economy/rpc",
|
|
588
|
+
name: "containersListDescriptor"
|
|
589
|
+
}
|
|
590
|
+
},
|
|
591
|
+
{
|
|
592
|
+
tag: "economy.containers.receipt",
|
|
593
|
+
kind: "query",
|
|
594
|
+
import: {
|
|
595
|
+
module: "@voltro/plugin-economy/rpc",
|
|
596
|
+
name: "containerReceiptDescriptor"
|
|
597
|
+
}
|
|
598
|
+
},
|
|
599
|
+
{
|
|
600
|
+
tag: "economy.openContainer",
|
|
601
|
+
kind: "action",
|
|
602
|
+
import: {
|
|
603
|
+
module: "@voltro/plugin-economy/rpc",
|
|
604
|
+
name: "containerOpenDescriptor"
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
], P = t.Struct({
|
|
608
|
+
items: t.Array(t.Struct({
|
|
609
|
+
itemId: t.String,
|
|
610
|
+
qty: t.Number
|
|
611
|
+
})),
|
|
612
|
+
currencies: t.Array(g)
|
|
613
|
+
}), F = t.Struct({
|
|
614
|
+
id: t.String,
|
|
615
|
+
version: t.String,
|
|
616
|
+
titleKey: t.String,
|
|
617
|
+
price: v,
|
|
618
|
+
period: t.Struct({
|
|
619
|
+
unit: t.Literals([
|
|
620
|
+
"day",
|
|
621
|
+
"week",
|
|
622
|
+
"month"
|
|
623
|
+
]),
|
|
624
|
+
count: t.Number
|
|
625
|
+
}),
|
|
626
|
+
grants: t.Struct({
|
|
627
|
+
onPurchase: P,
|
|
628
|
+
daily: P
|
|
629
|
+
}),
|
|
630
|
+
graceDays: t.Number,
|
|
631
|
+
coolingOff: t.Struct({
|
|
632
|
+
days: t.Number,
|
|
633
|
+
overrideReason: t.NullOr(t.String)
|
|
634
|
+
}),
|
|
635
|
+
disclosure: t.Struct({
|
|
636
|
+
durationKey: t.String,
|
|
637
|
+
renewalKey: t.String,
|
|
638
|
+
cancellationPath: t.String
|
|
639
|
+
})
|
|
640
|
+
}), I = t.Struct({
|
|
641
|
+
startsAt: t.Number,
|
|
642
|
+
expiresAt: t.Number,
|
|
643
|
+
graceUntil: t.Number,
|
|
644
|
+
state: t.Literals([
|
|
645
|
+
"active",
|
|
646
|
+
"grace",
|
|
647
|
+
"expired"
|
|
648
|
+
])
|
|
649
|
+
}), L = t.Struct({
|
|
650
|
+
subscription: F,
|
|
651
|
+
subscriptionDigest: D
|
|
652
|
+
}), R = t.Struct({
|
|
653
|
+
entitlementId: t.String,
|
|
654
|
+
subscription: F,
|
|
655
|
+
subscriptionDigest: D,
|
|
656
|
+
originAt: t.Number,
|
|
657
|
+
periodIndex: t.Number,
|
|
658
|
+
window: I,
|
|
659
|
+
currency: t.NullOr(t.String),
|
|
660
|
+
renews: t.Boolean,
|
|
661
|
+
cancelledAt: t.NullOr(t.Number)
|
|
662
|
+
}), z = t.Struct({
|
|
663
|
+
subscriptionId: t.String,
|
|
664
|
+
subscriptionVersion: t.String,
|
|
665
|
+
subscriptionDigest: D,
|
|
666
|
+
requestId: t.String,
|
|
667
|
+
currency: t.optional(t.String)
|
|
668
|
+
}), B = t.Struct({
|
|
669
|
+
entitlementId: t.String,
|
|
670
|
+
requestId: t.String
|
|
671
|
+
}), V = t.Struct({
|
|
672
|
+
operationId: t.String,
|
|
673
|
+
entitlementId: t.String,
|
|
674
|
+
kind: t.Literals([
|
|
675
|
+
"start",
|
|
676
|
+
"renew",
|
|
677
|
+
"daily"
|
|
678
|
+
]),
|
|
679
|
+
at: t.Number,
|
|
680
|
+
periodIndex: t.Number,
|
|
681
|
+
day: t.NullOr(t.Number),
|
|
682
|
+
window: I,
|
|
683
|
+
value: x
|
|
684
|
+
}), H = t.Struct({
|
|
685
|
+
operationId: t.String,
|
|
686
|
+
entitlementId: t.String,
|
|
687
|
+
at: t.Number,
|
|
688
|
+
renews: t.Literal(!1)
|
|
689
|
+
}), U = t.Union([t.Struct({
|
|
690
|
+
kind: t.Literal("start"),
|
|
691
|
+
intent: z
|
|
692
|
+
}), t.Struct({
|
|
693
|
+
kind: t.Literals([
|
|
694
|
+
"renew",
|
|
695
|
+
"daily",
|
|
696
|
+
"cancel"
|
|
697
|
+
]),
|
|
698
|
+
intent: B
|
|
699
|
+
})]), W = t.Union([t.Struct({
|
|
700
|
+
requestId: t.String,
|
|
701
|
+
state: t.Literal("not-observed")
|
|
702
|
+
}), t.Struct({
|
|
703
|
+
requestId: t.String,
|
|
704
|
+
state: t.Literal("fulfilled"),
|
|
705
|
+
receipt: t.Union([V, H])
|
|
706
|
+
})]), Fe = r({
|
|
707
|
+
name: "economy.subscriptions.receipt",
|
|
708
|
+
input: U,
|
|
709
|
+
output: W,
|
|
710
|
+
error: e,
|
|
711
|
+
source: [
|
|
712
|
+
"_voltro_eco_subscription_subjects",
|
|
713
|
+
"_voltro_eco_subscription_events",
|
|
714
|
+
"_voltro_eco_subscriptions"
|
|
715
|
+
],
|
|
716
|
+
openAccess: "Verified own subject/tenant supplies scope, including when observing a trusted renewal original. Reads accepted original intent evidence without seeding, clock, facts or another writer. Not-observed is nonterminal; changed intent conflicts. Reading a renewal is not authority to renew."
|
|
717
|
+
}), Ie = r({
|
|
718
|
+
name: "economy.subscriptions",
|
|
719
|
+
input: t.Struct({}),
|
|
720
|
+
output: t.Array(L),
|
|
721
|
+
error: e,
|
|
722
|
+
source: ["_voltro_eco_subscription_subjects", "_voltro_eco_subscriptions"],
|
|
723
|
+
openAccess: "Verified user/guest Subject supplies tenant and owner. This reads captured declaration ceilings and does not invent consent or provider state. Optional app sources own external fact invalidation."
|
|
724
|
+
}), Le = r({
|
|
725
|
+
name: "economy.subscriptions.active",
|
|
726
|
+
input: t.Struct({}),
|
|
727
|
+
output: t.Array(R),
|
|
728
|
+
error: e,
|
|
729
|
+
source: [
|
|
730
|
+
"_voltro_eco_subscription_subjects",
|
|
731
|
+
"_voltro_eco_subscription_events",
|
|
732
|
+
"_voltro_eco_subscriptions"
|
|
733
|
+
],
|
|
734
|
+
openAccess: "Only verified own entitlements are reconstructed from complete ordered SQL events. Time transitions require explicit refresh; no value write or player state input."
|
|
735
|
+
}), Re = n({
|
|
736
|
+
name: "economy.subscriptions.start",
|
|
737
|
+
input: z,
|
|
738
|
+
output: V,
|
|
739
|
+
error: e,
|
|
740
|
+
openAccess: "Player sends only observed content identity, original request and optional currency. Installed port owns trusted eligibility/consent and one atomic exact-store debit/grant/entitlement group. Dispatch must not add an outer transaction. No real payment is fulfilled."
|
|
741
|
+
}), ze = n({
|
|
742
|
+
name: "economy.subscriptions.claimDaily",
|
|
743
|
+
input: B,
|
|
744
|
+
output: V,
|
|
745
|
+
error: e,
|
|
746
|
+
openAccess: "Player chooses own entitlement and original request only. Server time, complete SQL history and policy determine the UTC grant day; player dates or claimed state are forbidden. Installed port owns its atomic prepared group; no outer transaction."
|
|
747
|
+
}), Be = n({
|
|
748
|
+
name: "economy.subscriptions.cancel",
|
|
749
|
+
input: B,
|
|
750
|
+
output: H,
|
|
751
|
+
error: e,
|
|
752
|
+
openAccess: "Verified own entitlement only. Cancel removes renewal authority; no refund or paid-period shortening is implied. Original requests remain immutable. Trusted renewal has no player RPC."
|
|
753
|
+
}), Ve = [
|
|
754
|
+
{
|
|
755
|
+
tag: "economy.subscriptions.receipt",
|
|
756
|
+
kind: "query",
|
|
757
|
+
import: {
|
|
758
|
+
module: "@voltro/plugin-economy/rpc",
|
|
759
|
+
name: "subscriptionReceiptDescriptor"
|
|
760
|
+
}
|
|
761
|
+
},
|
|
762
|
+
{
|
|
763
|
+
tag: "economy.subscriptions",
|
|
764
|
+
kind: "query",
|
|
765
|
+
import: {
|
|
766
|
+
module: "@voltro/plugin-economy/rpc",
|
|
767
|
+
name: "subscriptionsListDescriptor"
|
|
768
|
+
}
|
|
769
|
+
},
|
|
770
|
+
{
|
|
771
|
+
tag: "economy.subscriptions.active",
|
|
772
|
+
kind: "query",
|
|
773
|
+
import: {
|
|
774
|
+
module: "@voltro/plugin-economy/rpc",
|
|
775
|
+
name: "subscriptionsActiveDescriptor"
|
|
776
|
+
}
|
|
777
|
+
},
|
|
778
|
+
{
|
|
779
|
+
tag: "economy.subscriptions.start",
|
|
780
|
+
kind: "action",
|
|
781
|
+
import: {
|
|
782
|
+
module: "@voltro/plugin-economy/rpc",
|
|
783
|
+
name: "subscriptionStartDescriptor"
|
|
784
|
+
}
|
|
785
|
+
},
|
|
786
|
+
{
|
|
787
|
+
tag: "economy.subscriptions.claimDaily",
|
|
788
|
+
kind: "action",
|
|
789
|
+
import: {
|
|
790
|
+
module: "@voltro/plugin-economy/rpc",
|
|
791
|
+
name: "subscriptionDailyDescriptor"
|
|
792
|
+
}
|
|
793
|
+
},
|
|
794
|
+
{
|
|
795
|
+
tag: "economy.subscriptions.cancel",
|
|
796
|
+
kind: "action",
|
|
797
|
+
import: {
|
|
798
|
+
module: "@voltro/plugin-economy/rpc",
|
|
799
|
+
name: "subscriptionCancelDescriptor"
|
|
800
|
+
}
|
|
801
|
+
}
|
|
802
|
+
], G = t.Union([
|
|
803
|
+
t.Struct({
|
|
804
|
+
id: t.String,
|
|
805
|
+
kind: t.Literals(["xpMultiplier", "discount"]),
|
|
806
|
+
bps: t.Number
|
|
807
|
+
}),
|
|
808
|
+
t.Struct({
|
|
809
|
+
id: t.String,
|
|
810
|
+
kind: t.Literal("chatBadge"),
|
|
811
|
+
badgeId: t.String
|
|
812
|
+
}),
|
|
813
|
+
t.Struct({
|
|
814
|
+
id: t.String,
|
|
815
|
+
kind: t.Literal("inboxGift"),
|
|
816
|
+
items: P.fields.items,
|
|
817
|
+
currencies: P.fields.currencies
|
|
818
|
+
})
|
|
819
|
+
]), K = t.Struct({
|
|
820
|
+
id: t.String,
|
|
821
|
+
version: t.String,
|
|
822
|
+
titleKey: t.String,
|
|
823
|
+
decay: t.Literals(["none", "seasonal"]),
|
|
824
|
+
pointsFrom: t.Array(t.Struct({
|
|
825
|
+
id: t.String,
|
|
826
|
+
kind: t.Literals(["purchase.real", "purchase.virtual"]),
|
|
827
|
+
currency: t.String,
|
|
828
|
+
numerator: t.String,
|
|
829
|
+
denominator: t.String
|
|
830
|
+
})),
|
|
831
|
+
tiers: t.Array(t.Struct({
|
|
832
|
+
id: t.String,
|
|
833
|
+
at: t.String,
|
|
834
|
+
perks: t.Array(G)
|
|
835
|
+
}))
|
|
836
|
+
}), He = t.Struct({
|
|
837
|
+
loyalty: K,
|
|
838
|
+
rulesVersion: t.String,
|
|
839
|
+
seasonId: t.NullOr(t.String),
|
|
840
|
+
points: t.String,
|
|
841
|
+
tierId: t.String,
|
|
842
|
+
perks: t.Array(G)
|
|
843
|
+
}), Ue = {
|
|
844
|
+
id: t.String,
|
|
845
|
+
sequence: t.Number,
|
|
846
|
+
at: t.Number,
|
|
847
|
+
seasonId: t.NullOr(t.String),
|
|
848
|
+
delta: t.String
|
|
849
|
+
}, We = t.Union([t.Struct({
|
|
850
|
+
...Ue,
|
|
851
|
+
kind: t.Literal("credit"),
|
|
852
|
+
sourceId: t.String,
|
|
853
|
+
purchaseId: t.String,
|
|
854
|
+
purchaseAmount: t.String,
|
|
855
|
+
numerator: t.String,
|
|
856
|
+
denominator: t.String
|
|
857
|
+
}), t.Struct({
|
|
858
|
+
...Ue,
|
|
859
|
+
kind: t.Literal("reverse"),
|
|
860
|
+
originalId: t.String,
|
|
861
|
+
refundId: t.String,
|
|
862
|
+
totalRefunded: t.String
|
|
863
|
+
})]), Ge = t.Struct({
|
|
864
|
+
operationId: t.String,
|
|
865
|
+
requestId: t.String,
|
|
866
|
+
loyaltyId: t.String,
|
|
867
|
+
entry: We,
|
|
868
|
+
points: t.String
|
|
869
|
+
}), Ke = t.Union([t.Struct({
|
|
870
|
+
requestId: t.String,
|
|
871
|
+
state: t.Literal("not-observed")
|
|
872
|
+
}), t.Struct({
|
|
873
|
+
requestId: t.String,
|
|
874
|
+
state: t.Literal("fulfilled"),
|
|
875
|
+
receipt: Ge
|
|
876
|
+
})]), qe = r({
|
|
877
|
+
name: "economy.loyalty",
|
|
878
|
+
input: t.Struct({}),
|
|
879
|
+
output: t.Array(K),
|
|
880
|
+
error: e,
|
|
881
|
+
source: ["_voltro_eco_loyalty_subjects", "_voltro_eco_loyalty_definitions"],
|
|
882
|
+
openAccess: "Verified user/guest Subject supplies tenant and owner. Captured declarations only; no provider verification, point credit or perk application is inferred."
|
|
883
|
+
}), Je = r({
|
|
884
|
+
name: "economy.loyalty.mine",
|
|
885
|
+
input: t.Struct({ loyaltyId: t.String }),
|
|
886
|
+
output: He,
|
|
887
|
+
error: e,
|
|
888
|
+
source: [
|
|
889
|
+
"_voltro_eco_loyalty_subjects",
|
|
890
|
+
"_voltro_eco_loyalty_entries",
|
|
891
|
+
"_voltro_eco_loyalty_definitions",
|
|
892
|
+
"_voltro_eco_loyalty_seasons"
|
|
893
|
+
],
|
|
894
|
+
openAccess: "Only own complete accepted SQL points and current trusted season determine this view. Named pure tier/perks slots cannot grant hidden or unearned advantages. No player points/state/season/value inputs; no perk side effects. Time transitions require explicit refresh; app supplies season/fact invalidation sources."
|
|
895
|
+
}), Ye = r({
|
|
896
|
+
name: "economy.loyalty.receipt",
|
|
897
|
+
input: t.Struct({ requestId: t.String }),
|
|
898
|
+
output: Ke,
|
|
899
|
+
error: e,
|
|
900
|
+
source: [
|
|
901
|
+
"_voltro_eco_loyalty_subjects",
|
|
902
|
+
"_voltro_eco_loyalty_entries",
|
|
903
|
+
"_voltro_eco_loyalty_definitions",
|
|
904
|
+
"_voltro_eco_loyalty_seasons"
|
|
905
|
+
],
|
|
906
|
+
openAccess: "Verified own tenant/owner only. Historical original receipt read without seeding, clock, current sources, slots or another credit. Not-observed is nonterminal; observation grants no server credit/refund authority."
|
|
907
|
+
}), Xe = [
|
|
908
|
+
{
|
|
909
|
+
tag: "economy.loyalty",
|
|
910
|
+
kind: "query",
|
|
911
|
+
import: {
|
|
912
|
+
module: "@voltro/plugin-economy/rpc",
|
|
913
|
+
name: "loyaltyListDescriptor"
|
|
914
|
+
}
|
|
915
|
+
},
|
|
916
|
+
{
|
|
917
|
+
tag: "economy.loyalty.mine",
|
|
918
|
+
kind: "query",
|
|
919
|
+
import: {
|
|
920
|
+
module: "@voltro/plugin-economy/rpc",
|
|
921
|
+
name: "loyaltyMineDescriptor"
|
|
922
|
+
}
|
|
923
|
+
},
|
|
924
|
+
{
|
|
925
|
+
tag: "economy.loyalty.receipt",
|
|
926
|
+
kind: "query",
|
|
927
|
+
import: {
|
|
928
|
+
module: "@voltro/plugin-economy/rpc",
|
|
929
|
+
name: "loyaltyReceiptDescriptor"
|
|
930
|
+
}
|
|
931
|
+
}
|
|
932
|
+
], Ze = t.Struct({
|
|
933
|
+
id: t.String,
|
|
934
|
+
version: t.String,
|
|
935
|
+
titleKey: t.String,
|
|
936
|
+
currency: t.String,
|
|
937
|
+
cap: t.String,
|
|
938
|
+
unlock: v,
|
|
939
|
+
fillFrom: t.Array(t.String),
|
|
940
|
+
reset: t.Literal("onUnlock")
|
|
941
|
+
}), Qe = t.Struct({
|
|
942
|
+
bank: Ze,
|
|
943
|
+
bankDigest: D,
|
|
944
|
+
available: t.String,
|
|
945
|
+
cycles: t.Number
|
|
946
|
+
}), $e = {
|
|
947
|
+
id: t.String,
|
|
948
|
+
sequence: t.Number,
|
|
949
|
+
at: t.Number
|
|
950
|
+
}, et = t.Struct({
|
|
951
|
+
...$e,
|
|
952
|
+
kind: t.Literal("fill"),
|
|
953
|
+
authorityId: t.String,
|
|
954
|
+
eventId: t.String,
|
|
955
|
+
sourceId: t.String,
|
|
956
|
+
acceptedAmount: t.String,
|
|
957
|
+
delta: t.String
|
|
958
|
+
}), tt = t.Struct({
|
|
959
|
+
...$e,
|
|
960
|
+
kind: t.Literal("unlock"),
|
|
961
|
+
amount: t.String,
|
|
962
|
+
remaining: t.String
|
|
963
|
+
}), nt = {
|
|
964
|
+
operationId: t.String,
|
|
965
|
+
requestId: t.String,
|
|
966
|
+
bankId: t.String,
|
|
967
|
+
available: t.String
|
|
968
|
+
}, q = t.Union([t.Struct({
|
|
969
|
+
...nt,
|
|
970
|
+
event: et
|
|
971
|
+
}), t.Struct({
|
|
972
|
+
...nt,
|
|
973
|
+
event: tt,
|
|
974
|
+
value: x
|
|
975
|
+
})]), J = t.Union([t.Struct({
|
|
976
|
+
requestId: t.String,
|
|
977
|
+
state: t.Literal("not-observed")
|
|
978
|
+
}), t.Struct({
|
|
979
|
+
requestId: t.String,
|
|
980
|
+
state: t.Literal("fulfilled"),
|
|
981
|
+
receipt: q
|
|
982
|
+
})]), rt = r({
|
|
983
|
+
name: "economy.piggyBanks",
|
|
984
|
+
input: t.Struct({}),
|
|
985
|
+
output: t.Array(Qe),
|
|
986
|
+
error: e,
|
|
987
|
+
source: [
|
|
988
|
+
"_voltro_eco_piggy_subjects",
|
|
989
|
+
"_voltro_eco_piggy_events",
|
|
990
|
+
"_voltro_eco_piggy_definitions"
|
|
991
|
+
],
|
|
992
|
+
openAccess: "Verified own Subject supplies tenant/owner. Complete accepted SQL fills/unlocks reconstruct capped available value and cycles. Prices are declarations, not pinned personalized quotes; no player state or automatic fill."
|
|
993
|
+
}), it = r({
|
|
994
|
+
name: "economy.piggyBanks.receipt",
|
|
995
|
+
input: t.Struct({ requestId: t.String }),
|
|
996
|
+
output: J,
|
|
997
|
+
error: e,
|
|
998
|
+
source: [
|
|
999
|
+
"_voltro_eco_piggy_subjects",
|
|
1000
|
+
"_voltro_eco_piggy_events",
|
|
1001
|
+
"_voltro_eco_piggy_definitions"
|
|
1002
|
+
],
|
|
1003
|
+
openAccess: "Verified own tenant/owner, historical original only. No row seeding, source/clock/policy/writer or fresh unlock. Not-observed is nonterminal. Reading a trusted fill receipt does not authorize a fill."
|
|
1004
|
+
}), at = n({
|
|
1005
|
+
name: "economy.piggyBanks.unlock",
|
|
1006
|
+
input: t.Struct({
|
|
1007
|
+
bankId: t.String,
|
|
1008
|
+
bankVersion: t.String,
|
|
1009
|
+
bankDigest: D,
|
|
1010
|
+
requestId: t.String,
|
|
1011
|
+
currency: t.optional(t.String)
|
|
1012
|
+
}),
|
|
1013
|
+
output: q,
|
|
1014
|
+
error: e,
|
|
1015
|
+
openAccess: "Player chooses observed bank identity, original request and optional virtual currency only. Installed port owns trusted eligibility, actual wallet debit/grant and reset in one exact-store SQL group; dispatch adds no outer transaction. No amount/event/result/available state or real settlement. Fill/rebuild have no player RPC."
|
|
1016
|
+
}), ot = [
|
|
1017
|
+
{
|
|
1018
|
+
tag: "economy.piggyBanks",
|
|
1019
|
+
kind: "query",
|
|
1020
|
+
import: {
|
|
1021
|
+
module: "@voltro/plugin-economy/rpc",
|
|
1022
|
+
name: "piggyListDescriptor"
|
|
1023
|
+
}
|
|
1024
|
+
},
|
|
1025
|
+
{
|
|
1026
|
+
tag: "economy.piggyBanks.receipt",
|
|
1027
|
+
kind: "query",
|
|
1028
|
+
import: {
|
|
1029
|
+
module: "@voltro/plugin-economy/rpc",
|
|
1030
|
+
name: "piggyReceiptDescriptor"
|
|
1031
|
+
}
|
|
1032
|
+
},
|
|
1033
|
+
{
|
|
1034
|
+
tag: "economy.piggyBanks.unlock",
|
|
1035
|
+
kind: "action",
|
|
1036
|
+
import: {
|
|
1037
|
+
module: "@voltro/plugin-economy/rpc",
|
|
1038
|
+
name: "piggyUnlockDescriptor"
|
|
1039
|
+
}
|
|
1040
|
+
}
|
|
1041
|
+
], Y = t.String.pipe(t.check(t.makeFilter((e) => e.length <= 120 && /^[A-Za-z0-9][A-Za-z0-9._:-]*$/.test(e)))), st = t.String.pipe(t.check(t.makeFilter((e) => e.length <= 19 && /^[1-9][0-9]*$/.test(e) && BigInt(e) <= 9223372036854775807n))), ct = t.String.pipe(t.check(t.makeFilter((e) => e.length <= 19 && /^(?:0|[1-9][0-9]*)$/.test(e) && BigInt(e) <= 9223372036854775807n))), lt = t.Number.pipe(t.check(t.isInt()), t.check(t.isBetween({
|
|
1042
|
+
minimum: 0,
|
|
1043
|
+
maximum: 864e13
|
|
1044
|
+
}))), X = t.Struct({
|
|
1045
|
+
items: t.Array(t.Struct({
|
|
1046
|
+
instanceId: Y,
|
|
1047
|
+
qty: t.Number.pipe(t.check(t.isInt()), t.check(t.isBetween({
|
|
1048
|
+
minimum: 1,
|
|
1049
|
+
maximum: 1e6
|
|
1050
|
+
})))
|
|
1051
|
+
})).pipe(t.check(t.makeFilter((e) => e.length <= 32))),
|
|
1052
|
+
currencies: t.Array(t.Struct({
|
|
1053
|
+
currency: Y,
|
|
1054
|
+
amount: st
|
|
1055
|
+
})).pipe(t.check(t.makeFilter((e) => e.length <= 32)))
|
|
1056
|
+
}), ut = t.Struct({
|
|
1057
|
+
toId: t.NullOr(Y),
|
|
1058
|
+
offered: X,
|
|
1059
|
+
requested: X,
|
|
1060
|
+
durationMs: t.Number.pipe(t.check(t.isInt()), t.check(t.isBetween({
|
|
1061
|
+
minimum: 1,
|
|
1062
|
+
maximum: 316224e5
|
|
1063
|
+
}))),
|
|
1064
|
+
requestId: Y
|
|
1065
|
+
}), Z = t.Struct({
|
|
1066
|
+
tradeId: Y,
|
|
1067
|
+
tradeDigest: D,
|
|
1068
|
+
proposerId: Y,
|
|
1069
|
+
toId: t.NullOr(Y),
|
|
1070
|
+
offered: X,
|
|
1071
|
+
requested: X,
|
|
1072
|
+
createdAt: lt,
|
|
1073
|
+
expiresAt: lt,
|
|
1074
|
+
state: t.Literals([
|
|
1075
|
+
"proposed",
|
|
1076
|
+
"accepted",
|
|
1077
|
+
"cancelled",
|
|
1078
|
+
"expired"
|
|
1079
|
+
]),
|
|
1080
|
+
accepterId: t.NullOr(Y),
|
|
1081
|
+
rulesVersion: Y,
|
|
1082
|
+
taxes: t.Array(t.Struct({
|
|
1083
|
+
leg: t.Literals(["offered", "requested"]),
|
|
1084
|
+
currency: Y,
|
|
1085
|
+
gross: st,
|
|
1086
|
+
net: ct,
|
|
1087
|
+
tax: ct
|
|
1088
|
+
})).pipe(t.check(t.makeFilter((e) => e.length <= 64)))
|
|
1089
|
+
}).pipe(t.check(t.makeFilter((e) => {
|
|
1090
|
+
try {
|
|
1091
|
+
return ne(e), !0;
|
|
1092
|
+
} catch {
|
|
1093
|
+
return !1;
|
|
1094
|
+
}
|
|
1095
|
+
}))), Q = t.Struct({
|
|
1096
|
+
operationId: Y,
|
|
1097
|
+
requestId: Y,
|
|
1098
|
+
trade: Z
|
|
1099
|
+
}), dt = t.Union([t.Struct({
|
|
1100
|
+
requestId: Y,
|
|
1101
|
+
state: t.Literal("not-observed")
|
|
1102
|
+
}), t.Struct({
|
|
1103
|
+
requestId: Y,
|
|
1104
|
+
state: t.Literal("fulfilled"),
|
|
1105
|
+
receipt: Q
|
|
1106
|
+
})]), $ = [
|
|
1107
|
+
"_voltro_eco_trade_tenants",
|
|
1108
|
+
"_voltro_eco_trade_subjects",
|
|
1109
|
+
"_voltro_eco_trades",
|
|
1110
|
+
"_voltro_eco_trade_operations",
|
|
1111
|
+
"_voltro_eco_tx",
|
|
1112
|
+
"_voltro_eco_ledger",
|
|
1113
|
+
"_voltro_inv_items",
|
|
1114
|
+
"_voltro_inv_operations",
|
|
1115
|
+
"_voltro_inv_subjects",
|
|
1116
|
+
"_voltro_inv_ledger",
|
|
1117
|
+
"_voltro_eco_subjects",
|
|
1118
|
+
"_voltro_eco_currencies"
|
|
1119
|
+
], ft = r({
|
|
1120
|
+
name: "economy.trades.mine",
|
|
1121
|
+
input: t.Struct({}),
|
|
1122
|
+
output: t.Array(Z),
|
|
1123
|
+
error: e,
|
|
1124
|
+
source: $,
|
|
1125
|
+
openAccess: "Verified user/guest Subject supplies tenant and owner. Own, targeted and accepted trades only; no public marketplace. SQL and actual asset receipt evidence own the observed original terms, rules and net/tax disclosure."
|
|
1126
|
+
}), pt = r({
|
|
1127
|
+
name: "economy.trades.receipt",
|
|
1128
|
+
input: t.Struct({ requestId: Y }),
|
|
1129
|
+
output: dt,
|
|
1130
|
+
error: e,
|
|
1131
|
+
source: $,
|
|
1132
|
+
openAccess: "Verified own tenant/owner request. Read original evidence without row creation, clock, fresh authority or exchange. Not-observed is nonterminal; erasure refuses access. A receipt read grants no trade authority."
|
|
1133
|
+
}), mt = n({
|
|
1134
|
+
name: "economy.trades.propose",
|
|
1135
|
+
input: ut,
|
|
1136
|
+
output: Q,
|
|
1137
|
+
error: e,
|
|
1138
|
+
openAccess: "Player proposes immutable item selections, quantities, consideration, target, lifetime and request identity. These are intentions, never balances, ownership, tax or permission state. Server-derived owner/tenant and required real authority plus actual prepared asset writers accept one SQL transaction; dispatch adds no outer transaction."
|
|
1139
|
+
}), ht = n({
|
|
1140
|
+
name: "economy.trades.accept",
|
|
1141
|
+
input: t.Struct({
|
|
1142
|
+
tradeId: Y,
|
|
1143
|
+
tradeDigest: D,
|
|
1144
|
+
requestId: Y
|
|
1145
|
+
}),
|
|
1146
|
+
output: Q,
|
|
1147
|
+
error: e,
|
|
1148
|
+
openAccess: "Player chooses trade ID, observed immutable terms digest and request identity only. Required prepared SQL authority revalidates both participants; actual held and requested assets, net payout, tax and receipt commit atomically. Client cannot supply accepter/owner or resulting state."
|
|
1149
|
+
}), gt = n({
|
|
1150
|
+
name: "economy.trades.cancel",
|
|
1151
|
+
input: t.Struct({
|
|
1152
|
+
tradeId: Y,
|
|
1153
|
+
requestId: Y
|
|
1154
|
+
}),
|
|
1155
|
+
output: Q,
|
|
1156
|
+
error: e,
|
|
1157
|
+
openAccess: "Verified proposer chooses its trade ID and request identity. One permanent close competes with acceptance/expiry and releases original held assets through the same prepared writers. No player repair, expiry or asset grant route."
|
|
1158
|
+
}), _t = [
|
|
1159
|
+
{
|
|
1160
|
+
tag: "economy.trades.mine",
|
|
1161
|
+
kind: "query",
|
|
1162
|
+
import: {
|
|
1163
|
+
module: "@voltro/plugin-economy/rpc",
|
|
1164
|
+
name: "tradesMineDescriptor"
|
|
1165
|
+
}
|
|
1166
|
+
},
|
|
1167
|
+
{
|
|
1168
|
+
tag: "economy.trades.receipt",
|
|
1169
|
+
kind: "query",
|
|
1170
|
+
import: {
|
|
1171
|
+
module: "@voltro/plugin-economy/rpc",
|
|
1172
|
+
name: "tradeReceiptDescriptor"
|
|
1173
|
+
}
|
|
1174
|
+
},
|
|
1175
|
+
{
|
|
1176
|
+
tag: "economy.trades.propose",
|
|
1177
|
+
kind: "action",
|
|
1178
|
+
import: {
|
|
1179
|
+
module: "@voltro/plugin-economy/rpc",
|
|
1180
|
+
name: "tradeProposeDescriptor"
|
|
1181
|
+
}
|
|
1182
|
+
},
|
|
1183
|
+
{
|
|
1184
|
+
tag: "economy.trades.accept",
|
|
1185
|
+
kind: "action",
|
|
1186
|
+
import: {
|
|
1187
|
+
module: "@voltro/plugin-economy/rpc",
|
|
1188
|
+
name: "tradeAcceptDescriptor"
|
|
1189
|
+
}
|
|
1190
|
+
},
|
|
1191
|
+
{
|
|
1192
|
+
tag: "economy.trades.cancel",
|
|
1193
|
+
kind: "action",
|
|
1194
|
+
import: {
|
|
1195
|
+
module: "@voltro/plugin-economy/rpc",
|
|
1196
|
+
name: "tradeCancelDescriptor"
|
|
1197
|
+
}
|
|
1198
|
+
}
|
|
1199
|
+
];
|
|
1200
|
+
//#endregion
|
|
1201
|
+
export { w as CodeIntentSchema, E as CodeObservationSchema, T as CodeReceiptSchema, k as ContainerDistributionSchema, N as ContainerObservationSchema, j as ContainerOpenInputSchema, M as ContainerReceiptSchema, O as ContainerSchema, A as ContainerViewSchema, re as ECONOMY_NAME, h as EconomyWalletSchema, i as IapChannelSchema, fe as IapCheckoutInputSchema, pe as IapCheckoutSessionSchema, m as IapCompletionReceiptSchema, d as IapEntitlementObservationSchema, ge as IapManageInputSchema, _e as IapManagePageSchema, u as IapObservationSchema, c as IapOrderReceiptSchema, o as IapReceiptReferenceSchema, s as IapRedeemInputSchema, l as IapRefundDispositionSchema, Ke as LoyaltyObservationSchema, G as LoyaltyPerkSchema, We as LoyaltyPointEntrySchema, Ge as LoyaltyReceiptSchema, K as LoyaltySchema, He as LoyaltyStateSchema, Ze as PiggyBankSchema, et as PiggyFillEventSchema, J as PiggyObservationSchema, q as PiggyReceiptSchema, tt as PiggyUnlockEventSchema, Qe as PiggyViewSchema, S as ShopBuyInputSchema, y as ShopOfferSchema, b as ShopOfferViewSchema, x as ShopOrderReceiptSchema, v as ShopPriceSchema, C as ShopPurchaseObservationSchema, R as SubscriptionActiveViewSchema, H as SubscriptionCancellationReceiptSchema, B as SubscriptionEntitlementInputSchema, W as SubscriptionObservationSchema, U as SubscriptionReceiptInputSchema, F as SubscriptionSchema, z as SubscriptionStartInputSchema, V as SubscriptionValueReceiptSchema, L as SubscriptionViewSchema, I as SubscriptionWindowSchema, X as TradeLegSchema, dt as TradeObservationSchema, ut as TradeProposeInputSchema, Q as TradeReceiptSchema, Z as TradeViewSchema, Oe as codesReceiptDescriptor, ke as codesRedeemDescriptor, Ae as codesRpcClientImports, Ne as containerOpenDescriptor, Me as containerReceiptDescriptor, je as containersListDescriptor, Pe as containersRpcClientImports, Se as economyMineDescriptor, Ce as economyRpcClientImports, le as iapAccountDescriptor, oe as iapCheckEntitlementDescriptor, me as iapCheckoutDescriptor, he as iapCheckoutRpcClientImports, de as iapCompleteDescriptor, be as iapCompletionRpcClientImports, ae as iapEntitledDescriptor, se as iapEntitlementRpcClientImports, ve as iapManageDescriptor, ye as iapManageRpcClientImports, ce as iapReceiptDescriptor, ue as iapRedeemDescriptor, ie as iapRefundReceiptSources, xe as iapRpcClientImports, qe as loyaltyListDescriptor, Je as loyaltyMineDescriptor, Ye as loyaltyReceiptDescriptor, Xe as loyaltyRpcClientImports, rt as piggyListDescriptor, it as piggyReceiptDescriptor, ot as piggyRpcClientImports, at as piggyUnlockDescriptor, Ee as shopBuyDescriptor, we as shopOffersDescriptor, Te as shopReceiptDescriptor, De as shopRpcClientImports, Be as subscriptionCancelDescriptor, ze as subscriptionDailyDescriptor, Fe as subscriptionReceiptDescriptor, Re as subscriptionStartDescriptor, Le as subscriptionsActiveDescriptor, Ie as subscriptionsListDescriptor, Ve as subscriptionsRpcClientImports, ht as tradeAcceptDescriptor, gt as tradeCancelDescriptor, mt as tradeProposeDescriptor, pt as tradeReceiptDescriptor, ft as tradesMineDescriptor, _t as tradesRpcClientImports };
|