Add Activepieces integration for workflow automation

- Add Activepieces fork with SmoothSchedule custom piece
- Create integrations app with Activepieces service layer
- Add embed token endpoint for iframe integration
- Create Automations page with embedded workflow builder
- Add sidebar visibility fix for embed mode
- Add list inactive customers endpoint to Public API
- Include SmoothSchedule triggers: event created/updated/cancelled
- Include SmoothSchedule actions: create/update/cancel events, list resources/services/customers

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
poduck
2025-12-18 22:59:37 -05:00
parent 9848268d34
commit 3aa7199503
16292 changed files with 1284892 additions and 4708 deletions

View File

@@ -0,0 +1,33 @@
{
"extends": [
"../../../../.eslintrc.base.json"
],
"ignorePatterns": [
"!**/*"
],
"overrides": [
{
"files": [
"*.ts",
"*.tsx",
"*.js",
"*.jsx"
],
"rules": {}
},
{
"files": [
"*.ts",
"*.tsx"
],
"rules": {}
},
{
"files": [
"*.js",
"*.jsx"
],
"rules": {}
}
]
}

View File

@@ -0,0 +1,7 @@
# pieces-shippo
This library was generated with [Nx](https://nx.dev).
## Building
Run `nx build pieces-shippo` to build the library.

View File

@@ -0,0 +1,10 @@
{
"name": "@activepieces/piece-shippo",
"version": "0.0.2",
"type": "commonjs",
"main": "./src/index.js",
"types": "./src/index.d.ts",
"dependencies": {
"tslib": "^2.3.0"
}
}

View File

@@ -0,0 +1,51 @@
{
"name": "pieces-shippo",
"$schema": "../../../../node_modules/nx/schemas/project-schema.json",
"sourceRoot": "packages/pieces/community/shippo/src",
"projectType": "library",
"release": {
"version": {
"manifestRootsToUpdate": [
"dist/{projectRoot}"
],
"currentVersionResolver": "git-tag",
"fallbackCurrentVersionResolver": "disk"
}
},
"tags": [],
"targets": {
"build": {
"executor": "@nx/js:tsc",
"outputs": [
"{options.outputPath}"
],
"options": {
"outputPath": "dist/packages/pieces/community/shippo",
"tsConfig": "packages/pieces/community/shippo/tsconfig.lib.json",
"packageJson": "packages/pieces/community/shippo/package.json",
"main": "packages/pieces/community/shippo/src/index.ts",
"assets": [
"packages/pieces/community/shippo/*.md",
{
"input": "packages/pieces/community/shippo/src/i18n",
"output": "./src/i18n",
"glob": "**/!(i18n.json)"
}
],
"buildableProjectDepsInPackageJsonType": "dependencies",
"updateBuildableProjectDepsInPackageJson": true
}
},
"nx-release-publish": {
"options": {
"packageRoot": "dist/{projectRoot}"
}
},
"lint": {
"executor": "@nx/eslint:lint",
"outputs": [
"{options.outputFile}"
]
}
}
}

View File

@@ -0,0 +1,94 @@
{
"Multi-carrier shipping platform for real-time rates, labels, and tracking": "Multi-Träger-Versandplattform für Echtzeit-Preise, Etiketten und Tracking",
"Your Shippo API token": "Ihr Shippo API Token",
"Create Order": "Bestellung erstellen",
"Find Order": "Bestellung suchen",
"Find Shipping Label": "Versandbezeichnung finden",
"Create a new order in Shippo": "Neue Bestellung in Versandkosten erstellen",
"Search for an order by its ID": "Suche nach einer Bestellung mit seiner ID",
"Search for a shipping label by its ID": "Suche nach einem Versandaufkleber mit dessen ID",
"Order Number": "Bestellnummer",
"Order Status": "Bestellstatus",
"Order Date": "Bestelldatum",
"Total Price": "Gesamtpreis",
"Subtotal Price": "Zwischensumme",
"Total Tax": "Gesamt Steuern",
"Currency": "Währung",
"Sender Name": "Absendername",
"Sender Company": "Absender Firma",
"Sender Street Address": "Adresse des Absenders",
"Sender City": "Absenderstadt",
"Sender State": "Absenderstatus",
"Sender ZIP Code": "Postleitzahl Absender",
"Sender Country": "Absenderland",
"Sender Phone": "Sendertelefon",
"Sender Email": "Absender-E-Mail",
"Recipient Name": "Empfängername",
"Recipient Company": "Empfängerunternehmen",
"Recipient Street Address": "Adresse des Empfängers",
"Recipient City": "Empfängerstadt",
"Recipient State": "Empfängerstatus",
"Recipient ZIP Code": "Empfänger Postleitzahl",
"Recipient Country": "Empfängerland",
"Recipient Phone": "Empfängertelefon",
"Recipient Email": "Empfänger E-Mail",
"Item Title": "Artikeltitel",
"Item Quantity": "Artikelmenge",
"Item Total Price": "Artikelsumme",
"Item SKU": "Artikelnummer",
"Item Weight": "Artikelgewicht",
"Item Weight Unit": "Element Gewichtseinheit",
"Total Package Weight": "Gesamtgewicht des Pakets",
"Package Weight Unit": "Paket Gewichtseinheit",
"Shipping Cost": "Versandkosten",
"Shipping Cost Currency": "Versandkosten Währung",
"Shipping Method": "Versandart",
"Additional Line Items": "Zusätzliche Zeilenelemente",
"Order ID": "Bestell-ID",
"Label ID": "Label-ID",
"Custom reference number for the order": "Eigene Referenznummer für die Bestellung",
"Current status of the order": "Aktueller Status der Bestellung",
"When the order was placed by the buyer (mandatory) - Format: 2025-10-31T11:56:29.244Z": "Wenn die Bestellung vom Käufer erteilt wurde (obligatorisch) - Format: 2025-10-31T11:56:29.244Z",
"Total price including shipping and tax": "Gesamtpreis inkl. Versand und Steuern",
"Price before shipping and tax (optional)": "Preis vor Versand und Steuern (optional)",
"Total tax amount": "Gesamtbetrag Steuern",
"Currency code (e.g., USD, EUR)": "Währungscode (z. B. USD, EUR)",
"Name of the sender": "Name des Absenders",
"Company name of the sender": "Firmenname des Absenders",
"Street address line 1": "Straßenadresse Linie 1",
"City": "Stadt",
"State/Province": "Bundesland/Provinz",
"ZIP/Postal code": "Postleitzahl",
"Two-letter country code (e.g., US)": "Ländercode mit zwei Buchstaben (z. B. USA)",
"Name of the recipient": "Name des Empfängers",
"Company name of the recipient": "Firmenname des Empfängers",
"Name/description of the item (optional)": "Name/Beschreibung des Elements (optional)",
"Total price for this line item (quantity × unit price)": "Gesamtpreis für diese Zeile (Menge × Stückpreis)",
"Stock keeping unit": "Lagereinheit",
"Weight of a single item (e.g., \"0.5\")": "Gewicht eines einzelnen Elements (z.B. \"0.5\")",
"Total weight of the package for shipping (e.g., \"2.5\")": "Gesamtgewicht des Pakets für den Versand (z.B. \"2.5\")",
"Unit for total package weight": "Einheit für das Gesamtgewicht des Pakets",
"Shipping cost amount (e.g., \"5.99\")": "Versandkosten (z. B. \"5.99\")",
"Currency for shipping cost": "Währung für Versandkosten",
"Shipping method name (e.g., \"USPS First Class Package\") - optional": "Name der Versandart (z.B. \"USPS First Class Paket\") - optional",
"Additional line items in JSON format. Example: [{\"title\": \"Product 2\", \"quantity\": 2, \"total_price\": \"20.00\"}]": "Zusätzliche Zeilenelemente im JSON-Format. Beispiel: [{\"title\": \"Produkt 2\", \"Menge\": 2, \"total_price\": \"20.00\"}]",
"The ID of the order to find": "Die ID der zu findenden Bestellung",
"The ID of the shipping label to find": "Die ID des zu findenden Versandaufklebers",
"Unknown": "Unbekannt",
"Awaiting Payment": "Wartet auf Zahlung",
"Paid": "Bezahlt",
"Refunded": "Erstattet",
"Cancelled": "Abgebrochen",
"Partially Fulfilled": "Teilweise erfüllt",
"Shipped": "Verschickt",
"Pounds (lb)": "Pfund (lb)",
"Ounces (oz)": "Unzen (oz)",
"Kilograms (kg)": "Kilograms (kg)",
"Grams (g)": "Gramme (g)",
"New Shipping Label": "Neue Versandbezeichnung",
"New Order": "Neue Bestellung",
"Trigger when a new shipping label is created": "Auslösen wenn ein neues Versandlabel erstellt wird",
"Trigger when a new order is created": "Auslösen wenn eine neue Bestellung erstellt wird",
"Include Test Labels": "Test-Labels einschließen",
"Include test shipping labels in the trigger": "Fügen Sie dem Trigger die Versandbezeichnungen hinzu"
}

View File

@@ -0,0 +1,94 @@
{
"Multi-carrier shipping platform for real-time rates, labels, and tracking": "Plataforma de envío multitransportista para tarifas en tiempo real, etiquetas y seguimiento",
"Your Shippo API token": "Tu token de la API de Shippo",
"Create Order": "Crear pedido",
"Find Order": "Buscar pedido",
"Find Shipping Label": "Buscar etiqueta de envío",
"Create a new order in Shippo": "Crear un nuevo pedido en Shippo",
"Search for an order by its ID": "Buscar un pedido por su ID",
"Search for a shipping label by its ID": "Buscar una etiqueta de envío por su ID",
"Order Number": "Número de pedido",
"Order Status": "Estado del pedido",
"Order Date": "Fecha del pedido",
"Total Price": "Precio total",
"Subtotal Price": "Precio subtotal",
"Total Tax": "Impuesto Total",
"Currency": "Moneda",
"Sender Name": "Nombre del remitente",
"Sender Company": "Empresa del remitente",
"Sender Street Address": "Dirección del remitente",
"Sender City": "Ciudad del remitente",
"Sender State": "Estado del remitente",
"Sender ZIP Code": "Código postal del remitente",
"Sender Country": "País del remitente",
"Sender Phone": "Teléfono del remitente",
"Sender Email": "Email del remitente",
"Recipient Name": "Nombre del destinatario",
"Recipient Company": "Compañía del destinatario",
"Recipient Street Address": "Dirección de la calle del destinatario",
"Recipient City": "Ciudad del destinatario",
"Recipient State": "Estado del destinatario",
"Recipient ZIP Code": "Código postal del destinatario",
"Recipient Country": "País del destinatario",
"Recipient Phone": "Teléfono del destinatario",
"Recipient Email": "Email del destinatario",
"Item Title": "Título del artículo",
"Item Quantity": "Cantidad del artículo",
"Item Total Price": "Precio total del artículo",
"Item SKU": "Artículo SKU",
"Item Weight": "Peso del objeto",
"Item Weight Unit": "Unidad de influencia del objeto",
"Total Package Weight": "Peso total del paquete",
"Package Weight Unit": "Unidad de Peso del Paquete",
"Shipping Cost": "Coste de envío",
"Shipping Cost Currency": "Moneda de costo de envío",
"Shipping Method": "Método de envío",
"Additional Line Items": "Ítems de línea adicionales",
"Order ID": "ID del pedido",
"Label ID": "ID de etiqueta",
"Custom reference number for the order": "Número de referencia personalizado para el pedido",
"Current status of the order": "Estado actual del pedido",
"When the order was placed by the buyer (mandatory) - Format: 2025-10-31T11:56:29.244Z": "Cuando el pedido fue realizado por el comprador (obligatorio) - Formato: 2025-10-31T11:56:29.244Z",
"Total price including shipping and tax": "Precio total incluyendo envío e impuestos",
"Price before shipping and tax (optional)": "Precio antes de envío e impuestos (opcional)",
"Total tax amount": "Monto total de impuestos",
"Currency code (e.g., USD, EUR)": "Código de moneda (por ejemplo, USD, EUR)",
"Name of the sender": "Nombre del remitente",
"Company name of the sender": "Nombre de la empresa del remitente",
"Street address line 1": "Línea 1 de dirección de calle",
"City": "Ciudad",
"State/Province": "Estado/Provenza",
"ZIP/Postal code": "Código postal",
"Two-letter country code (e.g., US)": "Código de país de dos letras (por ej., EE.UU.)",
"Name of the recipient": "Nombre del destinatario",
"Company name of the recipient": "Nombre de la empresa del destinatario",
"Name/description of the item (optional)": "Nombre/descripción del elemento (opcional)",
"Total price for this line item (quantity × unit price)": "Precio total para este artículo de línea (cantidad × precio unitario)",
"Stock keeping unit": "Unidad de almacenamiento",
"Weight of a single item (e.g., \"0.5\")": "Influencia de un único elemento (por ej., \"0.5\")",
"Total weight of the package for shipping (e.g., \"2.5\")": "Peso total del paquete de envío (por ejemplo, \"2.5\")",
"Unit for total package weight": "Unidad para el peso total del paquete",
"Shipping cost amount (e.g., \"5.99\")": "Monto de gastos de envío (por ej., \"5.99\")",
"Currency for shipping cost": "Moneda para gastos de envío",
"Shipping method name (e.g., \"USPS First Class Package\") - optional": "Nombre del método de envío (por ejemplo, \"Paquete de primera clase USPS) - opcional",
"Additional line items in JSON format. Example: [{\"title\": \"Product 2\", \"quantity\": 2, \"total_price\": \"20.00\"}]": "Artículos de línea adicionales en formato JSON. Ejemplo: [{\"título\": \"Producto 2\", \"cantidad\": 2, \"total_precio\": \"20.00\"}]",
"The ID of the order to find": "El ID del pedido a encontrar",
"The ID of the shipping label to find": "El ID de la etiqueta de envío a encontrar",
"Unknown": "Desconocido",
"Awaiting Payment": "Esperando pago",
"Paid": "Pagado",
"Refunded": "Reembolsado",
"Cancelled": "Cancelado",
"Partially Fulfilled": "Completo parcialmente",
"Shipped": "Enviado",
"Pounds (lb)": "Libras (lb)",
"Ounces (oz)": "Onzas (oz)",
"Kilograms (kg)": "Kilograms (kg)",
"Grams (g)": "Gramas (g)",
"New Shipping Label": "Nueva etiqueta de envío",
"New Order": "Nuevo pedido",
"Trigger when a new shipping label is created": "Activar cuando se crea una nueva etiqueta de envío",
"Trigger when a new order is created": "Activar cuando se crea un nuevo pedido",
"Include Test Labels": "Incluye etiquetas de prueba",
"Include test shipping labels in the trigger": "Incluye etiquetas de envío de prueba en el gatillo"
}

View File

@@ -0,0 +1,94 @@
{
"Multi-carrier shipping platform for real-time rates, labels, and tracking": "Plateforme d'expédition multi-transporteurs pour tarifs en temps réel, étiquettes et suivi",
"Your Shippo API token": "Votre jeton API Shippo",
"Create Order": "Créer une commande",
"Find Order": "Trouver une commande",
"Find Shipping Label": "Trouver l'étiquette d'expédition",
"Create a new order in Shippo": "Créer une nouvelle commande dans Shippo",
"Search for an order by its ID": "Rechercher une commande par son ID",
"Search for a shipping label by its ID": "Rechercher une étiquette d'expédition par son ID",
"Order Number": "Numéro de commande",
"Order Status": "Statut de la commande",
"Order Date": "Date de la commande",
"Total Price": "Prix total",
"Subtotal Price": "Prix du sous-total",
"Total Tax": "Taxe totale",
"Currency": "Devise",
"Sender Name": "Nom de l'expéditeur",
"Sender Company": "Société de l'expéditeur",
"Sender Street Address": "Adresse de l'expéditeur",
"Sender City": "Ville de l'expéditeur",
"Sender State": "État de l'expéditeur",
"Sender ZIP Code": "Code postal de l'expéditeur",
"Sender Country": "Pays de l'expéditeur",
"Sender Phone": "Téléphone de l'expéditeur",
"Sender Email": "E-mail de l'expéditeur",
"Recipient Name": "Nom du destinataire",
"Recipient Company": "Société bénéficiaire",
"Recipient Street Address": "Adresse du destinataire",
"Recipient City": "Ville du destinataire",
"Recipient State": "État destinataire",
"Recipient ZIP Code": "Code postal du destinataire",
"Recipient Country": "Pays destinataire",
"Recipient Phone": "Téléphone du destinataire",
"Recipient Email": "E-mail du destinataire",
"Item Title": "Titre de l'élément",
"Item Quantity": "Quantité d'articles",
"Item Total Price": "Prix total de larticle",
"Item SKU": "UGS de l'article",
"Item Weight": "Poids de l'élément",
"Item Weight Unit": "Unité de poids de l'objet",
"Total Package Weight": "Poids total du paquet",
"Package Weight Unit": "Unité de poids du paquet",
"Shipping Cost": "Frais d'expédition",
"Shipping Cost Currency": "Devise de frais d'expédition",
"Shipping Method": "Mode de livraison",
"Additional Line Items": "Lignes supplémentaires",
"Order ID": "ID de la commande",
"Label ID": "ID de l'étiquette",
"Custom reference number for the order": "Numéro de référence personnalisé pour la commande",
"Current status of the order": "Statut actuel de la prescription",
"When the order was placed by the buyer (mandatory) - Format: 2025-10-31T11:56:29.244Z": "Lorsque la commande a été passée par l'acheteur (obligatoire) - Format: 2025-10-31T11:56:29.244Z",
"Total price including shipping and tax": "Prix total incluant les frais de port et taxes",
"Price before shipping and tax (optional)": "Prix avant livraison et taxes (facultatif)",
"Total tax amount": "Montant total des taxes",
"Currency code (e.g., USD, EUR)": "Code de la devise (par exemple, USD, EUR)",
"Name of the sender": "Nom de l'expéditeur",
"Company name of the sender": "Nom de la société de l'expéditeur",
"Street address line 1": "Adresse de la ligne 1",
"City": "Ville",
"State/Province": "État/Province",
"ZIP/Postal code": "Code postal",
"Two-letter country code (e.g., US)": "Code pays à deux lettres (par exemple, US)",
"Name of the recipient": "Nom du destinataire",
"Company name of the recipient": "Nom de la société du destinataire",
"Name/description of the item (optional)": "Nom/description de l'élément (facultatif)",
"Total price for this line item (quantity × unit price)": "Prix total pour cet article de ligne (quantité × prix unitaire)",
"Stock keeping unit": "Unité de gestion des stocks",
"Weight of a single item (e.g., \"0.5\")": "Poids d'un seul élément (par exemple, \"0.5\")",
"Total weight of the package for shipping (e.g., \"2.5\")": "Poids total du colis pour l'expédition (par exemple, \"2.5\")",
"Unit for total package weight": "Unité pour le poids total du colis",
"Shipping cost amount (e.g., \"5.99\")": "Frais d'expédition (ex: \"5.99\")",
"Currency for shipping cost": "Devise pour les frais de port",
"Shipping method name (e.g., \"USPS First Class Package\") - optional": "Nom du mode de livraison (par exemple, \"USPS First Class Package\") - facultatif",
"Additional line items in JSON format. Example: [{\"title\": \"Product 2\", \"quantity\": 2, \"total_price\": \"20.00\"}]": "Éléments de ligne supplémentaires au format JSON. Exemple: [{\"title\": \"Produit 2\", \"quantity\": 2, \"total_price\": \"20.00\"}]",
"The ID of the order to find": "L'ID de la prescription à trouver",
"The ID of the shipping label to find": "L'ID de l'étiquette d'expédition à trouver",
"Unknown": "Unknown",
"Awaiting Payment": "En attente de paiement",
"Paid": "Payé",
"Refunded": "Remboursé",
"Cancelled": "Annulé",
"Partially Fulfilled": "Partiellement complété",
"Shipped": "Expédier",
"Pounds (lb)": "Livres (lb)",
"Ounces (oz)": "Onces (oz)",
"Kilograms (kg)": "Kilograms (kg)",
"Grams (g)": "Grammes (g)",
"New Shipping Label": "Nouvelle étiquette d'expédition",
"New Order": "Nouvelle commande",
"Trigger when a new shipping label is created": "Déclencher quand une nouvelle étiquette d'expédition est créée",
"Trigger when a new order is created": "Déclencher quand une nouvelle commande est créée",
"Include Test Labels": "Inclure les étiquettes de test",
"Include test shipping labels in the trigger": "Inclure les étiquettes de test d'expédition dans le déclencheur"
}

View File

@@ -0,0 +1,94 @@
{
"Multi-carrier shipping platform for real-time rates, labels, and tracking": "リアルタイムの料金、ラベル、および追跡のためのマルチキャリア配送プラットフォーム",
"Your Shippo API token": "あなたのShippo APIトークン",
"Create Order": "注文を作成",
"Find Order": "注文を検索",
"Find Shipping Label": "配送ラベルを検索",
"Create a new order in Shippo": "Shippoで新しい注文を作成します",
"Search for an order by its ID": "ID で注文を検索",
"Search for a shipping label by its ID": "ID で配送ラベルを検索",
"Order Number": "注文番号",
"Order Status": "注文ステータス",
"Order Date": "注文日",
"Total Price": "合計価格",
"Subtotal Price": "小計",
"Total Tax": "税額合計",
"Currency": "通貨",
"Sender Name": "送信者名",
"Sender Company": "Sender Company",
"Sender Street Address": "差出人の住所",
"Sender City": "差出人の市",
"Sender State": "送信者の状態",
"Sender ZIP Code": "差出人の郵便番号",
"Sender Country": "送信者の国",
"Sender Phone": "差出人の電話番号",
"Sender Email": "送信者メールアドレス",
"Recipient Name": "受信者名",
"Recipient Company": "受信者",
"Recipient Street Address": "宛先住所",
"Recipient City": "受信者の都市",
"Recipient State": "受信者の状態",
"Recipient ZIP Code": "受信者の郵便番号",
"Recipient Country": "受取人の国",
"Recipient Phone": "受信者電話番号",
"Recipient Email": "受信者メールアドレス",
"Item Title": "アイテムタイトル",
"Item Quantity": "商品数量",
"Item Total Price": "商品合計価格",
"Item SKU": "商品SKU",
"Item Weight": "商品の重量",
"Item Weight Unit": "アイテムの重量",
"Total Package Weight": "パッケージの合計重量",
"Package Weight Unit": "パッケージ重量単位",
"Shipping Cost": "配送料金",
"Shipping Cost Currency": "配送料金通貨",
"Shipping Method": "配送方法",
"Additional Line Items": "追加の行項目",
"Order ID": "注文ID",
"Label ID": "ラベル ID",
"Custom reference number for the order": "注文のカスタム参照番号",
"Current status of the order": "注文の現在の状態",
"When the order was placed by the buyer (mandatory) - Format: 2025-10-31T11:56:29.244Z": "購入者によって注文された場合 (必須) - フォーマット: 2025-10-31T11:56:29.244Z",
"Total price including shipping and tax": "配送と税を含む合計価格",
"Price before shipping and tax (optional)": "配送と税の前の価格 (オプション)",
"Total tax amount": "税額合計",
"Currency code (e.g., USD, EUR)": "通貨コードUSD、EUR",
"Name of the sender": "送信者の名前",
"Company name of the sender": "送信者の会社名",
"Street address line 1": "住所1",
"City": "市区町村名",
"State/Province": "都道府県:",
"ZIP/Postal code": "郵便番号/郵便番号",
"Two-letter country code (e.g., US)": "2文字の国コード米国",
"Name of the recipient": "受信者の名前",
"Company name of the recipient": "受信者の会社名",
"Name/description of the item (optional)": "アイテムの名前/説明 (オプション)",
"Total price for this line item (quantity × unit price)": "この品目の合計価格(数量×単価)",
"Stock keeping unit": "在庫保管単位",
"Weight of a single item (e.g., \"0.5\")": "単一のアイテムの重量 (例: \"0.5\")",
"Total weight of the package for shipping (e.g., \"2.5\")": "配送のためのパッケージの合計重量 (例: \"2.5\")",
"Unit for total package weight": "荷物総重量の単位",
"Shipping cost amount (e.g., \"5.99\")": "配送料金(例:\"5.99\")",
"Currency for shipping cost": "配送料の通貨",
"Shipping method name (e.g., \"USPS First Class Package\") - optional": "配送方法名 (例: \"USPS First Class Package\") - 省略可能",
"Additional line items in JSON format. Example: [{\"title\": \"Product 2\", \"quantity\": 2, \"total_price\": \"20.00\"}]": "JSON形式の追加行項目。例[{\"title\": \"Product 2\", \"quantity\": 2, \"total_price\": \"20.00\"}]",
"The ID of the order to find": "検索する注文のID",
"The ID of the shipping label to find": "検索する配送ラベルのID",
"Unknown": "不明",
"Awaiting Payment": "お支払い待ち",
"Paid": "支払い済み",
"Refunded": "払い戻し済み",
"Cancelled": "キャンセルしました",
"Partially Fulfilled": "部分的に満員された",
"Shipped": "配送済み",
"Pounds (lb)": "ポンド (ポンド)",
"Ounces (oz)": "ounces (oz)",
"Kilograms (kg)": "Kilograms (kg)",
"Grams (g)": "グラム (g)",
"New Shipping Label": "新しい配送ラベル",
"New Order": "新規注文",
"Trigger when a new shipping label is created": "新しい配送ラベルが作成されたときにトリガーします",
"Trigger when a new order is created": "新しい注文が作成されたときにトリガーします",
"Include Test Labels": "テストラベルを含める",
"Include test shipping labels in the trigger": "テスト配送ラベルをトリガーに含める"
}

View File

@@ -0,0 +1,94 @@
{
"Multi-carrier shipping platform for real-time rates, labels, and tracking": "Multi-carrier shipping platform voor real-time tarieven, labels en tracking",
"Your Shippo API token": "Uw Shippo API-sleutel",
"Create Order": "Bestelling aanmaken",
"Find Order": "Bestelling zoeken",
"Find Shipping Label": "Verzendlabel zoeken",
"Create a new order in Shippo": "Maak een nieuwe bestelling aan in Shippo",
"Search for an order by its ID": "Zoek naar een bestelling op ID",
"Search for a shipping label by its ID": "Zoeken naar een verzendlabel op ID",
"Order Number": "Bestelnummer",
"Order Status": "Status van bestelling",
"Order Date": "Bestelling datum",
"Total Price": "Totale prijs",
"Subtotal Price": "Subtotaal prijs",
"Total Tax": "Totaal BTW",
"Currency": "valuta",
"Sender Name": "Naam afzender",
"Sender Company": "Afzender Bedrijf",
"Sender Street Address": "Adres afzender",
"Sender City": "Afzender Plaats",
"Sender State": "Afzender status",
"Sender ZIP Code": "ZIP-code afzender",
"Sender Country": "Afzender Land",
"Sender Phone": "Telefoon afzender",
"Sender Email": "E-mailadres afzender",
"Recipient Name": "Naam ontvanger",
"Recipient Company": "Ontvanger Bedrijf",
"Recipient Street Address": "Adres van ontvanger",
"Recipient City": "Ontvanger Plaats",
"Recipient State": "Ontvanger status",
"Recipient ZIP Code": "Postcode van de ontvanger",
"Recipient Country": "Ontvanger Land",
"Recipient Phone": "Telefoon geadresseerde",
"Recipient Email": "E-mailadres ontvanger",
"Item Title": "Artikel titel",
"Item Quantity": "Artikel hoeveelheid",
"Item Total Price": "Artikel totaal prijs",
"Item SKU": "Artikel SKU",
"Item Weight": "Item Gewicht",
"Item Weight Unit": "Item gewicht eenheid",
"Total Package Weight": "Totaal pakketgewicht",
"Package Weight Unit": "Pakket Gewicht Eenheid",
"Shipping Cost": "Verzend kosten",
"Shipping Cost Currency": "Verzendkosten valuta",
"Shipping Method": "Verzendmethode",
"Additional Line Items": "Extra regelitems",
"Order ID": "Bestelling ID",
"Label ID": "Label ID",
"Custom reference number for the order": "Aangepast referentienummer voor de bestelling",
"Current status of the order": "Huidige status van de bestelling",
"When the order was placed by the buyer (mandatory) - Format: 2025-10-31T11:56:29.244Z": "Wanneer de bestelling werd geplaatst door de koper (verplicht) - Formaat: 2025-10-31T11:56:29.244Z",
"Total price including shipping and tax": "Totaalprijs inclusief verzending en BTW",
"Price before shipping and tax (optional)": "Prijs voor verzending en BTW (optioneel)",
"Total tax amount": "Totaal belastingbedrag",
"Currency code (e.g., USD, EUR)": "Valutacode (bijv. USD, EUR)",
"Name of the sender": "Naam van de afzender",
"Company name of the sender": "Bedrijfsnaam van de afzender",
"Street address line 1": "Adresregel 1 straat",
"City": "Woonplaats",
"State/Province": "Staat/provincie",
"ZIP/Postal code": "Postcode",
"Two-letter country code (e.g., US)": "Twee letter landcode (bijv. US)",
"Name of the recipient": "Naam van de ontvanger",
"Company name of the recipient": "Bedrijfsnaam van de ontvanger",
"Name/description of the item (optional)": "Naam/beschrijving van het item (optioneel)",
"Total price for this line item (quantity × unit price)": "Totale prijs van dit regelitem (hoeveelheid × eenheidsprijs)",
"Stock keeping unit": "Voorraad behoud eenheid",
"Weight of a single item (e.g., \"0.5\")": "Gewicht van een enkel item (bijv. \"0.5\")",
"Total weight of the package for shipping (e.g., \"2.5\")": "Totale gewicht van het pakket voor verzending (bijv. \"2.5\")",
"Unit for total package weight": "Eenheid voor totaal pakketgewicht",
"Shipping cost amount (e.g., \"5.99\")": "Verzendkosten bedrag (bijv. \"5.99\")",
"Currency for shipping cost": "Valuta voor verzendkosten",
"Shipping method name (e.g., \"USPS First Class Package\") - optional": "Naam verzendmethode (bijv. \"USPS First Class Package\") - optioneel",
"Additional line items in JSON format. Example: [{\"title\": \"Product 2\", \"quantity\": 2, \"total_price\": \"20.00\"}]": "Extra lijnitems in JSON formaat. Voorbeeld: [{\"title\": \"Product 2\", \"hoeveelheid\": 2, \"total_price\": \"20.00\"}]",
"The ID of the order to find": "Het ID van de bestelling",
"The ID of the shipping label to find": "Het ID van het verzendlabel om te vinden",
"Unknown": "Onbekend",
"Awaiting Payment": "Wachtend op betaling",
"Paid": "Betaald",
"Refunded": "Terugbetaald",
"Cancelled": "Geannuleerd",
"Partially Fulfilled": "Gedeeltelijk compleet",
"Shipped": "Verzonden",
"Pounds (lb)": "Ponden (lb)",
"Ounces (oz)": "Oons (oz)",
"Kilograms (kg)": "Kilograms (kg)",
"Grams (g)": "Grammen (g)",
"New Shipping Label": "Nieuw verzendlabel",
"New Order": "Nieuwe bestelling",
"Trigger when a new shipping label is created": "Trigger wanneer een nieuw verzendlabel is aangemaakt",
"Trigger when a new order is created": "Trigger wanneer een nieuwe order wordt aangemaakt",
"Include Test Labels": "Inclusief testlabels",
"Include test shipping labels in the trigger": "Inclusief test verzendlabels in de trigger"
}

View File

@@ -0,0 +1,94 @@
{
"Multi-carrier shipping platform for real-time rates, labels, and tracking": "Plataforma de envio multi-transportadora para taxas em tempo real, etiquetas e rastreamento",
"Your Shippo API token": "Seu token de API do Shippo",
"Create Order": "Criar pedido",
"Find Order": "Encontrar Pedido",
"Find Shipping Label": "Encontrar etiqueta de envio",
"Create a new order in Shippo": "Criar um novo pedido em Shippo",
"Search for an order by its ID": "Procurar uma ordem por seu ID",
"Search for a shipping label by its ID": "Pesquisar uma etiqueta de envio por seu ID",
"Order Number": "Número do pedido",
"Order Status": "Situação do pedido",
"Order Date": "Data do pedido",
"Total Price": "Preço total",
"Subtotal Price": "Preço subtotal",
"Total Tax": "Total de impostos",
"Currency": "moeda",
"Sender Name": "Nome do Remetente",
"Sender Company": "Empresa do remetente",
"Sender Street Address": "Endereço do remetente",
"Sender City": "Cidade do remetente",
"Sender State": "Estado do Remetente",
"Sender ZIP Code": "Código postal do remetente",
"Sender Country": "País do remetente",
"Sender Phone": "Telefone do remetente",
"Sender Email": "E-mail do remetente",
"Recipient Name": "Nome Destinatário",
"Recipient Company": "Empresa do Destinatário",
"Recipient Street Address": "Endereço do destinatário",
"Recipient City": "Cidade do destinatário",
"Recipient State": "Estado do Destinatário",
"Recipient ZIP Code": "Código postal do beneficiário",
"Recipient Country": "País Destinatário",
"Recipient Phone": "Telefone do destinatário",
"Recipient Email": "Destinatário Email",
"Item Title": "Título do Item",
"Item Quantity": "Quantidade do item",
"Item Total Price": "Preço Total do Item",
"Item SKU": "SKU de item",
"Item Weight": "Peso do Item",
"Item Weight Unit": "Unidade de Peso do Item",
"Total Package Weight": "Peso total do pacote",
"Package Weight Unit": "Unidade de peso do pacote",
"Shipping Cost": "Custo de envio",
"Shipping Cost Currency": "Moeda Custo de Envio",
"Shipping Method": "Forma de Envio",
"Additional Line Items": "Itens de Linha Adicionais",
"Order ID": "ID da encomenda",
"Label ID": "ID do Marcador",
"Custom reference number for the order": "Número de referência personalizado para o pedido",
"Current status of the order": "Status atual do pedido",
"When the order was placed by the buyer (mandatory) - Format: 2025-10-31T11:56:29.244Z": "Quando o pedido foi realizado pelo comprador (obrigatório) - Formato: 2025-10-31T11:56:29.244Z",
"Total price including shipping and tax": "Preço total incluindo fretes e impostos",
"Price before shipping and tax (optional)": "Preço antes do envio e imposto (opcional)",
"Total tax amount": "Valor total de impostos",
"Currency code (e.g., USD, EUR)": "Código da moeda (ex.: USD, EUR)",
"Name of the sender": "Nome do remetente",
"Company name of the sender": "Nome da empresa do remetente",
"Street address line 1": "Linha de endereço 1",
"City": "cidade",
"State/Province": "Estado/província",
"ZIP/Postal code": "CEP/Código postal",
"Two-letter country code (e.g., US)": "Código do país de duas letras (e.g., EUA)",
"Name of the recipient": "Nome do destinatário",
"Company name of the recipient": "Nome da empresa do destinatário",
"Name/description of the item (optional)": "Nome/descrição do item (opcional)",
"Total price for this line item (quantity × unit price)": "Preço total para esta linha do item (quantidade x preço unitário)",
"Stock keeping unit": "Unidade de estoque",
"Weight of a single item (e.g., \"0.5\")": "Peso de um único item (por exemplo, \"0.5\")",
"Total weight of the package for shipping (e.g., \"2.5\")": "Peso total do pacote para envio (por exemplo, \"2.5\")",
"Unit for total package weight": "Unidade para o peso total do pacote",
"Shipping cost amount (e.g., \"5.99\")": "Valor do custo de transporte (ex: \"5.99\")",
"Currency for shipping cost": "Moeda para o custo de envio",
"Shipping method name (e.g., \"USPS First Class Package\") - optional": "Nome do método de envio (ex.: \"Pacote First Class USP\") - opcional",
"Additional line items in JSON format. Example: [{\"title\": \"Product 2\", \"quantity\": 2, \"total_price\": \"20.00\"}]": "Itens de linha adicionais no formato JSON. Exemplo: [{\"title\": \"Produto 2\", \"quantidade\": 2, \"total_price\": \"20.00\"}]",
"The ID of the order to find": "O ID do pedido a ser encontrado",
"The ID of the shipping label to find": "O ID da etiqueta de envio para encontrar",
"Unknown": "Desconhecido",
"Awaiting Payment": "Aguardando Pagamento",
"Paid": "Paga",
"Refunded": "Reembolsado",
"Cancelled": "Cancelado",
"Partially Fulfilled": "Parcialmente Cumprida",
"Shipped": "Enviado",
"Pounds (lb)": "Libras (lb)",
"Ounces (oz)": "Onças (oz)",
"Kilograms (kg)": "Kilograms (kg)",
"Grams (g)": "Gramas (g)",
"New Shipping Label": "Nova etiqueta de envio",
"New Order": "Novo Pedido",
"Trigger when a new shipping label is created": "Acionar quando uma nova etiqueta de envio for criada",
"Trigger when a new order is created": "Acionar quando uma nova ordem é criada",
"Include Test Labels": "Incluir Etiquetas de Teste",
"Include test shipping labels in the trigger": "Incluir etiquetas de envio de teste no gatilho"
}

View File

@@ -0,0 +1,94 @@
{
"Multi-carrier shipping platform for real-time rates, labels, and tracking": "Multi-carrier shipping platform for real-time rates, labels, and tracking",
"Your Shippo API token": "Your Shippo API token",
"Create Order": "Create Order",
"Find Order": "Find Order",
"Find Shipping Label": "Find Shipping Label",
"Create a new order in Shippo": "Create a new order in Shippo",
"Search for an order by its ID": "Search for an order by its ID",
"Search for a shipping label by its ID": "Search for a shipping label by its ID",
"Order Number": "Order Number",
"Order Status": "Order Status",
"Order Date": "Order Date",
"Total Price": "Total Price",
"Subtotal Price": "Subtotal Price",
"Total Tax": "Total Tax",
"Currency": "Currency",
"Sender Name": "Sender Name",
"Sender Company": "Sender Company",
"Sender Street Address": "Sender Street Address",
"Sender City": "Sender City",
"Sender State": "Sender State",
"Sender ZIP Code": "Sender ZIP Code",
"Sender Country": "Sender Country",
"Sender Phone": "Sender Phone",
"Sender Email": "Sender Email",
"Recipient Name": "Recipient Name",
"Recipient Company": "Recipient Company",
"Recipient Street Address": "Recipient Street Address",
"Recipient City": "Recipient City",
"Recipient State": "Recipient State",
"Recipient ZIP Code": "Recipient ZIP Code",
"Recipient Country": "Recipient Country",
"Recipient Phone": "Recipient Phone",
"Recipient Email": "Recipient Email",
"Item Title": "Item Title",
"Item Quantity": "Item Quantity",
"Item Total Price": "Item Total Price",
"Item SKU": "Item SKU",
"Item Weight": "Item Weight",
"Item Weight Unit": "Item Weight Unit",
"Total Package Weight": "Total Package Weight",
"Package Weight Unit": "Package Weight Unit",
"Shipping Cost": "Shipping Cost",
"Shipping Cost Currency": "Shipping Cost Currency",
"Shipping Method": "Shipping Method",
"Additional Line Items": "Additional Line Items",
"Order ID": "Order ID",
"Label ID": "Label ID",
"Custom reference number for the order": "Custom reference number for the order",
"Current status of the order": "Current status of the order",
"When the order was placed by the buyer (mandatory) - Format: 2025-10-31T11:56:29.244Z": "When the order was placed by the buyer (mandatory) - Format: 2025-10-31T11:56:29.244Z",
"Total price including shipping and tax": "Total price including shipping and tax",
"Price before shipping and tax (optional)": "Price before shipping and tax (optional)",
"Total tax amount": "Total tax amount",
"Currency code (e.g., USD, EUR)": "Currency code (e.g., USD, EUR)",
"Name of the sender": "Name of the sender",
"Company name of the sender": "Company name of the sender",
"Street address line 1": "Street address line 1",
"City": "City",
"State/Province": "State/Province",
"ZIP/Postal code": "ZIP/Postal code",
"Two-letter country code (e.g., US)": "Two-letter country code (e.g., US)",
"Name of the recipient": "Name of the recipient",
"Company name of the recipient": "Company name of the recipient",
"Name/description of the item (optional)": "Name/description of the item (optional)",
"Total price for this line item (quantity × unit price)": "Total price for this line item (quantity × unit price)",
"Stock keeping unit": "Stock keeping unit",
"Weight of a single item (e.g., \"0.5\")": "Weight of a single item (e.g., \"0.5\")",
"Total weight of the package for shipping (e.g., \"2.5\")": "Total weight of the package for shipping (e.g., \"2.5\")",
"Unit for total package weight": "Unit for total package weight",
"Shipping cost amount (e.g., \"5.99\")": "Shipping cost amount (e.g., \"5.99\")",
"Currency for shipping cost": "Currency for shipping cost",
"Shipping method name (e.g., \"USPS First Class Package\") - optional": "Shipping method name (e.g., \"USPS First Class Package\") - optional",
"Additional line items in JSON format. Example: [{\"title\": \"Product 2\", \"quantity\": 2, \"total_price\": \"20.00\"}]": "Additional line items in JSON format. Example: [{\"title\": \"Product 2\", \"quantity\": 2, \"total_price\": \"20.00\"}]",
"The ID of the order to find": "The ID of the order to find",
"The ID of the shipping label to find": "The ID of the shipping label to find",
"Unknown": "Unknown",
"Awaiting Payment": "Awaiting Payment",
"Paid": "Paid",
"Refunded": "Refunded",
"Cancelled": "Cancelled",
"Partially Fulfilled": "Partially Fulfilled",
"Shipped": "Shipped",
"Pounds (lb)": "Pounds (lb)",
"Ounces (oz)": "Ounces (oz)",
"Kilograms (kg)": "Kilograms (kg)",
"Grams (g)": "Grams (g)",
"New Shipping Label": "New Shipping Label",
"New Order": "New Order",
"Trigger when a new shipping label is created": "Trigger when a new shipping label is created",
"Trigger when a new order is created": "Trigger when a new order is created",
"Include Test Labels": "Include Test Labels",
"Include test shipping labels in the trigger": "Include test shipping labels in the trigger"
}

View File

@@ -0,0 +1,94 @@
{
"Multi-carrier shipping platform for real-time rates, labels, and tracking": "Multi-carrier shipping platform for real-time rates, labels, and tracking",
"Your Shippo API token": "Your Shippo API token",
"Create Order": "Create Order",
"Find Order": "Find Order",
"Find Shipping Label": "Find Shipping Label",
"Create a new order in Shippo": "Create a new order in Shippo",
"Search for an order by its ID": "Search for an order by its ID",
"Search for a shipping label by its ID": "Search for a shipping label by its ID",
"Order Number": "Order Number",
"Order Status": "Order Status",
"Order Date": "Order Date",
"Total Price": "Total Price",
"Subtotal Price": "Subtotal Price",
"Total Tax": "Total Tax",
"Currency": "Currency",
"Sender Name": "发件人姓名",
"Sender Company": "Sender Company",
"Sender Street Address": "Sender Street Address",
"Sender City": "Sender City",
"Sender State": "Sender State",
"Sender ZIP Code": "Sender ZIP Code",
"Sender Country": "Sender Country",
"Sender Phone": "Sender Phone",
"Sender Email": "发件人电子邮件",
"Recipient Name": "Recipient Name",
"Recipient Company": "Recipient Company",
"Recipient Street Address": "Recipient Street Address",
"Recipient City": "Recipient City",
"Recipient State": "Recipient State",
"Recipient ZIP Code": "Recipient ZIP Code",
"Recipient Country": "Recipient Country",
"Recipient Phone": "Recipient Phone",
"Recipient Email": "Recipient Email",
"Item Title": "Item Title",
"Item Quantity": "Item Quantity",
"Item Total Price": "Item Total Price",
"Item SKU": "Item SKU",
"Item Weight": "Item Weight",
"Item Weight Unit": "Item Weight Unit",
"Total Package Weight": "Total Package Weight",
"Package Weight Unit": "Package Weight Unit",
"Shipping Cost": "Shipping Cost",
"Shipping Cost Currency": "Shipping Cost Currency",
"Shipping Method": "Shipping Method",
"Additional Line Items": "Additional Line Items",
"Order ID": "Order ID",
"Label ID": "Label ID",
"Custom reference number for the order": "Custom reference number for the order",
"Current status of the order": "Current status of the order",
"When the order was placed by the buyer (mandatory) - Format: 2025-10-31T11:56:29.244Z": "When the order was placed by the buyer (mandatory) - Format: 2025-10-31T11:56:29.244Z",
"Total price including shipping and tax": "Total price including shipping and tax",
"Price before shipping and tax (optional)": "Price before shipping and tax (optional)",
"Total tax amount": "Total tax amount",
"Currency code (e.g., USD, EUR)": "Currency code (e.g., USD, EUR)",
"Name of the sender": "Name of the sender",
"Company name of the sender": "Company name of the sender",
"Street address line 1": "Street address line 1",
"City": "City",
"State/Province": "State/Province",
"ZIP/Postal code": "ZIP/Postal code",
"Two-letter country code (e.g., US)": "Two-letter country code (e.g., US)",
"Name of the recipient": "Name of the recipient",
"Company name of the recipient": "Company name of the recipient",
"Name/description of the item (optional)": "Name/description of the item (optional)",
"Total price for this line item (quantity × unit price)": "Total price for this line item (quantity × unit price)",
"Stock keeping unit": "Stock keeping unit",
"Weight of a single item (e.g., \"0.5\")": "Weight of a single item (e.g., \"0.5\")",
"Total weight of the package for shipping (e.g., \"2.5\")": "Total weight of the package for shipping (e.g., \"2.5\")",
"Unit for total package weight": "Unit for total package weight",
"Shipping cost amount (e.g., \"5.99\")": "Shipping cost amount (e.g., \"5.99\")",
"Currency for shipping cost": "Currency for shipping cost",
"Shipping method name (e.g., \"USPS First Class Package\") - optional": "Shipping method name (e.g., \"USPS First Class Package\") - optional",
"Additional line items in JSON format. Example: [{\"title\": \"Product 2\", \"quantity\": 2, \"total_price\": \"20.00\"}]": "Additional line items in JSON format. Example: [{\"title\": \"Product 2\", \"quantity\": 2, \"total_price\": \"20.00\"}]",
"The ID of the order to find": "The ID of the order to find",
"The ID of the shipping label to find": "The ID of the shipping label to find",
"Unknown": "未知的",
"Awaiting Payment": "Awaiting Payment",
"Paid": "Paid",
"Refunded": "Refunded",
"Cancelled": "Cancelled",
"Partially Fulfilled": "Partially Fulfilled",
"Shipped": "Shipped",
"Pounds (lb)": "Pounds (lb)",
"Ounces (oz)": "Ounces (oz)",
"Kilograms (kg)": "Kilograms (kg)",
"Grams (g)": "Grams (g)",
"New Shipping Label": "New Shipping Label",
"New Order": "New Order",
"Trigger when a new shipping label is created": "Trigger when a new shipping label is created",
"Trigger when a new order is created": "Trigger when a new order is created",
"Include Test Labels": "Include Test Labels",
"Include test shipping labels in the trigger": "Include test shipping labels in the trigger"
}

View File

@@ -0,0 +1,20 @@
import { createPiece } from '@activepieces/pieces-framework';
import { shippoAuth } from './lib/auth';
import { createOrder } from './lib/actions/create-order';
import { findOrder } from './lib/actions/find-order';
import { findShippingLabel } from './lib/actions/find-shipping-label';
import { newShippingLabel } from './lib/triggers/new-shipping-label';
import { newOrder } from './lib/triggers/new-order';
export const shippo = createPiece({
displayName: 'Shippo',
description:
'Multi-carrier shipping platform for real-time rates, labels, and tracking',
auth: shippoAuth,
minimumSupportedRelease: '0.36.1',
logoUrl: 'https://cdn.activepieces.com/pieces/shippo.png',
authors: ['SinghaAnirban005', 'sanket-a11y'],
actions: [createOrder, findOrder, findShippingLabel],
triggers: [newShippingLabel, newOrder],
});

View File

@@ -0,0 +1,379 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { shippoAuth } from '../../lib/auth';
import { ShippoClient } from '../../lib/client';
export const createOrder = createAction({
name: 'create_order',
displayName: 'Create Order',
description: 'Create a new order in Shippo',
auth: shippoAuth,
props: {
order_number: Property.ShortText({
displayName: 'Order Number',
description: 'Custom reference number for the order',
required: true,
}),
order_status: Property.StaticDropdown({
displayName: 'Order Status',
description: 'Current status of the order',
required: true,
options: {
options: [
{ label: 'Unknown', value: 'UNKNOWN' },
{ label: 'Awaiting Payment', value: 'AWAITPAY' },
{ label: 'Paid', value: 'PAID' },
{ label: 'Refunded', value: 'REFUNDED' },
{ label: 'Cancelled', value: 'CANCELLED' },
{ label: 'Partially Fulfilled', value: 'PARTIALLY_FULFILLED' },
{ label: 'Shipped', value: 'SHIPPED' },
],
},
defaultValue: 'AWAITPAY',
}),
placed_at: Property.DateTime({
displayName: 'Order Date',
description: 'When the order was placed by the buyer (mandatory) - Format: 2025-10-31T11:56:29.244Z',
required: true,
}),
total_price: Property.ShortText({
displayName: 'Total Price',
description: 'Total price including shipping and tax',
required: true,
}),
subtotal_price: Property.ShortText({
displayName: 'Subtotal Price',
description: 'Price before shipping and tax (optional)',
required: false,
}),
total_tax: Property.ShortText({
displayName: 'Total Tax',
description: 'Total tax amount',
required: false,
}),
currency: Property.ShortText({
displayName: 'Currency',
description: 'Currency code (e.g., USD, EUR)',
required: true,
defaultValue: 'USD',
}),
// Sender Address (From Address)
from_name: Property.ShortText({
displayName: 'Sender Name',
description: 'Name of the sender',
required: false,
}),
from_company: Property.ShortText({
displayName: 'Sender Company',
description: 'Company name of the sender',
required: false,
}),
from_street1: Property.ShortText({
displayName: 'Sender Street Address',
description: 'Street address line 1',
required: false,
}),
from_city: Property.ShortText({
displayName: 'Sender City',
description: 'City',
required: false,
}),
from_state: Property.ShortText({
displayName: 'Sender State',
description: 'State/Province',
required: false,
}),
from_zip: Property.ShortText({
displayName: 'Sender ZIP Code',
description: 'ZIP/Postal code',
required: false,
}),
from_country: Property.ShortText({
displayName: 'Sender Country',
description: 'Two-letter country code (e.g., US)',
required: false,
defaultValue: 'US',
}),
from_phone: Property.ShortText({
displayName: 'Sender Phone',
required: false,
}),
from_email: Property.ShortText({
displayName: 'Sender Email',
required: false,
}),
// Recipient Address (To Address)
to_name: Property.ShortText({
displayName: 'Recipient Name',
description: 'Name of the recipient',
required: true,
}),
to_company: Property.ShortText({
displayName: 'Recipient Company',
description: 'Company name of the recipient',
required: false,
}),
to_street1: Property.ShortText({
displayName: 'Recipient Street Address',
description: 'Street address line 1',
required: true,
}),
to_city: Property.ShortText({
displayName: 'Recipient City',
description: 'City',
required: true,
}),
to_state: Property.ShortText({
displayName: 'Recipient State',
description: 'State/Province',
required: true,
}),
to_zip: Property.ShortText({
displayName: 'Recipient ZIP Code',
description: 'ZIP/Postal code',
required: true,
}),
to_country: Property.ShortText({
displayName: 'Recipient Country',
description: 'Two-letter country code (e.g., US)',
required: true,
defaultValue: 'US',
}),
to_phone: Property.ShortText({
displayName: 'Recipient Phone',
required: false,
}),
to_email: Property.ShortText({
displayName: 'Recipient Email',
required: false,
}),
// Line Items - Single Item (Simple approach)
line_item_title: Property.ShortText({
displayName: 'Item Title',
description: 'Name/description of the item (optional)',
required: false,
}),
line_item_quantity: Property.Number({
displayName: 'Item Quantity',
required: false,
defaultValue: 1,
}),
line_item_total_price: Property.ShortText({
displayName: 'Item Total Price',
description: 'Total price for this line item (quantity × unit price)',
required: false,
}),
line_item_sku: Property.ShortText({
displayName: 'Item SKU',
description: 'Stock keeping unit',
required: false,
}),
line_item_weight: Property.ShortText({
displayName: 'Item Weight',
description: 'Weight of a single item (e.g., "0.5")',
required: false,
}),
line_item_weight_unit: Property.StaticDropdown({
displayName: 'Item Weight Unit',
required: false,
defaultValue: 'lb',
options: {
options: [
{ label: 'Pounds (lb)', value: 'lb' },
{ label: 'Ounces (oz)', value: 'oz' },
{ label: 'Kilograms (kg)', value: 'kg' },
{ label: 'Grams (g)', value: 'g' },
],
},
}),
// Shipping Information
weight: Property.ShortText({
displayName: 'Total Package Weight',
description: 'Total weight of the package for shipping (e.g., "2.5")',
required: true,
}),
weight_unit: Property.StaticDropdown({
displayName: 'Package Weight Unit',
description: 'Unit for total package weight',
required: false,
defaultValue: 'lb',
options: {
options: [
{ label: 'Pounds (lb)', value: 'lb' },
{ label: 'Ounces (oz)', value: 'oz' },
{ label: 'Kilograms (kg)', value: 'kg' },
{ label: 'Grams (g)', value: 'g' },
],
},
}),
shipping_cost: Property.ShortText({
displayName: 'Shipping Cost',
description: 'Shipping cost amount (e.g., "5.99")',
required: false,
}),
shipping_cost_currency: Property.ShortText({
displayName: 'Shipping Cost Currency',
description: 'Currency for shipping cost',
required: false,
defaultValue: 'USD',
}),
shipping_method: Property.ShortText({
displayName: 'Shipping Method',
description: 'Shipping method name (e.g., "USPS First Class Package") - optional',
required: false,
}),
// Multiple Line Items
additional_line_items: Property.Json({
displayName: 'Additional Line Items',
description: 'Additional line items in JSON format. Example: [{"title": "Product 2", "quantity": 2, "total_price": "20.00"}]',
required: false,
defaultValue: [],
}),
},
async run(context) {
const {
order_number,
order_status,
placed_at,
total_price,
subtotal_price,
total_tax,
currency,
from_name,
from_company,
from_street1,
from_city,
from_state,
from_zip,
from_country,
from_phone,
from_email,
to_name,
to_company,
to_street1,
to_city,
to_state,
to_zip,
to_country,
to_phone,
to_email,
line_item_title,
line_item_quantity,
line_item_total_price,
line_item_sku,
line_item_weight,
line_item_weight_unit,
weight,
weight_unit,
shipping_cost,
shipping_cost_currency,
shipping_method,
additional_line_items,
} = context.propsValue;
const client = new ShippoClient({
apiToken: context.auth.secret_text,
});
// Build to address
const to_address: any = {
name: to_name,
street1: to_street1,
city: to_city,
state: to_state,
zip: to_zip,
country: to_country,
};
if (to_company) to_address.company = to_company;
if (to_phone) to_address.phone = to_phone;
if (to_email) to_address.email = to_email;
// Build order data with mandatory fields
const orderData: any = {
order_number,
order_status: order_status as
| 'UNKNOWN'
| 'AWAITPAY'
| 'PAID'
| 'REFUNDED'
| 'CANCELLED'
| 'PARTIALLY_FULFILLED'
| 'SHIPPED',
placed_at,
total_price,
currency,
to_address,
};
// Build from address (optional)
if (from_name && from_street1 && from_city && from_state && from_zip && from_country) {
const from_address: any = {
name: from_name,
street1: from_street1,
city: from_city,
state: from_state,
zip: from_zip,
country: from_country,
};
if (from_company) from_address.company = from_company;
if (from_phone) from_address.phone = from_phone;
if (from_email) from_address.email = from_email;
orderData.from_address = from_address;
}
// Build line items (optional)
const line_items = [];
// Add primary line item if provided
if (line_item_title && line_item_total_price) {
const primary_item: any = {
title: line_item_title,
quantity: line_item_quantity || 1,
total_price: line_item_total_price,
currency: currency,
};
if (line_item_sku) primary_item.sku = line_item_sku;
if (line_item_weight) primary_item.weight = line_item_weight;
if (line_item_weight_unit) primary_item.weight_unit = line_item_weight_unit;
line_items.push(primary_item);
}
// Add additional line items if provided
if (additional_line_items && Array.isArray(additional_line_items)) {
additional_line_items.forEach((item: any) => {
const additional_item: any = {
title: item.title || '',
quantity: Number(item.quantity) || 1,
total_price: item.total_price || '0.00',
currency: item.currency || currency,
};
if (item.sku) additional_item.sku = item.sku;
if (item.weight) additional_item.weight = item.weight;
if (item.weight_unit) additional_item.weight_unit = item.weight_unit;
line_items.push(additional_item);
});
}
// Add line items to order if any exist
if (line_items.length > 0) {
orderData.line_items = line_items;
}
// Optional fields
if (subtotal_price) orderData.subtotal_price = subtotal_price;
if (total_tax) orderData.total_tax = total_tax;
if (weight) orderData.weight = weight;
if (weight_unit) orderData.weight_unit = weight_unit;
if (shipping_cost) orderData.shipping_cost = shipping_cost;
if (shipping_cost_currency) orderData.shipping_cost_currency = shipping_cost_currency;
if (shipping_method) orderData.shipping_method = shipping_method;
return await client.createOrder(orderData);
},
});

View File

@@ -0,0 +1,26 @@
import { createAction, Property } from "@activepieces/pieces-framework";
import { shippoAuth } from "../../lib/auth";
import { ShippoClient } from "../../lib/client";
export const findOrder = createAction({
name: 'find_order',
displayName: 'Find Order',
description: 'Search for an order by its ID',
auth: shippoAuth,
props: {
order_id: Property.ShortText({
displayName: 'Order ID',
description: 'The ID of the order to find',
required: true,
}),
},
async run(context) {
const { order_id } = context.propsValue;
const client = new ShippoClient({
apiToken: context.auth.secret_text,
});
return await client.getOrder(order_id);
},
});

View File

@@ -0,0 +1,26 @@
import { createAction, Property } from "@activepieces/pieces-framework";
import { shippoAuth } from "../../lib/auth";
import { ShippoClient } from "../../lib/client";
export const findShippingLabel = createAction({
name: 'find_shipping_label',
displayName: 'Find Shipping Label',
description: 'Search for a shipping label by its ID',
auth: shippoAuth,
props: {
label_id: Property.ShortText({
displayName: 'Label ID',
description: 'The ID of the shipping label to find',
required: true,
}),
},
async run(context) {
const { label_id } = context.propsValue;
const client = new ShippoClient({
apiToken: context.auth.secret_text,
});
return await client.getShippingLabel(label_id);
},
});

View File

@@ -0,0 +1,33 @@
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
import { PieceAuth } from '@activepieces/pieces-framework';
export const shippoAuth = PieceAuth.SecretText({
displayName: 'API Token',
description: 'Your Shippo API token',
required: true,
validate: async ({ auth }) => {
if (auth) {
try {
await httpClient.sendRequest({
method: HttpMethod.GET,
url: 'https://api.goshippo.com/orders/',
headers: {
Authorization: `ShippoToken ${auth}`,
},
});
return {
valid: true,
};
} catch (error) {
return {
valid: false,
error: 'Invalid Api Key',
};
}
}
return {
valid: false,
error: 'Invalid Api Key',
};
},
});

View File

@@ -0,0 +1,99 @@
import { HttpMethod, httpClient } from '@activepieces/pieces-common';
import { ShippoConfig, Order, ShippingLabel, ApiListResponse, CreateOrderRequest } from './common';
export class ShippoClient {
private baseUrl = 'https://api.goshippo.com';
constructor(private config: ShippoConfig) {}
private async makeRequest<T>(method: HttpMethod, endpoint: string, body?: any): Promise<T> {
const response = await httpClient.sendRequest({
method,
url: `${this.baseUrl}${endpoint}`,
headers: {
Authorization: `ShippoToken ${this.config.apiToken}`,
'Content-Type': 'application/json',
},
body,
});
return response.body;
}
async createOrder(orderData: CreateOrderRequest): Promise<Order> {
return this.makeRequest<Order>(HttpMethod.POST, '/orders', orderData);
}
async getOrder(orderId: string, fields?: string[]): Promise<Order> {
const queryParams = fields ? `?fields=${fields.join(',')}` : '';
return this.makeRequest<Order>(HttpMethod.GET, `/orders/${orderId}${queryParams}`);
}
async listOrders(params?: {
page?: number;
results_per_page?: number;
order_status?: string;
placed_at_gt?: string;
}): Promise<ApiListResponse<Order>> {
const queryParams = new URLSearchParams();
if (params?.page) queryParams.append('page', params.page.toString());
if (params?.results_per_page) queryParams.append('results_per_page', params.results_per_page.toString());
if (params?.order_status) queryParams.append('order_status', params.order_status);
if (params?.placed_at_gt) queryParams.append('placed_at_gt', params.placed_at_gt);
const queryString = queryParams.toString();
const endpoint = `/orders${queryString ? `?${queryString}` : ''}`;
return this.makeRequest<ApiListResponse<Order>>(HttpMethod.GET, endpoint);
}
async updateOrder(orderId: string, orderData: Partial<Order>): Promise<Order> {
return this.makeRequest<Order>(HttpMethod.PATCH, `/orders/${orderId}`, orderData);
}
async deleteOrder(orderId: string): Promise<void> {
await this.makeRequest(HttpMethod.DELETE, `/orders/${orderId}`);
}
async getShippingLabel(labelId: string): Promise<ShippingLabel> {
return this.makeRequest<ShippingLabel>(HttpMethod.GET, `/transactions/${labelId}`);
}
async listShippingLabels(params?: {
page?: number;
results_per_page?: number;
}): Promise<ApiListResponse<ShippingLabel>> {
const queryParams = new URLSearchParams();
if (params?.page) queryParams.append('page', params.page.toString());
if (params?.results_per_page) queryParams.append('results_per_page', params.results_per_page.toString());
const queryString = queryParams.toString();
const endpoint = `/transactions${queryString ? `?${queryString}` : ''}`;
return this.makeRequest<ApiListResponse<ShippingLabel>>(HttpMethod.GET, endpoint);
}
async createShippingLabel(transactionData: {
carrier_account: string;
servicelevel_token: string;
shipment: string;
metadata?: string;
label_file_type?: 'PDF' | 'PNG' | 'ZPL';
async?: boolean;
}): Promise<ShippingLabel> {
return this.makeRequest<ShippingLabel>(HttpMethod.POST, '/transactions', transactionData);
}
// Additional useful methods
async createShipment(shipmentData: any): Promise<any> {
return this.makeRequest(HttpMethod.POST, '/shipments', shipmentData);
}
async getRates(shipmentId: string): Promise<any> {
return this.makeRequest(HttpMethod.GET, `/shipments/${shipmentId}/rates`);
}
async trackShippingLabel(trackingNumber: string, carrier: string): Promise<any> {
return this.makeRequest(HttpMethod.GET, `/tracks/${carrier}/${trackingNumber}`);
}
}

View File

@@ -0,0 +1,96 @@
export interface ShippoConfig {
apiToken: string;
}
export interface Address {
name: string;
company?: string;
street1: string;
street2?: string;
city: string;
state: string;
zip: string;
country: string;
phone?: string;
email?: string;
}
export interface Parcel {
length: number;
width: number;
height: number;
distance_unit: 'in' | 'cm';
weight: number;
mass_unit: 'lb' | 'kg';
}
export interface Order {
object_id?: string;
order_number: string;
order_status: 'PAID' | 'UNPAID' | 'CANCELLED' | 'REFUNDED' | 'ONHOLD';
placed_at: string;
from_address: Address;
to_address: Address;
line_items: LineItem[];
total_price: string;
total_tax?: string;
currency: string;
weight?: string;
weight_unit?: string;
shipping_cost?: string;
shipping_cost_currency?: string;
object_created?: string;
object_updated?: string;
}
export interface LineItem {
title: string;
sku?: string;
quantity: number;
total_price: string;
currency: string;
weight?: string;
weight_unit?: string;
}
export interface CreateOrderRequest {
order_number: string;
order_status: 'PAID' | 'UNPAID' | 'CANCELLED' | 'REFUNDED' | 'ONHOLD';
placed_at: string;
total_price: string;
currency: string;
from_address: Address;
to_address: Address;
line_items: LineItem[];
total_tax?: string;
weight?: string;
weight_unit?: string;
shipping_cost?: string;
shipping_cost_currency?: string;
}
export interface ShippingLabel {
object_id: string;
object_owner: string;
carrier_account: string;
servicelevel_token: string;
tracking_number: string;
tracking_status: string;
tracking_url_provider: string;
label_url: string;
rate: string;
parcel: string;
address_from: Address;
address_to: Address;
metadata?: string;
test: boolean;
created_at: string;
object_created: string;
}
export interface ApiListResponse<T> {
count: number;
next: string | null;
previous: string | null;
results: T[];
}

View File

@@ -0,0 +1,135 @@
import {
createTrigger,
TriggerStrategy,
StaticPropsValue,
AppConnectionValueForAuthProperty,
} from '@activepieces/pieces-framework';
import {
DedupeStrategy,
Polling,
pollingHelper,
} from '@activepieces/pieces-common';
import dayjs from 'dayjs';
import { ShippoClient } from '../client';
import { shippoAuth } from '../auth';
const props = {};
const polling: Polling<AppConnectionValueForAuthProperty<typeof shippoAuth>, StaticPropsValue<typeof props>> = {
strategy: DedupeStrategy.TIMEBASED,
items: async ({ auth, lastFetchEpochMS }) => {
const client = new ShippoClient({
apiToken: auth.secret_text,
});
const result = await client.listOrders({
results_per_page: 100,
});
console.log('Fetched orders:', JSON.stringify(result));
const filteredOrders = result.results.filter((order) => {
const orderTime = dayjs(order.placed_at).valueOf();
return orderTime > lastFetchEpochMS;
});
return filteredOrders.map((order: any) => ({
epochMilliSeconds: dayjs(order.placed_at).valueOf(),
data: order,
}));
},
};
export const newOrder = createTrigger({
name: 'new_order',
displayName: 'New Order',
description: 'Trigger when a new order is created',
type: TriggerStrategy.POLLING,
auth: shippoAuth,
props,
sampleData: {
object_id: '4f2bc588e4e5446cb3f9fdb7cd5e190b',
object_owner: 'shippotle@shippo.com',
order_number: '#1068',
order_status: 'PAID',
placed_at: '2016-09-23T01:28:12Z',
to_address: {
object_created: '2016-09-23T01:38:56Z',
object_updated: '2016-09-23T01:38:56Z',
object_id: 'd799c2679e644279b59fe661ac8fa488',
object_owner: 'shippotle@shippo.com',
is_complete: true,
validation_results: {},
name: 'Mr Hippo',
company: 'Shippo',
street1: '215 Clayton St.',
street2: '',
city: 'San Francisco',
state: 'CA',
zip: '94117',
country: 'US',
phone: '15553419393',
email: 'shippotle@shippo.com',
is_residential: null,
metadata: '',
},
from_address: null,
line_items: [
{
object_id: 'abf7d5675d744b6ea9fdb6f796b28f28',
title: 'Hippo Magazines',
variant_title: '',
sku: 'HM-123',
quantity: 1,
total_price: '12.10',
currency: 'USD',
weight: '0.40',
weight_unit: 'lb',
manufacture_country: null,
max_ship_time: null,
max_delivery_time: null,
description: null,
},
],
shipping_cost: '12.83',
shipping_cost_currency: 'USD',
shipping_method: 'USPS First Class Package',
shop_app: 'Shippo',
subtotal_price: '12.10',
total_price: '24.93',
total_tax: '0.00',
currency: 'USD',
transactions: [],
weight: '0.40',
weight_unit: 'lb',
notes: null,
},
async test(context) {
return await pollingHelper.test(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
files: context.files,
});
},
async onEnable(context) {
await pollingHelper.onEnable(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
});
},
async onDisable(context) {
await pollingHelper.onDisable(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
});
},
async run(context) {
return await pollingHelper.poll(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
files: context.files,
});
},
});

View File

@@ -0,0 +1,122 @@
import {
createTrigger,
TriggerStrategy,
PiecePropValueSchema,
Property,
AppConnectionValueForAuthProperty,
} from '@activepieces/pieces-framework';
import {
DedupeStrategy,
Polling,
pollingHelper,
} from '@activepieces/pieces-common';
import dayjs from 'dayjs';
import { shippoAuth } from '../auth';
import { ShippoClient } from '../client';
const polling: Polling<
AppConnectionValueForAuthProperty<typeof shippoAuth>,
{ test_mode?: boolean }
> = {
strategy: DedupeStrategy.TIMEBASED,
items: async ({ auth, propsValue, lastFetchEpochMS }) => {
const client = new ShippoClient({
apiToken: auth.secret_text,
});
const result = await client.listShippingLabels({
results_per_page: 100,
});
let filteredLabels = result.results.filter((label) => {
const labelTime = dayjs(label.object_created).valueOf();
return labelTime > lastFetchEpochMS;
});
if (!propsValue.test_mode) {
filteredLabels = filteredLabels.filter(
(label) => !label.test
);
}
return filteredLabels.map((label: any) => ({
epochMilliSeconds: dayjs(label.object_created).valueOf(),
data: label,
}));
},
};
export const newShippingLabel = createTrigger({
name: 'new_shipping_label',
displayName: 'New Shipping Label',
description: 'Trigger when a new shipping label is created',
type: TriggerStrategy.POLLING,
auth: shippoAuth,
props: {
test_mode: Property.Checkbox({
displayName: 'Include Test Labels',
description: 'Include test shipping labels in the trigger',
required: false,
defaultValue: false,
}),
},
sampleData: {
commercial_invoice_url: 'string',
created_by: {
first_name: 'Shwan',
last_name: 'Ippotle',
username: 'shippotle@shippo.com',
},
eta: 'string',
label_file_type: 'PDF_4x6',
label_url:
'https://shippo-delivery.s3.amazonaws.com/70ae8117ee1749e393f249d5b77c45e0.pdf?Signature=vDw1ltcyGveVR1OQoUDdzC43BY8%3D&Expires=1437093830&AWSAccessKeyId=AKIAJTHP3LLFMYAWALIA',
messages: [],
metadata: 'string',
object_created: '2019-08-24T14:15:22Z',
object_id: '915d94940ea54c3a80cbfa328722f5a1',
object_owner: 'shippotle@shippo.com',
object_state: 'VALID',
object_updated: '2019-08-24T14:15:22Z',
parcel: 'e94c7fdfdc7b495dbb390a28d929d90a',
qr_code_url:
'https://shippo-delivery.s3.amazonaws.com/96_qr_code.pdf?Signature=PEdWrp0mFWAGwJp7FW3b%2FeA2eyY%3D&Expires=1385930652&AWSAccessKeyId=AKIAJTHP3LLFMYAWALIA',
rate: {},
status: 'SUCCESS',
test: true,
tracking_number: '9499907123456123456781',
tracking_status: 'DELIVERED',
tracking_url_provider:
'https://tools.usps.com/go/TrackConfirmAction_input?origTrackNum=9499907123456123456781',
},
async test(context) {
return await pollingHelper.test(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
files: context.files,
});
},
async onEnable(context) {
await pollingHelper.onEnable(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
});
},
async onDisable(context) {
await pollingHelper.onDisable(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
});
},
async run(context) {
return await pollingHelper.poll(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
files: context.files,
});
},
});

View File

@@ -0,0 +1,20 @@
{
"extends": "../../../../tsconfig.base.json",
"compilerOptions": {
"module": "commonjs",
"forceConsistentCasingInFileNames": true,
"strict": true,
"importHelpers": true,
"noImplicitOverride": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"noPropertyAccessFromIndexSignature": true
},
"files": [],
"include": [],
"references": [
{
"path": "./tsconfig.lib.json"
}
]
}

View File

@@ -0,0 +1,9 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "../../../../dist/out-tsc",
"declaration": true,
"types": ["node"]
},
"include": ["src/**/*.ts"]
}