@anaclumos/taal 1.1.7 → 1.1.8
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/package.json +1 -1
- package/src/commands/diff.ts +20 -2
- package/DIAGNOSTIC.md +0 -75
- package/FIX_2FA_ISSUE.md +0 -81
- package/TRUSTED_PUBLISHING_SETUP.md +0 -87
package/package.json
CHANGED
package/src/commands/diff.ts
CHANGED
|
@@ -2,6 +2,20 @@ import { homedir } from "node:os";
|
|
|
2
2
|
import { loadTaalConfig } from "../config/loader.js";
|
|
3
3
|
import { initializeProviders, registry } from "../providers/index.js";
|
|
4
4
|
|
|
5
|
+
function sortObjectKeys(obj: unknown): unknown {
|
|
6
|
+
if (obj === null || typeof obj !== "object") {
|
|
7
|
+
return obj;
|
|
8
|
+
}
|
|
9
|
+
if (Array.isArray(obj)) {
|
|
10
|
+
return obj.map(sortObjectKeys);
|
|
11
|
+
}
|
|
12
|
+
const sorted: Record<string, unknown> = {};
|
|
13
|
+
for (const key of Object.keys(obj).sort()) {
|
|
14
|
+
sorted[key] = sortObjectKeys((obj as Record<string, unknown>)[key]);
|
|
15
|
+
}
|
|
16
|
+
return sorted;
|
|
17
|
+
}
|
|
18
|
+
|
|
5
19
|
export interface DiffChange {
|
|
6
20
|
type: "add" | "remove" | "modify";
|
|
7
21
|
serverName: string;
|
|
@@ -73,9 +87,13 @@ export async function diff(
|
|
|
73
87
|
|
|
74
88
|
for (const key of taalKeys) {
|
|
75
89
|
if (currentKeys.has(key)) {
|
|
76
|
-
const currentValue = JSON.stringify(
|
|
90
|
+
const currentValue = JSON.stringify(
|
|
91
|
+
sortObjectKeys(currentServers[key])
|
|
92
|
+
);
|
|
77
93
|
const newValue = JSON.stringify(
|
|
78
|
-
(
|
|
94
|
+
sortObjectKeys(
|
|
95
|
+
(transformedServers as Record<string, unknown>)[key]
|
|
96
|
+
)
|
|
79
97
|
);
|
|
80
98
|
|
|
81
99
|
if (currentValue !== newValue) {
|
package/DIAGNOSTIC.md
DELETED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
# Trusted Publishing Diagnostic
|
|
2
|
-
|
|
3
|
-
## Current Error
|
|
4
|
-
|
|
5
|
-
The v1.1.6 workflow failed with:
|
|
6
|
-
```
|
|
7
|
-
npm notice Access token expired or revoked. Please try logging in again.
|
|
8
|
-
npm error 404 Not Found - PUT https://registry.npmjs.org/@anaclumos%2ftaal - Not found
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
This means OIDC authentication is NOT working. The issue is likely in the npmjs.com configuration.
|
|
12
|
-
|
|
13
|
-
## Verification Checklist
|
|
14
|
-
|
|
15
|
-
### 1. Verify Trusted Publisher Configuration
|
|
16
|
-
|
|
17
|
-
Go to: https://www.npmjs.com/package/@anaclumos/taal/access
|
|
18
|
-
|
|
19
|
-
Under "Trusted Publisher", you should see:
|
|
20
|
-
- ✅ **Provider**: GitHub Actions
|
|
21
|
-
- ✅ **Organization or user**: `anaclumos` (EXACTLY - case sensitive)
|
|
22
|
-
- ✅ **Repository**: `taal` (EXACTLY - case sensitive)
|
|
23
|
-
- ✅ **Workflow filename**: `publish.yml` (EXACTLY - must include .yml extension)
|
|
24
|
-
- ✅ **Environment name**: (leave EMPTY unless you use GitHub environments)
|
|
25
|
-
|
|
26
|
-
**CRITICAL**: All fields are case-sensitive and must match EXACTLY.
|
|
27
|
-
|
|
28
|
-
### 2. Verify Publishing Access Settings
|
|
29
|
-
|
|
30
|
-
Still on the same page, under "Publishing Access":
|
|
31
|
-
|
|
32
|
-
You should have selected: **"Require two-factor authentication and disallow tokens"**
|
|
33
|
-
|
|
34
|
-
NOT:
|
|
35
|
-
- ❌ "Require two-factor authentication or automation tokens"
|
|
36
|
-
- ❌ "No restrictions"
|
|
37
|
-
|
|
38
|
-
### 3. Verify You Saved
|
|
39
|
-
|
|
40
|
-
Make sure you clicked **"Update Package Settings"** at the bottom of the page.
|
|
41
|
-
|
|
42
|
-
### 4. Screenshot
|
|
43
|
-
|
|
44
|
-
Can you take a screenshot of your npmjs.com package settings and show me?
|
|
45
|
-
|
|
46
|
-
## Common Mistakes
|
|
47
|
-
|
|
48
|
-
1. **Workflow filename without .yml extension**: Must be `publish.yml` not just `publish`
|
|
49
|
-
2. **Case mismatch**: Repository name must match exactly (`taal` not `Taal` or `TAAL`)
|
|
50
|
-
3. **Organization vs user**: Make sure it's your username `anaclumos`, not an organization
|
|
51
|
-
4. **Didn't save**: Settings won't take effect until you click "Update Package Settings"
|
|
52
|
-
5. **Wrong publishing access setting**: Must select "disallow tokens" to allow OIDC
|
|
53
|
-
|
|
54
|
-
## Next Steps
|
|
55
|
-
|
|
56
|
-
1. Double-check ALL settings above
|
|
57
|
-
2. Make sure you clicked "Update Package Settings"
|
|
58
|
-
3. If everything looks correct, try again:
|
|
59
|
-
```bash
|
|
60
|
-
npm version patch
|
|
61
|
-
git push --follow-tags
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
## Alternative: Use Token (Temporary)
|
|
65
|
-
|
|
66
|
-
If you want to publish NOW while we debug trusted publishing:
|
|
67
|
-
|
|
68
|
-
1. Create a Granular Access Token on npmjs.com (Read and write access)
|
|
69
|
-
2. Add it as NPM_TOKEN secret:
|
|
70
|
-
```bash
|
|
71
|
-
gh secret set NPM_TOKEN --body "npm_YOUR_TOKEN_HERE"
|
|
72
|
-
```
|
|
73
|
-
3. Re-run workflow
|
|
74
|
-
|
|
75
|
-
But trusted publishing is better - let's get it working!
|
package/FIX_2FA_ISSUE.md
DELETED
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
# FIX: 2FA Blocking Trusted Publishing
|
|
2
|
-
|
|
3
|
-
## The Problem
|
|
4
|
-
|
|
5
|
-
Your workflow is failing with:
|
|
6
|
-
```
|
|
7
|
-
npm error code EOTP
|
|
8
|
-
npm error This operation requires a one-time password from your authenticator.
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
This happens because your NPM account requires 2FA for publishing, which blocks OIDC authentication.
|
|
12
|
-
|
|
13
|
-
## The Solution
|
|
14
|
-
|
|
15
|
-
You need to **configure your package** to allow trusted publishers to bypass 2FA:
|
|
16
|
-
|
|
17
|
-
### Step 1: Go to Package Settings
|
|
18
|
-
|
|
19
|
-
Visit: https://www.npmjs.com/package/@anaclumos/taal/access
|
|
20
|
-
|
|
21
|
-
### Step 2: Configure Publishing Access
|
|
22
|
-
|
|
23
|
-
Scroll down to **"Publishing Access"** section.
|
|
24
|
-
|
|
25
|
-
Select: **"Require two-factor authentication and disallow tokens"**
|
|
26
|
-
|
|
27
|
-

|
|
28
|
-
|
|
29
|
-
This option:
|
|
30
|
-
- ✅ **Allows** trusted publishers (OIDC) to publish without OTP
|
|
31
|
-
- ❌ **Blocks** token-based authentication
|
|
32
|
-
- ✅ **Maintains** security through OIDC
|
|
33
|
-
|
|
34
|
-
### Step 3: Save
|
|
35
|
-
|
|
36
|
-
Click **"Update Package Settings"** at the bottom.
|
|
37
|
-
|
|
38
|
-
### Step 4: Test
|
|
39
|
-
|
|
40
|
-
Re-run the failed workflow:
|
|
41
|
-
```bash
|
|
42
|
-
cd /Users/cho/Developer/taal
|
|
43
|
-
gh run rerun 21076753514
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
Or create a new version:
|
|
47
|
-
```bash
|
|
48
|
-
npm version patch
|
|
49
|
-
git push --follow-tags
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
## Why This Works
|
|
53
|
-
|
|
54
|
-
When you select "Require two-factor authentication and disallow tokens":
|
|
55
|
-
- Traditional token-based publishing is **blocked**
|
|
56
|
-
- Trusted publishing via OIDC is **allowed** (no OTP needed)
|
|
57
|
-
- Security is **enhanced** (OIDC is more secure than tokens + OTP)
|
|
58
|
-
|
|
59
|
-
## Alternative (Less Secure)
|
|
60
|
-
|
|
61
|
-
If the above doesn't work, you can temporarily disable 2FA requirement:
|
|
62
|
-
|
|
63
|
-
1. Go to: https://www.npmjs.com/package/@anaclumos/taal/access
|
|
64
|
-
2. Select: "Require two-factor authentication or automation/integration tokens (recommended)"
|
|
65
|
-
3. Save
|
|
66
|
-
|
|
67
|
-
**Note**: This is less secure. The first option is better.
|
|
68
|
-
|
|
69
|
-
## Verification
|
|
70
|
-
|
|
71
|
-
After configuration, the workflow should:
|
|
72
|
-
1. ✅ Authenticate via OIDC (no OTP needed)
|
|
73
|
-
2. ✅ Generate provenance automatically
|
|
74
|
-
3. ✅ Publish successfully
|
|
75
|
-
|
|
76
|
-
## Troubleshooting
|
|
77
|
-
|
|
78
|
-
If it still fails:
|
|
79
|
-
1. Check that trusted publisher is configured correctly (anaclumos/taal/publish.yml)
|
|
80
|
-
2. Verify you saved the "Publishing Access" settings
|
|
81
|
-
3. Check workflow logs: `gh run view --log-failed`
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
# NPM Trusted Publishing Setup
|
|
2
|
-
|
|
3
|
-
This project uses **NPM Trusted Publishing** with OIDC authentication - no NPM tokens needed!
|
|
4
|
-
|
|
5
|
-
## What is Trusted Publishing?
|
|
6
|
-
|
|
7
|
-
Trusted publishing uses OpenID Connect (OIDC) to authenticate GitHub Actions workflows directly with npm, eliminating the need for long-lived access tokens. This is more secure because:
|
|
8
|
-
|
|
9
|
-
- No secrets to manage or rotate
|
|
10
|
-
- Short-lived, workflow-specific credentials
|
|
11
|
-
- Cannot be extracted or reused
|
|
12
|
-
- Automatic provenance generation
|
|
13
|
-
|
|
14
|
-
## Setup Instructions
|
|
15
|
-
|
|
16
|
-
### Step 1: Configure Trusted Publisher on npmjs.com
|
|
17
|
-
|
|
18
|
-
1. **Go to your package settings**:
|
|
19
|
-
- Visit: https://www.npmjs.com/package/@anaclumos/taal/access
|
|
20
|
-
- Or navigate to: npmjs.com → Your package → Settings → Publishing Access
|
|
21
|
-
|
|
22
|
-
2. **Find "Trusted Publisher" section**
|
|
23
|
-
|
|
24
|
-
3. **Click "GitHub Actions" button**
|
|
25
|
-
|
|
26
|
-
4. **Fill in the configuration**:
|
|
27
|
-
- **Organization or user**: `anaclumos`
|
|
28
|
-
- **Repository**: `taal`
|
|
29
|
-
- **Workflow filename**: `publish.yml`
|
|
30
|
-
- **Environment name**: (leave empty)
|
|
31
|
-
|
|
32
|
-
5. **Save the configuration**
|
|
33
|
-
|
|
34
|
-
### Step 2: Verify Workflow Configuration
|
|
35
|
-
|
|
36
|
-
The workflow is already configured correctly in `.github/workflows/publish.yml`:
|
|
37
|
-
|
|
38
|
-
```yaml
|
|
39
|
-
permissions:
|
|
40
|
-
id-token: write # Required for OIDC
|
|
41
|
-
contents: read
|
|
42
|
-
|
|
43
|
-
- run: npm publish --access public # No NODE_AUTH_TOKEN needed!
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
### Step 3: Test Publishing
|
|
47
|
-
|
|
48
|
-
Once you've configured the trusted publisher on npmjs.com:
|
|
49
|
-
|
|
50
|
-
1. Create a new version tag:
|
|
51
|
-
```bash
|
|
52
|
-
npm version patch
|
|
53
|
-
git push --follow-tags
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
2. GitHub Actions will automatically:
|
|
57
|
-
- Run tests and linter
|
|
58
|
-
- Publish to npm using OIDC
|
|
59
|
-
- Generate provenance attestations
|
|
60
|
-
|
|
61
|
-
## Troubleshooting
|
|
62
|
-
|
|
63
|
-
### "Unable to authenticate" error
|
|
64
|
-
|
|
65
|
-
- Verify the workflow filename matches exactly: `publish.yml`
|
|
66
|
-
- Check that all fields are correct (case-sensitive)
|
|
67
|
-
- Ensure you're using GitHub-hosted runners (not self-hosted)
|
|
68
|
-
- Confirm `id-token: write` permission is set
|
|
69
|
-
|
|
70
|
-
### Workflow still failing
|
|
71
|
-
|
|
72
|
-
- Check that you saved the trusted publisher configuration on npmjs.com
|
|
73
|
-
- Verify the repository and organization names match exactly
|
|
74
|
-
- Review the workflow logs for specific error messages
|
|
75
|
-
|
|
76
|
-
## Benefits
|
|
77
|
-
|
|
78
|
-
✅ **No secrets management** - No NPM_TOKEN to rotate or secure
|
|
79
|
-
✅ **Automatic provenance** - Cryptographic proof of package origin
|
|
80
|
-
✅ **Enhanced security** - Short-lived, scoped credentials
|
|
81
|
-
✅ **Simpler workflow** - Less configuration, fewer moving parts
|
|
82
|
-
|
|
83
|
-
## Learn More
|
|
84
|
-
|
|
85
|
-
- [NPM Trusted Publishing Docs](https://docs.npmjs.com/trusted-publishers)
|
|
86
|
-
- [GitHub OIDC Documentation](https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect)
|
|
87
|
-
- [NPM Provenance](https://docs.npmjs.com/generating-provenance-statements)
|