Home / Function/ AppleSecretGenerator() — supabase Function Reference

AppleSecretGenerator() — supabase Function Reference

Architecture documentation for the AppleSecretGenerator() function in AppleSecretGenerator.tsx from the supabase codebase.

Entity Profile

Dependency Diagram

graph TD
  49c52e78_b920_1ed6_2bcb_107c71cd9801["AppleSecretGenerator()"]
  686e50b5_fb5e_1730_38c0_62592eb764e8["generateAppleSecretKey()"]
  49c52e78_b920_1ed6_2bcb_107c71cd9801 -->|calls| 686e50b5_fb5e_1730_38c0_62592eb764e8
  style 49c52e78_b920_1ed6_2bcb_107c71cd9801 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

apps/docs/components/AppleSecretGenerator/AppleSecretGenerator.tsx lines 97–191

const AppleSecretGenerator = () => {
  const [file, setFile] = useState({ file: null as File | null })
  const [teamID, setTeamID] = useState('')
  const [serviceID, setServiceID] = useState('')
  const [keyID, setKeyID] = useState('')
  const [secretKey, setSecretKey] = useState('')
  const [expiresAt, setExpiresAt] = useState('')
  const [error, setError] = useState('')

  return (
    <div className="flex flex-col gap-3">
      <Input
        label="Account ID"
        labelOptional="required"
        placeholder="Apple Developer account ID, 10 alphanumeric digits"
        descriptionText="Found in the upper-right corner of Apple Developer Center."
        value={teamID}
        onChange={(e) => setTeamID(e.target.value.trim())}
      />
      <Input
        label="Service ID"
        labelOptional="required"
        placeholder="ID of the service, example: com.example.app.service"
        descriptionText="Found under Certificates, Identifiers & Profiles in Apple Developer Center."
        value={serviceID}
        onChange={(e) => setServiceID(e.target.value.trim())}
      />
      <Input
        label="Key ID"
        labelOptional="(optional)"
        placeholder="Extracted from filename, AuthKey_XXXXXXXXXX.p8"
        descriptionText="If the file you select does not preserve the original name from Apple Developer Center, please enter the key ID."
        value={keyID}
        onChange={(e) => setKeyID(e.target.value.trim())}
      />
      <div>
        <input
          type="file"
          onChange={(e) => {
            setFile({ file: e.target.files?.[0] || null })
          }}
        />
      </div>
      <div style={{ height: '1rem' }} />

      <Button
        size="medium"
        disabled={
          !(
            teamID.length === 10 &&
            serviceID &&
            ((globalThis && globalThis.showOpenFilePicker) || file.file)
          )
        }
        onClick={async () => {
          setError('')

          try {
            const { kid, jwt, exp } = await generateAppleSecretKey(
              keyID,
              teamID,
              serviceID,
              file.file!
            )
            setKeyID(kid)
            setSecretKey(jwt)
            setExpiresAt(new Date(exp * 1000).toString())
            setError('')
          } catch (e: any) {
            setError(e.message)
            console.error(e)
          }
        }}
      >
        Generate Secret Key
      </Button>

      {error && <Admonition type="danger">{error}</Admonition>}

      {secretKey && (
        <>
          <div style={{ height: '1rem' }} />
          <Input
            label="Secret Key"
            value={secretKey}
            descriptionText={`Valid until: ${expiresAt}. Make sure you generate a new one before then!`}
            reveal
            copy
            size="medium"
          />
        </>
      )}
    </div>
  )
}

Subdomains

Frequently Asked Questions

What does AppleSecretGenerator() do?
AppleSecretGenerator() is a function in the supabase codebase.
What does AppleSecretGenerator() call?
AppleSecretGenerator() calls 1 function(s): generateAppleSecretKey.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free