@@ -116,6 +116,29 @@ async function oidc ({ packageName, registry, opts, config }) {
116
116
return undefined
117
117
}
118
118
119
+ const [ headerB64 , payloadB64 ] = idToken . split ( '.' )
120
+ let isPublicRepo = false
121
+ if ( headerB64 && payloadB64 ) {
122
+ const payloadJson = Buffer . from ( payloadB64 , 'base64' ) . toString ( 'utf8' )
123
+ try {
124
+ const payload = JSON . parse ( payloadJson )
125
+ if ( ciInfo . GITHUB_ACTIONS && payload . repository_visibility ) {
126
+ isPublicRepo = payload . repository_visibility
127
+ }
128
+ if ( ciInfo . GITLAB && payload . project_visibility ) {
129
+ isPublicRepo = payload . project_visibility
130
+ }
131
+ } catch ( e ) {
132
+ log . silly ( 'oidc' , 'Failed to parse idToken payload as JSON' )
133
+ }
134
+ }
135
+
136
+ if ( isPublicRepo ) {
137
+ log . silly ( 'oidc' , 'Repository is public, setting access to public' )
138
+ opts . provenance = true
139
+ config . set ( 'provenance' , true , 'user' )
140
+ }
141
+
119
142
log . silly ( 'oidc' , `id_token has a length of ${ idToken . length } characters` )
120
143
121
144
const parsedRegistry = new URL ( registry )
@@ -156,6 +179,7 @@ async function oidc ({ packageName, registry, opts, config }) {
156
179
opts [ authTokenKey ] = response . token
157
180
config . set ( authTokenKey , response . token , 'user' )
158
181
log . silly ( 'oidc' , `OIDC token successfully retrieved` )
182
+
159
183
} catch ( error ) {
160
184
log . verbose ( 'oidc' , error . message )
161
185
if ( error ?. body ?. message ) {
0 commit comments