@highstate/cloudflare 0.9.18 → 0.9.19

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.
@@ -3,7 +3,7 @@ import { forUnit } from '@highstate/pulumi';
3
3
  import { Provider, getZones } from '@pulumi/cloudflare';
4
4
 
5
5
  // src/connection/index.ts
6
- var { name, secrets, outputs } = forUnit(cloudflare.connection);
6
+ var { secrets, outputs } = forUnit(cloudflare.connection);
7
7
  var provider = new Provider("cloudflare", { apiToken: secrets.apiToken });
8
8
  var { results: zones } = await getZones({}, { provider });
9
9
  if (!zones.length) {
@@ -24,12 +24,14 @@ if (!zones[0].name) {
24
24
  }
25
25
  var connection_default = outputs({
26
26
  dnsProvider: {
27
- name,
28
- type: "cloudflare",
27
+ id: `cloudflare.${zones[0].id}`,
29
28
  domain: zones[0].name,
30
- data: {
31
- zoneId: zones[0].id,
32
- apiToken: secrets.apiToken
29
+ implRef: {
30
+ package: "@highstate/cloudflare",
31
+ data: {
32
+ zoneId: zones[0].id,
33
+ apiToken: secrets.apiToken
34
+ }
33
35
  }
34
36
  },
35
37
  $statusFields: {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/connection/index.ts"],"names":[],"mappings":";;;;;AAIA,IAAM,EAAE,IAAA,EAAM,OAAA,EAAS,SAAQ,GAAI,OAAA,CAAQ,WAAW,UAAU,CAAA;AAEhE,IAAM,QAAA,GAAW,IAAI,QAAA,CAAS,YAAA,EAAc,EAAE,QAAA,EAAU,OAAA,CAAQ,UAAU,CAAA;AAC1E,IAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAI,MAAM,SAAS,EAAC,EAAG,EAAE,QAAA,EAAU,CAAA;AAE1D,IAAI,CAAC,MAAM,MAAA,EAAQ;AACjB,EAAA,MAAM,IAAI,KAAA;AAAA,IACR;AAAA,GACF;AACF;AAEA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,EAAA,MAAM,IAAI,KAAA;AAAA,IACR;AAAA,GACF;AACF;AAEA,IAAI,CAAC,KAAA,CAAM,CAAC,CAAA,CAAE,EAAA,EAAI;AAChB,EAAA,MAAM,IAAI,MAAM,qBAAqB,CAAA;AACvC;AAEA,IAAI,CAAC,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,EAAM;AAClB,EAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AACzC;AAEA,IAAO,qBAAQ,OAAA,CAAQ;AAAA,EACrB,WAAA,EAAa;AAAA,IACX,IAAA;AAAA,IACA,IAAA,EAAM,YAAA;AAAA,IACN,MAAA,EAAQ,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA;AAAA,IACjB,IAAA,EAAM;AAAA,MACJ,MAAA,EAAQ,KAAA,CAAM,CAAC,CAAA,CAAE,EAAA;AAAA,MACjB,UAAU,OAAA,CAAQ;AAAA;AACpB,GACF;AAAA,EACA,aAAA,EAAe;AAAA,IACb,MAAA,EAAQ;AAAA,MACN,KAAA,EAAO,KAAA,CAAM,CAAC,CAAA,CAAE;AAAA,KAClB;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,KAAA,EAAO,KAAA,CAAM,CAAC,CAAA,CAAE;AAAA;AAClB;AAEJ,CAAC","file":"index.js","sourcesContent":["import { cloudflare } from \"@highstate/library\"\nimport { forUnit } from \"@highstate/pulumi\"\nimport { getZones, Provider } from \"@pulumi/cloudflare\"\n\nconst { name, secrets, outputs } = forUnit(cloudflare.connection)\n\nconst provider = new Provider(\"cloudflare\", { apiToken: secrets.apiToken })\nconst { results: zones } = await getZones({}, { provider })\n\nif (!zones.length) {\n throw new Error(\n \"No zones found with the provided API token. Ensure the token has Zone.Zone:Read permission on the zone.\",\n )\n}\n\nif (zones.length > 1) {\n throw new Error(\n \"Multiple zones found with the provided API token, please use separate tokens and connections for each zone.\",\n )\n}\n\nif (!zones[0].id) {\n throw new Error(\"Zone ID is missing.\")\n}\n\nif (!zones[0].name) {\n throw new Error(\"Zone name is missing.\")\n}\n\nexport default outputs({\n dnsProvider: {\n name,\n type: \"cloudflare\",\n domain: zones[0].name,\n data: {\n zoneId: zones[0].id,\n apiToken: secrets.apiToken,\n },\n },\n $statusFields: {\n domain: {\n value: zones[0].name,\n },\n zoneId: {\n value: zones[0].id,\n },\n },\n})\n"]}
1
+ {"version":3,"sources":["../../src/connection/index.ts"],"names":[],"mappings":";;;;;AAIA,IAAM,EAAE,OAAA,EAAS,OAAA,EAAQ,GAAI,OAAA,CAAQ,WAAW,UAAU,CAAA;AAE1D,IAAM,QAAA,GAAW,IAAI,QAAA,CAAS,YAAA,EAAc,EAAE,QAAA,EAAU,OAAA,CAAQ,UAAU,CAAA;AAC1E,IAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAI,MAAM,SAAS,EAAC,EAAG,EAAE,QAAA,EAAU,CAAA;AAE1D,IAAI,CAAC,MAAM,MAAA,EAAQ;AACjB,EAAA,MAAM,IAAI,KAAA;AAAA,IACR;AAAA,GACF;AACF;AAEA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,EAAA,MAAM,IAAI,KAAA;AAAA,IACR;AAAA,GACF;AACF;AAEA,IAAI,CAAC,KAAA,CAAM,CAAC,CAAA,CAAE,EAAA,EAAI;AAChB,EAAA,MAAM,IAAI,MAAM,qBAAqB,CAAA;AACvC;AAEA,IAAI,CAAC,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,EAAM;AAClB,EAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AACzC;AAEA,IAAO,qBAAQ,OAAA,CAAQ;AAAA,EACrB,WAAA,EAAa;AAAA,IACX,EAAA,EAAI,CAAA,WAAA,EAAc,KAAA,CAAM,CAAC,EAAE,EAAE,CAAA,CAAA;AAAA,IAC7B,MAAA,EAAQ,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA;AAAA,IAEjB,OAAA,EAAS;AAAA,MACP,OAAA,EAAS,uBAAA;AAAA,MACT,IAAA,EAAM;AAAA,QACJ,MAAA,EAAQ,KAAA,CAAM,CAAC,CAAA,CAAE,EAAA;AAAA,QACjB,UAAU,OAAA,CAAQ;AAAA;AACpB;AACF,GACF;AAAA,EACA,aAAA,EAAe;AAAA,IACb,MAAA,EAAQ;AAAA,MACN,KAAA,EAAO,KAAA,CAAM,CAAC,CAAA,CAAE;AAAA,KAClB;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,KAAA,EAAO,KAAA,CAAM,CAAC,CAAA,CAAE;AAAA;AAClB;AAEJ,CAAC","file":"index.js","sourcesContent":["import { cloudflare } from \"@highstate/library\"\nimport { forUnit } from \"@highstate/pulumi\"\nimport { getZones, Provider } from \"@pulumi/cloudflare\"\n\nconst { secrets, outputs } = forUnit(cloudflare.connection)\n\nconst provider = new Provider(\"cloudflare\", { apiToken: secrets.apiToken })\nconst { results: zones } = await getZones({}, { provider })\n\nif (!zones.length) {\n throw new Error(\n \"No zones found with the provided API token. Ensure the token has Zone.Zone:Read permission on the zone.\",\n )\n}\n\nif (zones.length > 1) {\n throw new Error(\n \"Multiple zones found with the provided API token, please use separate tokens and connections for each zone.\",\n )\n}\n\nif (!zones[0].id) {\n throw new Error(\"Zone ID is missing.\")\n}\n\nif (!zones[0].name) {\n throw new Error(\"Zone name is missing.\")\n}\n\nexport default outputs({\n dnsProvider: {\n id: `cloudflare.${zones[0].id}`,\n domain: zones[0].name,\n\n implRef: {\n package: \"@highstate/cloudflare\",\n data: {\n zoneId: zones[0].id,\n apiToken: secrets.apiToken,\n },\n },\n },\n $statusFields: {\n domain: {\n value: zones[0].name,\n },\n zoneId: {\n value: zones[0].id,\n },\n },\n})\n"]}
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "sourceHashes": {
3
- "./dist/index.js": 2776017349,
4
- "./dist/connection/index.js": 1509857255
3
+ "./dist/impl/dns-record.js": 4257221977,
4
+ "./dist/impl/dns01-solver.js": 3438987121,
5
+ "./dist/connection/index.js": 2589591392
5
6
  }
6
7
  }
@@ -0,0 +1,52 @@
1
+ import { dnsRecordMediator } from '@highstate/common';
2
+ import { cloudflare } from '@highstate/library';
3
+ import { getResourceComment } from '@highstate/pulumi';
4
+ import { Provider, DnsRecord } from '@pulumi/cloudflare';
5
+ import { ComponentResource } from '@pulumi/pulumi';
6
+ import { getOrCreate } from '@highstate/contract';
7
+
8
+ // src/impl/dns-record.ts
9
+ var providers = /* @__PURE__ */ new Map();
10
+ function getProvider(data) {
11
+ return getOrCreate(
12
+ providers,
13
+ data.zoneId,
14
+ () => new Provider(data.zoneId, { apiToken: data.apiToken })
15
+ );
16
+ }
17
+
18
+ // src/impl/dns-record.ts
19
+ var CloudflareDnsRecord = class extends ComponentResource {
20
+ /**
21
+ * The underlying Cloudflare DNS record resource.
22
+ */
23
+ dnsRecord;
24
+ constructor(name, args, opts) {
25
+ super("highstate:cloudflare:DnsRecord", name, args, opts);
26
+ this.dnsRecord = new DnsRecord(
27
+ name,
28
+ {
29
+ name: args.name ?? name,
30
+ zoneId: args.zoneId,
31
+ type: args.type,
32
+ content: args.value,
33
+ proxied: args.proxied,
34
+ comment: getResourceComment(),
35
+ ttl: args.ttl ?? 1,
36
+ priority: args.priority
37
+ },
38
+ opts
39
+ );
40
+ }
41
+ };
42
+ var createDnsRecord = dnsRecordMediator.implement(
43
+ cloudflare.providerDataSchema,
44
+ ({ name, args }, data) => {
45
+ const provider = getProvider(data);
46
+ return new CloudflareDnsRecord(name, { ...args, zoneId: data.zoneId }, { provider });
47
+ }
48
+ );
49
+
50
+ export { createDnsRecord };
51
+ //# sourceMappingURL=dns-record.js.map
52
+ //# sourceMappingURL=dns-record.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/provider.ts","../../src/impl/dns-record.ts"],"names":[],"mappings":";;;;;;;;AAIA,IAAM,SAAA,uBAAgB,GAAA,EAAsB;AAErC,SAAS,YAAY,IAAA,EAAyC;AACnE,EAAA,OAAO,WAAA;AAAA,IACL,SAAA;AAAA,IACA,IAAA,CAAK,MAAA;AAAA,IACL,MAAM,IAAI,QAAA,CAAS,IAAA,CAAK,QAAQ,EAAE,QAAA,EAAU,IAAA,CAAK,QAAA,EAAU;AAAA,GAC7D;AACF;;;ACDA,IAAM,mBAAA,GAAN,cAAkC,iBAAA,CAAkB;AAAA;AAAA;AAAA;AAAA,EAIzC,SAAA;AAAA,EAET,WAAA,CAAY,IAAA,EAAc,IAAA,EAA+B,IAAA,EAAwB;AAC/E,IAAA,KAAA,CAAM,gCAAA,EAAkC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAExD,IAAA,IAAA,CAAK,YAAY,IAAI,SAAA;AAAA,MACnB,IAAA;AAAA,MACA;AAAA,QACE,IAAA,EAAM,KAAK,IAAA,IAAQ,IAAA;AAAA,QACnB,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,SAAS,IAAA,CAAK,KAAA;AAAA,QACd,SAAS,IAAA,CAAK,OAAA;AAAA,QACd,SAAS,kBAAA,EAAmB;AAAA,QAC5B,GAAA,EAAK,KAAK,GAAA,IAAO,CAAA;AAAA,QACjB,UAAU,IAAA,CAAK;AAAA,OACjB;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACF,CAAA;AAEO,IAAM,kBAAkB,iBAAA,CAAkB,SAAA;AAAA,EAC/C,UAAA,CAAW,kBAAA;AAAA,EACX,CAAC,EAAE,IAAA,EAAM,IAAA,IAAQ,IAAA,KAAS;AACxB,IAAA,MAAM,QAAA,GAAW,YAAY,IAAI,CAAA;AAEjC,IAAA,OAAO,IAAI,mBAAA,CAAoB,IAAA,EAAM,EAAE,GAAG,IAAA,EAAM,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAO,EAAG,EAAE,QAAA,EAAU,CAAA;AAAA,EACrF;AACF","file":"dns-record.js","sourcesContent":["import type { cloudflare } from \"@highstate/library\"\nimport { getOrCreate } from \"@highstate/contract\"\nimport { Provider } from \"@pulumi/cloudflare\"\n\nconst providers = new Map<string, Provider>()\n\nexport function getProvider(data: cloudflare.ProviderData): Provider {\n return getOrCreate(\n providers,\n data.zoneId,\n () => new Provider(data.zoneId, { apiToken: data.apiToken }),\n )\n}\n","import { dnsRecordMediator, type ResolvedDnsRecordArgs } from \"@highstate/common\"\nimport { cloudflare } from \"@highstate/library\"\nimport { getResourceComment } from \"@highstate/pulumi\"\nimport { DnsRecord } from \"@pulumi/cloudflare\"\nimport { ComponentResource, type ResourceOptions } from \"@pulumi/pulumi\"\nimport { getProvider } from \"../provider\"\n\ntype CloudflareDnsRecordArgs = ResolvedDnsRecordArgs & {\n zoneId: string\n}\n\nclass CloudflareDnsRecord extends ComponentResource {\n /**\n * The underlying Cloudflare DNS record resource.\n */\n readonly dnsRecord: DnsRecord\n\n constructor(name: string, args: CloudflareDnsRecordArgs, opts?: ResourceOptions) {\n super(\"highstate:cloudflare:DnsRecord\", name, args, opts)\n\n this.dnsRecord = new DnsRecord(\n name,\n {\n name: args.name ?? name,\n zoneId: args.zoneId,\n type: args.type,\n content: args.value,\n proxied: args.proxied,\n comment: getResourceComment(),\n ttl: args.ttl ?? 1,\n priority: args.priority,\n },\n opts,\n )\n }\n}\n\nexport const createDnsRecord = dnsRecordMediator.implement(\n cloudflare.providerDataSchema,\n ({ name, args }, data) => {\n const provider = getProvider(data)\n\n return new CloudflareDnsRecord(name, { ...args, zoneId: data.zoneId }, { provider })\n },\n)\n"]}
@@ -0,0 +1,27 @@
1
+ import { dns01SolverMediator, Secret } from '@highstate/k8s';
2
+ import { cloudflare } from '@highstate/library';
3
+
4
+ // src/impl/dns01-solver.ts
5
+ var createCloudflareDns01Solver = dns01SolverMediator.implement(
6
+ cloudflare.providerDataSchema,
7
+ ({ namespace }, data) => {
8
+ const secret = Secret.create(`cloudflare.${data.zoneId}`, {
9
+ namespace,
10
+ stringData: {
11
+ apiToken: data.apiToken
12
+ }
13
+ });
14
+ return {
15
+ cloudflare: {
16
+ apiTokenSecretRef: {
17
+ name: secret.metadata.name,
18
+ key: "apiToken"
19
+ }
20
+ }
21
+ };
22
+ }
23
+ );
24
+
25
+ export { createCloudflareDns01Solver };
26
+ //# sourceMappingURL=dns01-solver.js.map
27
+ //# sourceMappingURL=dns01-solver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/impl/dns01-solver.ts"],"names":[],"mappings":";;;;AAGO,IAAM,8BAA8B,mBAAA,CAAoB,SAAA;AAAA,EAC7D,UAAA,CAAW,kBAAA;AAAA,EACX,CAAC,EAAE,SAAA,EAAU,EAAG,IAAA,KAAS;AACvB,IAAA,MAAM,SAAS,MAAA,CAAO,MAAA,CAAO,CAAA,WAAA,EAAc,IAAA,CAAK,MAAM,CAAA,CAAA,EAAI;AAAA,MACxD,SAAA;AAAA,MAEA,UAAA,EAAY;AAAA,QACV,UAAU,IAAA,CAAK;AAAA;AACjB,KACD,CAAA;AAED,IAAA,OAAO;AAAA,MACL,UAAA,EAAY;AAAA,QACV,iBAAA,EAAmB;AAAA,UACjB,IAAA,EAAM,OAAO,QAAA,CAAS,IAAA;AAAA,UACtB,GAAA,EAAK;AAAA;AACP;AACF,KACF;AAAA,EACF;AACF","file":"dns01-solver.js","sourcesContent":["import { dns01SolverMediator, Secret } from \"@highstate/k8s\"\nimport { cloudflare } from \"@highstate/library\"\n\nexport const createCloudflareDns01Solver = dns01SolverMediator.implement(\n cloudflare.providerDataSchema,\n ({ namespace }, data) => {\n const secret = Secret.create(`cloudflare.${data.zoneId}`, {\n namespace,\n\n stringData: {\n apiToken: data.apiToken,\n },\n })\n\n return {\n cloudflare: {\n apiTokenSecretRef: {\n name: secret.metadata.name,\n key: \"apiToken\",\n },\n },\n }\n },\n)\n"]}
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "@highstate/cloudflare",
3
- "version": "0.9.18",
3
+ "version": "0.9.19",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist"
7
7
  ],
8
8
  "exports": {
9
- ".": "./dist/index.js",
9
+ "./impl/dns-record": "./dist/impl/dns-record.js",
10
+ "./impl/dns01-solver": "./dist/impl/dns01-solver.js",
10
11
  "./connection": "./dist/connection/index.js"
11
12
  },
12
13
  "publishConfig": {
@@ -16,12 +17,12 @@
16
17
  "build": "highstate build"
17
18
  },
18
19
  "dependencies": {
19
- "@highstate/cert-manager": "^0.9.18",
20
- "@highstate/common": "^0.9.18",
21
- "@highstate/contract": "^0.9.18",
22
- "@highstate/k8s": "^0.9.18",
23
- "@highstate/library": "^0.9.18",
24
- "@highstate/pulumi": "^0.9.18",
20
+ "@highstate/cert-manager": "^0.9.19",
21
+ "@highstate/common": "^0.9.19",
22
+ "@highstate/contract": "^0.9.19",
23
+ "@highstate/k8s": "^0.9.19",
24
+ "@highstate/library": "^0.9.19",
25
+ "@highstate/pulumi": "^0.9.19",
25
26
  "@pulumi/cloudflare": "^6.1.1",
26
27
  "@pulumi/command": "^1.0.2",
27
28
  "@pulumi/kubernetes": "^4.18.0",
@@ -30,7 +31,7 @@
30
31
  "ajv": "^8.17.1"
31
32
  },
32
33
  "devDependencies": {
33
- "@highstate/cli": "^0.9.18"
34
+ "@highstate/cli": "^0.9.19"
34
35
  },
35
- "gitHead": "9ebcd7da56b00b8ca08bf52cc8438f527338cd64"
36
+ "gitHead": "e77d292335556c6e5b6275acda1a3d1609d786a1"
36
37
  }
package/dist/index.js DELETED
@@ -1,77 +0,0 @@
1
- import { getResourceComment } from '@highstate/pulumi';
2
- import { DnsRecord } from '@highstate/common';
3
- import { DnsRecord as DnsRecord$1, Provider } from '@pulumi/cloudflare';
4
- import { core } from '@pulumi/kubernetes';
5
- import { Type } from '@highstate/contract';
6
- import { Ajv } from 'ajv';
7
-
8
- // src/dns.ts
9
- var providers = /* @__PURE__ */ new Map();
10
- function getProvider(domain, apiToken) {
11
- const existingProvider = providers.get(domain);
12
- if (existingProvider) {
13
- return existingProvider;
14
- }
15
- const provider = new Provider(domain, { apiToken });
16
- providers.set(domain, provider);
17
- return provider;
18
- }
19
-
20
- // src/dns.ts
21
- var dnsProviderDataSchema = Type.Object({
22
- zoneId: Type.String(),
23
- apiToken: Type.String()
24
- });
25
- var CloudflareDnsRecord = class extends DnsRecord {
26
- create(name, args, opts) {
27
- const data = getDnsProviderData(args.provider);
28
- const provider = getProvider(args.provider.domain, data.apiToken);
29
- return new DnsRecord$1(
30
- name,
31
- {
32
- name: args.name ?? name,
33
- zoneId: data.zoneId,
34
- type: args.type,
35
- content: args.value,
36
- proxied: args.proxied,
37
- comment: getResourceComment(),
38
- ttl: args.ttl ?? 1,
39
- priority: args.priority
40
- },
41
- { ...opts, provider }
42
- );
43
- }
44
- };
45
- function createCloudflareDns01Solver(dnsProvider, provider) {
46
- const data = getDnsProviderData(dnsProvider);
47
- const name = `cloudflare-credentials-${dnsProvider.name}`;
48
- const secret = new core.v1.Secret(
49
- name,
50
- {
51
- metadata: { name, namespace: "cert-manager" },
52
- stringData: {
53
- apiToken: data.apiToken
54
- }
55
- },
56
- { provider }
57
- );
58
- return {
59
- cloudflare: {
60
- apiTokenSecretRef: {
61
- name: secret.metadata.name,
62
- key: "apiToken"
63
- }
64
- }
65
- };
66
- }
67
- function getDnsProviderData(dnsProvider) {
68
- const ajv = new Ajv();
69
- if (!ajv.validate(dnsProviderDataSchema, dnsProvider.data)) {
70
- throw new Error(`Invalid DNS provider data: ${ajv.errorsText()}`);
71
- }
72
- return dnsProvider.data;
73
- }
74
-
75
- export { CloudflareDnsRecord, createCloudflareDns01Solver };
76
- //# sourceMappingURL=index.js.map
77
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/provider.ts","../src/dns.ts"],"names":["Record"],"mappings":";;;;;;;;AAEA,IAAM,SAAA,uBAAgB,GAAA,EAAsB;AAErC,SAAS,WAAA,CAAY,QAAgB,QAAA,EAA4B;AACtE,EAAA,MAAM,gBAAA,GAAmB,SAAA,CAAU,GAAA,CAAI,MAAM,CAAA;AAC7C,EAAA,IAAI,gBAAA,EAAkB;AACpB,IAAA,OAAO,gBAAA;AAAA,EACT;AAEA,EAAA,MAAM,WAAW,IAAI,QAAA,CAAS,MAAA,EAAQ,EAAE,UAAU,CAAA;AAClD,EAAA,SAAA,CAAU,GAAA,CAAI,QAAQ,QAAQ,CAAA;AAE9B,EAAA,OAAO,QAAA;AACT;;;ACJO,IAAM,qBAAA,GAAwB,KAAK,MAAA,CAAO;AAAA,EAC/C,MAAA,EAAQ,KAAK,MAAA,EAAO;AAAA,EACpB,QAAA,EAAU,KAAK,MAAA;AACjB,CAAC,CAAA;AAIM,IAAM,mBAAA,GAAN,cAAkC,SAAA,CAAU;AAAA,EACvC,MAAA,CAAO,IAAA,EAAc,IAAA,EAA6B,IAAA,EAAkC;AAC5F,IAAA,MAAM,IAAA,GAAO,kBAAA,CAAmB,IAAA,CAAK,QAAQ,CAAA;AAC7C,IAAA,MAAM,WAAW,WAAA,CAAY,IAAA,CAAK,QAAA,CAAS,MAAA,EAAQ,KAAK,QAAQ,CAAA;AAEhE,IAAA,OAAO,IAAIA,WAAA;AAAA,MACT,IAAA;AAAA,MACA;AAAA,QACE,IAAA,EAAM,KAAK,IAAA,IAAQ,IAAA;AAAA,QACnB,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,SAAS,IAAA,CAAK,KAAA;AAAA,QACd,SAAS,IAAA,CAAK,OAAA;AAAA,QACd,SAAS,kBAAA,EAAmB;AAAA,QAC5B,GAAA,EAAK,KAAK,GAAA,IAAO,CAAA;AAAA,QACjB,UAAU,IAAA,CAAK;AAAA,OACjB;AAAA,MACA,EAAE,GAAG,IAAA,EAAM,QAAA;AAAS,KACtB;AAAA,EACF;AACF;AAEO,SAAS,2BAAA,CACd,aACA,QAAA,EAC+D;AAC/D,EAAA,MAAM,IAAA,GAAO,mBAAmB,WAAW,CAAA;AAC3C,EAAA,MAAM,IAAA,GAAO,CAAA,uBAAA,EAA0B,WAAA,CAAY,IAAI,CAAA,CAAA;AAEvD,EAAA,MAAM,MAAA,GAAS,IAAI,IAAA,CAAK,EAAA,CAAG,MAAA;AAAA,IACzB,IAAA;AAAA,IACA;AAAA,MACE,QAAA,EAAU,EAAE,IAAA,EAAM,SAAA,EAAW,cAAA,EAAe;AAAA,MAC5C,UAAA,EAAY;AAAA,QACV,UAAU,IAAA,CAAK;AAAA;AACjB,KACF;AAAA,IACA,EAAE,QAAA;AAAS,GACb;AAEA,EAAA,OAAO;AAAA,IACL,UAAA,EAAY;AAAA,MACV,iBAAA,EAAmB;AAAA,QACjB,IAAA,EAAM,OAAO,QAAA,CAAS,IAAA;AAAA,QACtB,GAAA,EAAK;AAAA;AACP;AACF,GACF;AACF;AAEA,SAAS,mBAAmB,WAAA,EAA4C;AACtE,EAAA,MAAM,GAAA,GAAM,IAAI,GAAA,EAAI;AAEpB,EAAA,IAAI,CAAC,GAAA,CAAI,QAAA,CAA0B,qBAAA,EAAuB,WAAA,CAAY,IAAI,CAAA,EAAG;AAC3E,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,2BAAA,EAA8B,GAAA,CAAI,UAAA,EAAY,CAAA,CAAE,CAAA;AAAA,EAClE;AAEA,EAAA,OAAO,WAAA,CAAY,IAAA;AACrB","file":"index.js","sourcesContent":["import { Provider } from \"@pulumi/cloudflare\"\n\nconst providers = new Map<string, Provider>()\n\nexport function getProvider(domain: string, apiToken: string): Provider {\n const existingProvider = providers.get(domain)\n if (existingProvider) {\n return existingProvider\n }\n\n const provider = new Provider(domain, { apiToken })\n providers.set(domain, provider)\n\n return provider\n}\n","import type { types } from \"@highstate/cert-manager\"\nimport type { dns } from \"@highstate/library\"\nimport { type ResourceOptions, type Resource, getResourceComment } from \"@highstate/pulumi\"\nimport { DnsRecord, type ResolvedDnsRecordArgs } from \"@highstate/common\"\nimport { DnsRecord as Record } from \"@pulumi/cloudflare\"\nimport { core, Provider as K8sProvider } from \"@pulumi/kubernetes\"\nimport { Type, type Static } from \"@highstate/contract\"\nimport { Ajv } from \"ajv\"\nimport { getProvider } from \"./provider\"\n\nexport const dnsProviderDataSchema = Type.Object({\n zoneId: Type.String(),\n apiToken: Type.String(),\n})\n\nexport type DnsProviderData = Static<typeof dnsProviderDataSchema>\n\nexport class CloudflareDnsRecord extends DnsRecord {\n protected create(name: string, args: ResolvedDnsRecordArgs, opts?: ResourceOptions): Resource {\n const data = getDnsProviderData(args.provider)\n const provider = getProvider(args.provider.domain, data.apiToken)\n\n return new Record(\n name,\n {\n name: args.name ?? name,\n zoneId: data.zoneId,\n type: args.type,\n content: args.value,\n proxied: args.proxied,\n comment: getResourceComment(),\n ttl: args.ttl ?? 1,\n priority: args.priority,\n },\n { ...opts, provider },\n )\n }\n}\n\nexport function createCloudflareDns01Solver(\n dnsProvider: dns.Provider,\n provider: K8sProvider,\n): types.input.cert_manager.v1.ClusterIssuerSpecAcmeSolversDns01 {\n const data = getDnsProviderData(dnsProvider)\n const name = `cloudflare-credentials-${dnsProvider.name}`\n\n const secret = new core.v1.Secret(\n name,\n {\n metadata: { name, namespace: \"cert-manager\" },\n stringData: {\n apiToken: data.apiToken,\n },\n },\n { provider },\n )\n\n return {\n cloudflare: {\n apiTokenSecretRef: {\n name: secret.metadata.name,\n key: \"apiToken\",\n },\n },\n }\n}\n\nfunction getDnsProviderData(dnsProvider: dns.Provider): DnsProviderData {\n const ajv = new Ajv()\n\n if (!ajv.validate<DnsProviderData>(dnsProviderDataSchema, dnsProvider.data)) {\n throw new Error(`Invalid DNS provider data: ${ajv.errorsText()}`)\n }\n\n return dnsProvider.data\n}\n"]}