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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions