run402 2.19.1 → 2.21.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/cli.mjs +6 -0
- package/lib/email.mjs +35 -16
- package/lib/transfer.mjs +266 -0
- package/lib/webhooks.mjs +27 -16
- package/package.json +1 -1
- package/sdk/dist/errors.d.ts +30 -1
- package/sdk/dist/errors.d.ts.map +1 -1
- package/sdk/dist/errors.js +54 -0
- package/sdk/dist/errors.js.map +1 -1
- package/sdk/dist/index.d.ts +3 -1
- package/sdk/dist/index.d.ts.map +1 -1
- package/sdk/dist/index.js +2 -1
- package/sdk/dist/index.js.map +1 -1
- package/sdk/dist/kernel.d.ts.map +1 -1
- package/sdk/dist/kernel.js +10 -1
- package/sdk/dist/kernel.js.map +1 -1
- package/sdk/dist/namespaces/admin.d.ts +7 -0
- package/sdk/dist/namespaces/admin.d.ts.map +1 -1
- package/sdk/dist/namespaces/admin.js +8 -0
- package/sdk/dist/namespaces/admin.js.map +1 -1
- package/sdk/dist/namespaces/email.d.ts +65 -16
- package/sdk/dist/namespaces/email.d.ts.map +1 -1
- package/sdk/dist/namespaces/email.js +105 -106
- package/sdk/dist/namespaces/email.js.map +1 -1
- package/sdk/dist/namespaces/tier.d.ts +60 -0
- package/sdk/dist/namespaces/tier.d.ts.map +1 -1
- package/sdk/dist/namespaces/tier.js.map +1 -1
- package/sdk/dist/namespaces/transfers.d.ts +199 -0
- package/sdk/dist/namespaces/transfers.d.ts.map +1 -0
- package/sdk/dist/namespaces/transfers.js +115 -0
- package/sdk/dist/namespaces/transfers.js.map +1 -0
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `transfers` namespace — two-party SIWX-signed project transfer (v1.59).
|
|
3
|
+
*
|
|
4
|
+
* Exposed as `r.admin.transfers.*`. Phase 1A surface: initiate (owner-only),
|
|
5
|
+
* preview, accept (recipient), cancel (either party), and incoming/outgoing
|
|
6
|
+
* inboxes. The handoff is atomic at accept time: ownership flips, CI
|
|
7
|
+
* bindings are revoked, secret names carry over (values are NOT visible to
|
|
8
|
+
* the recipient before accept), and the project is decorated with a
|
|
9
|
+
* persistent `secrets_rotation_advised` advisory.
|
|
10
|
+
*
|
|
11
|
+
* Gateway endpoints:
|
|
12
|
+
* POST /projects/v1/:project_id/transfers — A initiates
|
|
13
|
+
* GET /agent/v1/transfers/incoming — B's inbox
|
|
14
|
+
* GET /agent/v1/transfers/outgoing — A's outbox
|
|
15
|
+
* GET /agent/v1/transfers/:transfer_id — preview (either party)
|
|
16
|
+
* POST /agent/v1/transfers/:transfer_id/accept — B accepts
|
|
17
|
+
* POST /agent/v1/transfers/:transfer_id/cancel — either party cancels
|
|
18
|
+
*
|
|
19
|
+
* Owner-side mutations against a project with a pending transfer return
|
|
20
|
+
* 409 `PROJECT_HAS_PENDING_TRANSFER`. The SDK kernel surfaces that as
|
|
21
|
+
* {@link TransferFreezeError} so agents can guide the user to cancel.
|
|
22
|
+
*/
|
|
23
|
+
import type { Client } from "../kernel.js";
|
|
24
|
+
/** Phase 1A only supports the `migrate` policy — B's wallet must already be on a billing account, and the project moves into it. */
|
|
25
|
+
export type TransferBillingPolicy = "migrate";
|
|
26
|
+
export type TransferStatus = "pending" | "accepted" | "cancelled" | "expired";
|
|
27
|
+
export type TransferCancelledBy = "from_wallet" | "to_wallet" | "system";
|
|
28
|
+
/** Inputs to `r.admin.transfers.initiate(...)`. */
|
|
29
|
+
export interface InitiateTransferInput {
|
|
30
|
+
/** Project id to transfer. Caller must currently own it (gateway re-checks against fresh DB, not cache). */
|
|
31
|
+
projectId: string;
|
|
32
|
+
/** Recipient wallet (any case — gateway lowercases). Must differ from the current owner. */
|
|
33
|
+
toWallet: string;
|
|
34
|
+
/**
|
|
35
|
+
* Billing policy. Defaults to `"migrate"`. Phase 1A only supports
|
|
36
|
+
* `"migrate"`; future phases may add `"inherit"` as a separate spec.
|
|
37
|
+
*/
|
|
38
|
+
billingPolicy?: TransferBillingPolicy;
|
|
39
|
+
/** Optional free-text note shown to the recipient in the preview + emails (HTML-escaped server-side). */
|
|
40
|
+
message?: string;
|
|
41
|
+
/** Optional KySigned record id (Phase 1A: informational only, stored verbatim, not verified). */
|
|
42
|
+
kysignedRecordId?: string;
|
|
43
|
+
}
|
|
44
|
+
export interface InitiateTransferResult {
|
|
45
|
+
transfer_id: string;
|
|
46
|
+
expires_at: string;
|
|
47
|
+
project_summary: {
|
|
48
|
+
project_id: string;
|
|
49
|
+
project_name: string | null;
|
|
50
|
+
billing_policy: TransferBillingPolicy;
|
|
51
|
+
from_wallet: string;
|
|
52
|
+
to_wallet: string;
|
|
53
|
+
};
|
|
54
|
+
your_unused_lease_days: number;
|
|
55
|
+
lease_refundable: false;
|
|
56
|
+
terms_sha256: string;
|
|
57
|
+
}
|
|
58
|
+
export interface AcceptTransferResult {
|
|
59
|
+
project_id: string;
|
|
60
|
+
from_wallet: string;
|
|
61
|
+
to_wallet: string;
|
|
62
|
+
new_billing_account_id: string | null;
|
|
63
|
+
completed_at: string;
|
|
64
|
+
secrets_rotation_advised: true;
|
|
65
|
+
/** Names of secrets that carried over with the project. Values are never returned. */
|
|
66
|
+
secret_names_inherited: string[];
|
|
67
|
+
secrets_count_inherited: number;
|
|
68
|
+
/** Verbatim reminder that GitHub repo ownership is NOT part of the transfer. */
|
|
69
|
+
github_repo_note: string;
|
|
70
|
+
}
|
|
71
|
+
export interface CancelTransferResult {
|
|
72
|
+
transfer_id: string;
|
|
73
|
+
status: "cancelled";
|
|
74
|
+
cancelled_by: TransferCancelledBy;
|
|
75
|
+
cancellation_reason: string | null;
|
|
76
|
+
cancelled_at: string;
|
|
77
|
+
}
|
|
78
|
+
/** Summary row used in `/agent/v1/transfers/incoming` and `/outgoing`. */
|
|
79
|
+
export interface TransferSummary {
|
|
80
|
+
transfer_id: string;
|
|
81
|
+
project_id: string;
|
|
82
|
+
project_name_snapshot: string | null;
|
|
83
|
+
from_wallet: string;
|
|
84
|
+
to_wallet: string;
|
|
85
|
+
billing_policy: TransferBillingPolicy;
|
|
86
|
+
message: string | null;
|
|
87
|
+
initiated_at: string;
|
|
88
|
+
expires_at: string;
|
|
89
|
+
kysigned_record_id: string | null;
|
|
90
|
+
/** API path for the full preview document. */
|
|
91
|
+
preview_path: string;
|
|
92
|
+
}
|
|
93
|
+
export interface ListTransfersOptions {
|
|
94
|
+
/** Page size; defaults to 50 on the gateway. */
|
|
95
|
+
limit?: number;
|
|
96
|
+
offset?: number;
|
|
97
|
+
}
|
|
98
|
+
export interface CustomDomainPreview {
|
|
99
|
+
hostname: string;
|
|
100
|
+
status: string | null;
|
|
101
|
+
}
|
|
102
|
+
export interface SubdomainPreview {
|
|
103
|
+
name: string;
|
|
104
|
+
status: string | null;
|
|
105
|
+
}
|
|
106
|
+
export interface FunctionPreview {
|
|
107
|
+
name: string;
|
|
108
|
+
runtime: string | null;
|
|
109
|
+
timeout_ms: number | null;
|
|
110
|
+
memory_mb: number | null;
|
|
111
|
+
scheduled: boolean;
|
|
112
|
+
}
|
|
113
|
+
export interface MailboxSummary {
|
|
114
|
+
count: number;
|
|
115
|
+
slugs_truncated: string[];
|
|
116
|
+
}
|
|
117
|
+
export interface CiBindingPreview {
|
|
118
|
+
id: string;
|
|
119
|
+
github_repository: string | null;
|
|
120
|
+
github_subject_pattern: string;
|
|
121
|
+
created_at: string;
|
|
122
|
+
}
|
|
123
|
+
export interface ContractWalletPreview {
|
|
124
|
+
/** Always an empty array in Phase 1A. Reserved for future project-scoped KMS wallets. */
|
|
125
|
+
address: string;
|
|
126
|
+
chain: string;
|
|
127
|
+
}
|
|
128
|
+
export interface BillingImplications {
|
|
129
|
+
from_billing_account_id: string | null;
|
|
130
|
+
target_billing_account_id: string | null;
|
|
131
|
+
tier: string | null;
|
|
132
|
+
secrets_count: number;
|
|
133
|
+
functions_count: number;
|
|
134
|
+
custom_domains_count: number;
|
|
135
|
+
}
|
|
136
|
+
export interface ProjectTransferPreview {
|
|
137
|
+
transfer_id: string;
|
|
138
|
+
project_id: string;
|
|
139
|
+
project_name_snapshot: string | null;
|
|
140
|
+
status: TransferStatus;
|
|
141
|
+
from_wallet: string;
|
|
142
|
+
from_wallet_display: string;
|
|
143
|
+
to_wallet: string;
|
|
144
|
+
to_wallet_display: string;
|
|
145
|
+
billing_policy: TransferBillingPolicy;
|
|
146
|
+
message: string | null;
|
|
147
|
+
initiated_at: string;
|
|
148
|
+
expires_at: string;
|
|
149
|
+
kysigned_record_id: string | null;
|
|
150
|
+
terms_sha256: string;
|
|
151
|
+
custom_domains: CustomDomainPreview[];
|
|
152
|
+
subdomains: SubdomainPreview[];
|
|
153
|
+
functions: FunctionPreview[];
|
|
154
|
+
/** Secret NAMES only — values are never returned. */
|
|
155
|
+
secret_names: string[];
|
|
156
|
+
mailbox_summary: MailboxSummary;
|
|
157
|
+
ci_bindings_to_be_revoked: CiBindingPreview[];
|
|
158
|
+
contract_wallets: ContractWalletPreview[];
|
|
159
|
+
github_repo_note: string;
|
|
160
|
+
billing_implications: BillingImplications;
|
|
161
|
+
}
|
|
162
|
+
export declare class Transfers {
|
|
163
|
+
private readonly client;
|
|
164
|
+
constructor(client: Client);
|
|
165
|
+
/**
|
|
166
|
+
* Initiate a two-party project transfer. Caller must currently own
|
|
167
|
+
* `projectId` (gateway re-reads owner from DB, not cache). Creates a
|
|
168
|
+
* `pending` row with a 72h expiry and freezes owner-side mutations on
|
|
169
|
+
* the project until the transfer is accepted, cancelled, or expires.
|
|
170
|
+
*/
|
|
171
|
+
initiate(input: InitiateTransferInput): Promise<InitiateTransferResult>;
|
|
172
|
+
/**
|
|
173
|
+
* Fetch the preview document for a pending or terminal transfer. The
|
|
174
|
+
* caller must be either the `from_wallet` or the `to_wallet`; other
|
|
175
|
+
* wallets receive 403. Preview lists secret NAMES (not values), custom
|
|
176
|
+
* domains, functions, CI bindings that will be revoked at accept, and
|
|
177
|
+
* the billing implications.
|
|
178
|
+
*/
|
|
179
|
+
preview(transferId: string): Promise<ProjectTransferPreview>;
|
|
180
|
+
/**
|
|
181
|
+
* Accept an incoming transfer. The caller's wallet must equal the
|
|
182
|
+
* transfer's `to_wallet`. The accept transaction atomically flips
|
|
183
|
+
* ownership, revokes A's CI bindings on the project, enqueues
|
|
184
|
+
* notifications to both parties, and stamps the persistent
|
|
185
|
+
* `secrets_rotation_advised` advisory on the project.
|
|
186
|
+
*/
|
|
187
|
+
accept(transferId: string): Promise<AcceptTransferResult>;
|
|
188
|
+
/**
|
|
189
|
+
* Cancel a pending transfer. The caller must be either the `from_wallet`
|
|
190
|
+
* or the `to_wallet`. Already-accepted/cancelled/expired transfers
|
|
191
|
+
* return 409 `TRANSFER_ALREADY_PROCESSED`.
|
|
192
|
+
*/
|
|
193
|
+
cancel(transferId: string, reason?: string): Promise<CancelTransferResult>;
|
|
194
|
+
/** Pending transfers OFFERED TO the authenticated wallet. */
|
|
195
|
+
listIncoming(opts?: ListTransfersOptions): Promise<TransferSummary[]>;
|
|
196
|
+
/** Pending transfers INITIATED BY the authenticated wallet. */
|
|
197
|
+
listOutgoing(opts?: ListTransfersOptions): Promise<TransferSummary[]>;
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=transfers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transfers.d.ts","sourceRoot":"","sources":["../../src/namespaces/transfers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `transfers` namespace — two-party SIWX-signed project transfer (v1.59).
|
|
3
|
+
*
|
|
4
|
+
* Exposed as `r.admin.transfers.*`. Phase 1A surface: initiate (owner-only),
|
|
5
|
+
* preview, accept (recipient), cancel (either party), and incoming/outgoing
|
|
6
|
+
* inboxes. The handoff is atomic at accept time: ownership flips, CI
|
|
7
|
+
* bindings are revoked, secret names carry over (values are NOT visible to
|
|
8
|
+
* the recipient before accept), and the project is decorated with a
|
|
9
|
+
* persistent `secrets_rotation_advised` advisory.
|
|
10
|
+
*
|
|
11
|
+
* Gateway endpoints:
|
|
12
|
+
* POST /projects/v1/:project_id/transfers — A initiates
|
|
13
|
+
* GET /agent/v1/transfers/incoming — B's inbox
|
|
14
|
+
* GET /agent/v1/transfers/outgoing — A's outbox
|
|
15
|
+
* GET /agent/v1/transfers/:transfer_id — preview (either party)
|
|
16
|
+
* POST /agent/v1/transfers/:transfer_id/accept — B accepts
|
|
17
|
+
* POST /agent/v1/transfers/:transfer_id/cancel — either party cancels
|
|
18
|
+
*
|
|
19
|
+
* Owner-side mutations against a project with a pending transfer return
|
|
20
|
+
* 409 `PROJECT_HAS_PENDING_TRANSFER`. The SDK kernel surfaces that as
|
|
21
|
+
* {@link TransferFreezeError} so agents can guide the user to cancel.
|
|
22
|
+
*/
|
|
23
|
+
// ─── Class ───────────────────────────────────────────────────────────────────
|
|
24
|
+
export class Transfers {
|
|
25
|
+
client;
|
|
26
|
+
constructor(client) {
|
|
27
|
+
this.client = client;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Initiate a two-party project transfer. Caller must currently own
|
|
31
|
+
* `projectId` (gateway re-reads owner from DB, not cache). Creates a
|
|
32
|
+
* `pending` row with a 72h expiry and freezes owner-side mutations on
|
|
33
|
+
* the project until the transfer is accepted, cancelled, or expires.
|
|
34
|
+
*/
|
|
35
|
+
async initiate(input) {
|
|
36
|
+
const body = { to_wallet: input.toWallet };
|
|
37
|
+
if (input.billingPolicy !== undefined)
|
|
38
|
+
body.billing_policy = input.billingPolicy;
|
|
39
|
+
if (input.message !== undefined)
|
|
40
|
+
body.message = input.message;
|
|
41
|
+
if (input.kysignedRecordId !== undefined)
|
|
42
|
+
body.kysigned_record_id = input.kysignedRecordId;
|
|
43
|
+
return this.client.request(`/projects/v1/${encodeURIComponent(input.projectId)}/transfers`, {
|
|
44
|
+
method: "POST",
|
|
45
|
+
body,
|
|
46
|
+
context: "initiating project transfer",
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Fetch the preview document for a pending or terminal transfer. The
|
|
51
|
+
* caller must be either the `from_wallet` or the `to_wallet`; other
|
|
52
|
+
* wallets receive 403. Preview lists secret NAMES (not values), custom
|
|
53
|
+
* domains, functions, CI bindings that will be revoked at accept, and
|
|
54
|
+
* the billing implications.
|
|
55
|
+
*/
|
|
56
|
+
async preview(transferId) {
|
|
57
|
+
return this.client.request(`/agent/v1/transfers/${encodeURIComponent(transferId)}`, { context: "previewing project transfer" });
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Accept an incoming transfer. The caller's wallet must equal the
|
|
61
|
+
* transfer's `to_wallet`. The accept transaction atomically flips
|
|
62
|
+
* ownership, revokes A's CI bindings on the project, enqueues
|
|
63
|
+
* notifications to both parties, and stamps the persistent
|
|
64
|
+
* `secrets_rotation_advised` advisory on the project.
|
|
65
|
+
*/
|
|
66
|
+
async accept(transferId) {
|
|
67
|
+
return this.client.request(`/agent/v1/transfers/${encodeURIComponent(transferId)}/accept`, {
|
|
68
|
+
method: "POST",
|
|
69
|
+
body: {},
|
|
70
|
+
context: "accepting project transfer",
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Cancel a pending transfer. The caller must be either the `from_wallet`
|
|
75
|
+
* or the `to_wallet`. Already-accepted/cancelled/expired transfers
|
|
76
|
+
* return 409 `TRANSFER_ALREADY_PROCESSED`.
|
|
77
|
+
*/
|
|
78
|
+
async cancel(transferId, reason) {
|
|
79
|
+
const body = {};
|
|
80
|
+
if (reason !== undefined)
|
|
81
|
+
body.reason = reason;
|
|
82
|
+
return this.client.request(`/agent/v1/transfers/${encodeURIComponent(transferId)}/cancel`, {
|
|
83
|
+
method: "POST",
|
|
84
|
+
body,
|
|
85
|
+
context: "cancelling project transfer",
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
/** Pending transfers OFFERED TO the authenticated wallet. */
|
|
89
|
+
async listIncoming(opts = {}) {
|
|
90
|
+
const q = buildPagination(opts);
|
|
91
|
+
const path = q ? `/agent/v1/transfers/incoming?${q}` : "/agent/v1/transfers/incoming";
|
|
92
|
+
const res = await this.client.request(path, {
|
|
93
|
+
context: "listing incoming transfers",
|
|
94
|
+
});
|
|
95
|
+
return res.transfers;
|
|
96
|
+
}
|
|
97
|
+
/** Pending transfers INITIATED BY the authenticated wallet. */
|
|
98
|
+
async listOutgoing(opts = {}) {
|
|
99
|
+
const q = buildPagination(opts);
|
|
100
|
+
const path = q ? `/agent/v1/transfers/outgoing?${q}` : "/agent/v1/transfers/outgoing";
|
|
101
|
+
const res = await this.client.request(path, {
|
|
102
|
+
context: "listing outgoing transfers",
|
|
103
|
+
});
|
|
104
|
+
return res.transfers;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function buildPagination(opts) {
|
|
108
|
+
const parts = [];
|
|
109
|
+
if (opts.limit !== undefined)
|
|
110
|
+
parts.push(`limit=${encodeURIComponent(String(opts.limit))}`);
|
|
111
|
+
if (opts.offset !== undefined)
|
|
112
|
+
parts.push(`offset=${encodeURIComponent(String(opts.offset))}`);
|
|
113
|
+
return parts.join("&");
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=transfers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transfers.js","sourceRoot":"","sources":["../../src/namespaces/transfers.ts"],"names":[],"mappings":"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"}
|