@run402/sdk 4.93.2 → 4.95.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.
Files changed (225) hide show
  1. package/README.md +40 -38
  2. package/core-dist/config.d.ts +16 -2
  3. package/core-dist/config.js +52 -18
  4. package/core-dist/control-plane-session.d.ts +29 -14
  5. package/core-dist/control-plane-session.js +31 -6
  6. package/core-dist/keystore.js +7 -7
  7. package/core-dist/profiles.d.ts +3 -3
  8. package/core-dist/profiles.js +9 -7
  9. package/core-dist/{allowance-auth.d.ts → wallet-auth.d.ts} +6 -6
  10. package/core-dist/{allowance-auth.js → wallet-auth.js} +15 -15
  11. package/core-dist/wallet.d.ts +22 -0
  12. package/core-dist/{allowance.js → wallet.js} +20 -20
  13. package/core-dist/{write-auth-session.d.ts → write-approvals.d.ts} +28 -26
  14. package/core-dist/{write-auth-session.js → write-approvals.js} +19 -19
  15. package/dist/actions.d.ts +4 -4
  16. package/dist/actions.d.ts.map +1 -1
  17. package/dist/app-up.d.ts +2 -2
  18. package/dist/app-up.d.ts.map +1 -1
  19. package/dist/config.d.ts +1 -2
  20. package/dist/config.d.ts.map +1 -1
  21. package/dist/config.js.map +1 -1
  22. package/dist/control-plane-credentials.d.ts +8 -8
  23. package/dist/control-plane-credentials.js +7 -7
  24. package/dist/credentials.d.ts +20 -20
  25. package/dist/credentials.d.ts.map +1 -1
  26. package/dist/credentials.js +1 -1
  27. package/dist/errors.d.ts +26 -28
  28. package/dist/errors.d.ts.map +1 -1
  29. package/dist/errors.js +35 -38
  30. package/dist/errors.js.map +1 -1
  31. package/dist/index.d.ts +29 -16
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +30 -17
  34. package/dist/index.js.map +1 -1
  35. package/dist/kernel.d.ts +1 -1
  36. package/dist/kernel.d.ts.map +1 -1
  37. package/dist/kernel.js +10 -9
  38. package/dist/kernel.js.map +1 -1
  39. package/dist/namespaces/admin.d.ts +52 -121
  40. package/dist/namespaces/admin.d.ts.map +1 -1
  41. package/dist/namespaces/admin.js +41 -45
  42. package/dist/namespaces/admin.js.map +1 -1
  43. package/dist/namespaces/agent.d.ts +2 -2
  44. package/dist/namespaces/agent.d.ts.map +1 -1
  45. package/dist/namespaces/agent.js +2 -2
  46. package/dist/namespaces/agent.js.map +1 -1
  47. package/dist/namespaces/ai.d.ts +2 -2
  48. package/dist/namespaces/ai.js +3 -3
  49. package/dist/namespaces/ai.js.map +1 -1
  50. package/dist/namespaces/assets.js +1 -1
  51. package/dist/namespaces/assets.js.map +1 -1
  52. package/dist/namespaces/billing.d.ts +6 -3
  53. package/dist/namespaces/billing.d.ts.map +1 -1
  54. package/dist/namespaces/billing.js.map +1 -1
  55. package/dist/namespaces/buzz-notifications.types.d.ts +1 -1
  56. package/dist/namespaces/buzz.d.ts +2 -2
  57. package/dist/namespaces/buzz.d.ts.map +1 -1
  58. package/dist/namespaces/buzz.js +2 -2
  59. package/dist/namespaces/buzz.js.map +1 -1
  60. package/dist/namespaces/buzz.types.d.ts +2 -2
  61. package/dist/namespaces/buzz.types.d.ts.map +1 -1
  62. package/dist/namespaces/ci.js +3 -3
  63. package/dist/namespaces/ci.js.map +1 -1
  64. package/dist/namespaces/credentials.types.d.ts +1 -1
  65. package/dist/namespaces/deploy.d.ts +1 -1
  66. package/dist/namespaces/deploy.d.ts.map +1 -1
  67. package/dist/namespaces/deploy.js +31 -32
  68. package/dist/namespaces/deploy.js.map +1 -1
  69. package/dist/namespaces/deploy.types.d.ts +6 -6
  70. package/dist/namespaces/deploy.types.d.ts.map +1 -1
  71. package/dist/namespaces/domains.d.ts +10 -2
  72. package/dist/namespaces/domains.d.ts.map +1 -1
  73. package/dist/namespaces/domains.js +10 -5
  74. package/dist/namespaces/domains.js.map +1 -1
  75. package/dist/namespaces/errors.js +1 -1
  76. package/dist/namespaces/escalations.d.ts +1 -1
  77. package/dist/namespaces/escalations.js +1 -1
  78. package/dist/namespaces/escalations.types.d.ts +2 -2
  79. package/dist/namespaces/escalations.types.d.ts.map +1 -1
  80. package/dist/namespaces/events.types.d.ts +1 -1
  81. package/dist/namespaces/functions.d.ts +1 -1
  82. package/dist/namespaces/functions.js +2 -2
  83. package/dist/namespaces/functions.js.map +1 -1
  84. package/dist/namespaces/gitvault.crypto.d.ts +1 -1
  85. package/dist/namespaces/gitvault.d.ts +26 -26
  86. package/dist/namespaces/gitvault.d.ts.map +1 -1
  87. package/dist/namespaces/gitvault.js +113 -113
  88. package/dist/namespaces/gitvault.js.map +1 -1
  89. package/dist/namespaces/me.d.ts +120 -0
  90. package/dist/namespaces/me.d.ts.map +1 -0
  91. package/dist/namespaces/me.js +34 -0
  92. package/dist/namespaces/me.js.map +1 -0
  93. package/dist/namespaces/org.d.ts +108 -6
  94. package/dist/namespaces/org.d.ts.map +1 -1
  95. package/dist/namespaces/org.js +63 -7
  96. package/dist/namespaces/org.js.map +1 -1
  97. package/dist/namespaces/org.types.d.ts +29 -9
  98. package/dist/namespaces/org.types.d.ts.map +1 -1
  99. package/dist/namespaces/pay.js +3 -3
  100. package/dist/namespaces/pay.js.map +1 -1
  101. package/dist/namespaces/projects.d.ts +9 -9
  102. package/dist/namespaces/projects.js +15 -15
  103. package/dist/namespaces/projects.js.map +1 -1
  104. package/dist/namespaces/projects.types.d.ts +28 -12
  105. package/dist/namespaces/projects.types.d.ts.map +1 -1
  106. package/dist/namespaces/rooms.d.ts +7 -7
  107. package/dist/namespaces/rooms.js +17 -17
  108. package/dist/namespaces/rooms.js.map +1 -1
  109. package/dist/namespaces/rooms.types.d.ts +9 -9
  110. package/dist/namespaces/rooms.types.d.ts.map +1 -1
  111. package/dist/namespaces/service.d.ts +1 -1
  112. package/dist/namespaces/service.js +1 -1
  113. package/dist/namespaces/{operator-session.d.ts → session.d.ts} +135 -51
  114. package/dist/namespaces/session.d.ts.map +1 -0
  115. package/dist/namespaces/{operator-session.js → session.js} +118 -30
  116. package/dist/namespaces/session.js.map +1 -0
  117. package/dist/namespaces/subdomains.d.ts +5 -5
  118. package/dist/namespaces/subdomains.d.ts.map +1 -1
  119. package/dist/namespaces/subdomains.js +6 -6
  120. package/dist/namespaces/subdomains.js.map +1 -1
  121. package/dist/namespaces/tier.d.ts +44 -21
  122. package/dist/namespaces/tier.d.ts.map +1 -1
  123. package/dist/namespaces/tier.js +7 -7
  124. package/dist/namespaces/tier.js.map +1 -1
  125. package/dist/namespaces/transfers.d.ts +119 -85
  126. package/dist/namespaces/transfers.d.ts.map +1 -1
  127. package/dist/namespaces/transfers.js +31 -38
  128. package/dist/namespaces/transfers.js.map +1 -1
  129. package/dist/namespaces/vouchers.d.ts +9 -10
  130. package/dist/namespaces/vouchers.d.ts.map +1 -1
  131. package/dist/namespaces/vouchers.js +4 -5
  132. package/dist/namespaces/vouchers.js.map +1 -1
  133. package/dist/namespaces/wallets.d.ts +72 -3
  134. package/dist/namespaces/wallets.d.ts.map +1 -1
  135. package/dist/namespaces/wallets.js +141 -3
  136. package/dist/namespaces/wallets.js.map +1 -1
  137. package/dist/namespaces/write-approval.d.ts +101 -0
  138. package/dist/namespaces/write-approval.d.ts.map +1 -0
  139. package/dist/namespaces/write-approval.js +62 -0
  140. package/dist/namespaces/write-approval.js.map +1 -0
  141. package/dist/node/actions-node.d.ts +3 -3
  142. package/dist/node/actions-node.d.ts.map +1 -1
  143. package/dist/node/actions-node.js +44 -44
  144. package/dist/node/actions-node.js.map +1 -1
  145. package/dist/node/assets-node.js +6 -6
  146. package/dist/node/assets-node.js.map +1 -1
  147. package/dist/node/{bearer-claim-key.d.ts → bearer-redeem-key.d.ts} +12 -12
  148. package/dist/node/bearer-redeem-key.d.ts.map +1 -0
  149. package/dist/node/{bearer-claim-key.js → bearer-redeem-key.js} +21 -21
  150. package/dist/node/bearer-redeem-key.js.map +1 -0
  151. package/dist/node/ci.d.ts +1 -1
  152. package/dist/node/ci.d.ts.map +1 -1
  153. package/dist/node/ci.js +6 -6
  154. package/dist/node/ci.js.map +1 -1
  155. package/dist/node/credentials.d.ts +18 -17
  156. package/dist/node/credentials.d.ts.map +1 -1
  157. package/dist/node/credentials.js +29 -28
  158. package/dist/node/credentials.js.map +1 -1
  159. package/dist/node/deploy-manifest.d.ts +3 -5
  160. package/dist/node/deploy-manifest.d.ts.map +1 -1
  161. package/dist/node/deploy-manifest.js +3 -12
  162. package/dist/node/deploy-manifest.js.map +1 -1
  163. package/dist/node/funding-recovery.d.ts +1 -1
  164. package/dist/node/funding-recovery.d.ts.map +1 -1
  165. package/dist/node/funding-recovery.js +1 -1
  166. package/dist/node/funding-recovery.js.map +1 -1
  167. package/dist/node/gitvault-apply.d.ts +1 -1
  168. package/dist/node/gitvault-apply.d.ts.map +1 -1
  169. package/dist/node/gitvault-apply.js +1 -1
  170. package/dist/node/gitvault-apply.js.map +1 -1
  171. package/dist/node/gitvault-handoff.d.ts +22 -22
  172. package/dist/node/gitvault-handoff.d.ts.map +1 -1
  173. package/dist/node/gitvault-handoff.js +45 -45
  174. package/dist/node/gitvault-handoff.js.map +1 -1
  175. package/dist/node/gitvault-prewarm.js +7 -7
  176. package/dist/node/gitvault-prewarm.js.map +1 -1
  177. package/dist/node/gitvault-restore.d.ts +1 -1
  178. package/dist/node/gitvault-restore.js +1 -1
  179. package/dist/node/index.d.ts +16 -16
  180. package/dist/node/index.d.ts.map +1 -1
  181. package/dist/node/index.js +15 -15
  182. package/dist/node/index.js.map +1 -1
  183. package/dist/node/manifest-export.js +2 -2
  184. package/dist/node/manifest-export.js.map +1 -1
  185. package/dist/node/org-adopt.d.ts +49 -0
  186. package/dist/node/org-adopt.d.ts.map +1 -0
  187. package/dist/node/org-adopt.js +77 -0
  188. package/dist/node/org-adopt.js.map +1 -0
  189. package/dist/node/paid-fetch.d.ts +7 -7
  190. package/dist/node/paid-fetch.d.ts.map +1 -1
  191. package/dist/node/paid-fetch.js +54 -54
  192. package/dist/node/paid-fetch.js.map +1 -1
  193. package/dist/node/preflight.d.ts +1 -1
  194. package/dist/node/preflight.d.ts.map +1 -1
  195. package/dist/node/preflight.js +1 -1
  196. package/dist/node/preflight.js.map +1 -1
  197. package/dist/node/sites-node.js +1 -1
  198. package/dist/node/sites-node.js.map +1 -1
  199. package/dist/node/source-scan.d.ts +1 -1
  200. package/dist/node/source-scan.js +2 -2
  201. package/dist/node/source-scan.js.map +1 -1
  202. package/dist/scoped.d.ts +11 -11
  203. package/dist/scoped.d.ts.map +1 -1
  204. package/dist/scoped.js +5 -5
  205. package/dist/scoped.js.map +1 -1
  206. package/package.json +1 -1
  207. package/core-dist/allowance.d.ts +0 -22
  208. package/core-dist/operator-session.d.ts +0 -80
  209. package/core-dist/operator-session.js +0 -154
  210. package/dist/namespaces/allowance.d.ts +0 -79
  211. package/dist/namespaces/allowance.d.ts.map +0 -1
  212. package/dist/namespaces/allowance.js +0 -149
  213. package/dist/namespaces/allowance.js.map +0 -1
  214. package/dist/namespaces/operator-session.d.ts.map +0 -1
  215. package/dist/namespaces/operator-session.js.map +0 -1
  216. package/dist/namespaces/operator.d.ts +0 -359
  217. package/dist/namespaces/operator.d.ts.map +0 -1
  218. package/dist/namespaces/operator.js +0 -272
  219. package/dist/namespaces/operator.js.map +0 -1
  220. package/dist/node/bearer-claim-key.d.ts.map +0 -1
  221. package/dist/node/bearer-claim-key.js.map +0 -1
  222. package/dist/node/operator-claim.d.ts +0 -49
  223. package/dist/node/operator-claim.d.ts.map +0 -1
  224. package/dist/node/operator-claim.js +0 -77
  225. package/dist/node/operator-claim.js.map +0 -1
@@ -1,9 +1,8 @@
1
1
  /**
2
- * `vouchers` namespace — redeem a promo code for platform credit.
2
+ * `vouchers` namespace — redeem a promo code into the organization's allowance.
3
3
  *
4
- * A promo code credits your organization with run402 prepaid credit. That
5
- * credit spends like any other prepaid balance: a tier purchase settles from
6
- * it with no on-chain payment.
4
+ * A promo code adds to your organization's allowance, which spends like any
5
+ * other allowance: a tier purchase settles from it with no on-chain payment.
7
6
  *
8
7
  * Two properties make this safe to call from anywhere in an agent's lifecycle:
9
8
  *
@@ -11,7 +10,7 @@
11
10
  * call a brand-new wallet makes (the organization is provisioned on demand),
12
11
  * or long after `run402 init`. There is no init-before-redeem requirement.
13
12
  * - **Retrying is safe.** A repeat by the same organization returns the ORIGINAL
14
- * result with `already_redeemed: true` and never credits twice, so a call that
13
+ * result with `already_redeemed: true` and never adds twice, so a call that
15
14
  * times out client-side can simply be re-issued.
16
15
  *
17
16
  * This namespace is deliberately thin and semantically blind: it forwards an
@@ -1 +1 @@
1
- {"version":3,"file":"vouchers.js","sourceRoot":"","sources":["../../src/namespaces/vouchers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAuCxD,MAAM,OAAO,QAAQ;IAIU;IAH7B,+BAA+B;IACtB,UAAU,CAAiD;IAEpE,YAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;QACzC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,MAAM,CAAC,IAAY;QACvB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,wBAAwB,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAsB,0BAA0B,EAAE;YAC1E,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,EAAE,IAAI,EAAE;YACd,OAAO,EAAE,wBAAwB;SAClC,CAAC,CAAC;IACL,CAAC;CACF"}
1
+ {"version":3,"file":"vouchers.js","sourceRoot":"","sources":["../../src/namespaces/vouchers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAuCxD,MAAM,OAAO,QAAQ;IAIU;IAH7B,+BAA+B;IACtB,UAAU,CAAiD;IAEpE,YAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;QACzC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,MAAM,CAAC,IAAY;QACvB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,wBAAwB,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAsB,0BAA0B,EAAE;YAC1E,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,EAAE,IAAI,EAAE;YACd,OAAO,EAAE,wBAAwB;SAClC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -1,12 +1,17 @@
1
1
  /**
2
- * `wallets` namespace — server-side wallet display label.
2
+ * `wallets` namespace — the agent's local wallet and its server-side label.
3
+ *
4
+ * `status`, `create`, and `export` touch the local wallet file (`wallet.json`)
5
+ * through optional provider methods; sandbox providers that don't implement
6
+ * them report `{configured: false}` or throw a descriptive error. `faucet`
7
+ * requests testnet USDC into the wallet and works in any environment.
3
8
  *
4
9
  * The label is the cross-machine / WEB-visible human name for a wallet (e.g.
5
10
  * "kychon"), stored server-side keyed by the wallet address and authenticated
6
- * by the wallet's allowance signature. It is display metadata only — never key
11
+ * by the wallet's SIWX signature. It is display metadata only — never key
7
12
  * material, no custody.
8
13
  *
9
- * Both methods are intentionally BEST-EFFORT: they swallow errors (including a
14
+ * Both label methods are intentionally BEST-EFFORT: they swallow errors (including a
10
15
  * not-yet-deployed endpoint / 404 / offline) and return a null/`ok:false`
11
16
  * sentinel instead of throwing. This lets `run402 wallets new|rename|import`
12
17
  * stay fully functional locally and before the gateway endpoint ships — the
@@ -18,9 +23,73 @@
18
23
  * label)` form is deprecated (see the `sdk-call-shape-conventions` change).
19
24
  */
20
25
  import type { Client } from "../kernel.js";
26
+ export interface WalletStatusResult {
27
+ address: string;
28
+ created?: string;
29
+ /**
30
+ * True once the faucet has been invoked on this wallet. This tracks
31
+ * "faucet has been used," not "account can pay right now" — the two diverge
32
+ * once funds are spent or expire. Callers wanting a real pay-readiness
33
+ * check should call `wallets balance`.
34
+ */
35
+ faucet_used?: boolean;
36
+ lastFaucet?: string;
37
+ path?: string;
38
+ /** The persisted payment rail (`x402` when unset). */
39
+ rail?: "x402" | "mpp" | "lightning";
40
+ /** The Lightning wallet, without its pairing secret. */
41
+ lightning?: {
42
+ wallet_id: string;
43
+ lightning_address: string | null;
44
+ budget_sats: number;
45
+ starter_sats: number;
46
+ custody: "run402_hub";
47
+ has_pairing: true;
48
+ minted_at: string;
49
+ };
50
+ /** true when the local provider holds a wallet, false otherwise. */
51
+ configured: boolean;
52
+ }
53
+ export interface WalletCreateResult {
54
+ address: string;
55
+ created: string;
56
+ path?: string;
57
+ }
58
+ export interface FaucetResult {
59
+ /** Present on gateways that wait for on-chain confirmation. */
60
+ fundingStatus?: "confirmed";
61
+ transactionHash: string;
62
+ /** Display-formatted amount, e.g. `"0.25"`. Computed from `amountUsdMicros`. */
63
+ amount: string;
64
+ /** Raw amount in micro-USD (1_000_000 = $1.00). */
65
+ amountUsdMicros: number;
66
+ token: string;
67
+ network: string;
68
+ }
69
+ export interface FaucetOptions {
70
+ address?: string;
71
+ idempotencyKey?: string;
72
+ }
21
73
  export declare class Wallets {
22
74
  private readonly client;
23
75
  constructor(client: Client);
76
+ /** Inspect the local wallet. Returns `{configured: false}` when absent. */
77
+ status(): Promise<WalletStatusResult>;
78
+ /**
79
+ * Generate a new wallet keypair and persist it. Throws when the
80
+ * provider already holds a wallet (don't overwrite silently) or
81
+ * when the provider doesn't support local wallet management.
82
+ */
83
+ create(): Promise<WalletCreateResult>;
84
+ /** Return the wallet address (safe to share). Throws if none is configured. */
85
+ export(): Promise<string>;
86
+ /**
87
+ * Request testnet USDC from the Run402 faucet. When `address` is omitted,
88
+ * the SDK uses the provider's local wallet address. Updates the
89
+ * wallet's internal `funded` marker on success (surfaced as
90
+ * `faucet_used` in `status()`).
91
+ */
92
+ faucet(addressOrOptions?: string | FaucetOptions): Promise<FaucetResult>;
24
93
  /**
25
94
  * Read a wallet's server-side label, or null on any error (unset, 404,
26
95
  * offline). Public read — no auth required.
@@ -1 +1 @@
1
- {"version":3,"file":"wallets.d.ts","sourceRoot":"","sources":["../../src/namespaces/wallets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAiC3C,qBAAa,OAAO;IACN,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAE3C;;;OAGG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAGxD;AAED;;;;GAIG;AACH,qBAAa,YAAY;IACX,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAU,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAxC,MAAM,EAAE,MAAM,EAAmB,OAAO,EAAE,MAAM;IAE7E,qDAAqD;IACrD,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAIlC,sEAAsE;IACtE,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAA;KAAE,CAAC;CAGlD"}
1
+ {"version":3,"file":"wallets.d.ts","sourceRoot":"","sources":["../../src/namespaces/wallets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAI3C,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,WAAW,CAAC;IACpC,wDAAwD;IACxD,SAAS,CAAC,EAAE;QACV,SAAS,EAAE,MAAM,CAAC;QAClB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;QACjC,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,YAAY,CAAC;QACtB,WAAW,EAAE,IAAI,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,oEAAoE;IACpE,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,+DAA+D;IAC/D,aAAa,CAAC,EAAE,WAAW,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,gFAAgF;IAChF,MAAM,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAyCD,qBAAa,OAAO;IACN,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAE3C,2EAA2E;IACrE,MAAM,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAkC3C;;;;OAIG;IACG,MAAM,IAAI,OAAO,CAAC,kBAAkB,CAAC;IA8B3C,+EAA+E;IACzE,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAe/B;;;;;OAKG;IACG,MAAM,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IA8D9E;;;OAGG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAGxD;AAED;;;;GAIG;AACH,qBAAa,YAAY;IACX,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAU,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAxC,MAAM,EAAE,MAAM,EAAmB,OAAO,EAAE,MAAM;IAE7E,qDAAqD;IACrD,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAIlC,sEAAsE;IACtE,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAA;KAAE,CAAC;CAGlD"}
@@ -1,12 +1,17 @@
1
1
  /**
2
- * `wallets` namespace — server-side wallet display label.
2
+ * `wallets` namespace — the agent's local wallet and its server-side label.
3
+ *
4
+ * `status`, `create`, and `export` touch the local wallet file (`wallet.json`)
5
+ * through optional provider methods; sandbox providers that don't implement
6
+ * them report `{configured: false}` or throw a descriptive error. `faucet`
7
+ * requests testnet USDC into the wallet and works in any environment.
3
8
  *
4
9
  * The label is the cross-machine / WEB-visible human name for a wallet (e.g.
5
10
  * "kychon"), stored server-side keyed by the wallet address and authenticated
6
- * by the wallet's allowance signature. It is display metadata only — never key
11
+ * by the wallet's SIWX signature. It is display metadata only — never key
7
12
  * material, no custody.
8
13
  *
9
- * Both methods are intentionally BEST-EFFORT: they swallow errors (including a
14
+ * Both label methods are intentionally BEST-EFFORT: they swallow errors (including a
10
15
  * not-yet-deployed endpoint / 404 / offline) and return a null/`ok:false`
11
16
  * sentinel instead of throwing. This lets `run402 wallets new|rename|import`
12
17
  * stay fully functional locally and before the gateway endpoint ships — the
@@ -17,6 +22,7 @@
17
22
  * `.getLabel()` / `.setLabel(label)`. The two-string `r.wallets.setLabel(address,
18
23
  * label)` form is deprecated (see the `sdk-call-shape-conventions` change).
19
24
  */
25
+ import { LocalError } from "../errors.js";
20
26
  /** Shared read impl — used by both `Wallets.getLabel` and `ScopedWallet.getLabel`. */
21
27
  async function readLabel(client, address) {
22
28
  try {
@@ -42,6 +48,138 @@ export class Wallets {
42
48
  constructor(client) {
43
49
  this.client = client;
44
50
  }
51
+ /** Inspect the local wallet. Returns `{configured: false}` when absent. */
52
+ async status() {
53
+ const reader = this.client.credentials.readWallet;
54
+ if (!reader) {
55
+ return { address: "", configured: false };
56
+ }
57
+ const data = await reader.call(this.client.credentials);
58
+ if (!data)
59
+ return { address: "", configured: false };
60
+ return {
61
+ address: data.address,
62
+ created: data.created,
63
+ // Map the on-disk `funded` marker (which only tracks faucet invocations)
64
+ // to `faucet_used` in the output. `!!` coerces undefined → false so
65
+ // callers can branch cleanly.
66
+ faucet_used: !!data.funded,
67
+ lastFaucet: data.lastFaucet,
68
+ path: this.client.credentials.getWalletPath?.call(this.client.credentials),
69
+ rail: data.rail ?? "x402",
70
+ ...(data.lightning
71
+ ? {
72
+ lightning: {
73
+ wallet_id: data.lightning.wallet_id,
74
+ lightning_address: data.lightning.lightning_address,
75
+ budget_sats: data.lightning.budget_sats,
76
+ starter_sats: data.lightning.starter_sats,
77
+ custody: data.lightning.custody,
78
+ has_pairing: true,
79
+ minted_at: data.lightning.minted_at,
80
+ },
81
+ }
82
+ : {}),
83
+ configured: true,
84
+ };
85
+ }
86
+ /**
87
+ * Generate a new wallet keypair and persist it. Throws when the
88
+ * provider already holds a wallet (don't overwrite silently) or
89
+ * when the provider doesn't support local wallet management.
90
+ */
91
+ async create() {
92
+ const reader = this.client.credentials.readWallet;
93
+ const creator = this.client.credentials.createWallet;
94
+ const saver = this.client.credentials.saveWallet;
95
+ if (!creator || !saver) {
96
+ throw new LocalError("This credential provider does not support wallet creation. Use @run402/sdk/node for local wallet management.", "creating wallet");
97
+ }
98
+ if (reader) {
99
+ const existing = await reader.call(this.client.credentials);
100
+ if (existing) {
101
+ throw new LocalError(`Wallet already exists at ${this.client.credentials.getWalletPath?.call(this.client.credentials) ?? "(local path unknown)"}. Delete it manually to regenerate.`, "creating wallet");
102
+ }
103
+ }
104
+ const data = await creator.call(this.client.credentials);
105
+ await saver.call(this.client.credentials, data);
106
+ return {
107
+ address: data.address,
108
+ created: data.created ?? new Date().toISOString(),
109
+ path: this.client.credentials.getWalletPath?.call(this.client.credentials),
110
+ };
111
+ }
112
+ /** Return the wallet address (safe to share). Throws if none is configured. */
113
+ async export() {
114
+ const reader = this.client.credentials.readWallet;
115
+ if (!reader) {
116
+ throw new LocalError("This credential provider does not expose the local wallet.", "exporting wallet");
117
+ }
118
+ const data = await reader.call(this.client.credentials);
119
+ if (!data) {
120
+ throw new LocalError("No local wallet is configured.", "exporting wallet");
121
+ }
122
+ return data.address;
123
+ }
124
+ /**
125
+ * Request testnet USDC from the Run402 faucet. When `address` is omitted,
126
+ * the SDK uses the provider's local wallet address. Updates the
127
+ * wallet's internal `funded` marker on success (surfaced as
128
+ * `faucet_used` in `status()`).
129
+ */
130
+ async faucet(addressOrOptions) {
131
+ const opts = typeof addressOrOptions === "string"
132
+ ? { address: addressOrOptions }
133
+ : addressOrOptions ?? {};
134
+ let resolvedAddress = opts.address;
135
+ if (!resolvedAddress) {
136
+ const reader = this.client.credentials.readWallet;
137
+ if (!reader) {
138
+ throw new LocalError("No address provided and no local wallet is available.", "requesting faucet funds");
139
+ }
140
+ const data = await reader.call(this.client.credentials);
141
+ if (!data) {
142
+ throw new LocalError("No address provided and no local wallet is configured.", "requesting faucet funds");
143
+ }
144
+ resolvedAddress = data.address;
145
+ }
146
+ // Wire shape is snake_case (`transaction_hash`, `amount_usd_micros`);
147
+ // normalize to the typed camelCase surface.
148
+ const wire = await this.client.request("/faucet/v1", {
149
+ method: "POST",
150
+ ...(opts.idempotencyKey ? { headers: { "Idempotency-Key": opts.idempotencyKey } } : {}),
151
+ body: { address: resolvedAddress },
152
+ withAuth: false,
153
+ context: "requesting faucet funds",
154
+ });
155
+ const result = {
156
+ ...(wire.funding_status ? { fundingStatus: wire.funding_status } : {}),
157
+ transactionHash: wire.transaction_hash,
158
+ amountUsdMicros: wire.amount_usd_micros,
159
+ amount: (wire.amount_usd_micros / 1_000_000).toFixed(2),
160
+ token: wire.token,
161
+ network: wire.network,
162
+ };
163
+ // Best-effort update of the local wallet's funded/lastFaucet fields.
164
+ const reader = this.client.credentials.readWallet;
165
+ const saver = this.client.credentials.saveWallet;
166
+ if (reader && saver) {
167
+ try {
168
+ const data = await reader.call(this.client.credentials);
169
+ if (data) {
170
+ await saver.call(this.client.credentials, {
171
+ ...data,
172
+ funded: true,
173
+ lastFaucet: new Date().toISOString(),
174
+ });
175
+ }
176
+ }
177
+ catch {
178
+ // non-fatal — the on-chain transfer succeeded
179
+ }
180
+ }
181
+ return result;
182
+ }
45
183
  /**
46
184
  * Read a wallet's server-side label, or null on any error (unset, 404,
47
185
  * offline). Public read — no auth required.
@@ -1 +1 @@
1
- {"version":3,"file":"wallets.js","sourceRoot":"","sources":["../../src/namespaces/wallets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AASH,sFAAsF;AACtF,KAAK,UAAU,SAAS,CAAC,MAAc,EAAE,OAAe;IACtD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAC9B,eAAe,kBAAkB,CAAC,OAAO,CAAC,QAAQ,EAClD,EAAE,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,KAAK,EAAE,CACrD,CAAC;QACF,OAAO,GAAG,EAAE,KAAK,IAAI,IAAI,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,uFAAuF;AACvF,KAAK,UAAU,QAAQ,CAAC,MAAc,EAAE,OAAe,EAAE,KAAa;IACpE,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,CAClB,eAAe,kBAAkB,CAAC,OAAO,CAAC,QAAQ,EAClD,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,CACrF,CAAC;QACF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED,MAAM,OAAO,OAAO;IACW;IAA7B,YAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAE/C;;;OAGG;IACH,KAAK,CAAC,QAAQ,CAAC,OAAe;QAC5B,OAAO,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,YAAY;IACM;IAAiC;IAA9D,YAA6B,MAAc,EAAmB,OAAe;QAAhD,WAAM,GAAN,MAAM,CAAQ;QAAmB,YAAO,GAAP,OAAO,CAAQ;IAAG,CAAC;IAEjF,qDAAqD;IACrD,QAAQ;QACN,OAAO,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,sEAAsE;IACtE,QAAQ,CAAC,KAAa;QACpB,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;CACF"}
1
+ {"version":3,"file":"wallets.js","sourceRoot":"","sources":["../../src/namespaces/wallets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * `writeApproval` — the passkey-signed, target-scoped credential a person
3
+ * signed in on the command line needs to provision, deploy, or write secrets
4
+ * without a wallet. Reached as `r.writeApproval.*`.
5
+ *
6
+ * The ceremony: {@link WriteApproval.requestChallenge} opens a passkey approval
7
+ * scoped to one `(action, target)` and returns a same-origin `confirm_url`; the
8
+ * person approves with their passkey in the browser; the confirm page redirects
9
+ * to the CLI's `127.0.0.1` loopback with a one-time `code`;
10
+ * {@link WriteApproval.exchangeClaimCode} (PKCE) mints the token. The token is
11
+ * sent as `X-Run402-Write-Approval: Bearer <write_approval_token>` beside the
12
+ * sign-in session bearer, and dies with that session. A write approval never
13
+ * satisfies step-up.
14
+ *
15
+ * Isomorphic seams — the loopback server and PKCE generation live in the Node
16
+ * CLI (`run402 approve`).
17
+ */
18
+ import type { Client } from "../kernel.js";
19
+ import type { WriteApprovalCapability } from "../credentials.js";
20
+ /** Input to {@link WriteApproval.requestChallenge}. */
21
+ export interface WriteApprovalChallengeInput {
22
+ /** The capability to approve. Determines whether `orgId` or `projectId` is required. */
23
+ action: WriteApprovalCapability;
24
+ /** Required for `org.project.create`. */
25
+ orgId?: string;
26
+ /** Required for the project-scoped capabilities (`project.deploy`, `project.secret.write`, …). */
27
+ projectId?: string;
28
+ /** The CLI's loopback redirect, e.g. `http://127.0.0.1:54321/callback`. */
29
+ cliRedirectUri: string;
30
+ /** PKCE S256 challenge = base64url(sha256(verifier)). */
31
+ codeChallenge: string;
32
+ /** Opaque CSRF state echoed back on the loopback redirect. */
33
+ state: string;
34
+ /**
35
+ * The sign-in session bearer. Falls back to the client's default auth when
36
+ * omitted — pass it explicitly unless the client was constructed with
37
+ * sign-in session credentials.
38
+ */
39
+ token?: string;
40
+ }
41
+ /** Result of {@link WriteApproval.requestChallenge}. Forward-compatible. */
42
+ export interface WriteApprovalChallengeResult {
43
+ challenge_id: string;
44
+ confirm_url: string;
45
+ expires_at?: string;
46
+ action?: string;
47
+ org_id?: string | null;
48
+ project_id?: string | null;
49
+ delivery?: "cli_loopback" | "postmessage" | (string & {});
50
+ [key: string]: unknown;
51
+ }
52
+ /** Input to {@link WriteApproval.exchangeClaimCode}. */
53
+ export interface WriteApprovalClaimInput {
54
+ /** Authorization code received on the loopback redirect. */
55
+ code: string;
56
+ /** The PKCE verifier whose hash was sent as `codeChallenge`. */
57
+ codeVerifier: string;
58
+ /** Must match the `state` used at challenge time. */
59
+ state: string;
60
+ }
61
+ /** One write approval's metadata as the gateway reports it (never the token). */
62
+ export interface WriteApprovalSessionInfo {
63
+ write_approval_session_id: string;
64
+ authenticator_class?: string;
65
+ org_id?: string | null;
66
+ project_id?: string | null;
67
+ capabilities?: string[];
68
+ risk_ceiling?: string;
69
+ /** ISO-8601 idle expiry — the token's usable life. */
70
+ idle_expires_at?: string;
71
+ /** ISO-8601 absolute expiry. */
72
+ absolute_expires_at?: string;
73
+ [key: string]: unknown;
74
+ }
75
+ /** Minted write-approval token payload, returned ONCE. Forward-compatible. */
76
+ export interface WriteApprovalTokenResult {
77
+ write_approval_token: string;
78
+ /** Always `"write_approval"`. */
79
+ token_type?: string;
80
+ /** Always `"X-Run402-Write-Approval"`. */
81
+ header?: string;
82
+ session?: WriteApprovalSessionInfo | null;
83
+ [key: string]: unknown;
84
+ }
85
+ export declare class WriteApproval {
86
+ private readonly client;
87
+ constructor(client: Client);
88
+ /**
89
+ * Open a scoped approval (`POST /agent/v1/control-plane/write-approval/challenges`).
90
+ * Carries the sign-in session bearer; a `device`-grade session is refused.
91
+ */
92
+ requestChallenge(input: WriteApprovalChallengeInput): Promise<WriteApprovalChallengeResult>;
93
+ /**
94
+ * Exchange the loopback claim `code` (+ PKCE verifier + `state`) for the
95
+ * write-approval token (`POST …/write-approval/cli/token`). No `redirect_uri`
96
+ * — it is bound at challenge time. Unauthenticated (code + verifier are the
97
+ * credential); the minted token is still bound to the issuing sign-in session.
98
+ */
99
+ exchangeClaimCode(input: WriteApprovalClaimInput): Promise<WriteApprovalTokenResult>;
100
+ }
101
+ //# sourceMappingURL=write-approval.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-approval.d.ts","sourceRoot":"","sources":["../../src/namespaces/write-approval.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAEjE,uDAAuD;AACvD,MAAM,WAAW,2BAA2B;IAC1C,wFAAwF;IACxF,MAAM,EAAE,uBAAuB,CAAC;IAChC,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kGAAkG;IAClG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,cAAc,EAAE,MAAM,CAAC;IACvB,yDAAyD;IACzD,aAAa,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,4EAA4E;AAC5E,MAAM,WAAW,4BAA4B;IAC3C,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,EAAE,cAAc,GAAG,aAAa,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAC1D,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,wDAAwD;AACxD,MAAM,WAAW,uBAAuB;IACtC,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,YAAY,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;CACf;AAED,iFAAiF;AACjF,MAAM,WAAW,wBAAwB;IACvC,yBAAyB,EAAE,MAAM,CAAC;IAClC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sDAAsD;IACtD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gCAAgC;IAChC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,8EAA8E;AAC9E,MAAM,WAAW,wBAAwB;IACvC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,wBAAwB,GAAG,IAAI,CAAC;IAC1C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAE3C;;;OAGG;IACG,gBAAgB,CAAC,KAAK,EAAE,2BAA2B,GAAG,OAAO,CAAC,4BAA4B,CAAC;IAsBjG;;;;;OAKG;IACG,iBAAiB,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,wBAAwB,CAAC;CAW3F"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * `writeApproval` — the passkey-signed, target-scoped credential a person
3
+ * signed in on the command line needs to provision, deploy, or write secrets
4
+ * without a wallet. Reached as `r.writeApproval.*`.
5
+ *
6
+ * The ceremony: {@link WriteApproval.requestChallenge} opens a passkey approval
7
+ * scoped to one `(action, target)` and returns a same-origin `confirm_url`; the
8
+ * person approves with their passkey in the browser; the confirm page redirects
9
+ * to the CLI's `127.0.0.1` loopback with a one-time `code`;
10
+ * {@link WriteApproval.exchangeClaimCode} (PKCE) mints the token. The token is
11
+ * sent as `X-Run402-Write-Approval: Bearer <write_approval_token>` beside the
12
+ * sign-in session bearer, and dies with that session. A write approval never
13
+ * satisfies step-up.
14
+ *
15
+ * Isomorphic seams — the loopback server and PKCE generation live in the Node
16
+ * CLI (`run402 approve`).
17
+ */
18
+ export class WriteApproval {
19
+ client;
20
+ constructor(client) {
21
+ this.client = client;
22
+ }
23
+ /**
24
+ * Open a scoped approval (`POST /agent/v1/control-plane/write-approval/challenges`).
25
+ * Carries the sign-in session bearer; a `device`-grade session is refused.
26
+ */
27
+ async requestChallenge(input) {
28
+ const body = {
29
+ action: input.action,
30
+ cli_redirect_uri: input.cliRedirectUri,
31
+ code_challenge: input.codeChallenge,
32
+ state: input.state,
33
+ };
34
+ if (input.orgId !== undefined)
35
+ body.org_id = input.orgId;
36
+ if (input.projectId !== undefined)
37
+ body.project_id = input.projectId;
38
+ return this.client.request("/agent/v1/control-plane/write-approval/challenges", {
39
+ method: "POST",
40
+ body,
41
+ ...(input.token
42
+ ? { headers: { Authorization: `Bearer ${input.token}` }, withAuth: false }
43
+ : {}),
44
+ context: "requesting a write approval challenge",
45
+ });
46
+ }
47
+ /**
48
+ * Exchange the loopback claim `code` (+ PKCE verifier + `state`) for the
49
+ * write-approval token (`POST …/write-approval/cli/token`). No `redirect_uri`
50
+ * — it is bound at challenge time. Unauthenticated (code + verifier are the
51
+ * credential); the minted token is still bound to the issuing sign-in session.
52
+ */
53
+ async exchangeClaimCode(input) {
54
+ return this.client.request("/agent/v1/control-plane/write-approval/cli/token", {
55
+ method: "POST",
56
+ body: { code: input.code, code_verifier: input.codeVerifier, state: input.state },
57
+ withAuth: false,
58
+ context: "exchanging a write approval claim code",
59
+ });
60
+ }
61
+ }
62
+ //# sourceMappingURL=write-approval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-approval.js","sourceRoot":"","sources":["../../src/namespaces/write-approval.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AA2EH,MAAM,OAAO,aAAa;IACK;IAA7B,YAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAE/C;;;OAGG;IACH,KAAK,CAAC,gBAAgB,CAAC,KAAkC;QACvD,MAAM,IAAI,GAA4B;YACpC,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,gBAAgB,EAAE,KAAK,CAAC,cAAc;YACtC,cAAc,EAAE,KAAK,CAAC,aAAa;YACnC,KAAK,EAAE,KAAK,CAAC,KAAK;SACnB,CAAC;QACF,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;YAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;QACzD,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS;YAAE,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC;QACrE,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CACxB,mDAAmD,EACnD;YACE,MAAM,EAAE,MAAM;YACd,IAAI;YACJ,GAAG,CAAC,KAAK,CAAC,KAAK;gBACb,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE;gBAC1E,CAAC,CAAC,EAAE,CAAC;YACP,OAAO,EAAE,uCAAuC;SACjD,CACF,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,iBAAiB,CAAC,KAA8B;QACpD,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CACxB,kDAAkD,EAClD;YACE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;YACjF,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,wCAAwC;SAClD,CACF,CAAC;IACJ,CAAC;CACF"}
@@ -25,17 +25,17 @@ export declare class NodeActions implements Run402Actions {
25
25
  up(input?: Omit<Run402UpActionInput, "type">, opts?: Run402ActionRunOptions): Promise<Run402ActionResult<Run402UpResult>>;
26
26
  }
27
27
  /**
28
- * Slug a human project name into a claimable `<name>.run402.com` label
28
+ * Slug a human project name into an addable `<name>.run402.com` label
29
29
  * (3-63 chars, lowercase alphanumeric + hyphens), or null when it cannot be.
30
30
  */
31
31
  export declare function subdomainSlugFromProjectName(name: string | null | undefined): string | null;
32
32
  /**
33
33
  * The `missing_public_origin` remedy: a path check cannot resolve without a
34
34
  * public origin, and the fix is to bind a subdomain — either right now via
35
- * `run402 subdomains claim <name>` (which binds the live release with no
35
+ * `run402 subdomains add <name>` (which binds the live release with no
36
36
  * further flags) or declaratively in the manifest's `subdomains.set`.
37
37
  */
38
- export declare function claimSubdomainNextAction(projectName: string | null, checkId: string): Run402AppUpNextAction;
38
+ export declare function addSubdomainNextAction(projectName: string | null, checkId: string): Run402AppUpNextAction;
39
39
  /** Resolve only local destination intent. Approval and global active state are never selectors. */
40
40
  export declare function resolveDeploymentTarget(input: {
41
41
  appRoot: string;
@@ -1 +1 @@
1
- {"version":3,"file":"actions-node.d.ts","sourceRoot":"","sources":["../../src/node/actions-node.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAIV,kBAAkB,EAClB,sBAAsB,EACtB,aAAa,EAGb,kCAAkC,EAClC,wBAAwB,EACxB,mBAAmB,EACnB,cAAc,EAGf,MAAM,eAAe,CAAC;AAEvB,OAAO,EAaL,KAAK,qBAAqB,EAG3B,MAAM,cAAc,CAAC;AAGtB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAU1C,OAAO,KAAK,EAAkB,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvF,OAAO,KAAK,EAAY,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAUrE,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;AAEhE,MAAM,WAAW,kBAAkB;IACjC,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAwKD;;;GAGG;AAEH,qBAAa,WAAY,YAAW,aAAa;;IAE7C,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBADJ,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,kBAAuB;IAG1C,GAAG,CACP,KAAK,EAAE,kCAAkC,EACzC,IAAI,CAAC,EAAE,sBAAsB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;IACzC,GAAG,CACP,KAAK,EAAE,wBAAwB,EAC/B,IAAI,CAAC,EAAE,sBAAsB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;IACvC,GAAG,CACP,KAAK,EAAE,mBAAmB,EAC1B,IAAI,CAAC,EAAE,sBAAsB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;IA0CxC,EAAE,CACN,KAAK,GAAE,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAM,EAC7C,IAAI,CAAC,EAAE,sBAAsB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;CA8rE/C;AA6bD;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAU3F;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,qBAAqB,CAU3G;AA6jBD,mGAAmG;AACnG,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,OAAO,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACtH,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC/F,GAAG,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,UAAU,GAAG,gBAAgB,GAAG,UAAU,GAAG,QAAQ,GAAG,YAAY,CAAA;CAAE,CAAC,CAmBpJ"}
1
+ {"version":3,"file":"actions-node.d.ts","sourceRoot":"","sources":["../../src/node/actions-node.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAIV,kBAAkB,EAClB,sBAAsB,EACtB,aAAa,EAGb,kCAAkC,EAClC,wBAAwB,EACxB,mBAAmB,EACnB,cAAc,EAGf,MAAM,eAAe,CAAC;AAEvB,OAAO,EAaL,KAAK,qBAAqB,EAG3B,MAAM,cAAc,CAAC;AAGtB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAU1C,OAAO,KAAK,EAAkB,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvF,OAAO,KAAK,EAAY,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAUrE,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;AAEhE,MAAM,WAAW,kBAAkB;IACjC,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAwKD;;;GAGG;AAEH,qBAAa,WAAY,YAAW,aAAa;;IAE7C,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBADJ,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,kBAAuB;IAG1C,GAAG,CACP,KAAK,EAAE,kCAAkC,EACzC,IAAI,CAAC,EAAE,sBAAsB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;IACzC,GAAG,CACP,KAAK,EAAE,wBAAwB,EAC/B,IAAI,CAAC,EAAE,sBAAsB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;IACvC,GAAG,CACP,KAAK,EAAE,mBAAmB,EAC1B,IAAI,CAAC,EAAE,sBAAsB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;IA0CxC,EAAE,CACN,KAAK,GAAE,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAM,EAC7C,IAAI,CAAC,EAAE,sBAAsB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;CA8rE/C;AA6bD;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAU3F;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,qBAAqB,CAUzG;AA6jBD,mGAAmG;AACnG,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,OAAO,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACtH,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC/F,GAAG,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,UAAU,GAAG,gBAAgB,GAAG,UAAU,GAAG,QAAQ,GAAG,YAAY,CAAA;CAAE,CAAC,CAmBpJ"}