@1sat/wallet-server 0.0.29 → 0.0.32

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.
Files changed (57) hide show
  1. package/dist/createHostServer.d.ts +44 -0
  2. package/dist/createHostServer.d.ts.map +1 -0
  3. package/dist/createHostServer.js +205 -0
  4. package/dist/createHostServer.js.map +1 -0
  5. package/dist/createWalletServer.d.ts +15 -1
  6. package/dist/createWalletServer.d.ts.map +1 -1
  7. package/dist/createWalletServer.js +29 -6
  8. package/dist/createWalletServer.js.map +1 -1
  9. package/dist/hosting/client.d.ts +33 -0
  10. package/dist/hosting/client.d.ts.map +1 -0
  11. package/dist/hosting/client.js +45 -0
  12. package/dist/hosting/client.js.map +1 -0
  13. package/dist/hosting/routes.d.ts +27 -0
  14. package/dist/hosting/routes.d.ts.map +1 -0
  15. package/dist/hosting/routes.js +239 -0
  16. package/dist/hosting/routes.js.map +1 -0
  17. package/dist/index.d.ts +10 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +7 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/openapi/fragments.d.ts +20 -0
  22. package/dist/openapi/fragments.d.ts.map +1 -0
  23. package/dist/openapi/fragments.js +399 -0
  24. package/dist/openapi/fragments.js.map +1 -0
  25. package/dist/openapi/index.d.ts +25 -0
  26. package/dist/openapi/index.d.ts.map +1 -0
  27. package/dist/openapi/index.js +82 -0
  28. package/dist/openapi/index.js.map +1 -0
  29. package/dist/paymail/destination.d.ts +14 -0
  30. package/dist/paymail/destination.d.ts.map +1 -0
  31. package/dist/paymail/destination.js +48 -0
  32. package/dist/paymail/destination.js.map +1 -0
  33. package/dist/paymail/entitlement.d.ts +15 -0
  34. package/dist/paymail/entitlement.d.ts.map +1 -0
  35. package/dist/paymail/entitlement.js +30 -0
  36. package/dist/paymail/entitlement.js.map +1 -0
  37. package/dist/paymail/messagebox.d.ts +25 -0
  38. package/dist/paymail/messagebox.d.ts.map +1 -0
  39. package/dist/paymail/messagebox.js +55 -0
  40. package/dist/paymail/messagebox.js.map +1 -0
  41. package/dist/paymail/pending.d.ts +19 -0
  42. package/dist/paymail/pending.d.ts.map +1 -0
  43. package/dist/paymail/pending.js +90 -0
  44. package/dist/paymail/pending.js.map +1 -0
  45. package/dist/paymail/resolve.d.ts +12 -0
  46. package/dist/paymail/resolve.d.ts.map +1 -0
  47. package/dist/paymail/resolve.js +72 -0
  48. package/dist/paymail/resolve.js.map +1 -0
  49. package/dist/paymail/routes.d.ts +8 -0
  50. package/dist/paymail/routes.d.ts.map +1 -0
  51. package/dist/paymail/routes.js +152 -0
  52. package/dist/paymail/routes.js.map +1 -0
  53. package/dist/paymail/types.d.ts +48 -0
  54. package/dist/paymail/types.d.ts.map +1 -0
  55. package/dist/paymail/types.js +2 -0
  56. package/dist/paymail/types.js.map +1 -0
  57. package/package.json +61 -57
@@ -0,0 +1,239 @@
1
+ /**
2
+ * Hosting subscription routes on the wallet server.
3
+ *
4
+ * GET /hosting/price — public (mounted before global auth when possible)
5
+ * GET /hosting/status — BRC-100 auth
6
+ * POST /hosting/subscribe — BRC-100 auth + 402 → spend prior receipt(s), mint one new
7
+ *
8
+ * Receipt: 1-sat to host, basket HOSTING_BASKET, wallet-local tags only
9
+ * (payer:{id}, exp:{unix}). No customer identity on-chain.
10
+ * At most one live receipt set per identity: renew spends all prior.
11
+ */
12
+ import { HOSTING_BASKET, P1SAT_PROTOCOL, hostingExpTag, hostingPayerTag, readHostingExp, } from '@1sat/types';
13
+ import { Hash, P2PKH, PublicKey, Transaction, TransactionSignature, UnlockingScript, Utils, } from '@bsv/sdk';
14
+ import { createAccountsPaymentMiddleware } from '../accounts/paymentMiddleware';
15
+ export function mountHostingRoutes(app, basePath, deps) {
16
+ const root = basePath === '/' ? '' : basePath.replace(/\/$/, '');
17
+ // GET /hosting/price is mounted in createWalletServer *before* auth.
18
+ app.get(`${root}/hosting/status`, deps.authMiddleware, async (req, res) => {
19
+ const cfg = deps.getConfig();
20
+ const identityKey = req.auth?.identityKey;
21
+ if (!identityKey || identityKey === 'unknown') {
22
+ return res.status(401).json({ error: 'unauthenticated' });
23
+ }
24
+ if (!cfg.enabled) {
25
+ return res.json({
26
+ enabled: false,
27
+ identityKey,
28
+ active: false,
29
+ });
30
+ }
31
+ const status = await hostingStatus(deps.wallet, identityKey);
32
+ return res.json({
33
+ enabled: true,
34
+ identityKey,
35
+ ...status,
36
+ priceSats: cfg.priceSats,
37
+ ...(cfg.priceUsd !== undefined && { priceUsd: cfg.priceUsd }),
38
+ periodSeconds: cfg.periodSeconds,
39
+ });
40
+ });
41
+ const paymentMw = createAccountsPaymentMiddleware({
42
+ wallet: deps.wallet,
43
+ calculateRequestPrice: async () => {
44
+ const cfg = deps.getConfig();
45
+ return cfg.enabled ? cfg.priceSats : 0;
46
+ },
47
+ onPaymentInternalize: (_req, defaults) => ({
48
+ ...defaults,
49
+ description: 'Hosted paymail subscription',
50
+ labels: ['hosting-payment'],
51
+ }),
52
+ });
53
+ app.post(`${root}/hosting/subscribe`, deps.authMiddleware, paymentMw, async (req, res) => {
54
+ const cfg = deps.getConfig();
55
+ const identityKey = req.auth?.identityKey;
56
+ if (!identityKey || identityKey === 'unknown') {
57
+ return res.status(401).json({ error: 'unauthenticated' });
58
+ }
59
+ if (!cfg.enabled) {
60
+ return res.status(404).json({ error: 'hosting disabled' });
61
+ }
62
+ try {
63
+ const result = await mintOrReplaceReceipt(deps.wallet, identityKey, cfg.periodSeconds);
64
+ return res.json({
65
+ status: 'ok',
66
+ identityKey,
67
+ expiresAt: result.expiresAt,
68
+ txid: result.txid,
69
+ });
70
+ }
71
+ catch (err) {
72
+ console.error('[hosting] mint receipt failed', err);
73
+ return res.status(500).json({
74
+ error: err instanceof Error ? err.message : 'mint failed',
75
+ });
76
+ }
77
+ });
78
+ }
79
+ async function listReceipts(wallet, identityKey, withBeef) {
80
+ const result = await wallet.listOutputs({
81
+ basket: HOSTING_BASKET,
82
+ tags: [hostingPayerTag(identityKey)],
83
+ tagQueryMode: 'all',
84
+ includeTags: true,
85
+ includeCustomInstructions: true,
86
+ ...(withBeef ? { include: 'entire transactions' } : {}),
87
+ limit: 100,
88
+ });
89
+ return {
90
+ outputs: result.outputs,
91
+ BEEF: result.BEEF ? Array.from(result.BEEF) : undefined,
92
+ };
93
+ }
94
+ async function hostingStatus(wallet, identityKey) {
95
+ const { outputs } = await listReceipts(wallet, identityKey, false);
96
+ const now = Math.floor(Date.now() / 1000);
97
+ // After correct mint, at most one — still take max if legacy junk exists.
98
+ let maxExp = 0;
99
+ for (const o of outputs) {
100
+ const exp = readHostingExp(o.tags);
101
+ if (exp !== undefined && exp > maxExp)
102
+ maxExp = exp;
103
+ }
104
+ return {
105
+ active: maxExp > now,
106
+ expiresAt: maxExp > 0 ? maxExp : undefined,
107
+ };
108
+ }
109
+ /**
110
+ * Spend all existing receipts for identity, create exactly one new receipt
111
+ * with exp = max(now, priorExp) + periodSeconds.
112
+ */
113
+ async function mintOrReplaceReceipt(wallet, identityKey, periodSeconds) {
114
+ const now = Math.floor(Date.now() / 1000);
115
+ const { outputs: existing, BEEF } = await listReceipts(wallet, identityKey, true);
116
+ let priorExp = now;
117
+ for (const o of existing) {
118
+ const exp = readHostingExp(o.tags);
119
+ if (exp !== undefined && exp > priorExp)
120
+ priorExp = exp;
121
+ }
122
+ const expiresAt = priorExp + periodSeconds;
123
+ const keyID = `hosting-${expiresAt}-${identityKey.slice(0, 8)}`;
124
+ const { publicKey } = await wallet.getPublicKey({
125
+ protocolID: P1SAT_PROTOCOL,
126
+ keyID,
127
+ counterparty: 'self',
128
+ forSelf: true,
129
+ });
130
+ const lockingScript = new P2PKH()
131
+ .lock(PublicKey.fromString(publicKey).toAddress())
132
+ .toHex();
133
+ const inputs = existing.map((o) => ({
134
+ outpoint: o.outpoint,
135
+ inputDescription: 'Replace hosting receipt',
136
+ unlockingScriptLength: 108,
137
+ }));
138
+ const created = await wallet.createAction({
139
+ description: 'Hosting subscription receipt',
140
+ ...(inputs.length > 0 && {
141
+ inputs,
142
+ inputBEEF: BEEF,
143
+ }),
144
+ outputs: [
145
+ {
146
+ lockingScript,
147
+ satoshis: 1,
148
+ outputDescription: 'Hosting receipt',
149
+ basket: HOSTING_BASKET,
150
+ tags: [hostingPayerTag(identityKey), hostingExpTag(expiresAt)],
151
+ customInstructions: JSON.stringify({
152
+ protocolID: P1SAT_PROTOCOL,
153
+ keyID,
154
+ counterparty: 'self',
155
+ }),
156
+ },
157
+ ],
158
+ options: { randomizeOutputs: false },
159
+ });
160
+ if (!created.txid && !created.signableTransaction) {
161
+ throw new Error('createAction returned no txid');
162
+ }
163
+ if (created.signableTransaction && existing.length > 0) {
164
+ const tx = Transaction.fromAtomicBEEF(created.signableTransaction.tx);
165
+ const spends = {};
166
+ for (let i = 0; i < existing.length; i++) {
167
+ const o = existing[i];
168
+ if (!o.customInstructions) {
169
+ throw new Error(`missing customInstructions on ${o.outpoint}`);
170
+ }
171
+ const ci = JSON.parse(o.customInstructions);
172
+ const unlocking = await signP2PKH(wallet, tx, i, ci.protocolID, ci.keyID, ci.counterparty ?? 'self');
173
+ spends[i] = { unlockingScript: unlocking };
174
+ }
175
+ const signed = await wallet.signAction({
176
+ reference: created.signableTransaction.reference,
177
+ spends,
178
+ });
179
+ if (!signed.txid)
180
+ throw new Error('signAction returned no txid');
181
+ return { expiresAt, txid: signed.txid };
182
+ }
183
+ if (!created.txid)
184
+ throw new Error('createAction returned no txid');
185
+ return { expiresAt, txid: created.txid };
186
+ }
187
+ async function signP2PKH(wallet, tx, inputIndex, protocolID, keyID, counterparty) {
188
+ const txInput = tx.inputs[inputIndex];
189
+ const sourceLockingScript = txInput.sourceTransaction?.outputs[txInput.sourceOutputIndex]?.lockingScript;
190
+ if (!sourceLockingScript) {
191
+ throw new Error(`missing source locking script for input ${inputIndex}`);
192
+ }
193
+ const sourceTXID = txInput.sourceTXID ?? txInput.sourceTransaction?.id('hex');
194
+ if (!sourceTXID)
195
+ throw new Error(`missing source txid for input ${inputIndex}`);
196
+ const sourceSatoshis = txInput.sourceTransaction?.outputs[txInput.sourceOutputIndex]?.satoshis ?? 1;
197
+ const preimage = TransactionSignature.format({
198
+ sourceTXID,
199
+ sourceOutputIndex: txInput.sourceOutputIndex,
200
+ sourceSatoshis,
201
+ transactionVersion: tx.version,
202
+ otherInputs: tx.inputs
203
+ .filter((_, idx) => idx !== inputIndex)
204
+ .map((inp) => ({
205
+ sourceTXID: inp.sourceTXID ?? inp.sourceTransaction?.id('hex') ?? '',
206
+ sourceOutputIndex: inp.sourceOutputIndex,
207
+ sequence: inp.sequence ?? 0xffffffff,
208
+ })),
209
+ inputIndex,
210
+ outputs: tx.outputs,
211
+ inputSequence: txInput.sequence ?? 0xffffffff,
212
+ subscript: sourceLockingScript,
213
+ lockTime: tx.lockTime,
214
+ scope: TransactionSignature.SIGHASH_ALL | TransactionSignature.SIGHASH_FORKID,
215
+ });
216
+ const sighash = Hash.sha256(Hash.sha256(preimage));
217
+ const { signature } = await wallet.createSignature({
218
+ protocolID,
219
+ keyID,
220
+ counterparty,
221
+ data: Array.from(preimage),
222
+ hashToDirectlySign: Array.from(sighash),
223
+ });
224
+ const { publicKey } = await wallet.getPublicKey({
225
+ protocolID,
226
+ keyID,
227
+ counterparty,
228
+ forSelf: true,
229
+ });
230
+ const sigWithHashtype = [
231
+ ...signature,
232
+ TransactionSignature.SIGHASH_ALL | TransactionSignature.SIGHASH_FORKID,
233
+ ];
234
+ return new UnlockingScript()
235
+ .writeBin(sigWithHashtype)
236
+ .writeBin(Utils.toArray(publicKey, 'hex'))
237
+ .toHex();
238
+ }
239
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/hosting/routes.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -15,4 +15,14 @@ export * from './resolvers';
15
15
  export * from './accounts';
16
16
  export type { IdentityResolver, JsonRpcRequest, JsonRpcResponse, JsonRpcResponseErr, JsonRpcResponseOk, PreDispatchContext, PreDispatchHook, PreDispatchResult, ResolvedIdentity, WalletRpcHandlerConfig, WalletStorageProvider, } from './types';
17
17
  export type { WalletServerAccounts } from './createWalletServer';
18
+ export { createHostServer } from './createHostServer';
19
+ export type { HostServerConfig, HostServerHandle, HostServerMessageboxConfig, } from './createHostServer';
20
+ export { mountPaymailRoutes } from './paymail/routes';
21
+ export { KnexPendingStore, DEFAULT_TTL_MS } from './paymail/pending';
22
+ export { checkHostingEntitlement } from './paymail/entitlement';
23
+ export type { PaymailDeps, PendingPayment, PendingStore, ResolvedBind, } from './paymail/types';
24
+ export { mountHostingRoutes, type HostingConfig, type HostingConfigProvider, } from './hosting/routes';
25
+ export { HostingClient, type HostingPrice, type HostingStatus, type HostingSubscribeResult, } from './hosting/client';
26
+ export { buildOpenApiSpec, mountOpenApiRoutes } from './openapi';
27
+ export type { OpenApiOptions, OpenApiSurfaces } from './openapi';
18
28
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AACjE,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAEhE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,YAAY,EACX,kBAAkB,EAClB,kBAAkB,GAClB,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,YAAY,EACX,kBAAkB,EAClB,kBAAkB,GAClB,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,YAAY,EACX,mBAAmB,EACnB,mBAAmB,GACnB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AACzE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAEhE,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAE1B,YAAY,EACX,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,GACrB,MAAM,SAAS,CAAA;AAEhB,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AACjE,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAEhE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,YAAY,EACX,kBAAkB,EAClB,kBAAkB,GAClB,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,YAAY,EACX,kBAAkB,EAClB,kBAAkB,GAClB,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,YAAY,EACX,mBAAmB,EACnB,mBAAmB,GACnB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AACzE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAEhE,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAE1B,YAAY,EACX,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,GACrB,MAAM,SAAS,CAAA;AAEhB,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,YAAY,EACX,gBAAgB,EAChB,gBAAgB,EAChB,0BAA0B,GAC1B,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAC/D,YAAY,EACX,WAAW,EACX,cAAc,EACd,YAAY,EACZ,YAAY,GACZ,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACN,kBAAkB,EAClB,KAAK,aAAa,EAClB,KAAK,qBAAqB,GAC1B,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACN,aAAa,EACb,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,sBAAsB,GAC3B,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAChE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA"}
package/dist/index.js CHANGED
@@ -7,4 +7,11 @@ export { createWalletMonitor } from './createWalletMonitor';
7
7
  export { BILLABLE_METHODS, dispatch, isBillableMethod } from './dispatch';
8
8
  export * from './resolvers';
9
9
  export * from './accounts';
10
+ export { createHostServer } from './createHostServer';
11
+ export { mountPaymailRoutes } from './paymail/routes';
12
+ export { KnexPendingStore, DEFAULT_TTL_MS } from './paymail/pending';
13
+ export { checkHostingEntitlement } from './paymail/entitlement';
14
+ export { mountHostingRoutes, } from './hosting/routes';
15
+ export { HostingClient, } from './hosting/client';
16
+ export { buildOpenApiSpec, mountOpenApiRoutes } from './openapi';
10
17
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AAGjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAMzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAMzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAGtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAM3D,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAGzE,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AAGjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAMzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAMzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAGtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAM3D,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAGzE,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAiB1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAMrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAO/D,OAAO,EACN,kBAAkB,GAGlB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACN,aAAa,GAIb,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Per-surface OpenAPI path fragments. Each surface contributes its canonical
3
+ * paths only — legacy root-mounted messagebox aliases are intentionally
4
+ * undocumented. The assembler merges fragments for enabled surfaces.
5
+ */
6
+ export type PathsFragment = Record<string, Record<string, unknown>>;
7
+ export interface TagDoc {
8
+ name: string;
9
+ 'x-displayName': string;
10
+ description: string;
11
+ }
12
+ /** Tag metadata rendered as section headings + intros on the docs page. */
13
+ export declare const TAG_DOCS: TagDoc[];
14
+ export declare function authPaths(): PathsFragment;
15
+ export declare function storagePaths(): PathsFragment;
16
+ export declare function accountPaths(): PathsFragment;
17
+ export declare function hostingPaths(): PathsFragment;
18
+ export declare function messageboxPaths(): PathsFragment;
19
+ export declare function paymailPaths(): PathsFragment;
20
+ //# sourceMappingURL=fragments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fragments.d.ts","sourceRoot":"","sources":["../../src/openapi/fragments.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAEnE,MAAM,WAAW,MAAM;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,eAAe,EAAE,MAAM,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;CACnB;AAED,2EAA2E;AAC3E,eAAO,MAAM,QAAQ,EAAE,MAAM,EAqC5B,CAAA;AA6BD,wBAAgB,SAAS,IAAI,aAAa,CAczC;AAED,wBAAgB,YAAY,IAAI,aAAa,CAkC5C;AAED,wBAAgB,YAAY,IAAI,aAAa,CAiE5C;AAED,wBAAgB,YAAY,IAAI,aAAa,CAwF5C;AAED,wBAAgB,eAAe,IAAI,aAAa,CA6H/C;AAED,wBAAgB,YAAY,IAAI,aAAa,CAc5C"}