Skip to content

problem using in akamai edgworkers #54

@blueo

Description

@blueo

Expected Behaviour

I expect I can use the sdk in an akamai edgeworker

Actual Behaviour

Edgeworker static validation fails

Reproduce Scenario (including but not limited to)

Steps to Reproduce

import sdk version > 2.1.1 to an akamai edgworker js file
Upload edgworker using cli (eg akamai ew upload --codeDir ./ [workerID]
reported error:

{
  "type": "/edgeworkers/error-types/edgeworkers-invalid-argument",
  "title": "Invalid Argument.",
  "detail": "Tarball validation failed: static validation failed : main.js::12:24 Unknown built-in module: \"crypto\".",
  "instance": "/edgeworkers/error-instances/124d6da6-ebb0-4153-a145-ca67704ae8fc",
  "status": 400,
  "errorCode": "EW1108",
  "traceId": "f01b60cc2d1f1c55"
}

Platform and Version

akamai edgeworker

Sample Code that illustrates the problem

main.js :

import { httpRequest } from "http-request";
import { createResponse } from "create-response";
import { logger } from "log";
import { Cookies } from "cookies";
/** end provided modules */
import TargetClient from "@adobe/target-nodejs-sdk";

const clientCode = "xxxx";
const organizationId = "xxxx;
const rulesUrl = `https://assets.adobetarget.com/${clientCode}/production/v1/rules.json`;

function createTargetClient(rules) {
  return new Promise((resolve) => {
    const result = TargetClient.create({
      client: clientCode,
      organizationId: organizationId,
      decisioningMethod: "on-device",
      artifactPayload: rules,
      pollingInterval: 0, // "0" prevents polling, if artifactPayload is provided
      targetLocationHint: "<location hint>", // prevent cluster discovery
      logger: logger, // use Akamai EdgeWorker provided logger
      fetchApi: httpRequest,
      events: {
        clientReady: () => resolve(result),
      },
    });
  });
}

export async function responseProvider(request) {
  try {
    const deliveryRequest = {
      execute: {
        mboxes: [
          {
            address: { url: request.host + request.url },
            name: "a1-serverside-ab",
          },
        ],
      },
    };

    const rules = await httpRequest(rulesUrl).then((response) => response.json());
    const client = await createTargetClient(rules);
    const cookies = new Cookies(request.getHeader("Cookie"));
    const visitorCookie = cookies.get(TargetClient.getVisitorCookieName(organizationId));
    const targetCookie = cookies.get(TargetClient.TargetCookieName);
    const { response } = await client.getOffers({ request: deliveryRequest, visitorCookie, targetCookie });

    return createResponse(200, {}, JSON.stringify(response));
  } catch (e) {
    logger.log(e);
    return createResponse(400, {}, JSON.stringify(e));
  }
}

i'm working from this example: https://github.com/artur-ciocanu/odd-akamai-edge-workers/

if I pin my version to 2.1.1 then I can avoid the issue

Logs taken while reproducing problem

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions