@framers/agentos-ext-domain-porkbun 0.1.0 → 0.1.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.
- package/dist/PorkbunService.d.ts.map +1 -1
- package/dist/PorkbunService.js +18 -3
- package/dist/PorkbunService.js.map +1 -1
- package/manifest.json +4 -4
- package/package.json +15 -7
- package/src/PorkbunService.ts +0 -327
- package/src/index.ts +0 -133
- package/src/tools/configureDns.ts +0 -114
- package/src/tools/listDomains.ts +0 -33
- package/src/tools/registerDomain.ts +0 -74
- package/src/tools/searchDomain.ts +0 -39
- package/src/tools/transferDomain.ts +0 -41
- package/test/PorkbunService.test.ts +0 -434
- package/test/index.test.ts +0 -50
- package/test/tools.test.ts +0 -399
- package/tsconfig.json +0 -22
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PorkbunService.d.ts","sourceRoot":"","sources":["../src/PorkbunService.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AAMH,MAAM,WAAW,aAAa;IAC5B,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,6BAA6B;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,GAAG,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC;IACtF,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,aAAa;IAO3B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"PorkbunService.d.ts","sourceRoot":"","sources":["../src/PorkbunService.ts"],"names":[],"mappings":"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"}
|
package/dist/PorkbunService.js
CHANGED
|
@@ -21,8 +21,17 @@ export class PorkbunService {
|
|
|
21
21
|
};
|
|
22
22
|
}
|
|
23
23
|
async initialize() {
|
|
24
|
-
// Validate auth by pinging the API
|
|
25
|
-
|
|
24
|
+
// Validate auth by pinging the API. Wrap the inner request error so
|
|
25
|
+
// callers see a single "Porkbun auth failed: …" message regardless of
|
|
26
|
+
// whether handleResponse threw an API error or the response said
|
|
27
|
+
// status !== 'SUCCESS'.
|
|
28
|
+
let res;
|
|
29
|
+
try {
|
|
30
|
+
res = await this.post('/ping', {});
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
throw new Error(`Porkbun auth failed: ${err.message}`);
|
|
34
|
+
}
|
|
26
35
|
if (res.status !== 'SUCCESS') {
|
|
27
36
|
throw new Error(`Porkbun auth failed: ${res.message ?? JSON.stringify(res)}`);
|
|
28
37
|
}
|
|
@@ -38,7 +47,13 @@ export class PorkbunService {
|
|
|
38
47
|
/** Check if a domain is available for registration. */
|
|
39
48
|
async checkAvailability(domain) {
|
|
40
49
|
const res = await this.post('/domain/checkAvailability', { domain });
|
|
41
|
-
|
|
50
|
+
// res.status === 'SUCCESS' just means the API call succeeded; the actual
|
|
51
|
+
// availability lives in res.avail. Treat the absence of `avail` (older
|
|
52
|
+
// responses) as available when status is SUCCESS, but never override an
|
|
53
|
+
// explicit `avail: false`.
|
|
54
|
+
const available = res.avail === false || res.avail === 'false'
|
|
55
|
+
? false
|
|
56
|
+
: res.avail === true || res.avail === 'true' || res.status === 'SUCCESS';
|
|
42
57
|
let pricing;
|
|
43
58
|
// Also fetch pricing if available
|
|
44
59
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PorkbunService.js","sourceRoot":"","sources":["../src/PorkbunService.ts"],"names":[],"mappings":"AAAA,cAAc;AACd;;;;;;;;GAQG;AAsFH,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,MAAM,OAAO,cAAc;IACjB,MAAM,CAAgB;IACtB,OAAO,GAAG,KAAK,CAAC;IAExB,YAAY,MAAqB;QAC/B,IAAI,CAAC,MAAM,GAAG;YACZ,GAAG,MAAM;YACT,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,qCAAqC;SACjE,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU;QACd,
|
|
1
|
+
{"version":3,"file":"PorkbunService.js","sourceRoot":"","sources":["../src/PorkbunService.ts"],"names":[],"mappings":"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"}
|
package/manifest.json
CHANGED
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
"$schema": "https://agentos.sh/schemas/extension-manifest-v1.json",
|
|
3
3
|
"id": "com.framers.domains.porkbun",
|
|
4
4
|
"name": "Porkbun Domain Registrar",
|
|
5
|
-
"version": "0.1.
|
|
5
|
+
"version": "0.1.2",
|
|
6
6
|
"description": "Search, register, and manage domains through Porkbun. Configure DNS records (A, AAAA, CNAME, TXT, MX, NS), list owned domains, and initiate domain transfers via the Porkbun API v3.",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "Frame.dev",
|
|
9
9
|
"email": "support@frame.dev",
|
|
10
|
-
"url": "https://github.com/
|
|
10
|
+
"url": "https://github.com/framerslab"
|
|
11
11
|
},
|
|
12
|
-
"license": "
|
|
12
|
+
"license": "Apache-2.0",
|
|
13
13
|
"keywords": ["domain", "porkbun", "registrar", "dns", "nameserver", "transfer"],
|
|
14
|
-
"agentosVersion": "
|
|
14
|
+
"agentosVersion": ">=0.10.40",
|
|
15
15
|
"categories": ["tool", "domain"],
|
|
16
16
|
"platforms": [],
|
|
17
17
|
"sdk": "none",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@framers/agentos-ext-domain-porkbun",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Porkbun domain registrar extension — search, register, and manage domains and DNS records via the Porkbun API v3.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -35,29 +35,37 @@
|
|
|
35
35
|
"url": "https://github.com/jddunn"
|
|
36
36
|
}
|
|
37
37
|
],
|
|
38
|
-
"license": "
|
|
38
|
+
"license": "Apache-2.0",
|
|
39
39
|
"repository": {
|
|
40
40
|
"type": "git",
|
|
41
|
-
"url": "https://github.com/
|
|
41
|
+
"url": "git+https://github.com/framerslab/agentos-extensions.git",
|
|
42
42
|
"directory": "registry/curated/domains/porkbun"
|
|
43
43
|
},
|
|
44
44
|
"publishConfig": {
|
|
45
45
|
"access": "public"
|
|
46
46
|
},
|
|
47
47
|
"peerDependencies": {
|
|
48
|
-
"@framers/agentos": "
|
|
48
|
+
"@framers/agentos": ">=0.10.40"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
|
-
"@framers/agentos": "^0.6.6",
|
|
52
51
|
"@types/node": "^20.12.12",
|
|
53
52
|
"rimraf": "^5.0.7",
|
|
54
53
|
"typescript": "^5.4.5",
|
|
55
|
-
"vitest": "^
|
|
54
|
+
"vitest": "^3.2.7",
|
|
55
|
+
"@framers/agentos": "^0.13.40"
|
|
56
56
|
},
|
|
57
|
+
"homepage": "https://github.com/framerslab/agentos-extensions/tree/master/registry/curated/domains/porkbun#readme",
|
|
58
|
+
"bugs": {
|
|
59
|
+
"url": "https://github.com/framerslab/agentos-extensions/issues"
|
|
60
|
+
},
|
|
61
|
+
"files": [
|
|
62
|
+
"dist",
|
|
63
|
+
"manifest.json"
|
|
64
|
+
],
|
|
57
65
|
"scripts": {
|
|
58
66
|
"build": "tsc",
|
|
59
67
|
"dev": "tsc --watch",
|
|
60
|
-
"test": "vitest run",
|
|
68
|
+
"test": "vitest run --passWithNoTests",
|
|
61
69
|
"test:watch": "vitest",
|
|
62
70
|
"typecheck": "tsc --noEmit",
|
|
63
71
|
"clean": "rimraf dist"
|
package/src/PorkbunService.ts
DELETED
|
@@ -1,327 +0,0 @@
|
|
|
1
|
-
// @ts-nocheck
|
|
2
|
-
/**
|
|
3
|
-
* @fileoverview Porkbun API v3 service layer.
|
|
4
|
-
*
|
|
5
|
-
* Wraps the Porkbun REST API for domain registration, availability checks,
|
|
6
|
-
* DNS record management, and domain transfers.
|
|
7
|
-
*
|
|
8
|
-
* NOTE: Porkbun uses POST for ALL endpoints and requires apikey + secretapikey
|
|
9
|
-
* in every request body.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
// ---------------------------------------------------------------------------
|
|
13
|
-
// Types
|
|
14
|
-
// ---------------------------------------------------------------------------
|
|
15
|
-
|
|
16
|
-
export interface PorkbunConfig {
|
|
17
|
-
/** Porkbun API key (from https://porkbun.com/account/api) */
|
|
18
|
-
apiKey: string;
|
|
19
|
-
/** Porkbun secret API key */
|
|
20
|
-
secretApiKey: string;
|
|
21
|
-
/** API base URL (defaults to https://api.porkbun.com/api/json/v3) */
|
|
22
|
-
baseUrl?: string;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export interface DomainAvailability {
|
|
26
|
-
domain: string;
|
|
27
|
-
available: boolean;
|
|
28
|
-
pricing?: DomainPricing;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export interface DomainPricing {
|
|
32
|
-
registration: string;
|
|
33
|
-
renewal: string;
|
|
34
|
-
transfer: string;
|
|
35
|
-
couponed?: string;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export interface OwnedDomain {
|
|
39
|
-
domain: string;
|
|
40
|
-
status: string;
|
|
41
|
-
tld: string;
|
|
42
|
-
createDate: string;
|
|
43
|
-
expireDate: string;
|
|
44
|
-
securityLock: boolean;
|
|
45
|
-
whoisPrivacy: boolean;
|
|
46
|
-
autoRenew: boolean;
|
|
47
|
-
notLocal: boolean;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
export interface DnsRecord {
|
|
51
|
-
id: string;
|
|
52
|
-
name: string;
|
|
53
|
-
type: string;
|
|
54
|
-
content: string;
|
|
55
|
-
ttl: string;
|
|
56
|
-
prio: string | null;
|
|
57
|
-
notes: string | null;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export interface RegisterDomainOptions {
|
|
61
|
-
domain: string;
|
|
62
|
-
years?: number;
|
|
63
|
-
/** Registrant contact fields (optional — Porkbun uses account defaults) */
|
|
64
|
-
firstName?: string;
|
|
65
|
-
lastName?: string;
|
|
66
|
-
email?: string;
|
|
67
|
-
phone?: string;
|
|
68
|
-
city?: string;
|
|
69
|
-
state?: string;
|
|
70
|
-
zip?: string;
|
|
71
|
-
country?: string;
|
|
72
|
-
organization?: string;
|
|
73
|
-
address?: string;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
export interface RegisterDomainResult {
|
|
77
|
-
domain: string;
|
|
78
|
-
status: string;
|
|
79
|
-
message: string;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
export interface DnsRecordInput {
|
|
83
|
-
name?: string;
|
|
84
|
-
type: 'A' | 'AAAA' | 'CNAME' | 'TXT' | 'MX' | 'NS' | 'SRV' | 'TLSA' | 'CAA' | 'ALIAS';
|
|
85
|
-
content: string;
|
|
86
|
-
ttl?: string;
|
|
87
|
-
prio?: string;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
export interface TransferDomainResult {
|
|
91
|
-
domain: string;
|
|
92
|
-
status: string;
|
|
93
|
-
message: string;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
// ---------------------------------------------------------------------------
|
|
97
|
-
// Service
|
|
98
|
-
// ---------------------------------------------------------------------------
|
|
99
|
-
|
|
100
|
-
export class PorkbunService {
|
|
101
|
-
private config: PorkbunConfig;
|
|
102
|
-
private running = false;
|
|
103
|
-
|
|
104
|
-
constructor(config: PorkbunConfig) {
|
|
105
|
-
this.config = {
|
|
106
|
-
...config,
|
|
107
|
-
baseUrl: config.baseUrl ?? 'https://api.porkbun.com/api/json/v3',
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
async initialize(): Promise<void> {
|
|
112
|
-
// Validate auth by pinging the API
|
|
113
|
-
const res = await this.post('/ping', {});
|
|
114
|
-
if (res.status !== 'SUCCESS') {
|
|
115
|
-
throw new Error(`Porkbun auth failed: ${res.message ?? JSON.stringify(res)}`);
|
|
116
|
-
}
|
|
117
|
-
this.running = true;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
async shutdown(): Promise<void> {
|
|
121
|
-
this.running = false;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
get isRunning(): boolean {
|
|
125
|
-
return this.running;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
// ── Domain Availability ─────────────────────────────────────────────────
|
|
129
|
-
|
|
130
|
-
/** Check if a domain is available for registration. */
|
|
131
|
-
async checkAvailability(domain: string): Promise<DomainAvailability> {
|
|
132
|
-
const res = await this.post('/domain/checkAvailability', { domain });
|
|
133
|
-
const available = res.avail === true || res.avail === 'true' || res.status === 'SUCCESS';
|
|
134
|
-
|
|
135
|
-
let pricing: DomainPricing | undefined;
|
|
136
|
-
// Also fetch pricing if available
|
|
137
|
-
try {
|
|
138
|
-
pricing = await this.getPricing(domain);
|
|
139
|
-
} catch {
|
|
140
|
-
// Pricing may fail for unavailable domains — that's okay
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
return {
|
|
144
|
-
domain,
|
|
145
|
-
available,
|
|
146
|
-
pricing,
|
|
147
|
-
};
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
/** Get pricing information for a domain/TLD. */
|
|
151
|
-
async getPricing(domain: string): Promise<DomainPricing> {
|
|
152
|
-
const res = await this.post('/domain/pricing/get', { domain });
|
|
153
|
-
const p = res.pricing ?? res;
|
|
154
|
-
return {
|
|
155
|
-
registration: p.registration ?? p.register ?? '',
|
|
156
|
-
renewal: p.renewal ?? p.renew ?? '',
|
|
157
|
-
transfer: p.transfer ?? '',
|
|
158
|
-
couponed: p.couponed,
|
|
159
|
-
};
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
// ── Domain Registration ─────────────────────────────────────────────────
|
|
163
|
-
|
|
164
|
-
/** Register (purchase) a domain. */
|
|
165
|
-
async registerDomain(opts: RegisterDomainOptions): Promise<RegisterDomainResult> {
|
|
166
|
-
const body: Record<string, unknown> = {
|
|
167
|
-
domain: opts.domain,
|
|
168
|
-
years: opts.years ?? 1,
|
|
169
|
-
};
|
|
170
|
-
|
|
171
|
-
// Add optional contact fields
|
|
172
|
-
if (opts.firstName) body.firstName = opts.firstName;
|
|
173
|
-
if (opts.lastName) body.lastName = opts.lastName;
|
|
174
|
-
if (opts.email) body.email = opts.email;
|
|
175
|
-
if (opts.phone) body.phone = opts.phone;
|
|
176
|
-
if (opts.city) body.city = opts.city;
|
|
177
|
-
if (opts.state) body.stateProvince = opts.state;
|
|
178
|
-
if (opts.zip) body.zip = opts.zip;
|
|
179
|
-
if (opts.country) body.country = opts.country;
|
|
180
|
-
if (opts.organization) body.organization = opts.organization;
|
|
181
|
-
if (opts.address) body.addressLine1 = opts.address;
|
|
182
|
-
|
|
183
|
-
const res = await this.post('/domain/register', body);
|
|
184
|
-
return {
|
|
185
|
-
domain: opts.domain,
|
|
186
|
-
status: res.status ?? 'UNKNOWN',
|
|
187
|
-
message: res.message ?? `Domain ${opts.domain} registration ${res.status === 'SUCCESS' ? 'successful' : 'failed'}.`,
|
|
188
|
-
};
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
// ── Domain Listing ──────────────────────────────────────────────────────
|
|
192
|
-
|
|
193
|
-
/** List all domains owned by the account. */
|
|
194
|
-
async listDomains(): Promise<OwnedDomain[]> {
|
|
195
|
-
const res = await this.post('/domain/listAll', {});
|
|
196
|
-
return (res.domains ?? []).map((d: any) => ({
|
|
197
|
-
domain: d.domain ?? '',
|
|
198
|
-
status: d.status ?? '',
|
|
199
|
-
tld: d.tld ?? '',
|
|
200
|
-
createDate: d.createDate ?? '',
|
|
201
|
-
expireDate: d.expireDate ?? '',
|
|
202
|
-
securityLock: d.securityLock === '1' || d.securityLock === true,
|
|
203
|
-
whoisPrivacy: d.whoisPrivacy === '1' || d.whoisPrivacy === true,
|
|
204
|
-
autoRenew: d.autoRenew === '1' || d.autoRenew === true,
|
|
205
|
-
notLocal: d.notLocal === '1' || d.notLocal === true,
|
|
206
|
-
}));
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
// ── DNS Management ──────────────────────────────────────────────────────
|
|
210
|
-
|
|
211
|
-
/** Create a DNS record for a domain. */
|
|
212
|
-
async createDnsRecord(domain: string, record: DnsRecordInput): Promise<{ id: string }> {
|
|
213
|
-
const body: Record<string, unknown> = {
|
|
214
|
-
name: record.name ?? '',
|
|
215
|
-
type: record.type,
|
|
216
|
-
content: record.content,
|
|
217
|
-
ttl: record.ttl ?? '300',
|
|
218
|
-
};
|
|
219
|
-
if (record.prio) body.prio = record.prio;
|
|
220
|
-
|
|
221
|
-
const res = await this.post(`/dns/create/${domain}`, body);
|
|
222
|
-
return { id: String(res.id ?? '') };
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
/** Edit an existing DNS record. */
|
|
226
|
-
async editDnsRecord(domain: string, recordId: string, record: Partial<DnsRecordInput>): Promise<void> {
|
|
227
|
-
const body: Record<string, unknown> = {};
|
|
228
|
-
if (record.name !== undefined) body.name = record.name;
|
|
229
|
-
if (record.type) body.type = record.type;
|
|
230
|
-
if (record.content) body.content = record.content;
|
|
231
|
-
if (record.ttl) body.ttl = record.ttl;
|
|
232
|
-
if (record.prio) body.prio = record.prio;
|
|
233
|
-
|
|
234
|
-
await this.post(`/dns/edit/${domain}/${recordId}`, body);
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
/** Delete a DNS record. */
|
|
238
|
-
async deleteDnsRecord(domain: string, recordId: string): Promise<void> {
|
|
239
|
-
await this.post(`/dns/delete/${domain}/${recordId}`, {});
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
/** List all DNS records for a domain. */
|
|
243
|
-
async listDnsRecords(domain: string): Promise<DnsRecord[]> {
|
|
244
|
-
const res = await this.post(`/dns/retrieve/${domain}`, {});
|
|
245
|
-
return (res.records ?? []).map((r: any) => this.mapDnsRecord(r));
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
/** Retrieve DNS records by name and type. */
|
|
249
|
-
async getDnsRecordsByNameType(domain: string, type: string, subdomain?: string): Promise<DnsRecord[]> {
|
|
250
|
-
const sub = subdomain ?? '';
|
|
251
|
-
const res = await this.post(`/dns/retrieveByNameType/${domain}/${type}/${sub}`, {});
|
|
252
|
-
return (res.records ?? []).map((r: any) => this.mapDnsRecord(r));
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
// ── Domain Transfer ─────────────────────────────────────────────────────
|
|
256
|
-
|
|
257
|
-
/** Initiate a domain transfer to Porkbun. */
|
|
258
|
-
async transferDomain(domain: string, authCode: string): Promise<TransferDomainResult> {
|
|
259
|
-
const res = await this.post('/domain/transfer', {
|
|
260
|
-
domain,
|
|
261
|
-
authCode,
|
|
262
|
-
});
|
|
263
|
-
return {
|
|
264
|
-
domain,
|
|
265
|
-
status: res.status ?? 'UNKNOWN',
|
|
266
|
-
message: res.message ?? `Domain transfer for ${domain} ${res.status === 'SUCCESS' ? 'initiated' : 'failed'}.`,
|
|
267
|
-
};
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
// ── Helpers ─────────────────────────────────────────────────────────────
|
|
271
|
-
|
|
272
|
-
/**
|
|
273
|
-
* POST helper — all Porkbun endpoints are POST and require
|
|
274
|
-
* apikey + secretapikey in the body.
|
|
275
|
-
*/
|
|
276
|
-
private async post(path: string, body: Record<string, unknown>): Promise<any> {
|
|
277
|
-
const url = `${this.config.baseUrl}${path}`;
|
|
278
|
-
const payload = {
|
|
279
|
-
apikey: this.config.apiKey,
|
|
280
|
-
secretapikey: this.config.secretApiKey,
|
|
281
|
-
...body,
|
|
282
|
-
};
|
|
283
|
-
|
|
284
|
-
const res = await globalThis.fetch(url, {
|
|
285
|
-
method: 'POST',
|
|
286
|
-
headers: { 'Content-Type': 'application/json' },
|
|
287
|
-
body: JSON.stringify(payload),
|
|
288
|
-
});
|
|
289
|
-
|
|
290
|
-
return this.handleResponse(res);
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
/** Parse the response JSON, throwing on HTTP errors. */
|
|
294
|
-
private async handleResponse(res: Response): Promise<any> {
|
|
295
|
-
const text = await res.text();
|
|
296
|
-
let data: any;
|
|
297
|
-
try {
|
|
298
|
-
data = JSON.parse(text);
|
|
299
|
-
} catch {
|
|
300
|
-
throw new Error(`Porkbun API ${res.status}: invalid JSON — ${text.slice(0, 500)}`);
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
if (!res.ok) {
|
|
304
|
-
throw new Error(
|
|
305
|
-
`Porkbun API ${res.status}: ${data.message ?? text.slice(0, 500)}`,
|
|
306
|
-
);
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
if (data.status === 'ERROR') {
|
|
310
|
-
throw new Error(`Porkbun API error: ${data.message ?? 'unknown error'}`);
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
return data;
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
private mapDnsRecord(r: any): DnsRecord {
|
|
317
|
-
return {
|
|
318
|
-
id: String(r.id ?? ''),
|
|
319
|
-
name: r.name ?? '',
|
|
320
|
-
type: r.type ?? '',
|
|
321
|
-
content: r.content ?? '',
|
|
322
|
-
ttl: String(r.ttl ?? '300'),
|
|
323
|
-
prio: r.prio ? String(r.prio) : null,
|
|
324
|
-
notes: r.notes ?? null,
|
|
325
|
-
};
|
|
326
|
-
}
|
|
327
|
-
}
|
package/src/index.ts
DELETED
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
// @ts-nocheck
|
|
2
|
-
/**
|
|
3
|
-
* @fileoverview Porkbun Domain Registrar Extension for AgentOS.
|
|
4
|
-
*
|
|
5
|
-
* Provides 5 tools for searching, registering, and managing domains and DNS
|
|
6
|
-
* records via the Porkbun API v3.
|
|
7
|
-
*
|
|
8
|
-
* @module @framers/agentos-ext-domain-porkbun
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import { PorkbunService } from './PorkbunService.js';
|
|
12
|
-
import type { PorkbunConfig } from './PorkbunService.js';
|
|
13
|
-
import { PorkbunSearchDomainTool } from './tools/searchDomain.js';
|
|
14
|
-
import { PorkbunRegisterDomainTool } from './tools/registerDomain.js';
|
|
15
|
-
import { PorkbunListDomainsTool } from './tools/listDomains.js';
|
|
16
|
-
import { PorkbunConfigureDnsTool } from './tools/configureDns.js';
|
|
17
|
-
import { PorkbunTransferDomainTool } from './tools/transferDomain.js';
|
|
18
|
-
|
|
19
|
-
// ---------------------------------------------------------------------------
|
|
20
|
-
// Options
|
|
21
|
-
// ---------------------------------------------------------------------------
|
|
22
|
-
|
|
23
|
-
export interface PorkbunDomainOptions {
|
|
24
|
-
apiKey?: string;
|
|
25
|
-
secretApiKey?: string;
|
|
26
|
-
secrets?: Record<string, string>;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
// ---------------------------------------------------------------------------
|
|
30
|
-
// Secret Resolution
|
|
31
|
-
// ---------------------------------------------------------------------------
|
|
32
|
-
|
|
33
|
-
function resolveConfig(opts: PorkbunDomainOptions, secrets: Record<string, string>): PorkbunConfig {
|
|
34
|
-
return {
|
|
35
|
-
apiKey:
|
|
36
|
-
opts.apiKey ?? secrets['porkbun.apiKey']
|
|
37
|
-
?? process.env.PORKBUN_API_KEY ?? '',
|
|
38
|
-
secretApiKey:
|
|
39
|
-
opts.secretApiKey ?? secrets['porkbun.secretApiKey']
|
|
40
|
-
?? process.env.PORKBUN_SECRET_API_KEY ?? '',
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// ---------------------------------------------------------------------------
|
|
45
|
-
// Extension Context
|
|
46
|
-
// ---------------------------------------------------------------------------
|
|
47
|
-
|
|
48
|
-
export interface ExtensionContext {
|
|
49
|
-
options?: Record<string, unknown>;
|
|
50
|
-
secrets?: Record<string, string>;
|
|
51
|
-
getSecret?: (key: string) => string | undefined;
|
|
52
|
-
logger?: { info: (msg: string) => void };
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
export interface ExtensionPack {
|
|
56
|
-
name: string;
|
|
57
|
-
version: string;
|
|
58
|
-
descriptors: Array<{ id: string; kind: string; priority?: number; payload: unknown }>;
|
|
59
|
-
onActivate?: () => Promise<void>;
|
|
60
|
-
onDeactivate?: () => Promise<void>;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
// ---------------------------------------------------------------------------
|
|
64
|
-
// Factory
|
|
65
|
-
// ---------------------------------------------------------------------------
|
|
66
|
-
|
|
67
|
-
export function createExtensionPack(context: ExtensionContext): ExtensionPack {
|
|
68
|
-
const opts = (context.options ?? {}) as PorkbunDomainOptions;
|
|
69
|
-
const secrets = opts.secrets ?? context.secrets ?? {};
|
|
70
|
-
const config = resolveConfig(opts, secrets);
|
|
71
|
-
|
|
72
|
-
const service = new PorkbunService(config);
|
|
73
|
-
|
|
74
|
-
const searchDomainTool = new PorkbunSearchDomainTool(service);
|
|
75
|
-
const registerDomainTool = new PorkbunRegisterDomainTool(service);
|
|
76
|
-
const listDomainsTool = new PorkbunListDomainsTool(service);
|
|
77
|
-
const configureDnsTool = new PorkbunConfigureDnsTool(service);
|
|
78
|
-
const transferDomainTool = new PorkbunTransferDomainTool(service);
|
|
79
|
-
|
|
80
|
-
return {
|
|
81
|
-
name: '@framers/agentos-ext-domain-porkbun',
|
|
82
|
-
version: '0.1.0',
|
|
83
|
-
descriptors: [
|
|
84
|
-
{ id: 'porkbunSearchDomain', kind: 'tool', priority: 40, payload: searchDomainTool },
|
|
85
|
-
{ id: 'porkbunRegisterDomain', kind: 'tool', priority: 40, payload: registerDomainTool },
|
|
86
|
-
{ id: 'porkbunListDomains', kind: 'tool', priority: 40, payload: listDomainsTool },
|
|
87
|
-
{ id: 'porkbunConfigureDns', kind: 'tool', priority: 40, payload: configureDnsTool },
|
|
88
|
-
{ id: 'porkbunTransferDomain', kind: 'tool', priority: 40, payload: transferDomainTool },
|
|
89
|
-
],
|
|
90
|
-
onActivate: async () => {
|
|
91
|
-
if (!config.apiKey) {
|
|
92
|
-
throw new Error(
|
|
93
|
-
'Porkbun: no API key provided. Set PORKBUN_API_KEY environment variable, '
|
|
94
|
-
+ 'or provide it via secrets["porkbun.apiKey"].',
|
|
95
|
-
);
|
|
96
|
-
}
|
|
97
|
-
if (!config.secretApiKey) {
|
|
98
|
-
throw new Error(
|
|
99
|
-
'Porkbun: no secret API key provided. Set PORKBUN_SECRET_API_KEY environment variable, '
|
|
100
|
-
+ 'or provide it via secrets["porkbun.secretApiKey"].',
|
|
101
|
-
);
|
|
102
|
-
}
|
|
103
|
-
await service.initialize();
|
|
104
|
-
},
|
|
105
|
-
onDeactivate: async () => {
|
|
106
|
-
await service.shutdown();
|
|
107
|
-
},
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
// ---------------------------------------------------------------------------
|
|
112
|
-
// Public exports
|
|
113
|
-
// ---------------------------------------------------------------------------
|
|
114
|
-
|
|
115
|
-
export { PorkbunService } from './PorkbunService.js';
|
|
116
|
-
export type {
|
|
117
|
-
PorkbunConfig,
|
|
118
|
-
DomainAvailability,
|
|
119
|
-
DomainPricing,
|
|
120
|
-
OwnedDomain,
|
|
121
|
-
DnsRecord,
|
|
122
|
-
DnsRecordInput,
|
|
123
|
-
RegisterDomainOptions,
|
|
124
|
-
RegisterDomainResult,
|
|
125
|
-
TransferDomainResult,
|
|
126
|
-
} from './PorkbunService.js';
|
|
127
|
-
export { PorkbunSearchDomainTool } from './tools/searchDomain.js';
|
|
128
|
-
export { PorkbunRegisterDomainTool } from './tools/registerDomain.js';
|
|
129
|
-
export { PorkbunListDomainsTool } from './tools/listDomains.js';
|
|
130
|
-
export { PorkbunConfigureDnsTool } from './tools/configureDns.js';
|
|
131
|
-
export { PorkbunTransferDomainTool } from './tools/transferDomain.js';
|
|
132
|
-
|
|
133
|
-
export default createExtensionPack;
|