mirror of
https://github.com/urbit/shrub.git
synced 2025-01-05 11:09:30 +03:00
gh looks pretty good
This commit is contained in:
parent
725273d48c
commit
e5d5d2fb82
117
ape/gh.hoon
117
ape/gh.hoon
@ -11,8 +11,13 @@
|
|||||||
::
|
::
|
||||||
:: See the %github app for example usage.
|
:: See the %github app for example usage.
|
||||||
::
|
::
|
||||||
/? 314
|
/? 314
|
||||||
/- gh
|
/- gh
|
||||||
|
:: /ape/gh/split.hoon defines ++split, which splits a request
|
||||||
|
:: at the end of the longest possible endpoint.
|
||||||
|
::
|
||||||
|
// /%/split
|
||||||
|
::
|
||||||
=> |%
|
=> |%
|
||||||
++ move (pair bone card)
|
++ move (pair bone card)
|
||||||
++ sub-result
|
++ sub-result
|
||||||
@ -32,6 +37,7 @@
|
|||||||
[%gh-issue-comment issue-comment:gh]
|
[%gh-issue-comment issue-comment:gh]
|
||||||
==
|
==
|
||||||
--
|
--
|
||||||
|
::
|
||||||
|_ [hid=bowl cnt=@ hook=(map ,@t ,[id=@t listeners=(set bone)])]
|
|_ [hid=bowl cnt=@ hook=(map ,@t ,[id=@t listeners=(set bone)])]
|
||||||
::++ prep ,_`.
|
::++ prep ,_`.
|
||||||
::
|
::
|
||||||
@ -42,7 +48,8 @@
|
|||||||
:: of requests.
|
:: of requests.
|
||||||
::
|
::
|
||||||
++ help
|
++ help
|
||||||
|= [ren=care style=@tas pax=path arg=path]
|
|= [ren=care style=@tas pax=path]
|
||||||
|
=^ arg pax [+ -]:(split pax)
|
||||||
=| mow=(list move)
|
=| mow=(list move)
|
||||||
|%
|
|%
|
||||||
:: Resolve core.
|
:: Resolve core.
|
||||||
@ -53,7 +60,9 @@
|
|||||||
::
|
::
|
||||||
:: Append path to api.github.com and parse to a purl.
|
:: Append path to api.github.com and parse to a purl.
|
||||||
::
|
::
|
||||||
++ real-pax (scan "https://api.github.com{<`path`pax>}" auri:epur)
|
++ endpoint-to-purl
|
||||||
|
|= endpoint=path
|
||||||
|
(scan "https://api.github.com{<`path`endpoint>}" auri:epur)
|
||||||
::
|
::
|
||||||
:: Send a hiss
|
:: Send a hiss
|
||||||
::
|
::
|
||||||
@ -62,6 +71,7 @@
|
|||||||
^+ +>
|
^+ +>
|
||||||
=+ wir=`wire`[ren (scot %ud cnt) (scot %uv (jam arg)) style pax]
|
=+ wir=`wire`[ren (scot %ud cnt) (scot %uv (jam arg)) style pax]
|
||||||
=+ new-move=[ost.hid %hiss wir `~ %httr [%hiss hiz]]
|
=+ new-move=[ost.hid %hiss wir `~ %httr [%hiss hiz]]
|
||||||
|
:: ~& [%sending-hiss new-move]
|
||||||
+>.$(mow [new-move mow])
|
+>.$(mow [new-move mow])
|
||||||
::
|
::
|
||||||
:: Decide how to handle a request based on its style.
|
:: Decide how to handle a request based on its style.
|
||||||
@ -73,7 +83,7 @@
|
|||||||
%listen listen
|
%listen listen
|
||||||
==
|
==
|
||||||
::
|
::
|
||||||
++ read (send-hiss real-pax %get ~ ~)
|
++ read (send-hiss (endpoint-to-purl pax) %get ~ ~)
|
||||||
::
|
::
|
||||||
:: Create or update a webhook to listen for a set of events.
|
:: Create or update a webhook to listen for a set of events.
|
||||||
::
|
::
|
||||||
@ -137,11 +147,11 @@
|
|||||||
==
|
==
|
||||||
--
|
--
|
||||||
::
|
::
|
||||||
:: Pokes that haven't already been caught are handled here.
|
:: Pokes that aren't caught in more specific arms are handled
|
||||||
:: These should be only from webhooks firing, so if we get any
|
:: here. These should be only from webhooks firing, so if we
|
||||||
:: mark that we shouldn't get from a webhook, we reject it.
|
:: get any mark that we shouldn't get from a webhook, we reject
|
||||||
:: Otherwise, we spam out the event to everyone who's listening
|
:: it. Otherwise, we spam out the event to everyone who's
|
||||||
:: for that event.
|
:: listening for that event.
|
||||||
::
|
::
|
||||||
++ poke
|
++ poke
|
||||||
|= response=hook-response
|
|= response=hook-response
|
||||||
@ -149,13 +159,26 @@
|
|||||||
=+ hook-data=(~(get by hook) (rsh 3 3 -.response))
|
=+ hook-data=(~(get by hook) (rsh 3 3 -.response))
|
||||||
?~ hook-data
|
?~ hook-data
|
||||||
~& [%strange-hook hook response]
|
~& [%strange-hook hook response]
|
||||||
`+>.$
|
[~ +>.$]
|
||||||
~& response=response
|
~& response=response
|
||||||
:_ +>.$
|
:_ +>.$
|
||||||
%+ turn (~(tap in listeners.u.hook-data))
|
%+ turn (~(tap in listeners.u.hook-data))
|
||||||
|= ost=bone
|
|= ost=bone
|
||||||
[ost %diff response]
|
[ost %diff response]
|
||||||
::
|
::
|
||||||
|
:: Here we handle PUT, POST, and DELETE requests. We probably
|
||||||
|
:: should return the result somehow, but that doesn't fit well
|
||||||
|
:: into poke semantics.
|
||||||
|
::
|
||||||
|
++ poke-gh-poke
|
||||||
|
|= [method=meth endpoint=path jon=json]
|
||||||
|
^- [(list move) _+>.$]
|
||||||
|
:_ +>.$ :_ ~
|
||||||
|
:* ost.hid %hiss /poke/[method] `~ %httr %hiss
|
||||||
|
(scan "https://api.github.com{<`path`endpoint>}" auri:epur)
|
||||||
|
method ~ `(taco (crip (pojo jon)))
|
||||||
|
==
|
||||||
|
::
|
||||||
:: When a peek on a path blocks, ford turns it into a peer on
|
:: When a peek on a path blocks, ford turns it into a peer on
|
||||||
:: /scry/{care}/{path}. You can also just peer to this
|
:: /scry/{care}/{path}. You can also just peer to this
|
||||||
:: directly.
|
:: directly.
|
||||||
@ -168,7 +191,7 @@
|
|||||||
^- [(list move) _+>.$]
|
^- [(list move) _+>.$]
|
||||||
?> ?=([care ^] pax)
|
?> ?=([care ^] pax)
|
||||||
:: =- ~& [%peered -] -
|
:: =- ~& [%peered -] -
|
||||||
[abet(cnt now.hid)]:scry:(help i.pax i.t.pax t.t.pax ~)
|
[abet(cnt +(cnt))]:scry:(help i.pax i.t.pax t.t.pax)
|
||||||
::
|
::
|
||||||
:: HTTP response. We make sure the response is good, then
|
:: HTTP response. We make sure the response is good, then
|
||||||
:: produce the result (as JSON) to whoever sent the request.
|
:: produce the result (as JSON) to whoever sent the request.
|
||||||
@ -176,52 +199,56 @@
|
|||||||
++ sigh-httr
|
++ sigh-httr
|
||||||
|= [way=wire res=httr]
|
|= [way=wire res=httr]
|
||||||
^- [(list move) _+>.$]
|
^- [(list move) _+>.$]
|
||||||
?> ?=([care @ @ @ *] way)
|
?. ?=([care @ @ @ *] way)
|
||||||
|
[~ +>.$]
|
||||||
=+ arg=(path (cue (slav %uv i.t.t.way)))
|
=+ arg=(path (cue (slav %uv i.t.t.way)))
|
||||||
=- ?: ?=(%& -<)
|
:_ +>.$ :_ ~
|
||||||
[[ost.hid %diff p]~ +>.$]
|
:+ ost.hid %diff
|
||||||
?~ t.t.t.t.way
|
?+ i.way null/~
|
||||||
[[ost.hid %diff p]~ +>.$]
|
|
||||||
=+ len=(lent t.t.t.t.way)
|
|
||||||
=+ pax=`path`(scag (dec len) `path`t.t.t.t.way)
|
|
||||||
=+ new-arg=`path`(slag (dec len) `path`t.t.t.t.way)
|
|
||||||
=- ~& [%giving -] -
|
|
||||||
[abet(cnt now.hid)]:scry:(help i.way i.t.t.t.way pax new-arg)
|
|
||||||
^- (each sub-result sub-result)
|
|
||||||
?+ i.way `null/~
|
|
||||||
%x
|
%x
|
||||||
?~ r.res
|
?~ r.res
|
||||||
[%| %json (jobe err/s/%empty-response code/(jone p.res) ~)]
|
json/(jobe err/s/%empty-response code/(jone p.res) ~)
|
||||||
=+ jon=(rush q.u.r.res apex:poja)
|
=+ jon=(rush q.u.r.res apex:poja)
|
||||||
?~ jon
|
?~ jon
|
||||||
[%| %json (jobe err/s/%bad-json code/(jone p.res) body/s/q.u.r.res ~)]
|
json/(jobe err/s/%bad-json code/(jone p.res) body/s/q.u.r.res ~)
|
||||||
?. =(2 (div p.res 100))
|
?. =(2 (div p.res 100))
|
||||||
[%| %json (jobe err/s/%request-rejected code/(jone p.res) msg/u.jon ~)]
|
json/(jobe err/s/%request-rejected code/(jone p.res) msg/u.jon ~)
|
||||||
|- ^- (each sub-result sub-result)
|
::
|
||||||
|
:: Once we know we have good data, we drill into the JSON
|
||||||
|
:: to find the specific piece of data referred to by 'arg'
|
||||||
|
::
|
||||||
|
|- ^- sub-result
|
||||||
?~ arg
|
?~ arg
|
||||||
`json/u.jon
|
json/u.jon
|
||||||
=+ dir=((om:jo some) u.jon)
|
=+ dir=((om:jo some) u.jon)
|
||||||
?~ dir
|
?~ dir
|
||||||
[%| %json (jobe err/s/%json-not-object code/(jone p.res) body/u.jon ~)]
|
json/(jobe err/s/%json-not-object code/(jone p.res) body/u.jon ~)
|
||||||
=+ new-jon=(~(get by u.dir) i.arg)
|
=+ new-jon=(~(get by u.dir) i.arg)
|
||||||
$(arg t.arg, u.jon ?~(new-jon ~ u.new-jon))
|
$(arg t.arg, u.jon ?~(new-jon ~ u.new-jon))
|
||||||
::
|
::
|
||||||
%y
|
%y
|
||||||
?~ r.res
|
?~ r.res
|
||||||
~& [err/s/%empty-response code/(jone p.res)]
|
~& [err/s/%empty-response code/(jone p.res)]
|
||||||
[%| arch/*arch]
|
arch/*arch
|
||||||
=+ jon=(rush q.u.r.res apex:poja)
|
=+ jon=(rush q.u.r.res apex:poja)
|
||||||
?~ jon
|
?~ jon
|
||||||
~& [err/s/%bad-json code/(jone p.res) body/s/q.u.r.res]
|
~& [err/s/%bad-json code/(jone p.res) body/s/q.u.r.res]
|
||||||
[%| arch/*arch]
|
arch/*arch
|
||||||
?. =(2 (div p.res 100))
|
?. =(2 (div p.res 100))
|
||||||
~& [err/s/%request-rejected code/(jone p.res) msg/u.jon]
|
~& [err/s/%request-rejected code/(jone p.res) msg/u.jon]
|
||||||
[%| arch/*arch]
|
arch/*arch
|
||||||
|
::
|
||||||
|
:: Once we know we have good data, we drill into the JSON
|
||||||
|
:: to find the specific piece of data referred to by 'arg'
|
||||||
|
::
|
||||||
|
|- ^- sub-result
|
||||||
=+ dir=((om:jo some) u.jon)
|
=+ dir=((om:jo some) u.jon)
|
||||||
?~ dir
|
?~ dir
|
||||||
~& [err/s/%json-not-object code/(jone p.res) body/u.jon]
|
[%arch `(shax (jam u.jon)) ~]
|
||||||
[%| arch/*arch]
|
?~ arg
|
||||||
[%& %arch `(shax (jam u.jon)) (~(run by u.dir) ,~)]
|
[%arch `(shax (jam u.jon)) (~(run by u.dir) ,~)]
|
||||||
|
=+ new-jon=(~(get by u.dir) i.arg)
|
||||||
|
$(arg t.arg, u.jon ?~(new-jon ~ u.new-jon))
|
||||||
==
|
==
|
||||||
::
|
::
|
||||||
:: We can't actually give the response to pretty much anything
|
:: We can't actually give the response to pretty much anything
|
||||||
@ -232,23 +259,3 @@
|
|||||||
^- (unit (unit (pair mark ,*)))
|
^- (unit (unit (pair mark ,*)))
|
||||||
~ ::``noun/[ren tyl]
|
~ ::``noun/[ren tyl]
|
||||||
--
|
--
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
::
|
|
||||||
::++ poke-json
|
|
||||||
:: |= jon=json
|
|
||||||
:: ^- [(list move) _+>.$]
|
|
||||||
:: =+ ^- [repo=json sender=json hok=(list ,@t) hook-id=@t zen=json]
|
|
||||||
:: %- need
|
|
||||||
:: %. jon
|
|
||||||
:: => jo
|
|
||||||
:: (ot repository/some sender/some hook/(ot events/(ar so) ~) 'hook_id'^no zen/some ~)
|
|
||||||
:: ?. ?=([@ ~] hok)
|
|
||||||
:: ~& [%weird-hook hook-id hok]
|
|
||||||
:: [~ +>.$]
|
|
||||||
:: ~& [%id hook-id hok]
|
|
||||||
:: =+ old-bones=`(set bone)`(biff (~(get by hook) i.hok) tail)
|
|
||||||
:: [~ +>.$(hook (~(put by hook) i.hok [hook-id (~(put in old-bones) ost.hid)]))]
|
|
||||||
.
|
|
||||||
|
179
ape/gh/split.hoon
Normal file
179
ape/gh/split.hoon
Normal file
@ -0,0 +1,179 @@
|
|||||||
|
!:
|
||||||
|
|%
|
||||||
|
:: Splits a path into the endpoint prefix and the remainder,
|
||||||
|
:: which is assumed to be a path within the JSON object. We
|
||||||
|
:: choose the longest legal endpoint prefix.
|
||||||
|
::
|
||||||
|
++ split
|
||||||
|
|= pax=path
|
||||||
|
:: =- ~& [%pax pax - (valid-endpoint pax)] -
|
||||||
|
=+ l=(lent pax)
|
||||||
|
|- ^- [path path]
|
||||||
|
?~ l
|
||||||
|
[~ pax]
|
||||||
|
?: ?=(valid-endpoint (scag l pax))
|
||||||
|
[(scag l pax) (slag l pax)]
|
||||||
|
$(l (dec l))
|
||||||
|
::
|
||||||
|
:: These are all the github GET endpoints, sorted with
|
||||||
|
:: `env LC_ALL=C sort`
|
||||||
|
::
|
||||||
|
++ valid-endpoint
|
||||||
|
$? [%emojis ~]
|
||||||
|
[%events ~]
|
||||||
|
[%feeds ~]
|
||||||
|
[%gists %public ~]
|
||||||
|
[%gists %starred ~]
|
||||||
|
[%gists gist-id=@ta %comments id=@ta ~]
|
||||||
|
[%gists gist-id=@ta %comments ~]
|
||||||
|
[%gists id=@ta %commits ~]
|
||||||
|
[%gists id=@ta %forks ~]
|
||||||
|
[%gists id=@ta %star ~]
|
||||||
|
[%gists id=@ta sha=@ta ~]
|
||||||
|
[%gists id=@ta ~]
|
||||||
|
[%gists ~]
|
||||||
|
[%gitignore %templates language=@ta ~]
|
||||||
|
[%gitignore %templates ~]
|
||||||
|
[%issues ~]
|
||||||
|
[%licenses license=@ta ~]
|
||||||
|
[%licenses ~]
|
||||||
|
[%meta ~]
|
||||||
|
[%networks onwer=@ta repo=@ta %events ~]
|
||||||
|
[%notifications %threads id=@ta %subscription ~]
|
||||||
|
[%notifications %threads id=@ta ~]
|
||||||
|
[%notifications ~]
|
||||||
|
[%organizations ~]
|
||||||
|
[%orgs org=@ta %events ~]
|
||||||
|
[%orgs org=@ta %hooks id=@ta ~]
|
||||||
|
[%orgs org=@ta %hooks ~]
|
||||||
|
[%orgs org=@ta %members username=@ta ~]
|
||||||
|
[%orgs org=@ta %members ~]
|
||||||
|
[%orgs org=@ta %memberships username=@ta ~]
|
||||||
|
[%orgs org=@ta %migrations id=@ta %archive ~]
|
||||||
|
[%orgs org=@ta %migrations id=@ta ~]
|
||||||
|
[%orgs org=@ta %migrations ~]
|
||||||
|
[%orgs org=@ta %'public_members' username=@ta ~]
|
||||||
|
[%orgs org=@ta %'public_members' ~]
|
||||||
|
[%orgs org=@ta %repos ~]
|
||||||
|
[%orgs org=@ta %teams ~]
|
||||||
|
[%orgs org=@ta ~]
|
||||||
|
[%'rate_limit' ~]
|
||||||
|
[%repos owner=@ta repo=@ta %assignees assignee=@ta ~]
|
||||||
|
[%repos owner=@ta repo=@ta %assignees ~]
|
||||||
|
[%repos owner=@ta repo=@ta %branches branch=@ta ~]
|
||||||
|
[%repos owner=@ta repo=@ta %branches ~]
|
||||||
|
[%repos owner=@ta repo=@ta %collaborators username=@ta ~]
|
||||||
|
[%repos owner=@ta repo=@ta %collaborators ~]
|
||||||
|
[%repos owner=@ta repo=@ta %comments id=@ta ~]
|
||||||
|
[%repos owner=@ta repo=@ta %comments ~]
|
||||||
|
[%repos owner=@ta repo=@ta %commits ref=@ta %comments ~]
|
||||||
|
[%repos owner=@ta repo=@ta %commits ref=@ta %status ~]
|
||||||
|
[%repos owner=@ta repo=@ta %commits ref=@ta %statuses ~]
|
||||||
|
[%repos owner=@ta repo=@ta %commits sha=@ta ~]
|
||||||
|
[%repos owner=@ta repo=@ta %commits ~]
|
||||||
|
[%repos owner=@ta repo=@ta %compare base-head=@ta ~]
|
||||||
|
[%repos owner=@ta repo=@ta %contents path=@ta ~]
|
||||||
|
[%repos owner=@ta repo=@ta %contributors ~]
|
||||||
|
[%repos owner=@ta repo=@ta %deployments id=@ta %statuses ~]
|
||||||
|
[%repos owner=@ta repo=@ta %deployments ~]
|
||||||
|
[%repos owner=@ta repo=@ta %events ~]
|
||||||
|
[%repos owner=@ta repo=@ta %forks ~]
|
||||||
|
[%repos owner=@ta repo=@ta %git %blobs sha=@ta ~]
|
||||||
|
[%repos owner=@ta repo=@ta %git %commits sha=@ta ~]
|
||||||
|
[%repos owner=@ta repo=@ta %git %refs ref=@ta ~]
|
||||||
|
[%repos owner=@ta repo=@ta %git %refs ~]
|
||||||
|
[%repos owner=@ta repo=@ta %git %tags sha=@ta ~]
|
||||||
|
[%repos owner=@ta repo=@ta %git %trees sha=@ta ~]
|
||||||
|
[%repos owner=@ta repo=@ta %hooks id=@ta ~]
|
||||||
|
[%repos owner=@ta repo=@ta %hooks ~]
|
||||||
|
[%repos owner=@ta repo=@ta %issues %comments id=@ta ~]
|
||||||
|
[%repos owner=@ta repo=@ta %issues %comments ~]
|
||||||
|
[%repos owner=@ta repo=@ta %issues %events id=@ta ~]
|
||||||
|
[%repos owner=@ta repo=@ta %issues %events ~]
|
||||||
|
[%repos owner=@ta repo=@ta %issues issue-number=@ta %events ~]
|
||||||
|
[%repos owner=@ta repo=@ta %issues number=@ta %comments ~]
|
||||||
|
[%repos owner=@ta repo=@ta %issues number=@ta %labels ~]
|
||||||
|
[%repos owner=@ta repo=@ta %issues number=@ta ~]
|
||||||
|
[%repos owner=@ta repo=@ta %issues ~]
|
||||||
|
[%repos owner=@ta repo=@ta %keys id=@ta ~]
|
||||||
|
[%repos owner=@ta repo=@ta %keys ~]
|
||||||
|
[%repos owner=@ta repo=@ta %labels name=@ta ~]
|
||||||
|
[%repos owner=@ta repo=@ta %labels ~]
|
||||||
|
[%repos owner=@ta repo=@ta %language ~]
|
||||||
|
[%repos owner=@ta repo=@ta %license ~]
|
||||||
|
[%repos owner=@ta repo=@ta %milestones number=@ta %labels ~]
|
||||||
|
[%repos owner=@ta repo=@ta %milestones number=@ta ~]
|
||||||
|
[%repos owner=@ta repo=@ta %milestones ~]
|
||||||
|
[%repos owner=@ta repo=@ta %notifications ~]
|
||||||
|
[%repos owner=@ta repo=@ta %pages %builds %latest ~]
|
||||||
|
[%repos owner=@ta repo=@ta %pages %builds ~]
|
||||||
|
[%repos owner=@ta repo=@ta %pages ~]
|
||||||
|
[%repos owner=@ta repo=@ta %pulls %comments id=@ta ~]
|
||||||
|
[%repos owner=@ta repo=@ta %pulls %comments ~]
|
||||||
|
[%repos owner=@ta repo=@ta %pulls number=@ta %comments ~]
|
||||||
|
[%repos owner=@ta repo=@ta %pulls number=@ta %commits ~]
|
||||||
|
[%repos owner=@ta repo=@ta %pulls number=@ta %files ~]
|
||||||
|
[%repos owner=@ta repo=@ta %pulls number=@ta %merge ~]
|
||||||
|
[%repos owner=@ta repo=@ta %pulls number=@ta ~]
|
||||||
|
[%repos owner=@ta repo=@ta %pulls ~]
|
||||||
|
[%repos owner=@ta repo=@ta %readme ~]
|
||||||
|
[%repos owner=@ta repo=@ta %releases %assets id=@ta ~]
|
||||||
|
[%repos owner=@ta repo=@ta %releases %latest ~]
|
||||||
|
[%repos owner=@ta repo=@ta %releases %tags tag=@ta ~]
|
||||||
|
[%repos owner=@ta repo=@ta %releases id=@ta %assets ~]
|
||||||
|
[%repos owner=@ta repo=@ta %releases id=@ta ~]
|
||||||
|
[%repos owner=@ta repo=@ta %releases ~]
|
||||||
|
[%repos owner=@ta repo=@ta %stargazers ~]
|
||||||
|
[%repos owner=@ta repo=@ta %stats %'commit_activity' ~]
|
||||||
|
[%repos owner=@ta repo=@ta %stats %contributors ~]
|
||||||
|
[%repos owner=@ta repo=@ta %stats %participation ~]
|
||||||
|
[%repos owner=@ta repo=@ta %stats %'punch_card' ~]
|
||||||
|
[%repos owner=@ta repo=@ta %subscribers ~]
|
||||||
|
[%repos owner=@ta repo=@ta %subscription ~]
|
||||||
|
[%repos owner=@ta repo=@ta %tags ~]
|
||||||
|
[%repos owner=@ta repo=@ta %teams ~]
|
||||||
|
[%repos owner=@ta repo=@ta archive-format=@ta ref=@ta ~]
|
||||||
|
[%repos owner=@ta repo=@ta ~]
|
||||||
|
[%repositories ~]
|
||||||
|
[%search %code ~]
|
||||||
|
[%search %issues ~]
|
||||||
|
[%search %repositories ~]
|
||||||
|
[%search %users ~]
|
||||||
|
[%teams id=@ta %members ~]
|
||||||
|
[%teams id=@ta %memberships username=@ta ~]
|
||||||
|
[%teams id=@ta %repos owner=@ta repo=@ta ~]
|
||||||
|
[%teams id=@ta ~]
|
||||||
|
[%user %emails ~]
|
||||||
|
[%user %followers ~]
|
||||||
|
[%user %following username=@ta ~]
|
||||||
|
[%user %following ~]
|
||||||
|
[%user %issues ~]
|
||||||
|
[%user %keys id=@ta ~]
|
||||||
|
[%user %keys ~]
|
||||||
|
[%user %memberships %orgs org=@ta ~]
|
||||||
|
[%user %memberships %orgs ~]
|
||||||
|
[%user %orgs ~]
|
||||||
|
[%user %repos ~]
|
||||||
|
[%user %starred owner=@ta repo=@ta ~]
|
||||||
|
[%user %starred ~]
|
||||||
|
[%user %subscriptions ~]
|
||||||
|
[%user %teams ~]
|
||||||
|
[%user username=@ta %orgs ~]
|
||||||
|
[%user ~]
|
||||||
|
[%users username=@ta %events %orgs org=@ta ~]
|
||||||
|
[%users username=@ta %events %public ~]
|
||||||
|
[%users username=@ta %events ~]
|
||||||
|
[%users username=@ta %followers ~]
|
||||||
|
[%users username=@ta %following target-user=@ta ~]
|
||||||
|
[%users username=@ta %following ~]
|
||||||
|
[%users username=@ta %gists ~]
|
||||||
|
[%users username=@ta %keys ~]
|
||||||
|
[%users username=@ta %'received_events' %public ~]
|
||||||
|
[%users username=@ta %'received_events' ~]
|
||||||
|
[%users username=@ta %starred ~]
|
||||||
|
[%users username=@ta %subscriptions ~]
|
||||||
|
[%users username=@ta ~]
|
||||||
|
[%users usernmae=@ta %repos ~]
|
||||||
|
[%users ~]
|
||||||
|
==
|
||||||
|
--
|
@ -6,6 +6,7 @@
|
|||||||
!:
|
!:
|
||||||
::::
|
::::
|
||||||
::
|
::
|
||||||
|
~& %
|
||||||
:- %say
|
:- %say
|
||||||
|= [^ [arg=path ~] vane=?(%c %g)]
|
|= [^ [arg=path ~] vane=?(%c %g)]
|
||||||
=+ lon=((hard arch) .^((cat 3 vane %y) arg))
|
=+ lon=((hard arch) .^((cat 3 vane %y) arg))
|
||||||
|
6
mar/gh/poke.hoon
Normal file
6
mar/gh/poke.hoon
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
|_ [method=meth endpoint=path jon=json]
|
||||||
|
++ grab
|
||||||
|
|%
|
||||||
|
++ noun ,[method=meth endpoint=path jon=json]
|
||||||
|
--
|
||||||
|
--
|
Loading…
Reference in New Issue
Block a user