@atlasauth/cli 0.16.0 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # @atlasauth/cli changelog
2
2
 
3
+ ## 0.18.0 — 2026-11-02
4
+
5
+ ### Fixed
6
+
7
+ - `atlas referrals connect --provider referalli` registers the two-way sync webhook limited to `--program` (`programIds: [<program>]`). It used to register it for every program, so a shared Referalli organization sent other products' referral events to the instance. A webhook an earlier run registered for every program is re-scoped in place.
8
+ - `connect` is idempotent: a second run reuses the instance's existing Referalli connection (one per instance) and sync webhook and updates them in place, never creating a duplicate. A secret the instance does not already hold is rotated on Referalli and saved (never printed). A connection for the instance in another program is refused with the program to use.
9
+ - `connect` sets `tracking_token` (from the Referalli organization) and `link_template` (`{link host}/go/{tracking token}/{code}`, on the active link domain when there is one); a link template set before is kept. What it cannot read is printed as the exact `PATCH /v1/instance/referrals` body left to send (`left_to_do` with `--json`).
10
+
11
+ ### Added
12
+
13
+ - `connect --link-template <url>`.
14
+ - `atlas referrals status --json` prints a `status` object (connection id, program, webhook endpoint id, URL and program scope, `link_template_set`, `tracking_token_set`, last sync, last test) next to the raw `settings`. The webhook scope is read from Referalli when a merchant key is given (`--referalli-key-file` or `REFERALLI_API_KEY`); otherwise it is `unknown`. The text output shows the link template, tracking token and, when known, the webhook scope.
15
+
16
+ ### Dependencies
17
+
18
+ - Pulls `@atlasauth/backend` 0.31.0, which depends on the published `@atlasauth/pca` ^0.4.3 instead of the deprecated 0.1.0, and `@atlasauth/upgrade` 0.7.0, which drops the deprecated `jscodeshift` 0.16 chain (`rimraf@2`, `glob@7`, `inflight`).
19
+
20
+ ## 0.17.0 — 2026-10-30
21
+
22
+ ### Added
23
+
24
+ - `atlas referrals backfill --own-map <file.csv>` and `--own-metadata-path <path>`: keep each user's own referral code (the one they share) through a backfill. The command reports how many were kept and names the customer refs whose code another user already holds.
25
+
3
26
  ## 0.16.0 — 2026-10-30
4
27
 
5
28
  ### Fixed
package/README.md CHANGED
@@ -44,6 +44,8 @@ atlas webhooks list | create --url <url> [--events a,b]
44
44
  atlas sessions revoke <id>
45
45
  atlas config export [--dir <path>] [--format json|yaml]
46
46
  atlas config import [--dir <path>] [--format json|yaml] [--dry-run] [--prune]
47
+ atlas plan [<file|dir>] [--check] [--json] [--secrets-file <dotenv>]
48
+ atlas apply [<file|dir>] [--yes] [--check] [--prune] [--secrets-file <dotenv>] [--out <dir>]
47
49
  atlas init --product <name> [--domain <d>] [--instance-env development|production] ...
48
50
  atlas preflight [--instance <id> | --product <name>] [--fail-on error|warning]
49
51
  atlas env --product <name> --format dotenv|coolify|vercel
@@ -133,4 +135,50 @@ Rules that make it safe and repeatable:
133
135
  - **Non-destructive.** `import` never deletes without `--prune`, and a resource
134
136
  type with no file is left untouched (only committed types are managed).
135
137
 
138
+ ### One file: `atlas apply` and `atlas plan`
139
+
140
+ `atlas apply atlas.yaml` takes one JSON or YAML file whose top-level keys are
141
+ the resource types above (or a directory from `config export`), shows the plan,
142
+ asks before applying (`--yes` skips the question; needed without a terminal),
143
+ and applies. Re-running it is a no-op. `atlas plan atlas.yaml` shows the
144
+ field-level diff without writing.
145
+
146
+ ```yaml
147
+ # atlas.yaml
148
+ instance:
149
+ allowed_origins: [https://app.example.com]
150
+ auth_config:
151
+ signUpMode: restricted
152
+ redirect_urls:
153
+ - url: https://app.example.com/auth/callback
154
+ webhook_endpoints:
155
+ - url: https://app.example.com/webhooks/atlas
156
+ enabled_events: [user.created, user.updated, session.revoked]
157
+ ```
158
+
159
+ ```sh
160
+ atlas plan atlas.yaml --check # CI: exit 2 when the instance differs
161
+ atlas apply atlas.yaml # plan, confirm, apply
162
+ atlas apply atlas.yaml --yes --secrets-file .atlas.secrets # non-interactive
163
+ ```
164
+
165
+ - **CI gate.** `--check` (on `plan`, `apply` and `config plan`; alias `--exit-code`)
166
+ exits 2 when there is drift and never writes.
167
+ - **Secrets.** `${VAR}` placeholders resolve from the environment, then from
168
+ `--secrets-file` (a dotenv file). The file must be readable only by you
169
+ (`chmod 600`); anything looser is refused. `apply` stops before writing if a
170
+ placeholder is still unresolved.
171
+ - **New secrets.** When `apply` creates an OAuth client or a webhook endpoint,
172
+ the one-time `client_secret` / signing secret goes to a mode-0600 dotenv file
173
+ (`~/.config/atlas`, or `--out <dir>`) and the CLI prints the path.
174
+ - **Order.** The CLI applies resource types in a fixed order: `instance`,
175
+ `org_settings_schema`, `redirect_urls`, `oauth_clients`, `oauth_providers`,
176
+ `custom_oauth_providers`, `resource_servers`, `jwt_templates`, `permissions`,
177
+ `roles`, `webhook_endpoints`, `sso_connections`, `billing_plans`,
178
+ `notification_templates`, `email_templates`, `organization_policies`. The
179
+ ordering is done by the CLI, not by the server. The email provider and the
180
+ `before_user_create` hook are not part of config files: set up the email
181
+ provider (your own Resend or Brevo account) before you apply sign-in methods
182
+ that send email, or they stay listed as inactive until you do.
183
+
136
184
  Ship it on push with the [`atlas-deploy` GitHub Action](../../actions/atlas-deploy).
package/dist/args.d.ts CHANGED
@@ -241,6 +241,9 @@ declare const OPTIONS: {
241
241
  readonly 'exit-code': {
242
242
  readonly type: "boolean";
243
243
  };
244
+ readonly check: {
245
+ readonly type: "boolean";
246
+ };
244
247
  readonly provider: {
245
248
  readonly type: "string";
246
249
  };
@@ -286,6 +289,9 @@ declare const OPTIONS: {
286
289
  readonly 'tracking-token': {
287
290
  readonly type: "string";
288
291
  };
292
+ readonly 'link-template': {
293
+ readonly type: "string";
294
+ };
289
295
  readonly 'no-sync': {
290
296
  readonly type: "boolean";
291
297
  };
@@ -310,6 +316,12 @@ declare const OPTIONS: {
310
316
  readonly 'metadata-path': {
311
317
  readonly type: "string";
312
318
  };
319
+ readonly 'own-map': {
320
+ readonly type: "string";
321
+ };
322
+ readonly 'own-metadata-path': {
323
+ readonly type: "string";
324
+ };
313
325
  readonly wait: {
314
326
  readonly type: "boolean";
315
327
  };
package/dist/args.js CHANGED
@@ -112,8 +112,9 @@ const OPTIONS = {
112
112
  framework: { type: 'string' },
113
113
  manifest: { type: 'string', multiple: true },
114
114
  'no-atlas': { type: 'boolean' },
115
- // config plan.
115
+ // config plan / plan / apply: exit 2 on drift (`--check` is the CI spelling).
116
116
  'exit-code': { type: 'boolean' },
117
+ check: { type: 'boolean' },
117
118
  // referrals connect / backfill.
118
119
  provider: { type: 'string' },
119
120
  program: { type: 'string' },
@@ -134,6 +135,7 @@ const OPTIONS = {
134
135
  'auto-enroll': { type: 'boolean' },
135
136
  destination: { type: 'string' },
136
137
  'tracking-token': { type: 'string' },
138
+ 'link-template': { type: 'string' },
137
139
  'no-sync': { type: 'boolean' },
138
140
  'allow-mode-mismatch': { type: 'boolean' },
139
141
  endpoint: { type: 'string' },
@@ -142,6 +144,8 @@ const OPTIONS = {
142
144
  since: { type: 'string' },
143
145
  map: { type: 'string' },
144
146
  'metadata-path': { type: 'string' },
147
+ 'own-map': { type: 'string' },
148
+ 'own-metadata-path': { type: 'string' },
145
149
  wait: { type: 'boolean' },
146
150
  // import --from <vendor>.
147
151
  from: { type: 'string' },
package/dist/args.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"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"}
@@ -45,6 +45,30 @@ export interface FieldDiff {
45
45
  }
46
46
  /** Leaf-level differences between two documents, as dotted paths (arrays compare whole). */
47
47
  export declare function diffFields(before: Json | undefined, after: Json | undefined, path?: string): FieldDiff[];
48
+ /**
49
+ * The environment `${VAR}` placeholders resolve against: the process env, then
50
+ * `--secrets-file` (a dotenv file) on top. The file holds credentials, so it
51
+ * must be readable by its owner only (mode 0600 or stricter); anything looser
52
+ * is refused rather than read. POSIX only: Windows has no such mode bits.
53
+ */
54
+ export declare function readSecretsEnv(ctx: RunContext, values: Values): NodeJS.ProcessEnv;
55
+ /** `${VAR}` placeholders still in a planned change (no env value and no --secrets-file entry). */
56
+ export declare function unresolvedPlaceholders(changes: Change[]): string[];
57
+ /** The resource types a single config file may hold, in the order they are applied. */
58
+ export declare function configTypes(): string[];
59
+ /**
60
+ * `atlas plan [<file|dir>]`: the read-only diff of `atlas config plan`, taking
61
+ * a single config file as well. `--check` exits 2 on drift for CI.
62
+ */
63
+ export declare function planCommand(ctx: RunContext, args: ParsedArgs): Promise<number>;
64
+ /**
65
+ * `atlas apply [<file|dir>]`: plan, show it, confirm, then apply in the fixed
66
+ * resource order (see {@link configTypes}). `--yes` skips the question (needed
67
+ * when there is no terminal); `--check` only plans and exits 2 on drift.
68
+ * Refuses to apply while any `${VAR}` placeholder is unresolved, so a missing
69
+ * secret is never sent as the literal text.
70
+ */
71
+ export declare function applyCommand(ctx: RunContext, args: ParsedArgs): Promise<number>;
48
72
  export declare function printPlan(ctx: RunContext, changes: Change[], unchanged: number, skippedDeletes: Change[], opts: {
49
73
  dryRun: boolean;
50
74
  prune: boolean;
@@ -4,6 +4,11 @@ exports.config = config;
4
4
  exports.resolveFormat = resolveFormat;
5
5
  exports.planConfigImport = planConfigImport;
6
6
  exports.diffFields = diffFields;
7
+ exports.readSecretsEnv = readSecretsEnv;
8
+ exports.unresolvedPlaceholders = unresolvedPlaceholders;
9
+ exports.configTypes = configTypes;
10
+ exports.planCommand = planCommand;
11
+ exports.applyCommand = applyCommand;
7
12
  exports.printPlan = printPlan;
8
13
  exports.interpolate = interpolate;
9
14
  const node_fs_1 = require("node:fs");
@@ -15,6 +20,7 @@ const errors_1 = require("../errors");
15
20
  const serialize_1 = require("../serialize");
16
21
  const backend_1 = require("@atlasauth/backend");
17
22
  const shared_1 = require("./shared");
23
+ const secrets_1 = require("../secrets");
18
24
  // ───────────────────────────── small helpers ─────────────────────────────
19
25
  /** GET a `{ data: [...] }` list envelope, tolerating an absent/garbled body. */
20
26
  async function listData(http, path) {
@@ -621,7 +627,7 @@ async function config(ctx, args) {
621
627
  case 'import':
622
628
  return importConfig(ctx, args.values);
623
629
  case 'plan':
624
- return planConfig(ctx, args.values);
630
+ return planConfig(ctx, args.values, { dir: resolveDir(args.values), format: resolveFormat(args.values), env: readSecretsEnv(ctx, args.values) });
625
631
  case 'promote':
626
632
  return promoteConfig(ctx, args.values);
627
633
  default:
@@ -817,7 +823,7 @@ async function importConfig(ctx, values) {
817
823
  const format = resolveFormat(values);
818
824
  const dryRun = values['dry-run'] === true;
819
825
  const prune = values.prune === true;
820
- const plan = await planConfigImport(http, { dir, format, env: ctx.env, prune });
826
+ const plan = await planConfigImport(http, { dir, format, env: readSecretsEnv(ctx, values), prune });
821
827
  printPlan(ctx, plan.changes, plan.unchanged, plan.skippedDeletes, { dryRun, prune });
822
828
  if (dryRun)
823
829
  return 0;
@@ -849,12 +855,11 @@ const show = (v) => (v === undefined ? '(unset)' : typeof v === 'string' ? JSON.
849
855
  * Field-level for updates, `--json` for tooling, and `--exit-code` to exit 2
850
856
  * when there is drift so CI can gate on it. Never writes anything.
851
857
  */
852
- async function planConfig(ctx, values) {
858
+ async function planConfig(ctx, values, source) {
853
859
  const http = requireHttp(ctx, values);
854
- const dir = resolveDir(values);
855
- const format = resolveFormat(values);
860
+ const { dir, format, env } = source;
856
861
  const prune = values.prune === true;
857
- const plan = await planConfigImport(http, { dir, format, env: ctx.env, prune });
862
+ const plan = await planConfigImport(http, { dir, format, env, prune });
858
863
  const deletes = prune ? [] : plan.skippedDeletes;
859
864
  const all = plan.changes;
860
865
  const rows = all.map((c) => ({
@@ -894,7 +899,167 @@ async function planConfig(ctx, values) {
894
899
  if (pending === 0)
895
900
  ctx.io.out('No drift: the instance matches the config directory.');
896
901
  }
897
- return values['exit-code'] === true && pending > 0 ? 2 : 0;
902
+ return wantsCheck(values) && pending > 0 ? 2 : 0;
903
+ }
904
+ /** `--check` (CI) and `--exit-code` (Terraform's name) both mean: exit 2 when there is drift. */
905
+ const wantsCheck = (values) => values['exit-code'] === true || values.check === true;
906
+ /**
907
+ * The environment `${VAR}` placeholders resolve against: the process env, then
908
+ * `--secrets-file` (a dotenv file) on top. The file holds credentials, so it
909
+ * must be readable by its owner only (mode 0600 or stricter); anything looser
910
+ * is refused rather than read. POSIX only: Windows has no such mode bits.
911
+ */
912
+ function readSecretsEnv(ctx, values) {
913
+ const file = (0, args_1.str)(values, 'secrets-file');
914
+ if (!file)
915
+ return ctx.env;
916
+ let mode;
917
+ try {
918
+ mode = (0, node_fs_1.statSync)(file).mode;
919
+ }
920
+ catch {
921
+ throw new errors_1.CliError(`--secrets-file not found: ${file}.`);
922
+ }
923
+ if (process.platform !== 'win32' && (mode & 0o077) !== 0) {
924
+ throw new errors_1.CliError(`--secrets-file ${file} is readable by others (mode ${(mode & 0o777).toString(8)}). Run 'chmod 600 ${file}' and try again.`);
925
+ }
926
+ return { ...ctx.env, ...(0, secrets_1.parseDotenv)(ctx.readFile(file)) };
927
+ }
928
+ /** `${VAR}` placeholders still in a planned change (no env value and no --secrets-file entry). */
929
+ function unresolvedPlaceholders(changes) {
930
+ const names = new Set();
931
+ for (const c of changes) {
932
+ for (const m of JSON.stringify(c.after ?? null).matchAll(/\$\{([A-Z0-9_]+)\}/g))
933
+ names.add(m[1]);
934
+ }
935
+ return [...names].sort();
936
+ }
937
+ /** The resource types a single config file may hold, in the order they are applied. */
938
+ function configTypes() {
939
+ return registry().map((s) => s.type);
940
+ }
941
+ /**
942
+ * Resolve `atlas plan|apply [<path>]`: a directory of per-type files (as
943
+ * `atlas config export` writes), or ONE file whose top-level keys are resource
944
+ * types (`instance`, `webhook_endpoints`, …), split into a temp directory.
945
+ * `cleanup` removes that temp directory.
946
+ */
947
+ function resolveSource(ctx, args) {
948
+ const path = args.positionals[1] ?? resolveDir(args.values);
949
+ const env = readSecretsEnv(ctx, args.values);
950
+ let isFile = false;
951
+ try {
952
+ isFile = (0, node_fs_1.statSync)(path).isFile();
953
+ }
954
+ catch {
955
+ throw new errors_1.CliError(`Config not found: ${path}. Pass a config file (atlas.yaml / atlas.json) or a directory from 'atlas config export'.`);
956
+ }
957
+ if (!isFile)
958
+ return { dir: path, format: resolveFormat(args.values), env, cleanup: () => undefined };
959
+ const ext = (0, node_path_1.extname)(path).toLowerCase();
960
+ const format = ext === '.yaml' || ext === '.yml' ? 'yaml' : ext === '.json' ? 'json' : resolveFormat(args.values);
961
+ const doc = (0, serialize_1.deserialize)(ctx.readFile(path), format);
962
+ if (doc === null || typeof doc !== 'object' || Array.isArray(doc)) {
963
+ throw new errors_1.CliError(`${path} must be an object keyed by resource type (${configTypes().join(', ')}).`);
964
+ }
965
+ const known = new Set(configTypes());
966
+ const unknown = Object.keys(doc).filter((k) => !known.has(k));
967
+ if (unknown.length) {
968
+ throw new errors_1.CliError(`${path}: unknown resource type(s) ${unknown.join(', ')}. Known: ${configTypes().join(', ')}.`);
969
+ }
970
+ const dir = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), 'atlas-apply-'));
971
+ for (const [type, value] of Object.entries(doc))
972
+ (0, node_fs_1.writeFileSync)((0, node_path_1.join)(dir, `${type}.json`), (0, serialize_1.serialize)(value, 'json'));
973
+ return { dir, format: 'json', env, cleanup: () => (0, node_fs_1.rmSync)(dir, { recursive: true, force: true }) };
974
+ }
975
+ /**
976
+ * `atlas plan [<file|dir>]`: the read-only diff of `atlas config plan`, taking
977
+ * a single config file as well. `--check` exits 2 on drift for CI.
978
+ */
979
+ async function planCommand(ctx, args) {
980
+ const source = resolveSource(ctx, args);
981
+ try {
982
+ return await planConfig(ctx, args.values, source);
983
+ }
984
+ finally {
985
+ source.cleanup();
986
+ }
987
+ }
988
+ /**
989
+ * `atlas apply [<file|dir>]`: plan, show it, confirm, then apply in the fixed
990
+ * resource order (see {@link configTypes}). `--yes` skips the question (needed
991
+ * when there is no terminal); `--check` only plans and exits 2 on drift.
992
+ * Refuses to apply while any `${VAR}` placeholder is unresolved, so a missing
993
+ * secret is never sent as the literal text.
994
+ */
995
+ async function applyCommand(ctx, args) {
996
+ const values = args.values;
997
+ if (values.check === true || values['exit-code'] === true)
998
+ return planCommand(ctx, args);
999
+ const source = resolveSource(ctx, args);
1000
+ try {
1001
+ const kept = keepingSecrets(requireHttp(ctx, values), (0, args_1.str)(values, 'out') || (0, secrets_1.productDir)(ctx.env, 'atlas'));
1002
+ const prune = values.prune === true;
1003
+ const plan = await planConfigImport(kept.http, { dir: source.dir, format: source.format, env: source.env, prune });
1004
+ printPlan(ctx, plan.changes, plan.unchanged, plan.skippedDeletes, { dryRun: false, prune });
1005
+ if (plan.changes.length === 0) {
1006
+ ctx.io.out('No changes to apply.');
1007
+ return 0;
1008
+ }
1009
+ const missing = unresolvedPlaceholders(plan.changes);
1010
+ if (missing.length) {
1011
+ throw new errors_1.CliError(`Unresolved placeholder(s): ${missing.map((n) => `\${${n}}`).join(', ')}. Set them in the environment or in --secrets-file.`);
1012
+ }
1013
+ if (values.yes !== true) {
1014
+ const answer = (await ctx.prompt.text(`Apply ${plan.changes.length} change(s)? [y/N]`, { default: 'n' })).trim().toLowerCase();
1015
+ if (answer !== 'y' && answer !== 'yes') {
1016
+ ctx.io.out('Nothing applied.');
1017
+ return 1;
1018
+ }
1019
+ }
1020
+ for (const change of plan.changes)
1021
+ await change.apply();
1022
+ ctx.io.out(`Applied ${plan.changes.length} change(s).`);
1023
+ for (const path of kept.saved)
1024
+ ctx.io.out(`A new secret was written to ${path} (mode 0600). It is shown only once.`);
1025
+ return 0;
1026
+ }
1027
+ finally {
1028
+ source.cleanup();
1029
+ }
1030
+ }
1031
+ /**
1032
+ * The API, but a create that answers with a one-time secret (a new OAuth
1033
+ * client's `client_secret`, a new webhook endpoint's `secret`) writes it to a
1034
+ * 0600 dotenv file in `dir` (default `~/.config/atlas`, or `--out`) instead of
1035
+ * dropping it. The file names are the hosted-redirect env names.
1036
+ */
1037
+ function keepingSecrets(http, dir) {
1038
+ const saved = [];
1039
+ const wrapped = {
1040
+ get: (path) => http.get(path),
1041
+ put: (path, body) => http.put(path, body),
1042
+ patch: (path, body) => http.patch(path, body),
1043
+ delete: (path, body) => http.delete(path, body),
1044
+ async post(path, body) {
1045
+ const res = await http.post(path, body);
1046
+ const r = (res ?? {});
1047
+ const id = String(r.id ?? r.client_id ?? 'new').replace(/[^A-Za-z0-9_-]/g, '_');
1048
+ let entries = null;
1049
+ if (path === '/v1/oauth_clients' && typeof r.client_secret === 'string') {
1050
+ entries = { ATLAS_CLIENT_ID: String(r.client_id ?? ''), ATLAS_CLIENT_SECRET: r.client_secret };
1051
+ }
1052
+ else if (path === '/v1/webhook_endpoints' && typeof r.secret === 'string') {
1053
+ entries = { ATLAS_WEBHOOK_SECRET: r.secret };
1054
+ }
1055
+ if (entries) {
1056
+ const kind = path === '/v1/oauth_clients' ? 'oauth-client' : 'webhook';
1057
+ saved.push((0, secrets_1.writeSecretFile)(dir, `${kind}-${id}.env`, entries, { comment: `Written by atlas apply. ${kind} ${id}.` }).path);
1058
+ }
1059
+ return res;
1060
+ },
1061
+ };
1062
+ return { http: wrapped, saved };
898
1063
  }
899
1064
  function printPlan(ctx, changes, unchanged, skippedDeletes, opts) {
900
1065
  const heading = opts.dryRun ? 'Plan (dry run — nothing applied):' : 'Plan:';