super-secret 1.0.1 → 1.0.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/README.md CHANGED
@@ -88,7 +88,7 @@ and tokens live in the vault, not in the manifest.
88
88
  | `manual` | the operator mints it where `create` says and pastes it (hidden, or on stdin); checked against `pattern` and `probe` | `retire` is queued as a manual step |
89
89
  | `stripe-secret-key` | manual roll in the Dashboard, paste; checked against the same account and mode | manual expire |
90
90
  | `stripe-webhook-secret` | a twin endpoint at `url`; its secret ships | the old endpoint is deleted |
91
- | `cloudflare-api-token` | the token rolls itself in place (needs "API Tokens: Edit") | none |
91
+ | `cloudflare-api-token` | the token rolls itself in place; user-owned and account-owned tokens both work (needs "API Tokens: Edit" or "Account API Tokens: Edit"; optional `account`) | none |
92
92
 
93
93
  Probes (`probe` on `generated` and `manual`): `{ kind: 'http', url, headers, bearer, basic, expect }`,
94
94
  or a preset: `railway-account`, `railway-project`, `github-token`, `stripe-key`,
@@ -3,11 +3,19 @@ export interface CloudflareApiTokenSpec {
3
3
  kind: 'cloudflare-api-token';
4
4
  /** Store key (default CLOUDFLARE_API_TOKEN). */
5
5
  key?: string;
6
+ /**
7
+ * Account id for an account-owned token: a literal or `${KEY}`. Optional:
8
+ * without it the account is discovered with the token itself. Ignored for
9
+ * a user-owned token.
10
+ */
11
+ account?: string;
6
12
  }
7
13
  /**
8
- * Cloudflare can roll a token's value in place (PUT /user/tokens/:id/value)
9
- * when the caller may edit API tokens. The token rolls itself: same id, same
10
- * permissions, new secret; nothing to revoke. Without that permission the
14
+ * Cloudflare can roll a token's value in place (PUT …/tokens/:id/value) when
15
+ * the caller may edit API tokens. The token rolls itself: same id, same
16
+ * permissions, new secret; nothing to revoke. User-owned and account-owned
17
+ * tokens roll at different endpoints (/user/tokens vs /accounts/{id}/tokens);
18
+ * the rotator finds out which kind it holds. Without the edit permission the
11
19
  * call fails and the manifest should use a `manual` rotator instead.
12
20
  */
13
21
  export declare function cloudflareApiTokenRotator(spec?: CloudflareApiTokenSpec): Rotator;
@@ -1,28 +1,31 @@
1
+ import { resolveRef } from "../resolve.js";
1
2
  import { http, HttpError } from "../util.js";
2
- import { PRESETS, bearer } from "./probes.js";
3
- const API = 'https://api.cloudflare.com/client/v4';
3
+ import { bearer, locateCloudflareToken } from "./probes.js";
4
4
  /**
5
- * Cloudflare can roll a token's value in place (PUT /user/tokens/:id/value)
6
- * when the caller may edit API tokens. The token rolls itself: same id, same
7
- * permissions, new secret; nothing to revoke. Without that permission the
5
+ * Cloudflare can roll a token's value in place (PUT …/tokens/:id/value) when
6
+ * the caller may edit API tokens. The token rolls itself: same id, same
7
+ * permissions, new secret; nothing to revoke. User-owned and account-owned
8
+ * tokens roll at different endpoints (/user/tokens vs /accounts/{id}/tokens);
9
+ * the rotator finds out which kind it holds. Without the edit permission the
8
10
  * call fails and the manifest should use a `manual` rotator instead.
9
11
  */
10
12
  export function cloudflareApiTokenRotator(spec = { kind: 'cloudflare-api-token' }) {
11
13
  const KEY = spec.key ?? 'CLOUDFLARE_API_TOKEN';
14
+ const account = async (ctx) => (spec.account ? resolveRef(spec.account, ctx, 'cloudflare account') : undefined);
12
15
  return {
13
16
  async preflight(ctx) {
14
17
  const token = await ctx.store.get(KEY);
15
18
  if (!token)
16
19
  throw new Error(`${KEY} is not in the store`);
17
- const r = await PRESETS['cloudflare-token'](token);
20
+ const r = await locateCloudflareToken(token, await account(ctx));
18
21
  if (!r.ok)
19
22
  throw new Error(r.detail);
20
23
  return [r.detail];
21
24
  },
22
25
  async plan() {
23
26
  return [
24
- `GET ${API}/user/tokens/verify for the token id, then PUT /user/tokens/{id}/value (roll in place)`,
25
- 'needs the token (or the operator env) to carry "API Tokens: Edit"; otherwise use a manual rotator',
27
+ 'verify the token at /user/tokens, else /accounts/{id}/tokens, for its id; then PUT …/tokens/{id}/value (roll in place)',
28
+ 'needs the token to carry "API Tokens: Edit" (user-owned) or "Account API Tokens: Edit" (account-owned); otherwise use a manual rotator',
26
29
  'nothing to revoke: the old value stops working the moment the roll returns',
27
30
  ];
28
31
  },
@@ -30,24 +33,28 @@ export function cloudflareApiTokenRotator(spec = { kind: 'cloudflare-api-token'
30
33
  const token = await ctx.store.get(KEY);
31
34
  if (!token)
32
35
  throw new Error(`${KEY} is not in the store`);
33
- const verify = await http(`${API}/user/tokens/verify`, { headers: bearer(token) });
36
+ const where = await locateCloudflareToken(token, await account(ctx));
37
+ if (!where.ok || !where.id || !where.base)
38
+ throw new Error(where.detail);
34
39
  try {
35
- const rolled = await http(`${API}/user/tokens/${verify.result.id}/value`, {
40
+ const rolled = await http(`${where.base}/${where.id}/value`, {
36
41
  method: 'PUT',
37
42
  headers: { ...bearer(token), 'content-type': 'application/json' },
38
43
  body: '{}',
39
44
  });
40
- return { values: { [KEY]: rolled.result }, revoke: [], notes: [`rolled token ${verify.result.id}`] };
45
+ return { values: { [KEY]: rolled.result }, revoke: [], notes: [`rolled token ${where.id}`] };
41
46
  }
42
47
  catch (e) {
43
- if (e instanceof HttpError && (e.status === 403 || e.status === 401))
44
- throw new Error(`token ${verify.result.id} may not roll itself (HTTP ${e.status}); give it "User → API Tokens → Edit" or switch this secret to a manual rotator`);
48
+ if (e instanceof HttpError && (e.status === 403 || e.status === 401)) {
49
+ const perm = where.account ? '"Account → Account API Tokens → Edit"' : '"User → API Tokens → Edit"';
50
+ throw new Error(`token ${where.id} may not roll itself (HTTP ${e.status}); give it ${perm} or switch this secret to a manual rotator`);
51
+ }
45
52
  throw e;
46
53
  }
47
54
  },
48
- async probe(values) {
55
+ async probe(values, ctx) {
49
56
  const v = values[KEY];
50
- return v ? PRESETS['cloudflare-token'](v) : { ok: false, detail: `${KEY} missing` };
57
+ return v ? locateCloudflareToken(v, await account(ctx)) : { ok: false, detail: `${KEY} missing` };
51
58
  },
52
59
  };
53
60
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cloudflareToken.js","sourceRoot":"","sources":["../../src/rotators/cloudflareToken.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAQ9C,MAAM,GAAG,GAAG,sCAAsC,CAAC;AAEnD;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAA+B,EAAE,IAAI,EAAE,sBAAsB,EAAE;IACxG,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,sBAAsB,CAAC;IAC/C,OAAO;QACN,KAAK,CAAC,SAAS,CAAC,GAAG;YAClB,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACvC,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,sBAAsB,CAAC,CAAC;YAC1D,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,CAAC;YACnD,IAAI,CAAC,CAAC,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACrC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACnB,CAAC;QACD,KAAK,CAAC,IAAI;YACT,OAAO;gBACN,OAAO,GAAG,wFAAwF;gBAClG,mGAAmG;gBACnG,4EAA4E;aAC5E,CAAC;QACH,CAAC;QACD,KAAK,CAAC,SAAS,CAAC,GAAG;YAClB,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACvC,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,sBAAsB,CAAC,CAAC;YAC1D,MAAM,MAAM,GAAG,MAAM,IAAI,CAA6B,GAAG,GAAG,qBAAqB,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC/G,IAAI,CAAC;gBACJ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAqB,GAAG,GAAG,gBAAgB,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE;oBAC7F,MAAM,EAAE,KAAK;oBACb,OAAO,EAAE,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE;oBACjE,IAAI,EAAE,IAAI;iBACV,CAAC,CAAC;gBACH,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,gBAAgB,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YACtG,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACZ,IAAI,CAAC,YAAY,SAAS,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC;oBACnE,MAAM,IAAI,KAAK,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,EAAE,8BAA8B,CAAC,CAAC,MAAM,iFAAiF,CAAC,CAAC;gBACnK,MAAM,CAAC,CAAC;YACT,CAAC;QACF,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,MAAM;YACjB,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YACtB,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,UAAU,EAAE,CAAC;QACrF,CAAC;KACD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"cloudflareToken.js","sourceRoot":"","sources":["../../src/rotators/cloudflareToken.ts"],"names":[],"mappings":"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"}
@@ -7,5 +7,5 @@ import { stripeSecretKeyRotator, stripeWebhookSecretRotator, type StripeSecretKe
7
7
  export type RotatorSpec = GeneratedSpec | StaticSpec | ManualSpec | StripeSecretKeySpec | StripeWebhookSecretSpec | CloudflareApiTokenSpec;
8
8
  export declare function createRotator(spec: RotatorSpec | Rotator, id: string): Rotator;
9
9
  export { cloudflareApiTokenRotator, generatedRotator, manualRotator, staticRotator, stripeSecretKeyRotator, stripeWebhookSecretRotator };
10
- export { PRESETS, runProbe, type PresetName, type ProbeSpec } from './probes.ts';
10
+ export { PRESETS, locateCloudflareToken, runProbe, type CloudflareTokenLocation, type PresetName, type ProbeSpec } from './probes.ts';
11
11
  export type { CloudflareApiTokenSpec, GeneratedSpec, ManualSpec, StaticSpec, StripeSecretKeySpec, StripeWebhookSecretSpec };
@@ -24,5 +24,5 @@ export function createRotator(spec, id) {
24
24
  }
25
25
  }
26
26
  export { cloudflareApiTokenRotator, generatedRotator, manualRotator, staticRotator, stripeSecretKeyRotator, stripeWebhookSecretRotator };
27
- export { PRESETS, runProbe } from "./probes.js";
27
+ export { PRESETS, locateCloudflareToken, runProbe } from "./probes.js";
28
28
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rotators/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAA+B,MAAM,sBAAsB,CAAC;AAC9F,OAAO,EAAE,gBAAgB,EAAsB,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAmB,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAmB,MAAM,aAAa,CAAC;AAC7D,OAAO,EACN,sBAAsB,EACtB,0BAA0B,GAG1B,MAAM,aAAa,CAAC;AAUrB,MAAM,UAAU,aAAa,CAAC,IAA2B,EAAE,EAAU;IACpE,IAAI,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,WAAW;YACf,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC/B,KAAK,QAAQ;YACZ,OAAO,aAAa,EAAE,CAAC;QACxB,KAAK,QAAQ;YACZ,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;QAC5B,KAAK,mBAAmB;YACvB,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC;QACrC,KAAK,uBAAuB;YAC3B,OAAO,0BAA0B,CAAC,IAAI,CAAC,CAAC;QACzC,KAAK,sBAAsB;YAC1B,OAAO,yBAAyB,CAAC,IAAI,CAAC,CAAC;QACxC;YACC,MAAM,IAAI,KAAK,CAAC,UAAU,EAAE,0BAA0B,MAAM,CAAE,IAA0B,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpG,CAAC;AACF,CAAC;AAED,OAAO,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,CAAC;AACzI,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAmC,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rotators/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAA+B,MAAM,sBAAsB,CAAC;AAC9F,OAAO,EAAE,gBAAgB,EAAsB,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAmB,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAmB,MAAM,aAAa,CAAC;AAC7D,OAAO,EACN,sBAAsB,EACtB,0BAA0B,GAG1B,MAAM,aAAa,CAAC;AAUrB,MAAM,UAAU,aAAa,CAAC,IAA2B,EAAE,EAAU;IACpE,IAAI,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,WAAW;YACf,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC/B,KAAK,QAAQ;YACZ,OAAO,aAAa,EAAE,CAAC;QACxB,KAAK,QAAQ;YACZ,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;QAC5B,KAAK,mBAAmB;YACvB,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC;QACrC,KAAK,uBAAuB;YAC3B,OAAO,0BAA0B,CAAC,IAAI,CAAC,CAAC;QACzC,KAAK,sBAAsB;YAC1B,OAAO,yBAAyB,CAAC,IAAI,CAAC,CAAC;QACxC;YACC,MAAM,IAAI,KAAK,CAAC,UAAU,EAAE,0BAA0B,MAAM,CAAE,IAA0B,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpG,CAAC;AACF,CAAC;AAED,OAAO,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,CAAC;AACzI,OAAO,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAiE,MAAM,aAAa,CAAC"}
@@ -51,11 +51,26 @@ export declare const PRESETS: {
51
51
  ok: boolean;
52
52
  detail: string;
53
53
  }>;
54
- 'cloudflare-token': (token: string) => Promise<{
55
- ok: boolean;
56
- detail: string;
57
- }>;
54
+ 'cloudflare-token': (token: string) => Promise<CloudflareTokenLocation>;
58
55
  };
56
+ export declare const CLOUDFLARE_API = "https://api.cloudflare.com/client/v4";
57
+ export interface CloudflareTokenLocation extends ProbeResult {
58
+ /** The token's id, when a verify endpoint recognised it. */
59
+ id?: string;
60
+ /** Collection the token lives in: `…/user/tokens` or `…/accounts/{id}/tokens`. */
61
+ base?: string;
62
+ /** Owning account, for an account-owned token. */
63
+ account?: string;
64
+ }
65
+ /**
66
+ * Cloudflare has two kinds of API token and each verifies (and rolls) only
67
+ * at its own endpoint: user-owned at /user/tokens, account-owned at
68
+ * /accounts/{id}/tokens. The user endpoint answers an account-owned token
69
+ * with 401 "Invalid API Token", which says nothing about its health, so a
70
+ * token is dead only when neither endpoint knows it. `account` skips the
71
+ * discovery call (GET /accounts, which a token can make for its own account).
72
+ */
73
+ export declare function locateCloudflareToken(token: string, account?: string): Promise<CloudflareTokenLocation>;
59
74
  export declare function basic(user: string, pass?: string): Record<string, string>;
60
75
  export declare function bearer(token: string): Record<string, string>;
61
76
  export declare function runProbe(spec: ProbeSpec | undefined, values: Values, ctx: Ctx, def: SecretDef): Promise<ProbeResult>;
@@ -54,14 +54,55 @@ export const PRESETS = {
54
54
  const code = r.body?.SUMMARY?.RESPONSE_CODE;
55
55
  return { ok: r.status === 200 && code === 1, detail: `synoptic → HTTP ${r.status}, RESPONSE_CODE ${code ?? '?'}` };
56
56
  },
57
- 'cloudflare-token': async (token) => {
58
- const r = await json('https://api.cloudflare.com/client/v4/user/tokens/verify', {
59
- headers: bearer(token),
60
- });
61
- const status = r.body?.result?.status;
62
- return { ok: status === 'active', detail: `cloudflare tokens/verify → HTTP ${r.status}, status ${status ?? '?'}` };
63
- },
57
+ 'cloudflare-token': async (token) => locateCloudflareToken(token),
64
58
  };
59
+ export const CLOUDFLARE_API = 'https://api.cloudflare.com/client/v4';
60
+ /**
61
+ * Cloudflare has two kinds of API token and each verifies (and rolls) only
62
+ * at its own endpoint: user-owned at /user/tokens, account-owned at
63
+ * /accounts/{id}/tokens. The user endpoint answers an account-owned token
64
+ * with 401 "Invalid API Token", which says nothing about its health, so a
65
+ * token is dead only when neither endpoint knows it. `account` skips the
66
+ * discovery call (GET /accounts, which a token can make for its own account).
67
+ */
68
+ export async function locateCloudflareToken(token, account) {
69
+ const headers = bearer(token);
70
+ const user = await json(`${CLOUDFLARE_API}/user/tokens/verify`, { headers });
71
+ const userStatus = user.body?.result?.status;
72
+ if (userStatus) {
73
+ return {
74
+ ok: userStatus === 'active',
75
+ detail: `cloudflare user token → HTTP ${user.status}, status ${userStatus}`,
76
+ id: user.body?.result?.id,
77
+ base: `${CLOUDFLARE_API}/user/tokens`,
78
+ };
79
+ }
80
+ if (user.status === 0)
81
+ return { ok: false, detail: 'cloudflare tokens/verify → no response' };
82
+ let accounts = account ? [account] : [];
83
+ let listed = '';
84
+ if (!account) {
85
+ const list = await json(`${CLOUDFLARE_API}/accounts`, { headers });
86
+ accounts = (list.body?.result ?? []).map((a) => a.id).filter((id) => !!id);
87
+ listed = `; GET /accounts → HTTP ${list.status}, ${accounts.length} account(s)`;
88
+ }
89
+ let last = '';
90
+ for (const id of accounts) {
91
+ const r = await json(`${CLOUDFLARE_API}/accounts/${id}/tokens/verify`, { headers });
92
+ const status = r.body?.result?.status;
93
+ if (status) {
94
+ return {
95
+ ok: status === 'active',
96
+ detail: `cloudflare account token (account ${id}) → HTTP ${r.status}, status ${status}`,
97
+ id: r.body?.result?.id,
98
+ base: `${CLOUDFLARE_API}/accounts/${id}/tokens`,
99
+ account: id,
100
+ };
101
+ }
102
+ last = `; account ${id} tokens/verify → HTTP ${r.status}`;
103
+ }
104
+ return { ok: false, detail: `cloudflare user tokens/verify → HTTP ${user.status}${listed}${last}` };
105
+ }
65
106
  export function basic(user, pass = '') {
66
107
  return { authorization: `Basic ${Buffer.from(`${user}:${pass}`).toString('base64')}` };
67
108
  }
@@ -1 +1 @@
1
- {"version":3,"file":"probes.js","sourceRoot":"","sources":["../../src/rotators/probes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"probes.js","sourceRoot":"","sources":["../../src/rotators/probes.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "super-secret",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "Import, push and rotate a project's secrets with 1Password as the store: dry run by default, values never printed, one manifest per repo.",
5
5
  "license": "MIT",
6
6
  "author": "Matthew Preucil",