run402 1.40.1 → 1.40.2

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 (121) hide show
  1. package/lib/sdk.mjs +1 -1
  2. package/package.json +4 -3
  3. package/sdk/core-dist/allowance-auth.js +129 -0
  4. package/sdk/core-dist/allowance.js +25 -0
  5. package/sdk/core-dist/client.js +42 -0
  6. package/sdk/core-dist/config.js +26 -0
  7. package/sdk/core-dist/keystore.js +97 -0
  8. package/sdk/core-dist/wallet-auth.js +62 -0
  9. package/sdk/core-dist/wallet.js +25 -0
  10. package/sdk/dist/credentials.d.ts +70 -0
  11. package/sdk/dist/credentials.d.ts.map +1 -0
  12. package/sdk/dist/credentials.js +19 -0
  13. package/sdk/dist/credentials.js.map +1 -0
  14. package/sdk/dist/errors.d.ts +34 -0
  15. package/sdk/dist/errors.d.ts.map +1 -0
  16. package/sdk/dist/errors.js +46 -0
  17. package/sdk/dist/errors.js.map +1 -0
  18. package/sdk/dist/index.d.ts +68 -0
  19. package/sdk/dist/index.d.ts.map +1 -0
  20. package/sdk/dist/index.js +81 -0
  21. package/sdk/dist/index.js.map +1 -0
  22. package/sdk/dist/kernel.d.ts +47 -0
  23. package/sdk/dist/kernel.d.ts.map +1 -0
  24. package/sdk/dist/kernel.js +76 -0
  25. package/sdk/dist/kernel.js.map +1 -0
  26. package/sdk/dist/namespaces/admin.d.ts +30 -0
  27. package/sdk/dist/namespaces/admin.d.ts.map +1 -0
  28. package/sdk/dist/namespaces/admin.js +36 -0
  29. package/sdk/dist/namespaces/admin.js.map +1 -0
  30. package/sdk/dist/namespaces/ai.d.ts +57 -0
  31. package/sdk/dist/namespaces/ai.d.ts.map +1 -0
  32. package/sdk/dist/namespaces/ai.js +62 -0
  33. package/sdk/dist/namespaces/ai.js.map +1 -0
  34. package/sdk/dist/namespaces/allowance.d.ts +51 -0
  35. package/sdk/dist/namespaces/allowance.d.ts.map +1 -0
  36. package/sdk/dist/namespaces/allowance.js +116 -0
  37. package/sdk/dist/namespaces/allowance.js.map +1 -0
  38. package/sdk/dist/namespaces/apps.d.ts +158 -0
  39. package/sdk/dist/namespaces/apps.d.ts.map +1 -0
  40. package/sdk/dist/namespaces/apps.js +150 -0
  41. package/sdk/dist/namespaces/apps.js.map +1 -0
  42. package/sdk/dist/namespaces/auth.d.ts +53 -0
  43. package/sdk/dist/namespaces/auth.d.ts.map +1 -0
  44. package/sdk/dist/namespaces/auth.js +106 -0
  45. package/sdk/dist/namespaces/auth.js.map +1 -0
  46. package/sdk/dist/namespaces/billing.d.ts +64 -0
  47. package/sdk/dist/namespaces/billing.d.ts.map +1 -0
  48. package/sdk/dist/namespaces/billing.js +105 -0
  49. package/sdk/dist/namespaces/billing.js.map +1 -0
  50. package/sdk/dist/namespaces/blobs.d.ts +41 -0
  51. package/sdk/dist/namespaces/blobs.d.ts.map +1 -0
  52. package/sdk/dist/namespaces/blobs.js +202 -0
  53. package/sdk/dist/namespaces/blobs.js.map +1 -0
  54. package/sdk/dist/namespaces/blobs.types.d.ts +58 -0
  55. package/sdk/dist/namespaces/blobs.types.d.ts.map +1 -0
  56. package/sdk/dist/namespaces/blobs.types.js +9 -0
  57. package/sdk/dist/namespaces/blobs.types.js.map +1 -0
  58. package/sdk/dist/namespaces/contracts.d.ts +65 -0
  59. package/sdk/dist/namespaces/contracts.d.ts.map +1 -0
  60. package/sdk/dist/namespaces/contracts.js +163 -0
  61. package/sdk/dist/namespaces/contracts.js.map +1 -0
  62. package/sdk/dist/namespaces/domains.d.ts +57 -0
  63. package/sdk/dist/namespaces/domains.d.ts.map +1 -0
  64. package/sdk/dist/namespaces/domains.js +60 -0
  65. package/sdk/dist/namespaces/domains.js.map +1 -0
  66. package/sdk/dist/namespaces/email.d.ts +131 -0
  67. package/sdk/dist/namespaces/email.d.ts.map +1 -0
  68. package/sdk/dist/namespaces/email.js +318 -0
  69. package/sdk/dist/namespaces/email.js.map +1 -0
  70. package/sdk/dist/namespaces/functions.d.ts +43 -0
  71. package/sdk/dist/namespaces/functions.d.ts.map +1 -0
  72. package/sdk/dist/namespaces/functions.js +146 -0
  73. package/sdk/dist/namespaces/functions.js.map +1 -0
  74. package/sdk/dist/namespaces/functions.types.d.ts +96 -0
  75. package/sdk/dist/namespaces/functions.types.d.ts.map +1 -0
  76. package/sdk/dist/namespaces/functions.types.js +6 -0
  77. package/sdk/dist/namespaces/functions.types.js.map +1 -0
  78. package/sdk/dist/namespaces/projects.d.ts +97 -0
  79. package/sdk/dist/namespaces/projects.d.ts.map +1 -0
  80. package/sdk/dist/namespaces/projects.js +214 -0
  81. package/sdk/dist/namespaces/projects.js.map +1 -0
  82. package/sdk/dist/namespaces/projects.types.d.ts +112 -0
  83. package/sdk/dist/namespaces/projects.types.d.ts.map +1 -0
  84. package/sdk/dist/namespaces/projects.types.js +9 -0
  85. package/sdk/dist/namespaces/projects.types.js.map +1 -0
  86. package/sdk/dist/namespaces/secrets.d.ts +23 -0
  87. package/sdk/dist/namespaces/secrets.d.ts.map +1 -0
  88. package/sdk/dist/namespaces/secrets.js +45 -0
  89. package/sdk/dist/namespaces/secrets.js.map +1 -0
  90. package/sdk/dist/namespaces/sender-domain.d.ts +40 -0
  91. package/sdk/dist/namespaces/sender-domain.d.ts.map +1 -0
  92. package/sdk/dist/namespaces/sender-domain.js +69 -0
  93. package/sdk/dist/namespaces/sender-domain.js.map +1 -0
  94. package/sdk/dist/namespaces/service.d.ts +51 -0
  95. package/sdk/dist/namespaces/service.d.ts.map +1 -0
  96. package/sdk/dist/namespaces/service.js +25 -0
  97. package/sdk/dist/namespaces/service.js.map +1 -0
  98. package/sdk/dist/namespaces/sites.d.ts +50 -0
  99. package/sdk/dist/namespaces/sites.d.ts.map +1 -0
  100. package/sdk/dist/namespaces/sites.js +38 -0
  101. package/sdk/dist/namespaces/sites.js.map +1 -0
  102. package/sdk/dist/namespaces/subdomains.d.ts +36 -0
  103. package/sdk/dist/namespaces/subdomains.d.ts.map +1 -0
  104. package/sdk/dist/namespaces/subdomains.js +54 -0
  105. package/sdk/dist/namespaces/subdomains.js.map +1 -0
  106. package/sdk/dist/namespaces/tier.d.ts +36 -0
  107. package/sdk/dist/namespaces/tier.d.ts.map +1 -0
  108. package/sdk/dist/namespaces/tier.js +31 -0
  109. package/sdk/dist/namespaces/tier.js.map +1 -0
  110. package/sdk/dist/node/credentials.d.ts +26 -0
  111. package/sdk/dist/node/credentials.d.ts.map +1 -0
  112. package/sdk/dist/node/credentials.js +69 -0
  113. package/sdk/dist/node/credentials.js.map +1 -0
  114. package/sdk/dist/node/index.d.ts +44 -0
  115. package/sdk/dist/node/index.d.ts.map +1 -0
  116. package/sdk/dist/node/index.js +43 -0
  117. package/sdk/dist/node/index.js.map +1 -0
  118. package/sdk/dist/node/paid-fetch.d.ts +22 -0
  119. package/sdk/dist/node/paid-fetch.d.ts.map +1 -0
  120. package/sdk/dist/node/paid-fetch.js +116 -0
  121. package/sdk/dist/node/paid-fetch.js.map +1 -0
@@ -0,0 +1,97 @@
1
+ /**
2
+ * `projects` namespace — project lifecycle, introspection, and admin.
3
+ *
4
+ * Covers:
5
+ * - remote: provision, delete, list, getUsage, getSchema, setupRls, pin, getQuote
6
+ * - local: info, keys, use (require provider support for persistence methods)
7
+ */
8
+ import type { Client } from "../kernel.js";
9
+ import type { ProjectKeys } from "../credentials.js";
10
+ import type { ListProjectsResult, PinResult, ProjectInfo, ProvisionOptions, ProvisionResult, QuoteResult, RlsSetupOptions, RlsSetupResult, SchemaReport, UsageReport } from "./projects.types.js";
11
+ export declare class Projects {
12
+ private readonly client;
13
+ constructor(client: Client);
14
+ /**
15
+ * Provision a new Postgres project. Requires allowance auth; payment
16
+ * flows through the configured fetch wrapper (x402 in Node, session
17
+ * budget in sandbox). Returned keys are persisted to the local store
18
+ * when the credential provider supports it.
19
+ *
20
+ * @throws {PaymentRequired} when the wallet has insufficient balance and
21
+ * the fetch wrapper cannot sign the 402 retry.
22
+ */
23
+ provision(opts?: ProvisionOptions): Promise<ProvisionResult>;
24
+ /**
25
+ * Immediately and irreversibly delete a project. Triggers the full
26
+ * destructive cascade (drop tenant schema, delete Lambda functions,
27
+ * release subdomains, tombstone mailbox, wipe secrets). Local keystore
28
+ * is cleaned via the credential provider when supported.
29
+ *
30
+ * @throws {ProjectNotFound} if the id is unknown to the provider.
31
+ */
32
+ delete(id: string): Promise<void>;
33
+ /**
34
+ * List active projects for a wallet address. Public endpoint — no auth
35
+ * required, no payment.
36
+ */
37
+ list(wallet: string): Promise<ListProjectsResult>;
38
+ /**
39
+ * Get usage metrics for a project — API calls, storage, tier limits,
40
+ * lease expiry.
41
+ */
42
+ getUsage(id: string): Promise<UsageReport>;
43
+ /**
44
+ * Introspect the project's database schema — tables, columns, types,
45
+ * constraints, and RLS policies.
46
+ */
47
+ getSchema(id: string): Promise<SchemaReport>;
48
+ /**
49
+ * Apply a row-level-security template to one or more tables.
50
+ *
51
+ * ⚠ The gateway endpoint is deprecated (sunset 2026-05-23). Prefer the
52
+ * manifest-based `apply_expose` flow for new code.
53
+ *
54
+ * @throws {Run402Error} with `context: "setting up RLS"` when
55
+ * `i_understand_this_is_unrestricted` is missing for the
56
+ * `public_read_write_UNRESTRICTED` template.
57
+ */
58
+ setupRls(id: string, opts: RlsSetupOptions): Promise<RlsSetupResult>;
59
+ /**
60
+ * Pin a project so it is not garbage-collected or expired. Requires
61
+ * admin-level credentials (operator-only in production).
62
+ */
63
+ pin(id: string): Promise<PinResult>;
64
+ /**
65
+ * Get tier pricing — prices, lease durations, storage limits, API-call
66
+ * limits. Public, no auth, no payment.
67
+ */
68
+ getQuote(): Promise<QuoteResult>;
69
+ /**
70
+ * Inspect a project from local state. Combines the project id with the
71
+ * stored keys. Does not make an API call.
72
+ *
73
+ * @throws {ProjectNotFound} if the id is unknown to the provider.
74
+ */
75
+ info(id: string): Promise<ProjectInfo>;
76
+ /**
77
+ * Return the stored anon/service keys for a project from local state.
78
+ * Does not make an API call.
79
+ *
80
+ * @throws {ProjectNotFound} if the id is unknown to the provider.
81
+ */
82
+ keys(id: string): Promise<ProjectKeys>;
83
+ /**
84
+ * Set the active/default project in local state. Requires the credential
85
+ * provider to support `setActiveProject`.
86
+ *
87
+ * @throws {ProjectNotFound} if the id is unknown to the provider.
88
+ * @throws {Error} if the provider does not support active-project state.
89
+ */
90
+ use(id: string): Promise<void>;
91
+ /**
92
+ * Return the active/default project id in local state, or null when none
93
+ * is set or the provider does not track active-project state.
94
+ */
95
+ active(): Promise<string | null>;
96
+ }
97
+ //# sourceMappingURL=projects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/namespaces/projects.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,KAAK,EACV,kBAAkB,EAClB,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,eAAe,EACf,cAAc,EACd,YAAY,EACZ,WAAW,EACZ,MAAM,qBAAqB,CAAC;AAE7B,qBAAa,QAAQ;IACP,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAE3C;;;;;;;;OAQG;IACG,SAAS,CAAC,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC;IAyBtE;;;;;;;OAOG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAcvC;;;OAGG;IACG,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAQvD;;;OAGG;IACG,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAUhD;;;OAGG;IACG,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAUlD;;;;;;;;;OASG;IACG,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAgC1E;;;OAGG;IACG,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAWzC;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAC;IAOtC;;;;;OAKG;IACG,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAM5C;;;;;OAKG;IACG,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAM5C;;;;;;OAMG;IACG,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAapC;;;OAGG;IACG,MAAM,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAKvC"}
@@ -0,0 +1,214 @@
1
+ /**
2
+ * `projects` namespace — project lifecycle, introspection, and admin.
3
+ *
4
+ * Covers:
5
+ * - remote: provision, delete, list, getUsage, getSchema, setupRls, pin, getQuote
6
+ * - local: info, keys, use (require provider support for persistence methods)
7
+ */
8
+ import { ProjectNotFound, Run402Error } from "../errors.js";
9
+ export class Projects {
10
+ client;
11
+ constructor(client) {
12
+ this.client = client;
13
+ }
14
+ /**
15
+ * Provision a new Postgres project. Requires allowance auth; payment
16
+ * flows through the configured fetch wrapper (x402 in Node, session
17
+ * budget in sandbox). Returned keys are persisted to the local store
18
+ * when the credential provider supports it.
19
+ *
20
+ * @throws {PaymentRequired} when the wallet has insufficient balance and
21
+ * the fetch wrapper cannot sign the 402 retry.
22
+ */
23
+ async provision(opts = {}) {
24
+ const body = {};
25
+ if (opts.tier !== undefined)
26
+ body.tier = opts.tier;
27
+ if (opts.name !== undefined)
28
+ body.name = opts.name;
29
+ const result = await this.client.request("/projects/v1", {
30
+ method: "POST",
31
+ body,
32
+ context: "provisioning project",
33
+ });
34
+ // Persist the new project and set it active, if the provider supports it.
35
+ const creds = this.client.credentials;
36
+ if (creds.saveProject) {
37
+ await creds.saveProject(result.project_id, {
38
+ anon_key: result.anon_key,
39
+ service_key: result.service_key,
40
+ });
41
+ }
42
+ if (creds.setActiveProject) {
43
+ await creds.setActiveProject(result.project_id);
44
+ }
45
+ return result;
46
+ }
47
+ /**
48
+ * Immediately and irreversibly delete a project. Triggers the full
49
+ * destructive cascade (drop tenant schema, delete Lambda functions,
50
+ * release subdomains, tombstone mailbox, wipe secrets). Local keystore
51
+ * is cleaned via the credential provider when supported.
52
+ *
53
+ * @throws {ProjectNotFound} if the id is unknown to the provider.
54
+ */
55
+ async delete(id) {
56
+ const keys = await this.client.getProject(id);
57
+ if (!keys)
58
+ throw new ProjectNotFound(id, "deleting project");
59
+ await this.client.request(`/projects/v1/${id}`, {
60
+ method: "DELETE",
61
+ headers: { Authorization: `Bearer ${keys.service_key}` },
62
+ context: "deleting project",
63
+ });
64
+ const creds = this.client.credentials;
65
+ if (creds.removeProject)
66
+ await creds.removeProject(id);
67
+ }
68
+ /**
69
+ * List active projects for a wallet address. Public endpoint — no auth
70
+ * required, no payment.
71
+ */
72
+ async list(wallet) {
73
+ const w = wallet.toLowerCase();
74
+ return this.client.request(`/wallets/v1/${w}/projects`, {
75
+ context: "listing projects",
76
+ withAuth: false,
77
+ });
78
+ }
79
+ /**
80
+ * Get usage metrics for a project — API calls, storage, tier limits,
81
+ * lease expiry.
82
+ */
83
+ async getUsage(id) {
84
+ const keys = await this.client.getProject(id);
85
+ if (!keys)
86
+ throw new ProjectNotFound(id, "fetching usage");
87
+ return this.client.request(`/projects/v1/admin/${id}/usage`, {
88
+ headers: { Authorization: `Bearer ${keys.service_key}` },
89
+ context: "fetching usage",
90
+ });
91
+ }
92
+ /**
93
+ * Introspect the project's database schema — tables, columns, types,
94
+ * constraints, and RLS policies.
95
+ */
96
+ async getSchema(id) {
97
+ const keys = await this.client.getProject(id);
98
+ if (!keys)
99
+ throw new ProjectNotFound(id, "fetching schema");
100
+ return this.client.request(`/projects/v1/admin/${id}/schema`, {
101
+ headers: { Authorization: `Bearer ${keys.service_key}` },
102
+ context: "fetching schema",
103
+ });
104
+ }
105
+ /**
106
+ * Apply a row-level-security template to one or more tables.
107
+ *
108
+ * ⚠ The gateway endpoint is deprecated (sunset 2026-05-23). Prefer the
109
+ * manifest-based `apply_expose` flow for new code.
110
+ *
111
+ * @throws {Run402Error} with `context: "setting up RLS"` when
112
+ * `i_understand_this_is_unrestricted` is missing for the
113
+ * `public_read_write_UNRESTRICTED` template.
114
+ */
115
+ async setupRls(id, opts) {
116
+ if (opts.template === "public_read_write_UNRESTRICTED" &&
117
+ opts.i_understand_this_is_unrestricted !== true) {
118
+ throw new (class extends Run402Error {
119
+ })("i_understand_this_is_unrestricted must be true when template is public_read_write_UNRESTRICTED", null, null, "setting up RLS");
120
+ }
121
+ const keys = await this.client.getProject(id);
122
+ if (!keys)
123
+ throw new ProjectNotFound(id, "setting up RLS");
124
+ const body = {
125
+ template: opts.template,
126
+ tables: opts.tables,
127
+ };
128
+ if (opts.i_understand_this_is_unrestricted !== undefined) {
129
+ body.i_understand_this_is_unrestricted = opts.i_understand_this_is_unrestricted;
130
+ }
131
+ return this.client.request(`/projects/v1/admin/${id}/rls`, {
132
+ method: "POST",
133
+ headers: { Authorization: `Bearer ${keys.service_key}` },
134
+ body,
135
+ context: "setting up RLS",
136
+ });
137
+ }
138
+ /**
139
+ * Pin a project so it is not garbage-collected or expired. Requires
140
+ * admin-level credentials (operator-only in production).
141
+ */
142
+ async pin(id) {
143
+ const keys = await this.client.getProject(id);
144
+ if (!keys)
145
+ throw new ProjectNotFound(id, "pinning project");
146
+ return this.client.request(`/projects/v1/admin/${id}/pin`, {
147
+ method: "POST",
148
+ headers: { Authorization: `Bearer ${keys.service_key}` },
149
+ context: "pinning project",
150
+ });
151
+ }
152
+ /**
153
+ * Get tier pricing — prices, lease durations, storage limits, API-call
154
+ * limits. Public, no auth, no payment.
155
+ */
156
+ async getQuote() {
157
+ return this.client.request("/tiers/v1", {
158
+ context: "getting quote",
159
+ withAuth: false,
160
+ });
161
+ }
162
+ /**
163
+ * Inspect a project from local state. Combines the project id with the
164
+ * stored keys. Does not make an API call.
165
+ *
166
+ * @throws {ProjectNotFound} if the id is unknown to the provider.
167
+ */
168
+ async info(id) {
169
+ const keys = await this.client.getProject(id);
170
+ if (!keys)
171
+ throw new ProjectNotFound(id, "fetching project info");
172
+ return { project_id: id, ...keys };
173
+ }
174
+ /**
175
+ * Return the stored anon/service keys for a project from local state.
176
+ * Does not make an API call.
177
+ *
178
+ * @throws {ProjectNotFound} if the id is unknown to the provider.
179
+ */
180
+ async keys(id) {
181
+ const keys = await this.client.getProject(id);
182
+ if (!keys)
183
+ throw new ProjectNotFound(id, "fetching project keys");
184
+ return keys;
185
+ }
186
+ /**
187
+ * Set the active/default project in local state. Requires the credential
188
+ * provider to support `setActiveProject`.
189
+ *
190
+ * @throws {ProjectNotFound} if the id is unknown to the provider.
191
+ * @throws {Error} if the provider does not support active-project state.
192
+ */
193
+ async use(id) {
194
+ const keys = await this.client.getProject(id);
195
+ if (!keys)
196
+ throw new ProjectNotFound(id, "setting active project");
197
+ const setter = this.client.credentials.setActiveProject;
198
+ if (!setter) {
199
+ throw new Error("This credential provider does not support setActiveProject — `use` is only available with providers that track local active-project state.");
200
+ }
201
+ await setter.call(this.client.credentials, id);
202
+ }
203
+ /**
204
+ * Return the active/default project id in local state, or null when none
205
+ * is set or the provider does not track active-project state.
206
+ */
207
+ async active() {
208
+ const getter = this.client.credentials.getActiveProject;
209
+ if (!getter)
210
+ return null;
211
+ return getter.call(this.client.credentials);
212
+ }
213
+ }
214
+ //# sourceMappingURL=projects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/namespaces/projects.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Request and response types for the `projects` namespace.
3
+ *
4
+ * These types map to the shapes of the run402 API endpoints exposed by
5
+ * the gateway. They are intentionally not re-used from the gateway source
6
+ * (private repo) — the SDK version is the canonical client-side contract.
7
+ */
8
+ import type { ProjectKeys } from "../credentials.js";
9
+ export type ProjectTier = "prototype" | "hobby" | "team";
10
+ export interface ProvisionOptions {
11
+ /** Tier determines price, lease length, storage, and API-call limits. Default: "prototype". */
12
+ tier?: ProjectTier;
13
+ /** Optional display name. Auto-generated when omitted. */
14
+ name?: string;
15
+ }
16
+ export interface ProvisionResult {
17
+ project_id: string;
18
+ anon_key: string;
19
+ service_key: string;
20
+ schema_slot: string;
21
+ }
22
+ export interface ProjectSummary {
23
+ id: string;
24
+ name: string;
25
+ tier: string;
26
+ status: string;
27
+ api_calls: number;
28
+ storage_bytes: number;
29
+ lease_expires_at: string;
30
+ created_at: string;
31
+ }
32
+ export interface ListProjectsResult {
33
+ wallet: string;
34
+ projects: ProjectSummary[];
35
+ }
36
+ export interface UsageReport {
37
+ project_id: string;
38
+ tier: string;
39
+ api_calls: number;
40
+ api_calls_limit: number;
41
+ storage_bytes: number;
42
+ storage_limit_bytes: number;
43
+ lease_expires_at: string;
44
+ status: string;
45
+ }
46
+ export interface ColumnSchema {
47
+ name: string;
48
+ type: string;
49
+ nullable: boolean;
50
+ default_value: string | null;
51
+ }
52
+ export interface ConstraintSchema {
53
+ name: string;
54
+ type: string;
55
+ definition: string;
56
+ }
57
+ export interface RlsPolicy {
58
+ name: string;
59
+ command: string;
60
+ using_expression: string | null;
61
+ check_expression: string | null;
62
+ }
63
+ export interface TableSchema {
64
+ name: string;
65
+ columns: ColumnSchema[];
66
+ constraints: ConstraintSchema[];
67
+ rls_enabled: boolean;
68
+ policies: RlsPolicy[];
69
+ }
70
+ export interface SchemaReport {
71
+ schema: string;
72
+ tables: TableSchema[];
73
+ }
74
+ export type RlsTemplate = "user_owns_rows" | "public_read_authenticated_write" | "public_read_write_UNRESTRICTED";
75
+ export interface RlsTableSpec {
76
+ /** Table name (unqualified — the project's schema is implicit). */
77
+ table: string;
78
+ /** Column holding the owning user's id. Required when `template: "user_owns_rows"`. */
79
+ owner_column?: string;
80
+ }
81
+ export interface RlsSetupOptions {
82
+ template: RlsTemplate;
83
+ tables: RlsTableSpec[];
84
+ /**
85
+ * Required to be `true` when `template: "public_read_write_UNRESTRICTED"`.
86
+ * Acknowledges that the anon key gains INSERT/UPDATE/DELETE on the listed tables.
87
+ */
88
+ i_understand_this_is_unrestricted?: boolean;
89
+ }
90
+ export interface RlsSetupResult {
91
+ status: string;
92
+ template: string;
93
+ tables: string[];
94
+ }
95
+ export interface PinResult {
96
+ status: string;
97
+ project_id: string;
98
+ message?: string;
99
+ }
100
+ export interface TierQuote {
101
+ price: string;
102
+ lease_days: number;
103
+ storage_mb: number;
104
+ api_calls: number;
105
+ }
106
+ export interface QuoteResult {
107
+ tiers: Record<string, TierQuote>;
108
+ }
109
+ export interface ProjectInfo extends ProjectKeys {
110
+ project_id: string;
111
+ }
112
+ //# sourceMappingURL=projects.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.types.d.ts","sourceRoot":"","sources":["../../src/namespaces/projects.types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Request and response types for the `projects` namespace.
3
+ *
4
+ * These types map to the shapes of the run402 API endpoints exposed by
5
+ * the gateway. They are intentionally not re-used from the gateway source
6
+ * (private repo) — the SDK version is the canonical client-side contract.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=projects.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.types.js","sourceRoot":"","sources":["../../src/namespaces/projects.types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * `secrets` namespace — project-scoped environment variables for functions.
3
+ * All methods require the project's service key.
4
+ */
5
+ import type { Client } from "../kernel.js";
6
+ export interface SecretSummary {
7
+ key: string;
8
+ value_hash?: string;
9
+ }
10
+ export interface SecretListResult {
11
+ secrets: SecretSummary[];
12
+ }
13
+ export declare class Secrets {
14
+ private readonly client;
15
+ constructor(client: Client);
16
+ /** Set or overwrite a project secret. Injected as `process.env.KEY` in deployed functions. */
17
+ set(projectId: string, key: string, value: string): Promise<void>;
18
+ /** List secret keys for a project. Values are not returned — only key names and short hashes. */
19
+ list(projectId: string): Promise<SecretListResult>;
20
+ /** Delete a secret. */
21
+ delete(projectId: string, key: string): Promise<void>;
22
+ }
23
+ //# sourceMappingURL=secrets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../src/namespaces/secrets.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAG3C,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED,qBAAa,OAAO;IACN,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAE3C,8FAA8F;IACxF,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAevE,iGAAiG;IAC3F,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAaxD,uBAAuB;IACjB,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAa5D"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * `secrets` namespace — project-scoped environment variables for functions.
3
+ * All methods require the project's service key.
4
+ */
5
+ import { ProjectNotFound } from "../errors.js";
6
+ export class Secrets {
7
+ client;
8
+ constructor(client) {
9
+ this.client = client;
10
+ }
11
+ /** Set or overwrite a project secret. Injected as `process.env.KEY` in deployed functions. */
12
+ async set(projectId, key, value) {
13
+ const project = await this.client.getProject(projectId);
14
+ if (!project)
15
+ throw new ProjectNotFound(projectId, "setting secret");
16
+ await this.client.request(`/projects/v1/admin/${projectId}/secrets`, {
17
+ method: "POST",
18
+ headers: { Authorization: `Bearer ${project.service_key}` },
19
+ body: { key, value },
20
+ context: "setting secret",
21
+ });
22
+ }
23
+ /** List secret keys for a project. Values are not returned — only key names and short hashes. */
24
+ async list(projectId) {
25
+ const project = await this.client.getProject(projectId);
26
+ if (!project)
27
+ throw new ProjectNotFound(projectId, "listing secrets");
28
+ return this.client.request(`/projects/v1/admin/${projectId}/secrets`, {
29
+ headers: { Authorization: `Bearer ${project.service_key}` },
30
+ context: "listing secrets",
31
+ });
32
+ }
33
+ /** Delete a secret. */
34
+ async delete(projectId, key) {
35
+ const project = await this.client.getProject(projectId);
36
+ if (!project)
37
+ throw new ProjectNotFound(projectId, "deleting secret");
38
+ await this.client.request(`/projects/v1/admin/${projectId}/secrets/${encodeURIComponent(key)}`, {
39
+ method: "DELETE",
40
+ headers: { Authorization: `Bearer ${project.service_key}` },
41
+ context: "deleting secret",
42
+ });
43
+ }
44
+ }
45
+ //# sourceMappingURL=secrets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/namespaces/secrets.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAW/C,MAAM,OAAO,OAAO;IACW;IAA7B,YAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAE/C,8FAA8F;IAC9F,KAAK,CAAC,GAAG,CAAC,SAAiB,EAAE,GAAW,EAAE,KAAa;QACrD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACxD,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,eAAe,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;QAErE,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CACvB,sBAAsB,SAAS,UAAU,EACzC;YACE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,OAAO,CAAC,WAAW,EAAE,EAAE;YAC3D,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE;YACpB,OAAO,EAAE,gBAAgB;SAC1B,CACF,CAAC;IACJ,CAAC;IAED,iGAAiG;IACjG,KAAK,CAAC,IAAI,CAAC,SAAiB;QAC1B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACxD,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,eAAe,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;QAEtE,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CACxB,sBAAsB,SAAS,UAAU,EACzC;YACE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,OAAO,CAAC,WAAW,EAAE,EAAE;YAC3D,OAAO,EAAE,iBAAiB;SAC3B,CACF,CAAC;IACJ,CAAC;IAED,uBAAuB;IACvB,KAAK,CAAC,MAAM,CAAC,SAAiB,EAAE,GAAW;QACzC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACxD,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,eAAe,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;QAEtE,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CACvB,sBAAsB,SAAS,YAAY,kBAAkB,CAAC,GAAG,CAAC,EAAE,EACpE;YACE,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,OAAO,CAAC,WAAW,EAAE,EAAE;YAC3D,OAAO,EAAE,iBAAiB;SAC3B,CACF,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * `senderDomain` namespace — custom email sending domains with DKIM
3
+ * verification and optional inbound routing.
4
+ */
5
+ import type { Client } from "../kernel.js";
6
+ export interface DnsRecord {
7
+ type: string;
8
+ name: string;
9
+ value: string;
10
+ }
11
+ export interface SenderDomainRegisterResult {
12
+ domain: string;
13
+ status: string;
14
+ dns_records: DnsRecord[];
15
+ instructions: string;
16
+ }
17
+ export interface SenderDomainStatusResult {
18
+ domain: string | null;
19
+ status?: string;
20
+ verified_at?: string;
21
+ }
22
+ export interface InboundEnableResult {
23
+ status: string;
24
+ mx_record?: string;
25
+ }
26
+ export declare class SenderDomain {
27
+ private readonly client;
28
+ constructor(client: Client);
29
+ /** Register a custom email sending domain. Returns DKIM + SPF/DMARC DNS records. */
30
+ register(projectId: string, domain: string): Promise<SenderDomainRegisterResult>;
31
+ /** Get the project's current sender-domain registration state (polls SES). */
32
+ status(projectId: string): Promise<SenderDomainStatusResult>;
33
+ /** Remove the custom sender domain; email reverts to `@mail.run402.com`. */
34
+ remove(projectId: string): Promise<void>;
35
+ /** Enable inbound email on a verified custom sender domain. */
36
+ enableInbound(projectId: string, domain: string): Promise<InboundEnableResult>;
37
+ /** Disable inbound email for a custom sender domain. */
38
+ disableInbound(projectId: string, domain: string): Promise<void>;
39
+ }
40
+ //# sourceMappingURL=sender-domain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sender-domain.d.ts","sourceRoot":"","sources":["../../src/namespaces/sender-domain.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAG3C,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,SAAS,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,YAAY;IACX,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAE3C,oFAAoF;IAC9E,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAYtF,8EAA8E;IACxE,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAUlE,4EAA4E;IACtE,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW9C,+DAA+D;IACzD,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAYpF,wDAAwD;IAClD,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAWvE"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * `senderDomain` namespace — custom email sending domains with DKIM
3
+ * verification and optional inbound routing.
4
+ */
5
+ import { ProjectNotFound } from "../errors.js";
6
+ export class SenderDomain {
7
+ client;
8
+ constructor(client) {
9
+ this.client = client;
10
+ }
11
+ /** Register a custom email sending domain. Returns DKIM + SPF/DMARC DNS records. */
12
+ async register(projectId, domain) {
13
+ const project = await this.client.getProject(projectId);
14
+ if (!project)
15
+ throw new ProjectNotFound(projectId, "registering sender domain");
16
+ return this.client.request("/email/v1/domains", {
17
+ method: "POST",
18
+ headers: { Authorization: `Bearer ${project.service_key}` },
19
+ body: { domain },
20
+ context: "registering sender domain",
21
+ });
22
+ }
23
+ /** Get the project's current sender-domain registration state (polls SES). */
24
+ async status(projectId) {
25
+ const project = await this.client.getProject(projectId);
26
+ if (!project)
27
+ throw new ProjectNotFound(projectId, "checking sender domain status");
28
+ return this.client.request("/email/v1/domains", {
29
+ headers: { Authorization: `Bearer ${project.service_key}` },
30
+ context: "checking sender domain status",
31
+ });
32
+ }
33
+ /** Remove the custom sender domain; email reverts to `@mail.run402.com`. */
34
+ async remove(projectId) {
35
+ const project = await this.client.getProject(projectId);
36
+ if (!project)
37
+ throw new ProjectNotFound(projectId, "removing sender domain");
38
+ await this.client.request("/email/v1/domains", {
39
+ method: "DELETE",
40
+ headers: { Authorization: `Bearer ${project.service_key}` },
41
+ context: "removing sender domain",
42
+ });
43
+ }
44
+ /** Enable inbound email on a verified custom sender domain. */
45
+ async enableInbound(projectId, domain) {
46
+ const project = await this.client.getProject(projectId);
47
+ if (!project)
48
+ throw new ProjectNotFound(projectId, "enabling inbound email");
49
+ return this.client.request("/email/v1/domains/inbound", {
50
+ method: "POST",
51
+ headers: { Authorization: `Bearer ${project.service_key}` },
52
+ body: { domain },
53
+ context: "enabling inbound email",
54
+ });
55
+ }
56
+ /** Disable inbound email for a custom sender domain. */
57
+ async disableInbound(projectId, domain) {
58
+ const project = await this.client.getProject(projectId);
59
+ if (!project)
60
+ throw new ProjectNotFound(projectId, "disabling inbound email");
61
+ await this.client.request("/email/v1/domains/inbound", {
62
+ method: "DELETE",
63
+ headers: { Authorization: `Bearer ${project.service_key}` },
64
+ body: { domain },
65
+ context: "disabling inbound email",
66
+ });
67
+ }
68
+ }
69
+ //# sourceMappingURL=sender-domain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sender-domain.js","sourceRoot":"","sources":["../../src/namespaces/sender-domain.ts"],"names":[],"mappings":"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"}