{"version":3,"sources":["../src/linkedin-member-data-portabilitySdk.ts"],"sourcesContent":["import { z } from 'zod';\nimport { LinkedInOAuthSdk, LinkedInScope } from '@microfox/linkedin-oauth';\n\nconst ErrorSchema = z.object({\n  message: z.string(),\n  serviceErrorCode: z.number(),\n  status: z.number(),\n});\n\nconst ChangelogEventSchema = z\n  .object({\n    id: z.number(),\n    capturedAt: z.number(),\n    processedAt: z.number(),\n    configVersion: z.number(),\n    owner: z.string(),\n    actor: z.string(),\n    resourceName: z.string(),\n    resourceId: z.string(),\n    resourceUri: z.string(),\n    method: z.enum(['CREATE', 'UPDATE', 'PARTIAL_UPDATE', 'DELETE']),\n    methodName: z.string().optional(),\n    activity: z.record(z.string(), z.unknown()),\n    processedActivity: z.record(z.string(), z.unknown()),\n    siblingActivities: z.array(z.record(z.string(), z.unknown())),\n    parentSiblingActivities: z.array(z.record(z.string(), z.unknown())),\n    activityId: z.string(),\n    activityStatus: z.enum(['SUCCESS', 'FAILURE', 'SUCCESSFUL_REPLAY']),\n  })\n  .describe('Changelog event schema');\n\nconst MemberSnapshotSchema = z\n  .object({\n    snapshotDomain: z.string(),\n    snapshotData: z.record(z.string(), z.unknown()),\n  })\n  .describe('Member snapshot schema');\n\nconst MemberComplianceAuthorizationSchema = z\n  .object({\n    regulatedAt: z.number(),\n    memberComplianceAuthorizationKey: z.object({\n      developerApplication: z.string(),\n      member: z.string(),\n    }),\n    memberComplianceScopes: z.array(z.string()),\n  })\n  .describe('Member compliance authorization schema');\n\nexport class LinkedInDataPortabilitySDK {\n  private oauthSdk: LinkedInOAuthSdk;\n  private accessToken: string;\n  private baseUrl = 'https://api.linkedin.com/v2';\n\n  constructor(config: {\n    clientId: string;\n    clientSecret: string;\n    redirectUri: string;\n    accessToken: string;\n    refreshToken?: string;\n  }) {\n    this.oauthSdk = new LinkedInOAuthSdk({\n      clientId: config.clientId,\n      clientSecret: config.clientSecret,\n      redirectUri: config.redirectUri,\n      scopes: [LinkedInScope.OFFLINE_ACCESS, 'r_dma_portability_3rd_party'],\n    });\n    this.accessToken = config.accessToken;\n  }\n\n  private async request<T>(\n    endpoint: string,\n    method: string,\n    params?: Record<string, string>,\n  ): Promise<T> {\n    const url = new URL(`${this.baseUrl}${endpoint}`);\n    if (params) {\n      Object.entries(params).forEach(([key, value]) => {\n        url.searchParams.append(key, value);\n      });\n    }\n\n    const response = await fetch(url.toString(), {\n      method,\n      headers: {\n        Authorization: `Bearer ${this.accessToken}`,\n        'LinkedIn-Version': '202312',\n        'Content-Type': 'application/json',\n      },\n    });\n\n    if (!response.ok) {\n      const error = await response.json().catch(() => ({}));\n      throw new Error(\n        `LinkedIn API error: ${response.status} ${response.statusText}: ${error.message}`,\n      );\n    }\n\n    return response.json();\n  }\n\n  async validateAccessToken(): Promise<void> {\n    try {\n      const result = await this.oauthSdk.validateAccessToken(this.accessToken);\n      if (!result.isValid) {\n        throw new Error('Invalid access token');\n      }\n    } catch (error) {\n      throw new Error(\n        `Failed to validate access token: ${error instanceof Error ? error.message : 'Unknown error'}`,\n      );\n    }\n  }\n\n  async refreshAccessToken(\n    refreshToken: string,\n  ): Promise<{ accessToken: string; refreshToken?: string }> {\n    try {\n      const result = await this.oauthSdk.refreshAccessToken(refreshToken);\n      this.accessToken = result.accessToken;\n      return result;\n    } catch (error) {\n      throw new Error(\n        `Failed to refresh access token: ${error instanceof Error ? error.message : 'Unknown error'}`,\n      );\n    }\n  }\n\n  async getMemberChangeLogs(\n    startTime?: number,\n  ): Promise<z.infer<typeof ChangelogEventSchema>[]> {\n    await this.validateAccessToken();\n    const params: Record<string, string> = { q: 'memberAndApplication' };\n    if (startTime) {\n      params.startTime = startTime.toString();\n    }\n    const response = await this.request<z.infer<typeof ChangelogEventSchema>[]>(\n      '/rest/memberChangeLogs',\n      'GET',\n      params,\n    );\n    return z.array(ChangelogEventSchema).parse(response);\n  }\n\n  async getMemberSnapshotData(\n    domain?: string,\n  ): Promise<z.infer<typeof MemberSnapshotSchema>[]> {\n    await this.validateAccessToken();\n    const params: Record<string, string> = { q: 'criteria' };\n    if (domain) {\n      params.domain = domain;\n    }\n    const response = await this.request<z.infer<typeof MemberSnapshotSchema>[]>(\n      '/rest/memberSnapshotData',\n      'GET',\n      params,\n    );\n    return z.array(MemberSnapshotSchema).parse(response);\n  }\n\n  async getMemberAuthorizations(): Promise<\n    z.infer<typeof MemberComplianceAuthorizationSchema>\n  > {\n    await this.validateAccessToken();\n    const response = await this.request<\n      z.infer<typeof MemberComplianceAuthorizationSchema>\n    >('/rest/memberAuthorizations', 'GET', { q: 'memberAndApplication' });\n    return MemberComplianceAuthorizationSchema.parse(response);\n  }\n\n  async triggerMemberDataProcessing(): Promise<{ success: boolean }> {\n    await this.validateAccessToken();\n    const response = await this.request<{ success: boolean }>(\n      '/rest/memberAuthorizations',\n      'POST',\n    );\n    return z.object({ success: z.boolean() }).parse(response);\n  }\n}\n\nexport const createLinkedInSDK = (config: {\n  clientId: string;\n  clientSecret: string;\n  redirectUri: string;\n  accessToken: string;\n  refreshToken?: string;\n}): LinkedInDataPortabilitySDK => {\n  return new LinkedInDataPortabilitySDK(config);\n};\n\nexport { LinkedInScope };\n"],"mappings":"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","names":[]}