diff --git a/markdoc.config.mjs b/markdoc.config.mjs index d8fe70c10..05e326a07 100644 --- a/markdoc.config.mjs +++ b/markdoc.config.mjs @@ -1,6 +1,14 @@ import { defineMarkdocConfig, component } from '@astrojs/markdoc/config'; +import shiki from '@astrojs/markdoc/shiki'; export default defineMarkdocConfig({ + extends: [ + shiki({ + theme: 'github-light', + wrap: true, + langs: [], + }), + ], tags: { properties: { render: component('./src/components/Properties.astro'), @@ -11,6 +19,25 @@ export default defineMarkdocConfig({ name: { type: String, required: true }, type: { type: String, required: true }, }, - } + }, + endpoint: { + render: component('./src/components/Endpoint.astro'), + attributes: { + method: { type: String, required: true }, + path: { type: String, required: true }, + }, + }, + row: { + render: component('./src/components/Row.astro'), + }, + column: { + render: component('./src/components/Column.astro'), + attributes: { + sticky: { type: Boolean }, + }, + }, + code: { + render: component('./src/components/Code.astro'), + }, } }); diff --git a/package.json b/package.json index 29dcd9441..b1ed1e0fc 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "flexsearch": "^0.7.31", "glob": "^8.1.0", "gray-matter": "^4.0.3", + "jsdom": "^22.1.0", "linkinator": "^5.0.2", "mdast-util-to-string": "^3.1.1", "mermaid": "^9.3.0", @@ -43,7 +44,6 @@ "unist-util-find-after": "^4.0.1", "unist-util-visit": "^4.1.2", "vitest": "^0.28.3", - "vue": "^3.2.47", - "jsdom": "^22.1.0" + "vue": "^3.2.47" } } diff --git a/src/__tests__/__snapshots__/links.integration.test.js.snap b/src/__tests__/__snapshots__/links.integration.test.js.snap index ed1d51a25..5040d8d49 100644 --- a/src/__tests__/__snapshots__/links.integration.test.js.snap +++ b/src/__tests__/__snapshots__/links.integration.test.js.snap @@ -302,6 +302,7 @@ exports[`the build should not break any links 1`] = ` "/api/managed-integrations#paypal-referral", "/api/managed-integrations#top", "/api/media-uploads", + "/api/media-uploads#attributes", "/api/media-uploads#contents", "/api/media-uploads#create-a-presigned-url-for-media-upload-experimental", "/api/media-uploads#get-media-upload-location-experimental", diff --git a/src/components/Code.astro b/src/components/Code.astro new file mode 100644 index 000000000..9b3a660fb --- /dev/null +++ b/src/components/Code.astro @@ -0,0 +1,7 @@ +--- +import ProseCode from "./ProseCode.vue"; +--- + + + + diff --git a/src/components/Column.astro b/src/components/Column.astro new file mode 100644 index 000000000..7eb86336b --- /dev/null +++ b/src/components/Column.astro @@ -0,0 +1,8 @@ + +--- +const { sticky = false } = Astro.props; +--- + +
:first-child]:mt-0 [&>:last-child]:mb-0 xl:sticky xl:top-24' : '[&>:first-child]:mt-0 [&>:last-child]:mb-0'}`> + +
diff --git a/src/components/Endpoint.astro b/src/components/Endpoint.astro new file mode 100644 index 000000000..7945e2166 --- /dev/null +++ b/src/components/Endpoint.astro @@ -0,0 +1,28 @@ + +--- +const { method, path } = Astro.props; +const valueColorMap = { + GET: 'emerald', + POST: 'sky', + PUT: 'amber', + DELETE: 'rose', +}; +const color = valueColorMap[method] || 'emerald'; +const colorStyles = { + emerald: 'ring-emerald-300 dark:ring-emerald-400/30 bg-emerald-400/10 text-emerald-500 dark:text-emerald-400', + sky: 'ring-sky-300 bg-sky-400/10 text-sky-500 dark:ring-sky-400/30 dark:bg-sky-400/10 dark:text-sky-400', + amber: 'ring-amber-300 bg-amber-400/10 text-amber-500 dark:ring-amber-400/30 dark:bg-amber-400/10 dark:text-amber-400', + rose: 'ring-rose-200 bg-rose-50 text-red-500 dark:ring-rose-500/20 dark:bg-rose-400/10 dark:text-rose-400', +} +--- + +
+
+ { method } + + { path } +
+ + + +
diff --git a/src/components/Row.astro b/src/components/Row.astro new file mode 100644 index 000000000..46978294c --- /dev/null +++ b/src/components/Row.astro @@ -0,0 +1,3 @@ +
+ +
diff --git a/src/content/api/media-uploads.mdoc b/src/content/api/media-uploads.mdoc index ec7ada107..ba8e0c33c 100644 --- a/src/content/api/media-uploads.mdoc +++ b/src/content/api/media-uploads.mdoc @@ -44,3 +44,77 @@ When the Media Upload was updated. The User or API Key that updated the Media Upload. {% /property %} {% /properties %} + +{% endpoint method="POST" path="/api/media-uploads" %} +## Create a presigned URL for Media Upload EXPERIMENTAL +{% row %} +{% column %} +### Attributes +{% properties %} +{% property name="accountId" type="string" %} +The Media Upload's owning Centrapay Account id. +{% /property %} + +{% property name="mimeType" type="string" %} +The media (MIME) type of the upload. +{% /property %} + +{% property name="fileName" type="string" %} +The file name of the upload. +{% /property %} +{% /properties %} +{% /column %} + +{% column sticky=true %} + +{% code %} +```bash +curl -X POST https://service.centrapay.com/api/media-uploads \ + -H "X-Api-Key: $api_key" \ + -H "Content-Type: application/json" \ + -d '{ + "accountId": "Jaim1Cu1Q55uooxSens6yk", + "mimeType": "image/png", + "fileName": "image.png" + }' +``` +{% /code %} + +{% code %} +```json +{ + "id": "DKTs3U38hdhfEqwF1JKoT2", + "uploadUrl": "https://media-upload.centrapay.com/image.png?jhbdsfau67ewejshb=487hsdjhbdgs743" +} +``` +{% /code %} + +{% /column %} +{% /row %} +{% /endpoint %} + + +{% endpoint method="GET" path="/api/media-uploads/{mediaUploadId}/location" %} +## Get Media Upload Location EXPERIMENTAL +{% row %} +{% column/ %} +{% column sticky=true %} + +{% code %} +```bash +curl https://service.centrapay.com/api/media-uploads/DKTs3U38hdhfEqwF1JKoT2/location \ + -H "X-Api-Key: $api_key" +``` +{% /code %} + +{% code %} +```json +{ + "url": "https://media-upload.centrapay.com/image.png?jhbdsfau67ewejshb=487hsdjhbdgs743" +} +``` +{% /code %} + +{% /column %} +{% /row %} +{% /endpoint %}