@withandeo/cli 0.9.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/README.md +383 -0
- package/dist/andeo-environment.d.ts +2 -0
- package/dist/andeo-environment.d.ts.map +1 -0
- package/dist/andeo-environment.js +17 -0
- package/dist/andeo-environment.js.map +1 -0
- package/dist/api.d.ts +109 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +141 -0
- package/dist/api.js.map +1 -0
- package/dist/artifact.d.ts +8 -0
- package/dist/artifact.d.ts.map +1 -0
- package/dist/artifact.js +205 -0
- package/dist/artifact.js.map +1 -0
- package/dist/auth-store.d.ts +51 -0
- package/dist/auth-store.d.ts.map +1 -0
- package/dist/auth-store.js +242 -0
- package/dist/auth-store.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +4 -0
- package/dist/cli.js.map +1 -0
- package/dist/contracts.d.ts +251 -0
- package/dist/contracts.d.ts.map +1 -0
- package/dist/contracts.js +5 -0
- package/dist/contracts.js.map +1 -0
- package/dist/errors.d.ts +10 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +19 -0
- package/dist/errors.js.map +1 -0
- package/dist/files.d.ts +22 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/files.js +285 -0
- package/dist/files.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/main.d.ts +38 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +2140 -0
- package/dist/main.js.map +1 -0
- package/dist/oauth.d.ts +67 -0
- package/dist/oauth.d.ts.map +1 -0
- package/dist/oauth.js +187 -0
- package/dist/oauth.js.map +1 -0
- package/dist/processes.d.ts +12 -0
- package/dist/processes.d.ts.map +1 -0
- package/dist/processes.js +48 -0
- package/dist/processes.js.map +1 -0
- package/dist/profile-bindings.d.ts +26 -0
- package/dist/profile-bindings.d.ts.map +1 -0
- package/dist/profile-bindings.js +214 -0
- package/dist/profile-bindings.js.map +1 -0
- package/dist/starter.d.ts +20 -0
- package/dist/starter.d.ts.map +1 -0
- package/dist/starter.js +154 -0
- package/dist/starter.js.map +1 -0
- package/package.json +40 -0
- package/skill/tender-accounts/SKILL.md +384 -0
- package/templates/shopify-customer-account/AGENTS.md +15 -0
- package/templates/shopify-customer-account/CLAUDE.md +1 -0
- package/templates/shopify-customer-account/README.md +50 -0
- package/templates/shopify-customer-account/apps/gateway/AGENTS.md +10 -0
- package/templates/shopify-customer-account/apps/gateway/CLAUDE.md +1 -0
- package/templates/shopify-customer-account/apps/gateway/README.md +9 -0
- package/templates/shopify-customer-account/apps/gateway/database-schema.json +49 -0
- package/templates/shopify-customer-account/apps/gateway/dot.dev.vars.example +12 -0
- package/templates/shopify-customer-account/apps/gateway/migrations/0001_customer_auth.sql +76 -0
- package/templates/shopify-customer-account/apps/gateway/package.json +25 -0
- package/templates/shopify-customer-account/apps/gateway/scripts/build-worker.mjs +15 -0
- package/templates/shopify-customer-account/apps/gateway/scripts/pack-tender-artifact.mjs +85 -0
- package/templates/shopify-customer-account/apps/gateway/src/platform/customer-auth/hostname-policy.ts +76 -0
- package/templates/shopify-customer-account/apps/gateway/src/platform/customer-auth/schema.ts +90 -0
- package/templates/shopify-customer-account/apps/gateway/src/platform/customer-auth/session-store.ts +864 -0
- package/templates/shopify-customer-account/apps/gateway/src/platform/customer-auth/shopify-route-adapter.ts +1157 -0
- package/templates/shopify-customer-account/apps/gateway/src/platform/runtime-hostname.ts +46 -0
- package/templates/shopify-customer-account/apps/gateway/src/portal-service.test.ts +70 -0
- package/templates/shopify-customer-account/apps/gateway/src/portal-service.ts +71 -0
- package/templates/shopify-customer-account/apps/gateway/src/runtime-config.test.ts +30 -0
- package/templates/shopify-customer-account/apps/gateway/src/runtime-config.ts +58 -0
- package/templates/shopify-customer-account/apps/gateway/src/worker.ts +86 -0
- package/templates/shopify-customer-account/apps/gateway/tender-accounts.json +10 -0
- package/templates/shopify-customer-account/apps/gateway/tender-app.config.json +40 -0
- package/templates/shopify-customer-account/apps/gateway/tsconfig.json +13 -0
- package/templates/shopify-customer-account/apps/gateway/vitest.config.ts +8 -0
- package/templates/shopify-customer-account/apps/gateway/worker-configuration.d.ts +26 -0
- package/templates/shopify-customer-account/apps/gateway/wrangler.jsonc +42 -0
- package/templates/shopify-customer-account/apps/portal/AGENTS.md +10 -0
- package/templates/shopify-customer-account/apps/portal/CLAUDE.md +1 -0
- package/templates/shopify-customer-account/apps/portal/README.md +7 -0
- package/templates/shopify-customer-account/apps/portal/index.html +13 -0
- package/templates/shopify-customer-account/apps/portal/package.json +33 -0
- package/templates/shopify-customer-account/apps/portal/scripts/build-worker.mjs +11 -0
- package/templates/shopify-customer-account/apps/portal/scripts/pack-tender-artifact.mjs +63 -0
- package/templates/shopify-customer-account/apps/portal/scripts/portal-worker.mjs +84 -0
- package/templates/shopify-customer-account/apps/portal/scripts/portal-worker.test.mjs +14 -0
- package/templates/shopify-customer-account/apps/portal/src/App.tsx +111 -0
- package/templates/shopify-customer-account/apps/portal/src/main.tsx +10 -0
- package/templates/shopify-customer-account/apps/portal/src/styles.css +54 -0
- package/templates/shopify-customer-account/apps/portal/tender-accounts.json +10 -0
- package/templates/shopify-customer-account/apps/portal/tender-app.config.json +19 -0
- package/templates/shopify-customer-account/apps/portal/tsconfig.json +14 -0
- package/templates/shopify-customer-account/apps/portal/vite.config.ts +7 -0
- package/templates/shopify-customer-account/apps/portal/worker-configuration.d.ts +11 -0
- package/templates/shopify-customer-account/apps/portal/wrangler.jsonc +22 -0
- package/templates/shopify-customer-account/dot.dev.vars.example +4 -0
- package/templates/shopify-customer-account/dot.gitignore +9 -0
- package/templates/shopify-customer-account/package.json +22 -0
- package/templates/shopify-customer-account/scripts/artifact-contract.mjs +109 -0
package/dist/api.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type BuildEnvelope, type VerifiedArtifact } from "./contracts.js";
|
|
2
|
+
export declare function verifyArtifact(directory: string): Promise<VerifiedArtifact>;
|
|
3
|
+
export declare function labelLocalArtifact(artifact: VerifiedArtifact, input: {
|
|
4
|
+
gitRevision: string;
|
|
5
|
+
dirty: boolean;
|
|
6
|
+
}): Promise<VerifiedArtifact>;
|
|
7
|
+
export declare function parseBuildEnvelope(value: string): BuildEnvelope;
|
|
8
|
+
//# sourceMappingURL=artifact.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact.d.ts","sourceRoot":"","sources":["../src/artifact.ts"],"names":[],"mappings":"AAGA,OAAO,EAKL,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AAQxB,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAiCjF;AAED,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,gBAAgB,EAC1B,KAAK,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC7C,OAAO,CAAC,gBAAgB,CAAC,CAM3B;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CA2D/D"}
|
package/dist/artifact.js
ADDED
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { writeFile } from "node:fs/promises";
|
|
3
|
+
import { resolve } from "node:path";
|
|
4
|
+
import { BUILD_ENVELOPE_FILENAME, BUILD_ENVELOPE_SCHEMA, } from "./contracts.js";
|
|
5
|
+
import { CliError } from "./errors.js";
|
|
6
|
+
import { readBoundedFile, safeArtifactPath } from "./files.js";
|
|
7
|
+
const MAX_ENVELOPE_BYTES = 1024 * 1024;
|
|
8
|
+
const MAX_FILE_BYTES = 25 * 1024 * 1024;
|
|
9
|
+
const MAX_TOTAL_BYTES = 50 * 1024 * 1024;
|
|
10
|
+
export async function verifyArtifact(directory) {
|
|
11
|
+
const root = resolve(directory);
|
|
12
|
+
const envelopePath = resolve(root, BUILD_ENVELOPE_FILENAME);
|
|
13
|
+
const envelopeText = new TextDecoder("utf8", { fatal: true }).decode(await readBoundedFile(envelopePath, MAX_ENVELOPE_BYTES));
|
|
14
|
+
const envelope = parseBuildEnvelope(envelopeText);
|
|
15
|
+
const descriptors = [
|
|
16
|
+
{ path: "worker.mjs", descriptor: envelope.manifest.module },
|
|
17
|
+
...envelope.manifest.files.map((descriptor) => ({ path: `assets/${descriptor.path}`, descriptor })),
|
|
18
|
+
];
|
|
19
|
+
let totalBytes = 0;
|
|
20
|
+
for (const { path, descriptor } of descriptors) {
|
|
21
|
+
const bytes = await readBoundedFile(safeArtifactPath(root, path), Math.min(descriptor.bytes, MAX_FILE_BYTES));
|
|
22
|
+
if (bytes.byteLength !== descriptor.bytes || sha256(bytes) !== descriptor.sha256) {
|
|
23
|
+
throw new CliError("artifact_integrity_failed", `Artifact bytes do not match the retained descriptor for ${path}.`);
|
|
24
|
+
}
|
|
25
|
+
totalBytes += bytes.byteLength;
|
|
26
|
+
}
|
|
27
|
+
if (totalBytes > MAX_TOTAL_BYTES) {
|
|
28
|
+
throw new CliError("artifact_too_large", "The artifact exceeds the 50 MiB developer-delivery limit.");
|
|
29
|
+
}
|
|
30
|
+
const calculatedBundleDigest = sha256(Buffer.from(JSON.stringify(artifactContentLedger(envelope.manifest))));
|
|
31
|
+
if (calculatedBundleDigest !== envelope.bundleDigest) {
|
|
32
|
+
throw new CliError("artifact_integrity_failed", "The artifact manifest does not match its bundle digest.");
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
directory: root,
|
|
36
|
+
envelopePath,
|
|
37
|
+
envelope,
|
|
38
|
+
fileCount: descriptors.length,
|
|
39
|
+
totalBytes,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
export async function labelLocalArtifact(artifact, input) {
|
|
43
|
+
if (!input.dirty)
|
|
44
|
+
return artifact;
|
|
45
|
+
const sourceRevision = `local-${input.gitRevision.slice(0, 12)}-${artifact.envelope.bundleDigest.slice(0, 12)}`;
|
|
46
|
+
const envelope = { ...artifact.envelope, sourceRevision };
|
|
47
|
+
await writeFile(artifact.envelopePath, `${JSON.stringify(envelope, null, 2)}\n`, "utf8");
|
|
48
|
+
return { ...artifact, envelope };
|
|
49
|
+
}
|
|
50
|
+
export function parseBuildEnvelope(value) {
|
|
51
|
+
let candidate;
|
|
52
|
+
try {
|
|
53
|
+
candidate = JSON.parse(value);
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
throw new CliError("artifact_envelope_invalid", "The artifact build envelope is not valid JSON.");
|
|
57
|
+
}
|
|
58
|
+
if (!isRecord(candidate) || candidate.schema !== BUILD_ENVELOPE_SCHEMA || !isRecord(candidate.manifest)) {
|
|
59
|
+
throw new CliError("artifact_envelope_invalid", `The artifact must use ${BUILD_ENVELOPE_SCHEMA}.`);
|
|
60
|
+
}
|
|
61
|
+
const sourceRevision = requiredSourceRevision(candidate.sourceRevision);
|
|
62
|
+
const bundleDigest = requiredDigest(candidate.bundleDigest, "bundle digest");
|
|
63
|
+
const manifest = candidate.manifest;
|
|
64
|
+
if (manifest.schema !== "tender.account-artifact/v1" || !isRecord(manifest.app) || !isRecord(manifest.runtime)) {
|
|
65
|
+
throw new CliError("artifact_manifest_invalid", "The artifact manifest uses an unsupported shape.");
|
|
66
|
+
}
|
|
67
|
+
if (manifest.app.fixture === true) {
|
|
68
|
+
throw new CliError("artifact_manifest_invalid", "Merchant artifacts cannot identify themselves as platform fixtures.");
|
|
69
|
+
}
|
|
70
|
+
const app = {
|
|
71
|
+
...manifest.app,
|
|
72
|
+
slug: requiredString(manifest.app.slug, "app slug"),
|
|
73
|
+
label: requiredString(manifest.app.label, "app label"),
|
|
74
|
+
version: requiredString(manifest.app.version, "app version"),
|
|
75
|
+
fixture: false,
|
|
76
|
+
};
|
|
77
|
+
const runtime = {
|
|
78
|
+
...manifest.runtime,
|
|
79
|
+
kind: requiredString(manifest.runtime.kind, "runtime kind"),
|
|
80
|
+
assetPrefix: requiredString(manifest.runtime.assetPrefix, "asset prefix"),
|
|
81
|
+
};
|
|
82
|
+
if (runtime.kind !== "worker" && runtime.kind !== "worker-assets") {
|
|
83
|
+
throw new CliError("artifact_manifest_invalid", "Developer delivery requires a compiled Worker module.");
|
|
84
|
+
}
|
|
85
|
+
if (runtime.assetPrefix !== `/_tenant-artifacts/${bundleDigest}`) {
|
|
86
|
+
throw new CliError("artifact_manifest_invalid", "The artifact asset prefix does not match its bundle digest.");
|
|
87
|
+
}
|
|
88
|
+
const module = artifactModule(manifest.module);
|
|
89
|
+
const files = artifactFiles(manifest.files);
|
|
90
|
+
if (!Array.isArray(manifest.resources) || !Array.isArray(manifest.services)) {
|
|
91
|
+
throw new CliError("artifact_manifest_invalid", "The artifact resource and service declarations must be arrays.");
|
|
92
|
+
}
|
|
93
|
+
const secrets = manifest.secrets === undefined ? undefined : secretNames(manifest.secrets);
|
|
94
|
+
return {
|
|
95
|
+
schema: BUILD_ENVELOPE_SCHEMA,
|
|
96
|
+
sourceRevision,
|
|
97
|
+
bundleDigest,
|
|
98
|
+
manifest: {
|
|
99
|
+
...manifest,
|
|
100
|
+
schema: "tender.account-artifact/v1",
|
|
101
|
+
app,
|
|
102
|
+
runtime,
|
|
103
|
+
module,
|
|
104
|
+
files,
|
|
105
|
+
resources: manifest.resources,
|
|
106
|
+
services: manifest.services,
|
|
107
|
+
...(secrets === undefined ? {} : { secrets }),
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
function artifactModule(value) {
|
|
112
|
+
if (!isRecord(value) || value.path !== "worker.mjs" || value.contentType !== "application/javascript+module") {
|
|
113
|
+
throw new CliError("artifact_manifest_invalid", "The artifact Worker module descriptor is missing or invalid.");
|
|
114
|
+
}
|
|
115
|
+
return {
|
|
116
|
+
path: "worker.mjs",
|
|
117
|
+
sha256: requiredDigest(value.sha256, "Worker module digest"),
|
|
118
|
+
bytes: requiredBytes(value.bytes, "Worker module bytes"),
|
|
119
|
+
contentType: "application/javascript+module",
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
function artifactFiles(value) {
|
|
123
|
+
if (!Array.isArray(value) || value.length > 249) {
|
|
124
|
+
throw new CliError("artifact_manifest_invalid", "The artifact public file list is invalid.");
|
|
125
|
+
}
|
|
126
|
+
const result = [];
|
|
127
|
+
let previous = "";
|
|
128
|
+
for (const candidate of value) {
|
|
129
|
+
if (!isRecord(candidate))
|
|
130
|
+
throw new CliError("artifact_manifest_invalid", "An artifact file descriptor is invalid.");
|
|
131
|
+
const path = requiredString(candidate.path, "artifact path");
|
|
132
|
+
if (!isSafePath(path) || (previous && path.localeCompare(previous) <= 0)) {
|
|
133
|
+
throw new CliError("artifact_manifest_invalid", "Artifact paths must be safe, unique, and sorted.");
|
|
134
|
+
}
|
|
135
|
+
result.push({
|
|
136
|
+
path,
|
|
137
|
+
sha256: requiredDigest(candidate.sha256, `digest for ${path}`),
|
|
138
|
+
bytes: requiredBytes(candidate.bytes, `bytes for ${path}`, true),
|
|
139
|
+
});
|
|
140
|
+
previous = path;
|
|
141
|
+
}
|
|
142
|
+
return result;
|
|
143
|
+
}
|
|
144
|
+
function secretNames(value) {
|
|
145
|
+
if (!Array.isArray(value) || value.length > 32) {
|
|
146
|
+
throw new CliError("artifact_manifest_invalid", "The artifact secret declaration list is invalid.");
|
|
147
|
+
}
|
|
148
|
+
const result = [];
|
|
149
|
+
let previous = "";
|
|
150
|
+
for (const candidate of value) {
|
|
151
|
+
if (typeof candidate !== "string" || !/^[A-Z][A-Z0-9_]{2,63}$/u.test(candidate)
|
|
152
|
+
|| candidate.startsWith("TENDER_") || candidate === "ASSETS"
|
|
153
|
+
|| (previous && candidate.localeCompare(previous) <= 0)) {
|
|
154
|
+
throw new CliError("artifact_manifest_invalid", "Artifact secret names must be safe, unique, and sorted.");
|
|
155
|
+
}
|
|
156
|
+
result.push(candidate);
|
|
157
|
+
previous = candidate;
|
|
158
|
+
}
|
|
159
|
+
return result;
|
|
160
|
+
}
|
|
161
|
+
function artifactContentLedger(manifest) {
|
|
162
|
+
if (manifest.databaseSchema !== undefined) {
|
|
163
|
+
return { module: manifest.module, files: manifest.files, databaseSchema: manifest.databaseSchema };
|
|
164
|
+
}
|
|
165
|
+
return { module: manifest.module, files: manifest.files };
|
|
166
|
+
}
|
|
167
|
+
function requiredSourceRevision(value) {
|
|
168
|
+
if (typeof value !== "string" || value.length < 7 || value.length > 128
|
|
169
|
+
|| !/^[A-Za-z0-9][A-Za-z0-9._-]*$/u.test(value)) {
|
|
170
|
+
throw new CliError("artifact_envelope_invalid", "The artifact source revision is invalid.");
|
|
171
|
+
}
|
|
172
|
+
return value;
|
|
173
|
+
}
|
|
174
|
+
function requiredString(value, label) {
|
|
175
|
+
if (typeof value !== "string" || value.length === 0 || value.length > 512) {
|
|
176
|
+
throw new CliError("artifact_manifest_invalid", `The ${label} is invalid.`);
|
|
177
|
+
}
|
|
178
|
+
return value;
|
|
179
|
+
}
|
|
180
|
+
function requiredDigest(value, label) {
|
|
181
|
+
const digest = requiredString(value, label).toLowerCase();
|
|
182
|
+
if (!/^[a-f0-9]{64}$/u.test(digest))
|
|
183
|
+
throw new CliError("artifact_manifest_invalid", `The ${label} is invalid.`);
|
|
184
|
+
return digest;
|
|
185
|
+
}
|
|
186
|
+
function requiredBytes(value, label, allowZero = false) {
|
|
187
|
+
if (typeof value !== "number" || !Number.isSafeInteger(value)
|
|
188
|
+
|| value < (allowZero ? 0 : 1) || value > MAX_FILE_BYTES) {
|
|
189
|
+
throw new CliError("artifact_manifest_invalid", `The ${label} is invalid.`);
|
|
190
|
+
}
|
|
191
|
+
return value;
|
|
192
|
+
}
|
|
193
|
+
function isSafePath(value) {
|
|
194
|
+
return value.length <= 512 && !value.startsWith("/") && !value.endsWith("/")
|
|
195
|
+
&& !value.includes("\\") && !value.includes("%")
|
|
196
|
+
&& value.split("/").every((segment) => segment.length > 0 && segment !== "." && segment !== ".."
|
|
197
|
+
&& /^[A-Za-z0-9][A-Za-z0-9._-]*$/u.test(segment));
|
|
198
|
+
}
|
|
199
|
+
function sha256(value) {
|
|
200
|
+
return createHash("sha256").update(value).digest("hex");
|
|
201
|
+
}
|
|
202
|
+
function isRecord(value) {
|
|
203
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=artifact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact.js","sourceRoot":"","sources":["../src/artifact.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,uBAAuB,EACvB,qBAAqB,GAKtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE/D,MAAM,kBAAkB,GAAG,IAAI,GAAG,IAAI,CAAC;AACvC,MAAM,cAAc,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AACxC,MAAM,eAAe,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAEzC,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,SAAiB;IACpD,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;IAC5D,MAAM,YAAY,GAAG,IAAI,WAAW,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAClE,MAAM,eAAe,CAAC,YAAY,EAAE,kBAAkB,CAAC,CACxD,CAAC;IACF,MAAM,QAAQ,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAClD,MAAM,WAAW,GAAgE;QAC/E,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE;QAC5D,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,UAAU,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;KACpG,CAAC;IACF,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,WAAW,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;QAC9G,IAAI,KAAK,CAAC,UAAU,KAAK,UAAU,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,UAAU,CAAC,MAAM,EAAE,CAAC;YACjF,MAAM,IAAI,QAAQ,CAAC,2BAA2B,EAAE,2DAA2D,IAAI,GAAG,CAAC,CAAC;QACtH,CAAC;QACD,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC;IACjC,CAAC;IACD,IAAI,UAAU,GAAG,eAAe,EAAE,CAAC;QACjC,MAAM,IAAI,QAAQ,CAAC,oBAAoB,EAAE,2DAA2D,CAAC,CAAC;IACxG,CAAC;IACD,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7G,IAAI,sBAAsB,KAAK,QAAQ,CAAC,YAAY,EAAE,CAAC;QACrD,MAAM,IAAI,QAAQ,CAAC,2BAA2B,EAAE,yDAAyD,CAAC,CAAC;IAC7G,CAAC;IACD,OAAO;QACL,SAAS,EAAE,IAAI;QACf,YAAY;QACZ,QAAQ;QACR,SAAS,EAAE,WAAW,CAAC,MAAM;QAC7B,UAAU;KACX,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,QAA0B,EAC1B,KAA8C;IAE9C,IAAI,CAAC,KAAK,CAAC,KAAK;QAAE,OAAO,QAAQ,CAAC;IAClC,MAAM,cAAc,GAAG,SAAS,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IAChH,MAAM,QAAQ,GAAG,EAAE,GAAG,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC1D,MAAM,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACzF,OAAO,EAAE,GAAG,QAAQ,EAAE,QAAQ,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,IAAI,SAAkB,CAAC;IACvB,IAAI,CAAC;QACH,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,QAAQ,CAAC,2BAA2B,EAAE,gDAAgD,CAAC,CAAC;IACpG,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,qBAAqB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxG,MAAM,IAAI,QAAQ,CAAC,2BAA2B,EAAE,yBAAyB,qBAAqB,GAAG,CAAC,CAAC;IACrG,CAAC;IACD,MAAM,cAAc,GAAG,sBAAsB,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IACxE,MAAM,YAAY,GAAG,cAAc,CAAC,SAAS,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IAC7E,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;IACpC,IAAI,QAAQ,CAAC,MAAM,KAAK,4BAA4B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/G,MAAM,IAAI,QAAQ,CAAC,2BAA2B,EAAE,kDAAkD,CAAC,CAAC;IACtG,CAAC;IACD,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QAClC,MAAM,IAAI,QAAQ,CAAC,2BAA2B,EAAE,qEAAqE,CAAC,CAAC;IACzH,CAAC;IACD,MAAM,GAAG,GAAG;QACV,GAAG,QAAQ,CAAC,GAAG;QACf,IAAI,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC;QACnD,KAAK,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC;QACtD,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC;QAC5D,OAAO,EAAE,KAAK;KACf,CAAC;IACF,MAAM,OAAO,GAAG;QACd,GAAG,QAAQ,CAAC,OAAO;QACnB,IAAI,EAAE,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,cAAc,CAAC;QAC3D,WAAW,EAAE,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,cAAc,CAAC;KAC1E,CAAC;IACF,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;QAClE,MAAM,IAAI,QAAQ,CAAC,2BAA2B,EAAE,uDAAuD,CAAC,CAAC;IAC3G,CAAC;IACD,IAAI,OAAO,CAAC,WAAW,KAAK,sBAAsB,YAAY,EAAE,EAAE,CAAC;QACjE,MAAM,IAAI,QAAQ,CAAC,2BAA2B,EAAE,6DAA6D,CAAC,CAAC;IACjH,CAAC;IACD,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5E,MAAM,IAAI,QAAQ,CAAC,2BAA2B,EAAE,gEAAgE,CAAC,CAAC;IACpH,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC3F,OAAO;QACL,MAAM,EAAE,qBAAqB;QAC7B,cAAc;QACd,YAAY;QACZ,QAAQ,EAAE;YACR,GAAG,QAAQ;YACX,MAAM,EAAE,4BAA4B;YACpC,GAAG;YACH,OAAO;YACP,MAAM;YACN,KAAK;YACL,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;SAC9C;KACF,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,WAAW,KAAK,+BAA+B,EAAE,CAAC;QAC7G,MAAM,IAAI,QAAQ,CAAC,2BAA2B,EAAE,8DAA8D,CAAC,CAAC;IAClH,CAAC;IACD,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,sBAAsB,CAAC;QAC5D,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,qBAAqB,CAAC;QACxD,WAAW,EAAE,+BAA+B;KAC7C,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QAChD,MAAM,IAAI,QAAQ,CAAC,2BAA2B,EAAE,2CAA2C,CAAC,CAAC;IAC/F,CAAC;IACD,MAAM,MAAM,GAA6B,EAAE,CAAC;IAC5C,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,MAAM,IAAI,QAAQ,CAAC,2BAA2B,EAAE,yCAAyC,CAAC,CAAC;QACrH,MAAM,IAAI,GAAG,cAAc,CAAC,SAAS,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;QAC7D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACzE,MAAM,IAAI,QAAQ,CAAC,2BAA2B,EAAE,kDAAkD,CAAC,CAAC;QACtG,CAAC;QACD,MAAM,CAAC,IAAI,CAAC;YACV,IAAI;YACJ,MAAM,EAAE,cAAc,CAAC,SAAS,CAAC,MAAM,EAAE,cAAc,IAAI,EAAE,CAAC;YAC9D,KAAK,EAAE,aAAa,CAAC,SAAS,CAAC,KAAK,EAAE,aAAa,IAAI,EAAE,EAAE,IAAI,CAAC;SACjE,CAAC,CAAC;QACH,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QAC/C,MAAM,IAAI,QAAQ,CAAC,2BAA2B,EAAE,kDAAkD,CAAC,CAAC;IACtG,CAAC;IACD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE,CAAC;QAC9B,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,SAAS,CAAC;eACxE,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,SAAS,KAAK,QAAQ;eACzD,CAAC,QAAQ,IAAI,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAC5D,MAAM,IAAI,QAAQ,CAAC,2BAA2B,EAAE,yDAAyD,CAAC,CAAC;QAC7G,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvB,QAAQ,GAAG,SAAS,CAAC;IACvB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,qBAAqB,CAAC,QAAmC;IAChE,IAAI,QAAQ,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,CAAC,cAAc,EAAE,CAAC;IACrG,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;AAC5D,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAc;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG;WAChE,CAAC,+BAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,QAAQ,CAAC,2BAA2B,EAAE,0CAA0C,CAAC,CAAC;IAC9F,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,KAAc,EAAE,KAAa;IACnD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QAC1E,MAAM,IAAI,QAAQ,CAAC,2BAA2B,EAAE,OAAO,KAAK,cAAc,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,KAAc,EAAE,KAAa;IACnD,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IAC1D,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,QAAQ,CAAC,2BAA2B,EAAE,OAAO,KAAK,cAAc,CAAC,CAAC;IACjH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,KAAa,EAAE,SAAS,GAAG,KAAK;IACrE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC;WACtD,KAAK,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,cAAc,EAAE,CAAC;QAC7D,MAAM,IAAI,QAAQ,CAAC,2BAA2B,EAAE,OAAO,KAAK,cAAc,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,KAAK,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;WACvE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;WAC7C,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,IAAI;eAC3F,+BAA+B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,MAAM,CAAC,KAAiB;IAC/B,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export declare const CLI_AUTH_SCHEMA = "tender.accounts-auth/v1";
|
|
2
|
+
export declare const CLI_AUTH_STORE_SCHEMA = "tender.accounts-auth-store/v2";
|
|
3
|
+
export declare const DEFAULT_AUTH_PROFILE = "default";
|
|
4
|
+
export interface StoredCliAuth {
|
|
5
|
+
schema: typeof CLI_AUTH_SCHEMA;
|
|
6
|
+
apiUrl: string;
|
|
7
|
+
accessToken?: string;
|
|
8
|
+
accessTokenExpiresAt?: string;
|
|
9
|
+
refreshToken?: string;
|
|
10
|
+
refreshTokenExpiresAt?: string;
|
|
11
|
+
principal?: {
|
|
12
|
+
tenantId: string;
|
|
13
|
+
ownerEmail: string;
|
|
14
|
+
projects: string[];
|
|
15
|
+
};
|
|
16
|
+
pendingDevice?: {
|
|
17
|
+
deviceCode: string;
|
|
18
|
+
userCode: string;
|
|
19
|
+
verificationUri: string;
|
|
20
|
+
verificationUriComplete: string;
|
|
21
|
+
expiresAt: string;
|
|
22
|
+
intervalSeconds: number;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export interface StoredAuthProfile {
|
|
26
|
+
profile: string;
|
|
27
|
+
auth: StoredCliAuth;
|
|
28
|
+
}
|
|
29
|
+
export interface CliAuthStore {
|
|
30
|
+
read(profile: string): Promise<StoredCliAuth | null>;
|
|
31
|
+
list(): Promise<StoredAuthProfile[]>;
|
|
32
|
+
write(profile: string, auth: StoredCliAuth): Promise<void>;
|
|
33
|
+
compareAndSwap(profile: string, expected: StoredCliAuth | null, auth: StoredCliAuth | null): Promise<boolean>;
|
|
34
|
+
clear(profile: string): Promise<void>;
|
|
35
|
+
clearAll(): Promise<void>;
|
|
36
|
+
description(): string;
|
|
37
|
+
}
|
|
38
|
+
export declare function createDefaultAuthStore(environment: NodeJS.ProcessEnv): CliAuthStore;
|
|
39
|
+
export declare function validateAuthProfile(value: string): string;
|
|
40
|
+
export declare function validateNamedAuthProfile(value: string): string;
|
|
41
|
+
export declare class MemoryCliAuthStore implements CliAuthStore {
|
|
42
|
+
private readonly profiles;
|
|
43
|
+
read(profile: string): Promise<StoredCliAuth | null>;
|
|
44
|
+
list(): Promise<StoredAuthProfile[]>;
|
|
45
|
+
write(profile: string, auth: StoredCliAuth): Promise<void>;
|
|
46
|
+
compareAndSwap(profile: string, expected: StoredCliAuth | null, auth: StoredCliAuth | null): Promise<boolean>;
|
|
47
|
+
clear(profile: string): Promise<void>;
|
|
48
|
+
clearAll(): Promise<void>;
|
|
49
|
+
description(): string;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=auth-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-store.d.ts","sourceRoot":"","sources":["../src/auth-store.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,eAAe,4BAA4B,CAAC;AACzD,eAAO,MAAM,qBAAqB,kCAAkC,CAAC;AACrE,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAE9C,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,OAAO,eAAe,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,SAAS,CAAC,EAAE;QACV,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IACF,aAAa,CAAC,EAAE;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,eAAe,EAAE,MAAM,CAAC;QACxB,uBAAuB,EAAE,MAAM,CAAC;QAChC,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IACrD,IAAI,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACrC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9G,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,WAAW,IAAI,MAAM,CAAC;CACvB;AAED,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,CAAC,UAAU,GAAG,YAAY,CAInF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUzD;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAU9D;AAED,qBAAa,kBAAmB,YAAW,YAAY;IACrD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;IAEvD,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAGzD;IAEK,IAAI,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAIzC;IAEK,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/D;IAEK,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAOlH;IAEK,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1C;IAEK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAE9B;IAED,WAAW,IAAI,MAAM,CAEpB;CACF"}
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
import { homedir } from "node:os";
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
3
|
+
import { chmod, mkdir, open, readFile, rename, rm, stat, writeFile } from "node:fs/promises";
|
|
4
|
+
import { dirname, resolve } from "node:path";
|
|
5
|
+
import { isDeepStrictEqual } from "node:util";
|
|
6
|
+
import { CliError } from "./errors.js";
|
|
7
|
+
export const CLI_AUTH_SCHEMA = "tender.accounts-auth/v1";
|
|
8
|
+
export const CLI_AUTH_STORE_SCHEMA = "tender.accounts-auth-store/v2";
|
|
9
|
+
export const DEFAULT_AUTH_PROFILE = "default";
|
|
10
|
+
export function createDefaultAuthStore(environment) {
|
|
11
|
+
const explicitPath = environment.TENDER_ACCOUNTS_AUTH_FILE;
|
|
12
|
+
if (explicitPath)
|
|
13
|
+
return new FileCliAuthStore(resolve(explicitPath));
|
|
14
|
+
return new FileCliAuthStore(resolve(homedir(), ".tender-accounts/auth.json"));
|
|
15
|
+
}
|
|
16
|
+
export function validateAuthProfile(value) {
|
|
17
|
+
const profile = value.trim();
|
|
18
|
+
if (!/^[A-Za-z0-9_-]{1,64}$/u.test(profile)) {
|
|
19
|
+
throw new CliError("auth_profile_invalid", "The auth profile must be 1-64 letters, numbers, underscores, or hyphens.", "andeo auth create merchant-name --device --json");
|
|
20
|
+
}
|
|
21
|
+
return profile;
|
|
22
|
+
}
|
|
23
|
+
export function validateNamedAuthProfile(value) {
|
|
24
|
+
const profile = validateAuthProfile(value);
|
|
25
|
+
if (profile.toLowerCase() === DEFAULT_AUTH_PROFILE) {
|
|
26
|
+
throw new CliError("auth_profile_reserved", "The default profile is managed with auth login and auth logout.", "andeo auth create merchant-name");
|
|
27
|
+
}
|
|
28
|
+
return profile;
|
|
29
|
+
}
|
|
30
|
+
export class MemoryCliAuthStore {
|
|
31
|
+
profiles = new Map();
|
|
32
|
+
async read(profile) {
|
|
33
|
+
const value = this.profiles.get(validateAuthProfile(profile));
|
|
34
|
+
return value ? structuredClone(value) : null;
|
|
35
|
+
}
|
|
36
|
+
async list() {
|
|
37
|
+
return [...this.profiles.entries()]
|
|
38
|
+
.sort(([left], [right]) => left.localeCompare(right))
|
|
39
|
+
.map(([profile, auth]) => ({ profile, auth: structuredClone(auth) }));
|
|
40
|
+
}
|
|
41
|
+
async write(profile, auth) {
|
|
42
|
+
this.profiles.set(validateAuthProfile(profile), structuredClone(auth));
|
|
43
|
+
}
|
|
44
|
+
async compareAndSwap(profile, expected, auth) {
|
|
45
|
+
const selected = validateAuthProfile(profile);
|
|
46
|
+
const current = this.profiles.get(selected) ?? null;
|
|
47
|
+
if (!isDeepStrictEqual(current, expected))
|
|
48
|
+
return false;
|
|
49
|
+
if (auth)
|
|
50
|
+
this.profiles.set(selected, structuredClone(auth));
|
|
51
|
+
else
|
|
52
|
+
this.profiles.delete(selected);
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
async clear(profile) {
|
|
56
|
+
this.profiles.delete(validateAuthProfile(profile));
|
|
57
|
+
}
|
|
58
|
+
async clearAll() {
|
|
59
|
+
this.profiles.clear();
|
|
60
|
+
}
|
|
61
|
+
description() {
|
|
62
|
+
return "memory";
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
class FileCliAuthStore {
|
|
66
|
+
path;
|
|
67
|
+
constructor(path) {
|
|
68
|
+
this.path = path;
|
|
69
|
+
}
|
|
70
|
+
async read(profile) {
|
|
71
|
+
const profiles = await this.readProfiles();
|
|
72
|
+
const value = profiles.get(validateAuthProfile(profile));
|
|
73
|
+
return value ? structuredClone(value) : null;
|
|
74
|
+
}
|
|
75
|
+
async list() {
|
|
76
|
+
return [...(await this.readProfiles()).entries()]
|
|
77
|
+
.sort(([left], [right]) => left.localeCompare(right))
|
|
78
|
+
.map(([profile, auth]) => ({ profile, auth: structuredClone(auth) }));
|
|
79
|
+
}
|
|
80
|
+
async write(profile, auth) {
|
|
81
|
+
const selected = validateAuthProfile(profile);
|
|
82
|
+
await this.mutate((profiles) => profiles.set(selected, structuredClone(auth)));
|
|
83
|
+
}
|
|
84
|
+
async compareAndSwap(profile, expected, auth) {
|
|
85
|
+
const selected = validateAuthProfile(profile);
|
|
86
|
+
return await this.mutate((profiles) => {
|
|
87
|
+
const current = profiles.get(selected) ?? null;
|
|
88
|
+
if (!isDeepStrictEqual(current, expected))
|
|
89
|
+
return false;
|
|
90
|
+
if (auth)
|
|
91
|
+
profiles.set(selected, structuredClone(auth));
|
|
92
|
+
else
|
|
93
|
+
profiles.delete(selected);
|
|
94
|
+
return true;
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
async clear(profile) {
|
|
98
|
+
const selected = validateAuthProfile(profile);
|
|
99
|
+
await this.mutate((profiles) => profiles.delete(selected));
|
|
100
|
+
}
|
|
101
|
+
async clearAll() {
|
|
102
|
+
await mkdir(dirname(this.path), { recursive: true, mode: 0o700 });
|
|
103
|
+
await this.withLock(async () => await rm(this.path, { force: true }));
|
|
104
|
+
}
|
|
105
|
+
description() {
|
|
106
|
+
return this.path;
|
|
107
|
+
}
|
|
108
|
+
async readProfiles() {
|
|
109
|
+
try {
|
|
110
|
+
return parseStoredAuthStore(await readFile(this.path, "utf8"));
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
if (isMissing(error))
|
|
114
|
+
return new Map();
|
|
115
|
+
throw error;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
async mutate(change) {
|
|
119
|
+
await mkdir(dirname(this.path), { recursive: true, mode: 0o700 });
|
|
120
|
+
await chmod(dirname(this.path), 0o700);
|
|
121
|
+
return await this.withLock(async () => {
|
|
122
|
+
const profiles = await this.readProfiles();
|
|
123
|
+
const result = change(profiles);
|
|
124
|
+
if (profiles.size === 0) {
|
|
125
|
+
await rm(this.path, { force: true });
|
|
126
|
+
return result;
|
|
127
|
+
}
|
|
128
|
+
const temporary = `${this.path}.${process.pid}.${randomUUID()}.tmp`;
|
|
129
|
+
const payload = {
|
|
130
|
+
schema: CLI_AUTH_STORE_SCHEMA,
|
|
131
|
+
profiles: Object.fromEntries([...profiles.entries()].sort(([left], [right]) => left.localeCompare(right))),
|
|
132
|
+
};
|
|
133
|
+
await writeFile(temporary, `${JSON.stringify(payload, null, 2)}\n`, { encoding: "utf8", mode: 0o600 });
|
|
134
|
+
await chmod(temporary, 0o600);
|
|
135
|
+
await rename(temporary, this.path);
|
|
136
|
+
await chmod(this.path, 0o600);
|
|
137
|
+
return result;
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
async withLock(operation) {
|
|
141
|
+
const lockPath = `${this.path}.lock`;
|
|
142
|
+
const deadline = Date.now() + 5_000;
|
|
143
|
+
let handle;
|
|
144
|
+
while (!handle) {
|
|
145
|
+
try {
|
|
146
|
+
handle = await open(lockPath, "wx", 0o600);
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
if (!isAlreadyExists(error))
|
|
150
|
+
throw error;
|
|
151
|
+
const lock = await stat(lockPath).catch(() => null);
|
|
152
|
+
if (lock && Date.now() - lock.mtimeMs > 30_000) {
|
|
153
|
+
await rm(lockPath, { force: true });
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
if (Date.now() >= deadline) {
|
|
157
|
+
throw new CliError("auth_store_busy", "Another Andeo command is updating the login store.", "Wait for that command to finish, then retry.");
|
|
158
|
+
}
|
|
159
|
+
await new Promise((resolvePromise) => setTimeout(resolvePromise, 25));
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
try {
|
|
163
|
+
return await operation();
|
|
164
|
+
}
|
|
165
|
+
finally {
|
|
166
|
+
await handle.close();
|
|
167
|
+
await rm(lockPath, { force: true });
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
function parseStoredAuthStore(value) {
|
|
172
|
+
let parsed;
|
|
173
|
+
try {
|
|
174
|
+
parsed = JSON.parse(value);
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
throw new CliError("auth_store_invalid", "The stored Andeo login is not valid JSON.", "andeo auth logout --local --all --json");
|
|
178
|
+
}
|
|
179
|
+
if (isRecord(parsed) && parsed.schema === CLI_AUTH_SCHEMA) {
|
|
180
|
+
return new Map([[DEFAULT_AUTH_PROFILE, parseStoredAuth(parsed)]]);
|
|
181
|
+
}
|
|
182
|
+
if (!isRecord(parsed) || parsed.schema !== CLI_AUTH_STORE_SCHEMA || !isRecord(parsed.profiles)) {
|
|
183
|
+
throw new CliError("auth_store_invalid", "The stored Andeo login uses an unsupported format.", "andeo auth logout --local --all --json");
|
|
184
|
+
}
|
|
185
|
+
const profiles = new Map();
|
|
186
|
+
for (const [profile, auth] of Object.entries(parsed.profiles)) {
|
|
187
|
+
profiles.set(validateAuthProfile(profile), parseStoredAuth(auth));
|
|
188
|
+
}
|
|
189
|
+
return profiles;
|
|
190
|
+
}
|
|
191
|
+
function parseStoredAuth(parsed) {
|
|
192
|
+
if (!isRecord(parsed) || parsed.schema !== CLI_AUTH_SCHEMA || typeof parsed.apiUrl !== "string") {
|
|
193
|
+
throw new CliError("auth_store_invalid", "The stored Andeo login uses an unsupported format.", "andeo auth logout --local --all --json");
|
|
194
|
+
}
|
|
195
|
+
const auth = { schema: CLI_AUTH_SCHEMA, apiUrl: parsed.apiUrl };
|
|
196
|
+
if (typeof parsed.accessToken === "string")
|
|
197
|
+
auth.accessToken = parsed.accessToken;
|
|
198
|
+
if (typeof parsed.accessTokenExpiresAt === "string")
|
|
199
|
+
auth.accessTokenExpiresAt = parsed.accessTokenExpiresAt;
|
|
200
|
+
if (typeof parsed.refreshToken === "string")
|
|
201
|
+
auth.refreshToken = parsed.refreshToken;
|
|
202
|
+
if (typeof parsed.refreshTokenExpiresAt === "string")
|
|
203
|
+
auth.refreshTokenExpiresAt = parsed.refreshTokenExpiresAt;
|
|
204
|
+
if (isRecord(parsed.principal)
|
|
205
|
+
&& typeof parsed.principal.tenantId === "string"
|
|
206
|
+
&& typeof parsed.principal.ownerEmail === "string"
|
|
207
|
+
&& Array.isArray(parsed.principal.projects)
|
|
208
|
+
&& parsed.principal.projects.every((project) => typeof project === "string")) {
|
|
209
|
+
auth.principal = {
|
|
210
|
+
tenantId: parsed.principal.tenantId,
|
|
211
|
+
ownerEmail: parsed.principal.ownerEmail,
|
|
212
|
+
projects: [...parsed.principal.projects],
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
if (isRecord(parsed.pendingDevice)
|
|
216
|
+
&& typeof parsed.pendingDevice.deviceCode === "string"
|
|
217
|
+
&& typeof parsed.pendingDevice.userCode === "string"
|
|
218
|
+
&& typeof parsed.pendingDevice.verificationUri === "string"
|
|
219
|
+
&& typeof parsed.pendingDevice.verificationUriComplete === "string"
|
|
220
|
+
&& typeof parsed.pendingDevice.expiresAt === "string"
|
|
221
|
+
&& typeof parsed.pendingDevice.intervalSeconds === "number") {
|
|
222
|
+
auth.pendingDevice = {
|
|
223
|
+
deviceCode: parsed.pendingDevice.deviceCode,
|
|
224
|
+
userCode: parsed.pendingDevice.userCode,
|
|
225
|
+
verificationUri: parsed.pendingDevice.verificationUri,
|
|
226
|
+
verificationUriComplete: parsed.pendingDevice.verificationUriComplete,
|
|
227
|
+
expiresAt: parsed.pendingDevice.expiresAt,
|
|
228
|
+
intervalSeconds: parsed.pendingDevice.intervalSeconds,
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
return auth;
|
|
232
|
+
}
|
|
233
|
+
function isMissing(value) {
|
|
234
|
+
return value instanceof Error && "code" in value && value.code === "ENOENT";
|
|
235
|
+
}
|
|
236
|
+
function isAlreadyExists(value) {
|
|
237
|
+
return value instanceof Error && "code" in value && value.code === "EEXIST";
|
|
238
|
+
}
|
|
239
|
+
function isRecord(value) {
|
|
240
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
241
|
+
}
|
|
242
|
+
//# sourceMappingURL=auth-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-store.js","sourceRoot":"","sources":["../src/auth-store.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,OAAO,CAAC,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC"}
|