{"version":3,"file":"services.cjs","sourceRoot":"","sources":["../../../src/NotificationServicesPushController/services/services.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PushNotificationEnv } from '../types';\nimport type {\n  CreateRegToken,\n  DeleteRegToken,\n} from '../types/push-service-interface';\nimport type { ENV } from './endpoints';\nimport * as endpoints from './endpoints';\n\nexport type RegToken = {\n  token: string;\n  platform: 'extension' | 'mobile' | 'portfolio';\n  locale: string;\n  oldToken?: string;\n};\n\nexport type RegistrationPlatform = 'extension' | 'mobile';\n\n/**\n * Links API Response Shape\n */\nexport type PushTokenRequest = {\n  addresses: string[];\n  // API response uses snake_case for this property\n  // eslint-disable-next-line @typescript-eslint/naming-convention\n  registration_token: {\n    token: string;\n    platform: 'extension' | 'mobile' | 'portfolio';\n    locale: string;\n    oldToken?: string;\n  };\n};\n\nexport type DeletePushTokenRequest = {\n  addresses: string[];\n  // API request uses snake_case for this property\n  // eslint-disable-next-line @typescript-eslint/naming-convention\n  registration_token: {\n    platform: RegistrationPlatform;\n    token: string;\n  };\n};\n\ntype UpdatePushTokenParams = {\n  bearerToken: string;\n  addresses: string[];\n  regToken: RegToken;\n  env?: ENV;\n};\n\n/**\n * Updates the push notification links on a remote API.\n *\n * @param params - params for invoking update reg token\n * @returns A promise that resolves with true if the update was successful, false otherwise.\n */\nexport async function updateLinksAPI(\n  params: UpdatePushTokenParams,\n): Promise<boolean> {\n  try {\n    const body: PushTokenRequest = {\n      addresses: params.addresses,\n      registration_token: params.regToken,\n    };\n    const response = await fetch(\n      endpoints.REGISTRATION_TOKENS_ENDPOINT(params.env),\n      {\n        method: 'POST',\n        headers: {\n          Authorization: `Bearer ${params.bearerToken}`,\n          'Content-Type': 'application/json',\n        },\n        body: JSON.stringify(body),\n      },\n    );\n    return response.ok;\n  } catch {\n    return false;\n  }\n}\n\ntype DeletePushTokenParams = {\n  bearerToken: string;\n  addresses: string[];\n  platform: RegistrationPlatform;\n  token: string;\n  env?: ENV;\n};\n\n/**\n * Deletes push notification links for addresses and platform.\n *\n * @param params - params for deleting registration links\n * @returns A promise that resolves with true if the delete request was successful, false otherwise.\n */\nexport async function deleteLinksAPI(\n  params: DeletePushTokenParams,\n): Promise<boolean> {\n  try {\n    const body: DeletePushTokenRequest = {\n      addresses: params.addresses,\n      registration_token: {\n        platform: params.platform,\n        token: params.token,\n      },\n    };\n    const response = await fetch(\n      endpoints.REGISTRATION_TOKENS_ENDPOINT(params.env),\n      {\n        method: 'DELETE',\n        headers: {\n          Authorization: `Bearer ${params.bearerToken}`,\n          'Content-Type': 'application/json',\n        },\n        body: JSON.stringify(body),\n      },\n    );\n    return response.ok;\n  } catch {\n    return false;\n  }\n}\n\ntype ActivatePushNotificationsParams = {\n  // Create Push Token\n  env: PushNotificationEnv;\n  createRegToken: CreateRegToken;\n  controllerEnv?: ENV;\n\n  // Other Request Parameters\n  bearerToken: string;\n  addresses: string[];\n  regToken: Pick<RegToken, 'locale' | 'platform' | 'oldToken'>;\n};\n\n/**\n * Enables push notifications by registering the device and linking triggers.\n *\n * @param params - Activate Push Params\n * @returns A promise that resolves with an object containing the success status and the BearerToken token.\n */\nexport async function activatePushNotifications(\n  params: ActivatePushNotificationsParams,\n): Promise<string | null> {\n  const { env, createRegToken } = params;\n\n  const regToken = await createRegToken(env).catch(() => null);\n  if (!regToken) {\n    return null;\n  }\n\n  await updateLinksAPI({\n    bearerToken: params.bearerToken,\n    addresses: params.addresses,\n    regToken: {\n      token: regToken,\n      platform: params.regToken.platform,\n      locale: params.regToken.locale,\n      oldToken: params.regToken.oldToken,\n    },\n    env: params.controllerEnv,\n  });\n\n  return regToken;\n}\n\ntype DeactivatePushNotificationsParams = {\n  // Push Links\n  regToken: string;\n\n  // Push Un-registration\n  env: PushNotificationEnv;\n  deleteRegToken: DeleteRegToken;\n};\n\n/**\n * Disables push notifications by removing the registration token\n * We do not need to unlink triggers, and remove old reg tokens (this is cleaned up in the back-end)\n *\n * @param params - Deactivate Push Params\n * @returns A promise that resolves with true if push notifications were successfully disabled, false otherwise.\n */\nexport async function deactivatePushNotifications(\n  params: DeactivatePushNotificationsParams,\n): Promise<boolean> {\n  const { regToken, env, deleteRegToken } = params;\n\n  // if we don't have a reg token, then we can early return\n  if (!regToken) {\n    return true;\n  }\n\n  const isTokenRemovedFromFCM = await deleteRegToken(env);\n  if (!isTokenRemovedFromFCM) {\n    return false;\n  }\n\n  return true;\n}\n"]}